ROS 2 시스템에서 Localization을 위해 필요한 노드

AMCL을 통한 Localization 실습


  1. 시뮬레이션 환경(bookstore)에 neuronbot2을 spawn

    ros2 launch neuronbot2_gazebo neuronbot2_world.launch.py
    

    Untitled

  2. 맵핑한 지도를 localization에 활용하기 위해, neuronbot2_nav 패키지의 localization_launch.py 파일을 수정

    ...
    
    def generate_launch_description():
        # Get the launch directory
        my_nav_dir = get_package_share_directory('neuronbot2_nav')
        my_param_dir = os.path.join(my_nav_dir, 'param')
        my_param_file = 'neuronbot_params.yaml'
        my_map_dir = os.path.join(my_nav_dir, 'map')
        **my_map_file = 'bookstore.yaml'**
        
    ...
    
  3. AMCL 기반 Localization 수행을 위해 아래 런치 파일 시작

    ros2 launch neuronbot2_nav localization_launch.py use_sim_time:=true
    
  4. Rviz2로 Localization 상황 확인

    cd ~/nav2_ws/src/neuronbot2/neuronbot2_nav/rviz
    rviz2 -d nav2_default_view.rviz
    
  5. 이제 지도에서 로봇의 초기 위치를 설정합니다. 2D Pose Estimate 버튼을 클릭한 후 다음 시뮬레이터 상에서 로봇의 실제 위치에 해당하는 위치와 방향을 클릭해줍니다.

    init_pose.gif

  6. 언급드렸던 것 처럼 AMCL은 mapodom 프레임의 변환을 담당합니다. 그 변환에 집중하기 위해 TF 디스플레이 설정에서 base_footprint, map, odom 프레임만 볼 수 있도록 체크해줍니다.

    Untitled

  7. 그런 다음 키보드로 로봇을 움직여 AMCL이 새 로봇 위치에 어떻게 적응하는지 관찰합니다. 가장 가능성이 높은 로봇 위치에 파티클이 집중되면서 Localization에 성공하는 것을 볼 수 있습니다.

    ros2 run teleop_twist_keyboard teleop_twist_keyboard 
    

    particle.gif

image.png

image.png