PX4 SITL 彻底清理并修复 Protobuf 问题

PX4 SITL 彻底清理并修复 Protobuf 问题

适用于 ROS Noetic + PX4 SITL(Gazebo 11)环境

本教程适用于在编译 PX4 SITL 时遇到 Protobuf 版本冲突、CMake 找不到正确的 Protobuf 头文件或库、MAVROS 运行错误 等问题。我们将彻底清理旧的 Protobuf 版本重新安装 ROS Noetic 和 PX4,确保系统使用正确的 Protobuf 版本


1. 彻底移除所有 Protobuf 相关文件

由于手动安装的 Protobuf 可能与系统版本冲突,我们需要完全清除所有 Protobuf 相关的库、头文件和编译缓存。

1.1 移除系统安装的 Protobuf

首先,使用 apt-get purge 命令移除所有 Protobuf 相关的软件包:

sudo apt-get purge libprotobuf* protobuf*

1.2 移除手动安装的 Protobuf

如果曾经手动编译安装过 Protobuf,它的头文件可能仍然残留在 /usr/local/include/ 目录下。删除 Protobuf 相关的头文件:

sudo rm -rf /usr/local/include/google/protobuf/

⚠️ 注意:请确保没有其他软件依赖手动安装的 Protobuf,否则可能导致部分程序无法运行。


2. 重新安装 ROS Noetic

由于 ROS 依赖 Protobuf,我们需要重新安装完整的 ROS Noetic 桌面版,以确保所有库文件正确。

sudo apt-get install ros-noetic-desktop-full --reinstall

⚠️ 这个命令可能需要一定时间,因为 ROS Noetic 是一个较大的安装包。

安装完成后,执行以下命令加载 ROS 环境变量

source /opt/ros/noetic/setup.bash

如果你使用 zsh 作为默认 Shell,则需要运行:

source /opt/ros/noetic/setup.zsh

3. 彻底清理 PX4 仿真环境

由于之前的编译可能已经缓存了错误的 Protobuf 版本,我们需要彻底删除 PX4 的 build 目录和 Gazebo 编译缓存。

3.1 删除 PX4 的编译缓存

cd ~/PX4-Autopilot
rm -rf build

3.2 删除 Gazebo SITL 的编译缓存

rm -rf Tools/sitl_gazebo/build
rm -rf Tools/sitl_gazebo/CMakeCache.txt

4. 重新编译 PX4 SITL

清理完成后,我们可以完整更新 PX4 代码仓库,然后重新编译 PX4 SITL。

4.1 进入 PX4 目录并更新代码

cd ~/PX4-Autopilot
git submodule update --init --recursive

4.2 重新编译 PX4 SITL

make clean
make px4_sitl gazebo

这将从头开始重新构建 PX4 和 Gazebo 插件,确保所有依赖库都是正确的。


✅ 5. 运行 PX4 SITL

如果编译成功,现在可以尝试运行 PX4 SITL 了。

roslaunch px4 mavros_posix_sitl.launch

如果 ROS 找不到 mavros,可以执行以下命令安装:

sudo apt install ros-noetic-mavros ros-noetic-mavros-extras ros-noetic-geographic-msgs

然后,再次尝试运行:

roslaunch px4 mavros_posix_sitl.launch

6. 可能的额外检查

如果仍然遇到 protobuf 相关的错误,可以执行以下命令检查 Protobuf 版本是否正确:

which protoc
protoc --version
ldconfig -p | grep protobuf

正确的输出应该是

  • which protoc/usr/bin/protoc
  • protoc --versionlibprotoc 3.x(如 3.6.1
  • ldconfig -p | grep protobuf → 只显示 /lib/x86_64-linux-gnu/libprotobuf.so.17,而不应该/usr/local/lib/ 相关的 Protobuf 版本。

如果 ldconfig -p | grep protobuf 仍然显示 /usr/local/lib/libprotobuf.so,则需要运行:

sudo rm -rf /usr/local/lib/libprotobuf*
sudo ldconfig

然后再次编译 PX4:

cd ~/PX4-Autopilot
make clean
make px4_sitl gazebo

结论

本教程提供了一套完整的步骤,帮助你彻底清除 Protobuf 冲突,并重新安装 PX4 SITL。如果你按照教程操作,PX4 和 Gazebo 应该可以正常运行

最终流程总结

  1. 彻底清理 Protobufapt-get purgerm -rf 删除 Protobuf 头文件)。
  2. 重新安装 ROS Noeticapt-get install ros-noetic-desktop-full --reinstall)。
  3. 清除 PX4 的编译缓存(删除 build 目录)。
  4. 更新 PX4 子模块git submodule update --init --recursive)。
  5. 重新编译 PX4 SITLmake clean && make px4_sitl gazebo)。
  6. 运行 PX4 仿真roslaunch px4 mavros_posix_sitl.launch)。

如果你在某一步遇到问题,欢迎留言,我会继续帮你排查!

你可能感兴趣的:(机器人)