I’m trying to reproduce the results in the “Advanced Tutorials: Adding a new manipulator” and more specifically “Adding a Follow Target Task”. After completing the tutorial for my robot, I get the following error printed in the console: IK did not converge to a solution. No action is being taken.
I can’t seem to figure out what I’m doing wrong:
My robot_descriptor.yaml
is as follows:
api_version: 1.0
cspace:
- shoulder_L
- elbow_L
- insertion_L
- tool_roll_L
- wrist_joint_L
root_link: world
default_q: [
0.00, 0.00, 0.00, 0.00, 0.00
]
cspace_to_urdf_rules:
composite_task_spaces:
I’ve formatted my robot.urdf
exactly as the tutorial’s cobotta_pro_900.usd
as evidenced by the following screenshot:
<?xml version="1.0" ?>
<robot name="robot_single">
<link name="world"/>
<joint name="joint_w" type="fixed">
<parent link="world"/>
<child link="base_link_L"/>
</joint>
<link name="base_link_L">
<visual>
<geometry>
<mesh filename="../meshes/dae/left_arm_d/base_w_motors.dae" />
</geometry>
<origin rpy="0 0 1.57075" xyz="0 0 0" />
</visual>
<collision>
<geometry>
<mesh filename="../meshes/dae/left_arm_d/base_w_motors.dae" />
</geometry>
<origin rpy="0 0 1.57075" xyz="0 0 0" />
</collision>
<inertial>
<mass value="0.1"/>
<origin rpy="0.000000 0.000000 0.000000" xyz="0.000000 0.000000 0.000000"/>
<inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1"/>
</inertial>
</link>
<joint name="shoulder_L" type="revolute">
<axis xyz="0 0 1" />
<limit effort="1" lower="-3.1415" upper="3.1415" velocity="0.5" />
<origin rpy="1.5707963267948966 -1.9383641042662245 0" xyz="0.0 0.0 0" />
<parent link="base_link_L" />
<child link="link1_L" />
<dynamics damping="9.5" friction="0"/>
</joint>
<link name="link1_L">
<visual>
<geometry>
<mesh filename="../meshes/dae/left_arm_d/link1_w_cover.dae" />
</geometry>
<origin rpy="0 1.5705 -0.36751734624250643" xyz="0 0 0" />
</visual>
<collision>
<geometry>
<mesh filename="../meshes/dae/left_arm_d/link1_w_cover.dae" />
</geometry>
<origin rpy="0 1.5705 -0.36751734624250643" xyz="0 0 0" />
</collision>
<inertial>
<mass value="0.50307"/>
<origin rpy="0.000000 0.000000 0.000000" xyz="0.000000 0.000000 0.000000"/>
<inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1"/>
</inertial>
</link>
etc...
The ik_solver.py is formatted as follows:
from omni.isaac.motion_generation import ArticulationKinematicsSolver, LulaKinematicsSolver
from omni.isaac.core.articulations import Articulation
from typing import Optional
class KinematicsSolver(ArticulationKinematicsSolver):
def __init__(self, robot_articulation: Articulation, end_effector_frame_name: Optional[str] = None) -> None:
self._kinematics = LulaKinematicsSolver(robot_description_path="/home/cyril/Desktop/Theater-main/rmpflow/robot_descriptor.yaml",
urdf_path="/home/cyril/Desktop/Theater-main/robot1/robot.urdf")
if end_effector_frame_name is None:
end_effector_frame_name = "wrist_L"
ArticulationKinematicsSolver.__init__(self, robot_articulation, self._kinematics, end_effector_frame_name)
return
Any help would be greatly appreciated!