一、定义
通俗来说,xacro 就是 urdf 文件的一种“进阶版”,它是用来简化和优化机器人的描述文件,使得多个机器人可以共享同样的部件和结构,避免重复编写相同的代码。
假设你有很多机器人,它们的结构相似,比如都有轮子、传感器、臂部等部件。每次你需要为这些机器人写 urdf 文件时,都要重复描述每个部件(比如轮子、关节、传感器等)。这样写非常繁琐且容易出错。
xacro 的作用 :就是通过封装和参数化这些部件,使得你可以更方便地重用已有的结构,只需要少量的修改就可以生成不同机器人的 urdf 文件。类似C语言中函数的封装。
二、xacro 文件常见组成部分
1. 命名空间声明
该命名空间的定义使得文件中的 xacro 特性能够正常工作,让你在模型中使用宏和其他 xacro 相关的功能。
2. 定义宏
宏用于封装可复用的结构,例如机器人关节、链接等。你可以定义一个宏并在多个地方调用它,宏可以带有参数,这样就可以创建不同配置的部件。
<xacro:macro name="wheel" params="name x_offset y_offset">
<!-- 定义轮子的link和joint -->
</xacro:macro>
3. 调用宏
宏定义完成后,可以在 xacro 文件的任意位置调用宏来生成相应的部件。调用时,可以传递参数值来定制生成的部件。
4. 定义参数
你可以在 xacro 文件中定义变量(参数),这些变量可以在宏中使用,也可以传递给其它部分。这使得配置变得更加灵活和动态。
在这个例子中,wheel_radius 是一个参数,表示轮子的半径。在后续的代码中,可以直接使用这个参数。
5. 条件语句
xacro 支持条件语句,你可以根据不同的条件生成不同的机器人模型或某些部件。例如,如果你希望某个部件只有在某个参数为 true 时才创建,你可以使用 xacro:if 和 xacro:else。
6. 转换 xacro 文件为 urdf
你可以使用 ROS 提供的工具来将 xacro 文件转换为 URDF 文件,生成的 URDF 文件可以直接用于机器人仿真、控制等。
rosrun xacro xacro mybot.xacro > mybot.urdf
7. gazebo标签
在 XACRO 文件中,<gazebo> 标签用于定义与 Gazebo 仿真环境 相关的设置和插件。Gazebo 是一个强大的仿真工具,用于模拟机器人、传感器以及与环境的交互。当你在 XACRO 中使用 gazebo 标签时,通常是为了控制仿真中的物理属性、传感器和控制插件。
三、代码示例
1. gazebo标签使用(仿真参数配置)
功能:用于描述一些物体以及传感器在gazebo仿真中的一些数据,例如摩擦系数、速度等等。
mybot_gazebo.xacro
Gazebo/DarkGrey 0.5 0.5 500000.0 10.0 0.001 1.0 1 0 0 Gazebo/DarkGrey 0.5 0.5 500000.0 10.0 0.001 1.0 1 0 0 Gazebo/FlatBlack 0.1 0.1 500000.0 100.0 0.001 1.0 Gazebo/FlatBlack true $(arg imu_visual) Gazebo/FlatBlack cmd_vel odom odom world true base_footprint false true true false 30 left_wheel_joint right_wheel_joint 0.180 0.05 10 100 na true imu imu imu imu_service 0.0 0 gaussian 0.0 2e-4 0.0000075 0.0000008 0.0 1.7e-2 0.1 0.001 Gazebo/FlatBlack 0 0 0 0 0 0 $(arg laser_visual) 7 720 0.5 0.0 6.28319 0.120 12.0 0.015 gaussian 0.0 0.01 scan base_laser_link true $(arg camera_visual) 1.085595 ![]()
640 480 R8G8B8 0.03 100 true 30.0 / base_camera_link image_raw camera_info 0.07 0.0 0.0 0.0 0.0 0.0
2. 引用仿真配置并定义机器人模型(结构)
功能:这段代码描述了一个机器人(mybot)的 物理模型和结构,代码通过定义多个链接(link)和关节(joint)来描述机器人的组成部分,包括主体、轮子、支撑轮、激光雷达等。当我们构建不同的机器人模型时,都可以引用之前的仿真配置。
注意:这两个文件中的 <robot name="mybot" xmlns:xacro="http://ros.org/wiki/xacro"> 中的 name 字段应该一致。
mybot1.xacro
四、加载仿真模型(含传感器的机器人)
1. 编写launch文件
最终我们运行的mybot1.xacro ,里面包含了机器人的模型和仿真配置文件。编写launch文件来启动仿真模型。
simulation_robot.launch
注意:

2. 实际效果
