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

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

原创:DASA论坛Kerloud飞控版块,https://discourse.cloudkernel.cn

1. 什么是硬件在环仿真

硬件在环仿真(Hardware-in-the-Loop Simulation,简称HIL Simulation)是一种用于测试和验证实时控制系统的方法。在HIL仿真中,系统的控制器(通常是嵌入式系统)被连接到仿真环境中,该环境模拟了系统的物理部分。这些物理部分通常是实际硬件,例如电机、传感器、执行器等。

HIL仿真的基本原理是将实际的控制器硬件与仿真环境相结合,以模拟系统的实际运行情况。控制器接收来自仿真环境的传感器数据,并根据仿真环境中的模型进行计算和控制。然后,控制器的输出被发送回仿真环境中,影响模拟系统的行为。

2. 怎样在PX4中实现HIL仿真

在PX4中使用HIL仿真可以实现Kerloud mini飞控对仿真无人机的自动控制效果,也可以通过遥控器手动控制仿真无人机,我们只讨论针对gazebo引擎的操作方法。

官方针对v1.10版本固件的HIL仿真说明参考:

https://dev.px4.io/v1.10_noredirect/en/simulation/hitl.html

简要而言,有几个步骤:

  • 在地面站中使能HITL仿真,对应参数SYS_HITL

  • 选择支持HIL的airframe类型,比如HIL quadrotor+

  • 关闭UDP的自动连接

  • 使用RC遥控器,完成RC校准

  • 在Kerloud mini飞控支持的代码中将四旋翼模型的HIL串口通信打开,设置通信端口

首先执行sitl编译,生成iris sdf模型,

cd <Firmware_clone>

DONT_RUN=1 make px4_sitl_default gazebo

位于Tools/sitl_gazebo/models/iris/iris.sdf:

然后执行仿真指令:

source Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default

gazebo Tools/sitl_gazebo/worlds/iris.world

3. HIL仿真的机理

HIL仿真的信号示意图参见上图,这里我们从代码层面说明下硬件在环仿真的相关软件实现:

(1)对于启动脚本rcs (ROMFS/px4fmu_common), 查看HIL对应部分,

if param greater SYS_HITL 0
 
then
 
set OUTPUT_MODE hil
 
sensors start -h
 
commander start -h

# disable GPS
 
param set GPS_1_CONFIG 0
 
# start the simulator in hardware if needed

if param compare SYS_HITL 2
 
then
 
sih start

fi

其中 SYS_HITL是我们在地面站里使能HIL的参数。对于OUTPUT_MODE为hil的情况,继续搜索启动脚本在rc.interface可以发现,会启动pwm_out_sim模块,该模块位于src/drivers/pwm_out_sim中,用于更新驱动器输出信号在混控器mixer的输出值(即actuator_output uorb 话题)

(2)我们查看src/modules/mavlink模块,在mavlink_message.cpp中可以看到在HIL模式下,飞控会向上位机发送HIL驱动器控制信号,对应class为MavlinkStreamHILActuatorControls。

(3)同时,在mavlink_receiver.cpp中,我们可以查看飞控接受仿真引擎HIL传感器等信号的函数,如handle_message_hil_sensor()等,由此实现了信号的闭环。

(4)在gazebo引擎中,针对mavlink通信部分的插件代码位于gazebo_mavlink_interface中,该插件用于gazebo和飞控之间的通信解析。

https://github.com/cloudkernel-tech/sitl_gazebo/blob/78c54702c6995e11ba0d57da8e5f5ccee871fa25/src/gazebo_mavlink_interface.cpp

小伙伴们,这下你们清楚了硬件在环仿真的原理了吧,试着用Kerloud飞控玩玩吧。

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