HolonomicController node in action graph for 4 omni-directional wheel robot

I am trying to setup a 4 omni-wheeld robot urdf in Isaac sim. my robot urdf prim looks like the below

I followed the tutorial from Drive TurtleBot via ROS2 messages and tried to create the action graph for the 4 omni-wheeled robot.

I have created the action graph for controlling the 4 omni-wheeled robot using ROS 2 teleop topics.

Can you please help me fill out the correct values for parameters for the HolonomicController node and the HolonomicRobotUsdSetup node?

Thank you

Hello Nil!

Welcome to the forums :D does your robot have an articulation root? is it the base_link?

I’m not entirely sure what the problem is. Is it throwing a specific error? How do you know your values are “incorrect”? if you mouse over the yellow node it will show you the specific warning I think.

the joint names are the names of the joints that you are going to be driving. if you select a prim, the name should be the topmost field (next to the add button). the robot_prim should be the articulation root, which then traverses the joints to setup the articulation to be controlled.

sorry I can’t be more helpful!

Hi Gus,
Thank you for your reply.

Actually, my “USD Setup Holonomic Robot” node is not generating the required outputs. Because of this the “Holonomic Controller” is not getting the inputs required for it.

Ahh! Sorry, I’m blind :) I see, the gains and speed limits are missing!

Those are parameters that are tuned on a per robot basis. Basically, it’s up to you / what your goals are.

Here’s the TlDr;

  • Angular and linear gain: Floats on [0,+inf] that multiply your angular and linear inputs respectively. This depends on the units of your inputs. If you don’t know, start with 1.0 (the default)
  • Max angular and linear speed: Floats on [0,+inf] that limits the output of the controller such that the linear and angular speed of the robot will not exceed these values. If you don’t know, set these to be large. 1.0E20 is the default.
  • Max wheel speed: Float on [0,+inf] that limits the maximum angular speed of the wheels. This is directly related to the max angular and linear speeds (unit wise). If you don’t know, set this to be large as well. 1.0E20 is the default

hope this is helpful!

Hi Gus @mgussert ,
I set the initial values as explained by you. But it’s still giving me some errors.

I am attaching my projects USD file as a zip with this. I used the “Collect As” option to collect every asset for the project.

Also I used the neo_simulation2 github repository and used their mpo_700 robot urdf as my case of holonomic wheel robot

Collected_neo_mecanum_navigation.zip (2.4 MB)

Thank you

Hi @mgussert ,
Any help would be appreciated. Thank you

when I load your USD and hit play, nothing happens, and I don’t see specific errors. what version of isaac-sim are you using? can you please tell me the specific errors? which values are still missing?

Hi @mgussert ,

I am using Isaac Sim version 2022.2.1

I was able to figure out the holonomic controller part and was able to complete the action graph.

However, I am getting a new error. I am trying to setup my 4 omni wheel robot urdf in Isaac Sim. I have also created the action graph using the “USD Setup Holonomic Robot” and “Holonomic controller” which I already tested for Kaya robot and it works.
But the “USD Setup Holonomic Robot” node gives me an error as
“Omnigraph error: local variable “joint” referenced before assignment”

Here is my omni robot package containing urdf file and meshes
omni_robot_description.zip (932.7 KB)


Heya Nil,

What do you mean by testing it with kaya and “it works”? do you mean your same action graph with the ros2 messaging works? Or do you mean just the “USD Setup Holonomic Robot” node works? If it “works” why is it still giving you an error? etc…

Sorry for the lack of response. I have a hard time multitasking, and the scope of this question was quite large. My fault!

Hi @mgussert
I took the example Kaya robot environment provided in Isaac sim and created an action graph to control it with ROS 2. It worked for me. I was able to control the Kaya robot’s movement using /cmd_vel topics. I had no problem with the action graph and the “USD Setup Holonomic Robot” node worked perfectly for the example Kaya robot.

Now I am trying to set up my own URDF of a omni-wheel robot in Isaac Sim. It is a 4-omni wheeled robot. Till now I have imported the robot’s urdf into Isaac sim. I have created an action graph for controlling it with ROS 2 /cmd_vel but the “USD Setup Holonomic Robot” node is giving me an error “Omni graph error: local variable ‘joint’ referenced before assignment.”

I have provided the correct prim paths and my URDF file is correct. I double checked my URDF file and it has no errors.

I am not sure why the “USD Setup Holonomic Robot” node is giving me the error.

I am sharing my omni wheeled robot urdf here
omni_robot_description.zip (932.7 KB)


HI @mgussert ,
Any help please??

If you are using your urdf file as it is, it is unlikely you have all the terms needed for the “Usd Setup holonomic” node to work. I see you also posted on a different thread about this robot. Did you follow the steps mentioned earlier in that thread about saving your robot into a .usda file first and search for terms like “mecanum” to check if you have all the necessarily paramters first?

Your .usd (or .usda) file need to have all of the following terms in order for the “usd setup holonomic” node to work: the wheel radius, positions and orientations (relative to center of mass of the vehicle), the mecanum angles of each wheel, and the axis of the wheels relative the chassis axis.

if you are missing any of the fields, you can manually modify the .usda file to include them (for this you can use kaya as a reference file). You can also not use the USd setup holonomic node, and just put in all the numbers you need for the holonomic controller directly.

Hi @qwan
Thank you for your reply. I will give this approach a try.

Is it possible to get an example URDF file of a holonomic robot model for Isaac Sim? I couldn’t find any URDF example for a holonomic robot.

It would save us a lot of time instead of manually updating the USDA file every time if we could create the URDF file with the proper format at the beginning.

Thank you

The extra term you are adding into the usda file is a specialized USD schema that we added to aid calculating holonomic drives, it’s not something URDF has as far as I’m aware.

To avoid editing usda file repeatedly, you can certainly save the edited usda file as it is and open that in the future if it’s just a single robot. If you are starting with a URDF file every single time, then I would suggest you add more nodes to your graph to supplement the setup node. You can manually feed in the missing information into the “holonomic controller”. For example, if you don’t have the “mecanum angles” field in your usd file, you can add an array node, manually put in the array of angles, and feed that into the “holonomic controller”. You should still be able to use the setup node to get other parameters.

The bottom line is that the “holonomic controller” node is the one that’s doing all the vehicle speed → wheel speed calculation. The setup node is just reading parameters, so if it has trouble finding the parameters, you can always manually put it in.

Hi @qwan
It did actually work for me. I manually edited the USDA file and now I can control my mecanum wheels robot using twist commands in ROS 2.

The only problem I face now is that the robot’s motion in the y direction is not good as its not behaving in a straight motion in y direction. It justs start rotating and then goes very slow.

Perhaps I need to tune the values in the Holonomic controller in my action graph.

Can you please tell me what is the ‘wheelOrientations’ in the Holonomic Controller action grpah node? How am i supposed to fill this value correctly.

Thank you

wheelOrientation: “orientation of the wheels in quaternions relative to center of mass frame of the vehicle. number of wheels x [quaternions]”.

You can find more API definitions here.

Additionally, the holonomic controller happen to be written in python, which mean you can actually look at what’s being done and potentially change it. If you go into the folder that Isaac Sim is installed in, you can find the holonomic controller script in exts/omni.isaac.wheeled_robots/omni/isaac/wheeled_robots/controllers.

(the path to where Isaac Sim is installed on your computer can be found in the Isaac App Selector window when you first launch it from the nucleus).

Hi @nilutpolkashyap I cannot help you to solve your problem, because I am new to the Isaac sim. However, would you mind to give me the 4 omni wheel robot model ? I want to simulate this kind of robot but I cannot find any good model on the internet.
Warm regards !