引言

ROS(Robot Operating System)是机器人应用开发的得力助手,其核心价值在于实现机器人软件的模块化,便于代码复用和多机器人协同,解决了复杂机器人系统开发难题。ROS1 与 ROS2 最大区别在于通信机制,ROS1 主要是主从通信,ROS2 则采用分布式通信架构。在开发环境搭建上,推荐 ROS1 Noetic 配合 Ubuntu 20.04,通过一键安装、验证及更新软件列表步骤,能快速搭建起开发平台。而第一个程序 “控制小乌龟”,通过启动 turtlesim 节点、用 rostopic pub 命令控制乌龟移动,以及查看节点与话题,让我们深入理解了话题通信机制。ROS 的节点、话题、服务、消息等关键概念贯穿其中,为后续深入学习机器人开发奠定了坚实基础。

最后,如果大家喜欢我的创作风格,请大家多多关注up主,你们的支持就是我创作最大的动力!如果各位观众老爷觉得我哪些地方需要改进,请一定在评论区告诉我,马上改!在此感谢大家了。

各位观众老爷,本文通俗易懂,快速熟悉ROS,收藏本文,关注up不迷路,后续将持续分享ROS纯干货(请观众老爷放心,绝对又干又通俗易懂)。请多多关注、收藏、评论,评论区等你~~~





正 文

一、 ROS是什么?

1.1. 机器人操作系统核心价值 — 为什么需要ROS?

  • 问题:为什么需要ROS?

    • 传统机器人开发痛点:
      • 硬件驱动、感知算法、控制逻辑需重复开发
      • 模块间通信混乱(串口/UDP自定义协议)
      • 缺乏标准化工具(仿真、可视化)
  • ROS的解决方案

    • 提供通信中间件:标准化数据传输(Topic/Service)
    • 模块化设计:节点(Node)独立开发,松耦合
    • 丰富工具链:RViz(3D可视化)、Gazebo(仿真)、rqt(调试)
    • 开源生态:数千个可复用功能包(导航、机械臂控制)

1.2 ROS1 vs ROS2 一句话区别


特性 ROS1 ROS2
通信架构 中心化(依赖Master节点) 去中心化(DDS协议)
实时性 不支持 支持
适用场景 教学/研究/非实时机器人 工业/自动驾驶/多机器人系统

注释: 初学者建议:从 ROS1 入门,资料丰富且社区成熟!

1.3 典型应用场景展示

  1. 扫地机器人
    • 动图展示:激光雷达构建地图 → 路径规划 → 自动避障

在这里插入图片描述

  1. 机械臂抓取(MoveIt!)
    • 动图展示:摄像头识别物体 → 运动规划 → 抓取放置

请添加图片描述

  1. 无人机编队
    • 动图展示:多机协同飞行

在这里插入图片描述

二、快速搭建ROS1开发环境

注释: 尽可能不在系统环境下进行测试,所以我们使用docker容器进行学习ros !

2.1 选择ROS版本(推荐Noetic + Ubuntu 20.04)

首先使用docekr拉取镜像 docker pull 指令:

拉取 ROS:Noetic

docker pull osrf/ros:humble-desktop-full

拉取 Ubuntu:20.04

docker pull ubuntu:20.04

检查拉取:

docker imgaes
REPOSITORY TAG IMAGE ID CREATED SIZE
osrf/ros noetic-desktop-full (一堆数字和字母) (时间) 4.56GB
ubuntu 20.04 (一堆数字和字母) (时间) 72.8MB

2.2 一键安装ROS

创建容器,并命名为 ros1

# 创建容器并启动
docker run -itd \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -e DISPLAY=$DISPLAY \
    --network host --privileged=true \
    --name ros1 \
    osrf/ros:noetic-desktop-full \
    /bin/bash

# 此时已经进入容器,设置.bashrc文件,自动初始化ROS
echo "source /ros_entrypoint.sh" >> ~/.bashrc
source ~/.bashrc

# 退出容器
exit

2.3 验证安装成功并更新软件列表

rosversion -d

#输出
noetic

更新软件列表并安装qtwayland5(跑小乌龟用):

apt-get update
apt-get upgrade
apt-get install qtwayland5

三、第一个ROS程序:控制小乌龟

3.1 启动turtlesim节点(可视化窗口)

  1. 打开三个终端窗口

    • 终端1:运行ROS核心服务
    • 终端2:运行乌龟可视化程序
    • 终端3:运行控制程序
  2. 启动ROS核心服务(必须首先运行)

    # 终端1
    roscore
    
    • 输出示例:
      ... logging to /home/user/.ros/log/9cf88c9a-...
      started core service [/rosout]
      
    • 作用:ROS的"大脑",管理节点间的通信
  3. 启动乌龟可视化节点

    # 终端2
    rosrun turtlesim turtlesim_node
    
    • 这时会出现一个蓝色背景窗口,中间有一只乌龟
    • 节点概念turtlesim_node是一个独立的程序(节点),负责:
      • 可视化乌龟
      • 维护乌龟的位置状态
      • 接收运动指令并更新位置
  4. 启动键盘控制节点

    # 终端3
    rosrun turtlesim turtle_teleop_key
    
    • 终端会显示提示:
      Control Your Turtle!
      ---------------------------
      Moving around:
             w
        a    s    d
             x
      
      w/x : increase/decrease linear velocity
      a/d : increase/decrease angular velocity
      space key : force stop
      
    • 操作:在此终端按方向键控制乌龟移动(确保光标在此窗口)

3.2 使用rostopic pub命令控制乌龟移动(理解话题通信)

  1. 查看控制话题

    rostopic list | grep cmd_vel
    # 输出:/turtle1/cmd_vel
    
    • 这是控制乌龟运动的话题
  2. 查看话题消息类型

    rostopic type /turtle1/cmd_vel
    # 输出:geometry_msgs/Twist
    
  3. 查看消息结构

    rosmsg show geometry_msgs/Twist
    
    geometry_msgs/Vector3 linear
      float64 x  # 前进/后退速度 (m/s)
      float64 y  # 左右平移速度 (m/s)
      float64 z  # 上升/下降速度 (m/s)
    geometry_msgs/Vector3 angular
      float64 x  # 绕X轴旋转 (rad/s)
      float64 y  # 绕Y轴旋转 (rad/s)
      float64 z  # 绕Z轴旋转 (rad/s)
    
    • 乌龟是2D运动,所以只需关注:
      • linear.x:前进/后退速度
      • angular.z:旋转速度
  4. 发布移动命令

    # 让乌龟以0.5m/s速度前进
    rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
      x: 0.5
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.0"
    
    • 乌龟会持续直线前进,直到按Ctrl+C停止
  5. 发布旋转命令

    # 让乌龟原地旋转 (0.5rad/s ≈ 28.6度/秒)
    rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
      x: 0.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.5"
    
  6. 组合运动

    # 让乌龟画弧线前进
    rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
      x: 0.3
    angular:
      z: 0.2"
    
  7. 连续发送命令

    # 每0.1秒发送一次命令,持续发送
    rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear: {x: 0.2}"
    

3.3 使用rosnode list/rostopic list查看节点与话题

节点管理工具:

  1. 查看所有活跃节点

    rosnode list
    
    /rosout
    /teleop_turtle
    /turtlesim
    
    • /rosout:日志记录节点(roscore自动启动)
    • /teleop_turtle:键盘控制节点
    • /turtlesim:乌龟可视化节点
  2. 查看节点详细信息

    rosnode info /turtlesim
    
    Node [/turtlesim]
    Publications: 
      * /rosout [rosgraph_msgs/Log]
      * /turtle1/color_sensor [turtlesim/Color]
      * /turtle1/pose [turtlesim/Pose]
    
    Subscriptions: 
      * /turtle1/cmd_vel [geometry_msgs/Twist]
    
    Services: 
      * /clear
      * /kill
      * /reset
      * /spawn
      * /turtle1/set_pen
      * /turtle1/teleport_absolute
      * /turtle1/teleport_relative
      * /turtlesim/get_loggers
      * /turtlesim/set_logger_level
    

话题管理工具:

  1. 查看所有活跃话题

    rostopic list
    
    /rosout
    /rosout_agg
    /turtle1/cmd_vel
    /turtle1/color_sensor
    /turtle1/pose
    
  2. 查看话题详细信息

    rostopic info /turtle1/cmd_vel
    
    Type: geometry_msgs/Twist
    
    Publishers: 
     * /teleop_turtle (http://user-pc:42846/)
    
    Subscribers: 
     * /turtlesim (http://user-pc:42936/)
    
  3. 实时查看话题数据

    # 监控乌龟位置
    rostopic echo /turtle1/pose
    
    x: 5.544445
    y: 5.544445
    theta: 0.0
    linear_velocity: 0.0
    angular_velocity: 0.0
    ---
    x: 5.544445
    y: 5.544445
    theta: 0.0
    
  4. 查看话题发布频率

    rostopic hz /turtle1/pose
    
    average rate: 62.500
       min: 0.016s max: 0.016s std dev: 0.00007s window: 62
    

四、关键概念总结


概念 命令示例 功能说明
节点(Node) rosnode list 独立执行的程序单元
话题(Topic) rostopic list 节点间通信的数据通道
消息(Message) rosmsg show 话题传递的数据格式
发布(Publisher) rostopic pub 向话题发送数据
订阅(Subscriber) rostopic echo 从话题接收数据


结 束 语

能够看到这里的观众老爷,无疑是对up的最大肯定和支持,在此恳求各位观众老爷能够多多点赞、收藏和关注。在这个合集中,未来将持续给大家分享关于Docker的多种常见开发实用操作。未来也将继续分享Docker、conda、ROS等等各种实用干货。感谢大家支持!


往期回顾 — 往期专栏 和 系列博文


往期专栏: Ubuntu系列       Docker系列

本期专栏:

ROS系列(一):机器人操作系统终极指南 —— 5大核心组件 × ROS1/ROS2代际革命

Logo

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

更多推荐