XTDrone2配置的一些问题
本人基于XTDrone2的基础上写了一个项目代码如下Px4_Servo_Force-controlled_Throwing/├── build.sh # 首次编译新电脑只需运行一次├── sim.sh # 终端1启动仿真├── fly.sh # 终端2键盘控制├── config/│ ├── cyclonedds.xml # DDS 网络配置│ ├── px4-rc.params # PX4 参数免GPS、禁止预解锁超时等│ └── ros_log_config.yaml # 日志配置├── xtd2_ws/│ └── src/ # 所有 XTDrone2 源码包│ ├── px4_msgs/│ ├── xtd2_communication/│ ├── xtd2_control/│ ├── xtd2_gz_sim/│ ├── xtd2_launch/│ ├── xtd2_msgs/│ ├── xtd2_test/│ ├── xtd2_third_party_pkgs/│ └── xtdrone2/└── ...你原有的文件不变---换到新电脑后cd ~/Px4_Servo_Force-controlled_Throwing./build.sh # 首次编译工作区 安装 PX4 参数每次飞行- 终端1./sim.sh- 终端2./fly.sh所有环境变量、DDS 配置、日志抑制都已内置在脚本里一行命令搞定。本机也可以直接测试。但是遇到了一些问题## PX4 v1.15.3 → v1.17.0 升级 磁力计问题修复记录### 日期2026-08-10### 一、PX4 版本升级bashcd ~/PX4-Autopilotgit fetch --tags# 修复 Gitee 子模块 fetch 失败git checkout tags/v1.17.0 -- .gitmodulesgit submodule syncgit submodule update --init --recursive# 保存本地修改后切换版本git stash push -m save local changes before switching to v1.17.0git checkout tags/v1.17.0### 二、更新项目模型 SDF 文件将 PX4 v1.17.0 的模型文件复制到项目使模型包含新版传感器定义特别是 magnetometer_sensorbashcp ~/PX4-Autopilot/Tools/simulation/gz/models/x500_base/model.sdf \xtd2_ws/src/xtd2_gz_sim/models/x500_base/model.sdfcp ~/PX4-Autopilot/Tools/simulation/gz/models/x500/model.sdf \xtd2_ws/src/xtd2_gz_sim/models/x500/model.sdfcp ~/PX4-Autopilot/Tools/simulation/gz/worlds/aruco.sdf \xtd2_ws/src/xtd2_gz_sim/worlds/aruco.sdf### 三、清理旧参数触发 AUTOCNF 重新初始化v1.15.3 的 parameters.bson 中磁力计校准数据与 v1.17.0 的设备 ID 不兼容必须清除bashrm -rf ~/PX4-Autopilot/build/px4_sitl_default/cd ~/PX4-Autopilotmake px4_sitl gz_x500 # 重建AUTOCNF 自动设置 CAL_MAG0_ID197388### 四、修复 sim.sh 启动时的 compass 报错问题make px4_sitl gz_x500 直接运行正常但通过 ./sim.sh 启动报 Found 0 compass。#### 根因 1px4_launch.py 缺少 PX4 路径环境变量**文件**xtd2_ws/src/xtd2_launch/xtd2_launch/utils/px4_launch.py在 standalone 模式下PX4 的 rcS 不 source gz_env.sh导致 PX4_GZ_MODELS 和 PX4_GZ_WORLDS 为空模型 spawn 路径错误。同时 PX4_PARAM_* 环境变量用于替代旧版 px4-rc.params 文件v1.17.0 rcS 不再 source 该文件。**修改**在 px4_cmd 前增加pythonpx4_params (PX4_PARAM_COM_ARM_WO_GPS1 # 室内无 GPS 允许解锁PX4_PARAM_COM_DISARM_PRFLT0 # 禁用 SITL 时间跳变自动上锁PX4_PARAM_UXRCE_DDS_PTCFG1 # UXRCE-DDS 仅本地通信PX4_PARAM_CBRK_SUPPLY_CHK894281 # 跳过电源模块检查SITL 无此硬件)px4_gz_models f{args.px4_dir}/Tools/simulation/gz/modelspx4_gz_worlds f{args.px4_dir}/Tools/simulation/gz/worlds并在 px4_cmd 中加入PX4_GZ_MODELS{px4_gz_models} PX4_GZ_WORLDS{px4_gz_worlds}GZ_SIM_RESOURCE_PATH$GZ_SIM_RESOURCE_PATH:{px4_gz_models}:{px4_gz_worlds}{px4_params}PX4_GZ_STANDALONE1以上的操作都没有解决最主要的问题“ 四、修复 sim.sh 启动时的 compass 报错。”最后的解决办法是#### 根因 2Gazebo 缺少 Magnetometer 系统插件**文件**xtd2_ws/src/xtd2_gz_sim/worlds/aruco.sdf项目 aruco.sdf 有显式插件列表23 个Gazebo 遇到显式插件列表时会忽略 server.config只加载 SDF 中列出的插件。但列表中缺失了 gz-sim-magnetometer-system导致磁力计传感器虽在模型 SDF 中定义了但永远不产生数据。**修改**在 plugin namegz::sim::systems::Sensors ... 之后添加xmlplugin namegz::sim::systems::Magnetometer filenamegz-sim-magnetometer-system/plugin namegz::sim::systems::AirSpeed filenamegz-sim-air-speed-system/#### 根因 3gz_launch.py 覆盖 GZ_SIM_RESOURCE_PATH**文件**xtd2_ws/src/xtd2_launch/launch/gz_launch.py原代码用 SetEnvironmentVariable 直接覆盖 GZ_SIM_RESOURCE_PATH导致 sim.sh 中预设的 PX4 路径被清除。**修改**- 添加 import os- 将 SetEnvironmentVariable(GZ_SIM_RESOURCE_PATH, gz_model_path) 改为追加模式#### 根因 4sim.sh 未设置 Gazebo 服务器配置路径**文件**sim.sh添加bashexport GZ_SIM_SERVER_CONFIG_PATH$HOME/PX4-Autopilot/src/modules/simulation/gz_bridge/server.configexport GZ_SIM_RESOURCE_PATH${GZ_SIM_RESOURCE_PATH:${GZ_SIM_RESOURCE_PATH}:}$HOME/PX4-Autopilot/Tools/simulation/gz/models:$HOME/PX4-Autopilot/Tools/simulation/gz/worlds#### sim.sh 额外改进启动前清理残留进程bashpkill -f px4_sitl_default/bin/px4 2/dev/null || truepkill -f MicroXRCEAgent 2/dev/null || truepkill -f ros2 launch.*xtd2 2/dev/null || truepkill -f ros_gz_bridge.*x500 2/dev/null || truepkill -f gz sim.*aruco 2/dev/null || true### 五、修改文件汇总| 文件 | 改动说明 ||------|----------|| sim.sh | 新增残留进程清理 GZ_SIM_SERVER_CONFIG_PATH GZ_SIM_RESOURCE_PATH || config/px4-rc.params | v1.17.0 不再使用此文件参数改用 PX4_PARAM_* 环境变量 || xtd2_ws/src/xtd2_launch/xtd2_launch/utils/px4_launch.py | 新增 PX4_GZ_MODELS/WORLDS GZ_SIM_RESOURCE_PATH PX4_PARAM_* 参数 || xtd2_ws/src/xtd2_launch/launch/gz_launch.py | GZ_SIM_RESOURCE_PATH 从覆盖改为追加 import os || xtd2_ws/src/xtd2_gz_sim/worlds/aruco.sdf | 新增 Magnetometer AirSpeed 系统插件 || xtd2_ws/src/xtd2_gz_sim/models/x500_base/model.sdf | 替换为 PX4 v1.17.0 版本含 magnetometer_sensor || xtd2_ws/src/xtd2_gz_sim/models/x500/model.sdf | 替换为 PX4 v1.17.0 版本 || ~/PX4-Autopilot/build/px4_sitl_default/ | 删除后重建清除旧 parameters.bson |### 六、关键技术要点1. **PX4 v1.17.0 rcS 不再 source px4-rc.params**参数必须通过 PX4_PARAM_参数名值 环境变量传入。2. **AUTOCNF** 机制首次启动时自动设置 CAL_MAG0_ID197388对应 gz_bridge 设备 ID后续启动检测到 SYS_AUTOSTART 匹配则跳过。3. **Gazebo 插件加载规则**世界 SDF 有显式 plugin 列表时server.config 被忽略只加载 SDF 中列出的插件。4. **PX4 standalone 模式**PX4_GZ_STANDALONE1PX4 不启动 Gazebo而是等待外部 Gazebo 就绪后 spawn 模型并启动 gz_bridge。此模式下 rcS 不 source gz_env.sh。5. **gz_bridge 设备 ID 编码**bus_typeSIMULATION, devtypeMAGSIM, bus1, address3 → 197388。可以根据以上这些内容提示输入给AI进行问题解决后来进行室外飞行时又遇到一个问题“气压计读数没有”EKF2_HGT_MODE,的值为Ranger sensorThought for 7s (ctrlo to expand)● 找到根因了。EKF2_HGT_MODE Ranger sensor(测距仪) 就是问题所在——EKF 被配置成用测距仪做高度源,而你的 x500 大概率没接/没配置测距仪,所以高度永远融不出来 →alt_validfalse。气压计本身没问题(读数正常),只是 EKF 没在用气压计。修复步骤1. QGC → Vehicle Setup(齿轮) → Parameters2. 搜 EKF2_HGT_MODE3. 改成 0 Barometric pressure(气压计)4. 点 Write / 写入 保存5. 重启飞控(这个参数需要重启才生效)6. 静置等 30~60s7. 复查:export RMW_IMPLEMENTATIONrmw_cyclonedds_cppsource /opt/ros/jazzy/setup.bashsource ~/Px4_Servo_Force-controlled_Throwing/xtd2_ws/install/setup.bashros2 topic echo /uav_0/fmu/out/vehicle_global_position --once --no-daemon --spin-time 5 --qos-reliability best_effort 2/dev/null | grep -Elat_lon_valid|alt_valid|reset_counteralt_valid: true 之后,键盘 t 解锁就能过 AUTO_LOITER 的 global position 检查了。---顺带说明为什么 QGC 能解锁、键盘不能:- QGC 在 MANUAL/STAB 解锁,不要求高度;- 键盘强制切 AUTO_LOITER,要求 global_position(lat_lon alt 都有效)。现在高度源改回气压计就对齐了

相关新闻

C语言开发环境全解析:Dev C++、VS 2022与VS Code选型与实战指南

C语言开发环境全解析:Dev C++、VS 2022与VS Code选型与实战指南

1. 项目概述:为什么我们需要了解这些编译器?刚入门的C语言新手,或者是从其他语言转过来的开发者,面对的第一个“拦路虎”往往不是语法本身,而是开发环境。你兴致勃勃地写了几行“Hello, World!”,却发现连个…

2026/8/22 7:43:36 阅读更多 →
字符环与矩阵变换:从基础原理到应用实践

字符环与矩阵变换:从基础原理到应用实践

1. 项目概述:字符环与矩阵变换的奇妙关联第一次听说"字符环"这个概念是在三年前的一次图形学研讨会上。当时一位前辈在黑板上画了个由字母组成的环形结构,然后通过矩阵变换让它产生了各种酷炫的变形效果。这种将离散字符与连续数学变换结合的思…

2026/8/26 17:25:16 阅读更多 →
轻量云养虾:水质动态解读与精细化投喂两大核心技能详解

轻量云养虾:水质动态解读与精细化投喂两大核心技能详解

1. 项目概述:为什么“轻量云养虾”需要核心技能?最近在和一些刚入坑“轻量云养虾”的朋友交流,发现一个挺普遍的现象:大家设备买了不少,监控软件装了一堆,但虾的存活率和生长状态总是不太稳定,要…

2026/8/17 9:02:58 阅读更多 →

最新新闻

【计算机毕业设计单片机案例】基于 STM32/51 单片机的健康监测终端人机交互系统设计 基于 MAX30102 传感器的便携式生命体征采集硬件开发(024104)

【计算机毕业设计单片机案例】基于 STM32/51 单片机的健康监测终端人机交互系统设计 基于 MAX30102 传感器的便携式生命体征采集硬件开发(024104)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/27 9:35:56 阅读更多 →
【IEEE出版】第十一届计算机技术与机械电气工程国际学术论坛(ISCME 2026)

【IEEE出版】第十一届计算机技术与机械电气工程国际学术论坛(ISCME 2026)

第十一届计算机技术与机械电气工程国际学术论坛(ISCME 2026) 2026 11th International Seminar on Computer Technology, Mechanical and Electrical Engineering 会议官网: 第十一届计算机技术与机械电气工程国际学术论坛(ISC…

2026/8/27 9:35:56 阅读更多 →
Lingo集合模型实战:从黑箱到白盒,高效处理大规模优化问题

Lingo集合模型实战:从黑箱到白盒,高效处理大规模优化问题

1. 项目概述:从“黑箱”到“白盒”,用集合模型点亮Lingo建模 如果你用过Lingo解决过一些线性或非线性规划问题,可能会觉得它像个“黑箱”:你把目标函数和约束条件写进去,它给你吐出一个最优解。但当你面对的问题稍微复…

2026/8/27 9:35:56 阅读更多 →
B站缓存视频合并导出MP4的3步操作:从碎片文件到完整视频

B站缓存视频合并导出MP4的3步操作:从碎片文件到完整视频

B站缓存视频合并导出MP4的3步操作:从碎片文件到完整视频 【免费下载链接】BilibiliCacheVideoMerge 🔥🔥Android上将bilibili缓存视频合并导出为mp4,支持安卓5.0 ~ 13,视频挂载弹幕播放(Android consolidates and expo…

2026/8/27 9:35:56 阅读更多 →
AI集中化风险与应对:模型网关、开源与本地部署

AI集中化风险与应对:模型网关、开源与本地部署

OpenAI CEO 奥尔特曼:担心人工智能会被少数强势主体掌控最近关于 OpenAI 的讨论不少,除了模型迭代、API 开放这些技术话题,OpenAI CEO 奥尔特曼的一个表态很值得关注:他担心人工智能会被少数强势主体掌控。这其实是 AI 治理领域绕…

2026/8/27 9:35:56 阅读更多 →
数据库系统内功修炼:从B+树到MVCC再到Spark的完整路径

数据库系统内功修炼:从B+树到MVCC再到Spark的完整路径

你是不是也有过这种经历:SQL 写得很熟, SELECT 、 JOIN 、 GROUP BY 信手拈来,线上慢查询一抓一大把,却只能靠“加索引”三板斧硬扛;面试被问到“InnoDB 为什么用 B 树”“MVCC 怎么实现的”“突然断电为什么数据…

2026/8/27 9:34:56 阅读更多 →

日新闻

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:00:51 阅读更多 →
网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸…

2026/8/27 1:06:27 阅读更多 →
从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32 是乐鑫官方的 ESP32 系列 Ardui…

2026/8/27 1:06:27 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →