【开发环境】PX4无人机实物使用视觉或运动捕捉系统进行位置估计

news2024/11/25 9:55:32

PX4无人机实物使用视觉或运动捕捉系统进行位置估计

    • PX4中关于外部位置信息的MAVLink话题
    • 参考坐标系
    • EKF2调整配置参数
      • 调整EKF2_EV_DELAY参数
    • 与ROS共同使用
      • 将OptiTrack MoCap系统提供的姿态数据导入ROS
        • Motive MoCap软件的步骤
        • 将姿态数据导入ROS
        • 重新映射姿态数据
      • 将姿态数据转发到PX4
      • PX4和ROS的参考坐标系
    • 飞行测试

视觉惯性里程计(VIO)和运动捕捉系统(MoCap)允许无人机在全局位置信息不可用或不可靠时导航(例如在室内或在桥下飞行等)。

VIO和MoCap都根据视觉信息确定车辆的位置和姿态,它们之间的主要区别在于坐标系视角:

  • VIO使用机载传感器从无人机的视角获取姿态数据。

  • MoCap使用机外摄像机系统来获取3D空间中的无人机姿态数据。

来自VIO和MoCap的姿态数据都可用于更新基于PX4的自动驾驶仪的局部位置估计(相对于局部原点),并且还可选择性地融合到无人机姿态估计中。此外,如果外部姿态系统也提供线速度测量数据,则该数据可以用于改进状态估计(线速度测量数据的融合仅由EKF2算法支持)。

这篇文章介绍了如何配置基于PX4飞控的无人机系统,通过ROS或其他MAVLink系统从MoCap/VIO系统获取数据。主要介绍如何设置像VICON和Optitrack这样的MoCap系统,以及像ROVIO、SVO和PTAM这样的VIO系统。

PX4中关于外部位置信息的MAVLink话题

PX4使用以下MAVLink话题获取外部位置信息,并将其映射到uORB话题。

MAVLink话题名称uORB话题
VISION_POSITION_ESTIMATEvehicle_visual_odometry
ODOMETRY (frame_id = MAV_FRAME_LOCAL_FRD)vehicle_visual_odometry
ATT_POS_MOCAPvehicle_mocap_odometry
ODOMETRY (frame_id = MAV_FRAME_MOCAP_NED)vehicle_mocap_odometry

EKF2状态估计器只能订阅vehicle_visual_odometry话题获取外部位置信息,因此只能处理前两条话题,如果使用MoCap系统则必须生成这些话题才能够使用EKF2。vehicle_visual_odometry话题是唯一一个可以向PX4发送线速度测量数据的话题。

话题的传输频率应在30Hz和50Hz之间。如果信息速率过低,EKF2将不会熔断外部视觉信息。

PX4当前不支持以下MAVLink视觉话题:GLOBAL_vision_POSITION_ESTIMATEvision_SPEED_ESTIMATEVICON_POSTION_ESTIMATE

参考坐标系

PX4将FRD(X向前、Y向右和Z向下)用于局部机体坐标系以及参考坐标系。

当使用磁力计的航向时,PX4参考系的X轴将与北方对齐,因此它被称为NED(X North,Y East,Z Down)。

PX4估计器的参考帧的航向和外部姿态估计的航向在大多数情况下将不匹配。因此,外部姿态估计的参考帧以不同的方式命名,称为MAV_frame_LOCAL_FRD

根据参考系的来源,在发送MAVLink Vision/MoCap话题之前,您需要对姿态估计应用自定义变换。这对于更改姿态估计的父帧和子帧的方向是必要的,以使其符合PX4约定。可以根据MAVROS odom插件了解必要的转换。

例如,如果使用Optitrack坐标系,则局部坐标系位于水平面上(x前和z右),而y轴垂直并指向上。一个简单的技巧是交换轴以获得NED坐标系。

如果x_{mav}y_{mav}z_{mav}是通过MAVLink作为位置反馈发送的坐标,则我们获得:

x_{mav} = x_{mocap}
y_{mav} = z_{mocap}
z_{mav} = - y_{mocap}

对于无人机姿态方向的坐标系变换,保持四元数的标量部分w相同,并以相同的方式交换矢量部分x、y和z。你可以在每个系统中应用这个技巧-如果你需要获得NED坐标系,请查看你的MoCap输出并相应地交换轴。

EKF2调整配置参数

必须设置以下参数才能将外部位置信息与EKF2一起使用。

参数名称外部位置估计设置
EKF2_AID_MASK根据融合模型需求设置视觉位置融合、视觉速度融合、视觉偏航角融合和外部视觉欧拉角融合。
EKF2_HGT_MODE设置为使用视觉作为海拔估计的主要来源。
EKF2_EV_DELAY设置为测量的时间戳与实际捕获时间之间的差值。
EKF2_EV_POS_X, EKF2_EV_POS_Y, EKF2_EV_POS_Z设置视觉传感器(或MoCap标记)相对于无人机机体坐标系的位置。

调整EKF2_EV_DELAY参数

EKF2_EV_DELAY参数是相对于IMU测量的视觉位置估计器延迟。

或者换句话说,这是视觉系统时间戳和IMU时钟(EKF2的基本时钟)记录的实际捕获时间之间的差异。

从技术上讲,如果MoCap和ROS计算机之间有正确的时间戳(而不仅仅是到达时间)和时间同步(例如NTP),则可以将其设置为0。事实上,这需要一些经验调整,因为整个MoCap到PX4的通信链路中的延迟是需要特殊设置的。使用完全同步的通信链路来设置系统是罕见的!

通过检查IMU速率和EV速率之间的偏移,可以从日志中获得延迟的粗略估计。要启用EV速率的日志记录,请在参数设置中勾选SDLOG_PROFILE参数的第7选项(计算机视觉和禁用)。

在这里插入图片描述

在这里插入图片描述

可以通过调整参数来进一步降低该值,以找到在动态机动过程中产生最低EKF的值。

与ROS共同使用

ROS不需要用于提供外部姿态信息,但强烈建议使用,因为它已经与VIO和MoCap系统进行了良好的集成。

将OptiTrack MoCap系统提供的姿态数据导入ROS

VIO和MoCap系统有不同的获取姿态数据的方式,并且有自己的设置和话题。

下面介绍了OptiTrack MoCap系统的设置。对于其他系统,请参阅供应商设置文档。

OptiTrack官网

以下步骤说明如何将OptiTrack系统的位置估计值输入PX4。假设MoCap系统已校准。

校准过程的教程

Motive MoCap软件的步骤

在无人机上粘贴3个以上的标记点。

将无人机的前进方向与系统X轴正方向对齐。

在Motive软件中定义刚体。给无人机一个不包含空格的名称。

启用姿态数据广播和VRPN数据流。

将向上轴设置为Z轴(默认值为Y轴向上)。

将姿态数据导入ROS

安装vrpn_client_ros软件包。

vrpn_client_ros github地址

可以通过运行以下命令获得每个刚体姿态的话题。

roslaunch vrpn_client_ros sample.launch server:=<mocap machine ip>

如果你的刚体命名为robot1,则会得到类似/vrpn_client_node/robot1/pose的话题。

重新映射姿态数据

MAVROS提供了一个插件,用于将在/mavros/vision_pose/pose上发布的姿态数据转换到PX4。假设MAVROS正在运行,您只需要将从MoCap的/vrpn_client_node/<rigid_body_name>/pose获得的姿态话题直接重新映射到/mavros/vision_pose/pose即可。

如果您已经如上所述配置了EKF2参数,现在设置PX4并融合MoCap数据。

将姿态数据转发到PX4

MAVROS提供了一个插件,可使用以下话题中继来自VIO或MoCap系统的视觉估计数据。

ROS话题名称MAVLink话题名称uORB话题名称
/mavros/vision_pose/poseVISION_POSITION_ESTIMATEvehicle_visual_odometry
/mavros/odometry/out (frame_id = odom, child_frame_id = base_link)ODOMETRY (frame_id = MAV_FRAME_LOCAL_FRD)vehicle_visual_odometry
/mavros/mocap/poseATT_POS_MOCAPvehicle_mocap_odometry
/mavros/odometry/out (frame_id = odom, child_frame_id = base_link)ODOMETRY (frame_id = MAV_FRAME_LOCAL_FRD)vehicle_mocap_odometry

如果使用EKF2,则仅支持vision话题。要将MoCap数据与EKF2一起使用,您必须重新映射从MoCap获得的姿态话题:

  • geometry_msgs/PoseStampedgeometry_msgs/PoseWithCovarianceStamped类型的MoCap ROS话题必须重新映射到/mavros/vision_pose/pose话题。geometry_msgs/PoseStamped话题最常见,因为MoCap通常与数据没有相关的协变量。
  • 如果您通过nav_msgs/OdometryROS话题获取数据,则需要将其重新映射到/mavros/odometry/out,确保相应地更新frame_idchild_frame_id
  • 里程计框架frame_id=odomchild_frame_id=base_link可以通过更新mavros/slaunch/px4_config.yaml文件来更改。然而,当前版本的mavros(1.3.0)需要能够使用tf树来找到从frame_id到硬编码框架odom_ned的转换。这同样适用于child_frame_id,它需要在tf树中连接到硬编码框架base_link_frd。如果您使用的是mavros 1.2.0,并且没有更新文件mavros/slaunch/px4_config.yaml,那么您可以安全地使用里程计框架frame_id=odomchild_frame_id=base_link而不用担心。
  • 请注意,如果您使用child_frame_id=base_link将里程计数据发送到PX4,则需要确保nav_msgs/odometry话题的twist部分以机体坐标系表示,而不是以惯性坐标系表示!

PX4和ROS的参考坐标系

ROS和PX4使用的机体坐标系和世界坐标系是不同的。

坐标系PX4ROS
机体FRD(X轴向前,Y轴向右,Z轴向下)FRD(X轴向前,Y轴向右,Z轴向下),通常命名为base_link
世界FRD或NED(X轴向北、Y轴向东、Z轴向下)FRD或NED(X轴向北、Y轴向东、Z轴向下),命名为odom或map

两个坐标系如下图所示(左侧为FRD,右侧为FLU)。

在这里插入图片描述

使用EKF2,当使用外部航向估计时,磁北可以被忽略,或者可以计算和补偿到磁北的航向偏移。根据您的选择,偏航角是相对于磁北或局部X轴给出的。

使用MAVROS时此操作非常简单。ROS使用ENU坐标系,因此必须在ENU中提供位置反馈。如果你有Optitrack系统,你可以使用mocap_optitrack节点,该节点可以在ENU中的ROS话题上流式传输对象姿态。通过重新映射,您可以直接在mocap_pose_estimate上发布它,而无需任何转换,MAVROS将负责NED转换。

MAVROS里程计插件使处理坐标系变得简单。它使用ROS的tf包。您的外部姿态系统可能使用与PX4完全不同的坐标系。外部姿态估计的机体坐标系可能取决于如何在MOCAP软件中设置机体坐标系,或者如何在无人机上安装VIO传感器。MAVROS里程计插件需要知道外部姿态的子坐标系相对于MAVROS已知的FRD或FLU机体坐标系的方向。因此,您必须将外部姿态的机体坐标系添加到tf树中。这可以通过在ROS启动文件中包含以下行的代码来完成。

  <node pkg="tf" type="static_transform_publisher" name="tf_baseLink_externalPoseChildFrame"
        args="0 0 0 <yaw> <pitch> <roll> base_link <external_pose_child_frame> 1000"/>

确保更改偏航、俯仰和滚转的值,使其将外部姿态的机体坐标系正确地附加到base_linkbase_link_frd。请查看tf包以获得有关如何指定坐标系之间转换的进一步帮助。您可以使用rviz检查是否正确连接了坐标系。external_pose_child_frame的名称必须与nav_msgs/odometry话题的child_frame_id匹配。这同样适用于外部姿态的参考系。您必须将外部姿态的参考坐标系作为子坐标系附加到odomodom_frd坐标系。因此,相应地调整以下代码行。

  <node pkg="tf" type="static_transform_publisher" name="tf_odom_externalPoseParentFrame"
        args="0 0 0 <yaw> <pitch> <roll> odom <external_pose_parent_frame> 1000"/>

如果参考系的Z轴指向上方,则可以将其附加到odom坐标系,而无需任何旋转(偏航=0、俯仰=0、滚转=0)。external_pose_rent_frame的名称必须与里程计话题的frame_id匹配。

飞行测试

下面介绍了如何为MoCap和VIO系统进行设置。

请务必在首次飞行前进行以下检查:

  • 将PX4参数MAV_ODOM_LP设置为1。PX4随后将接收到的外部姿态作为MAVLink话题流式传输回地面站。
  • 您可以使用QGroundControl地面站的MAVLink Inspector功能检查这些MAVLink话题。转动无人机,直到ODOMETRY话题的四元数非常接近单位四元数(w=1,x=y=z=0)。
  • 这时机体坐标系与外部姿态系统的参考坐标系对齐。如果在不滚转或俯仰车辆的情况下无法使四元数接近单位四元数,则坐标系可能仍有俯仰或滚转偏移。如果是这种情况,请不要继续,并再次检查坐标系。
  • 一旦对齐,您可以从地面上拾起无人机,您应该会看到位置的Z坐标减小。向前移动车辆,应增加位置的X坐标。将车辆向右移动时,应增加Y坐标。如果还从外部姿态系统发送线速度数据,则还应检查线速度是否在FRD机体参考系中表示。
  • 将PX4参数MAV_ODOM_LP设置回0。PX4将停止MAVLink话题流传输。

如果这些步骤都执行完毕,你可以进行你的飞行测试。

将无人机放在地面上,开始MoCap的数据流传输。油门给到最低,切换到位置模式。如果一切正常,地面站的位置模式处应该为绿色,绿色表示位置反馈可用,位置控制已激活。

将油门放在中间死区处。在该处无人机将保持其高度,升高操纵杆会增加高度,而降低操纵杆会降低高度。在X轴和Y轴上,右操纵杆也是如此。

增加油门的值,无人机就会起飞,然后把它油门放在中间死区处,检查它是否能够保持其位置。

如果无人机能保持其位置,则可以通过offboard模式进行飞行测试。


参考资料:

Using Vision or Motion Capture Systems for Position Estimation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1818923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Three.js】知识梳理二十二:相机视角的平滑过渡与点击模型视角切换

在 Three.js 中&#xff0c;实现相机视角的平滑过渡和点击模型切换到查看模型视角是一个常见且有用的功能。这种效果不仅能提升用户体验&#xff0c;还能为场景互动添加更多的动态元素。本文将详细介绍如何在 Three.js 中实现这一功能。 1. 基本设置 首先&#xff0c;我们需要…

镜像拉取失败:[ERROR] Failed to pull docker image

问题描述 执行 bash docker/scripts/dev_start.sh 命令提示错误&#xff1a; permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post “http://%2Fvar%2Frun%2Fdocker.sock/v1.45/images/create?fromImageregistry.b…

DBeaverUE Mac版:数据库管理新纪元,一键掌控所有数据

DBeaverUE for Mac是一款卓越的数据库管理软件&#xff0c;专为Mac用户设计&#xff0c;提供了一套高效、稳定且全面的数据库解决方案。以下是关于这款插件的详细介绍&#xff1a; 1. 强大的数据库支持 DBeaverUE for Mac支持多种数据库系统&#xff0c;包括但不限于MySQL、Po…

警务反诈RPA的用途:提高反诈骗工作效率,保护公众财产安全

互联网时代&#xff0c;电信诈骗手段不断翻新&#xff0c;作案地域广&#xff0c;打击难度大&#xff0c;反诈工作迎来巨大的挑战。为了提升办案效率&#xff0c;精准打击犯罪&#xff0c;以科技赋能反诈工作、构建反诈新格局迫在眉睫。而RPA机器人由于能够快速、准确地处理大量…

使用大模型进行时间序列预测

今天想聊聊这周一篇关于使用语言模型进行时间序列预测的工作&#xff0c;这个工作的主要亮点有四个: 首先提出的Chronos框架将时间序列通过缩放和量化转换为token序列&#xff0c;从而可以直接使用语言模型架构(如T5, GPT-2等)来建模时间序列&#xff0c;不需要对模型架构做任…

早知 121私人导航升级新版本, 第一次使用原生dialog标签。

早知121项目介绍说明 早知121 - 一个快速创建私人导航网站。 用途&#xff1a; 创建个人的工作导航&#xff0c;收集常用网址&#xff0c;可贡献给同事。创建个人垂直领域导航 优点&#xff1a; - 不需懂技术&#xff0c;不用维护服务器&#xff0c;维护私人导航收藏站。 网…

全域推广和标准推广哪个更好。谁更容易获客?

随着全域概念的兴起&#xff0c;全域推广逐渐走进人们视野&#xff0c;并成为新的互联网热词。在此背景下&#xff0c;与全域推广相关的话题&#xff0c;如全域推广是什么及全域推广和标准推广的区别等成为了许多创业者讨论和搜索的对象。 所谓的全域推广&#xff0c;简单来说…

redis 一些笔记1

redis 一、redis事务二、管道2.1 事务与管道的区别 三、主从复制3.13.2 权限细节3.3 基本操作命令3.4 常用3.4.1 一主几从3.4.2 薪火相传3.4.3 反客为主 3.5 步骤3.6 缺点 一、redis事务 放在一个队列里&#xff0c;依次执行&#xff0c;并不保证一致性。与mysql事务不同。 命…

酒店安全管理新趋势:远程可燃气体报警器的应用与校准维护

随着酒店行业的快速发展和人们对安全问题的日益关注&#xff0c;酒店安全管理已成为业界的重要议题。 近年来&#xff0c;远程可燃气体报警器作为一种先进的安全技术&#xff0c;逐渐在酒店行业中得到广泛应用&#xff0c;为酒店的安全管理提供了强有力的保障。 一、酒店安全新…

element 树组件 tree 横向纵向滚动条

Html <el-cardshadow"hover"class"solo flex-2"style"height: calc(100vh - 1.6rem); border: 1px solid #ebeef5"><div slot"header" class"clearfix"><span>问题分类</span></div><div …

千万级流量冲击下,如何保证极致性能

1 简要介绍 随着互联网的快速发展&#xff0c;网络应用的流量规模不断攀升&#xff0c;特别是在电商大促、明星直播、重大赛事、头条热搜等热点事件中&#xff0c;秒级100w请求成为了常态。在这样的流量冲击下&#xff0c;如何确保系统稳定、高效地处理每一个请求&#xff0c;为…

ip地址公和内有什么区别

在数字化世界中&#xff0c;IP地址扮演着至关重要的角色。它不仅是网络设备的身份标识&#xff0c;更是信息传输的桥梁。然而&#xff0c;并非所有IP地址都拥有相同的属性和功能。公有IP地址和私有IP地址&#xff0c;作为IP地址的两大类别&#xff0c;它们存在着显著的差异。虎…

【网络编程】基于TCP的服务器端/客户端

TCP是Transmission Control Protocol(传输控制协议)简写。因为TCP套接字是面向连接的&#xff0c;因此又称为基于流的套接字。 把协议分为多个层次&#xff0c;设计更容易&#xff0c;通过标准化操作设计开放式系统 网络层介绍 链路层 链路层是物理连接领域标准化的结果&…

车牌号识别(低级版)

import cv2 from matplotlib import pyplot as plt import os import numpy as np from paddleocr import PaddleOCR, draw_ocr from PIL import Image, ImageDraw, ImageFont# 利用paddelOCR进行文字扫描&#xff0c;并输出结果 def text_scan(img_path):ocr PaddleOCR(use_a…

自养号测评避坑指南

朋友们&#xff0c;今天来聊一聊关于自养号测评的一些重要知识点——自养号测评避坑指南。 在跨境电商领域中&#xff0c;自养号测评是每个卖家必需要会的技术。它能帮助商家提升店铺的权重和产品排名&#xff0c;从而带来曝光率和销售量。 但这个过程里也有不少坑&#xff0…

失眠焦虑的解脱之道:找回内心的平静

&#x1f343; 在这个快节奏的时代&#xff0c;失眠与焦虑似乎成了许多人的隐形敌人。每当夜幕降临&#xff0c;它们便悄悄潜入心底&#xff0c;扰乱我们的思绪&#xff0c;让宁静的夜晚变得无比漫长。然而&#xff0c;生活总有办法让我们找回内心的平静&#xff0c;只需稍作调…

OLED柔性屏的显示效果如何

OLED柔性屏的显示效果非常出色&#xff0c;具有多方面的优势。以下是关于OLED柔性屏显示效果的详细分析&#xff1a; 色彩表现&#xff1a;OLED柔性屏的每个像素都可以独立发光&#xff0c;因此色彩准确性极高。黑色呈现得非常深邃&#xff0c;而亮部则展现出鲜明而生动的细节。…

2024网络安全学习路线 非常详细 推荐学习

关键词&#xff1a;网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xff0c;有些人会倒在学习 linux 系统及命令的路上&#…

【云原生】Kubernetes----Rancher助力Kubernetes监控

目录 引言 一、为什么需要监控K8s集群&#xff1f; 二、Rancher监控K8s集群的优势 三、Rancher和k8s的区别 四、Rancher 安装及配置 &#xff08;一&#xff09;安装rancher 1.下载镜像 2.运行容器 3.登录Rancher平台 4.添加集群 5.查看集群 6.Rancher 部署监控系统…

私域引流宝PHP源码 以及搭建教程

私域引流宝PHP源码 以及搭建教程