查看: 1218|回复: 0

不花一分钱学 ardupilot 代码

[复制链接]

301

主题

345

帖子

948

积分

高级飞友

Rank: 4

积分
948
飞币
601
注册时间
2017-7-30
发表于 2022-11-11 11:02:12 | 显示全部楼层 |阅读模式

背景介绍:
前不久 Sugar 被问到 dronekit-python 怎么通过 mavlink 连飞机。
为了给出个满意的回答,Sugar 认真用软件在环仿真研究了一翻。
几年前 Sugar 就接触过 ArduPilot 的 SITL,只是一直都有飞机玩没太重视这个软件在环仿真。
Sugar 清楚记得从前团队里第一个在 Windows 下跑通 SITL 的小伙儿叫姜国龙,做出来还给团队培训了一番。
通过这两天研究发现 SITL 现已非常强大,完全可以让人不花一分钱就可以学习 ardupilot 源码。
本文就介绍一下 Sugar 这两天尝试过的 4 种 SITL 方法。
本文第 1 个视频包含完整的开发流程演示,第 2 个视频是另外 3 种方法的演示。
SITL 的意义

一、数据价值
对于开发者来讲,改代码后采集数据进行分析是必须的。
对于工程师来讲,分析实际问题现象也要有一个正确的数据参照。
无论是初步测试还是数据对比,SITL 的仿真数据都有很大的参考价值。
二、节省成本
不论是时间成本还是金钱成本都是飞控开发必须投入的。
开发过的软件先走 SITL,不用装机、不用充电、不用拿到试飞场,一个命令就能测试,省时间。
如果代码有错或算法有误,实际飞行面临的就是炸机烧钱,而 SITL 虚拟飞机炸得起,还不用修无限换新,省金钱。
SITL 固件编译

1、编译 SITL 固件(配置)。
./waf configure --board=SITL

2、编译 SITL 固件(编译)。
./waf copter
不花一分钱学 ardupilot 代码w2.jpg

dronekit-sitl


不通过 MavProxy 直接对飞控源码进行仿真。

此方法是 Sugar 第一个尝试的方法,也是 4 种方法中唯一的不通过 mavproxy 直接仿真飞控源码的方法。
优点:仿真通信效率高,自然支持自定义 mavlink 报文。
缺点:启动仿真后要手动修改影响仿真的参数(看文档似乎可以自动加载参数,但 Sugar 没有深入研究),仿真日志存在 tmp 目录下(比较随机)。
特点:操作过程与带 Wifi 数传的真机几乎一致(这一点说不上是优点还是缺点,所以称之为特点)。

1、启动仿真
dronekit-sitl /home/sugar/gitlab/ardupilot/build/sitl/bin/arducopter
不花一分钱学 ardupilot 代码w3.jpg

2、通过 QGC 的 TCP 进行连接

这个视频展示了完整的 SITL 开发流程。

http://static.video.qq.com/TPout.swf?vid=h3041zuzx4u&1314.swf
dronekit-sitl(通过 mavproxy)

优点:可以在 mavproxy 的 console 中用命令修改参数(不用在 QGC 里一个一个改),QGC 启动后自动连接(免去设置新连接的麻烦)。
缺点:由于借助 mavproxy 所以仿真的通信效率受到一定影响,仿真日志存在 tmp 目录下(比较随机)。

后面 3 种 SITL 的方法都在这个视频里演示。

http://static.video.qq.com/TPout.swf?vid=l30411tt63c&1314.swf

1、启动仿真
dronekit-sitl /home/sugar/gitlab/ardupilot/build/sitl/bin/arducopter


2、启动 MavProxy

打开另一个终端。
mavproxy.py --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 --console
不花一分钱学 ardupilot 代码w5.jpg

3、修改影响仿真的参数

param set ARMING_CHECK 0param set RC3_MIN 1101param set INS_ACCOFFS_X 0.1param set FRAME_CLASS 1

4、打开 QGC

会自动连上。
查看通信状态的插件是 Sugar 自己加的 Mavlink 报文。

不花一分钱学 ardupilot 代码w6.jpg

Gazebo 带 3D 模型仿真


飞行日志在 ardupilot/ArduCopter/logs/ 下保存。

优点:带 3D 模型显得很酷,仿真的日志文件在指定目录下(与实际 SD 卡里的一样,可以在一处保存多次仿真数据),QGC 启动后自动连接(免去设置新连接的麻烦)。
缺点:由于借助 mavproxy 所以仿真的通信效率受到一定影响,加载 3D 模型对电脑配置要高一点。

1、打开终端,用下面命令启动 Gazebo
gazebo --verbose worlds/iris_arducopter_runway.world
不花一分钱学 ardupilot 代码w7.jpg

2、进入 ardupilot/ArduCopter 目录下,用下面命令启动仿真

../Tools/autotest/sim_vehicle.py -f gazebo-iris --console
3、启动 QGC 操控飞机。
ardupilot 官方基础仿真


飞行日志在 ardupilot/ArduCopter/logs/ 下保存。

优点:一个命令启动相当方便,仿真的日志文件在指定目录下(与实际 SD 卡里的一样,可以在一处保存多次仿真数据),QGC 启动后自动连接(免去设置新连接的麻烦)。
缺点:由于借助 mavproxy 所以仿真的通信效率受到一定影响。

1、进入 ardupilot/ArduCopter/ 目录下,运行如下命令:
../Tools/autotest/sim_vehicle.py --console
2、启动 QGC 操控飞机。
遇到过的困难


上面是在一切顺利的前提下给出的操作过程,Sugar 实际操作的过程中遇到了一些问题,这里记录一下问题和解决办法。

一、自定义 mavlink 报文通不过 mavproxy
解决办法:要重新编译安装 pymavlink。

参考链接:https://ardupilot.org/dev/docs/code-overview-adding-a-new-mavlink-message.html

sudo pip uninstall pymavlinkcd gitlab/ardupilot/modules/mavlink/pymavlink/sudo python setup.py install --user

因为用 sudo 方式,当运行 mavproxy 时会遇到 pymavlink 版本错误 ,解决方法下面会说。

二、mavproxy 返回 pymavlink 版本问题,如下:
pkg_resources.DistributionNotFound: The 'pymavlink>=2.3.3' distribution was not found and is required by MAVProxy
解决办法:
sudo chown -R sugar:sugar .local/lib/python2.7/必备软件

1、ardupilot 编译环境,编译出 SITL 固件。
2、带插件版 QGC 跟踪地面站与飞机的 mavlink 通信,显化控制过程,方便定位问题。
3、ArduPilotLog 对 SITL 数据进行图形化显示,简单脚本分析,以及 Matlab 数据库生成。
4、Matlab 对 SITL 数据进行综合分析。
5、其他的 dronekit-sitl、mavproxy、pymavlink 等官方文档都有说明。

公众号后台回复 apm 得到带插件 QGC 源码。
公众号后台回复 ardupilotlog 得到 Sugar 开源的 ArduPilotLog 软件(最新版永远在 github 上)。
PS

推文中的视频 Sugar 有在 b 站上发布,有 b 站帐号的读者可以到 b 站上看高清无广告版。
b 站链接的获得方法见公众号“关于我”页面。
关注作者

欢迎扫码关注我的公众号MultiMCU EDU。

提示:在公众号“关于我”页面可加作者微信好友。

喜欢本文求点赞,有打赏我会更有动力。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

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