0

阿木币

0

精华

182 小时

在线时间

技术大V

Rank: 4

发表于 2020-4-25 17:09:18 7131 浏览 2 回复

[仿真开发] ArduPilot+mavros+gazebo+QGC联合仿真初体验

本帖最后由 Acher1 于 2020-4-26 17:45 编辑

首先给出最终效果图:

                               
登录/注册后可看大图

实现内容与PX4官网代码功能类似,四旋翼飞机自动起飞至2.5m高度,悬停一定时间,然后自主降落。记录如下几个需要注意的地方:
1. 一共使用到三个文件夹,其中第一个为源代码,第二个为参照官网下载的gazebo地图信息,第三个为ROS功能包。


                               
登录/注册后可看大图



2.第二个gazebo地图需要在github上下载然后编译
  1. git clone <a href="https://github.com/khancyr/ardupilot_gazebo" target="_blank">https://github.com/khancyr/ardupilot_gazebo</a>
  2. cd ardupilot_gazebo
  3. mkdir build
  4. cd build
  5. cmake ..
  6. make -j4
  7. sudo make install
复制代码

然后,注意要把环境变量配置好,参照github上的说法如下
  1. echo 'source /usr/share/gazebo/setup.sh' >> ~/.bashrc
复制代码
Set Path of Gazebo Models (Adapt the path to where to clone the repo)
  1. echo 'export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models' >> ~/.bashrc
复制代码
Set Path of Gazebo Worlds (Adapt the path to where to clone the repo)
  1. echo 'export GAZEBO_RESOURCE_PATH=~/ardupilot_gazebo/worlds:${GAZEBO_RESOURCE_PATH}' >> ~/.bashrc
  2. source ~/.bashrc
复制代码

配置好的环境变量截图如下

                               
登录/注册后可看大图



3. 启动 gazebo 地图为
  1. gazebo --verbose worlds/iris_arducopter_runway.world
复制代码


注:
1)在启动过程中,存在一直download的情况,需要下载gazebo的地图包(从百度云盘直接下载即可),然后解压到 ~/.gazebo下(若没有worlds文件夹,则创建文件夹)如下图所示


                               
登录/注册后可看大图


2)启动gazebo地图的时候,发现 四轴云台链接件 需要下载,故在模型中直接选择屏蔽,即最终的仿真中该部件缺失。方法为找到下图中的 model.sdf 文件。


                               
登录/注册后可看大图

将其中的云台相关部分屏蔽掉

                               
登录/注册后可看大图

此时,即可正常启动gazebo环境,如下图所示。


                               
登录/注册后可看大图

4.按照官网方式,打开ArduPilot代码中的 sitl 模式,命令为(可以理解为ArduPilot中的sitl模式调用的为Tools/autotest/sim_vehicle.py文件)
  1. cd ~/ardupilot/ArduCopter
  2. ../Tools/autotest/sim_vehicle.py -f gazebo-iris --console --map
复制代码
后面的参数--console为打开显示端,--map为打开地图。如下图所示。

                               
登录/注册后可看大图

此时,已经完成了ArduPilot的 sitl 模式与 gezebo 联合调试。(左下角的报错为地图未成功加载完毕,会不停的从网络上下载相应的地图)。

5. 此时,打开QGC会自动的链接上ArduPilot,即可完成直接的通信。同时可以在QGC上实现相应的动作。

                               
登录/注册后可看大图

6. 最后是ROS和mavros部分。功能包的创建和编译首先参照官网。和前面写的博客推文一致,增加了offboard模式的结点。(这里,对应ArduPilot代码,没有对应的`offboard`模式,我采用GUIDED模式进行,但是guide模式并非offboard模式)。按照官网说明,拷贝从mavros代码包中拷贝apm.launch到自己建的ROS功能包中
Let’s copy MAVROS default launchfile for ArduPilot :
  1. roscp mavros apm.launch apm.launch
复制代码
然后编辑apm.launch文件,修改对应的端口
  1. <arg name="fcu_url" default="udp://127.0.0.1:14551@14555" />
复制代码

在本次实验中,从下句输出信息可以看出,共打开了127.0.0.1:14550,14551端口。其中一个分配给QGC,另一个分配给mavros即可。
  1. "--master" "tcp:127.0.0.1:5760" "--sitl" "127.0.0.1:5501"
  2. "--out" "127.0.0.1:14550" "--out" "127.0.0.1:14551" "--map" "--console"
复制代码

7. 最后,通过ROSlaunch启动对应的ros结点,完成四旋翼的起飞,悬停和降落功能。运行指令为:
  1. roslaunch apm_mavros apm.launch
复制代码

                               
登录/注册后可看大图

其中ROS的代码部分,主要是为了实现功能,粘贴主要部分如下:
  1.    if(!current_state.armed && tmp)
  2.     {
  3.         arming_client.call(arm_cmd);
  4.         tmp = 1;
  5.         ROS_INFO("Call for arm!");
  6.     }
  7.     if(arm_cmd.response.success)
  8.     {
  9.          take_off.request.altitude = 2.5;
  10.          if(!take_off.response.success && tmp)
  11.          {
  12.              tmp = 0;
  13.              set_takeoff_client.call(take_off);
  14.              ROS_INFO("Call for takeoff");
  15.                     // sleep(10);
  16.          }
  17.          if(take_off.response.success)
  18.          {
  19.            // ROS_INFO("Takeoff successfully!");
  20.             count++;
  21.          }
  22.     }
  23.     if(count>300)
  24.     {
  25.         mode_rtl_ok = 1;
  26.         offb_set_mode.request.custom_mode = "RTL";
  27.         set_mode_client.call(offb_set_mode);
  28.     }  
复制代码

总结:至此,ROS/Mavros + gazebo 与PX4 (https://blog.csdn.net/qq_15390133/article/details/105327213)和ArduPilot的 sitl 仿真均已经验证实现过了。个人感觉,PX4代码对这一套仿真流程支持要好一些,主要好在提供的代码全,讲解全,附带的诸如lidar, camera的插件多。而ArduPilot则没有将重心放在这里,需要各位程序员自己变成实现,这就要求对gazebo插件,mavros等内容有较好的理解。另外,ArduPilot的官网信息也有很多需要维护和修改,存在一定的坑(此处对大神无效)。

当然,这一套仿真流程主要是用在swarm, SLAM等上面,PX4的代码维护者很多也都是机器视觉方面的。ArduPilot的代码维护和变动感觉要大一些,后面会推出UAVCAN,还有Lua脚本等高端玩法,加入了无人船,Rover等。
向两个活跃社区的贡献者致敬!

本文转自博客:https://blog.csdn.net/qq_15390133/article/details/105469756


评分

参与人数 1阿木币 +3 收起 理由
admin + 3

查看全部评分


扫一扫浏览分享
回复

使用道具 举报

44

阿木币

1

精华

2327 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

发表于 2020-4-26 08:45:13
加油加油哈!
回复 点赞

使用道具 举报

0

阿木币

0

精华

182 小时

在线时间

技术大V

Rank: 4

 楼主| 发表于 2020-4-26 12:16:57
本帖最后由 chasing 于 2020-4-26 12:26 编辑

多谢,麻烦管理员修改下其中的代码格式吧,我从CSDN上粘贴过来的,代码中有“bash"段的。
回复 点赞

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表