.. _sec_localization: 定位系统:让无人机知道”我在哪” ============================== **本节学习目标** - 理解定位系统在无人机中的作用,掌握”我在哪”这一核心问题的技术解决方案 - 掌握IMU、GPS、UWB、动作捕捉等定位硬件的工作原理与核心参数 - 学会根据应用场景选择合适的定位方案 - 在Gazebo中配置定位传感器并读取ROS话题数据 为什么需要定位系统? -------------------- 想象一下,你闭上眼睛在一个陌生的房间里走动——你很快就会撞到墙壁或家具。这是因为你失去了两种关键信息:\ **位置**\ (我在哪)和\ **姿态**\ (我朝向哪)。 无人机面临同样的问题。与地面机器人不同,无人机在三维空间中飞行,没有固定的参照物。如果不知道自己的位置和姿态,无人机就无法: - 保持稳定悬停(会漂移) - 按照规划路径飞行(会偏离) - 安全降落到指定地点(会坠毁) **人体类比**\ :定位系统相当于人的\ **前庭系统**\ 和\ **小脑**\ 。前庭系统感知头部的加速度和旋转,小脑整合这些信息来维持平衡。当你转圈后突然停下,会感到眩晕——这就是前庭系统暂时”校准失败”的结果。 定位系统需要回答的三个问题 ~~~~~~~~~~~~~~~~~~~~~~~~~~ +--------------+-------------------+---------------------------------------+--------------------+ | 问题 | 技术术语 | 数学表示 | 解决方案 | +==============+===================+=======================================+====================+ | 我在哪? | 位置(Position) | :math:`(x, y, z)` | GPS、UWB、视觉定位 | +--------------+-------------------+---------------------------------------+--------------------+ | 我朝向哪? | 姿态(Attitude) | :math:`(\phi, \theta, \psi)`\ (Roll, | IMU、磁力计 | | | | Pitch, Yaw) | | +--------------+-------------------+---------------------------------------+--------------------+ | 我在怎么动? | 速度(Velocity) | :math:`(v_x, v_y, v_z)` | IMU积分、光流 | +--------------+-------------------+---------------------------------------+--------------------+ .. **知识拓展**\ :姿态的三个角度 - **横滚角(Roll, :math:`\phi`\ )**\ :绕机体X轴旋转,控制无人机左右倾斜 - **俯仰角(Pitch, :math:`\theta`\ )**\ :绕机体Y轴旋转,控制无人机前后倾斜 - **偏航角(Yaw, :math:`\psi`\ )**\ :绕机体Z轴旋转,控制无人机航向 惯性测量单元(IMU):感知自身运动 --------------------------------- IMU(Inertial Measurement Unit,惯性测量单元)是无人机最基础、最重要的定位传感器。它不依赖外部信号,仅通过测量自身的加速度和角速度来推算位置和姿态。 IMU的组成 ~~~~~~~~~ 一个典型的IMU包含以下传感器: +--------------------+--------------------------------------+----------------------+----------------------+ | 传感器 | 测量物理量 | 单位 | 用途 | +====================+======================================+======================+======================+ | 三轴加速度计 | 线加速度 :math:`a_x, a_y, a_z` | :math:`\text{m/s}^2` | 测量重力和运动加速度 | | | | 或 :math:`g` | | +--------------------+--------------------------------------+----------------------+----------------------+ | 三轴陀螺仪 | 角速度 | :math:`°/\text{s}` | 测量旋转速率 | | | :math:`\omega_x, \omega_y, \omega_z` | 或 | | | | | :math:`\text{rad/s}` | | +--------------------+--------------------------------------+----------------------+----------------------+ | 三轴磁力计(可选) | 磁场强度 :math:`B_x, B_y, B_z` | :math:`\mu\text{T}` | 提供绝对航向参考 | +--------------------+--------------------------------------+----------------------+----------------------+ IMU的工作原理 ~~~~~~~~~~~~~ **加速度计**\ 利用MEMS(微机电系统)技术,通过测量微小质量块在加速时产生的位移来计算加速度。其核心原理基于牛顿第二定律: .. math:: F = ma 在静止状态下,加速度计测量的是重力加速度。当无人机运动时,测量值是重力加速度与运动加速度的叠加。 **陀螺仪**\ 基于科里奥利效应(Coriolis Effect)。当振动质量块在旋转参考系中运动时,会产生与旋转角速度成正比的科里奥利力: .. math:: F_c = 2m(\omega \times v) 其中 :math:`m` 是质量,\ :math:`\omega` 是角速度矢量,\ :math:`v` 是振动速度矢量。 从IMU数据到位置:积分过程 ~~~~~~~~~~~~~~~~~~~~~~~~~ IMU无法直接测量位置,需要通过积分运算: .. math:: \text{角速度} \xrightarrow{\int} \text{姿态} \xrightarrow{} \text{加速度(机体系→世界系)} \xrightarrow{\int} \text{速度} \xrightarrow{\int} \text{位置} 用数学公式表示: **姿态更新**\ (简化的欧拉角积分): .. math:: \begin{aligned} \phi(t) &= \phi(t-1) + \omega_x \cdot \Delta t \\ \theta(t) &= \theta(t-1) + \omega_y \cdot \Delta t \\ \psi(t) &= \psi(t-1) + \omega_z \cdot \Delta t \end{aligned} **速度更新**\ : .. math:: v(t) = v(t-1) + a \cdot \Delta t **位置更新**\ : .. math:: p(t) = p(t-1) + v \cdot \Delta t **警告**\ :积分漂移问题 由于传感器噪声和偏置误差的存在,每次积分都会累积误差。这就是著名的\ **积分漂移(Drift)**\ 问题。即使是高精度的IMU,纯惯性导航在几分钟后位置误差就可能达到数米甚至数十米。因此,IMU通常需要与GPS、视觉等外部传感器融合使用。 Pixhawk 6C的IMU配置 ~~~~~~~~~~~~~~~~~~~ Pixhawk 6C飞控板集成了冗余IMU设计,包含以下传感器: +-------------+-------+-------------------+----------------------------+---------------------------+ | IMU芯片 | 类型 | 加速度量程 | 陀螺仪量程 | 特点 | +=============+=======+===================+============================+===========================+ | ICM-42688-P | 6轴 | ±2/±4/±8/±16 | ±250/±500/±1000/±2000 °/s | 主IMU,高性能,低噪声 | | | | :math:`g` | | | +-------------+-------+-------------------+----------------------------+---------------------------+ | BMI055 | 6轴 | ±2/±4/±8/±16 | ±125/±250/±500/±1000/±2000 | 备份IMU,低噪声,冗余保障 | | | | :math:`g` | °/s | | +-------------+-------+-------------------+----------------------------+---------------------------+ **为什么需要双IMU?** 冗余设计提高了系统可靠性。当一个IMU出现故障或数据异常时,飞控可以自动切换到备份IMU,确保飞行安全。此外,Pixhawk 6C的IMU模块还配备了\ **温控加热电阻**\ 和\ **振动隔离系统**\ ,以减少温度漂移和机械振动对测量精度的影响。 IMU选型的核心参数 ~~~~~~~~~~~~~~~~~ +------------------+------------------------+-------------------------------------------------+------------------------------+ | 参数 | 含义 | 典型值范围 | 对无人机的影响 | +==================+========================+=================================================+==============================+ | 噪声密度(Noise | 传感器输出中的随机噪声 | 加速度计:100-400 μg/√Hz;陀螺仪:0.004-0.01 | 影响姿态估计的平滑度 | | Density) | | °/s/√Hz | | +------------------+------------------------+-------------------------------------------------+------------------------------+ | 零偏稳定性(Bias | 零输入时输出的漂移 | 加速度计:10-50 μg;陀螺仪:1-10 °/h | 影响长时间积分精度 | | Stability) | | | | +------------------+------------------------+-------------------------------------------------+------------------------------+ | 量程(Full Scale | 可测量的最大值 | 加速度计:±2g\ :sub:`±16g;陀螺仪:±250`\ ±2000 | 需覆盖无人机的机动范围 | | Range) | | °/s | | +------------------+------------------------+-------------------------------------------------+------------------------------+ | 采样率(Sample | 每秒输出数据的次数 | 100Hz-8kHz | 影响控制响应速度 | | Rate) | | | | +------------------+------------------------+-------------------------------------------------+------------------------------+ .. **选型建议**\ :对于消费级无人机,±8g加速度量程和±2000°/s陀螺仪量程是常见配置,可以覆盖大多数飞行机动。 全球卫星导航系统(GNSS):室外绝对定位 -------------------------------------- GNSS(Global Navigation Satellite System,全球卫星导航系统)是室外无人机获取绝对位置的主要手段。常见的GNSS系统包括: ============== ============= ======== ============ 系统名称 所属国家/地区 卫星数量 覆盖范围 ============== ============= ======== ============ GPS 美国 31颗 全球 GLONASS 俄罗斯 24颗 全球 Galileo 欧盟 30颗 全球 北斗(BeiDou) 中国 55颗 全球(三代) ============== ============= ======== ============ GNSS定位原理 ~~~~~~~~~~~~ GNSS定位基于\ **到达时间测量(Time of Arrival, ToA)**\ 原理。接收机同时接收多颗卫星的信号,通过测量信号传播时间计算与每颗卫星的距离(伪距),再利用三边测量法确定位置。 **伪距计算公式**\ : .. math:: \rho_i = c \cdot (t_r - t_s^i) = r_i + c \cdot \delta t_r + \epsilon_i 其中: - :math:`\rho_i` 是到第 :math:`i` 颗卫星的伪距 - :math:`c` 是光速(约 :math:`3 \times 10^8` m/s) - :math:`t_r` 是接收机时间,\ :math:`t_s^i` 是卫星发射时间 - :math:`r_i` 是真实距离 - :math:`\delta t_r` 是接收机钟差 - :math:`\epsilon_i` 是测量误差 由于存在接收机钟差这个未知数,定位至少需要4颗卫星:3个位置坐标 + 1个时间偏差。 GPS定位精度等级 ~~~~~~~~~~~~~~~ =============== ======== ======== ================ 定位方式 水平精度 垂直精度 典型应用 =============== ======== ======== ================ 单点定位(SPP) 1-5 m 2-10 m 消费级无人机导航 差分GPS(DGPS) 0.5-2 m 1-3 m 农业植保无人机 RTK GPS 1-3 cm 2-5 cm 测绘、精准农业 PPK GPS 1-3 cm 2-5 cm 航测、后处理 =============== ======== ======== ================ RTK GPS:厘米级定位 ~~~~~~~~~~~~~~~~~~~ RTK(Real-Time Kinematic,实时动态差分)是目前无人机获取厘米级定位精度的主流方案。 **RTK工作原理**\ : 1. **基站**\ :架设在已知精确坐标的位置,持续接收卫星信号 2. **流动站**\ :安装在无人机上的GPS接收机 3. **数据链**\ :基站通过电台或网络将校正数据实时发送给流动站 4. **差分解算**\ :流动站利用校正数据消除大气延迟、卫星轨道误差等共性误差 **RTK的两种工作模式**\ : =============== ====== ======== ====== 模式 精度 解算时间 可靠性 =============== ====== ======== ====== 浮点解(Float) 分米级 即时 较低 固定解(Fixed) 厘米级 10-60秒 高 =============== ====== ======== ====== .. **应用场景**\ :RTK GPS适用于测绘航拍、精准农业喷洒、电力巡线等需要高精度定位的场景。但其缺点是需要额外的基站设备,增加了系统复杂度和成本。 Pixhawk 6C常用GPS模块 ~~~~~~~~~~~~~~~~~~~~~ +---------+---------------+--------------------------+---------------+-----------+ | 模块 | GNSS芯片 | 支持系统 | 定位精度 | 更新率 | +=========+===============+==========================+===============+===========+ | u-blox | M8N | GPS/GLONASS/Galileo/北斗 | 2.5m CEP | 10Hz | | NEO-M8N | | | | | +---------+---------------+--------------------------+---------------+-----------+ | u-blox | F9P | GPS/GLONASS/Galileo/北斗 | 1cm + | 20Hz | | ZED-F9P | | | 1ppm(RTK) | | +---------+---------------+--------------------------+---------------+-----------+ | HERE3 | M8P | GPS/GLONASS | 2.5m / | 8Hz | | | | | 1cm(RTK) | | +---------+---------------+--------------------------+---------------+-----------+ 室内定位方案 ------------ GPS信号在室内环境中会被建筑物遮挡和反射,无法提供可靠的定位。室内无人机需要采用其他定位方案。 UWB超宽带定位 ~~~~~~~~~~~~~ UWB(Ultra-Wideband,超宽带)是一种基于脉冲信号的无线定位技术,特别适合室内环境。 **UWB定位原理**\ : UWB系统由固定的\ **锚点(Anchor)**\ 和移动的\ **标签(Tag)**\ 组成。标签发射超短脉冲信号,锚点接收后通过以下方法计算位置: 1. **双边测距(TWR, Two-Way Ranging)**\ :标签与锚点之间进行信号往返,测量飞行时间 2. **到达时间差(TDoA, Time Difference of Arrival)**\ :多个锚点同时接收信号,利用时间差定位 **TWR测距公式**\ : .. math:: d = \frac{c \cdot (T_{round} - T_{reply})}{2} 其中 :math:`T_{round}` 是往返时间,\ :math:`T_{reply}` 是应答处理延迟。 **UWB系统特点**\ : ========== ========================= 特点 说明 ========== ========================= 定位精度 10-30 cm(典型值) 更新率 10-100 Hz 覆盖范围 单锚点10-50m,系统可扩展 抗干扰能力 强,不受WiFi、蓝牙干扰 部署要求 需要至少4个锚点实现3D定位 ========== ========================= **常用UWB模块**\ : ================== ======== ======== ============================ 产品 芯片方案 定位精度 特点 ================== ======== ======== ============================ Nooploop LinkTrack DW1000 ±10cm 支持伪GPS输出,可直接替代GPS Pozyx DW1000 ±10cm 开源友好,ROS支持良好 Decawave DWM1001 DW1000 ±10cm 开发套件丰富,性价比高 ================== ======== ======== ============================ 动作捕捉系统(Motion Capture) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 动作捕捉系统是实验室环境下精度最高的定位方案,常用于无人机算法研究和室内集群飞行。 **工作原理**\ : 1. 在被跟踪物体上安装反光标记球(Marker) 2. 多台红外相机同时拍摄标记球 3. 通过多视角几何计算标记球的三维坐标 4. 根据标记球的空间配置识别和跟踪刚体 **主流动作捕捉系统**\ : +-----------+---------------+----------------------------------+-----------+---------------+ | 系统 | 定位精度 | 覆盖范围 | 更新率 | 参考价格 | +===========+===============+==================================+===========+===============+ | OptiTrack | < 0.3mm | 可扩展至 | 120-360Hz | $15,000+ | | | | :math:`10m \times 10m \times 5m` | | | +-----------+---------------+----------------------------------+-----------+---------------+ | Vicon | < 0.5mm | 可扩展 | 100-330Hz | $50,000+ | +-----------+---------------+----------------------------------+-----------+---------------+ | NOKOV | < 0.5mm | 可扩展 | 100-340Hz | $20,000+ | +-----------+---------------+----------------------------------+-----------+---------------+ .. **为什么研究人员喜欢使用动作捕捉?** - **亚毫米级精度**\ :可以作为其他定位系统的”真值”(Ground Truth) - **高更新率**\ :适合高速运动跟踪 - **低延迟**\ :通常 < 20ms,适合实时控制 - **多目标跟踪**\ :可同时跟踪数十个无人机 定位方案对比 ~~~~~~~~~~~~ =========== ======= ========= ============== ==== ====== 方案 精度 更新率 环境 成本 复杂度 =========== ======= ========= ============== ==== ====== GPS(单点) 1-5m 1-10Hz 室外 低 低 RTK GPS 1-3cm 10-20Hz 室外 中 中 UWB 10-30cm 10-100Hz 室内 中 中 动作捕捉 < 1mm 100-360Hz 室内(实验室) 高 高 视觉SLAM 1-10cm 10-30Hz 室内外 低 高 =========== ======= ========= ============== ==== ====== 数据接口与ROS话题 ----------------- 定位传感器通过特定的接口与飞控或机载计算机通信。 硬件接口类型 ~~~~~~~~~~~~ ======== ============ =============== 传感器 常用接口 数据协议 ======== ============ =============== IMU SPI / I2C 寄存器读取 GPS UART(串口) NMEA-0183 / UBX UWB UART / USB 自定义协议 动作捕捉 以太网 VRPN / NatNet ======== ============ =============== ROS中的定位相关话题 ~~~~~~~~~~~~~~~~~~~ 在Prometheus仿真环境中,定位数据通过以下ROS话题发布: +-------------------------------------------+--------------------------------+-------------------------------------------+-----------+ | 话题名称 | 消息类型 | 内容 | 频率 | +===========================================+================================+===========================================+===========+ | ``/mavros/imu/data`` | ``sensor_msgs/Imu`` | IMU原始数据(加速度、角速度、姿态四元数) | 50-200Hz | +-------------------------------------------+--------------------------------+-------------------------------------------+-----------+ | ``/mavros/global_position/global`` | ``sensor_msgs/NavSatFix`` | GPS全球坐标(经度、纬度、高度) | 1-10Hz | +-------------------------------------------+--------------------------------+-------------------------------------------+-----------+ | ``/mavros/local_position/pose`` | ``geometry_msgs/PoseStamped`` | 本地位置和姿态 | 30-50Hz | +-------------------------------------------+--------------------------------+-------------------------------------------+-----------+ | ``/mavros/local_position/velocity_local`` | ``geometry_msgs/TwistStamped`` | 本地速度 | 30-50Hz | +-------------------------------------------+--------------------------------+-------------------------------------------+-----------+ IMU消息结构解析 ~~~~~~~~~~~~~~~ ``sensor_msgs/Imu`` 消息包含以下字段: :: std_msgs/Header header # 时间戳和坐标系 geometry_msgs/Quaternion orientation # 姿态四元数 (x, y, z, w) float64[9] orientation_covariance # 姿态协方差 geometry_msgs/Vector3 angular_velocity # 角速度 (rad/s) float64[9] angular_velocity_covariance # 角速度协方差 geometry_msgs/Vector3 linear_acceleration # 线加速度 (m/s²) float64[9] linear_acceleration_covariance # 加速度协方差 **四元数到欧拉角的转换公式**\ : .. math:: \begin{aligned} \phi &= \arctan2(2(qw \cdot qx + qy \cdot qz), 1 - 2(qx^2 + qy^2)) \\ \theta &= \arcsin(2(qw \cdot qy - qz \cdot qx)) \\ \psi &= \arctan2(2(qw \cdot qz + qx \cdot qy), 1 - 2(qy^2 + qz^2)) \end{aligned} 动手实践:读取Gazebo中的定位数据 -------------------------------- 现在让我们在Gazebo仿真环境中实际操作,读取和理解定位传感器的数据。 实验一:查看IMU原始数据 ~~~~~~~~~~~~~~~~~~~~~~~ **步骤1**\ :启动仿真环境 .. raw:: latex \diilbookstyleinputcell .. code:: bash roslaunch prometheus_gazebo sitl_indoor_1uav_P450.launch **步骤2**\ :查看IMU话题列表 .. raw:: latex \diilbookstyleinputcell .. code:: bash rostopic list | grep imu 预期输出: :: /mavros/imu/data /mavros/imu/data_raw /mavros/imu/diff_pressure /mavros/imu/mag /mavros/imu/static_pressure /mavros/imu/temperature_imu **步骤3**\ :实时显示IMU数据 .. raw:: latex \diilbookstyleinputcell .. code:: bash rostopic echo /mavros/imu/data 观察输出中的以下字段: - ``orientation``\ :姿态四元数 - ``angular_velocity``\ :角速度(rad/s) - ``linear_acceleration``\ :线加速度(m/s²) **思考**\ :当无人机静止在地面时,\ ``linear_acceleration.z`` 的值约为多少?为什么? 实验二:将四元数转换为欧拉角 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 创建一个Python脚本来实时显示无人机的姿态角: .. raw:: latex \diilbookstyleinputcell .. code:: python #!/usr/bin/env python # -*- coding: utf-8 -*- """ 文件名: imu_euler_display.py 功能: 订阅IMU数据,将四元数转换为欧拉角并显示 """ import rospy from sensor_msgs.msg import Imu import math def quaternion_to_euler(q): """ 将四元数转换为欧拉角(ZYX顺序) 参数: q: 四元数对象,包含x, y, z, w属性 返回: roll, pitch, yaw: 欧拉角(单位:度) """ # Roll (x-axis rotation) sinr_cosp = 2 * (q.w * q.x + q.y * q.z) cosr_cosp = 1 - 2 * (q.x * q.x + q.y * q.y) roll = math.atan2(sinr_cosp, cosr_cosp) # Pitch (y-axis rotation) sinp = 2 * (q.w * q.y - q.z * q.x) if abs(sinp) >= 1: pitch = math.copysign(math.pi / 2, sinp) # 万向锁处理 else: pitch = math.asin(sinp) # Yaw (z-axis rotation) siny_cosp = 2 * (q.w * q.z + q.x * q.y) cosy_cosp = 1 - 2 * (q.y * q.y + q.z * q.z) yaw = math.atan2(siny_cosp, cosy_cosp) # 转换为度 return math.degrees(roll), math.degrees(pitch), math.degrees(yaw) def imu_callback(msg): """IMU数据回调函数""" roll, pitch, yaw = quaternion_to_euler(msg.orientation) # 清屏并显示 print("\033[2J\033[H") # ANSI转义码:清屏并移动光标到左上角 print("=" * 50) print(" 无人机姿态实时显示") print("=" * 50) print(f"横滚角 (Roll) : {roll:8.2f}°") print(f"俯仰角 (Pitch): {pitch:8.2f}°") print(f"偏航角 (Yaw) : {yaw:8.2f}°") print("-" * 50) print(f"角速度 X: {math.degrees(msg.angular_velocity.x):8.2f} °/s") print(f"角速度 Y: {math.degrees(msg.angular_velocity.y):8.2f} °/s") print(f"角速度 Z: {math.degrees(msg.angular_velocity.z):8.2f} °/s") print("-" * 50) print(f"加速度 X: {msg.linear_acceleration.x:8.2f} m/s²") print(f"加速度 Y: {msg.linear_acceleration.y:8.2f} m/s²") print(f"加速度 Z: {msg.linear_acceleration.z:8.2f} m/s²") print("=" * 50) print("按 Ctrl+C 退出") def main(): rospy.init_node('imu_euler_display', anonymous=True) rospy.Subscriber('/mavros/imu/data', Imu, imu_callback) rospy.spin() if __name__ == '__main__': try: main() except rospy.ROSInterruptException: pass **运行脚本**\ : .. raw:: latex \diilbookstyleinputcell .. code:: bash chmod +x imu_euler_display.py python imu_euler_display.py 实验三:查看GPS/本地位置数据 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **查看GPS全球坐标**\ : .. raw:: latex \diilbookstyleinputcell .. code:: bash rostopic echo /mavros/global_position/global 输出示例: .. raw:: latex \diilbookstyleinputcell .. code:: yaml latitude: 47.3977421 longitude: 8.5455933 altitude: 535.4 **查看本地位置(ENU坐标系)**\ : .. raw:: latex \diilbookstyleinputcell .. code:: bash rostopic echo /mavros/local_position/pose 输出示例: .. raw:: latex \diilbookstyleinputcell .. code:: yaml pose: position: x: 0.0234 y: -0.0156 z: 0.0892 orientation: x: 0.0012 y: -0.0008 z: 0.0034 w: 0.9999 实验四:可视化位置轨迹 ~~~~~~~~~~~~~~~~~~~~~~ 使用\ ``rqt_plot``\ 实时绘制位置曲线: .. raw:: latex \diilbookstyleinputcell .. code:: bash rqt_plot /mavros/local_position/pose/pose/position/x \ /mavros/local_position/pose/pose/position/y \ /mavros/local_position/pose/pose/position/z 或者使用RViz进行三维可视化: .. raw:: latex \diilbookstyleinputcell .. code:: bash rviz 在RViz中: 1. 设置Fixed Frame为\ ``map`` 2. 添加\ ``PoseStamped``\ 显示,话题选择\ ``/mavros/local_position/pose`` 3. 添加\ ``TF``\ 显示以查看坐标系关系 Gazebo中的IMU模型配置(选读) ----------------------------- 在Gazebo仿真中,IMU通过SDF/URDF文件配置。以下是P450模型中IMU的典型配置: .. raw:: latex \diilbookstyleinputcell .. code:: xml / mavros/imu/data base_link 200.0 0.0 0 0 0 0 0 0 **关键参数说明**\ : ================= ================== ===================== 参数 含义 建议值 ================= ================== ===================== ``updateRateHZ`` 数据发布频率 50-400 Hz ``gaussianNoise`` 高斯噪声标准差 0-0.01(仿真可设为0) ``xyzOffset`` 传感器安装位置偏移 根据实际安装位置设置 ``rpyOffset`` 传感器安装角度偏移 根据实际安装角度设置 ================= ================== ===================== 如果要模拟真实IMU的噪声特性,可以添加以下配置: .. raw:: latex \diilbookstyleinputcell .. code:: xml true 200 0.0 0.0002 0.0 0.017 小结 ---- 本节我们学习了无人机定位系统的核心内容: 1. **定位系统的作用**\ :回答”我在哪”、“我朝向哪”、“我怎么动”三个问题 2. **IMU**\ :通过加速度计和陀螺仪感知自身运动,是姿态估计的核心,但存在积分漂移问题 3. **GNSS/GPS**\ :室外绝对定位的主要手段,RTK可达厘米级精度 4. **室内定位**\ :UWB适合通用室内场景,动作捕捉适合实验室研究 5. **数据接口**\ :通过ROS话题获取定位数据,理解消息结构 **核心要点**\ : - 单一定位方案都有局限性,实际系统通常融合多种传感器 - 精度与成本、复杂度之间需要权衡 - 理解传感器原理和参数有助于故障诊断和系统优化 练习题 ------ 基础题 ~~~~~~ 1. **判断题**\ :IMU可以直接测量无人机的位置。( ) 2. **填空题**\ :Pixhawk 6C配备了双IMU冗余设计,主IMU型号是\_\_\_\_\_\_,备份IMU型号是\_\_\_\_\_\_。 3. **选择题**\ :以下哪种定位方案精度最高? - A. 单点GPS - B. RTK GPS - C. UWB - D. 动作捕捉系统 4. **计算题**\ :某GPS接收机测得到卫星A的信号传播时间为0.07秒,计算该接收机到卫星A的伪距。(光速 :math:`c = 3 \times 10^8` m/s) 进阶题 ~~~~~~ 5. **实践题**\ :编写一个ROS节点,订阅\ ``/mavros/local_position/pose``\ 话题,计算并打印无人机相对于起飞点的水平距离: .. math:: d_{horizontal} = \sqrt{x^2 + y^2} 6. **分析题**\ :为什么高精度的IMU仍然需要与GPS融合使用?请从误差累积的角度分析。 思考题 ~~~~~~ 7. 如果你需要设计一套用于仓库盘点的无人机定位系统,应该选择什么方案?请说明理由。 8. 动作捕捉系统虽然精度极高,但为什么不适合实际的无人机产品部署?