G1 robot Navigation 관련 문의

안녕하세요. Navigation 관련 테스트 중 에러 발생으로 문의드립니다.

g1_mapping.sh 아래의 내용 실행 시


#!/bin/bash

source ~/unitree_ros2/cyclonedds_ws/install/setup.bash

source ~/unitree_ros2/setup.sh

source ~/unitree_g1_v2/install/setup.bash

###################################################

(

ros2 run pointcloud_to_laserscan odom.py

) &

sleep 1

###################################################

(

ros2 run pointcloud_to_laserscan broad_tf.py

) &

sleep 1

###################################################

(

source ${HOME}/unitree_g1_v2/install/setup.bash

ros2 launch pointcloud_to_laserscan sample_pointcloud_to_laserscan_launch.py

) &

sleep 2

###################################################

(

source ${HOME}/unitree_g1_v2/install/setup.bash

ros2 launch cartographer_mapping cartographer.launch.py

) &

wait


[rviz2-4] [INFO] [1775719200.828918396] [rviz2]: Message Filter dropping message: frame ‘cloud’ at time 1775719199.245 for reason ‘discarding message because the queue is full’

g1_mapping.sh 아래의 내용 실행 시

–-

#!/bin/bash

source ~/unitree_ros2/cyclonedds_ws/install/setup.bash
source ~/unitree_ros2/setup.sh

source ~/unitree_g1_v2/install/setup.bash

(
ros2 run pointcloud_to_laserscan odom.py
) &
sleep 1

(
ros2 run pointcloud_to_laserscan broad_tf.py
) &
sleep 1

(
ros2 launch pointcloud_to_laserscan sample_pointcloud_to_laserscan_launch.py
) &
sleep 2

(
ros2 launch nav2_bringup localization_launch.py
) &
sleep 2

(
ros2 launch nav2_bringup navigation_launch.py
) &
sleep 2

(
ros2 launch nav2_bringup rviz_launch.py
)

wait


[planner_server-3] [INFO] [1775718445.019713408] [global_costmap.global_costmap]: Timed out waiting for transform from base_link2 to map to become available, tf error: Invalid frame ID “map” passed to canTransform argument target_frame - frame does not exist

라는 에러로 인해 라이다 센서가 작동이 안되는 데 해결 방법이 있을까요??

신규 사용자는 첨부 파일을 담을 수 없어 오류 내용을 전부 담을 수가 없는 것 같습니다.

두 가지 별개의 문제가 보입니다.

1번 스크립트 (cartographer 매핑): frame 'cloud' 메시지 드롭은 RViz 큐가 꽉 찬 것으로, TF tree에 cloud 프레임이 제때 도착하지 않아서입니다. broad_tf.py에서 cloud 프레임을 publish하고 있는지, 그리고 타임스탬프가 포인트클라우드 메시지와 동기화되는지 확인해보세요. RViz쪽은 심각한 문제는 아니고 TF가 안정되면 줄어듭니다.

2번 스크립트 (Nav2): 이게 핵심 문제입니다. "map" frame does not existmap을 publish하는 노드가 없다는 뜻입니다.

Nav2 localization_launch.py는 AMCL을 띄우는데, AMCL은 기존 맵 파일(.yaml + .pgm)을 map_server로 로드해야 map 프레임이 생깁니다. 매핑 결과물 없이 localization을 바로 실행하면 map TF가 존재하지 않습니다.

해결 순서:

  1. 먼저 1번 스크립트(cartographer)로 매핑을 완료하고 맵을 저장하세요:

    ros2 run nav2_map_server map_saver_cli -f ~/map
    
  2. 2번 스크립트의 localization_launch.py 실행 시 맵 파일 경로를 파라미터로 전달하세요:

    ros2 launch nav2_bringup localization_launch.py map:=$HOME/map.yaml
    
  3. map_server가 맵을 로드하면 AMCL이 map → odom TF를 publish하게 되고, map 프레임이 TF tree에 등장합니다.

추가로 확인할 점: base_link2라는 프레임명이 Nav2 기본값(base_link)과 다릅니다. Nav2 파라미터 파일에서 robot_base_frame: base_link2로 맞춰져 있는지, 또는 broad_tf.py에서 publish하는 프레임명과 일치하는지 점검해보세요.