【ROS 2 学习记录】拒绝“幽灵车”!给机器人赋予物理属性并导入 Gazebo 仿真

一、 为什么要进 Gazebo?

在 Rviz 里,机器人是可以穿墙的,悬空的,因为它不受物理定律约束。

但在 Gazebo 里,有重力、有摩擦力、有碰撞。如果我的机器人没有“质量”(Mass)或者“碰撞体积”(Collision),它要么会掉进地心,要么会被物理引擎直接删除。

为了让机器人“活”过来,我主要做了两件事:

  1. Xacro 升级:添加 Inertial(惯性)和 Collision(碰撞)属性。
  2. Launch 编写:编写 Python 脚本把机器人“生”在 Gazebo 里。

二、 详细开发过程

1. 准备“物理作弊小抄” (Inertial Macros)

给轮子算转动惯量太难了(要背微积分公式),所以我利用 Xacro 的宏定义功能,封装了球体、圆柱、方块的惯性计算公式。

.xacro 文件头部添加宏定义:

XML

 <xacro:macro name="inertial_sphere" params="mass radius"> <inertial> <mass value="${mass}"/> <inertia ixx="${(2/5) * mass * (radius*radius)}" ixy="0.0" ixz="0.0" iyy="${(2/5) * mass * (radius*radius)}" iyz="0.0" izz="${(2/5) * mass * (radius*radius)}"/> </inertial> </xacro:macro> <xacro:macro name="inertial_cylinder" params="mass length radius"> <inertial> <mass value="${mass}"/> <inertia ixx="${(1/12) * mass * (3*radius*radius + length*length)}" ixy="0.0" ixz="0.0" iyy="${(1/12) * mass * (3*radius*radius + length*length)}" iyz="0.0" izz="${(1/2) * mass * (radius*radius)}"/> </inertial> </xacro:macro> <xacro:macro name="inertial_box" params="mass x y z"> <inertial> <mass value="${mass}"/> <inertia ixx="${(1/12) * mass * (y*y+z*z)}" ixy="0.0" ixz="0.0" iyy="${(1/12) * mass * (x*x+z*z)}" iyz="0.0" izz="${(1/12) * mass * (x*x+y*y)}"/> </inertial> </xacro:macro> 

2. 给部件穿上“防弹衣”

修改 base_linkwheel_link 等部件,在 <visual>(外观)同级目录下,添加 <collision>(碰撞)和宏调用的 <xacro:inertial...>

以车身为例:

XML

 <link name="base_link"> <visual> <geometry> <box size="${base_length} ${base_width} ${base_height}"/> </geometry> <material name="blue"/> </visual> <collision> <geometry> <box size="${base_length} ${base_width} ${base_height}"/> </geometry> </collision> <xacro:inertial_box mass="1.0" x="${base_length}" y="${base_width}" z="${base_height}"/> </link> 

3. 编写 Gazebo 启动文件

创建 launch/gazebo.launch.py,这个脚本负责:

  1. 启动 Gazebo 服务。
  2. 解析 Xacro 文件。
  3. 调用 spawn_entity 节点把机器人放进去。

(核心代码略,主要是使用了 gazebo_ros 包的 spawn_entity.py)


三、 踩坑与解决方案 (重点!)

在开发过程中,我遇到了几个非常经典的新手 Bug,这里记录一下解决步骤。

现象

运行 Launch 文件时,终端出现警告,提示 KDL 不支持根节点(root link)带有惯性。

(如图)补充一下,如果首次打开像我一样窗口是黑屏的话,不用着急,后台正在下载,耐心等待一会就好。

原因

ROS 的规范建议机器人的“底座”应该是一个没有重量的虚拟点,而我的 base_link 有重量。

✅ 解决

引入 base_footprint(虚拟底座)。

在 xacro 文件最开头添加:

XML

 <link name="base_footprint"/> <joint name="base_joint" type="fixed"> <parent link="base_footprint"/> <child link="base_link"/> <origin xyz="0 0 ${base_height/2.0}" rpy="0 0 0"/> </joint> 

❌ 坑2:机器人在 Gazebo 里是白色的

现象

Rviz 里车是蓝色的,但在 Gazebo 里全是灰白色,像个石膏模型。

原因

Gazebo 根本不认 URDF 里的 <material name="blue">,它只认自己的 <gazebo> 标签。

✅ 解决

在 xacro 文件末尾,专门为 Gazebo 添加颜色标签:

XML

 <gazebo reference="base_link"> <material>Gazebo/Blue</material> </gazebo> <gazebo reference="left_wheel_link"> <material>Gazebo/Black</material> </gazebo> 

❌ 坑3:机器人“卡”在地里或者 XML 解析错误

现象

  1. 机器人生成后只有一半在地上。
  2. 编译报错 mismatched tag✅ 解决
  3. 卡地里:在 Launch 文件的 spawn_entity 节点参数中,添加 -z 0.15,让机器人出生在半空中,自然掉落。
  4. XML 报错:这是因为手误删除了 </link> 闭合标签。使用 Nano 编辑器的行号功能定位并补全即可。

四、 最终成果 (The Drop Test)

经过一顿操作修复,最终效果如下:

  1. 运行 ros2 launch ... 命令。
  2. Gazebo 窗口弹出。
  3. 机器人从空中出现,“啪”的一声稳稳落在地上,四个轮子着地,没有散架,也没有乱飞!

截图展示:


五、 总结

  • Rviz vs Gazebo:Rviz 是“卖家秀”(只负责看),Gazebo 是“买家秀”(负责物理仿真)。
  • 细节决定成败:路径写错、标签没闭合、物理属性缺失,都会导致仿真失败。
  • 下一步计划:现在的车只能推着走,明天我要给它装上 Differential Drive 插件,让它能真正跑起来!

ROS 2 学习之路,我们一起加油!

Read more

机器人必备知识——关于李群、李代数的理解

机器人必备知识——关于李群、李代数的理解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、问题提出 1.1 位姿的表述 1.2 矩阵求导的问题 二、李群 2.1 群数学定义 2.2 李群和李代数的数学定义 2.3 欧拉公式 三、李群在机器人中的应用 3.1 SO(3)特殊正交群 3.2 SE(3)特殊欧氏群 总结 前言 在对机器人技术的学习过程中,我们经常会听到“旋量”、“四元数”、“李群”、“李代数”等一些听起来高大上的词汇。首先得认识到,这些词汇都是实用的而非像“神经元”、“类脑”

黄仁勋力荐:OpenClaw不止是下一个ChatGPT,更是AI“动手时代”的破局者

黄仁勋力荐:OpenClaw不止是下一个ChatGPT,更是AI“动手时代”的破局者

在2026年GTC大会上,英伟达创始人兼CEO黄仁勋抛出了一个振聋发聩的判断:“OpenClaw绝对是下一个ChatGPT”。 这一评价并非夸大其词,而是精准点出了AI产业的核心演进方向——从“被动回答”的语言交互,转向“主动行动”的任务执行。ChatGPT开启了大语言模型(LLM)的普及时代,让AI具备了理解和生成人类语言的能力,但它始终停留在“军师”的角色,只能提供方案建议;而OpenClaw的出现,彻底打破了这一局限,将AI变成了能动手干活的“数字员工”,完成了AI从“认知”到“执行”的关键跃迁,成为连接AI能力与现实场景的核心桥梁。 下面我将从技术本质出发,拆解OpenClaw的核心架构、关键技术实现,结合代码示例、架构图与流程图,深入解析其如何实现“行动型AI”的突破,以及为何能被黄仁勋寄予厚望,成为AI产业的下一个里程碑。 一、认知跃迁:从“回答型AI”到“行动型AI”的本质区别 要理解OpenClaw的价值,首先需要明确它与ChatGPT这类“回答型AI”的核心差异。

【AI】高效交互的艺术:AI提示工程与大模型对话指南

【AI】高效交互的艺术:AI提示工程与大模型对话指南

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人等方向学习者 ❄️个人专栏:《AI》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、ChatatGPT介绍 * 二、什么是提示工程? * 三、大语言模型的底层原理 * 四、AI的相关术语 * 五、如何与AI(以ChatatGPT为例)更好交流 * 5.1 使用AI的核心 * 5.2 提示组成结构 * 5.3 创建好的提示的策略 * 5.4 提示的类别 * 5.5 创建在和AI提示的进阶框架 * 5.6如何减少AI回答的空洞无味感 * 5.7 如何提高AI回答的可读性 * 六、使用AI的更多技巧 * 6.1 高效提示的原则 * 6.

Stable Diffusion v1.5技术解密:从创意到商业化的AI图像生成革命

Stable Diffusion v1.5技术解密:从创意到商业化的AI图像生成革命 【免费下载链接】stable_diffusion_v1_5Stable Diffusion is a latent text-to-image diffusion model capable of generating photo-realistic images given any text input. 项目地址: https://ai.gitcode.com/openMind/stable_diffusion_v1_5 还在为AI图像生成的复杂技术而头疼吗?想要快速掌握这个价值数十亿美元市场背后的核心技术吗?今天,我将带你深入Stable Diffusion v1.5的技术内核,揭秘它如何从实验室走向商业化应用的完整路径。无论你是技术开发者、内容创作者还是企业决策者,这篇文章都将成为你进入AIGC世界的通行证 🚀 开篇:AI图像生成的三大痛点与解决方案 在深入技术细节之前,