2018 Fall 期末專案示範網站

Modelica << Previous Next >> Kinematics

電腦輔助設計議題

六軸機械手臂

利用 OnshapeV-rep 驗證 inverse kinematics.pdf 之運算結果

IKBT: https://arxiv.org/pdf/1711.05412.pdf

Robot Manipulators and Control Systems.pdf

Kinematic Analysis and Design of 3dof robot.pdf

Kinematics and Workspace of a 2-Link Planar Manipulator Using Python

https://sajidnisar.github.io/posts/python_kinematics_dh

Rigidbody Dynamics

http://royfeatherstone.org/spatial/

Niryo one

https://niryo.com 

https://github.com/NiryoRobotics/niryo_one 

bom_niryo.pdf

Poppy robot

https://www.poppy-project.org/en/ 

https://github.com/poppy-project/pypot 

參考連結:

http://www.coppeliarobotics.com/helpFiles/en/inverseKinematicsTutorial.htm

http://www.coppeliarobotics.com/helpFiles/en/basicsOnIkGroupsAndIkElements.htm

http://www.coppeliarobotics.com/helpFiles/en/inverseKinematicsModule.htm

https://www.cnblogs.com/21207-iHome/p/7420733.html 


鋼球運動系統

https://github.com/KmolYuan/Pyslvs-PyQt5 


KLL3PP

https://github.com/mdecourse/kll3pp 


摺疊自行車

http://rattlecad.sourceforge.net/ 


重力計時器


平面機構模擬 (Geometric Constrain Solver) 應用

https://github.com/KmolYuan/python-solvespace 

在近端利用 Msys2 編譯 GCS 動態程式庫, 之後建立 Python 呼叫範例.

在 Github 嘗試利用 https://travis-ci.org/  進行整合.

tinycadlib 程式庫研究: https://github.com/KmolYuan/pyslvs/blob/master/src/tinycadlib.pyx 

四連桿運動模擬

from math import pi, cos, sin, sqrt, acos
import matplotlib.pyplot as plt
 
radian = 180/pi
degree = pi/180
 
#PLAP
def plap(ax, ay, ac, bac, bx, by, pos):
    if pos == 0:
        cx= ac*cos(bac - acos((ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 + abs(ax - bx)**2 - abs(ay - by)**2)/(2*sqrt(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2)*abs(ax - bx)))) + ax 
        cy= ac*sin(bac - acos((ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 + abs(ax - bx)**2 - abs(ay - by)**2)/(2*sqrt(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2)*abs(ax - bx)))) + ay
    else:
        cx= ac*cos(bac + acos((ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 + abs(ax - bx)**2 - abs(ay - by)**2)/(2*sqrt(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2)*abs(ax - bx)))) + ax 
        cy= ac*sin(bac + acos((ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 + abs(ax - bx)**2 - abs(ay - by)**2)/(2*sqrt(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2)*abs(ax - bx)))) + ay
    return cx, cy
 
#PLLP
def pllp(ax, ay, ac, cb, bx, by, pos):
    if pos == 0:
        cx =  -((ay - by)*(-ac**2*ay + ac**2*by + ax**2*ay + ax**2*by - 2*ax*ay*bx - 2*ax*bx*by + ay**3 - ay**2*by + ay*bx**2 - ay*by**2 + ay*cb**2 + bx**2*by + by**3 - by*cb**2 - sqrt((-ac**2 + 2*ac*cb + ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 - cb**2)*(ac**2 + 2*ac*cb - ax**2 + 2*ax*bx - ay**2 + 2*ay*by - bx**2 - by**2 + cb**2))*(ax - bx)) + (ac**2 - ax**2 - ay**2 + bx**2 + by**2 - cb**2)*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))/(2*(ax - bx)*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))
        cy =  (-ac**2*ay + ac**2*by + ax**2*ay + ax**2*by - 2*ax*ay*bx - 2*ax*bx*by + ay**3 - ay**2*by + ay*bx**2 - ay*by**2 + ay*cb**2 + bx**2*by + by**3 - by*cb**2 + sqrt((-ac**2 + 2*ac*cb + ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 - cb**2)*(ac**2 + 2*ac*cb - ax**2 + 2*ax*bx - ay**2 + 2*ay*by - bx**2 - by**2 + cb**2))*(-ax + bx))/(2*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))
    else:
        cx =  -((ay - by)*(-ac**2*ay + ac**2*by + ax**2*ay + ax**2*by - 2*ax*ay*bx - 2*ax*bx*by + ay**3 - ay**2*by + ay*bx**2 - ay*by**2 + ay*cb**2 + bx**2*by + by**3 - by*cb**2 + sqrt((-ac**2 + 2*ac*cb + ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 - cb**2)*(ac**2 + 2*ac*cb - ax**2 + 2*ax*bx - ay**2 + 2*ay*by - bx**2 - by**2 + cb**2))*(ax - bx)) + (ac**2 - ax**2 - ay**2 + bx**2 + by**2 - cb**2)*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))/(2*(ax - bx)*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))
        cy =  (-ac**2*ay + ac**2*by + ax**2*ay + ax**2*by - 2*ax*ay*bx - 2*ax*bx*by + ay**3 - ay**2*by + ay*bx**2 - ay*by**2 + ay*cb**2 + bx**2*by + by**3 - by*cb**2 + sqrt((-ac**2 + 2*ac*cb + ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 - cb**2)*(ac**2 + 2*ac*cb - ax**2 + 2*ax*bx - ay**2 + 2*ay*by - bx**2 - by**2 + cb**2))*(ax - bx))/(2*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))
    return cx, cy

def crank_rocker(angle, p1x, p1y, p2x, p2y, len1, len2, len3, len4, len5):
    p4x, p4y = plap(p1x, p1y, len1, angle, p2x, p2y, 0)
    #print("cx=", cx, "cy=", cy)
    p5x, p5y = pllp(p4x, p4y, len2, len3, p2x, p2y, 0)
    #print("dx=", dx, "dy=", dy)
    p3x, p3y = pllp(p4x, p4y, len4, len5, p5x, p5y, 0)
    #print("ex=", ex, "ey=", ey)
    return p3x, p3y
    
#主程式
Xval  = []
Yval  = []
inc = 5

for i in range(0, 360+inc, inc):
    try:
        p3x, p3y = crank_rocker(i*degree, 0, 0, 90, 0, 35, 70, 70, 40, 40)
        Xval += [p3x]
        Yval += [p3y]
        print(i, ":", round(p3x, 4), round(p3y, 4))
    except:
        pass
print ("Solve Completed")

plt.plot(Xval, Yval)
plt.xlabel('x coordinate')
plt.ylabel('y coordinate')
#plt.title("Involute - "+str(degree)+" deg")
plt.show()

上述四連桿運動模擬, 採用 Solvespace GCS 動態連結程式庫執行運算: sgcs_2_1_py3.7.1.7z (使用可攜 Python 3.7.1 進行測試)

參考資料

https://github.com/AliShug/EvoArm 

進階機構模擬與合成議題

機構之構造合成.pdf

QUALITATIVE KINEMATICS 專利

Automated Configuration Analysis of Planar Eight-Bar Linkages.pdf

Automated Generation of Linkage Loop Equations for Planar One Degree-of-Freedom Linkages.pdf

Automated Synthesis of Planar Mechanisms with Revolute, Prismatic and Pin-In-Slot Joints.pdf


Modelica << Previous Next >> Kinematics