3. Xacro优化机械臂模型
任务目标
本案例将第2例中冗长的URDF机械臂模型重构为Xacro格式,使用宏定义与参数化属性减少重复代码,并验证模型能够正常加载到ROS参数服务器及可视化。
环境依赖
- ROS Noetic(或Melodic)
xacro包(通常随ROS桌面完整版安装)- RViz(用于可视化验证)
核心实现
创建 arm.xacro 文件,定义两个宏:link_macro 用于生成连杆(含惯性、碰撞属性),joint_macro 用于生成关节。通过参数传入长度、质量等属性,实现参数化建模。
运行与验证
将上述代码保存为 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块。