Kerloud飞控系列教程(17):PX4飞控开发基础之软件在环仿真

PX4飞控开发基础:软件在环仿真

图1.使用Kerloud300无人机软件在环仿真的效果
图1.使用Kerloud300无人机软件在环仿真的效果

1. 什么是软件在环仿真

软件在环仿真(Software-in-the-Loop, 简称SITL)是一种软件开发和测试技术,用于测试嵌入式系统的软件部分。在SITL模拟中,嵌入式系统的软件在计算机上运行,而不是在实际的硬件上运行。这种模拟技术可以用于各种嵌入式系统,包括无人机、汽车控制系统、工业自动化设备等。

在SITL模拟中,嵌入式系统的软件被编译为在主机计算机上运行的可执行程序,而不是为目标硬件上的特定处理器架构编译。然后,模拟器会模拟目标硬件的行为和特性,包括传感器输入(如GPS、惯性测量单元)和执行器输出(如电机和舵机)。这样,开发人员可以在计算机上运行和调试嵌入式系统的软件,而无需实际的硬件设备。

2. 如何在PX4中实现软件在环仿真

我们这里只介绍使用gazebo引擎实现SITL仿真的方法,因为它在ROS系统中使用得最多。

以px4 v1.10.0代码版本为例,可参考我们维护的版本
https://github.com/cloudkernel-tech/Firmware/tree/master_kerloud_v1.10.0

首先我们需要完成px4开发环境的搭建,参见:Kerloud飞控系列教程(4):为Kerloud飞控搭建PX4开发环境

以默认四旋翼无人机为对象,

cd ~/src/Firmware
make px4_sitl gazebo

以其他机器人为对象的方法:

光流无人机: make px4_sitl gazebo_iris_opt_flow
无人车: make px4_sitl gazebo_rover
固定翼飞机: make px4_sitl gazebo_plane
垂直起降固定翼: make px4_sitl gazebo_standard_vtol

一般情况下,这时机器人会在gazebo引擎中出现,用户启动Qgroundcontrol地面站,即可对机器人进行航路点规划和飞行测试。

3. PX4软件仿真的机理

官方文档的信息参考:https://dev.px4.io/v1.10_noredirect/en/simulation/

这里重点说明下背后的程序逻辑

图2. SITL仿真的信号图

首先,通过make px4_sitl gazebo[_vehicle-model]指令,px4软件将根据posix规范将飞控软件编译成能在ubuntu等宿主系统运行的软件,相应的cmake文件位于:
https://github.com/cloudkernel-tech/Firmware/tree/master_kerloud_v1.10.0/boards/px4/sitl, 用户可以对应查看编译了哪些模块

对应的sitl对象位于:https://github.com/cloudkernel-tech/Firmware/blob/master_kerloud_v1.10.0/platforms/posix/cmake/sitl_target.cmake

其中默认支持的机器人种类有:

set(models none shell

if750a iris iris_opt_flow iris_vision iris_rplidar iris_irlock iris_obs_avoid solo typhoon_h480

plane

standard_vtol tailsitter tiltrotor

hippocampus rover)

然后,gazebo相关模型和插件的代码位于Tools/sitl_gazebo文件夹,对应代码位于:https://github.com/cloudkernel-tech/sitl_gazebo/tree/78c54702c6995e11ba0d57da8e5f5ccee871fa25,

其中models为模型文件夹,worlds为世界环境文件夹,src中为插件文件夹。SITL仿真会启动对应的世界环境、模型和插件

之后就是图2中的信号连接了,重点看下simulator_mavlink模块,飞控启动脚本,mavlink模块等,然后就可以看到信号怎样通过udp与gazebo进行通信了。

4. 有趣的问题

看到这里,朋友们,那么怎样添加自己机器人模型到gazebo进行仿真呢?

回到教程目录Kerloud飞控系列教程(1):目录 - #4