PX4 vision_to_mavros定位

本文档详细介绍了如何配置PX4飞控系统,利用Intel RealSense T265深度相机进行室内无人机的自主飞行。内容包括安装驱动、启动脚本、坐标系转换、EKF姿态解算参数调整,以及解决VIO信息融合中的问题。特别提到了使用vision_to_mavros功能包,通过调整EKF2_HGT_MODE参数实现视觉高度估计,并给出了针对T265速度信息错误的临时解决方案。此外,还讨论了与其他传感器如激光测高模块的集成,以及与Ardupilot固件的vision_to_mavros代码的比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PX4官方给出以下做法从而使用intel realsense t265深度相机作为视觉估计的硬件选择。

在这里我使用pixhawk 4和realsense t265以及Jetson TX2机载计算机以及benewake tfmini激光测高模块作为室内自主飞行无人机的硬件。

采用Ardupilot官方推荐的vision_to_mavros功能包配置

无人机的双目相机的摄像头朝向正前方,可以将slam融合的高度位姿信息作为EKF2的高度估计信息,具体修改EKF2_HGT_MODE参数为Vision。

我参考以下链接从而配置飞控的相关参数:

Visual Intertial Odometry (VIO) | PX4 User Guide

rviz查看轨迹相关参数:

thien94/vision_to_mavros

rviz可视化坐标具体方法如下:

  1. On host computer, open up rviz: rosrun rviz rviz.
  2. Add [Path](http://docs.ros.org/api/nav_msgs/html/msg/Path.html), topic name: /body_frame/path to rviz.
  3. Change Fixed Frame to target_frame_id, in the case of Realsense T265: camera_odom_frame.

关于EKF姿态解算的部分可以参考PX4官方的PX4-ECL仓库:

PX4/PX4-ECL

该仓库的说明文件如下:

Using the ECL EKF | PX4 User Guide

关于T265坐标转换相关问题:

*把T265定点过程中的坐标变换彻底弄清楚(包含vision_to_mavros代码分析)px4_command T265定点过程的坐标系转换也理清_诗筱涵的博客-CSDN博客

注意:

  1. 需要安装realsense的驱动(realsense-ros暂时不需要),这里推荐采用二进制包的方式安装,运行t265_all_nodes.launch脚本之前需要先执行驱动中的一个脚本来创建udev设备驱动规则,也可参考上文中的链接配置。总之,不配置设备驱动规则的话很可能会导致调用设备的时候因为权限等问题报错。

  2. vision_to_mavros一定注意realsense设备的安装方向,默认安装方向是竖直向下的,如果需要更改安装方向,一定要在launch文件中修改参数,确保坐标系方向不会错。

  3. 运行t265_all_nodes.launch脚本会同时启动mavros脚本,不需要单独启动mavros脚本了。

  4. 启动脚本默认采用USB连接飞控串口,如使用TX2的串口连接飞控的时候,一定要手动指定fcu_url为/dev/ttyTHS2:921600。
    举例:

    roslaunch vision_to_mavros t265_all_nodes.launch fcu_url:="/dev/ttyTHS2:921600"
    
  5. 该脚本的目的在于:替代传统的通过GPS或光流的方式获得融合EKF姿态数据的方法。飞行模式需要为position/offboard/mission模式下才能使用T265输出的位姿信息,设置错误会导致PreArm检查失败无法起飞。

  6. 默认的apm.launch需要修改为px4.launch

已知问题:

  1. 使用PX4官方说明中的Auterion/VIO代码会导致odometry消息无法发布
    地面站上面看不到对应的mavlink消息

    错误issue如下:

    No Position data from ODOMETRY. · Issue #15627 · PX4/PX4-Autopilot

    Odometry not showing up in PX4 when using Visual Interial Odometry (VIO)

    解决方案:
    降级PX4固件版本到1.10之后重新运行代码即可(不要降级)

    该问题已有更好的解决办法:使用Ardupilot固件提供的vision_to_mavros代码,launch启动文件中的px4.launch修改为apm.launch

    下载链接如下:

    thien94/vision_to_mavros

  2. t265模块速度信息错误

    错误发生于无人机大角度机动飞行时,或环境光线不足导致特征点跟踪丢失时,终端会报错,信息如下

    WARNING [......] (tm-device.cpp:1289) SLAM_ERROR Speed
    

    问题原因:

    PX4 v1.10.1 EKF2 GPS and VIO issues · Issue #15014 · PX4/PX4-Autopilot

    SLAM Error Realsense T265 · Issue #1090 · IntelRealSense/realsense-ros

    T265 linear velocity to /mavros/vision_speed/speed_twist_cov · Issue #18 · thien94/vision_to_mavros

    解决方案:
    (临时办法)AID_MASK采用位置信息融合而不是速度信息融合,设置EKF2_AID_MASK为24
    添加ros节点融合飞控Imu信息:这里采用EKF滤波与数据融合的方法(有待进一步解决)

  3. T265 VIO信息与PX4Flow光流信息融合

    Ekf2 T265 and Px4flow fusion

    修改EKF2_AID_MASK参数即可

  4. 阿木实验室的VIO版本无人机使用了该vision_to_mavros模块,但是有几个代码参数发生了变化

<think>嗯,用户的问题是关于在PX4中使用MAVROS实现光流功能的教程。首先,我需要回忆一下PX4MAVROS的基本知识。PX4是一个开源的飞控系统,而MAVROSROS(机器人操作系统)中的一个包,用于与MAVLink协议兼容的飞控进行通信,比如PX4ArduPilot。用户提到的光流,通常是指利用摄像头或光流传感器来估计无人机的运动,特别是在没有GPS的情况下进行定位。 接下来,我需要确定用户的需求。他们可能正在尝试配置无人机使用光流传感器进行位置估计,可能在室内或GPS信号弱的环境中飞行。用户提到他们之前看到过关于vision_to_mavros的引用,但问题已经转向使用ArduPilot的解决方案。不过用户现在明确询问的是PX4MAVROS的组合,所以需要专注于PX4的环境配置。 首先,我应该检查安装MAVROS的步骤是否正确。根据引用[2],安装MAVROS需要安装特定的ROS包,比如ros-melodic-mavrosros-melodic-mavros-extras,同时还要安装geographiclib数据集。这些步骤是基础,必须正确完成才能确保MAVROSPX4的通信正常。 然后,配置光流传感器。光流传感器通常通过串口或I2C连接到飞控板,比如PX4支持的PX4Flow模块。用户需要确保硬件连接正确,并且在PX4的参数中启用光流。例如,设置SENS_FLOW_EN为1,并选择合适的位置估计源,例如EKF2,这可能涉及到设置EKF2_AID_MASK参数来启用视觉位置融合。 接下来,MAVROS需要配置正确的节点来订阅发布光流数据。可能需要创建一个自定义的launch文件,配置MAVROS连接到正确的设备(如串口或UDP),并设置消息转发,比如将光流数据从ROS话题转发到MAVLink消息。这里可能需要使用mavros的插件,比如mavros_extras中的optical_flow插件,或者通过发布mavros/px4flow/raw/send话题来发送光流数据。 测试部分很重要,用户需要检查MAVROS是否正确连接到PX4,查看参数是否设置正确,并通过QGroundControl或命令行工具验证光流数据是否被正确接收。可能需要使用rostopic echo来监听相关的话题,比如/mavros/px4flow/raw,确保数据流正常。 另外,用户可能需要配置EKF2以融合光流数据,这涉及到调整EKF的参数,比如EKF2_OF_QMIN(光流质量阈值)EKF2_HGT_MODE(高度估计模式)。这些参数的设置会影响光流数据在位置估计中的权重效果。 可能遇到的问题包括硬件连接错误、MAVROS节点配置不正确、参数设置遗漏或错误,以及EKF未能正确融合光流数据。需要指导用户逐步排查这些方面,例如检查串口连接、确认波特率设置、确保MAVROS的launch文件正确指向设备,以及通过nsh终端检查PX4的参数是否正确。 最后,用户可能需要了解如何在实际飞行中测试光流功能,包括在室内环境下进行悬停或低速飞行,观察位置估计的稳定性准确性。同时,提醒用户注意安全,确保在开放区域进行测试,避免碰撞。 总结来说,回答需要分步骤指导安装MAVROS、配置光流传感器硬件、设置PX4参数、配置MAVROS节点、测试通信数据流,以及调整EKF参数。同时,引用提供的文献中的安装步骤可能的问题解决方法,确保用户能够按照步骤操作并解决常见问题。</think>### PX4中使用MAVROS实现光流功能的步骤 #### 1. **基础环境配置** - **安装MAVROS**:根据引用[2],需安装ROS-Melodic版本的MAVROS及相关依赖: ```bash sudo apt install ros-melodic-mavros ros-melodic-mavros-extras wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh sudo bash install_geographiclib_datasets.sh ``` 确保地理坐标系数据集正确安装[^2]。 - **配置PX4固件**:编译支持光流的PX4固件(如使用PX4Flow传感器),需启用`optical_flow`驱动: ```bash make px4_fmu-v5_default ``` #### 2. **光流传感器硬件连接** - 将光流模块(如PX4Flow)通过I²C或串口连接到飞控板,并在QGroundControl中检查传感器是否被识别。 - 设置参数: ``` SENS_EN_PX4FLOW = 1 EKF2_AID_MASK = 1 # 启用视觉位置融合 ``` #### 3. **MAVROS节点配置** - 创建自定义launch文件(如`optical_flow.launch`),配置MAVROS与飞控的通信: ```xml <node pkg="mavros" type="mavros_node" name="mavros"> <param name="fcu_url" value="/dev/ttyACM0:921600" /> <!-- 根据实际设备修改 --> <param name="gcs_url" value="" /> </node> ``` #### 4. **光流数据转发** - 通过ROS话题将光流数据发送至MAVROS,例如使用`mavros/optical_flow/send`话题: ```python from mavros_msgs.msg import OpticalFlow pub = rospy.Publisher('/mavros/optical_flow/send', OpticalFlow, queue_size=10) # 填充光流数据并发布 ``` #### 5. **EKF参数调优** - 调整EKF2参数以融合光流数据: ``` EKF2_OF_QMIN = 50 # 光流质量阈值 EKF2_HGT_MODE = 3 # 使用视觉定位作为高度源 ``` #### 6. **验证与测试** - **检查MAVROS连接**: ```bash rostopic echo /mavros/state ``` 确保`connected`字段为`True`。 - **查看光流数据**: ```bash rostopic echo /mavros/px4flow/raw ``` 确认`quality``integrated_x/y`字段有效。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值