第一章:ROS基础与环境搭建

大家好,我是你们这门课的主讲工程师。说实话,每次带新人入门ROS,我都要先问一句:「你为什么要学ROS?」如果只是为了赶时髦,那我建议你先放一放。但如果你真想做好机器人运动控制,那ROS就是绕不开的坎。

这一章,咱们先把地基打牢。我会带着你从ROS的来龙去脉讲起,再到亲手在Ubuntu上搭好环境。别急,一步步来。

1.1 ROS发展历史:从实验室到工业界

ROS(Robot Operating System)最早是2007年斯坦福大学和Willow Garage公司搞出来的。说白了,它不是一个真正的操作系统,而是一个分布式通信框架。我当年刚接触时也犯过嘀咕:「这不就是个消息中间件吗?」嗯,你理解得没错,但它远不止于此。

ROS的发展有几个关键节点:

  • ROS 1.0(2010年):正式开源,主打科研和教学。我在读研时用的就是这一版,那时候文档少得可怜,全靠啃源码。
  • ROS Indigo(2014年):支持Ubuntu 14.04,算是第一个稳定版本。我记得当时做移动机器人导航,全靠它撑场面。
  • ROS Kinetic(2016年):支持Ubuntu 16.04,社区生态开始爆发。我带的第一个项目就是用Kinetic做的底盘驱动。
  • ROS Noetic(2020年):ROS 1的最后一个长期支持版,支持Ubuntu 20.04。为什么选它?因为稳定、成熟、坑少。
  • ROS 2(2017年至今):面向工业级实时性、多机器人场景。但咱们这门课还是以Noetic为主,毕竟底盘控制这块,ROS 1的生态更成熟。

我的建议:如果你是初学者,直接从Noetic入手。ROS 2虽然新,但很多底层驱动包还没完全迁移。别贪新,稳着来。

1.2 核心概念:节点、话题、服务

ROS的核心就三个东西:节点、话题、服务。你想想看,一个机器人系统里,有传感器、有控制器、有执行器,它们之间怎么通信?ROS给出了答案。

节点(Node)

节点就是一个个独立的可执行程序。比如一个节点负责读取激光雷达数据,另一个节点负责计算路径。每个节点只干一件事,干好它。我在项目中遇到过有人把所有功能写在一个节点里,结果调试时改一处崩全局——千万别这么干。

话题(Topic)

话题是节点之间通信的「总线」。一个节点发布消息到话题,另一个节点订阅这个话题就能收到消息。举个例子:

  • 发布者:/cmd_vel 话题,发布速度指令
  • 订阅者:底盘驱动节点,订阅/cmd_vel,然后控制电机

这种模式的好处是解耦。你换一个底盘驱动,只要它订阅同样的/cmd_vel,上层代码完全不用改。

服务(Service)

服务是请求-响应模式。比如你让机器人「拍一张照片」,它拍完给你返回结果。话题是持续的数据流,服务是一次性的调用。嗯,这里要注意:别把服务当话题用,否则系统会卡死。

避坑指南:我曾经在项目里用服务来传输高频传感器数据,结果CPU直接飙到100%。后来改成话题+队列缓冲,问题就解决了。记住:高频数据用话题,低频指令用服务。

1.3 在Ubuntu上安装ROS Noetic

好,理论讲完了,咱们动手。我建议你直接用Ubuntu 20.04 LTS,别用虚拟机,除非你电脑配置够硬。为什么?因为后面编译代码时,虚拟机磁盘IO会拖慢你。

安装步骤其实很简单,但有几个坑我得提前说:

  1. 设置软件源:打开终端,输入以下命令:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  1. 安装完整桌面版:我习惯装desktop-full,省得后面缺包。
sudo apt update
sudo apt install ros-noetic-desktop-full

注意:这一步会下载约1.5GB的包,网速慢的话建议用手机热点或者换个时间段。我曾经在客户现场用4G网络装,等了两个小时……

  1. 初始化rosdep
sudo rosdep init
rosdep update

这里有个常见问题:sudo rosdep init 可能会报网络错误。别慌,多试几次,或者手动下载rosdep的配置文件。我一般直接挂个代理,省心。

  1. 设置环境变量:每次打开终端都要source一下,但你可以写进.bashrc里:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  1. 验证安装
roscore

如果看到类似 started core service [/rosout] 的提示,恭喜你,安装成功!

1.4 工作空间创建与编译

工作空间(Workspace)就是你存放ROS项目的文件夹。我习惯叫它 catkin_ws,这是ROS 1的标准命名。

创建步骤:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make

第一次编译会生成 builddevel 两个文件夹。你可能会问:「为什么要有这两个文件夹?」

  • build:编译过程的中间文件,相当于工地上的脚手架
  • devel:编译好的可执行文件和库,相当于盖好的房间

编译完成后,别忘了source一下:

source devel/setup.bash

我个人习惯把这个也写进.bashrc,这样每次打开终端就能直接用工作空间里的包。

小技巧:如果你用 catkin_make 编译时发现报错,先检查一下 src 文件夹里有没有 CMakeLists.txt。没有的话,说明你放错位置了。我刚开始学时就犯过这个错,折腾了半小时。

本章小结

这一章我们走完了ROS的「前世今生」,也亲手搭好了开发环境。你可能会觉得这些基础操作有点枯燥,但相信我,后面做底盘驱动时,你会感谢今天打下的基础。

下一章,咱们开始写第一个ROS节点,让机器人动起来。嗯,那才是真正有意思的部分。

公众号:蓝海资料掘金营,微信deep3321