Wheel robot with 4 joints can't move by Differential Controller using Action Graph and ROS

Hi everyone,

I followed Isaac Sim tutorials to recreate Turtlebot3 and control their 2 joints it using ROS Noetic by teleop_keyboard node. Until this everything is OK. Then I wanted to follow the same steps with another robot of 4 wheel then 4 joints. But occurred these warnings referring the 2 extra joints.

2022-09-22 23:35:56 [364,740ms] [Warning] [omni.graph.core.plugin] OmniGraph Warning: shape mismatch: value array of shape (1,2) could not be broadcast to indexing result of shape (1,4)
                   (from compute() at line 110 in /home/catolica/.local/share/ov/pkg/isaac_sim-2022.1.1/exts/omni.isaac.core_nodes/omni/isaac/core_nodes/ogn/nodes/OgnIsaacArticulationController.py)

Then I added another Differential Controller to vinculate the extra 2 joints but the same warnings appeared twice and the robot is stopped.

2022-09-22 23:35:56 [364,737ms] [Warning] [omni.graph.core.plugin] OmniGraph Warning: shape mismatch: value array of shape (1,2) could not be broadcast to indexing result of shape (1,4)
(from compute() at line 110 in /home/catolica/.local/share/ov/pkg/isaac_sim-2022.1.1/exts/omni.isaac.core_nodes/omni/isaac/core_nodes/ogn/nodes/OgnIsaacArticulationController.py)
2022-09-22 23:35:56 [364,740ms] [Warning] [omni.graph.core.plugin] OmniGraph Warning: shape mismatch: value array of shape (1,2) could not be broadcast to indexing result of shape (1,4)
(from compute() at line 110 in /home/catolica/.local/share/ov/pkg/isaac_sim-2022.1.1/exts/omni.isaac.core_nodes/omni/isaac/core_nodes/ogn/nodes/OgnIsaacArticulationController.py)

And this is the joint tree of the robot

Has something similar happened to someone?

Hello. You don’t need a second Articulation controller. You have to form a vector of 4 values and feed it to the controller input.

I have same problem. anyone this solve it?

Thanks for the advise @pme1976 but I’ve tried with a vector of 4 values feeding “Make array” but the problem and warning remains.

OmniGraph Warning: shape mismatch: value array of shape (1,2) could not be broadcast to indexing result of shape (1,4)

Or I have to feed Articulation controller “Joint names” with another element?

I think that warning appears because articulation controller really have only 2 outputs: left joint and right joint. There are 2 extra joints that “cause the problem” and the purpose here is to replicate actions of left_joint to left_joint_2, same thing with the right_joint.

Does anyone could control 4 joints with this method (Action graph) or antoher using ROS?

In theory you should be able to either put in an array of 4 for velocity command and leave the joint names empty, or you also need to put in an array of 4 for the joint names with all four joints. If that doesn’t work, then can you please attach your usd file and we can take a look at it.

Thanks to everyone for your advise! it can be solved creating an array of shape (1,4) from the velocity command output of the Differential Controller. Using 2 “Array Index” to get the values of the velocity command and “Make Array” to create the new array [right_joint, left_joint, right_joint2, left_joint2] or the order that you want. Finally feeding the Articulation Controller.

2 Likes

scout_v2_09_29.usb.usd (8.0 KB)

I designed the same as you, but it didn’t work properly.

Could you tell me how you set the setting values?

Yep @donghoon.sejong . The parameters are the followings:

Screenshot from 2022-09-29 11-13-59

And some screens of the configurations:

I hope that helps

1 Like

Hello,

I am facing a similar issue. At first, I was indeed using 2 Articulation Controllers (and I already had in mind this was not the right way to do this), and then I found this thread. I implemented it the same way, and it works exactly the same as with the 2 Articulation Controllers. My problem is that the wheels spin in the correct direction, but the robot does not move accordingly. Instead of doing a spot turn, it creates a very large circle.

Any idea what could cause this behaviour?

Here is the original post I did before I found this threat here. It is not a duplicate, as I face another issue with the movement o the rover, not only the connection.

Any suggestions are welcome.

is your robot a 4-wheel drive or a 2-wheel drive with 2 extra wheels that are not actuated? If it’s a 2-wheel drive, then I would recommend to exclude the non-actuating wheels from the articulation and let them be free joints that just rotates. If it’s a 4-wheel drive and it’s not working as expected, then I would start with tuning some wheel friction properties and chassis mass and see if that helps.

https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/tutorial_ros2_turtlebot.html#tune-the-robot

Hi @qwan,

The robot is 4-wheeled, and all four wheels are driven. The four wheels are spinning in the correct direction. Just the entirety of the robot is not moving as it should when rotating.

I have created a physics material that I attribute to the wheels with a friction coefficient of 1 (static and dynamic) as in the 2-wheeled examples from Isaac Sim.

Related to the mass properties, I use the masses of the parts as they were specified in the URDF that I imported. The masses of the parts and the total mass are within reasonable tolerances with respect to the real robot. The robot weighs about 5 kg (in real and in simulation).

Would you suggest increasing or decreasing the mass and/or friction coefficients?

I would play with the mass and not worry about matching real life first and just to see if it makes any difference. If you want to attach your usd file here, I can take a look at it as well.

Here is my USD file of my leorover model. I removed the camera sensors and only added the Action Graph for the differential drive.

I use it with ROS2 Foxy on ROS_DOMAIN_ID 55 in case you need this info.

I uploaded the USD file to my drive: https://drive.google.com/file/d/1SPNs1v7cnWTvS228nx0o02Du3mY5uFpq/view?usp=share_link