# odom_calib **Repository Path**: ccpdead/odom_calib ## Basic Information - **Project Name**: odom_calib - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-27 - **Last Updated**: 2026-01-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Odom Calib - 里程计标定工具 这是一个用于标定机器人底盘运动参数的ROS2功能包。通过监听TF变换(map -> base_link),实时计算机器人的速度和加速度,并提供滤波后的标定结果。 ## 功能特点 - **TF监听**: 监听 map -> base_link 的TF变换获取实时位姿 - **速度计算**: 计算机器人在自身坐标系下的线速度(vx)和角速度(vyaw) - **加速度计算**: 计算线加速度(acc_x)和角加速度(acc_yaw) - **多级滤波**: - 中值滤波: 去除脉冲噪声 - 低通滤波: 平滑数据 - 异常值剔除: 基于统计方法剔除异常数据 - **百分位数统计**: 使用百分位数而非最大值来确定速度限制,更加鲁棒 - **Nav2兼容输出**: 直接输出Nav2兼容的YAML格式参数 ## 安装和编译 ```bash cd ~/nav_ws colcon build --packages-select odom_calib source install/setup.bash ``` ## 使用方法 ### 1. 启动标定节点 ```bash # 使用默认参数启动 ros2 launch odom_calib odom_calib.launch.py # 指定自定义参数 ros2 launch odom_calib odom_calib.launch.py map_frame:=map base_frame:=base_link # 使用自定义参数文件 ros2 launch odom_calib odom_calib.launch.py params_file:=/path/to/your/params.yaml ``` ### 2. 标定流程 1. 确保机器人的定位系统已启动,且正在发布 map -> base_link 的TF 2. 启动标定节点 3. **手动遥控机器人运动**(或使用自动导航): - 直线前进/后退(测试线速度) - 原地旋转(测试角速度) - 急加速/急减速(测试加速度) 4. 观察终端输出的标定结果 5. 收集足够数据后(建议至少运动30秒),记录标定结果 ### 3. 查看实时数据 ```bash # 查看实时速度 ros2 topic echo /odom_calib/velocity # 查看标定结果 ros2 topic echo /odom_calib/result ``` ## 参数说明 ### TF Frame 参数 | 参数名 | 默认值 | 说明 | |--------|--------|------| | `map_frame` | "map" | 地图坐标系名称 | | `base_frame` | "base_link" | 机器人基座坐标系名称 | ### 采样参数 | 参数名 | 默认值 | 说明 | |--------|--------|------| | `sample_rate` | 50.0 | 采样频率 (Hz) | | `pose_buffer_duration` | 30.0 | 位姿数据缓存时长 (秒) | | `velocity_buffer_duration` | 30.0 | 速度数据缓存时长 (秒) | ### 滤波参数 | 参数名 | 默认值 | 说明 | |--------|--------|------| | `lowpass_alpha` | 0.3 | 低通滤波系数 (0-1),越小滤波越强 | | `median_window_size` | 5 | 中值滤波窗口大小 | | `outlier_threshold` | 3.0 | 异常值检测阈值 (标准差倍数) | | `outlier_min_samples` | 20 | 异常值检测最小样本数 | ### 速度限制计算参数 | 参数名 | 默认值 | 说明 | |--------|--------|------| | `percentile` | 95.0 | 使用第N百分位数作为速度限制 | ## 滤波参数调整指南 ### 低通滤波系数 (lowpass_alpha) - **0.1**: 非常强的滤波,响应慢,适合噪声很大的情况 - **0.3**: 中等滤波,推荐值 - **0.5**: 较弱的滤波,响应快 - **0.8-1.0**: 几乎不滤波 ### 中值滤波窗口 (median_window_size) - **3**: 最小有效窗口,延迟小 - **5**: 推荐值,平衡去噪和延迟 - **7-9**: 更强的去噪,但延迟增加 ### 异常值阈值 (outlier_threshold) - **2.0**: 激进剔除,可能剔除正常数据 - **3.0**: 推荐值,对应99.7%置信区间 - **4.0**: 保守剔除,只剔除极端异常值 ### 百分位数 (percentile) - **99%**: 接近最大值,可能包含噪声 - **95%**: 推荐值,既能反映最大能力,又能排除异常 - **90%**: 更保守,适合安全要求高的场景 ## 输出格式 标定结果会以两种格式输出: ### 1. ROS话题 (/odom_calib/result) `Float64MultiArray` 包含8个值: - [0] max_vx: 最大线速度 (m/s) - [1] max_vyaw: 最大角速度 (rad/s) - [2] max_acc_x: 最大线加速度 (m/s²) - [3] max_acc_yaw: 最大角加速度 (rad/s²) - [4] avg_vx: 平均线速度 (m/s) - [5] avg_vyaw: 平均角速度 (rad/s) - [6] std_vx: 线速度标准差 - [7] std_vyaw: 角速度标准差 ### 2. 终端输出 (Nav2 YAML格式) ```yaml controller_server: ros__parameters: FollowPath: max_vel_x: 0.500 max_vel_theta: 1.200 acc_lim_x: 0.800 acc_lim_theta: 1.500 ``` ## 注意事项 1. **TF发布频率**: 确保TF发布频率足够高(建议 >= 50Hz),否则速度计算可能不准确 2. **定位精度**: 标定结果的准确性依赖于定位系统的精度 3. **多种运动模式**: 标定时应包含各种运动模式(前进、后退、旋转、加减速) 4. **环境条件**: 标定应在实际使用环境中进行,地面材质会影响结果 5. **安全边界**: 建议将标定结果乘以0.8-0.9作为实际使用的限制值 ## License Apache-2.0