Isaac Sim Version [√] 2023.1.1
Operating System [√]Ubuntu 20.04
I want to be able to make the robot arm move where I need it to, and I noticed this example: “standalone_examples/api/omni.isaac.universal_robots/follow_target_with_rmpflow.py”, which enables UR10 to follow the cube, so I applied this example to UR5e and set the cube’s position to an artificially given one:
actions = my_controller.forward(
target_end_effector_position= np.array([0.11637,0.57264,0.35]),
target_end_effector_orientation=euler_angles_to_quat(np.array([-np.pi, 0, np.pi]))
)
articulation_controller.apply_action(actions)
However, by reading the position of the arm after arrival and comparing it to the given position, I found that there is a small error in all six dimensions, as shown in the figure below:
I found that the problem may be related to the usd model of the arm, because I used the “Gain Tuner” plugin to adjust the damping and stiffness of each joint, and I found that the error generated by the arrival operation using the RMPflow controller is very different when I given the different values.For example, if I use a smaller damping and stiffness, the error is larger than if I use a larger damping and stiffness:
All the documents I use are in this compressed package for reference.
So I have a couple of questions I’d like to ask:
-
Is it true that the damping and stiffness gain of the usd file I mentioned above affects the control accuracy of the RMPflow controller?If so, how do I adjust it to a suitable value, aimlessly adjusting it will take a very long time and may not be completely accurate, so are there any values I can use as a reference?
-
Is there any other way to accurately control the motion of the arm besides the RMPflow controller (I also tried the ik controller, which is even worse than the RMPflow)
-
If I want the arm to arrive at position A before it arrives at position B, how can I tell that the arm has arrived at A? As far as I know, in Isaac sim, the movement of robotic arm is not like other simulation software (such as Coppeliasim) that can reach the position in one step, but need to keep approaching, and then reset the controller before another position can be given, so how can I judge when I can reset the controller?My current idea is to use a delay or error threshold (difference between the given position and the current position, if the difference is less than a certain value, then the controller will be judged to have arrived), is there any other better way?
It’s a bit of a problem, but it’s really been bugging me for a long time, so any help you can provide would be greatly appreciated!
rmpflow_test.zip (10.4 MB)