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学习的第一步!

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

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

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


相关推荐
纸带2 小时前
如何理解USB 配置描述符wTotalLength位运算深度
linux·网络·windows
落羽的落羽2 小时前
【C++】深入浅出“图”——图的遍历与最小生成树算法
linux·服务器·c++·人工智能·算法·机器学习·深度优先
极地星光2 小时前
VMware+Ubuntu+LVM 虚拟机存储扩容全流程(解决分区/空间不识别问题)
linux·运维·ubuntu
HalvmånEver2 小时前
Linux:库制作与原理(二)
linux·运维·服务器
旖旎夜光3 小时前
Linux知识(1)(下)
linux·学习
HalvmånEver3 小时前
Linux:库制作与原理(一)
linux·运维·服务器
秋深枫叶红3 小时前
嵌入式第三十九篇——linux系统编程——信号通信、共享内存
linux·运维·服务器·学习
乌萨奇也要立志学C++3 小时前
【Linux】线程互斥与互斥量全解析:原理、实践与封装
linux·服务器
hweiyu003 小时前
Linux命令:gzip
linux