Closed ashuRMS closed 3 weeks ago
The IK function from the API calls the same numerical algorithm as the robot does during runtime. The algorithm does not look for a final solution right away but instead, every millisecond (or as fast as possible when not used while the robot is moving), the robot identifies a unit vector in the direction of the final destination and takes a single step along that unit vector such that:
dq = pinv(J)*dr
with dq = displacement of the joint J = jacobian dr = a step that the robot expects to be able to make in 1 ms.
While this algorithm is very flexible with the type of geometry it can support, it has the downside of being very sensitive to initial guess values because it cannot know whether or not it can reach the destination before it either gets there or runs into an issue.
Since you are hitting a joint limit, this means that the algorithm is virtually moving the robot in a direction which indeed hits a joint limit. Unfortunately, my only suggestion is to try even more guess values.
Thank you @martinleroux I thought that if I specified the guess as the home position, I would be able to get the accurate solution, but it is not working. Anyway, I will look for some other approach.
Description
I am using Kinova Gen3 lite arm. I have the latest firmwares as well. I have written code to solve the inverse kinematics, that will use the
/gen3_lite/base/compute_inverse_kinematics
service. I am getting the following error.I tried with different
guess
values but still the service was not able to solve inverse kinematics even for simple goal positions like thehome position
Version
ROS distribution : I am using ROS Noetic
Branch and commit you are using : https://github.com/Kinovarobotics/ros_kortex/tree/noetic-devel
Steps to reproduce
Code example (if necessary)
Expected behavior
It should return the joint angles for the given end effector pose
Any other information
Any other information you believe the maintainers need to know.