首页 > 其他分享 >计算机控制apm飞控自动飞行

计算机控制apm飞控自动飞行

时间:2024-05-12 22:57:41浏览次数:26  
标签:mavproxy apm 计算机控制 expect child print before MAVProxy 飞控

摘要

使用mavproxy(mavlink)控制ArduCopter飞控无人机自动起飞到1米高度然后前进1m然后降落.

关键信息

  • 飞控固件:ArduCopter 4.2.0
  • 飞控MAVProxy 1.8.70
  • PyMavlink 2.4.41

原理简介

mavproxy简介

[https://ardupilot.org/dev/docs/copter-sitl-mavproxy-tutorial.html]
[https://github.com/ArduPilot/ardupilot_wiki/blob/master/mavproxy/source/docs/modules/cmdlong.rst]
[https://pypi.org/project/MAVProxy/]
[https://ardupilot.org/mavproxy/index.html]
A MAVLink protocol proxy and ground station. MAVProxy is oriented towards command line operation, and is suitable for embedding in small autonomous vehicles or for using on ground control stations. It also features a number of graphical tools such as a slipmap for satellite mapping view of the vehicles location, and status console and several useful vehicle control modules. MAVProxy is extensible via a modules system - see the modules subdirectory for some example modules. MAVProxy was developed by CanberraUAV for use in the 2012 Outback Challenge, and includes a module for the CanberraUAV search and rescue system.

MAVProxy is a fully-functioning GCS for UAV’s, designed as a minimalist, portable and extendable GCS for any autonomous system supporting the MAVLink protocol (such as one using ArduPilot). MAVProxy is a powerful command-line based “developer” ground station software. It can be extended via add-on modules, or complemented with another ground station, such as Mission Planner, APM Planner 2, QGroundControl etc, to provide a graphical user interface.

It has a number of key features, including the ability to forward the messages from your UAV over the network via UDP to multiple other ground station software on other devices.

MAVProxy is commonly used by developers (especially with SITL) for testing new builds.

MAVProxy was first developed by CanberraUAV, to enable the use of companion computing and multiple datalinks with ArduPilot. It has grown to be one of the most versatile tools in the ArduPilot ecosystem, and many of the features users now see in other GCS tools can trace their origins to MAVProxy.

MAVLink协议代理和地面站。MAVProxy面向命令行操作,适用于小型自主车辆或地面控制站的嵌入使用。它还提供了许多图形工具,例如slipmap卫星地图查看车辆位置,状态控制台和几个有用的车辆控制模块。MAVProxy可以通过模块系统进行扩展 - 在模块子目录中查看一些示例模块。 MAVProxy由CanberraUAV为2012 Outback Challenge开发,包括用于CanberraUAV搜索和救援系统的模块。
MAVProxy是一个全功能的UAV GCS,被设计为一个简约,便携且可扩展的GCS,适用于支持MAVLink协议的任何自主系统(例如使用ArduPilot的系统)。MAVProxy是一种功能强大的基于命令行的“开发人员”地面站软件。它可以通过附加模块进行扩展,或者与另一个地面站(如Mission Planner,APM Planner 2,QGroundControl等)结合使用,以提供图形用户界面。
它具有许多关键功能,包括能够通过网络上的UDP将您的UAV的消息转发到其他设备上的其他地面站软件。
MAVProxy通常被开发人员(尤其是在SITL中使用)用于测试新版本。
MAVProxy最初是由CanberraUAV开发的,用于启用伴随式计算和与ArduPilot的多个数据链路。它已发展成为ArduPilot生态系统中最多才多艺的工具之一,许多用户在其他GCS工具中看到的特性都可以追溯到MAVProxy。

pexpect简介

[https://www.cnblogs.com/bmjoker/p/10583809.html]
pexpect是一个通过启动子程序,使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的python模块。
使用python来作自动化登陆,并执行命令

pexpect模块的使用偏向于偏交互式的使用,如:管理员需要登陆100台机器,每次都会手动执行不同的命令,如果通过ssh的命令进行登陆,这样每次输入不同的密码,用户,主机地址等信息会是一个不小的工作量,用pexpect这个模块,就可以解决问题。
pexpect可以理解成Linux下的expect的python封装,通过expect我们可以实现ssh,ftp,telnet等命令行进行自动交互,包括输入主机地址,用户名,密码,上传文件等,待出现异常我们还可以进行尝试自动处理。

实现

文件下载

我用夸克网盘分享了「pymavlink-2.4.41-py3-none-any.whl等文件」,点击链接即可保存。
链接:[https://pan.quark.cn/s/594c07c2ce0f]
提取码:fvsq

安装mavproxy

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple future
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pexpect
pip3 install "./pymavlink-2.4.41-py3-none-any.whl" --user
pip3 install "./MAVProxy-1.8.70-py3-none-any.whl" --user
# 测试
mavproxy.py --master=/dev/ttyACM0 --baudrate=57600

核心命令

mavproxy.py --master=/dev/ttyACM0 --baudrate=57600

# 切换到guided模式
mode guided

# 解锁
arm throttle

# 起飞到1m并悬停
# 必须在解锁后15s内发送起飞命令,否则就会重新锁定电机
takeoff 1

# 锁定
disarm throttle

# 降落
mode loiter

# 重启
reboot

# 绕圆圈
param set circle_radius 0.5
mode circle

# 前进1
position 1 0 0
# 后退1
position -1 0 0

# 左1
position 0 -1 0
# 右1
position 0 1 0

# 升1
position 0 0 1
# 降1
position 0 0 -1

# 右转90度
# setyaw ANGLE ANGULAR_SPEED MODE
setyaw 90 30 1

核心代码

import subprocess # 异步相关
from mavproxy import RaicomMavproxy # mavproxy相关
import pexpect # shell-expect相关
from termcolor import colored # 终端相关
import time # 时间相关
class RaicomUtils:
    @classmethod
    def echoColor(cls,text,status):
        '''需要导入:from termcolor import colored'''
        if status == "ok":
            print(colored("<<<","blue"),colored(text, "white"),colored("[", "yellow"),colored(status, "green"),colored("]", "yellow"))
        elif status == "error":
            print(colored("<<<","red"),colored(text, "white"),colored("[", "yellow"),colored(status, "red"),colored("]", "yellow"))
        elif status == "info":
            print(colored("<<<","blue"),colored(text, "white"),colored("[", "yellow"),colored(status, "light_magenta"),colored("]", "yellow"))
        elif status == "start":
            print(colored(">>>","blue"),colored(text, "white"),colored("[", "yellow"),colored(status, "light_cyan"),colored("]", "yellow"))
        else:
            print(colored(text, "white"))
    @classmethod
    def waitKeyToExit(cls):
        '''等待用户输入特定字符的函数'''
        try:
            while True:
                key = input("按下 'q' 以退出: \n")
                if key.lower() == 'q':
                    print("\nExiting...")
                    exit(0)
        except KeyboardInterrupt:
            print("\nExiting due to KeyboardInterrupt...")
            exit(1)
class RaicomMission():
    @classmethod
    def test4(cls):
        '''纯mavproxy方式实现起飞后悬停5秒然后降落'''
        RaicomUtils.echoColor("自动执行Test#4 蚱蜢跳任务","start")
        # 获取当前脚本所在的目录
        script_dir = os.path.dirname(os.path.abspath(__file__))
        RaicomUtils.echoColor("脚本所在目录:{}".format(script_dir),"info")

        # 启动mavproxy
        child = pexpect.spawn('mavproxy.py --master=/dev/ttyACM0 --baudrate=57600')

        # 切换到guided模式
        child.sendline('mode guided')
        print(child.before)
        child.expect('MAV>')
        print(child.before)

        time.sleep(2)
        # 解锁
        child.sendline('arm throttle')
        print(child.before)
        child.expect('MAV>')
        print(child.before)

        # 起飞到1m并悬停
        child.sendline('takeoff 1')
        print(child.before)
        child.expect('MAV>')
        print(child.before)

        time.sleep(5)

        # 前进1
        child.sendline('position 1 0 0')
        print(child.before)
        child.expect('MAV>')
        print(child.before)

        time.sleep(2)

        # 降1
        child.sendline('position 0 0 -1')
        print(child.before)
        child.expect('MAV>')
        print(child.before)

        time.sleep(2)
        
        child.sendline('mode loiter')
        print(child.before)
        child.expect('MAV>')
        print(child.before)

        time.sleep(2)

        # 锁定
        child.sendline('disarm throttle')
        print(child.before)
        child.expect('MAV>')
        print(child.before)

        # 退出
        child.sendline('exit')
        print(child.before)
        child.expect(pexpect.EOF)
        print(child.before)

        RaicomUtils.echoColor("自动执行Test#4 蚱蜢跳任务","ok")
        pass

效果

无人机飞行

标签:mavproxy,apm,计算机控制,expect,child,print,before,MAVProxy,飞控
From: https://www.cnblogs.com/qsbye/p/18188369

相关文章

  • 【计算机控制网络 Computer Control Network】组网设计作业 Enterprise Network Desig
    一、说明1、仅为本人的作答,非标准答案;2、题目版权归校方和教授所有。二、题目描述p1:p2:三、完整作答p1:p2:p3:p4:p5:p6:p7:p8:p9:p10:p11:p12:p13:p14:p15:p16:p17:p18:p19:......
  • 【飞控制作】从飞控制作学习项目经验
    1.四旋翼无人机飞行原理:欠驱动系统通过4个电机的转速,来控制飞行器X、Y、Z轴的加速度和角速度,实现悬停、垂直升降、俯仰、偏航、滚转(这里只对比较陌生的俯仰、偏偏行、滚转做示意图说明)。组成运动控制运动控制主要参考:四旋翼无人机飞行原理及控制方法,你了解多少?实物图2.......
  • Vue学习笔记61--mapActions + mapMutations
    原始实现 <template><div><h3>当前求和*10为:{{bigSum}}</h3><h3>当前求和为:{{sum}}</h3><h3>我在:{{school}},学习:{{subject}}</h3><selectv-model.number="selectNo"><option......
  • 构建空间场景轻应用,Mapmost Alpha来啦【文末赠书(10本)--第二期】
    文章目录:一、MapmostAlpha介绍二、MapmostAlpha应对数字孪生业务痛点解决之道2.1MapmostAlpha提供海量城市底板2.2MapmostAlpha提供便捷的配置管理工具2.3MapmostAlpha提供一键式部署发布和分享三、沉浸式体验MapmostAlpha3.1创建应用3.2新手指导3.3场......
  • Observability:使用 Elastic AI Assistant 和 APM 分析 OpenTelemetry 应用程序
    作者:来自Elastic BahubaliShettiOpenTelemetry正在迅速成为云原生计算基金会(CNCF)内最广泛的项目,拥有与Kubernetes一样多的提交,并获得了客户的广泛支持。许多公司正在采用OpenTelemetry并将其集成到他们的应用程序中。Elastic®提供了有关为应用程序实施OpenT......
  • Python 分析— 使用 LeuvenMapMatching 包进行地图匹配用于道路导航
        在道路导航中,我们有了街道网络地图。轨迹/GPS数据必须与街道相匹配才能进行导航,因为GPS读数提供纯粹的纬度和经度坐标,但我们想知道车辆行驶的具体道路。        我首先尝试了一种简单的方法来匹配点,将每个点独立地匹配到最近的路段。如果没有道路,只需......
  • 虚拟飞控计算机:飞行控制系统验证与优化的利器
    ​01.背景介绍随着航空技术的飞速发展,飞行控制系统作为飞机的心脏,全面负责监测、调整和维持飞行器的姿态、航向、高度等参数,用以确保飞行的安全和稳定。为了满足这些要求,现代飞控系统通常采用先进的处理器和外设来确保其高效、稳定的运行。▲C919模拟驾驶舱 然而,在实际应......
  • AirSim飞控介绍与观察视角
    飞控介绍​ 四旋翼无人机有四个呈十字交叉的螺旋桨,四个螺旋桨高速旋转可以产生升力,从而带动整个飞机在空中飞行。四旋翼无人机能够垂直起飞和降落,可以自由悬停,如果操作得当还可以进行高速高机动飞行,自由轻便、易操作是其突出的优点。四旋翼无人机主要是通过电机调节4个螺旋桨的转......
  • NCC Mocha v0.10 发布,.NET 开发的基于 OpenTelemetry 的 APM 系统
    目录项目简介项目进度v0.10发布内容项目背景平台功能技术架构v0.10快速体验启动项目Trace数据的发送配置Jaeger数据源Trace数据的查询项目简介Mocha是一个基于.NET开发的APM系统,同时提供可伸缩的可观测性数据分析和存储平台。项目地址:https://github.com/dotnetcore......
  • Mapmost Alpha,一款非常好用且强大的三维城市创建工具~!
    一、MapmostAlpha介绍Hello,各位铁铁,今天给大家推荐一款好用的三维城市场景创建工具。这款产品主要用于创建三维的城市场景,一款快速构建空间场景轻应用的在线创作平台。原生兼容云上云下多源异构数据,具备丰富的可视化组件、海量城市底板、便捷的配置管理工具、全面的可定义对象属......