3. Xacro优化机械臂模型

任务目标

本案例将第2例中冗长的URDF机械臂模型重构为Xacro格式,使用宏定义与参数化属性减少重复代码,并验证模型能够正常加载到ROS参数服务器及可视化。

环境依赖

  • ROS Noetic(或Melodic)
  • xacro 包(通常随ROS桌面完整版安装)
  • RViz(用于可视化验证)

核心实现

创建 arm.xacro 文件,定义两个宏:link_macro 用于生成连杆(含惯性、碰撞属性),joint_macro 用于生成关节。通过参数传入长度、质量等属性,实现参数化建模。

```xml ```

运行与验证

将上述代码保存为 arm.xacro,在终端执行以下命令完成加载与可视化验证:

# 1. 将xacro转换为URDF并加载到参数服务器
roslaunch robot_state_publisher robot_state_publisher.launch model:=arm.xacro

# 若上述launch不存在,可手动执行:
# rosparam load <(xacro arm.xacro) /robot_description
# rosrun robot_state_publisher robot_state_publisher

# 2. 启动RViz查看模型
rosrun rviz rviz -d $(rospack find urdf_tutorial)/urdf.vcg

通过条件:

  • 终端无报错,robot_description 参数成功加载。
  • RViz中显示3个可旋转关节的机械臂模型,拖动关节滑块时连杆随之运动。
  • 对比第2例URDF,代码行数显著减少(原约80行,现约50行),且修改连杆长度/质量时只需调整宏调用参数。

关键说明

  • 宏参数中的 ${} 语法为xacro表达式,支持四则运算,实现参数化计算。
  • 惯性矩公式采用实心圆柱近似(izz = 0.5*m*r²),实际使用中可按需替换为精确值。
  • 若需添加更多连杆,只需复制宏调用并修改参数,无需重复编写完整XML块。