ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

树莓派4B安装ROS Melodic实战指南:网络配置与远程调试

树莓派4B安装ROS Melodic实战指南:网络配置与远程调试 把ROS Melodic装到树莓派4B上这件事说难也难说简单也简单。难在于很多教程只讲“敲命令”不讲“为什么”一旦网络或者依赖出点问题新手就直接卡死简单在于只要你把底层逻辑弄明白把网络、系统源、ROS源、远程控制这几条线理顺整个过程其实就是一个“顺序填空”的活。我自己前后在树莓派4BRaspbian buster上完整装过三遍ROS Melodic前两遍踩坑踩到怀疑人生第三遍才彻底把每一步的因果关系搞清楚。这篇博文就按我实际操作的顺序来写重点是帮你避开那些“教程从没提过”的暗坑另外把网络配置和远程桌面控制这两个容易被忽视、但实际使用中特别关键的环节单独拿出来讲透。这篇文章适合谁看如果你正准备用树莓派做机器人主控或者想在ARM平台上跑ROS又或者你只是想体验一下“Linux ROS”的完整环境那这份记录可以直接照着做。我会尽量把“为什么这么做”讲清楚而不是只丢一堆命令让你复制粘贴。1. 项目整体思路与准备工作1.1 为什么选树莓派4B Raspbian buster ROS Melodic先说说版本选择的逻辑。ROS Melodic对应的官方支持系统是Ubuntu 18.04 Bionic按理说最省事的方案是在树莓派上装Ubuntu Mate 18.04然后直接用官方源安装ROS。但我在实际使用中发现Raspbian buster在树莓派4B上的硬件兼容性和整体流畅度要比Ubuntu Mate更好尤其是Wi-Fi、蓝牙、显卡驱动这些底层部分Raspbian基本上是“开箱即用”的。那为什么不直接用更新版本的Raspbian bullseye或者bookworm因为ROS Melodic的预编译包依赖的是buster标配的Python 3.7和一些比较老的库版本换到新系统后依赖冲突会非常多你要手动编译一堆库工作量直接翻倍。所以如果你就是想稳定跑ROS老老实实用buster反而是最省心的组合。树莓派4B的硬件性能在这里也值得一提。4B用的是BCM2711四核A72处理器2GB以上内存版本跑ROS Melodic的基础功能完全够用。如果你想在ROS里跑仿真、跑视觉SLAM建议直接上4GB或者8GB版本内存不够的话swap会频繁触发整机卡到让你怀疑人生。1.2 硬件清单与系统烧录硬件方面我列一个最低配置清单照着准备就行树莓派4B主板4GB内存版本起步预算够的话直接8GBMicroSD卡建议32GB以上Class 10或A1级别别买杂牌这张卡决定了系统的稳定性官方5V/3A USB-C电源或者至少是能稳定输出3A的电源别用手机充电头凑合树莓派4B对电压很敏感不要求显示器键盘鼠标因为后面会配置SSH和远程桌面但第一次烧录系统时最好准备一张显示器和一套键鼠以备调试系统镜像我选用的是Raspbian Buster with desktop注意不要用Lite版因为ROS的可视化工具需要桌面环境。烧录工具我推荐Raspberry Pi Imager选好镜像写入SD卡就行。这里有个容易被忽略的细节烧录完成后Windows可能会提示你格式化SD卡千万不要点。烧录工具已经写好了Linux文件系统Windows识别不了是正常的。如果你想在第一次开机前就打开SSH可以在SD卡根目录新建一个名为ssh的空白文件注意没有扩展名这样系统启动后会自动开启SSH服务。1.3 系统基础配置与软件源替换树莓派第一次启动后会进入raspi-config配置界面你可以先把键盘布局、时区、Wi-Fi这些基础项设置好。这里我特别强调一下软件源的问题。Raspbian官方源在国外国内直连速度非常慢apt安装动辄几小时。我强烈建议在第一次apt update之前就把软件源换成国内镜像源。编辑/etc/apt/sources.list把http://raspbian.raspberrypi.org/raspbian/开头的行替换成镜像源地址。比如中科大的镜像deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi同时编辑/etc/apt/sources.list.d/raspi.list把http://archive.raspberrypi.org/debian/替换成http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/。这个步骤做完再执行sudo apt update sudo apt upgrade -y升级过程可能会花点时间这很正常耐心等就行。升级完成后最好重启一下树莓派让内核和驱动进入稳定状态。这个基础步骤为后面的ROS安装铺平了道路很多人在ROS安装时踩到依赖错误其实就是因为源的问题没处理好。2. 网络配置先让树莓派“连上世界”2.1 有线网络 vs 无线网络怎么选树莓派的网络配置方式取决于你用的是有线还是无线。如果你是用网线直连路由器系统默认就能获取到IP基本上不用做任何操作。但如果你像我一样想把树莓派放到机器人底盘上到处跑那肯定得用Wi-Fi。Raspbian buster桌面版可以直接在GUI右上角的网络图标里连接Wi-Fi这最简单。但如果你用的是SSH命令行操作就需要手动配置。Raspbian的网络管理默认使用dhcpcd服务所以配置要写在/etc/dhcpcd.conf里而不是像Ubuntu那样写在/etc/netplan下面这一点新手很容易搞混。2.2 配置静态IP方法与计算为什么强烈建议配置静态IP因为ROS的分布式通信机制依赖于节点之间的IP直达如果你的树莓派每次开机IP都变来变去那在多机通信时就要频繁修改主机的IP配置非常痛苦。另外SSH和远程桌面也需要一个固定地址才好连。打开dhcpcd配置文件sudo nano /etc/dhcpcd.conf在文件的末尾追加以下内容注意根据你自己的路由器网段来改interface eth0 static ip_address192.168.1.100/24 static routers192.168.1.1 static domain_name_servers192.168.1.1 8.8.8.8 interface wlan0 static ip_address192.168.1.101/24 static routers192.168.1.1 static domain_name_servers192.168.1.1 8.8.8.8这里面的/24意思是子网掩码为255.255.255.0你得确认自己路由器的LAN网段。比如路由器默认地址是192.168.31.1那你树莓派的IP就要在192.168.31.x范围内选一个别和别的设备冲突。如果不知道怎么算直接在路由器后台看已分配设备列表挑一个空闲地址用就行。保存退出后重启dhcpcd服务sudo systemctl restart dhcpcd然后用ip addr查看IP是否生效。这里我踩过一个坑如果你同时插了网线和Wi-Fi配置了不同的静态IP可能会出现路由冲突导致数据包乱走。解决办法是禁用不需要的那个网口比如用Wi-Fi时就把eth0在dhcpcd.conf里用denyinterfaces eth0注释掉避免干扰。2.3 网络测试与故障排查配置完网络别急着装ROS。先做一个链路测试保证基础网络是通的ping 192.168.1.1 ping baidu.com第一个ping的是网关通了说明内网正常第二个ping通说明DNS解析和外网链路都正常。如果第一个能通第二个不通多半是DNS配置有问题检查一下/etc/resolv.conf里的nameserver是不是被修改了。如果两个都不通先检查Wi-Fi密码和设备是否正常连接用iwconfig看无线连接状态。网络这块是整个后续操作的地基地基没打牢后面Rosdep、Git clone、apt安装全都会出幺蛾子。有时候海外仓库访问不稳定会导致clone超时我自己的做法是在国内镜像源和官方仓库之间做取舍优先保证主要流程能走通不纠结于“必须用官方源”这种洁癖。3. ROS Melodic 安装全记录3.1 官方安装 vs 源码编译先有个心理预期ROS Melodic在Raspbian buster上并没有官方直接支持的二进制包严格来说你要比较两个路径。第一个路径是用ROS官方提供的Ubuntu bionic二进制仓库直接往buster系统里塞。这是社区里最主流的做法因为Arm架构的ROS包已经编译好了大部分功能可以直接用。缺点是有时候会碰到依赖库版本不匹配的问题但总的来说比源码编译省心太多。第二个路径是从源码编译ROS Melodic这种方案在buster上非常痛苦。耗时几个小时不说各种依赖版本冲突会轮番轰炸你。如果不是对ROS内部机制有特殊定制需求我建议普通用户千万不要走这条路。这里我帮你把两种方案的差异列成表格看勾选哪个更合适对比维度二进制仓库安装源码编译安装安装耗时20~60分钟3~8小时依赖冲突较少易解决非常多需手动处理维护难度低apt统一管理高需自行编译适用人群绝大多数用户ROS源码开发者3.2 逐条安装步骤首先添加ROS Melodic的软件源。你需要创建一个新的源列表文件内容指向ROS的Ubuntu bionic仓库。这里我用的是中科大源速度比官方源快得多sudo sh -c echo deb https://mirrors.ustc.edu.cn/ros/ubuntu bionic main /etc/apt/sources.list.d/ros-latest.list注意了这里的ubuntu bionic是ROS仓库自己的发布代号不是让你把系统源改成bionic。很多人以为要改/etc/apt/sources.list结果把系统源指向bionic跟buster的包混在一起然后出现一堆依赖错误。接下来添加ROS的GPG密钥sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654如果keyserver连不上可以从软件源直接下载密钥文件并用apt-key add安装这是常见的替代方案。密钥装好后执行sudo apt update这时候更新列表里应该能看到ros-melodic相关包了。如果你的网络状况比较差建议在更新前把系统源和ROS源都配置成国内镜像否则后面下载容易卡住。然后是安装。常见的选择有两个ros-melodic-desktop-full会把所有常用工具、仿真器、感知库全装进来但下载体积特别大在树莓派上可能要好几个小时ros-melodic-ros-base只安装ROS的核心框架体积小很多对大多数人来说反而够用。我建议这样折中sudo apt install ros-melodic-ros-base ros-melodic-ros-tutorials ros-melodic-rviz ros-melodic-teleop-twist-keyboard这样既有了核心运行环境又有小乌龟演示所需的turtlesim还有rviz做可视化后面接传感器做简单的SLAM也不至于缺库。安装过程中如果提示要安装一些额外的依赖包选Y就行不要跳过。3.3 环境变量与rosdep初始化安装完成后把ROS的环境变量加到bashrc里这样每次打开终端都能直接使用ros命令echo source /opt/ros/melodic/setup.bash ~/.bashrc source ~/.bashrc接着初始化rosdep。rosdep是用来解析ROS包依赖的工具以后你从GitHub拉下来一个功能包往往需要先rosdep install装依赖所以这步必须做。sudo rosdep init rosdep update这一步很多人在rosdep init就会卡住因为默认要访问raw.githubusercontent.com国内网络环境经常连不上。我踩过一次坑之后学聪明了直接把rosdep的下载地址换到国内镜像。具体来说编辑/etc/ros/rosdep/sources.list.d/20-default.list将里面的github地址替换成可用的镜像地址比如用gitee上的rosdep仓库镜像。替换后重新执行sudo rosdep updaterosdep update成功跑完ROS的环境依赖解析才算真正就绪。这里有个容易混淆的点rosdep update跟系统apt update不是一回事它更新的是ROS的依赖索引不是系统软件列表所以跑多少次都不影响系统稳定性。3.4 验证安装跑通第一个小乌龟环境装好了怎么确认没问题跑一次turtlesim是最直观的方法。这里我建议开三个终端。第一个终端启动ROS核心roscore如果这一步能正常启动说明ROS主节点没问题。第二个终端启动小乌龟仿真器rosrun turtlesim turtlesim_node第三个终端启动键盘控制节点rosrun turtlesim turtle_teleop_key在第三个终端里按方向键你会看到第二个终端弹出的乌龟画面里海龟在移动。这个经典演示跑通了说明你的ROS发布-订阅机制、节点通信、参数服务器全都正常工作。我第一次在树莓派上跑通小乌龟时那种“成了”的感觉真的很难形容。但其实这只是入门后面ROS还有launch文件、tf坐标变换、消息话题、URDF建模这些硬骨头等着啃不过至少环境已经没问题了。3.5 我踩过的安装坑说三个我实际踩过的坑都是网上教程不太会提的。第一个坑是磁盘空间不足。树莓派TF卡如果只做分区没扩容装完ROS以后系统盘很容易就满了。解决办法是运行sudo raspi-config在“Advanced Options”里选择扩容根分区让TF卡的所有存储空间都被系统使用。第二个坑是Python版本混乱。Raspbian buster自带Python 3.7但ROS Melodic的很多脚本默认用的是/usr/bin/python。如果系统里没有安装Python 2.7或者没有把/usr/bin/python指到Python 3.7一些ros脚本会报/usr/bin/env python找不到解释器。我当时的解决方法是安装python-is-python3包把python指令软链到python3.7上。第三个坑是rviz启动时报OpenGL错误。树莓派4B的GPU驱动比较特殊有时候rviz会提示Could not initialize OpenGL。解决办法是在~/.bashrc里加一行export LIBGL_ALWAYS_SOFTWARE1强制使用软件渲染虽然帧率不高但至少能用。4. 远程桌面控制摆脱显示器束缚4.1 方案对比VNC vs XRDP vs SSH树莓派作为机器人主控不可能每次调试都接显示器和键鼠。远程控制是刚需。我在实际项目中反复对比过三种方案它们各有优缺点我放在表格里供你选择方案传输内容连接速度配置难度适用场景VNC图形桌面较快低日常图形操作、RViz可视化XRDP图形桌面较慢低Windows远程桌面用户、跨平台方便SSH命令行最快极低代码编辑、文件操作、命令行控制如果你只是写代码改配置SSH就够了如果你要远程看RViz、操作图形界面VNC是首选如果你希望在Windows上直接用自带的“远程桌面连接”而不用装任何客户端那XRDP更适合你。三种方案我建议都配好反正互不冲突关键时刻能救急。4.2 VNC远程桌面配置详解Raspbian buster系统自带RealVNC服务端只是默认没开启。开启方式有两种。第一种是图形化界面里操作打开菜单里的“Preferences”-“Raspberry Pi Configuration”在“Interfaces”标签页找到VNC点Enable。第二种是命令行操作sudo raspi-config选择Interfacing Options-VNC-Yes然后重启或启动vncserver服务。如果你想在系统启动时自动运行VNC服务可以执行sudo systemctl enable vncserver-x11-serviced.service sudo systemctl start vncserver-x11-serviced.serviceWindows客户端推荐用官方RealVNC Viewer或者TigerVNC。连接时地址填树莓派的IP即可比如192.168.1.101端口默认是5900一般不需要填。如果VNC连接后黑屏多半是桌面会话没起来先用SSH登录手动执行startlxde确认桌面环境能启动再回来看VNC。VNC的实际体验在局域网内还是很流畅的特别是4B的千兆网口配合有线网络做RViz可视化操作基本够用。但如果你要无线连接卡顿会明显一些只能降低分辨率来缓解。4.3 XRDP配置实例XRDP的好处是Windows自带的“远程桌面连接”直接能连不需要额外装软件。安装很简单sudo apt install xrdp然后修改一下配置让XRDP能正确加载桌面会话。打开/etc/xrdp/xrdp.ini把端口从默认的3389换成一个不容易冲突的端口比如3390否则跟Windows本身的远程桌面端口撞了。保存重启服务sudo systemctl restart xrdpWindows上按下WinR输入mstsc然后填树莓派IP和端口192.168.1.101:3390登录界面会让你输入用户名密码就是树莓派的系统账号密码。登录成功后正常情况下会看到桌面。如果登录后黑屏或者闪退大多数情况下是用户目录下缺少.xsession文件。解决办法echo startlxde ~/.xsession chmod x ~/.xsession sudo systemctl restart xrdpXRDP默认体验比VNC要差一些画面会有轻微延迟和撕裂感尤其是在4B这种嵌入式平台上。不过胜在客户端兼容性无敌Windows、macOS、手机都能直接连作为应急通道非常可靠。4.4 远程桌面时的性能调优远程桌面卡不卡很大程度取决于你的画质和网络。我实际测下来在树莓派4B上做VNC远程桌面时分辨率调到1280x720色彩深度降到16位操作流畅度会有显著提升。修改RealVNC默认参数可以通过启动参数指定比如vncserver :1 -geometry 1280x720 -depth 16另外不要开着桌面特效和透明窗口这些视觉效果在CPU软渲染下非常消耗资源。把窗口管理器切换到轻量级的openbox或者干脆不要开太多窗口。还有个小技巧如果你只是需要看rviz或者跑单个图像界面可以不进完整桌面直接用SSH启动单个GUI应用再借助X11转发机制把窗口转发到本地。具体在本地Windows上配置Xming或WSLg远程执行ssh -X pi192.168.1.101 rosrun rviz rviz这种方式比整桌面远程要轻量很多适合在弱网环境下做调试。5. 常见问题与排查技巧实录5.1 网络类问题现象可能原因解决方案无法连接外网网关配置错误或Wi-Fi密码错ping网关定位问题查看wpa_supplicant配置获取不到IP地址dhcpcd服务未启动或网卡禁用执行sudo systemctl enable dhcpcdSSH连接被拒绝SSH服务未启动检查是否有金色云图标执行/etc/init.d/ssh startDNS解析失败路由器DNS未下发生效在dhcpcd.conf里手动指定8.8.8.8或国内DNS5.2 ROS安装类问题现象可能原因解决方案rosdep update卡住无法连接GitHub仓库换用国内镜像或手动修改20-default.listros命令找不到环境变量未正确加载检查bashrc里的source路径是否存在安装ros包时提示依赖冲突ROS仓库与系统源冲突强制使用aptitude交互解决优先保留ROS官方版本启动roscore报python错误Python路径缺失或错误安装ROS依赖的Python版本并建立符号链接5.3 远程桌面类问题现象可能原因解决方案VNC黑屏桌面会话未启动或权限问题手动执行startlxde确认桌面正常XRDP闪退缺少.xsession文件新建/.xsession并写入startlxde连接卡顿分辨率或颜色深度过高调低分辨率和深度使用有线网络鼠标键盘没反应远程会话与本地输入冲突重新启动VNC会话使用vncserver -kill :15.4 独家经验备份与恢复我强烈建议在ROS环境完全装好后做一次完整的TF卡镜像备份。树莓派折腾过程中最容易发生的事就是依赖冲突装一个库把另一个库搞坏最后只能重装系统。如果你有备份直接写回镜像就能恢复省下几个小时。备份方法很简单在电脑上读卡用Raspberry Pi Imager的“读回”功能或者用dd命令把整张TF卡导出成img文件。Windows下也可以用Win32DiskImager读取备份。平时改动系统前也建议先记下dpkg -l的包列表或者用sudo apt list --installed导出这样万一需要重装可以对照着补装。5.5 扩展从安装走向机器人实车装好ROS只是起点。说实话ROS的真正威力在于它提供了一整套机器人开发框架。在树莓派4B上你可以用ros_melodic跑一个完整的差速小车控制用rosserial或mavros连接下位机STM32或Arduino用laser_scan_matcher和gmapping做2D激光SLAM建图用teleop_twist_keyboard控制小车运动结合rviz在远程桌面上监控地图和机器人位姿说到具体的扩展思路我建议下一步先尝试在ROS里发布和订阅一个简单的自定义消息理解topic和service的区别然后用urdf建立一个简单的小车模型并在rviz里显示出来。这个过程能让你把ROS的通讯机制彻底串起来之后再上激光雷达、深度相机就顺理成章了。根据我自己的实际体会树莓派4B加ROS Melodic这套组合虽然性能比不上高性能工控机但胜在低功耗、体积小、生态成熟做一个教学原型车或者小型服务机器人的主控完全够用。只要你能把网络配置、环境依赖和远程调试这三件事理顺后面开发就会顺畅很多。希望这篇记录能帮你省掉那些我当年熬夜踩坑的时间。
返回列表