Hello, it is my first time working on manipulation using ROS.
I’m used to see all the links and joints created inside the URDF of the robot, but reading the URDF, there is a world, and ground_plane_box links, which the last one, I assume it is working as the basis of the robot. These links are attached through the ground_plane_box joint.
My question is about the joint that should connect the ground_plane_box linkbase_link link. Why it isn’t created inside the URDF and instead using the virtual joints section of the setup assistant of Moveit2? Is it to somehow define which is the first link of the kinematic chain of the robot to the system?
The answer to your question quite simple.
What is URDF? What does URDF stand for?
URDF means Universal Robot Description Format Note: Robot Description - not virtual joint description or world description!
So, from URDF specifications and point of view, it makes no sense to add a virtual object into the robot description! The robot does not come with the virtual block from the manufacturer.
Therefore these virtual joints must be added to the simulation or to the frame that connects the robot with the world frame.
Now, why do you use Setup Assistant? To visualize robot movement in RViz.
Not in Gazebo or any other simulator. But in RViz! RViz is not a simulator!
The virtual joint defines where the robot is located with respect to the world frame. You can’t have the robot dangling in the mid space! Can you? (No, you can’t!)
That is the reason why your create a ground_plane_box and mount the robot to it connected to the base_link.
The main reason to do this is to establish a connection between the robot and the planning scene around the robot (which is the world frame).
This virtual joint is a concept and not a part of the robot system!
I hope the above explanation has solved your doubt. Feel free to ask further questions if you are still unclear.
I thought this frame could be something similar to base_footprint which doesn’t exist but is used in navigation to plot the footprint of the robot. Also, I was doubtful why would you then attach the “base of the robot” which I assume is ground_plane_box into the URDF if it isn’t part of the robot as you said.
Still, I get the idea, thanks for the clarification.
The base_footprint is again a virtual link and a concept used in Navigation. This base_footprint link is essentially the projection of the base_link onto the ground frame which is either world or map or odom.
That is because, unlike Navigation systems, Manipulator robots do not have (or require) a base_footprint type of link. The base_link itself is a parent link and the root link of all robot links. Since you are depicting the manipulator robot to be fixed onto some solid object, you denote that joint as a virtual joint with a connection between ground plane and the robot’s root link.
Glad to know I was able to help you understand!
Please mark the post as “Solution” so this issue can be closed!