【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

保姆级教程:Windows本地部署Ollama+OpenClaw,打造你的AI赚钱系统(APP开发/量化/小说/剪辑)

摘要:想用AI搞钱但卡在技术门槛?本文手把手教你用一台Windows电脑,零成本本地部署Ollama大模型+OpenClaw智能中枢,赋予AI开发APP、量化分析、编写小说、剪辑辅助等“赚钱技能”。全程无需编程基础,跟着鼠标点、照着命令敲,即可拥有24小时待命的AI员工。 一、写在前面 很多朋友对AI变现跃跃欲试,却常被这些问题劝退: * 云端部署太贵,API调用怕浪费钱 * 技术文档看不懂,不知道从哪下手 * 数据隐私担忧,不敢把敏感资料上传 其实,你手头那台Windows电脑完全能胜任!本文将带你搭建一套完全本地化、免费、可扩展的AI生产力系统,让AI帮你写代码、分析表格、生成文案、处理视频,真正把AI变成你的“赚钱工具”。 系统架构: * 本地大脑:Ollama + DeepSeek模型,负责理解任务、生成内容 * 智能中枢:OpenClaw(原名OpenClaude),负责调用各类工具(Skill) * 赚钱技能:通过安装Skill包,让AI具备特定领域的实操能力 适用人群:

如何快速部署企业级Whisper语音识别服务:从入门到精通指南

如何快速部署企业级Whisper语音识别服务:从入门到精通指南 【免费下载链接】whisper-asr-webserviceOpenAI Whisper ASR Webservice API 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-asr-webservice Whisper语音识别服务是基于OpenAI Whisper模型构建的高效语音转文字API服务,能够为企业提供准确、快速的语音识别解决方案。本文将详细介绍如何从零开始部署Whisper语音识别服务,并探讨其在企业级应用中的最佳实践。 为什么选择Whisper语音识别服务? Whisper语音识别服务具有以下核心优势: * 多语言支持:支持99种语言的语音识别 * 高精度识别:基于OpenAI先进的Whisper模型 * 灵活部署:支持CPU和GPU多种部署方式 * 易于集成:提供RESTful API接口,方便与现有系统集成 * 开源免费:基于开源技术构建,降低企业成本 快速部署步骤:3种方式任选 Docker快速启动(推荐) 最简单的部署方式

Flutter 三方库 huggingface_client 的鸿蒙化适配指南 - 连接全球最大 AI 开源社区、助力鸿蒙应用构建云端一体的大模型推理能力

Flutter 三方库 huggingface_client 的鸿蒙化适配指南 - 连接全球最大 AI 开源社区、助力鸿蒙应用构建云端一体的大模型推理能力

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 huggingface_client 的鸿蒙化适配指南 - 连接全球最大 AI 开源社区、助力鸿蒙应用构建云端一体的大模型推理能力 前言 在 OpenHarmony 鸿蒙应用全场景智能化的今天,AI 模型的获取与推理能力已成为应用的核心竞争力。如果你希望在鸿蒙应用中集成最前沿的文本生成、图像识别或语音转写功能,而又不想从零开始训练模型,那么 Hugging Face Hub 正是你不可或缺的“AI 军火库”。huggingface_client 作为一个专为 Dart/Flutter 设计的官方级客户端,提供了对 Hugging Face API 的深度封装。本文将指导你如何在鸿蒙端利用此库轻松调取全球顶尖的开源 AI 算力。 一、原原理分析 / 概念介绍 1.1

三大扩散模型对比:Z-Image-Turbo、ComfyUI、Stable Diffusion谁更快?

三大扩散模型对比:Z-Image-Turbo、ComfyUI、Stable Diffusion谁更快? 技术选型背景与性能挑战 在AI图像生成领域,生成速度已成为决定用户体验和生产效率的核心指标。尽管Stable Diffusion系列模型凭借其强大的生成能力成为行业标准,但其通常需要数十步推理才能获得高质量结果,单张图像生成耗时往往超过30秒。随着实时创作、批量设计等场景需求激增,开发者迫切需要更高效的替代方案。 阿里通义实验室推出的 Z-Image-Turbo 模型通过蒸馏训练与架构优化,宣称可在1-10步内完成高质量图像生成,显著缩短响应时间。与此同时,ComfyUI 作为基于节点式工作流的Stable Diffusion前端工具,在灵活性和可控性上表现突出;而原始 Stable Diffusion WebUI(如AUTOMATIC1111) 则以功能全面著称。三者定位不同,但在实际使用中常被用于同类任务。 本文将从生成速度、质量稳定性、部署复杂度、资源消耗四大维度,对这三种主流扩散模型方案进行系统性对比分析,并结合真实运行数据给出选型建议。 方案一:Z-Image