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/10/13 7:55:57 阅读更多 →
字符环与矩阵变换:从基础原理到应用实践

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

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

2026/9/29 20:13:33 阅读更多 →
轻量云养虾:水质动态解读与精细化投喂两大核心技能详解

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

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

2026/9/30 0:21:19 阅读更多 →

最新新闻

生成式AI从算法创新到工程落地:关键技术与实操指南

生成式AI从算法创新到工程落地:关键技术与实操指南

1. 从一场大会的议程设计,看生成式AI落地的真实风向如果你最近在关注生成式AI的行业动态,大概率会注意到一个现象:各种技术大会的议程正在悄悄变脸。前两年大家还在热烈讨论“大模型参数规模”“预训练数据量”这类底层指标,而今年…

2026/10/13 22:57:14 阅读更多 →
Qt QTableView vs QTableWidget:高性能表格开发实战指南

Qt QTableView vs QTableWidget:高性能表格开发实战指南

1. 项目概述:为什么一个表格控件值得专门写一篇深度实践笔记?在Qt开发中,QTableWidget和QTableView这两个名字经常被新手混为一谈,甚至不少写了两三年界面的开发者,也只停留在“拖个控件、填几行数据、改改颜色”的层面…

2026/10/13 22:57:14 阅读更多 →
双MCU SPI主从通信实战:atmega8535与atmega8寄存器配置与避坑指南

双MCU SPI主从通信实战:atmega8535与atmega8寄存器配置与避坑指南

简介:这份资源提供ATmega8535作为SPI主机、ATmega8作为从机的完整通信程序,面向正在学习AVR单片机与同步串行总线的嵌入式开发者及电子类专业学生。内容围绕SPI四线制展开,涵盖SCK时钟、MOSI与MISO数据线以及SS片选信号的配置,并涉…

2026/10/13 22:57:14 阅读更多 →
裸机点LED:从启动代码到GPIO寄存器的ARM开发全流程

裸机点LED:从启动代码到GPIO寄存器的ARM开发全流程

如果只能选一个实验来证明自己“真正碰过开发板”,我会选裸机点LED。不是因为它简单,恰恰是因为它把嵌入式开发里最绕的几个概念一次性砸到你面前——程序怎么启动、CPU怎么取指、引脚怎么和寄存器对应、编译出来的二进制怎么烧进去。当年我在JZ2440上做…

2026/10/13 22:57:14 阅读更多 →
集团级蓝图顶层设计实战:从四层架构到落地避坑指南

集团级蓝图顶层设计实战:从四层架构到落地避坑指南

做集团级蓝图顶层设计这类项目,最怕听到的一句话是:“我们集团现在系统太多了,想理一理。” 这句话听起来简单,背后往往牵扯着几十个业务板块、几百套系统、上千个接口、几个亿的数字化预算。如果只把蓝图当成“画几十张漂亮的PPT…

2026/10/13 22:57:14 阅读更多 →
汽车行驶记录仪代码:CAN报文采集与断电保护存储实战

汽车行驶记录仪代码:CAN报文采集与断电保护存储实战

简介:这份资源是面向嵌入式开发与汽车电子方向学习者的汽车行驶记录仪(俗称“黑匣子”)STM32代码工程,适合具备一定C语言与单片机基础、希望深入理解车载数据采集与存储实现的中高级开发者。代码围绕加速度传感器接口、数据记录与…

2026/10/13 22:56:13 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →