liosam navigation#2

김민준·2025년 6월 15일

🔧 단계별 실행 가이드

1단계: LIO-SAM 실행 및 확인

터미널 1에서 실행:

cd ~/ouster_ws
source devel/setup.bash
roslaunch lio_sam run.launch

이 단계에서 실행되는 것들:

  • ✅ LIO-SAM SLAM 노드들 (imuPreintegration, imageProjection, featureExtraction, mapOptimization)
  • ✅ Robot State Publisher (Hunter 차량 모델)
  • ✅ RViz (LIO-SAM 전용 설정)

1단계 확인사항:

# 새 터미널에서 확인
# 1) LIO-SAM 토픽들이 정상적으로 발행되는지 확인
rostopic list | grep lio_sam
# 예상 출력: /lio_sam/mapping/odometry, /lio_sam/mapping/path, /lio_sam/mapping/map_local 등

# 2) TF tree가 올바르게 구성되었는지 확인
rosrun tf view_frames
# 예상 구조: map → odom → base_link(=imu_link) → os_sensor

# 3) IMU와 라이다 데이터가 들어오는지 확인
rostopic hz /imu/data_synced
rostopic hz /points_synced

# 4) LIO-SAM이 정상 작동하는지 확인
rostopic echo /lio_sam/mapping/odometry --clear

RViz에서 확인할 것들:

  • 🟢 포인트클라우드: 라이다 데이터가 실시간으로 보임
  • 🟢 경로: LIO-SAM이 생성하는 이동 경로 (초록색 선)
  • 🟢 Hunter 차량 모델: 파란색 박스 모양
  • 🟢 TF: 좌표계들이 올바르게 연결됨

⚠️ 1단계 문제 해결:

# LIO-SAM 노드가 죽는 경우
rosnode list | grep lio_sam

# IMU 초기화 문제 시
# → 차량을 10-30초간 완전 정지 상태로 유지

# 포인트클라우드가 안 보이는 경우
rostopic echo /points_synced | head -20

2단계: Navigation 추가 실행

1단계가 안정적으로 실행된 후, 터미널 2에서:

cd ~/ouster_ws
source devel/setup.bash
roslaunch lio_sam navigation_only.launch

이 단계에서 추가로 실행되는 것들:

  • ✅ pointcloud_to_laserscan (3D → 2D 변환)
  • ✅ move_base (Navigation 엔진)
  • ✅ Navigation용 RViz (별도 창)

2단계 확인사항:

# 1) 레이저스캔 변환이 정상인지 확인
rostopic echo /scan --clear
rostopic hz /scan

# 2) Move Base가 실행되었는지 확인
rosnode list | grep move_base
# 예상 출력: /move_base

# 3) Costmap이 생성되는지 확인
rostopic list | grep costmap
# 예상 출력: /move_base/global_costmap/costmap, /move_base/local_costmap/costmap

# 4) Move Base 상태 확인
rostopic echo /move_base/status

Navigation RViz에서 확인할 것들:

  • 🟢 레이저스캔: 흰색 점들로 장애물 감지
  • 🟢 Local Costmap: 로봇 주변 8×8m 영역 (컬러맵)
  • 🟢 Global Costmap: 로봇 주변 50×50m 영역
  • 🟢 Robot Model: Hunter 차량 모델
  • 🟢 2D Nav Goal: 목적지 설정 도구 활성화

3단계: 자율주행 테스트

두 시스템이 모두 안정적으로 실행된 후:

3-1) 초기 상태 확인:

# TF 연결 상태 최종 확인
rosrun tf tf_echo map imu_link

# Navigation 준비 상태 확인
rostopic echo /move_base/status
# 출력에서 status: 0 (PENDING) 이면 정상

3-2) 첫 번째 목적지 설정:

  • Navigation RViz 창에서 "2D Nav Goal" 클릭
  • 가까운 거리 (2-3미터)에 목적지 설정
  • 화살표 방향으로 차량이 향할 방향 지정

3-3) 실시간 모니터링:

# 터미널 3: cmd_vel 명령 모니터링
rostopic echo /cmd_vel

# 터미널 4: 현재 위치 모니터링
rostopic echo /lio_sam/mapping/odometry | grep -A3 position

# 터미널 5: Navigation 상태 모니터링
rostopic echo /move_base/status

4단계: 고급 테스트

기본 이동이 성공하면:

4-1) 복잡한 경로 테스트:

# 장애물 주변으로 목적지 설정
# 코너를 돌아가는 경로 테스트
# 긴 거리 이동 테스트

4-2) 맵 저장 (선택사항):

# 현재 생성된 맵 저장
rosservice call /lio_sam/save_map 0.2 "/home/$(whoami)/hunter_test_maps/"

📊 각 단계별 성공 지표

1단계 성공 지표:

  • LIO-SAM 4개 노드 모두 실행 중
  • /lio_sam/mapping/odometry 토픽 정상 발행 (10Hz)
  • RViz에서 포인트클라우드 실시간 업데이트
  • Hunter 차량 모델 정상 표시

2단계 성공 지표:

  • /scan 토픽 정상 발행 (10Hz)
  • move_base 노드 실행 중
  • Local/Global Costmap 생성됨
  • Navigation RViz에서 "2D Nav Goal" 도구 사용 가능

3단계 성공 지표:

  • 목적지 설정 시 전역 경로 생성 (빨간 선)
  • 지역 경로 생성 (파란 선)
  • /cmd_vel 토픽에 속도 명령 발행
  • 차량이 실제로 목적지 방향으로 이동

⚠️ 단계별 문제 해결

1단계 문제:

# LIO-SAM 크래시 시
killall -9 lio_sam_imuPreintegration lio_sam_imageProjection lio_sam_featureExtraction lio_sam_mapOptmization
# 재시작
roslaunch lio_sam run.launch

2단계 문제:

# pointcloud_to_laserscan 실패 시
rosnode kill pointcloud_to_laserscan
rosrun pointcloud_to_laserscan pointcloud_to_laserscan_node cloud_in:=/lio_sam/mapping/cloud_registered _target_frame:=imu_link

# move_base 실패 시  
rosnode kill move_base
# navigation_only.launch 재실행

3단계 문제:

# 목적지 설정해도 움직이지 않는 경우
rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped "header: {frame_id: 'map'} pose: {position: {x: 1.0, y: 0.0, z: 0.0}, orientation: {w: 1.0}}"

# 비상 정지
rostopic pub /cmd_vel geometry_msgs/Twist "linear: {x: 0.0} angular: {z: 0.0}"
profile
지금까지 해온 여러 활동들을 간략하게라도 정리해보고자 합니다.

0개의 댓글