Skip to content

ROS2初体验:Linux 基础命令&ROS2 的安装

1. 课程目标

在上一堂课,我们学习了 Linux 操作系统的基础知识和常用操作,而接下来的主要任务就是:

  • 搭建 ROS2 机器人操作系统。这是我们机器人开发的基础。

2. 关于 ROS2 的必会知识点

2.1. ROS 的发展历史

为了更直观地展示 ROS 的发展历程,可以参考以下图表:

Markdown

ROS1:
- 起源:2007年(斯坦福大学与Willow Garage合作)
- 发布:2010年(Box Turtle版本)
- 特点:跨平台支持、丰富的库和工具包
- 局限性:实时性差、依赖主节点

ROS2:
- 提出:2015年(为解决ROS1局限性)
- 发布:2017年(Ardent Apalone版本)
- 特点:基于DDS的分布式架构、实时控制、跨平台兼容性
- 应用:工业应用、教育研究

通过以上发展历程的总结,可以看出 ROS 从 ROS1 到 ROS2 经历了从基础框架到现代化升级的过程,不仅解决了早期版本的不足,还为未来的机器人技术发展奠定了坚实的基础。具体来说,机器人操作系统(ROS)的发展历程经历了从 ROS1 到 ROS2 的重要转变,以下是其简要发展历程:

2.1.1. ROS1 的发展历程

  1. 起源与早期发展ROS 起源于 2007 年,由斯坦福大学的人工智能实验室与 Willow Garage 合作开发,旨在解决机器人组件间的通信问题。ROS1 的第一个正式版本于 2010 年发布,命名为 Box Turtle,并迅速在学术界和工业界得到广泛应用。

  2. 普及与应用:随着时间的推移,ROS1 逐渐成为机器人开发的标准工具,广泛应用于服务机器人、工业机器人、无人机和自动驾驶等领域。ROS1 支持跨平台开发,主要运行在 Ubuntu 操作系统上,并提供了丰富的库和工具包,如 RViz、Gazebo 等。

  3. 局限性:尽管 ROS1 在学术和工业领域取得了巨大成功,但它也暴露出一些问题,如实时性差、依赖主节点、跨平台兼容性不足等

2.1.2. ROS2 的发展历程

  1. 提出与设计:为了解决 ROS1 的局限性,ROS 团队于 2015 年开始从零开始设计 ROS2,目标是构建一个更可靠、更安全、更适合工业应用的机器人操作系统。ROS2 采用了基于 DDS(Data Distribution Service)的分布式架构,以提高系统的实时性和安全性。

《ROS2入门21讲图文教程 | 16、DDS》 - 古月居

  1. 发布与迭代:ROS2 的第一个正式版本于 2017 年发布,命名为 Ardent Apalone。此后,ROS2 持续迭代,推出了多个版本,如 Foxy 和 Galactic,并引入了新的构建系统 colcon,提高了构建效率和性能。 ROS2极简总结-核心概念(一)_51CTO … blog.51cto.com

  2. 功能与改进:ROS2 在多个方面进行了创新和改进,包括支持多机器人系统、实时控制、跨平台兼容性(支持 Windows、MacOS 等),以及引入了更精细的线程模型和节点创建机制。此外,ROS2 还增强了安全性、模块化设计和跨语言支持。

  3. 应用与推广:随着 ROS2 的不断完善,越来越多的企业和项目开始转向使用 ROS2,特别是在需要高可靠性和实时性的工业应用中。同时,ROS2 也在教育界保持了其影响力,并推动了更多领域的机器人技术落地应用。

2.2. ROS2 的核心 & 重要内容

ROS2(Robot Operating System 2)是机器人操作系统 ROS 的升级版,旨在解决 ROS1 在实时性、安全性、跨平台支持等方面存在的局限性。ROS2 引入了许多新特性,使其成为现代机器人开发的强大工具。

ROS2 采用去中心化的架构,取消了 ROS1 中的 Master 节点,所有节点平等运行,通过 DDS(Data Distribution Service)实现分布式发现和通信。这种架构提高了系统的容错性和可靠性,适用于多机器人系统和复杂的分布式应用。

课程: 使用ROS2开发机 …

ROS2 通过引入 DDS 中间件,支持实时通信机制,确保数据传输的可靠性和低延迟,满足工业自动化和安全关键型场景的需求。此外,ROS2 还支持 QoS(服务质量)策略,允许用户对通信数据进行更细粒度的控制。 ROS2探索总结-2.走近ROS2.0时代 - 创客智造

ROS2 不仅支持 Linux 操作系统,还扩展到 Windows、macOS 以及 RTOS 等嵌入式系统,为开发者提供了更多的选择和灵活性。 ROS 1 和 ROS 2 的前世、今生、安装使用说明与资料汇总-腾讯云开发者社区-腾讯云

ROS2 支持多种编程语言,包括 C++和 Python,并通过 RCL(ROS Client Library)提供统一的 API 接口,简化了跨语言开发。

ROS2 增强了安全性,支持数据加密和身份验证,确保通信过程中的数据安全。此外,ROS2 还引入了权限管理机制,进一步提升了系统的安全性。

ROS2 采用模块化设计,每个节点负责单一功能,通过话题、服务、动作和参数等机制实现模块间的通信和协作。这种设计提高了系统的可扩展性和灵活性,便于开发和维护。 《ROS2入门21讲图文教程 | 2、ROS2对比ROS1》 - 古月居

ROS2 提供了丰富的工具和库,如 rclcpp、rclpy、RViz2、Gazebo 等,帮助开发者进行开发、调试和仿真。这些工具极大地简化了开发流程,提高了工作效率。

ROS2 系统架构 | 人人都懂物联网 getiot.tech

ROS2 引入了节点生命周期管理功能,允许开发者更好地管理节点的启动、停止和状态监控,提高了系统的稳定性和可靠性。

ROS2 支持多机器人系统,通过分布式架构和去中心化通信机制,实现了多机器人之间的高效协同工作。

课后作业:学生配图

以下是对重要特性的文字描述,请根据描述插入图片:

  • 分布式架构图:展示节点间通过 DDS 进行通信的网络拓扑结构。
  • 实时性能图表:展示 DDS 通信机制下的延迟和吞吐量测试结果。
  • 跨平台支持图表:展示不同操作系统上运行 ROS2 的示例。
  • 模块化设计图:展示节点间通过话题、服务、动作和参数进行通信的模块化架构。
  • 工具和库示意图:展示 RViz2 和 Gazebo 等工具在实际应用中的使用场景。
  • 生命周期管理流程图:展示节点从启动到停止的生命周期管理流程。
  • 多机器人协同示意图:展示多个机器人通过 ROS2 进行协同工作的场景。

总之,ROS2 通过其分布式lesson01.3.1_20241110182343.png

3. 课程内容

3.1. 必须掌握的 Linux 命令 (epoch 2)

为了理解本次课程 Shell 脚本中的 Linux 命令,一个新手需要掌握以下基本命令:

  1. 文件和目录操作命令

    • ls:列出目录内容。
    • cd:切换当前工作目录。
    • pwd:显示当前的工作目录。
    • mkdirrmdir:创建和删除目录。
    • cpmv:复制和移动文件或目录。
    • rm:删除文件或目录。
  2. 查看文件内容命令

    • cat:显示文件内容。
    • moreless:分页显示文件内容。
    • headtail:分别显示文件开头或结尾的内容。
  3. 文本处理命令

    • grep:使用正则表达式搜索文件内容。
    • find:查找文件或目录。
  4. 系统信息和用户管理命令

    • whoamiuname:查看用户身份和系统版本信息。
    • pstop:显示系统中正在运行的进程。
    • kill:终止正在运行的进程。
  5. 时间与日期命令

    • date:显示或设置系统时间与日期。
  6. 网络命令

    • ping:判断网络连接。
    • ssh:远程登录到其他 UNIX 主机。
  7. 权限管理命令

    • chmod:改变文件或目录的权限。
    • chownchgrp:更改文件所有者和组。
    • ifconfig:查看本机电脑的 ip 信息;需要安装 net-tools 工具(课上作业)。
  8. 其他常用命令

    • man:查看命令帮助手册。
    • echo:输出字符串或变量值。

通过掌握这些基本命令,新手可以有效地进行文件管理、系统监控、用户管理以及网络操作等任务,为进一步学习 Shell 脚本打下坚实的基础。


以下是 7 道针对新手的上机练习测试,涵盖了文件和目录操作、查看文件内容、文本处理、系统信息和用户管理、时间与日期、网络操作、权限管理等基本命令:

  1. 文件和目录操作

    • 使用 ls 命令列出当前目录下的所有文件和目录。
    • 使用 cd 命令切换到 /home/user/documents 目录。
    • 使用 pwd 命令显示当前工作目录的路径。
    • 使用 mkdir 命令在当前目录下创建一个名为 test_dir 的目录。
    • 使用 rmdir 命令删除刚刚创建的 test_dir 目录。
    • 使用 cp 命令将 /home/user/file1.txt 复制到 /home/user/documents 目录。
    • 使用 mv 命令将 /home/user/documents/file1.txt 移动到 /home/user/backup 目录。
    • 使用 rm 命令删除 /home/user/backup/file1.txt 文件。
  2. 查看文件内容

    • 使用 cat 命令显示 /home/user/file2.txt 文件的内容。
    • 使用 more 命令分页显示 /home/user/file3.txt 文件的内容。
    • 使用 less 命令分页显示 /home/user/file4.txt 文件的内容。
    • 使用 head 命令显示 /home/user/file5.txt 文件的前 10 行内容。
    • 使用 tail 命令显示 /home/user/file5.txt 文件的后 10 行内容。
  3. 文本处理

    • 使用 grep 命令在 /home/user/file6.txt 文件中搜索包含“error”的行。
    • 使用 find 命令查找当前目录及其子目录下所有扩展名为 .log 的文件。
  4. 系统信息和用户管理

    • 使用 whoami 命令查看当前用户的用户名。
    • 使用 uname -a 命令查看系统的详细信息。
    • 使用 ps aux 命令查看系统中所有正在运行的进程。
    • 使用 top 命令实时监控系统中正在运行的进程。
    • 使用 kill 命令终止编号为 XXXX(任意编号) 的进程。
  5. 时间与日期

    • 使用 date 命令显示当前系统时间与日期。
    • 使用 date -s "2024-12-31 23:59:59" 命令设置系统时间为 2024 年 12 月 31 日 23 时 59 分 59 秒。
  6. 网络操作

    • 使用 ping baidu.com 命令判断与 Baidu 的网络连接是否正常。
    • 使用 ssh user@remote_host 命令远程登录到远程主机
  7. 权限管理

    • 使用 chmod 755 /home/user/file1.txt 命令将 file1.txt 文件的权限设置为所有者可读写执行,组用户和其他用户可读执行。
    • 使用 chown user:group /home/user/file8.txt 命令将 file8.txt 文件的所有者更改为 user,组更改为 group
    • 使用 chgrp newgroup /home/user/file9.txt 命令将 file9.txt 文件的组更改为 newgroup

通过这些练习,新手可以逐步掌握 Linux 命令的基本用法,为进一步学习 Shell 脚本打下坚实的基础。


3.2. 利用 Linux 命令搭建 ROS2 系统(epoch 1)

根据官网安装教程,有指导教师提炼的安装脚本如下:

Shell

#/usr/bin/bash

# [Installation — ROS 2 Documentation: Jazzy documentation](https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debs.html)

## First ensure that the Ubuntu Universe repository is enabled.
sudo apt install software-properties-common
sudo add-apt-repository universe

## Now add the ROS 2 GPG key with apt.
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

## Then add the repository to your sources list.
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list >u /dev/null

## Install development tools
sudo apt update && sudo apt install ros-dev-tools

## Install ROS 2
sudo apt install ros-jazzy-desktop

## Set up your environment by sourcing the following file.
### also add the following line in `.zshrc`
# source /opt/ros/jazzy/setup.zsh

上述代码在纯净安装的 Ubuntu 24.04.1 LTS 系统中验证,时间: 2024-11-10

4. 科研成果体验

在终端中,运行 turtle 功能包中的主要节点,并利用键盘进行控制,最后利用工具 rqt 来检视拓扑结构。

4.1. 启动海龟模拟器

Shell
ros2 run turtlesim turtlesim_node

程序成功运行的界面:

lesson01.3.1_20241110182343.png

4.2. 使用键盘控制海龟

Shell
ros2 run turtlesim turtle_teleop_key

程序成功运行的界面:

lesson01.3.2_20241110182707.png

5. 探求 ROS2 节点通信的拓扑结构

利用 ROS2 自带的工具 rqt,对 ROS2 的 turtlesim 功能包的节点(node)之间拓扑结构进行探索:

Shell
rqt

首次运行可能会用英文提示没有加载任何插件,我们需要在 rqt 的菜单栏,按照如下菜单次序加载:Plugins --> Introspection --> Node Graph ,然后我们可以得到 turtlesim功能包内部各个node之间通信的拓扑关系如下图:

lesson01.3.3_20241110182925.png

4. 课后作业

  • 学生作业:本次课程有两个作业,请用Ctrl+F查找“课后作业”关键字,找到作业内容。
  • 导师作业: 整理教学实验数据,包括:
    • A组利用Linux命令搜索和传统的网络搜索,B组利用AI助手,
    • A/B组的学生名单。B组不许利用Copy/Paste的方式输入问题prompt,
    • 每个学生完成课堂测试的时间, 0/1的得分情况。