
ArduPilot+mavros+gazebo+QGC联合仿真初体验
3. 启动gazebo 地图为
2)启动gazebo地图的时候,发现 四轴云台链接件 需要下载,故在模型中直接选择屏蔽,即最终的仿真中该部件缺失。方法为找到下图中的
将其中的云台相关部分屏蔽掉
此时,即可正常启动gazebo环境,如下图所示。
4. 按照官网方式,打开ArduPilot代码中的
6. 最后是ROS和mavros部分。功能包的创建和编译首先参照官网。和前面写的博客推文一致,增加了offboard模式的结点。(这里,对应ArduPilot代码,没有对应的
发布日期:2021-05-08 12:54:13
浏览次数:10
分类:精选文章
本文共 3024 字,大约阅读时间需要 10 分钟。
首先给出最终效果图:
- 一共使用到三个文件夹,其中第一个为源代码,第二个为参照官网下载的gazebo地图信息,第三个为ROS功能包。
2.第二个gazebo地图需要在github上下载然后编译
git clone https://github.com/khancyr/ardupilot_gazebocd ardupilot_gazebomkdir buildcd buildcmake ..make -j4sudo make install
然后,注意要把环境变量配置好,参照github上的说法如下
echo 'source /usr/share/gazebo/setup.sh' >> ~/.bashrc
Set Path of Gazebo Models (Adapt the path to where to clone the repo)
echo 'export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models' >> ~/.bashrc
Set Path of Gazebo Worlds (Adapt the path to where to clone the repo)
echo 'export GAZEBO_RESOURCE_PATH=~/ardupilot_gazebo/worlds:${GAZEBO_RESOURCE_PATH}' >> ~/.bashrcsource ~/.bashrc
配置好的环境变量截图如下

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

model.sdf
文件。


sitl
模式,命令为(可以理解为ArduPilot中的sitl模式调用的为Tools/autotest/sim_vehicle.py
文件) cd ~/ardupilot/ArduCopter../Tools/autotest/sim_vehicle.py -f gazebo-iris --console --map
后面的参数–console为打开显示端,–map为打开地图。如下图所示。
sitl
模式与gezebo
联合调试。(左下角的报错为地图未成功加载完毕,会不停的从网络上下载相应的地图)。 5. 此时,打开QGC会自动的链接上ArduPilot,即可完成直接的通信。同时可以在QGC上实现相应的动作。 
offboard
模式,我采用GUIDED
模式进行,但是guide模式并非offboard模式
)。按照官网说明,拷贝从mavros代码包中拷贝apm.launch到自己建的ROS功能包中 Let’s copy MAVROS default launchfile for ArduPilot : roscp mavros apm.launch apm.launch
然后编辑apm.launch文件,修改对应的端口
在本次实验中,从下句输出信息可以看出,共打开了127.0.0.1:14550,14551端口。其中一个分配给QGC,另一个分配给mavros即可。
"--master" "tcp:127.0.0.1:5760" "--sitl" "127.0.0.1:5501" "--out" "127.0.0.1:14550" "--out" "127.0.0.1:14551" "--map" "--console"
- 最后,通过ROSlaunch启动对应的ros结点,完成四旋翼的起飞,悬停和降落功能。运行指令为:
roslaunch apm_mavros apm.launch
if(!current_state.armed && tmp) { arming_client.call(arm_cmd); tmp = 1; ROS_INFO("Call for arm!"); } if(arm_cmd.response.success) { take_off.request.altitude = 2.5; if(!take_off.response.success && tmp) { tmp = 0; set_takeoff_client.call(take_off); ROS_INFO("Call for takeoff"); // sleep(10); } if(take_off.response.success) { // ROS_INFO("Takeoff successfully!"); count++; } } if(count>300) { mode_rtl_ok = 1; offb_set_mode.request.custom_mode = "RTL"; set_mode_client.call(offb_set_mode); }
总结:至此,ROS/Mavros + gazebo 与PX4 ()和ArduPilot的 sitl
仿真均已经验证实现过了。个人感觉,PX4代码对这一套仿真流程支持要好一些,主要好在提供的代码全,讲解全,附带的诸如lidar, camera的插件多。而ArduPilot则没有将重心放在这里,需要各位程序员自己变成实现,这就要求对gazebo插件,mavros等内容有较好的理解。另外,ArduPilot的官网信息也有很多需要维护和修改,存在一定的坑(此处对大神无效)。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月07日 18时23分06秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
shell编程(六)语言编码规范之(变量)
2021-05-08
vim杂谈(三)之配色方案
2021-05-08
vim杂谈(五)之vim不加载~/.vimrc
2021-05-08
Linux杂谈之终端快捷键
2021-05-08
vimscript学习笔记(二)预备知识
2021-05-08
vimscript学习笔记(三)信息打印
2021-05-08
awk杂谈之数组习题
2021-05-08
Linux网络属性配置详解
2021-05-08
Python(三十)类的理解
2021-05-08
Extjs布局详解
2021-05-08
Android数据库
2021-05-08
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2021-05-08
keil左侧文件调整方法
2021-05-08
本地分支关联远程分支
2021-05-08
STM8 GPIO模式
2021-05-08
python多态和封装
2021-05-08
STM32boot启动
2021-05-08
回调函数(callback function)
2021-05-08
omnet++
2021-05-08