首页 > 编程知识 正文

gazebo和ros的关系,gazebo四旋翼仿真环境搭建

时间:2023-05-05 05:41:23 阅读:148230 作者:3625

正文参考链接: [入门教程] PX4-Gazebo模拟-知乎(zhihu.com) ) ) ) ) ) ) ) ) ) )。

1、请参考上一篇文章,了解如何通过安装ROS Gazebo PX4开发环境(ubuntu18.04 Melodic )来完成开发环境的安装。 2、了解PX4包含哪些模拟工具的模拟。 首先,分为软件环仿真(SITL )和硬件环仿真(HITL )。 软件在环形模拟中有jMAVSim、Gazebo、AirSim三种。 jMAVSim是一个轻量级仿真器,目前只支持四旋翼模拟。 因为不太了解AirSim,所以没有用过,所以在这里就不评价了。 Gazebo是我们今天的主角,它支持旋翼、固定翼、滚转、小车等,是所有仿真器中支持平台最多的,也能支持多无人机仿真。

如果要使用px4_command和mavros包测试离板模式,建议使用Gazebo仿真。 例如,在机载电脑上修改了一些控制逻辑,打开Gazebo仿真,同时运行mavros和相应节点,将仿真的无人机切换到场外模式,Gazebo修改的代码是否正确

3、PX4如何进行模拟的Flight stack表示飞行控制即PX4,Simulator表示仿真器(例如Gazebo )。 仿真器与PX4的通信都通过MAVLink消息进行,SITL使用simulator模块的simulator_MAVLink.cpp处理这些消息,HITL使用MAVLink模块的MAV 整理一下这里的信息流:

PX4到仿真器PX4只向仿真器发送HIL_ACTUATOR_CONTROLS的MAVLink消息,熟悉PX4的人会发现该对应的uORB消息是actuator _ outpurs 在这里,混合动力控制在仿真器中进行,意味着仿真器中也包含电机的模型。

仿真器到PX4仿真器的作用是模拟实际飞行。 也就是说,模拟和计算GPS、IMU等实际飞行时的传感器状态,将这些信息发送到飞行控制后,根据飞行控制中的估计模块计算飞机的状态量。

外部到PX4这里的外部例如地面站QGC (可以外置遥控器)、Mavros、Dronecode SDK等,这里也可以模拟平时的飞机控制方法。

端口号:

PX4在这些消息通信中使用了UDP。 对于单飞机模拟,默认UDP设置如下:

UDP端口14540用于场外模式通信。 susedforcommunicationwithoffboardapis.offboardapisareexpectedtolistenforconnectionsonthisport.UDP端口14550px4列表to this port, andsimulatorsareexpectedtoinitiatethecommunicationbybroadcastingdatatothisport .如果不涉及多架飞机的模拟,则默认设置端口号,并且不需要稍后将详细说明配置。

以上说明适用于所有仿真器。

4、Gazebo模拟环境的构筑我这里基本上是按照PX4的开发手册翻译的。 如果有疑问的话,请留言和移动手册。 还是和以前的看法一致,所以百度绝对不要。 里面的答案大部分都带着你走在弯曲的路上。

首先,要成功构建PX4固件开发环境,必须成功编译PX4代码。 (如果这一步不成功,我会先做好这一步)如果在构建PX4环境时没有顺便安装Gazebo,可能需要单独安装(打开终端,输入Gazebo,爸爸就会

以下内容分为非ROS下的Gazebo模拟和ROS下的Gazebo模拟。 我个人推荐后者。 如果不用ROS,也不需要乘坐Gazebo仿真。

PX4固件有一个文件夹Firmware/Tools,您可以看到它包含一系列代码,如jMAVSim、Gazebo仿真等。 与Gazebo模拟对应的文件夹是sitl_gazebo,这实际上是一个名为sitl_gazebo的名为git仓库的子库。

让我们大致看看这个文件里有什么。

src文件夹。 这里是核心代码,即plugin (插件)代码。 例如gps、imu、电机的插件,简单来说就是如何模拟产生gps信号,由这里的代码负责。 Gazebo自己也提供了默认插件。 或者第三方也提供插件。 例如,添加传感器可以找到合适的插件。 模型文件夹。 保存各种Gazebo模型文件。 worlds文件夹。 保管Gazebo的世界环境文件。 我个人认为,参与Gazebo模拟二次开发的有上述三个

个文件夹(如果你只是使用Gazebo仿真工具,这里你什么都不需要修改,因为已经完全搭建好了),分别对应修改模型、修改模型参数、修改世界。

5、ROS下的Gazebo仿真

除了上述的教程,在PX4开发手册中,还有一个属于Gazebo仿真的教程:ROS with Gazebo Simulation。这就是指导大家如何在ROS环境下,联合Mavros功能包进行仿真调试。我的固件按照这个教程一步一步走下来,没有任何问题。(PX4项目太大,各个部件分散,也不是商业项目,坑还是多~)

对于ROS、Mavros、Offboard模式还不清楚的小伙伴,先去补补相关概念,这里就不多做介绍了。

注意:第一步和第二步只需要做一次,设置成功后,每次直接执行第三步。但如果修改了PX4固件,那你需要重新执行第一步。

第一步:编译

cd PX4-Autopilot make px4_sitl_default gazebo

第二步:source。了解ros功能包应该知道这一步是为了让系统知道有这个功能包存在,相当于设置环境变量,这样终端执行的时候就不会报找不到功能包的错误。

source Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_defaultexport ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd):$(pwd)/Tools/sitl_gazebo

推荐大家手动source,打开终端输入gedit .bashrc。在弹出的txt文件最后一行,加入上述内容。值得注意的是,$(pwd)是要替换成对应的目录路径(PX4固件所在目录),我的路径是 /home/cgd/PX4-Autopilot(cgd是我的电脑名字,PX4-Autopilot是我存放固件的文件夹名字)。于是我的修改内容如下:

source /home/cgd/PX4-Autopilot/Tools/setup_gazebo.bash /home/cgd/PX4-Autopilot /home/cgd/PX4-Autopilot/build/px4_sitl_defaultexport ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/cgd/PX4-Autopilot:/home/cgd/PX4-Autopilot/Tools/sitl_gazebo

每次打开新终端,如下图所示,这是正确的。

第三步:运行Gazebo仿真

roslaunch px4 posix_sitl.launch

因为会运行Gazebo,第一次启动会比较慢,耐心等待。启动成功后,会看到Gazebo中有一个iris无人机。这时你可以打开QGC地面站,地面站会默认连接这台飞机,你可以尝试利用地面站发送起飞指令测试。

ubuntu版QGC下载地址:Download and Install · QGroundControl User Guide

sudo usermod -a -G dialout $USERsudo apt-get remove modemmanager -ysudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -ychmod +x ./QGroundControl.AppImage./QGroundControl.AppImage

这个启动脚本位于Firmware/launch文件夹中,同时在此文件夹中,你还能看到其他类似的启动脚本。这里建议大家单独启动Mavros,而不是用它提供的另一个启动脚本同时启动(因为一个终端显示太多东西的话,报错你都看不到)。

 

第四步:运行Mavros

roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"

此处我建议Mavros功能包使用二进制安装,比较省事。可以看到这里启动mavros时配置了一些端口参数(端口匹配才能成功连接),后续我会在PX4仿真模块中找到与之对应的参数配置。

尝试读取飞空的IMU数据,打开终端,输入

rostopic echo /mavros/imu/data

当然,除去imu消息,还有很多其他消息,可以使用下面指令查看都有哪些消息。

rostopic list 6、多机Gazebo仿真

在单个飞机仿真没问题之后,才能执行这一步。

roslaunch px4 multi_uav_mavros_sitl.launch

这是官方提供的多机仿真启动脚本,只提供了两架飞机,现在给出如何增加一台飞机的方法。

在启动脚本中 multi_uav_mavros_sitl.launch增加 UAV3 复制一个组 (UAV1 or UAV2)将 ID 这个参数设置为 3为 mavlink_udp_port 这个参数选择一个新的端口号,用于与Gazebo通信。修改fcu_url 这个参数,用于与mavros通信。

创建一个新的rcS启动文件:

从启动文件中复制一个 (iris_1 or iris_2),并重命名为 iris_3。MAV_SYS_ID 修改为 3;SITL_UDP_PRT 值要与位于启动脚本中 mavlink_udp_port 参数匹配;第一个 mavlink start 端口号要与 mavlink stream 端口号一致,用于与QGC通信。第二个 mavlink start 端口号要与启动脚本中 fcu_url 参数一致。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。