Hi, I want to use the built-in forklift model to do some simulation, but there are only differential and holonomic controller for vehicle control. Since the forklift is a single servo model, I cannot simply use these controller. So I try to use dynamic controller to control the forklift’s wheel and swivel joint by setting set_dof_velocity_target and make it move by ackermann cmd. But it is not very smooth. Is there any better idea for the forklift or tricycle model control?
Hello @mkfmarkurt! Thank you for your question. I’ve asked an expert from the dev team to come give you some assistance! They should be replying shortly.
Also the moving direction of forklift model is different from other robot in Isaac, which is moving through y-axis and other robot moving through x-axis. Is there any way to change a model’s it’s coordinate system?
Thank you @mkfmarkurt! I am moving this post over to the Isaac Sim team for further assisstance!
Hi - Sorry for the delay in the response. Let us know if you still having this issue/question with the latest Isaac Sim 2022.2.1 release.
Yes, the issue is still existed
I believe the best option on this model would be a model-based control, where you define the motion dynamics of setting the wheel to a given velocity and orientation, and the resulting linear and angular speeds, then you set drive commands for a target linear/angular velocity, and the model would convert in individual wheel velocities, similar to what the Differential and Holomonic control do for their specific wheelbases.
In relation to this exact forklift robot, we tried to hook up the robot with a differential controller, where we tried to give variable speeds to the front wheels, while keeping the swivel and back wheel passive. The robot did not move as expected, and kept slipping on the floor which had collision physics enabled. It also moved in circles when the zero angular speed was provided to the controller. (Command values checked out as per differential drive, but the motion did not make sense.) Any help would be appreciated here . thanks
Hi @user157722 - So, this document didn’t help to you, right?
https://docs.omniverse.nvidia.com/isaacsim/latest/advanced_tutorials/tutorial_advanced_rigging_robot.html
Hi !!! The tutorial is a bit incomplete, if further info is needed to make it work physically, control it etc. The jet bot type control through omnigraph is the only example there, which doesn’t seem to work with this one
hello! thanks for letting us know. it would be interesting to see how you defined the wheels and joint commands that were sent. Can you explain a bit further what your code is trying to do?
My expectation for this forklift is that the swivel wheel is the actual driver wheel, and the four wheels in front would be passive. This brings a few challenges for actuating this robot, specially when trying to rotate in place (but vehicles can’t do that either so it’s not the end of the world, we just need to properly define the model, just like an ackerman model is for vehicles), since one cannot decouple forward motion from rotation.
With that in mind - what I would do is create a custom mobile base controller derived from the Wheeled Robots interface (just like the differential and holonomic drives), that takes this specific actuator model into account, so that when a drive command is given, it provides the swivel position and wheel speed to accommodate for the desired trajectory.
Whe provided the code for Differential and Holonomic drives because they are quite common to see in diverse robots, but they also serve as a base of inspiration when a user needs to create their custom drivers. We’ll look into improving the documentation as to how to perform this custom driver, and probably this forklift is a good example to use on that :)
Hi, I am using ROS1 to control a forklift’s movement in IsaacSim. Currently, I have successfully configured the forklift to move forward and backward using the back_wheel_drive
. However, I am encountering challenges when trying to rotate the forklift around the z-axis using the back_wheel_swivel
.
In my current action graph (see image below), I have set up the back_wheel_drive
for forward and backward movement. However, when I send angular velocity via the twist message, the forklift does not rotate; it simply moves forward or backward.
My question is: How can I utilize the back_wheel_swivel
effectively to achieve rotational movement for the robot? Do I need to make any modifications to the action graph to enable proper rotation using the back_wheel_swivel
?
Thank you for your assistance.
I believe the problem here is that a differential controller is not suited for this type of vehicle. The commands that you need to send are different - In simple terms: a differential drive sends different velocities to a pair of wheels to have a vehicle turning. In this case you need a position drive for the swivel orientation to have the robot turn. It’s an entirely different command format, so you need a custom controller for that.
The articulation controller does support sending the right command format, since it’s a generic message passing that supports full Position and velocity commands to be sent to the articulation. But you need the Drive controller to prepare the right command.
Thank you for your response. I understand that for turning the robot effectively, a position drive for swivel orientation is needed, which is a different command format compared to the differential drive. If I intend to switch to a position drive for controlling the swivel orientation, could you provide guidance on which element in the action graph should be replaced or modified to accommodate this change?
Thank you for your assistance and clarification.
yes - it would be the Differential Controller, Please check the Differential controller code in our codebase to check how it is implemented and customize it to your own control model.
Hello everyone,
I’m thrilled to share our successful forklift control implementation with ROS! We’ve made significant progress in achieving precise control through strategic integration and utilization of key attributes.
In our forklift simulation, we’ve focused on optimizing the back_wheel_swivel
properties, leveraging their revolute and drive characteristics to enable effective control through the ROS teleop package. This careful configuration allows for seamless maneuvering and operation of the forklift.
For a comprehensive understanding of our implementation, including the detailed properties and action graph setup, I invite you to explore our GitHub repository here. The repository provides in-depth insights into the code, structure, and configuration that power our forklift control system.
Feel free to delve into the repository, ask questions, or provide feedback. We’re excited to engage with the community and share our journey in forklift control with ROS!
Thanks @rgasoto for your amazing helps
Best regards,
Abdoul Akhad Top
Hello @atop1
I browsed to the link and got 404 error. Are you able to share the updated URL?
Hey @mona.jalal . Sorry for the late reply
The repository is private now. Let me try to put one forklift together and post it here.
I have put the file here.
You would need to have Nucleus running.
ALso to contol it with ROS, you can install the teleop twist package.
Attached, you can find the video demo and the forklift file.
Video Demo:
Forklift FIle
Hello,
Thanks a lot for your response.
I will look into this.
Have a great day,
Mona Jalal