当前位置: 首页 > news >正文

保姆级教程:在Ubuntu 20.04上从源码编译PX4固件,并用Gazebo跑通你的第一个仿真

从零构建PX4无人机仿真环境:Ubuntu 20.04实战指南

当第一次接触PX4无人机仿真时,很多开发者会被官网庞杂的文档和复杂的依赖关系吓退。本文将带你从纯净的Ubuntu 20.04系统开始,一步步完成PX4固件编译、Gazebo仿真环境搭建,最终实现无人机在仿真环境中的起飞控制。整个过程无需任何先验知识,每个步骤都经过实测验证,特别针对国内网络环境优化了下载配置。

1. 系统准备与依赖安装

在开始PX4编译之前,我们需要确保系统具备所有必要的工具链和依赖库。Ubuntu 20.04虽然已经包含了许多基础组件,但仍需补充一些专用于无人机开发的软件包。

首先更新系统软件源并升级现有软件:

sudo apt update && sudo apt upgrade -y

接下来安装PX4开发的核心依赖组。这里我们使用PX4官方提供的便捷安装脚本,但针对国内网络环境做了优化:

sudo apt install git zip qtcreator cmake build-essential ninja-build -y sudo apt install python3-pip python3-dev python3-wheel -y

特别需要注意的依赖项包括:

  • Gazebo 11:PX4当前稳定版本兼容的仿真环境
  • FastRTPS:用于ROS2与PX4的通信
  • Eigen3:数学运算库

安装这些关键依赖的命令如下:

sudo apt install gazebo11 libgazebo11-dev -y sudo apt install ros-noetic-desktop-full -y # 包含ROS和Gazebo

提示:如果之前安装过ROS或其他仿真工具,建议先清理可能存在的冲突包,使用sudo apt autoremove进行清理。

验证Gazebo安装是否成功:

gazebo --version

正常应输出Gazebo 11.x.x版本信息。如果遇到黑屏或无响应问题,可能是显卡驱动需要额外配置:

sudo apt install mesa-utils libgl1-mesa-dri libgl1-mesa-dev -y

2. PX4固件源码获取与编译

完成系统准备后,我们就可以获取PX4固件源码并进行首次编译了。PX4项目使用Git进行版本控制,代码托管在GitHub上。

2.1 克隆PX4固件仓库

推荐使用国内镜像源加速克隆过程:

git clone https://gitee.com/mirrors/PX4-Firmware.git ~/PX4_Firmware cd ~/PX4_Firmware git submodule update --init --recursive

如果子模块更新速度慢,可以尝试以下方法加速:

git config --global url."https://hub.fastgit.org".insteadOf https://github.com

2.2 编译SITL仿真目标

PX4支持多种硬件目标,对于仿真我们使用px4_sitl_default配置:

make px4_sitl_default gazebo

首次编译会下载大量工具链和依赖,可能需要较长时间。常见问题及解决方案:

  1. 下载失败:修改Tools/setup/ubuntu.sh中的下载URL为国内镜像
  2. 内存不足:添加交换空间sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
  3. 权限问题:在命令前添加sudo或正确配置用户组

成功编译后,终端会显示类似以下信息:

[px4] Startup script returned successfully

此时Gazebo应该自动启动,显示带有无人机的空场景。

3. Gazebo仿真环境配置

PX4与Gazebo的集成已经相当成熟,但仍需一些配置才能获得最佳仿真体验。

3.1 世界环境选择

PX4支持多种Gazebo世界环境,默认使用空世界。要切换环境,可在启动时指定:

export PX4_SITL_WORLD=warehouse make px4_sitl_default gazebo

可用世界包括:

世界名称描述适用场景
empty空世界基础测试
baylands海湾地形视觉导航
warehouse室内仓库避障测试
windy大风环境抗风测试

3.2 无人机模型选择

PX4支持多种无人机模型,默认使用四旋翼iris。切换模型方式:

export PX4_SITL_AIRCRAFT=standard_vtol make px4_sitl_default gazebo

常用模型对比如下:

  • iris:标准四旋翼,最常用
  • standard_vtol:垂直起降固定翼
  • tailsitter:尾座式无人机
  • rover:地面车辆

4. MAVROS与Offboard控制实战

当仿真环境正常运行后,我们可以通过MAVROS实现更高级的Offboard控制。这种模式下,飞控执行来自外部计算机的指令。

4.1 MAVROS安装与连接

首先确保已安装ROS Noetic,然后安装MAVROS包:

sudo apt install ros-noetic-mavros ros-noetic-mavros-extras -y

运行以下命令启动PX4仿真并连接MAVROS:

roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"

验证连接状态:

rostopic echo /mavros/state

应看到connected: True的输出。

4.2 Offboard控制示例

创建一个简单的ROS包来实现无人机起飞控制:

cd ~/catkin_ws/src catkin_create_pkg offboard_control roscpp mavros geometry_msgs

src目录下创建offboard_control.cpp文件,内容如下:

#include <ros/ros.h> #include <geometry_msgs/PoseStamped.h> #include <mavros_msgs/CommandBool.h> #include <mavros_msgs/SetMode.h> #include <mavros_msgs/State.h> mavros_msgs::State current_state; void state_cb(const mavros_msgs::State::ConstPtr& msg){ current_state = *msg; } int main(int argc, char **argv){ ros::init(argc, argv, "offboard_control"); ros::NodeHandle nh; ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State> ("mavros/state", 10, state_cb); ros::Publisher local_pos_pub = nh.advertise<geometry_msgs/PoseStamped> ("mavros/setpoint_position/local", 10); ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool> ("mavros/cmd/arming"); ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode> ("mavros/set_mode"); ros::Rate rate(20.0); while(ros::ok() && !current_state.connected){ ros::spinOnce(); rate.sleep(); } geometry_msgs::PoseStamped pose; pose.pose.position.z = 2.0; for(int i = 100; ros::ok() && i > 0; --i){ local_pos_pub.publish(pose); ros::spinOnce(); rate.sleep(); } mavros_msgs::SetMode offb_set_mode; offb_set_mode.request.custom_mode = "OFFBOARD"; mavros_msgs::CommandBool arm_cmd; arm_cmd.request.value = true; ros::Time last_request = ros::Time::now(); while(ros::ok()){ if( current_state.mode != "OFFBOARD" && (ros::Time::now() - last_request > ros::Duration(5.0))){ if( set_mode_client.call(offb_set_mode) && offb_set_mode.response.mode_sent){ ROS_INFO("Offboard enabled"); } last_request = ros::Time::now(); } else { if( !current_state.armed && (ros::Time::now() - last_request > ros::Duration(5.0))){ if( arming_client.call(arm_cmd) && arm_cmd.response.success){ ROS_INFO("Vehicle armed"); } last_request = ros::Time::now(); } } local_pos_pub.publish(pose); ros::spinOnce(); rate.sleep(); } return 0; }

编译并运行该节点:

cd ~/catkin_ws && catkin_make rosrun offboard_control offboard_control

无人机应自动起飞到2米高度并保持悬停。

http://www.jsqmd.com/news/851437/

相关文章:

  • 如何永久免费解锁Cursor Pro高级功能:完整解决方案指南
  • CANN/hcomm查询拓扑信息
  • 2026年混凝土木模板加工厂的神秘电话等你拨打 - GrowthUME
  • OBS多平台直播终极方案:obs-multi-rtmp插件5分钟快速上手指南
  • Windows驱动管理终极指南:使用Driver Store Explorer彻底清理冗余驱动
  • CANN/hccl 主流框架集成
  • 一物一码在产品溯源中的实际案例,顶讯科技表现亮眼一“码”当先 - 奔跑123
  • 学术写作效率翻倍的关键一步:Perplexity词汇查询功能+Zotero联动工作流(含可复用JSON Schema模板)
  • 3分钟学会:B站视频下载神器BiliDownload终极使用指南
  • 在长期运行的后台服务中感受Taotoken API的稳定性表现
  • 2026年必知!耐腐蚀木模板优质厂家的神秘联系电话 - GrowthUME
  • HBM2E内存优化实战:从理论带宽到有效性能的系统性提升
  • 义乌代理记账公司排行:5家本地资深机构客观盘点 - 互联网科技品牌测评
  • 给OpenBMC新手:除了`bitbake obmc-phosphor-image`,你还需要知道的几个关键命令和配置
  • 告别JS逆向调试烦恼:WT-JS_DEBUG_V1.8.3保姆级安装与实战AES解密教程
  • Firefox for Android组件化架构:如何实现高效代码复用的终极指南
  • TinyShop-UniApp 高级功能探索:直播电商、分销系统、优惠券营销的完整指南
  • 从Kinova机械臂实例出发:手把手教你调试xacro转urdf后的RViz显示问题
  • 内容创作团队利用taotoken统一调度多个大模型提升生产效率
  • 2026年优质支模制造企业联系电话大揭秘! - GrowthUME
  • 网盘文件下载新体验:9大平台真实地址获取方案
  • 风电场电气设计中的‘经济账’与‘安全阀’:以35kV集电线路和短路电流计算为例的权衡艺术
  • 如何快速下载B站4K高清视频:bilibili-downloader完全指南
  • 规避“造轮子”陷阱:企业级 Web 表格组件选型与 TCO 避坑指南
  • Wolverine部署与运维完全手册:Docker、Kubernetes与云原生部署
  • 智能汽车网络安全纵深防御:从零信任到安全左移的实战解析
  • Fuel协议中的密码学原理解析:安全性与效率的完美结合
  • ChinesePinyin-CodeCompletionHelper项目维护与社区贡献指南:打造更好的中文编程体验
  • 从‘发射’与‘转移’到损失函数:图解CRF在序列标注中的完整计算流程与常见误区
  • ComfyUI-Impact-Pack终极指南:如何快速实现专业级AI图像增强