ros1indigo→ros2lyrical所有版本通用的7个ROS1、ROS2实验。

外设非常多,但大部分可用的,也就是游戏手柄🎮和摄像头📷这类,专业设备通常也不会购买。

第三方丰富的外部设备接入ROS1/ROS2系统使用技能。

手柄遥控

所有数据都被加上时间标签。

ROS2 给每条消息附加时间标签,用于记录数据产生时刻。实现多传感器数据时间对齐,消除消息传输延迟影响;支持 TF 动态坐标查询,区分消息时序、剔除过期数据;同时支持 rosbag 时序录制与回放,保证机器人感知、控制逻辑的时间一致性。

添加鼠标遥控的相关软件库:

teleop_tools(mouse_teleop):ROS2 官方遥控工具集,其中mouse_teleop节点读取鼠标位置,直接输出`Twist`速度指令,可控制小乌龟 / 机器人

思考题

使用游戏手柄控制Turtlesim小乌龟:

使用joy软件包读取游戏手柄输入,joy_node节点采集摇杆与按键信息并发布/joy话题;自定义 ROS2 节点订阅手柄话题,将摇杆信号转换为速度指令cmd_vel,发送给 turtlesim,从而实现游戏手柄遥控小乌龟运动。

用到软件库

  1. joy:ROS2 官方手柄驱动包,读取游戏手柄按键、摇杆数据,发布/joy话题(就是截图里运行的joy_node)
  2. turtlesim:小乌龟仿真包
  3. rclpy:ROS2 Python 客户端库,用来编写手柄消息订阅 + 速度指令发布的转换节点

原理

joy_node读取手柄硬件,持续发布/joy话题(摇杆 axes、按键 buttons); 自定义节点订阅/joy,把摇杆的偏移量转换成小乌龟的线速度、角速度,发布/turtle1/cmd_vel,驱动小乌龟移动。


1ROS2 Lyrical实验1系统入门-CSDN博客
2ROS2 Lyrical实验2架构与核心-CSDN博客
3ROS2 Lyrical实验3工具进阶-CSDN博客
4ROS2 Lyrical实验4机器人模型-CSDN博客
5ROS2 Lyrical实验5导航Nav2-CSDN博客
6ROS2 Lyrical实验6机械臂MoveIt2-CSDN博客

回顾(75分模板):

项目名称

实验一 ROS1/ROS2[Lyrical]入门

成绩

设计要求:

机器人操作系统安装、虚拟机、Docker、嵌入式系统

实验记录(70分)

学习掌握如何查询系统软件包具体的各项信息,例如发布时间。

例1:确认系统软件包为最新版本:

sudo apt install ros-lyrical-desktop-full

系统软件为2026年8月17日发布。

把环境变量自动加入终端(每次打开终端自动加载 ROS)

echo "source /opt/ros/lyrical/setup.bash" >> ~/.bashrc

source ~/.bashrc

思考题(30分):

如上是什么原因导致的?

网络连接问题。不是 ROS1/ROS2 安装坏了,只是软件源访问不了。

ROS1/ROS2 本体已经安装好了,域名解析警告不影响 ros2 run、ros2 launch 等基础开发,只是无法升级这 4 个包。可以先正常使用 ROS2。

项目名称

实验二 ROS2[Lyrical]架构及概念

成绩

内容:机器人操作系统文件系统级、计算图级、社区级、创建功能包并实现功能等

实验记录(70分)

掌握ROS2基础软件包基本使用技能。

运行turtlesim功能包,并实现特定的轨迹运动。

ros2 run turtlesim turtlesim_node

ros2 topic pub -r 10 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 1.0}, angular: {z: 0.5}}"

补充知识点

控制话题:/turtle1/cmd_vel,消息类型 geometry_msgs/msg/Twist

  • linear.x:前进速度
  • angular.z:偏航旋转速度(正值左转,负值右转)

常用修改

  1. 画圆形:修改 linear.x 和 angular.z,保持比值恒定
  2. 修改正方形边长:调整 move_straight 的第二个参数(持续时间)
  3. 画三角形:把循环次数改成 3,旋转角度改为 120 度

思考题(30分):

键盘遥控小乌龟实验

ros2 run turtlesim turtle_teleop_key

✅ 激活这个终端窗口,必须点击选中这个终端,然后就可以用方向键控制小乌龟:

  • ↑:向前
  • ↓:向后
  • ←:原地左转
  • →:原地右转
  • 按 q 退出

⚠️ 重要坑:光标必须聚焦在 turtle_teleop_key 这个终端里,按键才生效,点到海龟窗口是没用的。

原理简单说明

turtle_teleop_key 读取键盘按键,持续往话题 /turtle1/cmd_vel 发布 Twist 速度消息; turtlesim_node 订阅这个速度话题,驱动海龟移动。

排查常见问题

  1. 按方向键乌龟不动:确认选中了 teleop 终端,不要点海龟窗口。
  2. 提示找不到包:检查环境变量 source /opt/ros/lyrical/setup.bash。
  3. 提示网络 / 源报错:不影响,turtlesim 已经安装好了。

项目名称

实验三  可视化和调试工具(Lyrical)

成绩

内容:调试ROS2[Lyrical]节点、日志消息、检测系统状态、设置动态参数、roswtf、可视化节点诊断、绘制标量数据图、图像可视化、3D可视化、保存与回放数据、插件

实验记录(70分)

熟练应用ROS2功能包各项调试定制参数修改等工具。

打开图形化调试界面rqt:

具体的各种类型调试工具在Plugins标签下。

如果控制turtlesim机器人发生碰撞,会在对应窗口弹出提示。

图3.1:机器人完成指定动作回馈信息

图3.2:机器人右侧发生碰撞,控制台报错

时间差异,终端和图形化调试出现的时间格式不一致。

如上消息时间是1970年1月1日以来秒和纳秒的累计计数,北京时间 UTC+8:2026-07-28。

图形化rqt动态参数重配reconfigure,更改背景色:

这是 ROS2 turtlesim + rqt 参数动态重配置(rqt_reconfigure) 的实验界面:

  1. 左侧窗口:TurtleSim 仿真器
    • 背景橙色:通过修改turtlesim节点参数background_r/g/b实时修改画布底色。 图中:r=255,g=118,b=0 → 橙黄色。
    • 蓝色线条:小乌龟运动留下的轨迹。
    • 底部蓝色海龟:turtlesim 仿真机器人。
  2. 右侧窗口:rqt(ROS Qt 工具箱),插件:Parameter Reconfigure
    • 选中节点:/turtlesim,可以动态修改节点参数,不用重启程序。
    • 参数含义:
      • background_r / background_g / background_b:RGB 三通道,取值 0~255,实时修改仿真窗口背景颜色。
      • holonomic:全向运动开关,开启后海龟可以横向平移,不再只能向前 + 旋转。
    • 滑块拖动,左侧 turtlesim 窗口颜色立刻变化。

实验原理

turtlesim支持动态参数服务,rqt_reconfigure 作为可视化客户端,在线读写节点参数,实现不重启节点实时改背景色、开启全向运动等效果。

思考题(30分):

如何修改机器人轨迹色彩,例如,轨迹曲线为黄色?

这张图同时用到 turtlesim 仿真、键盘遥控、rqt 服务调用(Service Caller),实现修改海龟画笔颜色、粗细:

  1. 左下角终端:运行 turtle_teleop_key,键盘方向键控制海龟移动,移动时海龟会画线。
  2. 左侧 TurtleSim 窗口:红色背景画布,紫色海龟,黄色轨迹线;轨迹颜色 / 粗细由画笔服务控制。
  3. 右侧 rqt 工具 Service Caller:调用服务 /turtle1/set_pen(服务类型 turtlesim_msgs/srv/SetPen)
    • 参数:r=200,g=200,b=0 →黄色;width=8画笔粗细;off=0代表画笔开启(=1 为抬笔,移动不画线)
    • 点击 Call,下发服务请求,实时修改海龟画笔属性。

核心原理

ROS2 服务(Service)通信模型:turtlesim_node 提供 /turtle1/set_pen 服务;rqt 作为客户端发送请求,服务端接收后修改画笔参数。海龟移动时,就按新参数绘制轨迹。

绿色如下,可以通过rqt中特定配置实现。

项目名称

实验四  3D建模与仿真(Lyrical)

成绩

内容:自定义机器人3D模型,创建一个URDF文件、xacro文件、ROS1/ROS2[Kinetic/Lyrical]仿真

实验记录(70分)

自主开发设计或定制机器人各项软件包。

从头开始构建使用URDF的可视化机器人模型

可以调整Alpha的值改变透明度。

这是 ROS2 RViz2 可视化 URDF 机器人模型实验:

  1. 右侧三维视图:加载了一个 URDF 描述的移动机器人模型,半透明效果;彩色坐标轴线段是TF 坐标变换(TF),代表机器人各个连杆(link)的坐标系。
  2. 左侧 Displays 面板
    • RobotModel:负责加载机器人模型,模型数据来自话题 /robot_description(URDF 文件内容发布在此话题)
    • Alpha=0.5:设置模型透明度,0 完全透明,1 不透明,当前半透明,可以看到内部结构
    • TF勾选:开启坐标系可视化,显示各连杆的坐标轴(红 X、绿 Y、蓝 Z)
  3. 原理 URDF 是机器人统一描述文件,定义机器人连杆、关节、几何外形;通过robot_state_publisher将 URDF 发布到/robot_description话题,joint_state_publisher发布关节状态;RViz 订阅话题,把机器人模型和 TF 坐标系渲染出来。

ros2 launch urdf_tutorial display.launch.py model:=<你的urdf文件>

思考题(30分):

  1. urdf和xacro调整模型颜色有什么区别?

URDF是一种XML格式的文件,用于描述机器人的链接,关节,传感器等部件。由于代码量较为庞大,拓展外部结构时,维护将变得极为不方便;Xacro具有更强的灵活性,可以使用宏定义和条件语句等功能来更加方便地定义和调整模型的颜色,特别是当需要进行更复杂的逻辑操作时,Xacro灵活的语法和丰富的功能将得到更直观的体现。

2.ROS机器人进行三维仿真,可视化和仿真的工具是哪些?

三维机器人模型:URDF(Unified Robot Description Format)是一种用于描述机器人模型的XML文件格式。URDF文件包括机器人的关节、传感器、链接和碰撞体等元素的详细信息,可以用于进行机器人的仿真、运动规划和控制等任务。

可视化工具:RViz是ROS内置的3D可视化工具,用于显示和调试机器人模型和传感器数据。它可以显示机器人的CAD模型、传感器数据以及路径规划信息。

仿真工具:

1.Gazebo是一个用于机器人仿真的强大工具。它允许用户模拟机器人在不同环境下的行为,并提供了ROS接口,使得ROS机器人可以方便地与Gazebo进行集成。

2.Webots是一个强大的机器人仿真软件,可用于ROS机器人的仿真。它支持多种编程语言,包括ROS接口,可以方便地与ROS机器人进行集成。

3.CoppeliaSim是另一个流行的机器人仿真工具,可以与ROS机器人进行集成,并提供了强大的运动规划和控制功能。(CoppeliaSim是V-REP的升级版)

项目名称

实验五  导航功能

成绩

内容:创建变换、发布传感器消息、里程数据信息、创建基础控制器、创建地图,机器人配置、全局和局部代价地图、rviz详细配置、自适应蒙特卡洛定位,避障,目标发送

实验记录(70分)

掌握导航功能基础使用。

完成实验1-4的基础上,运行官方案例,完成如下功能:

1. 启动命令

ros2 launch nav2_bringup tb3_simulation_launch.py

作用:一键启动整套导航仿真环境

  • 启动 Gazebo 物理仿真器,加载 TurtleBot3 机器人与仿真场景
  • 启动 Nav2 导航栈(定位、全局规划、局部规划、代价地图等所有导航节点)
  • 自动打开 RViz 可视化界面,加载导航预设配置

2. 三张图对应模块

图 5.1:终端启动命令

ros2 launch nav2_bringup tb3_simulation_launch.py nav2_bringup:导航启动包;tb3 = TurtleBot3;simulation代表 Gazebo 仿真模式。

图 2:RViz 导航可视化界面(核心导航界面)

Fixed Frame 设置为map地图坐标系

  1. 黑白栅格地图:机器人 SLAM 建好的环境地图,黑色 = 障碍物,白色 = 可通行区域。
  2. 彩色区域(代价地图):
    • 红色 / 紫色:障碍物膨胀区,机器人禁止驶入;
    • 浅蓝:安全缓冲区域;
  3. 绿色线条:全局规划路径,Nav2 全局规划器搜索得到从起点到目标点的最优路径;
  4. 顶部工具栏按钮:
    • 2D Pose Estimate:机器人初始位姿估计(AMCL 定位)
    • Nav2 Goal:设置导航目标点,机器人自动规划并运动到目标
  5. 左侧Navigation2面板:显示导航、定位状态(active 代表正常运行)。

图 3:Gazebo 仿真环境

Gazebo 是 ROS 常用物理仿真器:

  • 场景:六边形封闭环境,外围绿色墙体、内部白色圆柱障碍物;
  • 内置 TurtleBot3 机器人模型,自带激光雷达;
  • 仿真激光数据、机器人里程计,数据传给 Nav2 用于定位与建图导航。

3. 整体工作流程

  1. Gazebo 仿真:TurtleBot3 在虚拟环境移动,激光雷达 + 里程计输出传感器数据。
  2. AMCL 定位:利用激光匹配已有地图,实时估算机器人在地图中的位置姿态。
  3. Nav2 导航栈:
    • 全局规划:根据地图,规划一条从当前位置到目标点的全局路径(RViz 绿色线);
    • 局部规划:根据实时激光数据,躲避动态障碍物,输出速度指令控制机器人。
  4. RViz:可视化地图、代价地图、规划路径、机器人模型,提供交互按钮设置起点和目标点。

4. 实验原理简述

Nav2是ROS2的导航框架,实现机器人自主定位、路径规划、自主避障导航。流程:传感器采集环境数据→AMCL定位→全局路径规划→局部避障规划→下发速度指令驱动机器人移动。

5. 操作简要步骤

  1. 执行启动命令,Gazebo 和 RViz 同时弹出;
  2. RViz 使用2D Pose Estimate点击地图,给出机器人初始位置;
  3. 使用Nav2 Goal在地图上点击目标位置;
  4. Nav2 自动生成绿色全局路径,机器人在 Gazebo 环境中自主沿路径移动,躲避障碍物。

6. 名词精简总结

  • Gazebo:物理仿真环境,虚拟机器人与场景
  • RViz:可视化工具,查看地图、路径、机器人状态
  • Nav2:ROS2 导航框架,负责定位 + 路径规划 + 避障
  • AMCL:粒子滤波定位算法,确定机器人在地图里的位置
  • 全局路径:宏观长距离路径;局部路径:实时避障短距离轨迹

思考题(30分):

1.如何优化导航效果,例如提升导航中机器人的行驶速度。

环境:ROS2 + Nav2 + TurtleBot3 Gazebo 仿真

⚠️ 提速不能只改一个参数,速度上限、加速度、代价地图、规划器参数需要配套修改,否则机器人容易撞障碍物、抖动、导航失败。

提升机器人行驶速度,修改nav2_params.yaml:

  1. 增大max_vel_x最大前进线速度,同步调高acc_lim_x加速度;
  2. 提高 PurePursuit 控制器lookahead_dist预瞄距离,避免高速路径抖动;
  3. 适当减小局部代价地图inflation_radius障碍物膨胀半径,减少远距离减速;
  4. 优化 AMCL 定位参数,保证高速下定位稳定。

调试要点:参数逐步上调,速度越高碰撞风险越大;若出现振荡、丢定位,降低速度或增大安全膨胀半径。

其他导航效果优化:开启路径平滑,合理设置目标到达容差,选用高质量地图。

项目名称

实验六 使用MoveIt!

成绩

内容:机械臂、体系结构、简单运动规划、抓取放置任务

实验记录(70分)

完成moveit2相关功能包安装和配置。

该实验基于 MoveIt2 在 RViz 中对 Panda 机械臂进行运动规划:设置目标位姿,规划器求解无碰撞轨迹,可预览并执行机械臂运动,支持调整运动速度、规划时间等参数。

1. 界面整体说明

窗口标题:moveit.rviz,是 MoveIt2 配套 RViz 配置文件。 右侧 3D 视图:Panda 机械臂模型,半透明白色是当前机械臂位姿;橙色是规划完成后的目标位姿;彩色坐标轴标记末端执行器坐标系。 左侧分为两大区域:上方 Displays 可视化插件列表;下方MotionPlanning(运动规划)控制面板,是 MoveIt 交互核心。

2. Displays 面板(可视化插件)

  • Grid:空间网格参考平面
  • MarkerArray:场景标记,显示坐标系、辅助图形
  • Trajectory:轨迹可视化,预览规划出的关节运动轨迹
  • PlanningScene:规划场景,包含机器人模型、障碍物、碰撞检测空间
  • MotionPlanning:MoveIt 运动规划交互插件

3. MotionPlanning 运动规划面板(核心)

基础设置

  • Planning Group: panda_arm:规划组,选中 panda 机械臂手臂的 7 个关节
  • Planning Time(s):5.0:规划最长允许时间,5 秒内寻找可行无碰撞轨迹
  • Planning Attempts:10:最多尝试 10 次运动规划,找不到路径就失败
  • Velocity Scaling:0.10:速度缩放系数,0.1 代表机械臂只能运行最大速度的 10%,调大可加快运动
  • Accel. Scaling:0.10:加速度缩放系数,限制关节加速度

操作按钮(Commands)

  1. Plan:运动规划。在当前场景下,求解从起始位姿到目标位姿的无碰撞关节轨迹,只计算、不执行。
  2. Execute:执行已经规划好的轨迹,驱动机械臂运动。
  3. Plan & Execute:一键规划 + 执行。
  4. Stop:停止机械臂运动。
  5. Clear octomap:清除八叉树障碍物地图。

选项

  • Use Cartesian Path:笛卡尔路径规划,控制末端沿直线运动(默认是关节空间规划)
  • Collision-aware IK:带碰撞检测的逆运动学求解

4. 实验原理

  1. MoveIt2:ROS2 机器人运动规划框架,负责逆运动学求解、碰撞检测、轨迹规划。
  2. 流程:设置机械臂起始位姿与目标位姿 → MoveIt 规划器在关节空间搜索一条无碰撞轨迹 → RViz 预览轨迹 → 执行轨迹,机械臂运动。
  3. Panda 是 7 自由度机械臂,冗余自由度,可以在同一个末端位姿下,存在多种关节姿态。

5. 实验操作步骤

  1. 在 RViz 中拖拽机械臂末端,设置目标位姿(图中橙色模型)。
  2. 设置规划组panda_arm,调整规划时间、速度缩放。
  3. 点击Plan:MoveIt 求解轨迹,RViz 预览运动轨迹。
  4. 预览无误后点击Execute,机械臂沿着规划轨迹运动;也可以直接Plan & Execute。

6. 参数优化(报告可用)

  • Velocity Scaling、Accel. Scaling:增大数值,提高机械臂运动速度;过大容易触发速度 / 加速度限制,甚至振动。
  • Planning Time:规划失败时,适当延长规划时间,给规划器更多搜索时间。
  • 开启Collision-aware IK,在存在障碍物场景下避免碰撞。

思考题(30分):

如何结合实验5导航nav2和实验6移动抓取moveit,设计如下任务?

 

任务目标

复合机器人(移动底盘 + 机械臂)自主完成:导航到抓取台 → 抓取方块 → 导航到放置台 → 释放方块。

系统组成

  • Gazebo:物理仿真环境,机器人、工作台、待抓取方块
  • Nav2:底盘定位、路径规划、自主导航避障
  • MoveIt2:机械臂逆解、无碰撞轨迹规划、夹爪控制
  • ROS2 状态机:任务调度,实现导航与机械臂动作互斥(底盘移动时机械臂锁定;机械臂作业时底盘静止)
  • TF2:坐标系转换,完成全局地图坐标与机械臂基座坐标转换

任务流程(简化)

  1. 系统启动,加载仿真环境、Nav2、MoveIt2,机器人处于初始安全位姿。
  2. 调用 Nav2,发送抓取工作台目标点,机器人自主导航、避障行驶至抓取台,到达后底盘锁止。
  3. 调度节点启动 MoveIt2:机械臂运动至物体上方,下降,夹爪闭合抓取方块,抬升物体。
  4. 抓取完成,再次调用 Nav2,导航至放置工作台,底盘停止。
  5. MoveIt2 规划轨迹,机械臂下放方块,夹爪打开,机械臂退回安全姿态。
  6. 任务结束。

关键优化要点

  1. 动作互锁:使用状态机保证导航和机械臂不会同时动作,防止碰撞。
  2. 坐标校准:依靠 TF2 转换方块在 map 坐标系和机械臂 base_link 坐标系的位姿。抓取物体后,将方块绑定在机械臂末端,更新 MoveIt 规划场景,避免碰撞误检。
  3. 参数优化
    • Nav2:合理设置到达容差,保证停靠位置精度;适当降低停靠速度。
    • MoveIt2:调整速度、加速度缩放系数;预留充足规划时间。
  4. 容错设计:导航失败 / 机械臂规划失败时,停止任务并报警。

实验预期结果

机器人能够自主避开障碍物,导航到达目标工作台;机械臂规划无碰撞轨迹,稳定抓取方块;携带物体导航至放置点,完成物体放置,全程无碰撞。

项目名称

实验七  ROS2[Lyrical]外设

成绩

内容:使用游戏手柄、使用RGBD传感器,ROS1/ROS2[Kinetic/Lyrical]摄像头驱动、ROS1/ROS2[Kinetic/Lyrical]与OpenCV库、标定摄像头、视觉里程计,点云库、可视化点云、滤波和缩减采样、配准与匹配、点云分区

实验记录(70分)

第三方丰富的外部设备接入ROS1/ROS2系统使用技能。

手柄遥控

所有数据都被加上时间标签。

ROS2 给每条消息附加时间标签,用于记录数据产生时刻。实现多传感器数据时间对齐,消除消息传输延迟影响;支持 TF 动态坐标查询,区分消息时序、剔除过期数据;同时支持 rosbag 时序录制与回放,保证机器人感知、控制逻辑的时间一致性。

添加鼠标遥控的相关软件库:

teleop_tools(mouse_teleop):ROS2 官方遥控工具集,其中mouse_teleop节点读取鼠标位置,直接输出`Twist`速度指令,可控制小乌龟 / 机器人

思考题(30分):

使用游戏手柄控制Turtlesim小乌龟:

使用joy软件包读取游戏手柄输入,joy_node节点采集摇杆与按键信息并发布/joy话题;自定义 ROS2 节点订阅手柄话题,将摇杆信号转换为速度指令cmd_vel,发送给 turtlesim,从而实现游戏手柄遥控小乌龟运动。

用到软件库

  1. joy:ROS2 官方手柄驱动包,读取游戏手柄按键、摇杆数据,发布/joy话题(就是截图里运行的joy_node)
  2. turtlesim:小乌龟仿真包
  3. rclpy:ROS2 Python 客户端库,用来编写手柄消息订阅 + 速度指令发布的转换节点

原理

joy_node读取手柄硬件,持续发布/joy话题(摇杆 axes、按键 buttons); 自定义节点订阅/joy,把摇杆的偏移量转换成小乌龟的线速度、角速度,发布/turtle1/cmd_vel,驱动小乌龟移动。


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐