小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
nav2导航失败,自由导航一移动雷达数据就对不上了
-
背景(可选):
更改小车电机驱动和雷达后(原硬件配置没有问题),重新发布/odom数据,建图可行,RVIZ上进行自由导航就出问题。(没有IMU数据,在传感器融合节点屏蔽了IMU)。环境:(ROS2 humble cartographer nav2 robot_localization_ekf)
问题描述:
建图完成后,在RVIZ2上进行重定位后,通过Nav2 Goal发布点位进行自由导航,小车一移动雷达就出现偏移,也就是小车实际前进了,雷达数据也改变了
,但是雷达在RVIZ上显示的位置没变,RVIZ中Display栏的TF下odom的position没变,移动时通过ros2 topic echo /odom查看数据是有在正确变换。
自由导航移动时雷达数据在RVIZ上显示情况:问题图片具体细节和上下文:
屏蔽IMU我是直接将robot_localization功能包中的ekf.yaml的imu配置项注释掉,目前是没有发布/imu数据的不知导航失败是否和这有关,这边查看tf树是没啥问题的,map->odom->base_footprint->base_link->scan等静态。
尝试过的解决方法:
看样子是导航问题,尝试过修改nav2导航的配置参数,照用原来能成功的小车配置也不行,还有车模型变了,urdf文件大致修改了一点。更换驱动后在/odom话题中发布的频率也改变了,不知是否有影响。雷达也换了个,不知道雷达的扫描频率变了有无影响,导航的配置大致如下
amcl: ros__parameters: use_sim_time: False alpha1: 0.2 alpha2: 0.2 alpha3: 0.8 alpha4: 0.2 alpha5: 0.1 base_frame_id: "base_footprint" beam_skip_distance: 0.5 beam_skip_error_threshold: 0.9 beam_skip_threshold: 0.3 do_beamskip: false global_frame_id: "map" lambda_short: 0.1 laser_likelihood_max_dist: 2.0 laser_max_range: 100.0 laser_min_range: -1.0 laser_model_type: "likelihood_field" max_beams: 60 max_particles: 3000 min_particles: 100 odom_frame_id: "odom" odom_model_type: "diff" pf_err: 0.05 pf_z: 0.99 recovery_alpha_fast: 0.0 recovery_alpha_slow: 0.0 resample_interval: 1 robot_model_type: "nav2_amcl::DifferentialMotionModel" save_pose_rate: 0.5 sigma_hit: 0.2 tf_broadcast: true transform_tolerance: 1.0 update_min_a: 0.2 update_min_d: 0.25 z_hit: 0.5 z_max: 0.05 z_rand: 0.5 z_short: 0.05 scan_topic: scan bt_navigator: ros__parameters: use_sim_time: True global_frame: map robot_base_frame: base_link odom_topic: /odometry/filtered #odom_topic: /odom bt_loop_duration: 10 default_server_timeout: 20 # 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults: # nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml # nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml # They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2. plugin_lib_names: local_costmap: local_costmap: ros__parameters: update_frequency: 5.0 publish_frequency: 2.0 global_frame: odom robot_base_frame: base_link use_sim_time: True rolling_window: true width: 3 height: 3 resolution: 0.05 robot_radius: 0.22 plugins: ["voxel_layer", "inflation_layer"] inflation_layer: plugin: "nav2_costmap_2d::InflationLayer" cost_scaling_factor: 3.0 inflation_radius: 0.3 voxel_layer: plugin: "nav2_costmap_2d::VoxelLayer" enabled: True publish_voxel_map: True origin_z: 0.0 z_resolution: 0.05 z_voxels: 16 max_obstacle_height: 2.0 mark_threshold: 0 observation_sources: scan scan: topic: /scan max_obstacle_height: 2.0 clearing: True marking: True data_type: "LaserScan" raytrace_max_range: 3.0 raytrace_min_range: 0.0 obstacle_max_range: 2.5 obstacle_min_range: 0.0 static_layer: plugin: "nav2_costmap_2d::StaticLayer" map_subscribe_transient_local: True always_send_full_costmap: True global_costmap: global_costmap: ros__parameters: update_frequency: 1.0 publish_frequency: 1.0 global_frame: map robot_base_frame: base_link use_sim_time: True robot_radius: 0.22 resolution: 0.05 track_unknown_space: true plugins: ["static_layer", "obstacle_layer", "inflation_layer"] obstacle_layer: plugin: "nav2_costmap_2d::ObstacleLayer" enabled: True observation_sources: scan scan: topic: /scan max_obstacle_height: 2.0 clearing: True marking: True data_type: "LaserScan" raytrace_max_range: 3.0 raytrace_min_range: 0.0 obstacle_max_range: 2.5 obstacle_min_range: 0.0 static_layer: plugin: "nav2_costmap_2d::StaticLayer" map_subscribe_transient_local: True inflation_layer: plugin: "nav2_costmap_2d::InflationLayer" cost_scaling_factor: 3.0 inflation_radius: 0.3 always_send_full_costmap: True
-
针对您描述的问题,有几个关键点需要检查和调整,这些问题可能与您更换电机驱动和雷达后出现的导航问题有关。以下是一些可能的解决步骤和检查点:
1. 验证TF变换
首先,确保所有的TF变换都是正确的。尽管您说TF树看起来没问题,但还需要确保
/odom
到base_footprint
以及base_footprint
到base_link
的变换是实时且准确的。可以使用ros2 tf2_echo
命令来查看TF变换的输出,例如:ros2 tf2_echo odom base_footprint ros2 tf2_echo base_footprint base_link
2. 检查Odometry数据
您提到
/odom
话题中的数据在移动时是正确变换的,但请确保这些数据的质量(如协方差矩阵)也是合理的。如果协方差过大,可能会影响定位的准确性。您可以通过订阅/odom
话题来检查这些数据。3. 雷达频率和性能
更换雷达后,雷达的扫描频率和性能可能会有所不同。请确保雷达的配置(如扫描范围、角度分辨率等)与您的导航配置相匹配。如果雷达扫描频率变化很大,可能需要调整AMCL或本地成本地图的参数。
4. AMCL配置
alpha
参数:这些参数影响粒子滤波器的性能。如果小车和环境的动态性较高,可能需要调整这些参数。odom_model_type
:确保diff
(差分模型)适用于您的小车。scan_topic
:确保扫描话题名称正确,并且雷达数据被正确接收。
5. 本地和全局成本地图
- 分辨率和大小:根据您的应用场景,可能需要调整成本地图的分辨率和大小。
- 障碍物和膨胀层:确保障碍物层和膨胀层的参数适合您的小车和环境。
6. 导航状态
在RVIZ中查看导航状态(如路径规划、避障等)是否如预期工作。检查是否有任何错误或警告消息在导航节点中输出。
7. IMU数据
虽然您已经屏蔽了IMU数据,但IMU在提供方向和角速度信息方面非常有用,特别是在动态环境中。如果可能的话,考虑重新集成IMU数据,或者使用其他传感器来增强定位性能。
8. 日志和调试
查看ROS2的日志文件,查找可能的错误或警告。增加日志记录的详细程度可能有助于诊断问题。
9. 硬件和软件兼容性
确保新硬件与ROS2和Nav2的兼容性。有时,新硬件可能需要特定的驱动程序或配置。
10. 重新构建和测试
在更改任何配置或代码后,确保重新构建并彻底测试系统。
通过上述步骤,您应该能够诊断并解决导航中的问题。如果问题仍然存在,您可能需要更深入地分析具体的数据和配置,或者考虑寻求社区的帮助。
以上为生成回答,仅供参考~
-
确认下新雷达ros_frame_id和urdf里laser link name是否一致