ROS2初体验:Linux 基础命令&ROS2 的安装
1. 课程目标
在上一堂课,我们学习了 Linux 操作系统的基础知识和常用操作,而接下来的主要任务就是:
- 搭建 ROS2 机器人操作系统。这是我们机器人开发的基础。
2. 关于 ROS2 的必会知识点
2.1. ROS 的发展历史
为了更直观地展示 ROS 的发展历程,可以参考以下图表:
ROS1:
- 起源:2007年(斯坦福大学与Willow Garage合作)
- 发布:2010年(Box Turtle版本)
- 特点:跨平台支持、丰富的库和工具包
- 局限性:实时性差、依赖主节点
ROS2:
- 提出:2015年(为解决ROS1局限性)
- 发布:2017年(Ardent Apalone版本)
- 特点:基于DDS的分布式架构、实时控制、跨平台兼容性
- 应用:工业应用、教育研究
通过以上发展历程的总结,可以看出 ROS 从 ROS1 到 ROS2 经历了从基础框架到现代化升级的过程,不仅解决了早期版本的不足,还为未来的机器人技术发展奠定了坚实的基础。具体来说,机器人操作系统(ROS)的发展历程经历了从 ROS1 到 ROS2 的重要转变,以下是其简要发展历程:
2.1.1. ROS1 的发展历程
起源与早期发展:ROS 起源于 2007 年,由斯坦福大学的人工智能实验室与 Willow Garage 合作开发,旨在解决机器人组件间的通信问题。ROS1 的第一个正式版本于 2010 年发布,命名为 Box Turtle,并迅速在学术界和工业界得到广泛应用。
普及与应用:随着时间的推移,ROS1 逐渐成为机器人开发的标准工具,广泛应用于服务机器人、工业机器人、无人机和自动驾驶等领域。ROS1 支持跨平台开发,主要运行在 Ubuntu 操作系统上,并提供了丰富的库和工具包,如 RViz、Gazebo 等。
局限性:尽管 ROS1 在学术和工业领域取得了巨大成功,但它也暴露出一些问题,如实时性差、依赖主节点、跨平台兼容性不足等。
2.1.2. ROS2 的发展历程
- 提出与设计:为了解决 ROS1 的局限性,ROS 团队于 2015 年开始从零开始设计 ROS2,目标是构建一个更可靠、更安全、更适合工业应用的机器人操作系统。ROS2 采用了基于 DDS(Data Distribution Service)的分布式架构,以提高系统的实时性和安全性。
发布与迭代:ROS2 的第一个正式版本于 2017 年发布,命名为 Ardent Apalone。此后,ROS2 持续迭代,推出了多个版本,如 Foxy 和 Galactic,并引入了新的构建系统 colcon,提高了构建效率和性能。
功能与改进:ROS2 在多个方面进行了创新和改进,包括支持多机器人系统、实时控制、跨平台兼容性(支持 Windows、MacOS 等),以及引入了更精细的线程模型和节点创建机制。此外,ROS2 还增强了安全性、模块化设计和跨语言支持。
应用与推广:随着 ROS2 的不断完善,越来越多的企业和项目开始转向使用 ROS2,特别是在需要高可靠性和实时性的工业应用中。同时,ROS2 也在教育界保持了其影响力,并推动了更多领域的机器人技术落地应用。
2.2. ROS2 的核心 & 重要内容
ROS2(Robot Operating System 2)是机器人操作系统 ROS 的升级版,旨在解决 ROS1 在实时性、安全性、跨平台支持等方面存在的局限性。ROS2 引入了许多新特性,使其成为现代机器人开发的强大工具。
ROS2 采用去中心化的架构,取消了 ROS1 中的 Master 节点,所有节点平等运行,通过 DDS(Data Distribution Service)实现分布式发现和通信。这种架构提高了系统的容错性和可靠性,适用于多机器人系统和复杂的分布式应用。
ROS2 通过引入 DDS 中间件,支持实时通信机制,确保数据传输的可靠性和低延迟,满足工业自动化和安全关键型场景的需求。此外,ROS2 还支持 QoS(服务质量)策略,允许用户对通信数据进行更细粒度的控制。
ROS2 不仅支持 Linux 操作系统,还扩展到 Windows、macOS 以及 RTOS 等嵌入式系统,为开发者提供了更多的选择和灵活性。
ROS2 支持多种编程语言,包括 C++和 Python,并通过 RCL(ROS Client Library)提供统一的 API 接口,简化了跨语言开发。
ROS2 增强了安全性,支持数据加密和身份验证,确保通信过程中的数据安全。此外,ROS2 还引入了权限管理机制,进一步提升了系统的安全性。
ROS2 采用模块化设计,每个节点负责单一功能,通过话题、服务、动作和参数等机制实现模块间的通信和协作。这种设计提高了系统的可扩展性和灵活性,便于开发和维护。
ROS2 提供了丰富的工具和库,如 rclcpp、rclpy、RViz2、Gazebo 等,帮助开发者进行开发、调试和仿真。这些工具极大地简化了开发流程,提高了工作效率。
ROS2 引入了节点生命周期管理功能,允许开发者更好地管理节点的启动、停止和状态监控,提高了系统的稳定性和可靠性。
ROS2 支持多机器人系统,通过分布式架构和去中心化通信机制,实现了多机器人之间的高效协同工作。
课后作业:学生配图
以下是对重要特性的文字描述,请根据描述插入图片:
- 分布式架构图:展示节点间通过 DDS 进行通信的网络拓扑结构。
- 实时性能图表:展示 DDS 通信机制下的延迟和吞吐量测试结果。
- 跨平台支持图表:展示不同操作系统上运行 ROS2 的示例。
- 模块化设计图:展示节点间通过话题、服务、动作和参数进行通信的模块化架构。
- 工具和库示意图:展示 RViz2 和 Gazebo 等工具在实际应用中的使用场景。
- 生命周期管理流程图:展示节点从启动到停止的生命周期管理流程。
- 多机器人协同示意图:展示多个机器人通过 ROS2 进行协同工作的场景。
总之,ROS2 通过其分布式
3. 课程内容
3.1. 必须掌握的 Linux 命令 (epoch 2)
为了理解本次课程 Shell 脚本中的 Linux 命令,一个新手需要掌握以下基本命令:
文件和目录操作命令:
ls
:列出目录内容。cd
:切换当前工作目录。pwd
:显示当前的工作目录。mkdir
和rmdir
:创建和删除目录。cp
和mv
:复制和移动文件或目录。rm
:删除文件或目录。
查看文件内容命令:
cat
:显示文件内容。more
和less
:分页显示文件内容。head
和tail
:分别显示文件开头或结尾的内容。
文本处理命令:
grep
:使用正则表达式搜索文件内容。find
:查找文件或目录。
系统信息和用户管理命令:
whoami
和uname
:查看用户身份和系统版本信息。ps
和top
:显示系统中正在运行的进程。kill
:终止正在运行的进程。
时间与日期命令:
date
:显示或设置系统时间与日期。
网络命令:
ping
:判断网络连接。ssh
:远程登录到其他 UNIX 主机。
权限管理命令:
chmod
:改变文件或目录的权限。chown
和chgrp
:更改文件所有者和组。ifconfig
:查看本机电脑的 ip 信息;需要安装net-tools
工具(课上作业)。
其他常用命令:
man
:查看命令帮助手册。echo
:输出字符串或变量值。
通过掌握这些基本命令,新手可以有效地进行文件管理、系统监控、用户管理以及网络操作等任务,为进一步学习 Shell 脚本打下坚实的基础。
以下是 7 道针对新手的上机练习测试,涵盖了文件和目录操作、查看文件内容、文本处理、系统信息和用户管理、时间与日期、网络操作、权限管理等基本命令:
文件和目录操作
- 使用
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
文件。
- 使用
查看文件内容- 使用
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 行内容。
- 使用
文本处理- 使用
grep
命令在/home/user/file6.txt
文件中搜索包含“error”的行。 - 使用
find
命令查找当前目录及其子目录下所有扩展名为.log
的文件。
- 使用
系统信息和用户管理
- 使用
whoami
命令查看当前用户的用户名。 - 使用
uname -a
命令查看系统的详细信息。 - 使用
ps aux
命令查看系统中所有正在运行的进程。 - 使用
top
命令实时监控系统中正在运行的进程。 - 使用
kill
命令终止编号为 XXXX(任意编号) 的进程。
- 使用
时间与日期
- 使用
date
命令显示当前系统时间与日期。 - 使用
date -s "2024-12-31 23:59:59"
命令设置系统时间为 2024 年 12 月 31 日 23 时 59 分 59 秒。
- 使用
网络操作
- 使用
ping baidu.com
命令判断与 Baidu 的网络连接是否正常。 使用。ssh user@remote_host
命令远程登录到远程主机
- 使用
权限管理
- 使用
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)
根据官网安装教程,有指导教师提炼的安装脚本如下:
#/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. 启动海龟模拟器
ros2 run turtlesim turtlesim_node
程序成功运行的界面:
4.2. 使用键盘控制海龟
ros2 run turtlesim turtle_teleop_key
程序成功运行的界面:
5. 探求 ROS2 节点通信的拓扑结构
利用 ROS2 自带的工具 rqt
,对 ROS2 的 turtlesim
功能包的节点(node
)之间拓扑结构进行探索:
rqt
首次运行可能会用英文提示没有加载任何插件,我们需要在 rqt
的菜单栏,按照如下菜单次序加载:Plugins --> Introspection --> Node Graph
,然后我们可以得到 turtlesim功能包内部各个node之间通信的拓扑关系如下图:
4. 课后作业
- 学生作业:本次课程有两个作业,请用
Ctrl+F
查找“课后作业”关键字,找到作业内容。 - 导师作业: 整理教学实验数据,包括:
- A组利用Linux命令搜索和传统的网络搜索,B组利用AI助手,
- A/B组的学生名单。B组不许利用Copy/Paste的方式输入问题prompt,
- 每个学生完成课堂测试的时间, 0/1的得分情况。