-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
adding robots for Analytical Kinematics #362
Comments
Reminds me of something related to IKFast? Just 2 cents. http://docs.ros.org/en/kinetic/api/moveit_tutorials/html/doc/ikfast/ikfast_tutorial.html |
hi @yck011522, thanks a lot for your comment and the reference. Its very relevant and helpful! I'll look into it further. thank you |
hi @Coroush . IKFast AFAIK is an implementation of analytical kinematic solver. Pretty much it is a bunch of close form sine cosine functions. The closed form solution only works for certain kinematics chains, in particularly, not more than 6 DOF. For more than 6DOF, you have a continuous solution instead of a discrete Configuration. That is no longer a close form equation. The link reference to Lobster Plugin (http://archive.fabacademy.org/archives/2017/fablabcept/students/184/assets/lobster_ik.pdf) is interesting. I remember back then, 4 to 5 years ago, I read a primer on how Lobster work, and instead of equations, it uses Rhino to perform projections and circle intersection. If I remember correctly, there are only a few intersections to solve and you can get the whole IK. The first thing to solve is the wrist point, it is just the TCP moved backwards along Z. The next is projection of the wrist point to the robot base plane, that point's angle relative to the base zero direction will decide J0 angle. J0 can be forward or backward (+-180deg). For each case, a circle intersection from shoulder center and wrist center solves for the elbow center, typically it will be two intersections, resulting in elbow up and elbow down config. J4 is typically a continuous in-line joint and has a positive and negative solution. So in total 8 possible config, without considering joint limits. |
Oh actually I'm completely missing your point of the Feature Request. I guess you want |
If you want to combine it with a linear track, a easy way is to fix your linear track at some value, and then do 6DOF IK. Depends on your application, you can sample multiple Linear Track values and see if you get any good IK results. |
thanks a lot @yck011522 for explaining how the lobster and IKFast solver works! super interesting and helpful 🙌 yes the request i had was about having this extension from your side if that's possible (or coming with a more general solution of adding custom robots) so it can be easier when I update Thanks again |
@Coroush Cool. Can you show me how you get the 4 points for the ABB_IRB6700_150_320 robot? I believe if @romanarust or @gonzalocasas can verify that your values are correct, we can add that robot to the main branch too? By the way, when you say custom robots, do you mean (1) other 6DOF robots belonging to the SphericalWrist and the OffsetWrist type? or do you mean by (2) any RobotModel that can be described with an URDF? I believe (1) is definitely possible. For example how you are already creating it but you did it in I believe it is also possible (but not yet) to parse an URDF or RobotModel class of a 6 DOF robot corresponding to the SphericalWrist and the OffsetWrist type and interogate that 4 points out. However, (2) is rather impossible because of the lack of closed form solution available. |
awesome! thank you @yck011522. here is how I extract the points:
yes i meant this option ! maybe it will be quite easy to read these points (axis planes origins), similar to the pictures i've attached, from the URDF files? there is even no need for calculating intersections. |
Cool. I'm not the maintainer of the repo so you will have to see what they think regarding the addition. Are you sure the config is read in the home config, not the zero config? The IK solver is rather undocumented on how the 4 points are defined (@romanarust) And yes, if we can be sure how the 4 points are extracted. I think it is rather simple to read out the 4 points just from parsing the URDF or RobotModel object. For example, we can set the config of a RobotModel and just read out the joint origins. I think it corresponds to J2, J3, J5, J6 in Link 0 (robot base) coordinates. |
I'm a bit late to the party, but very cool conversation! 👍 Here's an example script for how to use a custom-defined one: https://github.com/compas-teaching/COMPAS-II-FS2022/blob/main/lecture_03/218_inverse_kinematics_dh_params.py (and in Originally, we were not aiming at adding all robots + parameters for these analytical solver to |
Oh amazing! this example is what I was looking for :) thanks a lot! |
@gonzalocasas if I follow based on your example, would I need to manually do the pre_processing and post_processing for joint values in case of |
Feature Request
It would be nice to allow using custom robots with
Analytical Kinematics
solver.Details
Is your feature request related to a problem? Please describe.
Currently there are only a very limited robots available to use with Analytical Kinematics solver.
Describe the solution you'd like
for example:
Describe alternatives you've considered
Manually modified the local python files in compas (forking):
The text was updated successfully, but these errors were encountered: