用ROS2Lyrical实验报告册思路重做蓝桥云课ROS1实验并改进

https://blog.csdn.net/ZhangRelay/article/details/166834164

《ROS机器人程序设计》实验报告(ROS1 Kinetic & ROS2 Lyrical 深化对比版)

专业: 机器人工程

学号: 自填

姓名: 自填

实验地点: 百工楼201 / 蓝桥云课

实验环境: Ubuntu + ROS1 Kinetic(截图环境) / ROS2 Lyrical(文档环境)

实验日期: 2026年10月5日(根据截图系统时间)


实验项目与内容一览表

序号 实验项目名称 内容提要 实验类型 实验要求
1 实验一、ROS1/ROS2入门 机器人操作系统安装、虚拟机、Docker、嵌入式系统 验证性 必修
2 实验二、ROS1/ROS2架构及概念 文件系统级、计算图级、社区级、创建功能包并实现功能 验证性 必修
3 实验三、可视化和调试工具 调试节点、日志、检测系统状态、动态参数、rqt、可视化 验证性 必修
4 实验四、3D建模与仿真 自定义3D模型,创建URDF文件、xacro文件、仿真 验证性 必修
5 实验五、导航功能 创建变换、发布传感器消息、代价地图、RViz配置、AMCL 验证型 必修
6 实验六、使用MoveIt! 机械臂、体系结构、简单运动规划、抓取放置任务 验证型 必修
7 实验七、ROS1/ROS2外设使用 游戏手柄、鼠标遥控、RGBD传感器、OpenCV、点云库 验证型 必修

实验一:ROS1/ROS2Kinetic/Lyrica II入门

设计要求: 机器人操作系统安装、虚拟机、Docker、嵌入式系统。

实验时间与截图时间戳说明

  • 截图顶部系统时间:Oct 5 10:10 ~ 10:16。
  • 终端标签页时间:2:06:43 ~ 2:07:06(表示终端运行时长)。
  • 实验操作集中在ROS1 Kinetic环境,使用阿里云镜像源查询软件包信息。

实验记录(70分)

1. 查询系统软件包信息

执行命令:

bash 复制代码
apt show ros-kinetic-desktop

输出关键信息:

  • Version: 1.3.2-0xenial-20210503-171953-0800
  • Priority: extra
  • Section: misc
  • Maintainer: Mikael Arguedas <mikael@osrfoundation.org>
  • Installed-Size: 13.3 kB
  • Depends: ros-kinetic-angles, ros-kinetic-common-tutorials, ros-kinetic-geometry-tutorials, ros-kinetic-robot, ros-kinetic-ros-tutorials, ros-kinetic-roslaunch, ros-kinetic-visualization-tutorials, ros-kinetic-viz
  • Download-Size: 1,778 B
  • APT-Manual-Installed: no
  • APT-Sources: https://mirrors.aliyun.com/ros/ubuntu xenial/main amd64 Packages
  • Description: A metapackage to aggregate several packages.
2. 环境变量自动加载
bash 复制代码
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

这样每次打开终端都会自动加载ROS1环境。

3. ROS2 Lyrical对应操作

在ROS2 Lyrical中,查询命令为:

bash 复制代码
sudo apt install ros-lyrical-desktop-full

输出显示:"ros-lyrical-desktop-full 已经是最新版(0.13.0-3resolute.20260817.181219)"。系统软件为2026年8月17日发布。同样需要配置:

bash 复制代码
echo "source /opt/ros/lyrical/setup.bash" >> ~/.bashrc
source ~/.bashrc

思考题(30分)

问题: 有4个软件包可以升级,但执行 apt list --upgradeable 时提示无法下载,报错 https://packages.osrfoundation.org/gazebo/ubuntu-stable/dists/te/InRelease 暂时不能解析域名,原因是什么?

解答:

这是网络连接问题 ,不是ROS1/ROS2安装损坏。只是软件源访问不了,域名解析警告不影响 rosrun、roslaunch 等基础开发功能。ROS本体已经安装好了,只是无法升级这4个包。可以先正常使用ROS2,待网络恢复后再执行升级。

ROS1与ROS2深度对比

对比项 ROS1 Kinetic ROS2 Lyrical
系统依赖 Ubuntu 16.04 Xenial,强绑定 Ubuntu Resolute,支持现代系统
构建系统 catkin_make / catkin build colcon build
环境配置 source /opt/ros/kinetic/setup.bash source /opt/ros/lyrical/setup.bash
包管理 apt show ros-kinetic-desktop apt show ros-lyrical-desktop-full
版本格式 1.3.2-0xenial-... 0.13.0-3resolute...

实验二:ROS1/ROS2Kinetic/Lyrica II架构及概念

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

实验时间与截图时间戳说明

  • 截图2:系统时间 Oct 5 10:16 ,终端标签 2:16:46 ,TurtleSim窗口标题 TurtleSim。
  • 截图10:系统时间 Oct 5 11:25 ,终端标签 3:25 ,运行自定义节点 ./butterflypro。
  • 实验二涵盖两个典型操作:官方五边形绘制和自定义蝴蝶曲线绘制。

实验记录(70分)

1. 运行Turtlesim并绘制五边形

启动节点:

bash 复制代码
rosrun turtlesim turtlesim_node

使用动作服务器:

bash 复制代码
rosrun turtlesim turtle_actiolib_shape_server

客户端发送目标指令后,小乌龟在蓝底画布上精准绘制出白色五边形 (截图2)。

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

  • linear.x:前进速度
  • angular.z:偏航旋转速度(正值左转,负值右转)
2. 自定义节点绘制蝴蝶图案

根据截图10,运行自定义编写的可执行文件:

bash 复制代码
./butterflypro

终端提示:

复制代码
当前速度:100
输入新速度(1.0-200.0,回车生效,输入0保持当前值):

输入 100 后,小乌龟在画布上绘制出复杂的蝴蝶曲线 。这验证了ROS1计算图级中节点与话题的松耦合特性:自定义节点发布 /turtle1/cmd_vel,turtlesim_node 订阅并执行。

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

思考题(30分)

问题: 键盘遥控小乌龟实验中,为什么按方向键乌龟不动?

解答:

  1. 光标焦点问题 :必须选中 turtle_teleop_key 所在的终端窗口,点击海龟窗口无效。
  2. 环境变量问题 :检查是否执行 source /opt/ros/kinetic/setup.bash。
  3. 网络/源报错 :不影响,turtlesim 已经安装好了。

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

ROS1与ROS2深度对比

对比项 ROS1 Kinetic ROS2 Lyrical
节点运行 rosrun turtlesim turtlesim_node ros2 run turtlesim turtlesim_node
消息类型 geometry_msgs/Twist geometry_msgs/msg/Twist
通信底层 中心化 roscore + TCP/IP 去中心化 DDS
动作机制 actionlib 原生Action,生命周期节点
话题发布 rostopic pub ros2 topic pub

实验三:可视化和调试工具

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

实验时间与截图时间戳说明

  • 截图3:系统时间 Oct 5 10:22 ,终端标签 2:16:46 附近,键盘遥控终端。
  • 截图4:系统时间 Oct 5 10:25 ,rqt Console显示消息时间 02:24:54.780227298 (2026-10-05) ,节点 /turtlesim,严重级别 Warn。

  • 截图5:系统时间 Oct 5 10:30 ,终端标签 2:30 ,rqt Service Caller调用 /turtle1/set_pen。

  • 时间戳格式说明:ROS1终端显示自1970年1月1日以来的秒和纳秒累计计数(如 1785187166.894860150),对应北京时间 UTC+8:2026-07-28(文档示例);截图4中rqt显示的是格式化后的本地时间。

实验记录(70分)

1. 键盘遥控小乌龟

运行:

bash 复制代码
rosrun turtlesim turtle_teleop_key

终端显示:

复制代码
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
Use g|b|v|c|d|e|r|t keys to rotate to absolute orientations. 'f' to cancel a rotation.
'q' to quit.

重要坑点: 光标必须聚焦在 turtle_teleop_key 终端内,按键才生效。

2. rqt图形化调试与日志分析

打开 rqt,切换到 Console 插件。控制小乌龟撞墙后,捕获到日志:

  • 节点: /turtlesim
  • 时间: 02:24:54.780227298 (2026-10-05)
  • 严重级别: Warn
  • 消息: Oh no! I hit the wall! (Clamping from x=6.080470, y=0.028881)
  • 位置: /tmp/binarydeb/ros-kinetic-turtlesim-0.7.1/src/turtle.cpp:Turtle::update:162

这说明ROS1日志系统能精确定位到源码文件和行号,便于调试。

3. 动态参数重配与服务调用

在 rqt 的 Service Caller 插件中,调用 /turtle1/set_pen 服务(类型 turtlesim/SetPen):

  • r = 0
  • g = 240
  • b = 0(绿色)
  • width = 8(画笔粗细)
  • off = 0(开启画笔,若为1则抬笔)

点击 Call 后,左侧画布中小乌龟绘制出粗绿色轨迹(截图5)。这展示了ROS基于服务的通信模型:客户端发送请求,服务端修改画笔参数,实现实时控制。

思考题(30分)

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

解答:

使用 rqt 的 Service Caller 调用 /turtle1/set_pen 服务,设置:

  • r = 200,g = 200,b = 0 → 黄色
  • width = 8,off = 0
    点击 Call 后,海龟移动时即按新参数绘制黄色轨迹。
    核心原理: ROS服务通信模型,turtlesim_node 提供 /turtle1/set_pen 服务,rqt 作为客户端发送请求,服务端接收后修改画笔参数。

ROS1与ROS2深度对比

对比项 ROS1 Kinetic ROS2 Lyrical
命令行工具 rostopic, rosservice ros2 topic, ros2 service
动态参数 rqt_reconfigure / dynamic_reconfigure ros2 param,支持参数回调
日志系统 rqt_console,文件行号定位 ros2 run 统一日志,支持时间同步
时间戳 自1970年秒+纳秒计数 标准化 builtin_interfaces/Time
rqt兼容 大部分插件可用 部分插件需适配ROS2

实验四:3D建模与仿真

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

实验时间与截图时间戳说明

  • 截图6:系统时间 Oct 5 10:45 ,终端标签 2:45。
  • RViz窗口标题:urdf.rviz* - RViz。
  • 底部时间栏显示:
    • ROS Time: 791168324.89
    • ROS Elapsed: 65.48
    • Wall Time: 791168324.92
    • Wall Elapsed: 65.45
  • joint_state_publisher 窗口显示关节滑块数值。

实验记录(70分)

1. URDF模型加载与关节控制

在RViz中加载移动机器人模型:

  • RobotModel :加载模型,数据来自 /robot_description 话题。
  • Alpha = 0.5:设置模型半透明度,0完全透明,1不透明。
  • TF:勾选后显示各连杆坐标系(红X、绿Y、蓝Z)。

运行 joint_state_publisher,弹出GUI界面,拖动滑块可实时改变关节角度:

  • left_front_wheel_joint:2.41
  • left_back_wheel_joint:2.83
  • gripper_extension:0.00
  • left_gripper_joint:0.48
  • right_gripper_joint:0.43
  • head_swivel:1.58

按钮:Randomize(随机化)、Center(归中)。

2. 原理
  • URDF:机器人统一描述文件,定义连杆、关节、几何外形。
  • robot_state_publisher :将URDF发布到 /robot_description 话题。
  • joint_state_publisher:发布关节状态。
  • RViz:订阅话题,渲染模型和TF坐标系。

启动命令:

bash 复制代码
ros2 launch urdf_tutorial display.launch.py model:=<你的urdf文件>

思考题(30分)

问题1: URDF和Xacro调整模型颜色有什么区别?

解答:

  • URDF:XML格式,代码量庞大,扩展外部结构时维护极不方便。
  • Xacro:支持宏定义、条件语句和数学运算,能大幅减少代码量,特别适合调整模型颜色和复杂逻辑操作。

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

解答:

  • 三维机器人模型:URDF(Unified Robot Description Format),XML格式,描述关节、传感器、链接和碰撞体。
  • 可视化工具:RViz,ROS内置3D可视化工具,显示机器人模型、传感器数据、路径规划信息。
  • 仿真工具 :
    1. Gazebo:强大的物理仿真器,提供ROS接口。
    2. Webots:支持多种编程语言,可与ROS集成。
    3. CoppeliaSim:V-REP升级版,提供运动规划和控制功能。

ROS1与ROS2深度对比

对比项 ROS1 Kinetic ROS2 Lyrical
Launch文件 XML .launch Python .launch.py
启动命令 roslaunch urdf_tutorial display.launch ros2 launch urdf_tutorial display.launch.py
URDF/Xacro 通用 通用
仿真工具 Gazebo, V-REP Gazebo, Webots, CoppeliaSim
时间同步 较弱 强,支持 /clock

实验五:导航功能

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

实验时间与截图时间戳说明

  • 截图7:系统时间 Oct 5 10:49 ,终端标签 2:49。
  • RViz窗口标题:rviz_navigation.rviz* - RViz。
  • 底部时间栏:
    • ROS Time: 96.00
    • ROS Elapsed: 95.60
    • Wall Time: 791168599.44
    • Wall Elapsed: 95.89
  • 地图为黑白栅格,代价地图彩色,全局路径绿色。

实验记录(70分)

1. 启动导航仿真环境

启动命令:

bash 复制代码
ros2 launch nav2_bringup tb3_simulation_launch.py

一键启动:

  • Gazebo物理仿真器,加载TurtleBot3机器人与仿真场景。
  • Nav2导航栈(定位、全局规划、局部规划、代价地图等所有导航节点)。
  • 自动打开RViz,加载导航预设配置。
2. RViz导航可视化界面
  • Fixed Frame :map。
  • 黑白栅格地图:机器人SLAM建好的环境地图,黑色=障碍物,白色=可通行区域。
  • 彩色区域(代价地图) :
    • 红色/紫色:障碍物膨胀区,机器人禁止驶入。
    • 浅蓝:安全缓冲区域。
  • 绿色线条:全局规划路径,Nav2全局规划器搜索得到的最优路径。
  • 顶部工具栏 :2D Pose Estimate(初始位姿估计)、2D Nav Goal(目标点发送)。
  • 左侧Navigation2面板:显示导航、定位状态(active代表正常运行)。
3. 整体工作流程
  1. Gazebo仿真:TurtleBot3移动,激光雷达+里程计输出传感器数据。
  2. AMCL定位:利用激光匹配已有地图,实时估算机器人位置姿态。
  3. Nav2导航栈 :
    • 全局规划:根据地图规划全局路径(RViz绿色线)。
    • 局部规划:根据实时激光数据,躲避动态障碍物,输出速度指令。
  4. RViz:可视化地图、代价地图、规划路径、机器人模型,提供交互按钮。
4. 操作简要步骤
  1. 执行启动命令,Gazebo和RViz同时弹出。
  2. RViz使用 2D Pose Estimate 点击地图,给出机器人初始位置。
  3. 使用 2D Nav Goal 在地图上点击目标位置。
  4. Nav2自动生成绿色全局路径,机器人在Gazebo环境中自主沿路径移动,躲避障碍物。

思考题(30分)

问题: 如何优化导航效果,例如提升导航中机器人的行驶速度?

解答:

环境:ROS2 + Nav2 + TurtleBot3 Gazebo仿真。

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

修改 nav2_params.yaml:

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

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

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

ROS1与ROS2深度对比

对比项 ROS1 Kinetic ROS2 Lyrical
导航框架 move_base Nav2
核心机制 插件机制 行为树 + 生命周期节点
参数配置 move_base YAML 按节点细分YAML
定位算法 AMCL AMCL(封装更标准)
启动命令 roslaunch ros2 launch
实时性 较弱 DDS支持,更强

实验六:使用MoveIt!

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

实验时间与截图时间戳说明

  • 截图8:系统时间 Oct 5 10:56 ,终端标签 2:56 ,RViz窗口 moveit.rviz* - RViz。

  • 截图9:系统时间 Oct 5 10:57 ,终端标签 2:57。

  • 终端日志时间戳:

    • [1791169018.802540588]: RRTConnect: Created 5 states (2 start + 3 goal)
    • [1791169018.802671331]: RRTConnect: Starting planning with 1 states already in datastructure
    • [1791169018.802763589]: RRTConnect: Created 4 states (2 start + 2 goal)
    • [1791169018.802845843]: ParallelPlan::solve(): Solution found by one or more threads in 0.000582 seconds
    • [1791169018.803843805]: SimpleSetup: Path simplification took 0.000530 seconds and changed from 3 to 2 states

实验记录(70分)

1. MoveIt2运动规划配置

在RViz中加载Panda机械臂模型,左侧 MotionPlanning 面板:

  • Planning Group :panda_arm(7个关节)。
  • Planning Time(s):5.0秒。
  • Planning Attempts:10次。
  • Velocity Scaling:0.10(机械臂只能运行最大速度的10%)。
  • Accel Scaling:0.10。
2. 规划与执行

终端显示 RRTConnect 规划器创建状态,ParallelPlan::solve() 在 0.000582秒 内找到解,路径简化耗时 0.000530秒 ,从3个状态变为2个状态。

操作流程:

  1. 拖拽机械臂末端设置目标位姿(橙色模型)。
  2. 设置规划组 panda_arm,调整规划时间、速度缩放。
  3. 点击 Plan:MoveIt求解轨迹,RViz预览。
  4. 点击 Execute:机械臂沿规划轨迹运动;也可直接 Plan & Execute。
  5. Stop:停止机械臂运动。
  6. Clear octomap:清除八叉树障碍物地图。
3. 选项
  • Use Cartesian Path:笛卡尔路径规划,控制末端沿直线运动(默认关节空间规划)。
  • Collision-aware IK:带碰撞检测的逆运动学求解。
4. 原理
  • MoveIt2:ROS2机器人运动规划框架,负责逆运动学求解、碰撞检测、轨迹规划。
  • 流程:设置起始位姿与目标位姿 → MoveIt规划器在关节空间搜索无碰撞轨迹 → RViz预览 → 执行轨迹。
  • Panda:7自由度机械臂,冗余自由度,同一末端位姿下存在多种关节姿态。

思考题(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. 容错设计:导航失败/机械臂规划失败时,停止任务并报警。

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

ROS1与ROS2深度对比

对比项 ROS1 Kinetic ROS2 Lyrical
框架名称 MoveIt! (moveit_ros) MoveIt2
配置方式 Setup Assistant生成大量配置 Python脚本 + launch文件
与导航结合 较松散 与Nav2紧密集成
实时控制 一般 DDS支持,多线程规划执行
规划器 OMPL, RRTConnect OMPL, RRTConnect等,支持并行

实验七:ROS1/ROS2外设使用

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

实验时间与截图时间戳说明

  • 截图10(鼠标遥控):系统时间 Oct 5 11:08 ,终端标签 3:08 。
    • Mouse Teleop窗口显示:v = 0.35 m/s,w = 19.25 deg/s。
    • rqt_graph显示计算图:/mouse_teleop → /turtle1/cmd_vel → /turtlesim。
  • 截图11(蝴蝶绘制):系统时间 Oct 5 11:25 ,终端标签 3:25 。
    • 终端提示:"当前速度:100,输入新速度(1.0-200.0,回车生效,输入0保持当前值):"。
  • 文档中手柄实验时间戳:[INFO] [1785188131.610344171] [joy_node]: Opened joystick: GreenAsia Inc. USB Joystick. deadzone: 0.0500。

实验记录(70分)

1. 鼠标遥控(teleop_tools)

运行:

bash 复制代码
ros2 run mouse_teleop mouse_teleop
  • mouse_teleop节点读取鼠标位置,直接输出Twist速度指令。
  • 通过rqt_graph看到:/mouse_teleop发布/turtle1/cmd_vel,/turtlesim订阅该话题。
  • 界面显示线速度v=0.35 m/s,角速度w=19.25 deg/s。
  • 小乌龟在屏幕上画出折线轨迹,验证遥控指令有效。
2. 游戏手柄遥控

运行:

bash 复制代码
ros2 run joy joy_node

输出:

复制代码
[INFO] [1785188131.610344171] [joy_node]: Opened joystick: GreenAsia Inc. USB Joystick. deadzone: 0.0500

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

  • sec: 1785190276
  • nanosec: 845294638
  • frame_id: joy

原理:

  • joy_node读取手柄硬件,持续发布/joy话题(摇杆axes、按键buttons)。
  • 自定义节点订阅/joy,把摇杆偏移量转换成小乌龟的线速度、角速度,发布/turtle1/cmd_vel,驱动小乌龟移动。
3. 用到软件库
  1. joy :ROS2官方手柄驱动包,读取手柄按键、摇杆数据,发布/joy话题。
  2. turtlesim:小乌龟仿真包。
  3. rclpy:ROS2 Python客户端库,编写手柄消息订阅+速度指令发布的转换节点。
  4. 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,驱动小乌龟移动。

ROS1与ROS2深度对比

对比项 ROS1 Kinetic ROS2 Lyrical
手柄驱动 joy joy(API基本一致)
鼠标遥控 teleop_tools teleop_tools
时间戳 自1970年秒+纳秒 标准化builtin_interfaces/Time
多传感器同步 较弱 强,支持rosbag2时序录制回放
图像/点云 cv_bridge, pcl_ros cv_bridge, pcl_conversions,零拷贝传输
数据录制 rosbag rosbag2

实验总结

本次实验基于ROS1 Kinetic环境完成了从基础入门、架构理解、调试工具、3D建模、导航、MoveIt到外设接入的全流程操作。通过对比发现:

  1. 通信机制 :ROS1依赖中心化roscore和TCP/IP;ROS2采用去中心化DDS,实时性、容错性、多机协同能力更强。
  2. 构建系统 :ROS1使用catkin;ROS2全面转向colcon,支持Python/C++混合编译。
  3. 导航栈 :ROS1使用move_base;ROS2升级为Nav2,引入行为树和生命周期节点,参数配置更清晰。
  4. MoveIt :ROS1使用MoveIt!;ROS2升级为MoveIt2,与Nav2集成更紧密,支持实时控制。
  5. 调试工具 :ROS1依赖rostopic、rosservice、rqt;ROS2升级为ros2 topic、ros2 service、ros2 param,并新增ros2 doctor。
  6. 时间戳与同步 :ROS2对每条消息附加标准化时间标签,强调多传感器时间对齐,支持rosbag2时序录制回放,保证感知、控制逻辑的时间一致性。
  7. 实验时间记录 :截图中的系统时间(Oct 5 10:10 ~ 11:25)、终端标签时间(2:06:43 ~ 3:25)、ROS时间戳(如02:24:54.780227298、1791169018.802540588)完整反映了实验操作时序,也体现了ROS时间与系统时间的对应关系。

ROS2在现代化重构后,更适合多机协同、实时控制和工业级部署,是未来机器人开发的主流方向。



相关推荐
林兴洋1 小时前
linux-mtr命令-ping和traceroute的能力合二为一
linux
OsDepK1 小时前
OSMDE_v1.9.0已加入FTP与shell功能
linux·运维·服务器
m4Rk_1 小时前
【论文阅读】Agent 记忆机制(91):THEANINE——不删除过时记忆,让 Agent 记住事情是如何变化的
论文阅读·人工智能·学习·开源·github
具身AGI1 小时前
人类演示补成机器人域,触觉共训才成立
机器人
我命由我123452 小时前
Photoshop - Photoshop 面板和菜单
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·photoshop
一木 之林2 小时前
RAG开发学习总结:从 LangChain 入门到检索增强生成链路的全栈实战-4/6
人工智能·学习·计算机视觉·langchain
LHR_friendship2 小时前
HCIP课程全部内容
网络·笔记·学习·hcip·华为ensp
硅基手札2 小时前
【Linux内核专栏 11】驱动框架:platform / char / misc / 设备树
linux·运维·服务器
倒头就睡的小比特2 小时前
Linux基础指令初步认识
linux