Hi,
I have been using isaac sim for a while now and I am transitioning from Isaac Sim 2022.2.1 to 4.0.0. I am trying to get the publish joint state action graph node and articulation controller to work.
Here are 2 scenarios that I face:
-
If I import the robot through the urdf importer and with the action graph below, then my robot arms move but I get the error
2024-07-02 17:51:40 [93,722ms] [Error] [omni.graph.core.plugin] /adam/ros_interface_controller/PublishJointState: [/adam/ros_interface_controller] Prim is not an articulation
-
If I follow what was done in the moveit example where the default prim path (/adam) is the articulation root. The arms start going in circles like a random number generator is constantly setting the joint position. (this is with no joint commands being published)
The URDF works in Isaac sim 2022.2.1 unchanged.
Here is what I got so far:
def setup_robot_action_graph(self, robot_prim_path):
robot_controller_path = f"{robot_prim_path}/ros_interface_controller"
og.Controller.edit(
{"graph_path": robot_controller_path, "evaluator_name": "execution"},
{
og.Controller.Keys.CREATE_NODES: [
("OnPlaybackTick", "omni.graph.action.OnPlaybackTick"),
("ReadSimTime", "omni.isaac.core_nodes.IsaacReadSimulationTime"),
("Context", "omni.isaac.ros2_bridge.ROS2Context"),
("PublishJointState", "omni.isaac.ros2_bridge.ROS2PublishJointState"),
("SubscribeJointState", "omni.isaac.ros2_bridge.ROS2SubscribeJointState"),
("ArticulationController", "omni.isaac.core_nodes.IsaacArticulationController"),
],
og.Controller.Keys.SET_VALUES: [
("PublishJointState.inputs:topicName", "isaac_joint_states"),
("SubscribeJointState.inputs:topicName", "isaac_joint_commands"),
("ArticulationController.inputs:robotPath", f"{robot_prim_path}"),
("PublishJointState.inputs:targetPrim", f"{robot_prim_path}"),
# ("ArticulationController.inputs:usePath", False),
],
og.Controller.Keys.CONNECT: [
("OnPlaybackTick.outputs:tick", "PublishJointState.inputs:execIn"),
("OnPlaybackTick.outputs:tick", "SubscribeJointState.inputs:execIn"),
("OnPlaybackTick.outputs:tick", "ArticulationController.inputs:execIn"),
("ReadSimTime.outputs:simulationTime", "PublishJointState.inputs:timeStamp"),
("Context.outputs:context", "PublishJointState.inputs:context"),
("Context.outputs:context", "SubscribeJointState.inputs:context"),
("SubscribeJointState.outputs:jointNames", "ArticulationController.inputs:jointNames"),
("SubscribeJointState.outputs:positionCommand", "ArticulationController.inputs:positionCommand"),
],
}
)
# set_target_prims(primPath=f"{robot_controller_path}/ArticulationController", targetPrimPaths=[robot_prim_path])
set_target_prims(primPath=f"{robot_controller_path}/PublishJointState", targetPrimPaths=[robot_prim_path])
I am following these examples:
https://docs-prod.omniverse.nvidia.com/isaacsim/latest/ros2_tutorials/tutorial_ros2_manipulation.html