ROS 概述与环境配置
简介
本教程对 ROS(机器人操作系统)进行简要概述,并指导您在 reComputer J3010 Nvidia Jetson Orin Nano 上快速安装并体验 ROS。完成本教程后,您将拥有一个可用的 ROS 环境,并能够运行一个简单的 ROS 演示程序。
前置条件
学习本教程,您需要以下硬件和软件:
- 硬件: reComputer J3010 (Nvidia Jetson Orin Nano)、显示器、键盘和鼠标。
- 软件: Jetpack 5.1.1、Ubuntu 20.04、ROS Noetic、Python 和 C++。
ROS 发展简介
什么是 ROS?
ROS(机器人操作系统)是一个用于机器人软件开发的开源框架。它在异构计算集群的主机操作系统之上提供了一个结构化的通信层。ROS 设计得尽可能轻量,由两部分组成:
- ROS 系统(ROS): 处理进程间通信的"管道"系统,是允许机器人各部件相互通信的中间件。
- ROS 软件包: 编写机器人应用所需的库和工具。
为什么选择 ROS?
ROS 简化了在各种机器人平台上创建复杂、健壮的机器人行为的过程。使用 ROS 的一些主要目标和优势包括:
- 快速开发: 提供标准平台,加速从研究到生产的开发过程。
- 全球社区: 拥有庞大且活跃的社区为软件做出贡献和改进。
- 久经考验: 在学术界和商业机器人领域得到广泛使用。
- 缩短上市时间: 凭借完善的工具和库,有助于缩短产品开发时间。
- 多功能性: 支持多个领域和平台,包括嵌入式系统。
- 开源: 免费使用、修改和扩展,促进创新与协作。
- 商用友好: 以 Apache 2.0 等宽松许可证发布。
ROS 的历史与发展
ROS(机器人操作系统)的历史与机器人技术的整体发展密切相关:
早期机器人发展
- 1959 年: 机器人技术之旅始于第一台自动化机器人的研发。
- 1972 年: 出现了能够与环境交互的机器人。
- 1982 年: 机器人被集成到计算机系统中以执行复杂任务。
- 1988 年: 机器人自动化和控制系统取得进展。
- 2002 年: 推出了用于家务的消费级机器人,如 Roomba。
- 2003 年: 借助火星探测器扩展了机器人探索领域。
- 2005 年: 机器人在工业自动化中扮演关键角色,如仓储机器人。
ROS 的历史与发展
早期机器人发展
- 1959 年: 机器人技术之旅始于第一台自动化机器人的研发。
- 1972 年: 出现了能够与环境交互的机器人。
- 1982 年: 机器人被集成到计算机系统中以执行复杂任务。
- 1988 年: 机器人自动化和控制系统取得进展。
- 2002 年: 推出了用于家务的消费级机器人,如 Roomba。
- 2003 年: 借助火星探测器扩展了机器人探索领域。
- 2005 年: 机器人在工业自动化中扮演关键角色,如仓储机器人。
ROS 的诞生
- 2007 年: ROS 在斯坦福人工智能实验室由 Morgan Quigley、Eric Berger 和 Andrew Ng 以"Switchyard"之名启动开发。其目的在于解决机器人研究领域缺乏共享软件基础设施的问题。
- 2008 年: 在机器人研究实验室 Willow Garage 继续开发。
- 2009 年: ROS 正式成立,标志是发布了第一个版本。
发展与演变
- 2010 年: 发布 ROS 1.0,Willow Garage 在其开发和社区发展中发挥了关键作用。
- 2014 年: 推出社交和服务机器人,如 Pepper,展现人机交互的进步。
- 2021 年: ROS 演进以支持复杂多样的机器人系统,适用于各种应用场景。
ROS 发布时间表
| 版本名称 | 发行版 | 发布日期 | 终止支持日期 |
|---|---|---|---|
| Boxturtle | ROS 1 | 2010 年 3 月 | 2011 年 3 月 |
| C Turtle | ROS 1 | 2010 年 8 月 | 2011 年 8 月 |
| Diamondback | ROS 1 | 2011 年 3 月 | 2012 年 11 月 |
| Electric Emys | ROS 1 | 2011 年 8 月 | 2013 年 1 月 |
| Fuerte | ROS 1 | 2012 年 4 月 | 2013 年 7 月 |
| Groovy Galapagos | ROS 1 | 2012 年 12 月 | 2014 年 5 月 |
| Hydro Medusa | ROS 1 | 2013 年 9 月 | 2015 年 5 月 |
| Indigo Igloo | ROS 1 | 2014 年 7 月 | 2019 年 4 月 |
| Jade Turtle | ROS 1 | 2015 年 5 月 | 2017 年 5 月 |
| Kinetic Kame | ROS 1 | 2016 年 5 月 | 2021 年 4 月 |
| Lunar Loggerhead | ROS 1 | 2017 年 5 月 | 2019 年 5 月 |
| Melodic Morenia | ROS 1 | 2018 年 5 月 | 2023 年 5 月 |
| Noetic Ninjemys | ROS 1 | 2020 年 5 月 | 2025 年 5 月 |
| Foxy Fitzroy | ROS 2 | 2020 年 6 月 | 2023 年 6 月 |
| Galactic Geochelone | ROS 2 | 2021 年 5 月 | 2022 年 11 月 |
| Humble Hawksbill | ROS 2 | 2022 年 5 月 | 2027 年 5 月 |
| Rolling Ridley | ROS 2 | 持续中 | 持续中 |
如今,ROS 由非营利组织 Open Robotics 维护,该组织致力于开发核心 ROS 系统,包括 ROS 2.0,后者引入了针对实时和嵌入式系统的改进,以及其他工具和库。
ROS 环境安装与快速体验
安装 ROS1
- 第 1 步: 打开终端并更新系统软件包。
bash
sudo apt update sudo apt upgrade - 第 2 步: 安装基础工具。
bash
sudo apt install curl gnupg2 lsb-release - 第 3 步: 添加 ROS 仓库密钥。
bash
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - - 第 4 步: 添加 ROS 仓库。
bash
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' - 第 5 步: 更新软件包列表。
bash
sudo apt update - 第 6 步: 安装 ros-noetic-desktop-full。
bash
sudo apt install ros-noetic-desktop-full sudo apt-get install python3-rosdep - 第 7 步: 初始化 rosdep。
bash
sudo rosdep init rosdep update - 第 8 步: 设置 ROS 环境变量。
bash
echo "source /opt/ros/noetic/setup.bash">> ~/.bashrc && source ~/.bashrc - 第 9 步: 安装依赖工具。
bash
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential - 第 10 步: 测试安装。
bash
roscore
ROS 快速入门
为快速体验 ROS,我们创建一个 ROS 工作空间并运行一个简单的演示程序。
-
创建 ROS 工作空间
bashmkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make -
加载 setup 文件
bashsource devel/setup.bash -
运行演示
bashroscore打开另一个终端并运行:
bashrosrun turtlesim turtlesim_node再打开一个终端并运行:
bashrosrun turtlesim turtle_teleop_key
这个简单的演示展示了一个图形化的小海龟机器人,您可以使用键盘对其进行控制。
ROS 常用开发软件的安装
安装 VSCode 及 ROS 开发扩展
-
关于 VSCode 的安装,请参阅之前的教程: 3.1-Python 与编程基础
-
从 VSCode 扩展市场安装
Python、ROS、C++和CMake Tools等工具。
安装 Terminator 多功能终端。
-
安装
bashsudo apt-get update sudo apt install terminator
-
打开"显示应用程序" ---> 搜索 "Terminator" ---> 右键并选择"添加到收藏夹"
-
Terminator 常用快捷键
- Alt + Up: 移动到上方终端
- Alt + Down: 移动到下方终端
- Alt + Left: 移动到左侧终端
- Alt + Right: 移动到右侧终端
- Ctrl + Shift + O: 水平分割终端
- Ctrl + Shift + E: 垂直分割终端
- Ctrl + Shift + Right: 在垂直分割的终端中将分隔条向右移动
- Ctrl + Shift + Left: 在垂直分割的终端中将分隔条向左移动
- Ctrl + Shift + Up: 在水平分割的终端中将分隔条向上移动
- Ctrl + Shift + Down: 在水平分割的终端中将分隔条向下移动
- Ctrl + Shift + S: 隐藏/显示滚动条
- Ctrl + Shift + F: 搜索
- Ctrl + Shift + C: 将所选内容复制到剪贴板
- Ctrl + Shift + V: 粘贴剪贴板内容
- Ctrl + Shift + W: 关闭当前终端
- Ctrl + Shift + Q: 退出当前窗口,关闭其中的所有终端
- Ctrl + Shift + X: 最大化当前终端
- Ctrl + Shift + Z: 最大化当前终端并放大字体
- Ctrl + Shift + N 或 Ctrl + Tab: 移动到下一个终端
- Ctrl + Shift + P 或 Ctrl + Shift + Tab: 移动到上一个终端
- F11: 切换全屏
- Ctrl + Shift + T: 打开新标签页
- Ctrl + PageDown: 移动到下一个标签页
- Ctrl + PageUp: 移动到上一个标签页
- Ctrl + Shift + PageDown: 将当前标签页与下一个标签页交换
- Ctrl + Shift + PageUp: 将当前标签页与上一个标签页交换
- Ctrl + Plus (+): 放大字体
- Ctrl + Minus (-): 缩小字体
- Ctrl + Zero (0): 将字体重置为原始大小
- Ctrl + Shift + R: 重置终端状态
- Ctrl + Shift + G: 重置终端状态并清屏
- Super + g: 绑定所有终端,使输入在所有终端中镜像
- Super + Shift + G: 解绑所有终端
- Super + t: 绑定当前标签页中的所有终端,使输入在它们之间镜像
- Super + Shift + T: 解绑当前标签页中的终端
- Ctrl + Shift + I: 打开新窗口,与原窗口共享进程
- Super + i: 打开一个独立进程的新窗口