Skip to main content

仿真

使用ProSim版本匹配问题

使用ProSim时运行提示如下:

Waiting for connect PX4

检查当前PX4版本是否与ProSim版本匹配,可以通过QGS的MAVlink Shell输入如下命令查看

ver all

SITL

1. 仿真器时间戳对齐问题

问题描述

pxh> INFO  [lockstep_scheduler] setting initial absolute time to 2900000 us
ERROR [vehicle_imu] 0 - gyro 1310988 timestamp error timestamp_sample: 0, previous timestamp_sample: 0
ERROR [vehicle_imu] 0 - accel 1310988 timestamp error timestamp_sample: 0, previous timestamp_sample: 0

解决方法1

参考链接: https://blog.csdn.net/2401_83038233/article/details/149101727

进入 PX4 -Autopilot目录(PX4源代码目录), 输入如下指令启动仿真

make px4_sitl gz_x500

PX4和gazebo启动,QGC正常连接PX4并可通过QGC的虚拟摇杆控制gazebo中的PX4:

仿真不久之后出现如下报错:

ERROR [vehicle_imu] 0 - gyro 1310988 timestamp error timestamp_sample: 1110864000, previous timestamp_samplERROR [vehicle_imu] 0 - accel 1310988 timestamp error timestamp_sample: 1110864000, previous timestamp_samp

NodeShared::Publish()

Error: Interrupted system call

实际上核心报错应该是:

ERROR [vehicle_imu] 0 - gyro 1310988 timestamp error timestamp_sample: 1110864000, previous timestamp_samplERROR [vehicle_imu] 0 - accel 1310988 timestamp error timestamp_sample: 1110864000, previous timestamp_samp

我们通过报错可以发现:这是一个与时间同步有关的报错,或者说与时间戳对齐有关系

在最新版本的PX4源代码中,构建文件CMakeLists中有这样一段值得注意:

if(${PX4_PLATFORM} STREQUAL "posix")

if(ENABLE_LOCKSTEP_SCHEDULER)

add_definitions(-DENABLE_LOCKSTEP_SCHEDULER)

message(STATUS "PX4 lockstep: enabled")

else()

message(STATUS "PX4 lockstep: disabled")

endif()

endif()

这段就是我们解决问题的根本思路 ,对于这段代码解释如下:

锁步调度器(Lockstep Scheduler)是 PX4 在仿真环境(如 SITL)下的一种特殊调度方式,可以让 PX4 的运行速度和仿真器(如 Gazebo)的仿真步进严格同步,保证仿真和飞控之间不会有时间漂移。这对于自动化测试和高精度仿真非常重要。





可以通过 \`-DENABLE_LOCKSTEP_SCHEDULER=ON\` 控制启用锁步调度器。

所以实际上这是由于仿真的时间不严格同步导致的 ,启动指令变成下面:

make px4_sitl gz_x500 EXTRA_CMAKE_ARGS="-DENABLE_LOCKSTEP_SCHEDULER=ON"

也可以把变量写进去环境变量里面 ,如果寻求长久的话,这里不过多阐述

测试环境:Ubuntu22.04,WSL2,ROS2 Humble,PX4 V1.16.0

实际上我们也会发现,同时消除了报错:

Error: Interrupted system call

效果如下:

欢迎交流补充!PX4 从放弃到精通(二十五):EKF2

参考链接

https://github.com/PX4/PX4-Autopilot/issues/25106 https://discuss.px4.io/t/px4-sitl-multi-vehicle-gazebo-imu-timing-errors/33268/2 https://blog.csdn.net/2401_83038233/article/details/149101727