PX4中文维基——光流部分

本文介绍如何利用光流传感器和PX4Flow模块实现无人机的精准定位与导航。涉及的技术包括EKF2、LPE及INAV等估计算法,并详细说明了硬件配置与参数调整方法。

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

觉得需要用到的内容复制在下面

光流

官网英文原文地址:http://dev.px4.io/optical-flow-outdoors.html

Optical Flow uses a downward facing camera and a downward facing distance sensor for position estimation. Optical Flow based navigation is supported by all three estimators: EKF2, LPE and INAV (see below).

 

 

设置

As mentioned above, an Optical Flow setup requires a downward facing camera which publishes to the OPTICAL_FLOW_RAD topic and a distance sensor (preferably a LiDAR) publishing messages to the DISTANCE_SENSOR topic.

 

 

硬件

PX4Flow必须指向地面,可以使用Pixhawk上的I2C接口进行连接。为了使PX4Flow获得最好的性能,确保将其放置在一个好的位置,同时不要暴露在强烈震动环境下。(最好是将其放置在四轴飞行器的底部)

 

注意: PX4FLOW放置的默认的方位是其声呐侧(光流上的+Y)指向飞行器的+X(前面)。如果不是,则需要相应的设置SENS_FLOW_ROT

 

Local Position Estimator (LPE)

LPE是一种基于扩展卡尔曼滤波器EKF的位置与速度估计器。LPE使用了惯性导航系统并且与INAV估计器有着类似的功能,但是它能够基于状态协方差动态地计算卡尔曼增益。LPE还可以检测故障,这个功能将使类似于声呐这种能够通过软件界面返回无效测量值的传感器更好的发挥作用。

P.S.如果用LPE estimator不需要LIDAR设备(因为PX4FLOW有声呐,但是LIDAR可以improve performance)

LPE is currently recommended for new users,as it has the most testing and is the most robust.(之前在官网上看到的,但是现在找不到了)

 

参数

当传感器插入时,LPE会自动融合LIDAR和光流测量的数据。

LPE_FLOW_OFF_Z - 这是光流相机距飞行器重心的偏移。该值向下为正,默认为0。在绝大多数正常安装的情况下,该值可以保持为0,因为z轴上的偏移微不足道。

LPE_FLW_XY - 光流的标准差,单位米。

LPW_FLW_QMIN - 可接受测量的光流质量最小值。

LPE_SNR_Z -声呐的标准差,单位米。

LPE_SNR_OFF_Z - 声呐传感器距飞行器重心的偏移。

LPE_LDR_Z - 激光雷达Lidar的标准差,单位米。

LPE_LDR_Z_OFF -Lidar距飞行器重心的偏移。

LPE_GPS_ON - 如果参数LPE_GPS_ON设置为1,在没有GPS的情况下飞行器将无法飞行。必须禁用此项或者等待GPS获得高度信息并将位置初始化。这是为了当GPS可用时由GPS获得的高度信息优先级高于气压计获得的高度信息。

注意:在没有GPS的情况下,必须将参数LPE_GPS_ON置0才能飞行

<think>我们正在处理的问题是如何在PX4自动驾驶仪系统中融合思岚S2激雷达数据。思岚S2是一款2D激雷达(LIDAR),通常用于SLAM(同步定位与地图构建)和避障等应用。在PX4中,我们可以通过多种方式融合激雷达数据,主要涉及定位(位置和姿态估计)和避障。 根据引用[1],PX4支持多种传感器融合,包括激雷达。引用[5]提到PX4支持等传感器的融合,但同样也支持其他距离传感器。虽然引用[5]主要讲,但PX4的估计器(如EKF2)支持多种传感器输入。 步骤概述: 1. **硬件连接**:将思岚S2激雷达通过串口(UART)或USB连接到飞控板(如Pixhawk系列)。确保硬件连接正确,并且PX4系统能够识别到设备。 2. **配置PX4**:在PX4中启用激雷达驱动,并设置正确的参数。 3. **数据融合**:配置EKF2(扩展卡尔曼滤波器)或其他估计器,以使用激雷达数据。 4. **应用场景**:根据需求,激雷达数据可以用于定位(如SLAM)或避障。 详细步骤: ### 1. 硬件连接 思岚S2通常通过串口(TTL)或USB与飞控通信。连接方式: - 如果使用串口,将S2的TX、RX、GND分别连接到飞控的一个空闲串口的RX、TX、GND(注意交叉连接)。 - 如果使用USB,则直接通过USB线连接(需要飞控有USB host功能,或者通过USB转串口模块)。 在PX4中,串口设备通常被映射为`/dev/ttySx`(x为串口号)。我们需要配置该串口用于激雷达。 ### 2. 配置PX4驱动和参数 PX4已经支持多种激雷达,但思岚S2可能需要自定义驱动。不过,思岚S2通常提供标准的二维激扫描数据(sensor_msgs/LaserScan),因此我们可以使用PX4的`ll40ls`驱动(该驱动支持Lightware SF系列,但思岚S2可能兼容,或者需要修改驱动)。 如果PX4没有直接支持思岚S2的驱动,我们可以: - 编写一个自定义驱动,将激雷达数据发布到`/sensor/lidar`主题。 - 或者,通过MAVLink消息将激雷达数据从机载计算机(如树莓派)发送到飞控。 这里假设我们使用机载计算机处理原始激雷达数据,然后将处理后的数据(如距离、位置等)发送给飞控。这样更常见,因为激雷达SLAM通常需要较强的计算能力。 如果直接连接飞控,则步骤: a. 确保PX4固件包含激雷达驱动(例如,在编译时启用`drivers__lidar`模块)。 b. 设置参数: - `SENS_EN_LL40LS`:设置为1,启用激雷达驱动。 - `SENS_LIDAR_CFG`:设置激雷达型号(如果思岚S2与某个支持的型号兼容,否则需要修改驱动代码)。 - 串口参数:设置对应串口的波特率(通常为115200)和模式。 ### 3. 数据融合 激雷达数据可以用于: - **测距**:提供相对于地面的高度(在固定高度飞行时)或障碍物距离。 - **SLAM定位**:提供位置和速度估计。 在PX4中,主要使用EKF2进行多传感器融合。我们可以将激雷达数据作为外部位置或速度信息输入到EKF2。 具体参数设置: - 如果激雷达提供高度信息(例如,在室内平坦地面),可以设置: - `EKF2_HGT_MODE`:设置为3(使用外部视觉高度)。 - 然后,将激雷达高度数据发布到`vehicle_visual_odometry`主题(或通过MAVLink消息发送)。 - 如果使用激雷达SLAM提供完整的位置和姿态(例如,通过SLAM算法得到的位置和姿态),则可以: - 设置`EKF2_AID_MASK`:启用视觉位置估计(第3位)或视觉姿态估计(第4位)等。 - 将SLAM输出的位置和姿态信息通过`vehicle_visual_odometry`主题发布给EKF2。 如何发布数据? - 如果使用机载计算机(运行ROS),可以通过`mavros`节点的`vision_pose`或`odometry`消息将数据发送给飞控。 - 在飞控内部,如果驱动直接提供距离数据,则可以通过`distance_sensor`消息发布,用于高度估计或避障。 ### 4. 避障应用 除了定位,激雷达还可以用于避障。PX4支持简单的避障功能(例如,通过设置安全距离)。 - 设置参数`CP_DIST`(障碍物距离阈值)和`CP_GO_NO_DATA`(在没有数据时的行为)。 - 将激雷达数据作为距离传感器输入到避障模块。 总结: 1. 硬件连接:将思岚S2连接到飞控或机载计算机。 2. 驱动配置:确保PX4能够接收激雷达数据(直接驱动或通过MAVLink)。 3. 数据融合:配置EKF2使用激雷达数据(作为距离传感器或视觉里程计输入)。 4. 应用配置:根据需求(定位、避障)设置相应参数。 注意:由于思岚S2是2D激雷达,在三维空间中应用可能有限(例如,只能扫描一个平面)。因此,在无人机应用中,通常需要配合其他传感器(如IMU、高度计等)使用。 参考文献: [^1]: 数据融合与姿态解算 [^5]: PX4中文维基——部分 相关问题: 1. 如何为PX4编写自定义激雷达驱动? 2. 在PX4中,如何配置EKF2使用外部视觉里程计? 3. 如何使用思岚S2激雷达实现避障功能? 4. 在无人机上使用2D激雷达有哪些限制?如何克服?</think>### 如何在PX4中融合思岚S2激雷达数据 思岚S2激雷达(2D LIDAR)主要用于SLAM、避障和定位增强。在PX4自动驾驶仪中融合其数据需通过以下步骤实现: --- #### 1. **硬件连接与驱动配置** - **物理连接** 将思岚S2通过串口(UART)或USB连接到Pixhawk飞控(如`/dev/ttyS1`)。 - **驱动启用** 修改PX4固件配置(`default.px4board`): ```cmake # 启用激雷达驱动 CONFIG_DRIVERS_DISTANCE_SENSOR=y CONFIG_DRIVERS_RPLIDAR=y ``` 编译后烧录固件。通过QGroundControl验证设备是否被识别(**传感器设置 > 激雷达**)。 --- #### 2. **数据预处理** - **坐标系对齐** 通过参数校准激雷达与飞控IMU的相对位姿: ``` CAL_LIDAR0_ROT:设置安装方向(如0°朝前) CAL_LIDAR0_POS_X/Y/Z:定义安装偏移量 ``` - **数据格式转换** 将原始点云转换为PX4兼容的`distance_sensor`或`vehicle_visual_odometry`消息: ```cpp // 示例:发布距离数据 distance_sensor_s lidar_data{}; lidar_data.current_distance = processed_range; // 单位:米 lidar_data.timestamp = hrt_absolute_time(); orb_publish(ORB_ID(distance_sensor), lidar_pub, &lidar_data); ``` --- #### 3. **融合到姿态估计系统** ##### 方案1:EKF2扩展卡尔曼滤波器(推荐) - **配置参数**: ``` EKF2_AID_MASK = 8 # 启用视觉位置融合 EKF2_HGT_MODE = 3 # 使用视觉高度 ``` - **数据输入**: - **避障**:将处理后的距离数据发布到`distance_sensor`主题,EKF2自动融合。 - **SLAM定位**:通过MAVLink/ROS将SLAM输出的位姿发送到`vehicle_visual_odometry`主题(需运行`mavros`节点)。 ##### 方案2:LPE本地位置估计器(轻量级) ``` LPE_FUSION = 16 # 启用视觉位置融合 SYS_MC_EST_GROUP = 2 # 切换为LPE估计器 ``` --- #### 4. **避障功能实现** - **激活避障模块**: ``` COM_OBS_AVOID = 1 # 启用避障 CP_DIST = 1.5 # 设置安全距离(米) ``` - **数据处理**: 激雷达 → 实时点云处理(如VoxelGrid滤波) → 生成障碍物距离 → 发布到`obstacle_distance`主题 → PX4避障模块动态调整路径。 --- #### 5. **验证与调试** - **日志分析**: 使用`ulog`查看`ekf2_innovations`字段,验证激雷达数据融合残差。 - **实机测试**: 在Gazebo仿真中注入激雷达数据,或低速户外测试避障响应。 - **关键参数监控**: ``` estimator_status.vision_position_reliability obstacle_distance.min_distance ``` --- ### 注意事项 1. **计算负载**:实时SLAM需机载计算机(如Jetson Nano),通过MAVLink与PX4通信[^3]。 2. **2D雷达限制**:思岚S2仅扫描水平面,建议配合IMU/传感器补充垂直方向数据[^5]。 3. **时间同步**:使用`hrt_absolute_time()`确保传感器数据时间戳同步。 > **实践案例**:开源项目**PX4 Avoidance**已支持思岚雷达,提供避障和SLAM集成模板[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值