CAFE

과제게시판

[ROS2 심화] SLAM

작성자김위제|작성시간26.01.02|조회수103 목록 댓글 0

(1) 다음을 조사하시오
- SLAM의 정의와 원리를 조사하시오.

 

SLAM(Simultaneous Localization and Mapping)
실시간으로 자신의 위치를 파악하면서 환경 지도를 구축할 수 있도록 하는 것이다.

2D SLAM같은 경 단선 LiDAR를 이용하여 2차원 평면상에서 로봇의 x, y좌표와 회전각을 추정하며 지도를 그린다.

 

- SLAM 알고리즘의 종류와 장단점을 조사하시오.

(8) ros2용 다른 slam 패키지를 조사하시오. cartographer와 성능을 비교하시오.

알고리즘 종류장점단점
EKF-SLAM,
FastSLAM
계산량이 비교적 적어 실시간 처리에 유리하다.지도가 커질수록 오차가 누적되며 연산 효율이 급격히 떨어진다.
Cartographer,
Karto SLAM
전체 경로를 최적화하여 오차를 보정하는 능력이 뛰어나다.그래프가 복잡해지면 많은 메모리와 연산 능력이 필요하다.
ORB-SLAM환경의 특징(코너, 모서리 등)만 저장하기 때문에 데이터 처리가 빠르다.특징이 없는 단순한 환경에서는 작동이 불안정하다.

 

(2) 연구실, PC실, 복도 등의 지도를 작성하시오.

 

jetson LiDAR에서 메모리 부족 오류가 생길 때 

 

jetson

jetson
sudo apt install ros-foxy-rmw-cyclonedds-cpp
echo "export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> ~/.bashrc

sudo swapoff /swapfile

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile

sudo mkswap /swapfile
sudo swapon /swapfile

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

source ~/.bashrc

Ubuntu

jazzy
sudo apt update
sudo apt install ros-jazzy-rmw-cyclonedds-cpp
echo "export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> ~/.bashrc

source ~/.bashrc

 

 

1. 연구실

xdg-open map_1767291136.pgm

ros2 run rviz2 rviz2

2. 복도


 

 

(3) cartographer 설정파일인 lua파일의 설정 파라미터를 조사하시오.

 

map_frame : 전역 좌표계 이름

tracking_frame : 알고리즘이 위치를 추적할 기준 프레임, SLAM의 중심이 되는 프레임

published_frame : Cartographer가 포즈를 발행할 기준 프레임

odom_frame : 오도메트리 프레임 이름

provide_odom_frame : 오도메트리 프레임을 제공할지 여부를 설정

publish_frame_projected_to_2d : 3D 위치 추정을 하더라도 결과를 2D 평면(Z축 0)으로 투영하여 발행할지 여부

 

 

use_odometry : 도메트리 데이터를 사용할지 여부

use_nav_sat : GPS 데이터를 사용할지 여부

use_landmarks : 랜드마크 데이터를 사용할지 여부

num_laser_scans : 용할 라이다 스캔 데이터의 개수

num_multi_echo_laser_scans :  라이다 센서로부터 받은 다중 에코(laser echo)스캔 데이터의 개수 설정

num_subdivisions_per_laser_scan : : 하나의 스캔 데이터를 몇 개로 쪼개어 처리할지 여부

num_point_clouds :3D LiDAR 등을 사용할 때 입력받을 포인트 클라우드 개수

 

 

lookup_transform_timeout_sec : TF(좌표 변환)를 조회할 때 기다릴 최대 시간

submap_publish_period_sec : 생성된 지도 조각을 시각화 도구(Rviz 등)로 보낼 주기설정

pose_publish_period_sec : 로봇의 현재 위치를 발행하는 주기

rangefinder_sampling_ratio : LiDAR 데이터 중 실제 연산에 사용할 비율 <- 1.0 = 100%

imu_sampling_ratio :  IMU 데이터 사용 비율

 

 

min_range / max_range : LiDAR 센서 값 중 SLAM에 반영할 거리 범위를 미터 단위로 지정

missing_data_ray_length : max_range보다 멀리 있는 데이터가 들어왔을 때, 해당 방향이 비어있다고 간주할 거리

use_imu_data : 2D SLAM에서 IMU 데이터를 활용해 자세를 보정할지 여부

use_online_correlative_scan_matching : 매칭을 시작하기 전, 계산량은 많지만 더 정확한 초기 위치를 찾는 알고리즘을 사용

motion_filter.max_angle_radians : 로봇이 최소 각도만큼은 움직여야 새로운 스캔 데이터를 지도에 업데이트

 

constraint_builder.min_score : 루프 클로저를 확정 짓기 위한 최소 일치 점수

global_localization_min_score : 전역 위치 추정시 일치 여부를 판단




(4) pgm 파일형식을 설명하고 맵에서 검정색, 흰색, 회색의 의미를 설명하시오.

흑백 이미지 포맷으로 이미지의 각 픽셀 값을 텍스트나 바이너리 형태로 그대로 저장한다.

 

흰색

로봇이 이동할 수 있는 비어있는 공간

 

검은색

벽, 가구, 기둥 등 로봇이 지나갈 수 없는 장애물

 

회색

로봇 센서가 도달하지 못해 정보가 없는 공간.

 



(5) 최종결과물 map.yaml의 내용을 설명하시오. 파일의 내용을 이용하여 map의 원점의 좌표를 어떻게 구하는지 설명하라.

image: 이미지 파일의 경로

 

mode : trinary

trinary는 각 픽셀을 장애물, 이동가능, 미탐사세 가지 중 하나로 분류

 

resolution: 0.050

지도의 해상도 /  0.050( 픽셀 하나가 5cm를 의미 )

 

origin: [-5.417, -5.521, 0]

지도의 원점 설정값

 

negate: 0

흰색/검은색의 의미를 반전시킬지 여부

0 <- 반전하지 않음

 

occupied_thresh: 0.65

이 값보다 큰 점유 확률을 가진 픽셀은 장애물로 간주

 

free_thresh: 0.196

이 값보다 작은 점유 확률을 가진 픽셀은 이동 가능으로 간주

 



(6) rqt_graph를 이용하여 slam을 실행하는 동안 모든 노들들이 주고받는 토픽을 조사하시오.


 

1. cartographer_node

Subscribes

/scan : LiDAR 센서로부터 들어오는 2D 거리 데이터

/tf : 각 센서 및 로봇 프레임 간의 좌표 변환 정보

 

Publishes

/submap_list : Cartographer가 생성한 로컬 지도 조각 리스트
/trajectory_node_list : 로봇이 이동한 경로상의 노드 정보

/scan_matched_points2 : 스캔 매칭에 사용된 포인트 클라우드 데이터

/constraint_list : 루프 클로저(Loop Closure)를 위한 제약 조건 리스트

/tf : 계산된 로봇의 포즈를 다시 좌표계에 반영

 

 

2. cartographer_occupancy_grid_node

Subscribes

/submap_list : cartographer_node에서 보낸 서브맵 정보를 받아온다.

 

Publishes

/map: 최종적으로 nav2나 rviz에서 사용하는 2D 점유 격자 지도를 발행

 

3.  rviz

Subscribes

/map, /map_updates: 생성된 지도를 화면에 표시

/tf: 로봇과 지도의 위치 관계를 시각화

 

Publishes

/initialpose :사용자가 지정한 초기 위치 정보를 보낸다.

/goal_pose : 로봇에게 이동할 목표 지점을 전달한다.

/clicked_point: 화면에서 클릭한 지점의 좌표를 발행한다.

 

 

단계흐름설명
센서 입력/scan → cartographer_nodeLiDAR 데이터가 SLAM으로 입력됨
SLAM 연산cartographer_node → /submap_list스캔 매칭을 통해 조각 지도를 생성함
지도 생성/submap_list → occupancy_grid_node → /map조각 지도를 합쳐 하나의 완성된 지도로 변환함
시각화/map, /tf → rviz사용자가 현재 지도와 로봇 위치를 확인함
제어 명령rviz → /goal_pose사용자가 목표치를 설정하면 내비게이션으로 전달됨


(7) (6)에서조사된 토픽에 포함된 정보를 설명하시오.

 

 

cartographer_node

구분토픽명포함된 주요 정보 및 역할
센서 데이터/scanLiDAR의 거리(m), 각도(rad), 강도(intensity) 정보. 장애물의 위치를 파악하는 기초 데이터입니다.
좌표 변환/tf센서와 로봇 본체간의 물리적 거리와 방향 정보를 가져옵니다.
로컬 지도/submap_list작은 단위로 쪼개진 지도 조각(Submap)들의 ID와 상대적 포즈 정보를 담고 있음
이동 경로/trajectory_node_list로봇이 이동하며 위치를 기록한 궤적 점(Point)들의 집합입니다.
시각화/scan_matched_points2스캔 데이터가 지도에 맞춰진 결과물, 매칭 정확도를 확인하는 용도
루프 보정/constraint_list이전에 왔던 곳을 재방문했을 때 생기는 제약 조건 정보로, 지도 왜곡을 바로잡음
위치 발행/tfSLAM 연산 결과로 계산된 로봇의 최종 위치(map -> odom)를 시스템 좌표계에 반영

 

cartographer_occupancy_grid_node

입력 서브맵/submap_listcartographer_node로부터 생성된 조각 지도를 입력받음
최종 지도/map해상도, 원점 좌표, 격자 상태 데이터(−1,0,100)를 포함한 전체 점유 격자 지도

 

rviz

구분토픽명포함된 주요 정보 및 역할
지도 시각화/map, /map_updates생성된 전체 지도 및 변경된 일부 영역(Patch)을 화면에 출력
위치 시각화/tf지도 위에서 로봇의 실시간 위치와 자세를 아이콘으로 표시
위치 초기화/initialpose사용자가 수동으로 로봇의 현재 위치를 잡아줄 때의 좌표(x,y)와 방향 정보를 보낸다
목표 지점/goal_pose로봇이 가야 할 목적지의 좌표와 자세 정보
지점 선택/clicked_point사용자가 지도 상의 특정 지점을 마우스로 클릭했을 때 해당 위치의 x,y,z 좌표를 보낸다.

 



(9) gazebo simulator를 이용하여 cartographer를 이용하여 맵을 작성하시오.

https://cafe.daum.net/SmartRobot/RoVa/2456

 


 

 

다음검색
현재 게시글 추가 기능 열기
  • 북마크
  • 신고 센터로 신고

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼