尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ROS2 Xacro机器人建模初步教程
文章目录环境准备xacro代码修改Launch文件编译并运行环境准备URDF作为ROS中用于描述机器人物理结构的标准格式本质上是一种标记语言不支持编程。这意味着URDF代码无法复用当项目变得复杂之后就会产生大量冗余从而难以维护。Xacro(XML Macros)的出现就是为了解决URDF的冗余问题。作为URDF的宏语言Xacro通过通过引入变量、宏和数学计算大大降低了机器人模型的维护难度并提高了可读性。在终端中直接输入xacro如果没有反应说明未安装xacro工具可通过apt安装sudoaptinstallros-lyrical-xacro下面在URDF初步教程的工作空间中添加robot.xacro文件。vim/src/robot_description/urdf/robot.xacroxacro代码xacro代码同样采用了xml格式但和urdf相比从语法上多了函数计算、代码复用等功能从功能模块上多了碰撞、惯性等物理仿真说明。下面在robot.xarco中写入如下代码。?xml version1.0?!-- 引入 xacro 命名空间 --robotnamesimple_robotxmlns:xacrohttp://www.ros.org/wiki/xacro!-- 1. 定义常量 (Properties) --xacro:propertynamechassis_lengthvalue0.4/xacro:propertynamechassis_widthvalue0.3/xacro:propertynamechassis_heightvalue0.1/xacro:propertynamechassis_massvalue5.0/!-- 质量 5kg --xacro:propertynamewheel_radiusvalue0.05/xacro:propertynamewheel_thicknessvalue0.04/xacro:propertynamewheel_massvalue0.5/!-- 质量 0.5kg --xacro:propertynamewheel_offset_yvalue0.17/xacro:propertynamewheel_offset_zvalue-0.03/!-- 2. 定义宏 (Macros) --!-- 宏定义标准惯性矩阵 (Gazebo 物理仿真必需) --!-- 这里使用简化的长方体和圆柱体惯性公式 --xacro:macronamebox_inertiaparamsm x y zinertialmassvalue${m}/inertiaixx${m*(y*yz*z)/12}ixy0ixz0iyy${m*(x*xz*z)/12}iyz0izz${m*(x*xy*y)/12}//inertial/xacro:macroxacro:macronamecylinder_inertiaparamsm r hinertialmassvalue${m}/inertiaixx${m*(3*r*rh*h)/12}ixy0ixz0iyy${m*(3*r*rh*h)/12}iyz0izz${m*r*r/2}//inertial/xacro:macro!-- 宏定义轮子 (包含 visual, collision, inertial) --xacro:macronamewheel_macroparamsprefix y_offsetlinkname${prefix}_wheel!-- 外观 --visualgeometrycylinderradius${wheel_radius}length${wheel_thickness}//geometrymaterialnameblackcolorrgba0.1 0.1 0.1 1.0//material/visual!-- 碰撞 (Gazebo 用于计算物理碰撞) --collisiongeometrycylinderradius${wheel_radius}length${wheel_thickness}//geometry/collision!-- 惯性 (Gazebo 用于计算质量和转动惯量) --xacro:cylinder_inertiam${wheel_mass}r${wheel_radius}h${wheel_thickness}//linkjointname${prefix}_wheel_jointtypecontinuousparentlinkbase_link/childlink${prefix}_wheel/originxyz0 ${y_offset} ${wheel_offset_z}rpy-1.5708 0 0/axisxyz0 0 1//joint/xacro:macro!-- 3. 实例化机器人 --!-- 底盘 --linknamebase_linkvisualgeometryboxsize${chassis_length} ${chassis_width} ${chassis_height}//geometrymaterialnamebluecolorrgba0.2 0.2 0.8 1.0//material/visualcollisiongeometryboxsize${chassis_length} ${chassis_width} ${chassis_height}//geometry/collisionxacro:box_inertiam${chassis_mass}x${chassis_length}y${chassis_width}z${chassis_height}//link!-- 调用宏生成左轮和右轮 --xacro:wheel_macroprefixlefty_offset${wheel_offset_y}/xacro:wheel_macroprefixrighty_offset${-wheel_offset_y}/!-- 4. 添加激光雷达 (Lidar) --linknamelidar_linkvisualgeometrycylinderradius0.05length0.04//geometrymaterialnameredcolorrgba0.8 0.1 0.1 1.0//material/visualcollisiongeometrycylinderradius0.05length0.04//geometry/collisionxacro:cylinder_inertiam0.1r0.05h0.04//linkjointnamelidar_jointtypefixedparentlinkbase_link/childlinklidar_link/!-- 安装在底盘顶部中央 --originxyz0.1 0 0.07rpy0 0 0//joint/robot下面逐段拆解上述代码。其第一部分用于定义常量具体格式为用【xacro:property】标签来对name和value进行变量名和变量值的绑定。第二部分通过【xacro:macro】标签来定义宏这实质上是一个写成xml的函数其中name和params分别是函数名和参数。这部分代码不仅定义了可供复用的立方体和轮子代码实现了前面urdf中的功能同时还添加了碰撞和惯性等物理属性为后续仿真提供了物理基础。显而易见的是这部分用更少的代码实现了比之前URDF更多的功能。第三部分通过调用上一步创建的宏完成了机器人的实例化。最后一部分则为激光雷达留出了安装位置。修改Launch文件xacro文件不能直接被robot_state_publisher读取需要先转换为URDF字符串才能被调用这一步可在Launch文件中用xacro命令来实现。下面修改Launch文件修改后内容如下importosfromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodefromlaunch.substitutionsimportCommandfromament_index_python.packagesimportget_package_share_directorydefgenerate_launch_description():pkg_shareget_package_share_directory(robot_description)# 指向新的 xacro 文件xacro_fileos.path.join(pkg_share,urdf,robot.xacro)# 【核心】使用 Command 执行 xacro 命令将 xacro 转换为 urdf 字符串robot_descCommand([xacro ,xacro_file])returnLaunchDescription([Node(packagerobot_state_publisher,executablerobot_state_publisher,parameters[{robot_description:robot_desc}],outputscreen),Node(packagejoint_state_publisher_gui,executablejoint_state_publisher_gui,outputscreen),Node(packagerviz2,executablerviz2,outputscreen),])修改setup.py文件添加对xacro文件的匹配data_files[(share/package_name,[package.xml]),# 【修改这里】同时匹配 .urdf 和 .xacro 文件(os.path.join(share,package_name,urdf),glob(os.path.join(urdf,*.urdf))glob(os.path.join(urdf,*.xacro))),(os.path.join(share,package_name,launch),glob(os.path.join(launch,*launch.[pxy][yma]*))),],编译并运行colcon build source install/setup.bash# 启动ros2 launch robot_description display_robot_launch.py弹出Rviz2窗口后将左侧面板Global Options下的Fixed Frame修改为base_link。然后在点击下方的 Add添加按钮在弹出的窗口中在By display type选项卡中选中RobotModel点击 OK。此时左侧Displays列表中会多出这个RobotModel点击展开确保Visual Enabled选项被勾选然后将Discription Topic的值设为/robot_description这时窗口中就会出现我们创建的哪个小车了。
RELATED

相关推荐

构建个人知识管理系统:从信息孤岛到网状知识图谱的实践指南

构建个人知识管理系统:从信息孤岛到网状知识图谱的实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/29 8:49:59
Visio替代方案与高效绘图工具全解析:从需求评估到专业实践

Visio替代方案与高效绘图工具全解析:从需求评估到专业实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/6 10:08:42
非光滑势能下的Langevin采样:Moreau-Yosida正则化与近端算子策略

非光滑势能下的Langevin采样:Moreau-Yosida正则化与近端算子策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/15 17:38:56
MORE NEWS

更多资讯

📰

编程异常处理:提升系统健壮性的关键策略

1. 异常处理的核心价值与程序健壮性在编程实践中,异常处理机制就像建筑结构的抗震设计。当我在处理一个支付系统项目时,曾遇到因为未正确处理网络波动导致的订单状态不一致问题。那次事故让我深刻认识到:异常处理不是可选的装饰品&#xff0c…

📰

地外文明与超光速探索:窄带射电信号处理、干扰排除与物理边界

干我们这行的人,最常被问的一句话是:到底找着了没有?问这话的人多半以为我们在做一件很浪漫的事,实际上大部分时间是在跟射频干扰、时钟同步和几万小时的噪声数据较劲。地外文明与超光速现象的探索及研究进展,这个题目听起来像本科幻小说的书名,但它对我而言,是两条从同一个原…

📰

CTF竞赛实战技巧与职业发展全解析

1. CTF竞赛核心价值解析CTF(Capture The Flag)作为网络安全领域的实战竞技场,其价值远不止于比赛本身。从技术层面来看,CTF题目往往模拟真实世界中的安全漏洞场景,比如2023年DEFCON决赛中的一道Web题就复现了某知名CMS…

📰

机器视觉明场与暗场成像:照明选型与缺陷检测调试指南

1. 明场与暗场,为什么值得单独拎出来讲前阵子接到一个检测需求:金属拉丝面板上的细微划痕,宽度大概 3 到 5 微米,深度不到 2 微米。第一版方案用的是同轴光源加远心镜头,典型的明场打法,图像干净漂亮&#…

📰

E-R图详解:数据库设计与计算机等级考试必备

1. E-R图基础概念解析E-R图(Entity-Relationship Diagram)是数据库设计中用于描述现实世界概念结构的图形化工具。它由美籍华裔计算机科学家陈品山(Peter Chen)于1976年提出,现已成为数据库设计领域的标准建模方法。在…

📰

Axure原型设计入门:一张图掌握核心操作流程

很多刚接触原型设计的朋友,第一次打开Axure看到满屏的元件库、属性面板和交互面板,第一反应往往是“这玩意儿比写代码还复杂”。我见过太多人装了软件、看了两小时教程,然后默默关掉,转头继续用PPT画方块。问题不在于Axure难&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬