Fast-LIO2 odom + slam_toolbox 2D 맵 + Nav2 자율주행 + RealSense RGBD.
- 로봇이 기립(Sport Mode) 상태
- NUC ↔ Go2 유선 연결 (enp86s0, 192.168.123.99)
- NUC ↔ MID360 LiDAR 유선 연결 (enp86s0, 192.168.1.50)
- RealSense USB 연결
- 도커 컨테이너 실행 중 (ID 21)
# X11 권한 (GUI용)
xhost +local:root
# Go2 IP 추가 (재부팅 후 매번)
sudo ip addr add 192.168.123.99/24 dev enp86s0
# 컨테이너 진입
docker exec -it 21 bashexport ROS_DOMAIN_ID=1 && source /root/ws/install/setup.bash
ros2 launch /root/ws_host/src/go2_mapping.launch.py→ Go2 cmd_vel bridge ready., RealSense Node Is Up! 로그 확인
export DISPLAY=:0 && export ROS_DOMAIN_ID=1 && source /root/ws/install/setup.bash
LIBGL_ALWAYS_SOFTWARE=1 rviz2 -d /root/ws_host/src/go2_mapping.rvizexport ROS_DOMAIN_ID=1 && source /root/ws/install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboardi전진 /,후진 /j좌회전 /l우회전 /k정지z속도 감소 — 천천히 움직일수록 맵 품질 향상- 여러 번 돌고 출발점 복귀하면 루프 클로저로 맵 보정
mkdir -p /root/recordings
export DISPLAY=:0 && export ROS_DOMAIN_ID=1 && source /root/ws/install/setup.bash
python3 /root/ws_host/src/record_rgb.py→ /root/recordings/run_<timestamp>.mp4 저장. Ctrl+C로 종료
export ROS_DOMAIN_ID=1 && source /root/ws/install/setup.bash
# 1. 표준 pgm/yaml (Nav2 map_server용)
ros2 run nav2_map_server map_saver_cli -f /root/maps/my_map
# 2. slam_toolbox posegraph (localization 모드용)
ros2 service call /slam_toolbox/serialize_map slam_toolbox/srv/SerializePoseGraph "{filename: '/root/maps/my_map'}"→ /root/maps/my_map.pgm, my_map.yaml, my_map.posegraph, my_map.data 4개 파일 생성. 매핑 launch는 켜둔 상태에서 저장
전제조건: 1단계에서 .pgm, .yaml, .posegraph, .data 4개 파일 모두 저장되어 있어야 함.
export ROS_DOMAIN_ID=1 && source /root/ws/install/setup.bash
ros2 launch /root/ws_host/src/go2_nav2.launch.py map:=/root/maps/my_map.yaml→ Fast-LIO 시작 15초 후 Nav2 기동. All nodes activated 로그 확인
export DISPLAY=:0 && export ROS_DOMAIN_ID=1 && source /root/ws/install/setup.bash
LIBGL_ALWAYS_SOFTWARE=1 rviz2 -d /opt/ros/humble/share/nav2_bringup/rviz/nav2_default_view.rvizpython3 /root/ws_host/src/record_rgb.py- 2D Pose Estimate 버튼 → 맵에서 로봇 실제 위치 클릭 + 드래그(방향)
- Nav2 Goal 버튼 → 가고 싶은 곳 클릭 + 드래그(방향)
- 로봇이 자동으로 경로 따라 이동
# TF 확인: LiDAR 마운트 위치 정상인지
ros2 run tf2_ros tf2_echo base_link livox_frame
# 토픽 발행 확인
ros2 topic hz /Odometry # Fast-LIO (~10Hz)
ros2 topic hz /livox/lidar # LiDAR (~10Hz)
ros2 topic hz /scan # 2D 스캔
ros2 topic list | grep camera # RealSense 토픽RViz2에서 **Fixed Frame을 base_link**로 바꾸면 로봇이 중심 고정되어 스캔이 벽에 정확히 맞는지 육안 확인 가능.
| 파일 | 역할 |
|---|---|
src/go2_bringup.launch.py |
공통 bringup (LiDAR+Fast-LIO+URDF+RealSense+브릿지) |
src/go2_mapping.launch.py |
매핑 모드 (bringup + slam_toolbox) |
src/go2_nav2.launch.py |
네비게이션 모드 (bringup + Nav2) |
src/go2_ros2_bridge.py |
/cmd_vel → Go2 SportClient.Move() 변환 |
src/record_rgb.py |
RealSense RGB → MP4 녹화 |
src/config/fast_lio_mid360.yaml |
Fast-LIO2 파라미터 |
src/nav2_params_go2.yaml |
Nav2 파라미터 |
src/go2_mapping.rviz |
RViz2 매핑 디스플레이 설정 |
/root/maps/ |
저장된 맵 |
/root/recordings/ |
녹화된 영상 |
MID360 → livox_ros_driver2 → /livox/lidar, /livox/imu
↓
Fast-LIO2
├→ /Odometry
├→ TF: camera_init→body
└→ /cloud_registered_body
↓
pointcloud_to_laserscan → /scan
↓
slam_toolbox(매핑) / AMCL(네비) → TF: map→odom
↓
Nav2 → /cmd_vel
↓
go2_ros2_bridge → SportClient.Move() → Go2
Go2 URDF (go2_description) → robot_state_publisher → TF 트리
RealSense → realsense2_camera → /camera/camera/*
↓
record_rgb.py → .mp4
map → odom → camera_init → body (MID360 IMU 위치, Fast-LIO가 추적)
└→ base_link (로봇 몸통 중심, body에서 30cm 뒤)
├→ base (URDF 루트)
│ └→ 다리/머리/... (URDF)
├→ livox_frame (외장 LiDAR)
└→ camera_link (RealSense)