260328
按照我们当前的进度,我们已经基本完成了对 ROS2 的初学者和中级部分的教程了。
基本上已经可以开始做项目了,按照我们的计划,我们解析来就可以来做一个简单的小项目了——KiBot One。
KiBot One 的本质不是“做一个很真的机器人”,而是:
- 用 ROS2 + Gazebo 做出一个可运行、可调试、可扩展的最小机器人系统
- 让一个 3D 仿真机器人能够根据你的指令完成基础移动任务
- 用这个项目把 Target 1 需要的核心能力真正串起来
项目总目标
- 在 Gazebo 里放一个简化机器人
- 机器人能接收你的指令并在 3D 场景中运动
- 整个系统具备 topic + service + action + parameter + launch + bag 的完整骨架
- 最终形成一个能演示、能复现、能继续往 Target 2 演进的项目底座
KiBot One 要做成什么样
- 一个 Gazebo 里的简化移动机器人
- 一个基础场景:地面、墙体/障碍物、目标点
- 一个指令入口:你可以让它 stop、cruise、go to point
- 一个控制闭环:机器人根据当前模式和目标状态发布运动指令
- 一个统一启动入口:launch 一键拉起
- 一套基础调试能力:CLI、rqt_graph、ros2 bag
核心功能目标
- 模式切换
- stop
- cruise
- manual_goal
- 目标执行
- 接收一个目标点
- 向目标点移动
- 周期反馈剩余距离
- 到达后返回成功
- 基础控制
- 发布速度指令
- 控制机器人朝目标方向转动并前进
- 仿真运行
- Gazebo 正常加载场景和机器人
- 机器人能在 3D 场景里移动
必须用到的技术
- ROS2
- rclpy
- colcon
- ament_python 或混合工作区
- 通信机制
- topic
- service
- action
- parameter
- 工程组织
- launch
- YAML 参数文件
- ros2 bag
- 仿真
- Gazebo
- 可视化与调试
- rqt_graph
- ros2 topic/service/action/param
- 消息类型
- geometry_msgs/msg/Twist
- geometry_msgs/msg/PoseStamped 或你自定义目标消息
- 自定义 srv/action
Gazebo 里的目标
第一版不要追求真实机器人外观,建议:
- 用圆柱体或小车底盘当机器人
- world 里放:
- 地面
- 几个障碍物
- 一个或多个目标点
- 能看到机器人从起点移动到目标点就够了
第一阶段验收标准
做到这些就算 KiBot One 第一版成立:
- 能用一个 launch 启动整套系统
- Gazebo 中成功生成机器人和场景
- 能通过 service 切换模式
- 能通过 action 下发一个目标点
- 机器人能移动到目标附近
- 能看到 action feedback 和 result
- 能用 ros2 topic echo、rqt_graph 看系统状态
- 能录一段 ros2 bag 并回放关键 topic
这个项目暂时不做什么
- 不做真实视觉识别
- 不做 URDF 复杂关节结构
- 不做 tf2 深入建模
- 不做 SLAM / Nav2
- 不做机械臂操作
- 不做大模型决策
这些是后续 KiBot One 升级版再接的内容。
一句话版本
KiBot One 的目标就是:
- 做一个基于 ROS2 和 Gazebo 的最小移动机器人系统
- 让机器人在 3D 仿真场景中根据你的指令完成基础移动任务
- 并用这个项目掌握 Target 1 所需的 ROS2 核心能力与工程组织方式
至于使用 Gazebo 作为 3D 仿真的软件也是经过考虑的,主要考虑到目前就业市场对 Gazebo 在机器人领域的需求很大,且高于 UE, Unity 等,而 Isaac Sim 虽然也有考虑,但是考虑到我几个月前就已经尝试过安装和部署使用这个东西,该软件对硬件要求过高,我目前的硬件还跑不起来这个东西,因此最终选择了 Gazebo 作为我们的 3D 仿真的最终软件。
接下来就以该项目为当前阶段的阶段性项目吧。
我们接下来就来安装一下 Gazebo 并开始搭建我们的项目。
我们接下来将以 https://gazebosim.org/docs/all/getstarted/ 这个官方教程文档来作为我们 Gazebo 起步的文档。
通过我们的筛选,由于 ROS2 kilted 这个版本对应的 lonic这个 Gazebo 版本将于今年六月份停止后续的维护,因此我们决定将 ROS2 迁移到目前 Gazebo 长期维护的 Harmonic版本所对应的 ROS2 版本——Jazzy。

因此我们需要先修改我们当前的 ROS2 版本,其实也不是修改,应该说是引入 Jazzy版本。
我们可以使用下面的命令来安装 ROS2 的 Jazzy 桌面版:
sudo apt install ros-jazzy-desktop
现在就可以看到我们目前已经有两个版本的 ROS2 了:
jese--ki@KiBall:~$ ls /opt/ros
jazzy kilted
然后,把我们现有的针对 kilted 的 profile文件 cp 一份,修改一下内容就可以了:
cp ~/.bash_profile.kildted ~/.bash_profile.jazzy
GNU nano 7.2 /home/jese--ki/.bash_profile.jazzy *
# ros
export ROS_DOMAIN_ID=42
source /opt/ros/jazzy/setup.bash
source /usr/share/colcon_cd/function/colcon_cd.sh
export _colcon_cd_root=/opt/ros/jazzy/
现在就可以看到我们的 ROS2 的版本了:
jese--ki@KiBall:~$ source ~/.bash_profile.jazzy
jese--ki@KiBall:~$ printenv ROS_DISTRO
jazzy
目前就代表我们 Jazzy 版本的 ROS2 就已经安装好了。
然后是 Harmonic版本的 Gazebo 安装了。
我们需要先安装一些可能的必要工具:
sudo apt-get install curl lsb-release gnupg
然后就可以用下面的命令来安装 Gazebo Harmonic 了:
sudo curl https://packages.osrfoundation.org/gazebo.gpg --output /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] https://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
sudo apt-get update
sudo apt-get install gz-harmonic
安装好后,我们尝试运行一下看看:

可以看到正常启动了。
接下来就按照 Gazebo 的教程来走一遍吧。