PX4/PIXHAWK无人机代码控制流程

这篇具有很好参考价值的文章主要介绍了PX4/PIXHAWK无人机代码控制流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一般来说,无人机的飞行控制方式主要有三种,分别为遥控器,地面站以及自定义软件;其中地面站跟自定义软件广义来说可归为一类,地面站本就是被用来控制飞行器,已经被开发好的软件;但是说到地面站,通常指的是QGC(QGroundControl)和MP(MissionPlane);两者区别主要在于MP仅支持APM固件且仅支持Windows平台,QGC兼容APM/PX4固件,并且跨平台(Windows,Linux,Android,IOS);这里主要介绍如何用自己写的代码来控制无人机,首先有几个概念需要了解一下;

飞行模式(PX4):

px4固件支持10几种飞行模式,不同机型支持不同的飞行模式,以下主要基于多旋翼无人机;多旋翼主要可以分为手动模式以及自动模式;

1.手动模式

(一)位置模式:位置是一种易于飞行的RC模式,其中滚动和俯仰杆控制车辆左右和前后方向上的地面加速度(类似于汽车的油门),油门控制升降速度。

(二)高度模式:高度模式是一种相对容易飞行的RC模式,其中滚动和俯仰杆控制车辆在左右和前后方向(相对于车辆的“前部”)上的运动,偏航杆控制水平面上的旋转速度,油门控制升降速度。

(三)自稳模式:当RC控制杆居中时,手动/稳定模式可稳定多旋翼。要手动使机体移动,您可以移动摇杆使其偏离居中位置。

(四)特技模式:特技模式是用于执行特技动作的RC模式,例如翻转、翻滚。横滚、俯仰和偏航杆控制围绕各自轴的角速率,油门直接传递至控制分配。当操纵杆居中时,飞机将停止旋转,但保持其当前姿态并根据当前动量移动。

2.自动模式

(一)保持:等待飞行模式(也称为“悬停”)使无人机停止并保持其当前的GPS位置和高度(MC无人机将在GPS位置悬停,而FW无人机将在其周围盘旋)。

(二)返航:返航飞行模式用于将车辆在无障碍的路径上安全飞行至安全目的地,在那里可以等待(悬停或盘旋)或降落。

(三)任务:任务模式使车辆执行已上传至飞行控制器的预定义自主任务(飞行计划)。任务通常由地面控制站(GCS)应用程序(如QGroundControl)创建并上传;

(四)起飞:起飞飞行模式使无人机起飞到指定高度并等待进一步指令;

(五)降落:使无人机降落在开启此模式时的位置。降落后,无人机将会在一小段时间后上锁(默认情况下)。

(六)跟随:跟随模式允许多旋翼机自主保持相对于另一个系统的位置和高度,该系统使用Follow_TARGET广播其位置(可选速度)MAVLink消息。

(七)Offboard:飞机遵守 MAVLink 提供的位置,速度或姿态设定值。 设定值可以由机载计算机上运行的 MAVLink API(例如 MAVSDK(opens new window) 或 MAVROS

(opens new window))提供(通常通过串口或 wifi 连接)。

Mavlink协议:

无论是选择何种飞控,想要做二次开发,mavlink协议是永远避不开也是最重要的无人机通信协议,上面所说的地面站也是基于mavlink通信协议,所以说彻底搞清楚了mavlink协议,后面开发也会事半功倍;篇幅问题,这里就不过多介绍;

Offboard模式:

上面飞行模式中介绍过,是飞行模式中的一种;要想越过地面站,直接用自己写的几十行代码来控制无人机,Offboard模式也是必须要了解的模式;

Offboard官网介绍:

Offboard模式通过设置位置、速度、加速度、姿态、姿态角速率或力/扭矩设置点来控制飞行器的移动和姿态。

PX4必须能够以2HZ的速率连续收到MAVLink设置点消息或ROS2 OffboardControlMode 消息以确保外部控制器是正常运行的。该消息必须已经持续发送1秒钟以上PX4才能在Offboard模式下解锁或在飞行中切换至Offboard模式。如果在外部控制器给出的指令速率低于2Hz,PX4将在超时(COM_OF_LOSS_T)后退出Offboard模式,并尝试降落或执行其他一些失败保护行为。失效保护行为取决于RC遥控器是否可用,依据参数 COM_OBL_RC_ACT 的设定。

当使用MAVLink时,设定值消息既传达了指示外部控制器"正常运行"的信号也传达了设定值本身。Offboard模式下要保持位置,飞行器必须接收到一个包含当前位置设定值的消息指令。

两个要点:

1)需要以不低于2HZ的频率向PX4中写入设置点消息;

2)通过设置位置、速度、加速度、姿态、姿态角速率或力/扭矩设置点来控制飞行器的移动和姿态。

可以通过官网给出的例程来简单理解一下:

c_uart_interface_example-master源码剖析:

c_uart_interface_example是mavlink团队提供的一个演示如何用c语言调用mavlink API对飞机做offboard控制的例子程序,源码地址如下:https://github.com/mavlink/c_uart_interface_example。

下载打开文件可以看到文件结构如下:

pix起飞命令,无人机,c++,c语言

官网程序是基于linux构建的,在readme中介绍了文件的调用过程;

给出的例程是让无人机起飞至两米高度,然后设置x方向速度,再旋转180°,最后以1m/s的速度降落,程序结束;

程序的使用:

c_uart_interface_example的可执行程序是mavlink_control,它的使用方式如下:

     mavlink_control [-d <devicename> -b <baudrate>] [-u <udp_ip> -p <udp_port>] [-a]

常用的运行mavlink_control的两种形式:

1. 在本机运行mavlink_control, 仿真环境也在本机

               mavlink_control -u 127.0.0.1 -a

         其中:-u选项是指定PX4在127.0.0.1(本机地址)机器上运行;udp的port没有指定,缺省是14540;-a的意思是autotakeoff(自动起飞)。

2. 在offboard计算机中运行mavlink_control,将offboard计算机与安装有PX4固件的自驾仪Pixhawk做串口连接(注意,如果Pixhawk是在真实飞机上,需要卸下浆叶)

               mavlink_control -d /dev/ttyUSB0 -b 57600 -a

          其中:-d选项是指定串口名字,连接采用的是USB转串口电缆,所以用的设备名为ttyUSB0;-b选项是指定这个串口的通讯波特率,这个波特率需要与地面站(比如:QGroundControl)为PX4的串口(通常为TELE2)设置的波特率一致,需要核实一下,否则连不通; -a的意思是autotakeoff(自动起飞)。

源代码结构:

主程序:mavlink_control(.h/.cpp);

无人机PX4控制接口:Autopilot_interface(.h/.cpp);

通讯接口:generic_port(.h/.cpp)(接口基类),serial_port(.h/.cpp)(串口派生类),udp_port(.h/.cpp)(UDP派生类);

Mavlink通讯协议:再mavlink文件夹中,需要在官网下载c_library_v2源码复制在mavlink/include/mavlink/v2文件夹下(注意不是把整个文件夹放进去);

程序分析:

进入主程序,首先定位主函数,创建连接之后,打开连接(port->start()),调用PX4控制接口(autopilot_interface.start()),在autopilot_interface的start函数中,主要是开启了两个线程,即读线程跟写线程;

首先读线程启动,通过通讯接口接收飞控板传回的mavlink协议,然后再根据对应的msgid解码出需要的信息,保存到全局变量current_messages中。但是需要注意的是读线程跟写线程并不是同时启动的,并且写线程是需要条件触发的。

写线程的目的是为了向飞控板发送设定点(setPoint)信息,以打开offboard模式,所以需要写入的信息是local_position_ned和attitude这两条信息,只有在飞控板传回的数据中读取到这两条信息,才会开启写线程,并且开启写线程之后会持续以4HZ的频率继续发送设定点信息,至此进入off board模式的必要条件已经有了。

在这一步可能会遇到一个问题,local_position_ned信息在室外可以由GPS提供,在室内因为信号差,GPS是不能提供这个信息的,所以此时在室内是无法开启写线程的;解决办法是在无人机安装光流传感器或者去到室外;

读写线程均开启之后,就是打开offboard模式了,这一步在autopilot_interface中的toggle_offboard_control函数中,首先定义一个mavlink_command_long_t结构体com,并且设置相应参数,然后通过通信接口发送到飞控板中,写入成功就打开了offboard模式,然后解锁(arm_disarm),接下来跑完三个例程,退出offboard,关闭线程,关闭接口,程序结束;

示例中是通过set_position(),set_velocity(),void set_yaw(),来分别控制位置,速度和姿态,在offboard模式下基本能够完成基础的飞行动作;

总结:

网上查了很多资料,想要使用代码控制无人机,大致有三种方式基于python的DroneKit接口,基于mavros的程序控制,以及直接基于mavlink的程序开发;但总而言之,都是基于mavlink通信协议;

参考博客:

http://t.csdn.cn/BygBO

http://t.csdn.cn/LwBM4文章来源地址https://www.toymoban.com/news/detail-805026.html

到了这里,关于PX4/PIXHAWK无人机代码控制流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PX4无人机调参

    PX4 1.13.2 日志分析软件:flight review https://logs.px4.io/ 产生震动的原因: 1,桨叶损坏、动平衡差 2,电机桨座不垂直,电机动平衡差 3,机架刚性不足 4,部件松动 降低震动的方法: 软件滤波:调低通滤波或者陷波滤波器参数 硬件减震:调减震球的软度或者加配重 调参时可以用

    2024年02月15日
    浏览(57)
  • 【PX4-AutoPilot教程-Offboard】MAVROS功能包控制无人机进入offboard模式飞行官方例程(C++实现)

    主要介绍如何通过MAVROS功能包的offboard模式控制gazebo中的飞机起飞到高度两米。 首先建立工作空间,这里建立一个名为 uav_demo_ws 的工作空间。 之后创建功能包,这里命名为 offboard_run 。 建立C++脚本作为这个功能包的执行文件。 把官方代码复制到这个文件里面,保存退出。

    2024年02月04日
    浏览(60)
  • px4+vio实现无人机室内定位

    文章主要讲述px4 如何利用vins_fusion里程计数据实现在室内定位功能。 文章基于以下软、硬件展开。 硬件 软件 机载电脑: Intel NUC 系统:Ubuntu 20.04 相机: Intel Realsense D435i ros:noetic 飞控:Pixhawk 2.4.8 固件:PX4 1.14.0 完整vins_to_mavros 功能包地址: https://github.com/rotorcraftman/px4ctr

    2024年02月03日
    浏览(48)
  • Ubuntu PX4无人机仿真环境配置

     目录 一、VM虚拟机安装ubuntu18.04   1、VMware安装   2、新建虚拟机 二、Ubuntu系统配置   1、更改软件安装源   2、安装中文输入法 三、PX4环境搭建   1、安装git   2、下载px4源码   3、安装ROS   4、安装MAVROS   5、安装QGC   6、仿真测试 四、其他工具安装   1、VScode安装      

    2024年02月02日
    浏览(188)
  • PX4学习笔记——无人机以及QGC操作

    官方教程链接:https://docs.qgroundcontrol.com/master/en/SetupView/SetupView.html 电脑先打开QGC,进入Vehicle Setup,点击Firmware。无人机飞控使用USB线连接电脑,然后选择烧录的.px4程序(可以是官方的,也可以是自己编译生成的)。 点击Airframe,如果无人机为四旋翼,则点击 Generic Quadcopter

    2024年02月11日
    浏览(46)
  • 无人机/飞控--ArduPilot、PX4学习记录(5)

    这几天看dronekit,做无人机失控保护。 PX4官网上的经典案例,我做了很多注解,把代码过了一遍。 无人机具体执行了:  先起飞,飞至正上空10m-向北移动10m-向东移动10m-向南移动10m-向西移动10m-回到初始起飞点(即home点),降落。 具体执行之前,要打开JMAVSim,接下来会在JMAV

    2024年04月15日
    浏览(62)
  • 无人机/飞控--ArduPilot、PX4学习记录(2)

    这是一篇碎碎念,零零碎碎的记录了环境配置过程, 仅供本人记录学习历程和参考。 (记录的挺乱的,但是文章链接里的博客写的是真好) 本章主要完成的目标 : 安装PX4 并 成功运行出3D无人机界面。 参考文章: 搭建PX4环境: PX4/Pixhawk - 编译环境搭建_pix4 yu pixhawk-CSDN博客 使

    2024年03月21日
    浏览(64)
  • 【PX4&Simulink&Gazebo联合仿真】在Simulink中使用ROS2控制无人机进入Offboard模式起飞悬停并在Gazebo中可视化

    本篇文章介绍如何使用ROS2控制无人机进入Offboard模式起飞悬停并在Gazebo中可视化,提供了Matlab/Simulink源代码,以及演示效果图。 环境: MATLAB : R2022b Ubuntu :20.04 LTS Windows :Windows 10 ROS :ROS2 Foxy Python: 3.8.2 Visual Studio :Visual Studio 2019 PX4 :1.13.0 ROS2的应用程序管道非常简单,这要

    2024年02月22日
    浏览(58)
  • ubuntu搭建PX4无人机仿真环境(4) —— 仿真环境搭建

    前言 在搭建之前,需要把 ROS、MAVROS、QGC 等基础环境安装配置完成。大家可以参考我之前的教程 本次安装是以 px4 v1.13.2 为例。 我的配置如下: 虚拟机 Ubuntu 18.04 (运行内存 4G、硬盘内存 80G) 、ROS melodic 、最新版 QGC 建议安装之前可以先看看这个 👉 ubuntu搭建PX4无人机仿真环境

    2024年02月15日
    浏览(76)
  • 【PX4&Simulink&Gazebo联合仿真】在Simulink中使用ROS2控制无人机沿自定义圆形轨迹飞行并在Gazebo中可视化

    本篇文章介绍如何使用ROS2控制无人机沿自定义圆形轨迹飞行并在Gazebo中可视化,提供了Matlab/Simulink源代码,以及演示效果图。 环境: MATLAB : R2022b Ubuntu :20.04 LTS Windows :Windows 10 ROS :ROS2 Foxy Python: 3.8.2 Visual Studio :Visual Studio 2019 PX4 :1.13.0 ROS2的应用程序管道非常简单,这要

    2024年02月22日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包