PX4 imu传感器配置

2023-05-16

PX4 传感器配置

##坐标系定义
在这里插入图片描述

旋转变化

reference

在机器人中各个坐标系之间的变换是非常常见的,而在ROS tf 工具中,以及Eigen 中 我们常常会见到RPY的旋转表示和四元数的旋转表示。当然学航空出生的我们可能更常见的是Euler描述。那么这三者的关系我们就必须说清楚的。

首先,三种表达方式显然都是描述同一个旋转。在不加说明的情况下,我们所描述的都是从机体坐标系( b 系 )到参考坐标系( i 系 )的旋转,即: X i = R X b X_i=RX_b Xi=RXb

Euler的描述顺序: 依次绕机体系的 Z–>Y–>X的旋转,即动系旋转, 应该采用右乘法:
R = R Z R Y R X R=R_Z R_Y R_X R=RZRYRX
![在这里插入图片描述](https://img-blog.csdnimg.cn/eca0ee5d6baf420d94e51dd30e6b4bba.png
注:图片是B是动系,A是参考系

RPY的描述顺序: 依次绕着参考系(定系)的 X–>Y—>Z ,即定系旋转,应采用左乘法:
R = R Z R Y R X R=R_ZR_YR_X R=RZRYRX
![在这里插入图片描述](https://img-blog.csdnimg.cn/903e42152a8f44778424e23bd5118f5e.png
由以上公式可见,两个描述下的$ \alpha , \beta ,\gamma$ 的值,一模一样

所以RPY [90 , 45, 10] 也是欧拉角描述的:滚转角90度,俯仰角45度,偏航角10度。

imu配置

px4 对 IMU,compass传感器的配置都是一致的。其启动配置在/boards/.../init/rc.board_sensors中。 以FMU_V5为例,具体配置如下:

#!/bin/sh
#
# PX4 FMUv5 specific board sensors init
#------------------------------------------------------------------------------

board_adc start

# Internal SPI bus ICM-20602
icm20602 -s -R 2 -q start

# Internal SPI bus ICM-20689
icm20689 -s -R 2 start

# Internal SPI bus BMI055 accel/gyro
bmi055 -A -R 2 -s start
bmi055 -G -R 2 -s start

# Baro on internal SPI
ms5611 -s start

# internal compass
ist8310 -I -R 10 start

# External compass on GPS1/I2C1 (the 3rd external bus): standard Holybro Pixhawk 4 or CUAV V5 GPS/compass puck (with lights, safety button, and buzzer)
ist8310 -X -b 1 -R 10 start

在配置中其他参数的具体作用,可以查看PX4开发者手册,也可以在nsh中输入icm20649(具体的驱动模块名) help:

icm20649 <command> [arguments...]
 Commands:
   start
     [-s]        Internal SPI bus(es)
     [-S]        External SPI bus(es)
     [-b <val>]  board-specific bus (default=all) (external SPI: n-th bus
                 (default=1))
     [-c <val>]  chip-select index (for external SPI)
                 default: 1
     [-m <val>]  SPI mode
     [-f <val>]  bus frequency in kHz
     [-q]        quiet startup (no message if no device found)
     [-R <val>]  Rotation
                 default: 0

   stop

   status        print status info

这里,主要再说明一下R参数的作用。正如help功能所输出的结果,R表示的是传感器到机体坐标系(NED)的一个旋转关系,具体参数在rotation.h中定义:

这里采用了RPY的描述,它的具体定义和飞机常用欧拉角的关系,我在上一章旋转变化作了说明

enum Rotation : uint8_t {
	ROTATION_NONE                = 0,
	ROTATION_YAW_45              = 1,
	ROTATION_YAW_90              = 2,
	ROTATION_YAW_135             = 3,
	ROTATION_YAW_180             = 4,
	ROTATION_YAW_225             = 5,
	ROTATION_YAW_270             = 6,
	ROTATION_YAW_315             = 7,
	ROTATION_ROLL_180            = 8,
	ROTATION_ROLL_180_YAW_45     = 9,
	ROTATION_ROLL_180_YAW_90     = 10,
	ROTATION_ROLL_180_YAW_135    = 11,
	ROTATION_PITCH_180           = 12,
	ROTATION_ROLL_180_YAW_225    = 13,
	ROTATION_ROLL_180_YAW_270    = 14,
	ROTATION_ROLL_180_YAW_315    = 15,
	ROTATION_ROLL_90             = 16,
	ROTATION_ROLL_90_YAW_45      = 17,
	ROTATION_ROLL_90_YAW_90      = 18,
	ROTATION_ROLL_90_YAW_135     = 19,
	ROTATION_ROLL_270            = 20,
	ROTATION_ROLL_270_YAW_45     = 21,
	ROTATION_ROLL_270_YAW_90     = 22,
	ROTATION_ROLL_270_YAW_135    = 23,
	ROTATION_PITCH_90            = 24,
	ROTATION_PITCH_270           = 25,
	ROTATION_PITCH_180_YAW_90    = 26,
	ROTATION_PITCH_180_YAW_270   = 27,
	ROTATION_ROLL_90_PITCH_90    = 28,
	ROTATION_ROLL_180_PITCH_90   = 29,
	ROTATION_ROLL_270_PITCH_90   = 30,
	ROTATION_ROLL_90_PITCH_180   = 31,
	ROTATION_ROLL_270_PITCH_180  = 32,
	ROTATION_ROLL_90_PITCH_270   = 33,
	ROTATION_ROLL_180_PITCH_270  = 34,
	ROTATION_ROLL_270_PITCH_270  = 35,
	ROTATION_ROLL_90_PITCH_180_YAW_90 = 36,
	ROTATION_ROLL_90_YAW_270          = 37,
	ROTATION_ROLL_90_PITCH_68_YAW_293 = 38,
	ROTATION_PITCH_315                = 39,
	ROTATION_ROLL_90_PITCH_315        = 40,

	ROTATION_MAX
};

不过需要注意的一点是,这里的旋转关系有一点复杂。之前已经说了,这个旋转代表的是传感器坐标系到机体坐标系的旋转。那么机体坐标NED已经确定了,那么传感器坐标系呢?这里分为两种情况:

  • 传感器出厂坐标系为右手系的

大部分imu和mag本身都是右手系的,这里我收集了一些常用传感器的datasheet定义图:
在这里插入图片描述
这一类传感器在硬件设计时,期望将他们厂家定义的坐标系与机体的ENU相重合。这样的话,在传感器启动参数中 R 就为默认值0,也就是ROTATION_NONE 。这里,你肯定会疑惑道?难道不该是和之前说的机体坐标系NED重合么?你说的很对,确实应该如此。但是PX4在相应驱动中做了如下处理:

		// sensor's frame is +x forward, +y left, +z up
		//  flip y & z to publish right handed with z down (x forward, y right, z down)
		gyro.x[i] = gyro_x;
		gyro.y[i] = (gyro_y == INT16_MIN) ? INT16_MAX : -gyro_y;
		gyro.z[i] = (gyro_z == INT16_MIN) ? INT16_MAX : -gyro_z;

经过这样对 y, z轴的反转,最终传感器的测量值和机体坐标系NED一致了。这样做其实是很合理的,因为大多数imu和mag是布置在飞控的top,而不会把它们翻过来焊接在bottom。

那么当imu或者mag由于布线需要不是那样焊接的呢?那么这时请按上面的处理,把imu的出厂坐标系通过 y, z 翻转变为相似的NED坐标系。这个翻转后的传感器坐标系到机体坐标系的旋转就是我们要输入R

  • 传感器出厂坐标系为左手系的

这听起来很奇怪,居然有传感器坐标系是左手的。但是我们常用的ist8310还真就是这样的:

在这里插入图片描述

首先,PX4在驱动中进行了如下处理:

					// sensor's frame is +x forward, +y right, +z up
					z = (z == INT16_MIN) ? INT16_MAX : -z; // flip z

好了,看到这里结合前面的讲解,我想你肯定懂了?没错,就是把它出厂坐标系的z轴进行翻转,然后就得到了一个NED的坐标系。这个坐标系到机体坐标系的旋转就是我们要输入的R

总结: 基于上述传感器配置的描述,我们就可以自己随意安排传感器在飞控板上的布置了!

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

PX4 imu传感器配置 的相关文章

  • UML中的关系

    UML中的关系 UML中的关系 xff08 Relationships xff09 主要包括5种 xff1a 关联关系 聚合关系 依赖关系 泛化关系和实现关系 关联 xff08 Association xff09 关系 关联关系是一种结构化

随机推荐

  • [授权发表]基于 VNCServer + noVNC 构建 Docker 桌面系统

    by Falcon of TinyLab org 2015 05 02 最初发表 xff1a 泰晓科技 聚焦嵌入式 Linux xff0c 追本溯源 xff0c 见微知著 xff01 原文链接 xff1a 基于 VNCServer 43 n
  • Debian 源(source.list)

    在debian下 xff0c 用apt方式安装软件除了可以以网络上的资源为源之外 xff0c 还可以使用本地的资源 下面我就以安装GCC的过程为例 xff0c 说一下整个过程 平台 xff1a debian 4 0 图形界面 资源 xff1
  • boa 编译步骤&&常见错误

    第一步 xff1a 源码包 xff1a boa 0 94 13 tar gz 解压 tar xvf 第二步 xff1a 你会看到10个文件 xff0c 其中有一个是src xff0c 直接进入 src文件目录下 第三步 xff1a 配置 x
  • 推荐几款SSH工具

    SSH 是建立在应用层基础上的安全协议 xff0c 专为远程登录会话和其他网络服务提供安全性的协议 利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题 SSH最初是UNIX系统上的一个程序 xff0c 后来又迅速扩展到其他操作平台
  • WinForm应用实战开发指南 - 如何设计展示应用程序主界面

    WinForm应用程序的开发 xff0c 主窗口的界面设计一般都要求做的更好一些 xff0c 可以根据不同的系统功能模块进行归类整合 xff0c 能使客户迅速寻找到相关功能的同时 xff0c 也能感觉到整体性的美观大方 xff0c 因此主窗
  • PX4+光流模块MTF01的一点使用心得

    1 不知道怎么样把这个给接到飞控的串口4上 应该是因为没找到地方设置串口4的波特率啥的 xff0c 最后还是接到了TELEM2接口上 xff0c 又设置了一下波特率才好用 2 定高效果很好 xff0c 定位效果也还行 3 在出现位置模式下y
  • [论文] Feature Squeezing:Detecting Adversarial Examples in Deep Neural Networks

    思路 xff1a 对抗样本经过feature squeeze处理后大部分增加的干扰会被消除或者减小 xff0c 致使feature squeeze前后的分类结果向量 xff08 distributed vector xff09 L1距离很大
  • 手把手教用matlab做无人驾驶(三)-路径规划A*算法

    这里 xff0c 我们更新主程序如下 xff1a editor Robert Cao 2018 9 1 clc clear all close all disp 39 A Star Path Planing start 39 p start
  • eve-ng导入华为路由器镜像

    iol位置 opt unetlab addons iol bin qemu位置 xff1a opt unetlab addons qemu 设备图标位置 opt unetlab html images icons 设备脚本位置 opt un
  • ROS入门保姆级教程:7-ROS话题通信实现2:自定义消息类型(msg)

    ROS入门往期 xff1a ROS入门保姆级教程 xff1a 1 hello world初体验 ROS入门保姆级教程 xff1a 2 VScode中使用ROS ROS入门保姆级教程 xff1a 3 ROS文件系统 ROS入门保姆级教程 xf
  • 设计模式---订阅发布模式(Subscribe/Publish)

    订阅发布模式定义了一种一对多的依赖关系 xff0c 让多个订阅者对象同时监听某一个主题对象 这个主题对象在自身状态变化时 xff0c 会通知所有订阅者对象 xff0c 使它们能够自动更新自己的状态 将一个系统分割成一系列相互协作的类有一个很
  • 能ping通虚拟机,但ssh连接不上,访问虚拟机服务也不行NAT

    自己的windows ip 跟虚拟机的ip一样 xff0c 产生错觉 xff0c 其实ping的是自己的window主机 xff0c 修改windows 地址后就可以了
  • html5是什么?五大浏览器、网页基本骨架结构与含义、常用标签——学习HTML5第一天的心得总结,若有错误望指正,我将持续更新与大家共同进步。

    注意 xff1a 上方P标签所说的块元素不可嵌套块元素是指在p元素中不建议嵌套块元素 xff0c 如不建议 lt P gt lt div gt lt div gt lt P gt 这种嵌套 xff0c 其他块元素则根据需求嵌套即可 1 ht
  • 新手入门 - 详解 frp 内网穿透 frpc.ini 配置

    本文为 Stille 原创文章 经实践 测试 整理发布 如需转载请联系作者获得授权 并注明转载地址 转载地址 xff1a 新手入门 详解 frp 内网穿透 frpc ini 配置 思有云 IOIOX 前言 本站关于 frp 内网穿透的相关教
  • pixhawk硬件设计粗略解析

    文章目录 前言一 pixhawk是什么 xff1f 二 pixhawk硬件解析总结 前言 本片是个人对NFCYv5飞控的硬件设计的个人分析与笔记 为什么要这么做呢 xff1f 原因很简单 xff0c 一是对pixhawk硬件组成有更加深入的
  • Android IPC机制

    本文首发于个人博客 胖蔡叨叨叨 xff0c 更多相关信息可点击查看 Android IPC机制 IPC IPC Inter Process Communication 进程间通信 xff0c 是指系统中运行的不同进程间的信息交互过程 And
  • PX4的控制与输出

    文章目录 前言控制器部分输出部分控制组混控器混控器的启动信号输出 前言 这篇记录一下自己分析PX4从位置控制 gt 速度控制 gt 姿态控制 gt 角速度控制 gt 电机输出的源码框架的阅读与理解 xff0c 便于之后自己修改控制器 在这个
  • 悬停油门的参数估计方法

    悬停油门的参数估计方法 估计悬停油门 xff0c 实际上就是完成油门值与飞机加速度之间的映射关系 xff0c 准确的估计值可以让飞行控制更为准确 在PX4中 xff0c 对悬停油门的估计方法采用的是扩展卡尔曼滤波 xff0c Fast dr
  • D435/D435i使用技巧

    D435 D435i使用技巧 D435 D435i是目前市场上使用最为方便的双目深度相机 虽然淘宝上其价格有些让人望而却步 xff0c 但是咸鱼上成色不错的D435 D435i 价格就在1000左右 xff0c 依旧是自主无人机视觉定位和感
  • PX4 imu传感器配置

    PX4 传感器配置 坐标系定义 旋转变化 reference 在机器人中各个坐标系之间的变换是非常常见的 xff0c 而在ROS tf 工具中 xff0c 以及Eigen 中 我们常常会见到RPY的旋转表示和四元数的旋转表示 当然学航空出生