"USD Setup Holonomic Robot" node not working for holonomic robot

Hi,
I am trying to set up a holonomic robot (specifically a mecanum wheel robot) in Isaac Sim. I have created all the joints for the mecanum wheels and the rollers correctly. All the colliders are correctly set.

I am trying to use ROS 2 for controlling the robot and I have created the action graph for it. But the “USD setup holonomic robot” node in the action graph is not generating the outputs required for setting the “Holonomic Controller” node

I get the following errors from the action graph “USD setup holonomic robot” node

Here is the USD file for the holonomic robot model I created https://drive.google.com/drive/folders/1m9XDkxwN6DZB2m_ejSOBP7_K3faU78dV?usp=sharing

Please help me out with this. Thank you

Hi @nilutpolkashyap - Here’s an example of how to setup the Omnigraph node for controller. Can you please confirm that you are following similar steps in your case?
https://docs.omniverse.nvidia.com/isaacsim/latest/advanced_tutorials/tutorial_advanced_omnigraph_pickplace_controller.html?highlight=actiongraph#omnigraph-short-pick-and-place-controller-node

Hi @rthaker
Yes, I tried the correct steps for setting up the Holonomic controller. The “USD setup holonomic robot” Omnigraph node is not generating the correct output which needs to be fed to the “Holonomic controller” node.

I have shared the USD file for the holonomic robot model I created. Can you please check it out once.

Thank you

Hello nilutpolkashyap!

I took a look and your stage and I think the issue is a couple things. First, you need the controller node!

so, the setup node takes the robot prim and traverses the articulation tree to extract relevant settings, and some of these need to go to the Holonomic Controller Node. This node does all the math to convert your desired command (the const double 3 in the image) into joint drive targets. You then need to pipe those into the actual articulation controller along with the joint names to actually apply those drive targets to the appropriate joints.

I included a sample USD file using our O3dyn asset. you should be able to press play and then adjust the values in the const double 3 to move the robot around.

I hope this helps!

Gus

example_holonomic_controller.zip (26.2 KB)

Hi @mgussert ,
I have already tried working with the O3dyn model and I have taken reference for building the action graphs and the robot model from it.

The "USD setup holonomic robot” node in the action graph is not generating the output values it needs to generate in my model.

This is where I am stuck.

I am not able to figure out why the "USD setup holonomic robot” node is generating the values. I have provided the correct Inputs

Can you please look into the USD file I provided and help me figure out where I am going wrong with the model structure due to which the "USD setup holonomic robot” won’t generate any values.

Thank you

Hi @mgussert ,
Can you please help me out?

Heya Nilutpolkashyap!

Yes, of course I will help you! I know I have a bad habit of leaving these hanging but I am trying to fix that.

I haven’t been able to fully debug your asset and part of the reason why I haven’t responded yet is I don’t have a good answer for you :(

There are many possibilities because there are some problems with the stage, and one big issue that we (Isaac-Sim) need to address.

  1. there are two articulation roots, one on /Root and another on /Root/Robot. A single articulation can only have one root (no nested articulations).

  2. I think there might be some structure issues with how you have setup the asset but I can’t pin down exactly what yet (other than 3)

  3. This is the issue we need to address. There are missing attributes on your mecanumwheel drives that need to be custom added to your asset. these are present on the o3dyn but not on yours

specifically isaacmecanumwheel:angle and isaacmecanumwheel:radius need to be added to each of your mecanumwheel drives.

To do this, select a drive, click the add button in the properties pane, and select Attribute. in the window that pops up, set the type to Float and the name to isaacmecanumwheel:angleand click the button to add the custom attribute to the prim. Repeat this with the other 3 wheels, and then repeat it a second time for isaacmecanumwheel:radius (the wizard remembers your settings so this order of operations works well).

I haven’t tracked down where we tell the user to do this, and I thought it was handled by this USD setup node, so I have some investigating to do. However, these steps above get the joint names to appear in the setup node. I hope this helps and sorry again for the delay!

I have a ticket to file :)
Gus

1 Like

Regarding the complete controller, I used ROS’s cmd_vel to control Kaya’s forward and backward movements and found that there was also a problem with its movement. It would deviate from the straight line after driving for a period of time. Look at the output of the controller to see the numerical values of Kaya’s left and right wheels when moving forward and backward. The last few differences lead to deviations. Is this a bug? @mgussert


Heya 1365351984!

This may be a consequence of how the joints are being driven. Are using effort controls or velocity controls?

Also, please respond by starting a new thread with your original question and my requested details, and just @ me in the that thread. It will help us with tracking :)

Thank you!

this is a new thread.Kaya robot uses cmd_vel of ROS to control the left front movement error
thank you very much. @mgussert

@nilutpolkashyap did you figure this out yet? are you still stuck?

1 Like

Hi @mgussert
Thanks a lot for your help. I was finally able to solve the error by adding the 2 attributes as guided by you.

The action graph node works perfectly and I can drive the mecanum wheeled robot now.

In the mecanum drive motion, while going left or right, the robot does not go in a perfectly straight line as mecanum drive should do.

Can you please help what are the factors that could affect the robot’s motion?

Also, I found the following 2 attributes which were present in the O3dyn model’s wheel joints. Do I need to add these into my robot’s joints as well?
03DYN_MODEL

Thanks a lot

Heya!

I am not sure if you need to add those other parameters or not. I will ask around to find out!

As for the deviation, it depends on how much you are seeing. You may be experiencing the joys of open loop control!

I’m glad you got it working!
Gus

Hi @mgussert
Can you please tell me what is the com_offset Xform present inside the base_link? It is also present inside the O3dyn model
com_offset

I am not sure how to add this prim and what’s its use. But if I delete it, the robot does not drive.

Thank you

Heya!

Checkout this post for details on the holonomic controller

the TlDr is the COM offset is the “target” being used by the optimizer for how to move the robot around. It is any xform in the articulation that is then passed as the “COM offset” to the holonomic controller. you can create one just by right clicking → create → xform. the name doesn’t need to be com_offset (I think).

Hope this helps! :D
Gus