ROS1从入门到精通 1 :ROS1简介与环境搭建(Ubuntu 20.04 + Noetic完整指南)

【ROS1从入门到精通】第1篇:ROS1简介与环境搭建(Ubuntu 20.04 + Noetic完整指南)

学习目标:通过本文,你将了解ROS是什么,为什么要学习ROS,以及如何在Ubuntu 20.04上安装配置ROS Noetic环境


一、引言

1.1 为什么需要学习ROS

想象一下,你正在开发一个智能机器人,需要处理摄像头图像、激光雷达数据、控制电机运动、实现路径规划...如果从零开始编写所有代码,可能需要几年时间。而**ROS(Robot Operating System)**的出现,让这一切变得简单!

在机器人领域,ROS已经成为事实上的标准。无论是学术研究还是工业应用,掌握ROS都是机器人工程师的必备技能。据统计,超过80%的机器人研究项目使用ROS,包括:

  • 🚗 自动驾驶:百度Apollo、Autoware
  • 🤖 服务机器人:PR2、TurtleBot、Pepper
  • 🏭 工业机器人:Universal Robots、ABB
  • 🚁 无人机:PX4、ArduPilot

1.2 本文内容概览

  • 理论基础:深入理解ROS的设计理念和架构
  • 环境搭建:手把手安装Ubuntu 20.04 + ROS Noetic
  • 实战验证:运行小海龟仿真,验证安装成功
  • 常见问题:解决90%的安装问题

二、理论基础

2.1 什么是ROS

ROS(Robot Operating System) 并不是传统意义上的操作系统,而是运行在Linux上的一个机器人软件开发框架

核心特点

  • 🔧 分布式架构:将复杂系统分解为多个独立节点
  • 📦 丰富的工具库:3000+开源功能包
  • 🔄 硬件抽象:统一的硬件接口
  • 🌍 活跃的社区:全球数万开发者贡献

2.2 ROS的架构设计

系统层 中间件层 应用层 Ubuntu Linux 设备驱动 ROS Master 话题通信 服务通信 参数服务器 导航 建图 视觉 控制

架构说明

  1. 应用层:各种机器人功能的实现
  2. 中间件层:ROS核心,负责通信和协调
  3. 系统层:底层操作系统和硬件驱动

2.3 ROS vs ROS2 该如何选择

特性 ROS1 ROS2
稳定性 ⭐⭐⭐⭐⭐ 非常稳定 ⭐⭐⭐ 持续改进中
学习资源 ⭐⭐⭐⭐⭐ 资源丰富 ⭐⭐⭐ 逐步增加
实时性 ⭐⭐ 软实时 ⭐⭐⭐⭐⭐ 硬实时
跨平台 Linux Linux/Windows/MacOS
适用场景 研究、原型开发 产品化、工业应用

建议

  • 🎓 初学者:从ROS1开始,学习资源丰富
  • 🏢 企业应用:考虑ROS2,更适合产品化
  • 🔬 科研项目:ROS1足够,生态成熟

三、环境准备

3.1 系统要求

硬件要求

  • CPU:双核 2.0GHz 以上
  • 内存:4GB以上(建议8GB)
  • 硬盘:20GB可用空间
  • 显卡:支持OpenGL(可选)

软件要求

  • 操作系统:Ubuntu 20.04 LTS(推荐)
  • Python:3.8+
  • 网络:能访问Ubuntu软件源

3.2 安装方案选择

方案对比

安装方式 难度 性能 适用场景
双系统 ⭐⭐⭐ ⭐⭐⭐⭐⭐ 长期使用
虚拟机 ⭐⭐⭐ 学习测试
WSL2 ⭐⭐ ⭐⭐⭐⭐ Windows用户
Docker ⭐⭐⭐⭐ ⭐⭐⭐⭐ 快速部署

本文以双系统安装为例,其他方式原理相同。


四、ROS Noetic安装步骤

4.1 配置Ubuntu软件源

bash 复制代码
# 1. 配置sources.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

# 2. 添加密钥
sudo apt install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

推荐使用清华源(速度更快):

bash 复制代码
# 使用清华源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

4.2 安装ROS Noetic

bash 复制代码
# 1. 更新软件包索引
sudo apt update

# 2. 安装完整版ROS(推荐)
sudo apt install ros-noetic-desktop-full

# 或者安装基础版(不含GUI工具)
# sudo apt install ros-noetic-base

# 或者最小安装(仅核心包)
# sudo apt install ros-noetic-ros-core

安装版本说明

  • desktop-full(推荐):包含ROS、rqt、rviz、仿真器等
  • desktop:包含ROS、rqt、rviz等
  • base:仅包含核心库,无GUI工具
  • core:最小安装,仅通信库

4.3 初始化rosdep

bash 复制代码
# 安装python3-rosdep
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

# 初始化rosdep
sudo rosdep init
rosdep update

如果rosdep init失败(网络问题),使用以下方法:

bash 复制代码
# 方法1:使用代理
export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
sudo rosdep init
rosdep update

# 方法2:手动下载
sudo mkdir -p /etc/ros/rosdep/sources.list.d/
sudo curl -o /etc/ros/rosdep/sources.list.d/20-default.list https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
rosdep update

4.4 环境配置

bash 复制代码
# 1. 添加ROS环境变量到bashrc
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc

# 2. 使环境变量生效
source ~/.bashrc

# 3. 验证安装
rosversion -d

如果输出noetic,说明安装成功!

4.5 安装常用工具

bash 复制代码
# 安装常用工具包
sudo apt install ros-noetic-rqt ros-noetic-rqt-common-plugins ros-noetic-turtlesim ros-noetic-tf2-tools ros-noetic-tf

# 安装开发工具
sudo apt install python3-catkin-tools python3-osrf-pycommon

# 安装VS Code(可选)
sudo snap install code --classic

五、创建ROS工作空间

5.1 创建catkin工作空间

bash 复制代码
# 1. 创建工作空间目录
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/

# 2. 初始化工作空间
catkin_make

# 3. 添加工作空间到环境变量
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

# 4. 验证工作空间
echo $ROS_PACKAGE_PATH

目录结构说明

复制代码
catkin_ws/
├── build/       # 编译目录
├── devel/       # 开发目录
└── src/         # 源码目录
    └── CMakeLists.txt

5.2 测试工作空间

bash 复制代码
# 创建测试包
cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscpp

# 编译
cd ~/catkin_ws
catkin_make

# 查看包路径
rospack find test_pkg

六、运行测试:小海龟仿真

6.1 启动小海龟仿真

终端1:启动ROS Master

bash 复制代码
roscore

终端2:启动小海龟节点

bash 复制代码
rosrun turtlesim turtlesim_node

终端3:启动键盘控制节点

bash 复制代码
rosrun turtlesim turtle_teleop_key

6.2 查看系统状态

bash 复制代码
# 查看所有节点
rosnode list

# 查看所有话题
rostopic list

# 查看话题内容
rostopic echo /turtle1/cmd_vel

# 查看节点信息
rosnode info /turtlesim

# 查看计算图
rqt_graph

6.3 预期效果

如果一切正常,你应该看到:

  1. 🐢 一个可爱的小海龟窗口
  2. ⌨️ 使用方向键可以控制海龟移动
  3. 📊 rqt_graph显示节点通信关系

效果截图


七、常见问题与解决方案

Q1: sudo rosdep init失败?

问题:连接raw.githubusercontent.com超时

解决方案

bash 复制代码
# 方案1:修改hosts文件
echo "199.232.28.133 raw.githubusercontent.com" | sudo tee -a /etc/hosts

# 方案2:使用国内镜像
wget https://gitee.com/ncnynl/rosdep/raw/master/rosdep_update.sh
chmod +x rosdep_update.sh
./rosdep_update.sh

Q2: roscore命令找不到?

问题:bash: roscore: command not found

解决方案

bash 复制代码
# 检查是否source了setup.bash
source /opt/ros/noetic/setup.bash

# 永久添加到bashrc
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

Q3: catkin_make编译失败?

问题:CMake Error或找不到包

解决方案

bash 复制代码
# 清理编译缓存
cd ~/catkin_ws
rm -rf build/ devel/

# 重新编译
catkin_make

# 如果还是失败,检查依赖
rosdep install --from-paths src --ignore-src -r -y

Q4: 虚拟机运行卡顿?

问题:虚拟机中ROS运行缓慢

优化方案

  1. 分配更多内存(至少4GB)
  2. 启用3D加速
  3. 使用轻量级桌面环境
  4. 考虑使用Docker替代

Q5: 如何完全卸载ROS?

bash 复制代码
# 卸载所有ROS包
sudo apt-get remove ros-*

# 清理配置
sudo apt-get autoremove

# 删除环境变量
# 编辑~/.bashrc,删除source /opt/ros/...行

八、总结

8.1 本文要点回顾

  • 理解了ROS是什么:机器人开发的强大框架
  • 掌握了安装流程:Ubuntu 20.04 + ROS Noetic
  • 创建了工作空间:catkin_ws基础配置
  • 验证了安装成功:小海龟仿真正常运行

8.2 ROS学习路线图

环境搭建 核心概念 话题通信 服务通信 Launch文件 TF变换 URDF建模 SLAM建图 自主导航 项目实战

8.3 下一步学习

8.4 实践建议

  1. ✅ 完成小海龟仿真的各种控制
  2. ✅ 尝试查看和分析话题消息
  3. ✅ 使用rqt工具查看系统状态
  4. ✅ 创建自己的第一个功能包

九、参考资料

  • 《ROS机器人程序设计》- 机械工业出版社
  • 《机器人操作系统(ROS)浅析》- 清华大学出版社

附录A:ROS版本对应关系

ROS版本 Ubuntu版本 Python版本 支持周期
Noetic 20.04 LTS Python 3 2025年5月
Melodic 18.04 LTS Python 2/3 2023年5月
Kinetic 16.04 LTS Python 2 2021年4月(已结束)
Indigo 14.04 LTS Python 2 2019年4月(已结束)

附录B:常用命令速查

ROS核心命令

bash 复制代码
roscore                 # 启动ROS Master
rosrun pkg node         # 运行节点
roslaunch pkg file.launch # 启动launch文件
roscd package_name      # 切换到包目录

话题相关命令

bash 复制代码
rostopic list          # 列出所有话题
rostopic echo /topic   # 打印话题内容
rostopic info /topic   # 查看话题信息
rostopic hz /topic     # 查看发布频率
rostopic pub /topic    # 手动发布消息

节点相关命令

bash 复制代码
rosnode list           # 列出所有节点
rosnode info /node     # 查看节点信息
rosnode kill /node     # 关闭节点
rosnode ping /node     # 测试节点连接

服务相关命令

bash 复制代码
rosservice list        # 列出所有服务
rosservice call /srv   # 调用服务
rosservice type /srv   # 查看服务类型
rosservice info /srv   # 查看服务信息

参数相关命令

bash 复制代码
rosparam list          # 列出所有参数
rosparam get /param    # 获取参数值
rosparam set /param    # 设置参数值
rosparam dump file     # 保存参数到文件
rosparam load file     # 从文件加载参数

附录C:一键安装脚本

为了方便大家快速安装,我编写了一键安装脚本:

bash 复制代码
#!/bin/bash
# ROS Noetic一键安装脚本
# 使用方法:bash install_ros_noetic.sh

echo "======================================"
echo "    ROS Noetic 一键安装脚本"
echo "    适用系统:Ubuntu 20.04"
echo "======================================"

# 1. 添加ROS源
echo "[1/6] 配置ROS软件源..."
sudo sh -c 'echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

# 2. 更新软件包
echo "[2/6] 更新软件包列表..."
sudo apt update

# 3. 安装ROS
echo "[3/6] 安装ROS Noetic..."
sudo apt install -y ros-noetic-desktop-full

# 4. 安装依赖工具
echo "[4/6] 安装依赖工具..."
sudo apt install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

# 5. 初始化rosdep
echo "[5/6] 初始化rosdep..."
sudo rosdep init
rosdep update

# 6. 配置环境
echo "[6/6] 配置环境变量..."
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

# 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

echo "======================================"
echo "    安装完成!"
echo "    请运行 source ~/.bashrc"
echo "    或重新打开终端"
echo "======================================"

将以上内容保存为install_ros_noetic.sh,然后执行:

bash 复制代码
chmod +x install_ros_noetic.sh
./install_ros_noetic.sh

🎉 恭喜你!已经成功踏出ROS学习的第一步!

如果本文对你有帮助,请点赞👍收藏⭐支持一下!

有问题欢迎在评论区讨论,我会及时回复!

系列持续更新中,关注我获取最新文章!


相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言