Mastering ROS for Robotics Programming(Second Edition)
上QQ阅读APP看书,第一时间看更新

Understanding robot modeling using xacro

The flexibility of URDF reduces when we work with complex robot models. Some of the main features that URDF is missing are simplicity, reusability, modularity, and programmability.

If someone wants to reuse a URDF block 10 times in his robot description, he can copy and paste the block 10 times. If there is an option to use this code block and make multiple copies with different settings, it will be very useful while creating the robot description.

The URDF is a single file and we can't include other URDF files inside it. This reduces the modular nature of the code. All code should be in a single file, which reduces the code's simplicity.

Also, if there is some programmability, such as adding variables, constants, mathematical expressions, and conditional statements, in the description language, it will be more user-friendly.

The robot modeling using xacro meets all of these conditions. Some of the main features of xacro are as follows:

  • Simplify URDF: The xacro is the cleaned-up version of URDF. It creates macros inside the robot description and reuses the macros. This can reduce the code length. Also, it can include macros from other files and make the code simpler, more readable, and more modular.
  • Programmability: The xacro language supports a simple programming statement in its description. There are variables, constants, mathematical expressions, conditional statements, and so on that make the description more intelligent and efficient.

We can say that xacro is an updated version of URDF, and we can convert the xacro definition to URDF whenever it is necessary, using some ROS tools.

We can talk about the same description of pan-and-tilt using xacro. Navigate to mastering_ros_robot_description_pkg/urdf, and the file name is pan_tilt.xacro. Instead of .urdf, we need to use the .xacro extension for xacro files. Here is the explanation of the xacro code:

<?xml version="1.0"?> 
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="pan_tilt"> 

These lines specify a namespace that is needed in all xacro files for parsing the xacro file. After specifying the namespace, we need to add the name of the xacro file.