drone无人机操作_无人机怎么平稳降落

drone无人机操作_无人机怎么平稳降落本文基于dronekit在实体无人机上实现最基本的起飞和降落,测试了这一过程中速度的变化以及起落位置的偏移。


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

摘要:本文基于dronekit在实体无人机上实现最基本的起飞和降落,测试了这一过程中速度的变化以及起落位置的偏移。

实体实验环境

  • 树莓派4B
  • Ubuntu mate 20.04
  • 飞控Pixhawk 2.4.8
  • 飞控固件APM
  • Python3.7

dronekit对常用的指令进行了简单封装,比如提供了simple_takeoff、simple_goto等API。这使得大部分任务可以不用通过手动发送mavlink指令来完成。然而,这些API直接使用也不太方便,因为这些API常常是异步的,直接使用会在没有到达目标状态下就继续执行之后的命令。文档的Examples中给出了很多用例函数,再次将这些简单的API封装,我们可以用这里面提供的函数。

起飞降落方法

Examples中的takeoff调用了simple_takeoff完成起飞,同时加入了很多合法性检测,比如无人机是否arm等。使用takeoff时,我们需要传入起飞的高度。达到预定高度后,无人机才会执行后续指令。

降落没有一个固定的函数,将无人机改为LAND模式即可。例程中一般只有下面一句指令,但是并没有保证这句话飞控一定会收到。事实上,在仿真时也发生过没有收到而高度一直不变的情况,这里建议多发几次,或判断状态是否改变。

vehicle.mode= VehicleMode("LAND")

除此之外,也可以通过速度控制不断给无人机发送向下的速度来实现。冬天的时候我们曾经用LAND模式下降,下降到地面后依然不停,非常容易侧翻。夏天用同样的方法则不会出现上述现象。分析原因,气压计等定位传感器在冬天比较冷的时候会有漂移,导致飞控认为自己还没有将到地面。因此,我们会采用将模式调到自稳并把油门逐渐打到零来降落。

实验结果

起降速度

起飞和降落模式都没有可以调节的速度。以起飞为例,源代码中只不过是发送了MAV_CMD_NAV_TAKEOFF的指令1。这个调节的过程是在飞控中完成的。

为了测试无人机自主起飞降落的速度,我们使无人机飞到一定高度,并时通过以下代码刻获取无人机的速度。

print("Velocity: %s" % vehicle.velocity)

经过多次起飞和降落测试,无人机速度都能够自主调节先增后减。起飞时,目标高度,更够达到的最大速度也不同。根据观察,起飞速度可以达到非常快。下降过程中,我们可以看到实时输出的速度如下所示

Velocity: [0.15, -0.08, 0.5]

高于1m时z轴下降速度的基本维持在0.5m/s,1m以下速度逐渐减慢。

奇怪的是,输出的速度仿真中下降速度是负的,上升是正的。但是在实际飞行中,速度的符号正好相反。

起降偏移

理想的起飞降落都是竖直的,然而,即便起飞前对飞控罗盘进行校准,无人机起降位置还是有一定偏移。经过测试,没有校准、风速较大或稍微倾斜的起飞都会让这个偏移更大。起飞高度不同,偏移也不同。我们飞到10m后下降大概会偏移3m。

参考文献


  1. https://github.com/dronekit/dronekit-python/blob/master/dronekit/__init__.py ↩︎

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170563.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 和第三方接口对接总结

    和第三方接口对接总结接口对接分为两种形式:我方A公司提供接口给B公司,B公司进行一些操作时调用我们的接口进行实现。例:A开发会员等级同步接口,供B同步会员等级到B系统。B会员等级的变动需要调用A接口主动推送给A(即更新会员卡等级)。我们首先要做的就是按照对方的要求,在对方调用我们的接口,我方成功处理之后,按照对方所需要的返回数据以及格式反馈给他们信息。在写本接口中,因为我们会员卡等级的字段是不一样的,所…

    2022年5月2日
  • 解决BASE64Encoder报错的问题

    解决BASE64Encoder报错的问题今天在用servlet写一个文件下载的案例时,想解决文件的中文显示问题。然后在导包importsun.misc.BASE64Encoder时,发现IDEA报错了,无法识别这个类。最后发现在JDK9后,官方就已经不支持importsun.misc.BASE64Encoder了。网上说了很多,第一种是把JDK的版本降低到1.8以内。但是我觉得这不是解决的最好办法。我觉得应该去修改原有的代码。所以我采用了官方提供了新的jar包importjava.util.Base64。下面这个java类的本意

    2022年6月15日
  • Mysql explain-type使用详解

    Mysql explain-type使用详解下面是测试用例,楼主的测试使用的MySQL版本是5.6.27-log。show createtableuser_man;CREATETABLE`user_man`( `manid`bigint(20)NOTNULLAUTO_INCREMENT, `manname`varchar(32)DEFAULTNULL, `manage`int(6)DEFAULTNULL…

    2022年10月17日
  • idea替换所有文件中的内容[通俗易懂]

    idea替换所有文件中的内容[通俗易懂]通过快捷键Ctrl+Shift+R打开窗口,或者通过点击Edit–>Find–>Replaceinpath打开窗口。输入被替换和要替换的内容后,点击replaceall即可替换全部。

    2022年9月29日
  • BCG界面库_bcg模式什么意思

    BCG界面库_bcg模式什么意思本文以MDI应用程序为例说明如何在已有的VC++工程中使用BCG界面库,我的开发环境为VS2003。1,将BCG/BCGCBPro目录路径添加到“项目属性->C/C++->常规->附加包含目录”中,同时将BCG/Bin目录路径添加到“项目属性->链接器->常规->附加库目录”中。2,确保在CWinApp派生类(设为CMyApp)的InitInstance()成员函数中调用A

    2022年10月8日
  • pycharm2022.01.13怎么激活_在线激活[通俗易懂]

    (pycharm2022.01.13怎么激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1PA3AFINM4-eyJsaWNlb…

    2022年3月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号