欢迎光临散文网 会员登陆 & 注册

PX4的GAZEBO仿真模型扩展

2022-05-19 09:53 作者:西湖大学空中机器人  | 我要投稿

在我们接触飞控的过程中,可能会有许多有意思的想法,想去扩展一些其它设备,但是重新拼凑一架飞机和扩展可能会比较贵,而且在调试和验证的过程中极有可能炸机。

PX4的设计者为我们提供了许多仿真方法来做我们自己喜欢的验证,其中就包括非常活跃的gazebo仿真平台。其实纵观PX4的代码,我们会发现它的特别,PX4并不是传统的STM32嵌入式程序,而是在NUTTX系统的基础上进行应用级程序的开发。NUTTX系统支持Posix编程标准接口,这种接口的兼容,使得PX4程序可以被编译成在NUTTX操作系统下运行的程序,并打包成固件烧写到Pixhawk当中运行;也可以被编译成在Linux操作系统下运行的程序,并在Linux系统下运行,进而提供进行仿真的条件。

针对ROS的仿真,我接下来的说法都是ROS1,参考官网的介绍有两处,网址如下:

本文我们一起关注一下,px4的gazebo仿真启动过程,以及在gazebo里进行无人机仿真时如何去嵌入其它的sdf模型,扩展仿真无人机的功能。

我们先看看启动仿真的几个launch文件

我所使用的PX4版本是1.11.3,环境搭建之类我就不说了,这里我们主要看一下,启动仿真的过程中我们具体干了一些什么。

在源码目录下文件PX4-Autopilot/launch/posix_sitl.launch,这个文件一般在我们运行make px4_sitl_default gazebo后自动运行,我们看一下它的内容。

我所使用的PX4版本是1.11.3,环境搭建之类我就不说了,这里我们主要看一下,启动仿真的过程中我们具体干了一些什么。

在源码目录下文件PX4-Autopilot/launch/posix_sitl.launch,这个文件一般在我们运行make px4_sitl_default gazebo后自动运行,我们看一下它的内容。


与我们平时启动机器人仿真的内容差不多,运行px4仿真程序、打开gazebo并加载world环境、加载仿真的model模型。

可以看到核心就是运行了px4这个可执行文件,也就是我前面提到的被编译成在Linux操作系统下运行的程序,而它的底层驱动明显是针对对应的gazebo插件写的,具体可以去研究一下CMAKE里加入了哪些编译。

这个文件里面主要的几个点:

1.

<node name="sitl" pkg="px4" type="px4" output="screen" …… >

第一个参数是node名字,随意;第二个是包名,对应PX4-Autopilot/ ;第三个是可执行文件名,对应PX4-Autopilot/build/px4_sitl_default/bin/px4 。

2.

<env name="PX4_SIM_MODEL" value="$(arg vehicle)" />

<env name="PX4_ESTIMATOR" value="$(arg est)" />

<env/>标签 是环境变量设置,这两个环境变量是要传递到/PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/rcS,也就是飞控启动脚本中的。

3.

<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/>

<env name="PX4_SIM_MODEL" value="$(arg vehicle)" />

这两个应该被分开设置,前者与加载的模型有关,后者是对环境变量是设置。

PX4_SIM_MODEL 可以是 iris、rover、boat等等,具体可以看

此时我们可以通过QGC连接到仿真,也可以通过 rostopic list可以看到话题:

这些都是gazebo的仿真话题,我们并没有看到关于飞控状态和控制的话题或者服务,还需要启动一个文件,roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557" ,这个时候可操作的东西就丰富起来了。

具体信息参照网址

这个时候我们可以订阅到飞控的许多信息话题和充足的控制接口。

对与这两个启动文件我自己是比较喜欢各自开一个终端运行的,方便看打印信息。

整理了一下,我自己整理的启动文件如下:


关于PX4 对gazebo仿真模型的扩展支持

通过mavros接口我们可以实现对飞机重要信息的读取和控制。但是如果我需要一个摄像头、或者其它的额外的传感器呢?

首先想到的当然是PX4所提供的“装备库”了。在源码目录PX4-Autopilot/Tools/sitl_gazebo/models/下有:

这些model模型里面,iris、solo、rover、r1_rover、typhoon_h480、uuv_hippocampus等等类似这样子的模型值得我们注意,前面说到运行了px4这个可执行文件,在我认为,这个可执行文件就是“面向”这几个模型编程的。当然,这几个模型不建议去动它,除非我们有信心去修改好PX4针对此模型的gazebo插件的代码。

我们要做的是在这几个模型上做扩展、改动,我这里以 iris为例子。在launch文件里将sdf模型的参数改为

<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/iris/iris.sdf"/>

如图,飞机就来了,可以通过mavros去控制飞机、读取飞机信息这个就不再谈了。

现在我需要一个摄像头,比如双目摄像头,如何去得到一个上面载着双面摄像头的飞机呢?这个其实PX4已经有了,比较有借鉴意义,我们把launch文件里将sdf模型的参数改为

<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/iris_stereo_camera/iris_stereo_camera.sdf"/>

效果:

可以看到飞机上多了一个小模型,也多了一些双目摄像头的话题。

通过rviz也可以看到左右视图。

我认为这是一个很好的例子,我们来看一下源码目录下文件

/PX4-Autopilot/Tools/sitl_gazebo/models/iris_stereo_camera/iris_stereo_camera.sdf

利用<include>标签载入模型、<joint>标签连接模型,当然每个模型都有自己的物理参数需要设置好,具体需要去看<include>标签后的模型文件。

书写自己的扩展应用

PX4提供了很多扩展的模型,包括各种摄像头、激光雷达,但是不一定满足所有需求,有时候我们需要自己去折腾。

gazebo提供的一些模型文件在:,也可以在github上下载:

通过gazebo去编辑一个sdf模型的例子看网址:

通过标签文件去编写一个sdf模型的例子看网址:

关于sdf文件一些重要标签说明与使用看网址:

gazebo提供的一些插件:

如何书写自己的插件:

肖坤老师的XTDrone项目 :

阿木实验室的普罗米修斯项目:


在开源飞控系统的推动下,无人机开发的系统结构和功能都在不断完善,同时仿真条件也在不断扩展,借助活跃的开发论坛社区,在PX4与ROS的基础上,我们的探索工具会更加丰富,探索的想法也会更加的大胆精彩。每一个无人机爱好者都在提供参考经验和新的研究问题,在前人的积累上,我们一起让有更多应用场景的无人机从仿真走到实物、从实验室进入到人们生活。

本文由西湖大学智能无人系统实验室访问学生刘金健原创

申请文章授权请联系后台相关运营人员

    

▌微信公众号:空中机器人前沿

▌知乎:空中机器人前沿(本文链接:https://zhuanlan.zhihu.com/p/451664003)

▌Youtube:Aerial robotics @ Westlake University

▌实验室网站:https://shiyuzhao.westlake.edu.cn/   


PX4的GAZEBO仿真模型扩展的评论 (共 条)

分享到微博请遵守国家法律