在PX4 v1.9.2替换姿态控制算法方法

2023-05-16

在PX4 v1.9.2替换姿态控制算法方法

目的是在model中写一个与mc_att_control类似的model加入自己的姿态控制算法并替换之

目录

  • 姿态控制算法simlink搭建生成并简单说明

  • PX4 v1.9.2姿态控制接口简单介绍

  • SITL以及HITL简单调试方法

姿态控制算法simlink搭建生成并简单说明

我们设计了一个简单的串级pid控制器,如下图

image

输入信号:飞机的当前姿态角以及当前角速度(state)、期望姿态(reference)、命令(command包括复位和模式选择)

  • 当前姿态包括pitch、roll、yaw、pitch-rate、roll-rate、yaw-rate 单位:rad、rad/s
  • 期望姿态包括pitch、roll、yaw 单位为:rad

输出信号:为归一化的x、y、z的控制信号范围为[-1,1]要和PX4姿态控制输出接口吻合

中间过程就是一些外环,内环控制了,这里就不详解了。

然后我们用simlink中代码生成工具bulid并配置一些必要的参数,就可以生成我们需要的嵌入式C++代码了,接下来就是要在飞控板中实际的验证我们的算法。

PX4 v1.9.2姿态控制接口简单介绍

关于如何在PX4中添加模块,你可以参考官网的例程(hello_sky)。

根据上一节可知我们的控制器至少需要三种接口,分别为当前姿态接口,期望姿态接口以及输出接口。大致这样:

image

其中 当前的控制模式 需要飞机的是否解锁信息为的时判断是否启动控制器和是否reset,还有飞机当前的飞行模式,这里我们主要判断的是飞机是否处在STABILIZED模式,其他的模式控制不在我们的讨论之中。

这里我先介绍上述接口对应的TOPIC:

期望的角度manual_control_setpoint_s

当前的角度以及角速度vehicle_attitude_s

当前的控制模式vehicle_control_mode_s

控制输出actuator_controls_s

注意当飞机处在STABILIZED模式时,遥控器的俯仰、翻滚、油门、偏航通道分别对应manual_control_setpoint_s结构体中的x、y、z、r。 这四个量都是归一化后的数据范围为[-1,1],其中的x、y、z可以直接送给我们的mc_att_linear_pid模型,而偏航r需要转换一下,否则当你控制yaw方向时,飞机yaw方向会随着遥控器的偏航杆回中飞机的yaw也会回到初始位置。

mc_att_control_main.cpp中这个部分的对应的函数是MulticopterAttitudeControl::generate_attitude_setpoint()

主要的功能是把manual_control_setpoint_s结构体中的x、y、z、r,转换成我们需要的期望角度。

下图是源码mc_att_control_main.cppSTABILIZED模式下简单的流程图(只跟踪了stabilized模式)。

image

SITL以及HITL简单调试方法

我们在调试代码的时候主要用到gazebo软件在环仿真,以及gazebo硬件在环仿真。

用到的函数是 **PX4_INFO()**可以在终端中打印信息,用于调试,

初期可以软件在环仿真,确保程序架构正确,能够正常运行。后期可以gazebo硬件在环仿真加入遥控器在连接PX4飞控实时的查看模型的运动情况

在运行仿真前要把自己的模块加入到sitl 中的defult.cmake如下

image

  • SITL

    终端输入

    make px4_sitl_default gazebo
    

    然后终端中就会实时打印你在模块中写的**PX4_INFO()**内容了

    image

  • HITL

    HITL中,查看调试信息PX4_INFO() 需要在qgc地面站中查看,前提是你的PX4已成功连接gazbeo,qgc成功连接gazebo。具体配置可参考官网HITL Simulation.

    key:当你的model处在运行状态,但是**PX4_INFO()**信息却没有打印出来,你可已重启一下这个model试一下。

    image

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在PX4 v1.9.2替换姿态控制算法方法 的相关文章

  • Ubuntu下PX4飞控开发环境搭建

    双清微电子 前言 xff1a PX4支持Pixhawk pixracer 高通骁龙飞控板 树莓派 派诺特等硬件 PX4是构建在Nuttx实时操作系统上的 第一步 xff1a 安装Linux基础软件 第二步 xff1a 下载源代码 第三步 安
  • PX4 GAZEBO无人机添加相机并进行图像识别

    PX4 GAZEBO无人机添加摄像头并进行图像识别 在之前完成了ROS的安装和PX4的安装 xff0c 并可以通过roslaunch启动软件仿真 接下来为无人及添加相机 xff0c 并将图像用python函数读取 xff0c 用于后续操作
  • Ubuntu20.04+MAVROS+PX4+Gazebo保姆级安装教程

    Ubuntu20 04 43 MAVROS 43 PX4 43 Gazebo 安装PX4步骤安装MAVROS安装QGCPX4仿真 安装PX4步骤 从github上clone源码 span class token function git s
  • px4 avoidance笔记

    最近在用px4官方的avoidance代码跑硬件避障 xff0c 官方介绍了只要生成符合sensor msgs PointCloud2点云信息就能使用 xff0c 因此为了应用长基线双目 xff0c 没有使用realsense的相机 xff
  • PX4源代码下载编译

    sudo git clone https github com PX4 PX4 Autopilot git recursivegit submodule update init recursivegit submodule update r
  • PX4模块设计之三:自定义uORB消息

    PX4模块设计之三 xff1a 自定义uORB消息 1 新增自定义uORB消息步骤2 应用ext hello world消息示例3 编译执行结果4 参考资料 基于PX4开源软件框架简明简介和PX4模块设计之二 xff1a uORB消息代理
  • PX4模块设计之五:自定义MAVLink消息

    PX4模块设计之五 xff1a 自定义MAVLink消息 1 MAVLink Dialects1 1 PX4 Dialects1 2 Paprazzi Dialects1 3 MAVLink XML File Format 2 添加自定义M
  • PX4模块设计之十三:WorkQueue设计

    PX4模块设计之十三 xff1a WorkQueue设计 1 WorkQueue启动2 WorkQueue接口2 1 基本接口2 2 辅助接口2 3 WorkQueue任务函数2 3 1 Flat Build2 3 2 Protected
  • PX4模块设计之十六:Hardfault模块

    PX4模块设计之十六 xff1a Hardfault模块 1 Hardfault模块初始化2 Hardfault模块主程序3 Hardfault命令3 1 hardfault check status3 2 hardfault rearm3
  • PX4模块设计之十八:Logger模块

    PX4模块设计之十八 xff1a Logger模块 1 Logger模块简介2 模块入口函数2 1 主入口logger main2 2 自定义子命令Logger custom command2 3 日志主题uORB注册 3 重要实现函数3
  • PX4模块设计之二十四:内部ADC模块

    PX4模块设计之二十四 xff1a 内部ADC模块 1 内部ADC模块简介2 模块入口函数2 1 主入口board adc main2 2 自定义子命令custom command 3 内部ADC模块重要函数3 1 task spawn3
  • PX4模块设计之三十一:ManualControl模块

    PX4模块设计之三十一 xff1a ManualControl模块 1 ManualControl模块简介2 模块入口函数2 1 主入口manual control main2 2 自定义子命令custom command 3 Manual
  • PX4模块设计之三十四:ControlAllocator模块

    PX4模块设计之三十四 xff1a ControlAllocator模块 1 ControlAllocator模块简介2 模块入口函数2 1 主入口control allocator main2 2 自定义子命令custom command
  • px4仿真无法起飞问题(Failsafe enabled: no datalink)

    报错信息 问题描述 xff1a 使用JMAVSim和gazebo仿真px4起飞时报错如下 xff1a WARN commander Failsafe enabled no datalink 说不安全 解决方法 打开QGC 就可以起飞了
  • 【px4】运行mavsdk中的offboard example

    运行MAVSDK中的offboard例子时无人机不执行 想控制无人机前后左右移动 xff0c 在按照官方教程实现offboard 插件的时候 发现用action插件能正常起飞和降落 但是一旦执行到offboard的插件代码的时候就会自动降落
  • PX4软件在环仿真注意点

    注 xff1a 最新内容参考PX4 user guide 点击此处 PX4下载指定版本代码和刷固件的三种方式 点击此处 PX4sitl固件编译方法 点击此处 PX4开发指南 点击此处 PX4无人机仿真 Gazebo 点击此处 px4仿真 知
  • 步骤三:PX4,Mavros的下载安装及代码测试

    1 安装Mavros sudo apt install ros melodic mavros ros melodic mavros extras 2 安装Mavros相关的 geographiclib dataset 此处已经加了ghpro
  • 步骤八:PX4使用cartographer与move_base进行自主建图导航

    首先老样子硬件如下 飞控 HOLYBRO PIXHAWK V4 PX4 机载电脑 jetson nano b01 激光雷达 思岚a2 前提 你已经完成了cartographer建图部分 能够正常输出map话题 前言 由于要参加中国机器人大赛
  • 【PX4 飞控剖析】06 树莓派加载安装ROS,Mavros以及PX4固件

    PX4 飞控剖析 06 树莓派加载安装Mavros以及PX4固件 1 树莓派 刷镜像1 1 用Win32DiskImager刷入ubuntu mate 16 04 2 desktop armhf raspberry pi的镜像 1 2 开机
  • 大神浅谈无人机飞控软件设计 系统性总结

    写在前面 深感自己对飞控软件 算法的知识点过于杂乱 很久没有进行系统的总结了 因此决定写几篇文章记录一些飞控开发过程的知识点 主要是针对一些软件 算法部分进行讨论 如内容有错误 欢迎指出 1 飞控软件的基本模块 无人机能够飞行主要是依靠传感

随机推荐

  • Linux 下c语言ftp服务器简单实现

    这个程序转载自http aijiekj blog 163 com blog static 12986678920112321853230 原来的程序没有注释 xff0c 最近这段时间在学习网络编程这块 xff0c 就在网上找了个程序来学习
  • 警告!你的隐私正在被上亿网友围观偷看!

    你的隐私正在被上亿万网友围观偷看 xff01 事情要从一款被推荐到烂的软件说起 Everything 这个软件想必很多同学都有听过 xff0c 是一款非常好用的文件搜索软件 xff0c 很多同学把它设置为开机必启动项之一 简单来说 Ever
  • 工作中遇到的C中Sscanf 函数的用法详解

    1 首先 xff0c 看到sscanf时 xff0c 会想到scanf xff0c 唯一不同的是前者是以固定的字符串为输入源 xff1b 后者是以屏幕为输入源 2 sscanf函数的定义为 int sscanf const char str
  • C 语言中结构体中成员所占内存的大小

    在C99标准中 xff0c 对于内存对齐的细节没有作过多的描述 xff0c 具体的实现交由编译器去处理 xff0c 所以在不同的编译环境下 xff0c 内存对齐可能略有不同 xff0c 但是对齐的最基本原则是一致的 xff0c 对于结构体的
  • 工作中遇到的一些SVN恶心的问题处理方法,解决问题的小妙招来了!---致刚刚参加的工作的青涩的人

    1 如果你已经参加了工作 xff0c 难免而且一定要用户svn xff0c 很多公司都会选择它来管理公司的项目 xff0c 这时懂的svn的用法会让你的工作事半功倍的 相信你一定为遇到上传失败 更新失败 clean up 失败而烦恼 xff
  • 麻将胡牌的算法

    清一色是麻将的种类之一 xff0c 指有一种花色的序数牌组成的胡牌 数字1 9 xff0c 每个数字最多4张牌 xff1b 我们不考虑具体的花色 xff0c 我们只看数字 刻字 xff1a 三张一样的牌 xff1a 111 222 333
  • 进程和线程的区别、相同点

    1 首先是定义 进程 xff1a 是执行中一段程序 xff0c 即一旦程序被载入到内存中并准备执行 xff0c 它就是一个进程 进程是表示资源分配的的基本概念 xff0c 又是调度运行的基本单位 xff0c 是系统中的并发执行的单位 线程
  • ORACLE日期数据类型

    oracle数据类型看起来非常简单 xff0c 但用起来会发现有许多知识点 xff0c 本文是我对ORACLE日期数据类型的一些整理 xff0c 都是开发入门资料 xff0c 与大家分享 xff1a 注 xff1a 由于INTERVAL及T
  • linux中shmget函数

    xfeff xfeff shmget int shmget key t key size t size int flag key 标识符的规则 size 共享存储段的字节数 flag 读写的权限 返回值 xff1a 成功返回共享存储的id
  • linux 中常用的数据库命令

    xfeff xfeff 1 显示数据库 show databases 2 选择数据库 use 数据库名 3 显示数据库中的表 show tables 4 显示数据表的结构 describe 表名 5 显示表中记录 SELECT FROM 表
  • socket编程accept函数返回值的理解

    accept函数返回值成功时返回非负值 xff0c 失败时返回 1 accept函数接受一个客户端请求后会返回一个新的SOCKFD值 xff0c 当有不同的客户端同时有不同请求时 xff0c 会返回不同的SOCKFD的值 这个不同的值和建立
  • 【TEE自学随笔】keystone代码略读(长文多图)

    武大信安在读 xff0c 最近在自学Risc v架构的可信执行环境 本篇内容由队友和我总结而成 xff0c 如有错误欢迎指正交流 keystone是risc v架构的开源tee 利用risc v的pmp来隔离页表 xff0c 进一步缩小了可
  • 二维数组与指针、指针数组、数组指针的用法

    二维数组 和指针 用指针表示二维数组 元素 要用指针处理二维数组 xff0c 首先要解决从存储的角度对二维数组 的认识问题 我们知道 xff0c 一个二维数组 在计算机中存储时 xff0c 是按照先行后列的顺序依次存储的 xff0c 当把每
  • 深剖基类和派生类的虚函数表

    1 当派生类实现基类的虚函数时 xff0c 基类中虚函数表和虚函数地址和派生类中虚函数表和虚函数地址不同 xff1b 当派生类不实现基类的虚函数时 xff0c 基类中虚函数表和虚函数地址和派生类中虚函数表和虚函数的地址相同 1 派生类重新实
  • C语言中转义字符

    在字符集中 xff0c 有一类字符具有这样的特性 xff1a 当从键盘上输入这个字符时 xff0c 显示器上就可以显示这个字符 xff0c 即输入什么就显示什么 这类字符称为可显示字符 xff0c 如a b c 43 和空格符等都是可显示字
  • c++ 中map 的find 用法

    用find函数来定位数据出现位置 xff0c 它返回的一个迭代器 xff0c 当数据出现时 xff0c 它返回数据所在位置的迭代器 xff0c 如果map中没有要查找的数据 xff0c 它返回的迭代器等于end函数返回的迭代器 xff0c
  • 解决AndroidStudio控制台输出乱码

    方法一 xff1a Help gt Edit Custom VM Options 在最后一行换行加上 xff1a xff08 不要漏掉符号 加好之后重启AndroidStudio xff09 Dfile encoding 61 UTF 8
  • c++--UDP发送接收

    UDP发送接收 头文件 include lt Winsock2 h gt 库 pragma comment lib Ws2 32 lib 连接Sockets相关库 初始化Windows SOCKET WSADATA wsaData if W
  • Airsim Setting up PX4 Hardware-in-Loop 环境搭建教程(windows)

    Airsim Setting up PX4 Hardware in Loop 环境搭建教程 xff08 windows xff09 经过本教程 xff0c 能够通过PX4连接遥控器 xff0c 继而能够控制airsim UE4中四轴模型 目
  • 在PX4 v1.9.2替换姿态控制算法方法

    在PX4 v1 9 2替换姿态控制算法方法 目的是在model中写一个与mc att control类似的model加入自己的姿态控制算法并替换之 目录 姿态控制算法simlink搭建生成并简单说明 PX4 v1 9 2姿态控制接口简单介绍