第2章:开发环境搭建——Ubuntu+ROS Noetic安装、工作空间创建、依赖包安装、串口与CAN工具链配置
好,咱们正式开始动手了。
做硬件驱动开发,环境搭建是第一道坎。我见过太多人卡在这一步——不是装错版本,就是依赖冲突,折腾一整天还没跑起来。说实话,这挺打击信心的。
这一章,我会带你一步步把环境搭好。你跟着我来,别跳步,基本不会出问题。
2.1 为什么选Ubuntu 20.04 + ROS Noetic?
先回答一个常见问题:为什么非得用这个组合?
ROS Noetic 是最后一个完全支持 Python 2 的版本,但它也原生支持 Python 3。这意味着什么?意味着你既能用老项目的代码,又能写新风格的 Python 3 驱动。我自己的项目里,很多底层串口和 CAN 的封装都是用 Python 3 写的,跑在 Noetic 上非常稳。
另外,Ubuntu 20.04 是 LTS 版本,支持到 2025 年。你想想看,一个稳定的系统对嵌入式开发有多重要。我曾经在 Ubuntu 18.04 上踩过一个坑——某个 CAN 库的依赖在 18.04 上死活装不上,换到 20.04 一次过。
核心建议:如果你手头有 Ubuntu 20.04 的机器,直接用。如果没有,装个虚拟机也行。我个人习惯用 VMware,分配 4 核 CPU、8GB 内存,跑 Noetic 完全够用。
2.2 安装ROS Noetic
安装过程其实不复杂,但有几个细节要注意。
2.2.1 添加软件源
打开终端,执行以下命令:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
2.2.2 添加密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
嗯,这里要注意。有时候网络不好,密钥下载会失败。我遇到过两次,解决办法是换个时间再试,或者用代理。
2.2.3 安装ROS Noetic
sudo apt update
sudo apt install ros-noetic-desktop-full
这个包大概 1.5GB 左右,下载时间取决于你的网速。我建议你泡杯咖啡,或者去干点别的。
2.2.4 初始化 rosdep
sudo rosdep init
rosdep update
这一步很多人会卡住。如果 rosdep update 报错,多半是网络问题。你可以试试:
sudo apt install python3-rosdep
sudo rosdep init --rosdistro noetic
rosdep update
小技巧:如果 rosdep 一直失败,可以手动下载 rosdep.yaml 文件放到 /etc/ros/rosdep/sources.list.d/ 目录下。具体方法网上有,我就不展开了。
2.2.5 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证一下:
roscore
如果看到 ROS 的启动信息,恭喜你,安装成功了。
2.3 创建工作空间
工作空间是 ROS 项目的根目录。我习惯把它放在 ~/ros_ws 下。
mkdir -p ~/ros_ws/src
cd ~/ros_ws
catkin_make
编译完成后,你会看到 build 和 devel 两个目录。别忘了 source 一下:
source devel/setup.bash
为了以后方便,我建议你把这句话也加到 ~/.bashrc 里:
echo "source ~/ros_ws/devel/setup.bash" >> ~/.bashrc
注意:如果你同时有多个工作空间,source 的顺序很重要。后 source 的会覆盖前面的。我一般只保留一个工作空间在 .bashrc 里,其他的手动 source。
2.4 安装依赖包
做硬件驱动开发,有几个包是绕不开的。我列个清单:
| 包名 | 用途 | 安装命令 |
|---|---|---|
| serial | 串口通信 | sudo apt install ros-noetic-serial |
| socketcan_interface | CAN总线接口 | sudo apt install ros-noetic-socketcan-interface |
| joy | 手柄/摇杆输入 | sudo apt install ros-noetic-joy |
| tf2 | 坐标变换 | sudo apt install ros-noetic-tf2 |
| robot_state_publisher | 机器人状态发布 | sudo apt install ros-noetic-robot-state-publisher |
你可以一次性装完:
sudo apt install ros-noetic-serial ros-noetic-socketcan-interface ros-noetic-joy ros-noetic-tf2 ros-noetic-robot-state-publisher
另外,Python 的依赖也别忘:
sudo apt install python3-serial python3-can
个人经验:我早期做项目时,经常漏装 python3-serial,结果 Python 脚本里 import serial 就报错。后来我养成了一个习惯——装完 ROS 包后,立刻把 Python 的依赖也装上,省得后面再折腾。
2.5 串口工具链配置
串口是硬件驱动最常用的接口。我一般用 minicom 和 screen 来调试。
2.5.1 安装 minicom
sudo apt install minicom
配置串口参数:
sudo minicom -s
在菜单里设置波特率、数据位、停止位等。我常用的配置是 115200 波特率、8 数据位、1 停止位、无校验。
2.5.2 使用 screen
如果你喜欢轻量级工具,screen 是个好选择:
sudo apt install screen
screen /dev/ttyUSB0 115200
退出 screen 按 Ctrl+A 然后 K。
2.5.3 权限问题
这是个大坑。默认情况下,普通用户没有权限访问串口设备。我遇到过好几次,明明插上了 USB 转串口,但程序就是打不开。
解决办法:
sudo usermod -a -G dialout $USER
然后注销重新登录。之后你就能直接 open("/dev/ttyUSB0") 了。
注意:如果你用的是 USB 转串口,设备名可能是 ttyUSB0 或 ttyACM0。可以用 ls /dev/tty* 查看。插拔一下设备,看看哪个是新出现的。
2.6 CAN工具链配置
CAN 总线在机器人里用得越来越多,尤其是移动底盘和机械臂。ROS 对 CAN 的支持主要靠 socketcan_interface。
2.6.1 安装 CAN 工具
sudo apt install can-utils
这个包提供了 candump、cansend、cangen 等命令行工具,调试非常方便。
2.6.2 配置 CAN 接口
假设你用的是 USB 转 CAN 设备(比如 PCAN-USB 或 SLCAN),先加载驱动:
sudo modprobe can
sudo modprobe can_raw
sudo modprobe slcan
然后配置接口:
sudo ip link set can0 up type can bitrate 500000
sudo ifconfig can0 up
验证一下:
candump can0
如果看到数据,说明 CAN 通了。
2.6.3 自动配置脚本
每次重启都要手动配置,太麻烦了。我写了个脚本,放在 /etc/init.d/ 下:
#!/bin/bash
# CAN 接口自动配置脚本
sudo modprobe can
sudo modprobe can_raw
sudo modprobe slcan
sudo ip link set can0 up type can bitrate 500000
sudo ifconfig can0 up
保存为 can_setup.sh,然后:
sudo chmod +x can_setup.sh
sudo update-rc.d can_setup.sh defaults
小技巧:如果你用的是虚拟 CAN(vcan),可以用 sudo modprobe vcan 然后 sudo ip link add dev vcan0 type vcan。这样即使没有硬件,也能在软件层面调试 CAN 通信。
2.7 验证环境
最后,我们来验证一下整个环境是否正常。
2.7.1 测试串口
python3 -c "import serial; print('Serial OK')"
2.7.2 测试 CAN
python3 -c "import can; print('CAN OK')"
2.7.3 测试 ROS
roscore &
rostopic list
如果都没报错,恭喜你,环境搭建完成了。
总结一下:这一章我们装了 ROS Noetic、建了工作空间、装了依赖包、配了串口和 CAN 工具链。这些东西看着琐碎,但都是后面写驱动的基础。我当年第一次搭环境时花了整整两天,你现在跟着我走,应该两小时就能搞定。
下一章,我们会开始写第一个硬件驱动——一个简单的串口传感器驱动。到时候你会看到,今天配的这些工具全都会用上。
好,先到这儿。有什么问题,欢迎在评论区留言。