【教程】PX4Gazebo仿真
今天,给大家介绍下PX4开源飞控项目中一个强大的功能Gazebo仿真。
Gazebo仿真是PX4提供众多仿真工具中的一个。它在PX4代码中(Firmware/Tools/sitl_gazebo)也是一个单独出来的仓库。
PX4中都有哪些仿真工具?他们都有什么区别?
官方介绍请移步:PX4开发手册仿真
仿真首先分为软件在环仿真(SITL)和硬件在环仿真(HITL)。目前来看,软件在环仿真更简单实现及方便。我就读的课题组就是专门做导弹的半
实物仿真的,个人认为硬件在环仿真需要加上转台才能真正意义发挥出作用,不然只是在Pixhawk板子上跑仿真环境,毫无指导意义。
软件在环仿真一共是有jMAVSim、Gazebo、AirSim这三种。jMAVSim是一个轻量级的仿真器,目前只支持四旋翼仿真。AirSim我不太清楚,没有使
用过,这里就不评价了。Gazebo是我们今天的主角,支持旋翼、固定翼、倾转、小车等,是所有仿真器里支持平台最多的,也能支持多个无人机的
仿真,在各个仿真器比较的表格里,PX4官方是这么说Gazebo仿真的:Thissimulatorishighlyrecommended.
一般而言,如果我是修改了PX4固件内的代码,比如修改了姿态控制器,我会用jMAVSim调试,同时打开地面站,利用定点及自稳模式进行飞行测
试,还能下载log看看记录的量对不对。jMAVSim不吃电脑配置,运行比较流畅,适合快速验证PX4内部代码逻辑及检查修改固件后的BUG。
如果我需要用到px4_command及mavros包来进行offboard模式的测试,我会使用Gazebo仿真。比如我在机载电脑中修改了一些控制逻辑,打开
Gazebo仿真,同时运行mavros及相应节点,将仿真的无人机切换至offboard模式,在Gazebo中测试我修改的代码是否正确,十分好用!
这只是我个人的使用习惯,正常来讲,我后面说的那个功能用jMAVSim也能做,但你既然都跑ROS了,肯定用一个和ROS相关的仿真器更加好用一
点。jMAVSim比不过Gazebo的一点是它无法进行固定翼、小车的仿真(但我也没试过),以及无法进行视觉类的仿真,无法修改飞行环境等等。具
体Gazebo还能做什么,可以自行百度,或参阅Gazebo官网,毕竟光学Gazebo就够一个人学一段时间的了(这点就和ROS一样,但放到我们场景中
来说,还是你需要什么就学什么,不然你永远都学不完)。
总而言之,Gazebo仿真功能强大,值得推荐!
PX4的仿真是如何进行的?
上一张官方图,Flightstack代表飞控即PX4,Simulator代表仿真器(如Gazebo)。所有仿真器与PX4的通讯都是通过MAVLink消息来进行的,SITL
使用simulator模块中的simulator_mavlink.cpp来处理这些消息,而HITL是使用mavlink模块中的mavlink_receiver.cpp来处理这些消息。梳理一下这里
的消息流向:
1.PX4到仿真器。PX4给仿真器只会发送一个HIL_ACTUATOR_CONTROLS的MAVLink消息,熟悉PX4的应该知道这个对应的uORB消息
是actuator_outputs.msg,也就是姿态控制器最后的输出控制量。这里也就意味着,混控是在仿真器中进行的,仿真器中也包含电机的模型。
2.仿真器到PX4。仿真器的作用就是模拟真实飞行,即模拟计算出真实飞行时的传感器状态,包括GPS,IMU等,将这些信息发送给飞控后,再由
飞控中的估计模块计算出飞机状态量。
3.外部到PX4。这里的外部就比如地面站QGC(可以外接遥控器),Mavros,DronecodeSDK等,这里也就可以模拟我们平时控制飞机的方式。
下面这张图更清楚的表示出了PX4与各个部分之间的关系。仿真器包含了传感器和执行机构的模型,负责产生传感器的原始数据和执行最后的底
层控制指令;OffboardAPI及QGC负责发送传输上层指令(位置期望点、速度期望值等)并且监控飞机状态;PX4固件本身则运行控制及估计模
块(即飞控核心算法)。
评论1