先决条件:Gazebo运行正常,make px4_sitl gazebo指令运行正常。
本文采用了阿木实验的PX4镜像作为环境,感兴趣可以参考此文章:PX4环境搭建
本文将会添加下图所示的模型(其实就是换了个皮肤,但是方法是通用的):
一, 添加launch文件
cd到lauch文件的目录
cd project/volans/Firmware/launch/
将文件learning_posix_sitl.launch添加到该目录下。该launch文件是根据project/volans/Firmware/launch/posix_sitl.launch文件进行的 修改得来的,只是把该文件中的vehicle的值修改为了learning_iris。
<arg name="vehicle" default="learning_iris"/>
二,添加sdf和config文件
cd 到models目录
cd project/volans/Firmware/Tools/sitl_gazebo/models/
把文件夹learning_iris添加到该目录下。该文件夹是根据project/volans/Firmware/Tools/sitl_gazebo/models/iris文件夹修改的来的,第一个改动修改了iris文件夹下的.config文件中的该行代码:将iris.sdf修改为了learning_iris.sdf。
<sdf version='1.4'>learning_iris.sdf</sdf>
第二个改动,将iris文件夹下的iris.sdf的base_link->visual->mesh->uri属性进行了替换,简单理解就是换了个皮肤。PS:别忘记把base_link.STL文件添加到对应的目录下,不然gazebo启动后就是黑屏的。
<!-- replace1:base_link.STL -->
<uri>model://rotors_description/meshes/base_link.STL</uri>
base_link.STL就是第一张图中的红色机架,博主自己画的,大家替换的话,随便找个.stl文件或者.dae文件替换就行,主要还是学习添加新机架的流程。
三,注册新机架
(这一步非常重要,曾经困扰了我3天,这也是我最想分享给大家的一步。)
cd命令找到如下目录:
cd project/volans/Firmware/ROMFS/px4fmu_common/init.d-posix/
可以看到该目录下的文件,这些其实是新模型的注册文件。其中10016_learning_iris 就是本次新模型的注册文件。PS:最好是注册文件的后半部分名称和前文中添加在models文件夹下的文件名称以及sdf文件名称保持一致。
10016和learning_iris都代表什么意思呢?可以看PX4官方文档中的解释。
https://docs.px4.io/v1.12/en/concept/system_startup.html
当你把以上所有步骤都做完后,启动你的launch文件,就可以得到文章一开头的的新机架了,由于本质只是换了个皮肤,所以make px4_sitl gazebo指令带来什么效果,roslaunch px4 learning_posix_sitl.launch带来的效果就是什么。Mavros通讯QGC通讯都是正常的。
roslaunch px4 learning_posix_sitl.launch
四,总结
主要还是第三步注册机架 ,我在网络上找了好久都没有找到先例,最后还是在PX4官方文档中找到的此处说明,可能很少有人分享变形无人机仿真的相关的内容吧。
后来在posix_sitl.launch文件中发现这段代码,和注册新模型的路径高度一致,现在想想应该就是注册新模型用的吧。
<node name="sitl" pkg="px4" type="px4" output="screen" args="$(find px4)/ROMFS/px4fmu_common -s etc/init.d-posix/rcS $(arg px4_command_arg1)" required="true"/>