从零到一:在Ubuntu 18.04上构建你的PX4与ROS协同开发环境
如果你刚刚踏入无人机或机器人开发的世界,面对PX4飞控和ROS这两个庞然大物,可能会感到一丝迷茫。网上教程众多,但要么版本过时,要么步骤跳跃,让新手在依赖包缺失、编译报错的循环中反复挣扎。这篇文章,正是为你准备的。我将以一个过来人的身份,带你走一遍我在Ubuntu 18.04上搭建PX4+ROS开发环境的完整历程。这不是一份冷冰冰的命令清单,而是一份融合了原理理解、避坑指南和实战验证的“生存手册”。无论你是自动化专业的学生,还是希望将算法部署到真实无人机上的研究者,跟随这份指南,你都能建立起一个稳定、可用的开发起点。
1. 环境准备:打好地基,避免后续“楼塌”
在开始敲入任何命令之前,花点时间理解我们即将构建的“技术栈”是至关重要的。PX4是一个开源的飞行控制软件,它负责无人机的底层飞行逻辑;而ROS(机器人操作系统)则是一个用于构建复杂机器人应用的框架和工具集。我们的目标,是让ROS(运行在机载计算机上)能够与PX4(运行在飞控硬件上)顺畅通信,从而实现高级的自主飞行任务。Ubuntu 18.04是这一切的基石,因为它与ROS Melodic版本有着最佳的兼容性。
1.1 系统检查与基础配置
首先,请确认你的系统确实是Ubuntu 18.04。打开终端,输入:
lsb_release -a
你应该能看到类似 Description: Ubuntu 18.04.6 LTS 的输出。如果不是,强烈建议你重新安装或升级到这个版本,后续的很多步骤都依赖于此。
接下来是一个新手极易忽略但至关重要的步骤:将你的用户添加到 dialout 组。这是因为你需要通过串口与飞控板通信,而Linux系统默认只有 dialout 组的成员才有读写串口设备的权限。
sudo usermod -a -G dialout $USER
执行这条命令后,你必须完全注销当前用户会话,然后重新登录,或者直接重启电脑。仅仅关闭终端窗口是无效的,组权限的变更需要新的登录会话才能生效。这是一个常见的“坑”,很多人后续连接飞控失败,根源就在这里。
注意:
$USER是一个环境变量,代表你当前的用户名。这条命令是安全的,无需手动替换。
1.2 依赖包与工具链更新
在安装任何专业软件之前,先更新系统的软件包列表并升级现有软件是一个好习惯。这能确保你从源获取的是最新的安全补丁和依赖库。
sudo apt update
sudo apt upgrade -y
更新完成后,我们需要安装一些基础的编译工具和依赖。以下命令会安装Git、CMake、Python等必备工具:
sudo apt install git zip qtcreator cmake build-essential genromfs ninja-build exiftool -y
对于Python环境,PX4的某些工具需要Python 2,而ROS Melodic主要支持Python 2.7。但为了兼容性和未来考虑,我们同时安装Python 3和pip工具也无妨:
sudo apt install python3 python3-pip python3-dev python3-setuptools -y
sudo apt install python-pip python-dev python-setuptools -y
安装完成后,可以验证一下关键工具的版本:
cmake --version
git --version
gcc --version
确保它们都能正常输出版本信息,没有“command not found”的错误。
2. PX4固件开发环境搭建
有了稳固的系统基础,我们现在可以开始构建PX4的开发环境了。PX4官方提供了非常方便的自动化安装脚本,但网络环境可能导致下载失败。我将带你走一条更可控、更理解背后原理的路径。
2.1 获取PX4源代码
首先,在你的家目录(~)下创建一个用于存放无人机相关代码的工作空间是个好主意。
cd ~
mkdir -p PX4_ROS_WS/src
cd PX4_ROS_WS/src
然后,使用Git克隆PX4的固件仓库。这里推荐克隆 master 分支,它包含了最新的特性,但相对稳定。
git clone https://github.com/PX4/Firmware.git --recursive
--recursive 参数至关重要,因为PX4项目包含了许多子模块(如NuttX实时操作系统、uORB消息中间件等),这个参数会自动将它们一并克隆下来。这个过程可能会花费一些时间,取决于你的网络速度。
提示:如果因为网络问题克隆失败或子模块拉取不全,可以进入
Firmware目录,使用git submodule update --init --recursive来单独更新子模块。
2.2 运行官方工具链脚本(核心步骤)
进入克隆好的固件目录,运行PX4官方为Ubuntu模拟和NuttX目标(即Pixhawk系列飞控)准备的安装脚本。
cd ~/PX4_ROS_WS/src/Firmware
./Tools/setup/ubuntu.sh
这个 ubuntu.sh 脚本是PX4维护团队精心维护的,它会自动完成以下工作:
- 安装所有必要的依赖包(如编译器、库文件等)。
- 安装用于硬件在环仿真的
jMAVSim和Gazebo模拟器。 - 配置Ninja构建系统。
- 安装FastRTPS和FastCDR(用于ROS2通信,但先装上以备后用)。
脚本运行过程中,会提示你输入密码以获取sudo权限,并可能多次询问你是否继续(Do you want to continue? [Y/n]),通常直接按回车选择Y即可。整个过程会持续较长时间,请耐心等待。
如果脚本运行失败怎么办? 网络问题是最大的敌人。脚本会尝试从国外源下载一些包。如果遇到失败,可以:
- 重试:有时只是临时网络波动,重新运行一次脚本可能成功。
- 手动安装依赖:查看脚本输出的错误信息,通常它会告诉你哪个包安装失败。你可以尝试手动使用
sudo apt install <package-name>来安装。 - 使用国内镜像:对于
pip安装的部分,可以临时切换源。但脚本中的apt安装部分,如果你有全局的Ubuntu软件源镜像(如清华、阿里云镜像),速度会快很多。
脚本成功运行完毕后,强烈建议重启一次电脑。这能确保所有新安装的库文件和路径配置都正确加载到系统中。
2.3 验证PX4环境与首次编译
重启后,打开终端,再次进入固件目录,尝试编译一个针对Pixhawk 4(px4_fmu-v5)的固件。这是目前主流硬件的目标。
cd ~/PX4_ROS_WS/src/Firmware
make px4_fmu-v5_default
如果一切顺利,你将看到终端中飞速滚过编译信息,最后以类似下面的信息结束:
[100%] Linking CXX executable firmware_nuttx
[100%] Built target firmware_nuttx
这表示你的PX4编译环境已经搭建成功!生成的固件文件位于 build/px4_fmu-v5_default/ 目录下,名为 px4_fmu-v5_default.px4。
常见编译问题排查:
- 权限错误:如果在编译过程中遇到关于
tools/目录下文件的权限错误,可以进入报错提示的路径,例如Firmware/platforms/nuttx/NuttX/nuttx/tools/,然后执行chmod -R 755 tools/来修正权限。 - 内存不足:编译PX4需要一定的内存(建议至少4GB)。如果虚拟机内存分配不足,可能会在链接阶段失败。尝试关闭其他程序,或为虚拟机分配更多内存。
- 依赖缺失:如果
make报错提示找不到某个头文件或库,通常是ubuntu.sh脚本没有完全成功。你可以根据错误信息,用apt search和apt install手动安装缺失的包。
3. ROS Melodic 开发环境搭建
ROS是我们的上层大脑。Ubuntu 18.04对应的官方ROS发行版是 Melodic Morenia。请务必不要安装其他版本(如Kinetic或Noetic),否则会出现库不兼容的问题。
3.1 安装ROS Melodic
首先,设置你的电脑以接受来自packages.ros.org的软件。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
接下来,添加ROS的官方GPG密钥。
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
如果你的网络无法访问默认的密钥服务器,可以尝试使用hkp://pgp.mit.edu:80替代。
更新软件包索引,并安装完整的ROS Melodic桌面版。桌面版包含了ROS、rqt、rviz、机器人通用库以及2D/3D模拟器,是最省心的选择。
sudo apt update
sudo apt install ros-melodic-desktop-full -y
安装过程会持续一段时间,需要下载数百兆的软件包。安装完成后,需要初始化rosdep。rosdep是ROS的一个工具,用于轻松安装要编译的源代码的系统依赖项。
sudo rosdep init
rosdep update
最后,将ROS环境变量自动添加到你的bash会话中。这样每次打开终端,ROS命令都可用。
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
为了验证ROS是否安装成功,可以尝试运行一个最简单的例子。首先,启动ROS核心节点:
roscore &
然后,在新的终端标签页中,运行一个小乌龟模拟器:
rosrun turtlesim turtlesim_node
你应该会看到一个带有随机小乌龟的窗口弹出。再开一个终端,运行键盘控制节点:
rosrun turtlesim turtle_teleop_key
在这个终端窗口激活的状态下(确保光标在终端内),按方向键,你应该能看到小乌龟在移动。恭喜,ROS基础环境安装成功!完成后,可以用 Ctrl+C 停止这些节点。
3.2 创建Catkin工作空间并安装MAVROS
Catkin是ROS的官方构建系统。我们需要创建一个自己的工作空间来存放和编译我们的ROS包,特别是 MAVROS——它是连接ROS和MAVLink协议(PX4使用的通信协议)的桥梁。
首先,创建并初始化一个Catkin工作空间。我们将其放在之前创建的 PX4_ROS_WS 目录下,方便管理。
cd ~/PX4_ROS_WS
mkdir -p catkin_ws/src
cd catkin_ws
catkin init
catkin build
catkin init 初始化工作空间,catkin build 进行首次构建。构建成功后,别忘了“激活”这个工作空间的环境:
source devel/setup.bash
echo "source ~/PX4_ROS_WS/catkin_ws/devel/setup.bash" >> ~/.bashrc
现在,开始安装MAVROS。最推荐的方式是使用二进制包安装,这比从源码编译简单得多。
sudo apt install ros-melodic-mavros ros-melodic-mavros-extras -y
安装完成后,MAVROS还需要一份地理信息数据集来支持其地理围栏等功能。使用官方提供的脚本来安装:
sudo /opt/ros/melodic/lib/mavros/install_geographiclib_datasets.sh
这个脚本会自动下载所需的数据文件。至此,ROS端与PX4通信的核心组件就准备好了。
4. 连接、测试与仿真验证
环境搭建完毕,是时候让PX4和ROS“握手”了。我们将通过两个经典场景来验证整个环境:硬件连接测试和软件在环仿真。
4.1 连接真实飞控硬件
将你的Pixhawk系列飞控板通过USB线连接到电脑。在终端中输入:
ls /dev/ttyACM*
通常,你会看到类似 /dev/ttyACM0 的设备。这代表系统识别到了你的飞控。
现在,启动MAVROS节点,让它连接到飞控。你需要指定飞控的设备端口和通信波特率(通常为921600)。
roslaunch mavros px4.launch fcu_url:=/dev/ttyACM0:921600
如果连接成功,终端会持续输出心跳包信息。同时,你可以打开新的终端,使用ROS工具查看来自飞控的数据。例如,查看飞控的姿态信息:
rostopic echo /mavros/local_position/pose
或者,查看电池状态:
rostopic echo /mavros/battery
如果能看到有规律的数据流输出,说明ROS到PX4的通信链路已经完全打通。你还可以使用 rqt_graph 命令来可视化当前运行的ROS节点和话题,这是一个非常强大的调试工具。
4.2 启动软件在环仿真
在没有真实硬件的情况下,仿真环境是开发和测试算法的绝佳平台。PX4与Gazebo模拟器深度集成。
首先,确保你在PX4固件目录下。然后,启动一个带有 Iris 四旋翼模型的Gazebo仿真世界,并同时启动MAVROS。
cd ~/PX4_ROS_WS/src/Firmware
make px4_sitl_default gazebo
这个命令会编译SITL(软件在环)目标并启动Gazebo。你会看到Gazebo界面和一个四旋翼无人机。在另一个终端中,启动MAVROS连接到这个仿真器:
cd ~/PX4_ROS_WS/src/Firmware
source Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"
现在,仿真中的PX4与ROS也建立了连接。你可以在QGroundControl地面站中看到仿真的无人机,也可以通过ROS话题向它发送指令。例如,发送一个解锁并起飞到2米高度的指令(这需要你提前了解MAVROS的API):
# 在终端中运行(需要先切换到ROS工作空间环境)
rosservice call /mavros/cmd/arming "value: true"
rostopic pub -r 10 /mavros/setpoint_position/local geometry_msgs/PoseStamped ...
通过仿真,你可以安全地测试你的控制算法、计算机视觉节点或自主导航逻辑,而不用担心炸机的风险。
5. 开发工作流与进阶配置
环境跑通只是第一步,如何高效地利用这个环境进行开发,才是更关键的问题。
5.1 高效的开发循环
一个典型的PX4+ROS开发工作流如下:
- 算法设计与仿真:在ROS中编写你的节点(如路径规划、目标检测),在Gazebo仿真环境中进行测试。利用RViz进行数据可视化。
- 代码修改与编译:
- 修改PX4固件后,在
Firmware目录下执行make px4_fmu-v5_default进行编译。 - 修改ROS节点后,在
catkin_ws目录下执行catkin build或catkin build <package_name>进行编译。
- 修改PX4固件后,在
- 部署与测试:
- 对于仿真:直接重启仿真即可。
- 对于真机:将编译好的PX4固件(
.px4文件)用QGroundControl刷入飞控;将编译好的ROS节点通过SSH等方式部署到机载计算机。
- 日志分析与调试:PX4会生成详细的ULog日志文件,可以用Flight Review在线工具分析。ROS则可以使用
rqt_console、rqt_logger_level以及rosbag record录包回放的方式进行调试。
5.2 集成开发环境配置
虽然可以在终端中完成所有工作,但一个好的IDE能极大提升效率。VSCode 是目前非常流行的选择。
- 安装VSCode:从官网下载
.deb包安装即可。 - 推荐插件:
- C/C++ (Microsoft):提供代码补全、跳转、调试功能。
- Python (Microsoft):如果你用Python写ROS节点。
- ROS (ms-iot):专为ROS开发的插件,可以自动识别工作空间,提供launch文件启动、topic可视化等强大功能。
- CMake Tools:方便配置和构建CMake项目。
- 打开工作空间:直接打开
~/PX4_ROS_WS文件夹。VSCode和ROS插件会自动识别catkin_ws和Firmware中的CMakeLists.txt,为你提供智能提示。
5.3 性能优化与常见陷阱
- 并行编译:在
make命令后添加-j参数可以显著加快编译速度,例如make px4_fmu-v5_default -j8,数字代表使用的CPU核心数。 - ccache的使用:PX4支持ccache来缓存编译结果,第二次及以后的编译会快很多。通常
ubuntu.sh脚本已经帮你安装并配置了ccache,你可以通过ccache -s查看缓存状态。 - 空间不足:PX4和Gazebo仿真会占用大量磁盘空间(超过20GB)。定期清理
Firmware/build目录下的中间文件,或使用make clean命令。 - 版本管理:无论是PX4的Firmware仓库还是你自己的ROS包,都务必使用Git进行版本管理。PX4的更新非常活跃,在拉取最新代码前,最好在另一个分支上进行,避免破坏你正在开发的环境。
搭建环境的过程,本身就是一次深刻的学习。你遇到的每一个错误,查阅的每一篇文档,都会加深你对这套开源无人机生态的理解。当你的第一个ROS节点成功控制仿真无人机起飞时,那种成就感就是最好的回报。这个环境将成为你探索空中机器人世界的强大实验室,从简单的悬停控制到复杂的视觉SLAM导航,一切皆有可能。记住,官方文档和社区论坛是你永远的朋友,遇到问题时,善用搜索,你大概率不是第一个遇到它的人。
6376



被折叠的 条评论
为什么被折叠?



