cinematic motion algorithm
Closed this issue · 16 comments
hi, sorry to open ticket for my question , but actually I'm little lost to find the methods can convert input location (Cartesian , polar) to the optimized cinematic motions of each axis? for example how to defined the best path from A to B coordinates and how it converted the cinematic motion for each axis? what is the optimization function & type ?how to define cinematic motion parameters of specific arms? I really appreciated for your hint
what do you mean when you say "cinematic" motion?
Thor does not, at this time, afaik, have a motion planning software that would, say, let you plot lines in space and then move the arm to meet those points, like this: https://www.youtube.com/watch?v=AO57-fZUWho
sorry I mean kinematic , you know, every robot has its own physical parts and degree of freedom so to define path between two given points we need the calculate some dynamic equations to find this patch and other parameters(like velocity and acceleration ) , however there is no unique path between two given points , thus some optimization algorithm applied to find the best and smooth path , I saw couple of repo use the CNC planner code to implemented this path but not find yet the path optimization algorithm
Frequently the shortest path is taken. I know the number of steps each motor must take and the speed of the slowest motor. I then step all motors so that they arrive simultaneously at the destination. There are times when this solution is bad - it does not take into account impossible geometries or singularities BUT if you can avoid them it works great.
sorry, to calculate the kinematics is how you get the number of steps of each motor. I have some examples in https://github.com/MarginallyClever/Robot-Overlord-App/ for 4 and 5 DOF arms. Maybe that will help? I don't remember atm if THOR is supported yet, but I'd like to see it happen.
Hi! Sorry for the late reply.
Currently Thor moves using Forward Kinematics (at least mine). The calculations involved in the movement are responsibility of the firmware (GRBL). At this time there is not implemented neither a control using Inverse Kinematics nor movement optimization.
If it helps here it's the solution for the Forward Kinematics. And here the solution of the Inverse Kinematics of Thor.
Also, @Danny-VdH were developing a GUI to control robotic arms. You can chek it out too ;)
Hope it helps!
If I have the relative distance between each joint in the system and an simplified STL of each THOR part I could add it to Robot Overlord. Then it would send FK commands to the arm, much as it does with my other robots. If that's of interest to you, make it so. I could get it implemented before the end of August.
@i-make-robots That sounds good! I think that you have all the distances you need in this image.
Hi @i-make-robots
I just upload the STL files of each articulation
Also, the distances are the following, understanding global positions as the XYZ coordinates of the space and the local position as the XYZ coordinates of the piece. Both coordinates are expressed in mm.
- Base
- Global position (X,Y,Z): 0,0,0
- Rotation axis: None
- Rotation axis local position (X,Y,Z): None
- Articulation 1
- Global position (X,Y,Z): 0,0,49
- Rotation axis: Z
- Rotation axis local position (X,Y,Z): 0,0,0
- Articulation 2
- Global position (X,Y,Z): 0,0,137
- Rotation axis: Y
- Rotation axis local position (X,Y,Z): 0,0,65
- Articulation 3
- Global position (X,Y,Z): 0,0,295
- Rotation axis: Y
- Rotation axis local position (X,Y,Z): 0,0,64
- Articulation 4
- Global position (X,Y,Z): 0,0,377,5
- Rotation axis: Z
- Rotation axis local position (X,Y,Z): 0,0,0
- Articulation 5&6
- Global position (X,Y,Z): 0,0,510
- Art 5 Rotation axis: Y
- Art 5 Rotation axis local position (X,Y,Z): 0,0,47
- Art 6 Rotation axis: Z
- Art 6 Rotation axis local position (X,Y,Z): 0,0,0
I don't really know if the STL of the last 2 articulation will work (because of coupled movements). Probably splitting it into 2 pieces (the column + gears for the 5th and the rest for the 6th) would make the work. I'll do it now, just in case.
Split done.
The new distances would be:
- Articulation 5
- Global position (X,Y,Z): 0,0,510
- Art Rotation axis: Y
- Art Rotation axis local position (X,Y,Z): 0,0,47
- Articulation 6
- Global position (X,Y,Z): 0,0,610.431
- Art Rotation axis: Z
- Art Rotation axis local position (X,Y,Z): 0,0,0
I saw it! Awesome work!
Expect some contributions and feedback from my side! :)