카테고리 없음

패스트캠퍼스 환급챌린지 42일차 : 자율주행 로봇을 위한 ROS2 & Nav2 한번에 끝내기 강의 후기

연두부진 2025. 4. 15. 23:44

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

오늘은 Global Localization 하는 방법을

실습해보았다.

 

[오늘의 수강 영상]

 

[오늘의 실습]

 

사용하는 방법을 알아보기 전에

Local Localization과 Global Localization의

차리를 먼저 알아보자.

 

Local Localization이란?

 

이미 자신이 대략 어디에 있는지 알고있는 상태에서

계속 자신의 위치를 지역적으로 tracking하는 것

 

Global Localization이란?

 

자신이 어디에 있는지 전혀 모르는 상태에서

시작해서 전체 map에서 본인의 위치를 찾는 것

 

그럼 Global Localization은 언제 사용될까?

 

1. 위치추정이 갑자기 엄청난 차이로 불일치한 경우

 

로봇이 추정한 위치와 실제 위치가 다른 경우를
"kidnapped robot problem"이라고 하며,

누군가가 로봇을 갑자기 들어서 이동시켜서

로봇이 예상치 못한 위치로 이동되는 경우에

Global Localization을 진행한다.

 

2. 초기 시작 또는 위치가 크게 변경된 경우

 

로봇이 새로운 환경에 놓이게 되거나

기존 환경에서 초기화 되어 다시 시작해야할 경우에

Global Localization을 진행한다.

 

3. 장시간 동작 후 위치 불확실성이 증가한 경우

 

로봇이 장시간 동안 동작하다보면 센서의 누적 오류

또는 환경의 변화 등과 같은 문제로 인해 위치 불확실성이

생길 수 있기 때문에 위치 불확실성을 초기화하기 위해서

Global Localization을 진행한다.


 

우리가 계속 사용하던 AMCL에는

/reinitialize_global_localization이라는 서비스를 제공하고 있다.

 

이를 사용하면 로봇의 위치 주변에만 particle을 뿌렸던 것과 달리

map 전역에 particle을 뿌려서 map에서 global하게

로봇의 위치를 추정한다.

 

아래 사진에서 왼쪽이 local localization,

오른쪽이 global localization이다.

 

 

AMCL에서 /reinitialize_global_localization을

사용하는 방법에는 2가지가 있다.

 

1. 터미널에서 Global Localization 수행하기

 

이를 수행하기 위한 명령어는 아래와 같다.

$ ros2 service call /reinitialize_global_localization std_srvs/srv/Empty

 

이를 수행하면 아래와 같이 전체적으로 particle이 뿌려지며

 

여러번 왔다갔다 해보면 아래와 같은 결과가 나온다.

 

조금 더 정확하게 테스트 해보기 위해서 3번 정도

테스트해본 결과 1번 성공, 2번 실패하였다.

 

실패한 원인에는 현재 설정해놓은 max_particle이 2000으로

map 전체에 뿌리기에는 적어서 정확한 위치 추정이 힘들었다.

 

따라서 Global Localization을 진행할 때만

잠깐 particle 수를 늘렸다가 평소에는 다시 줄이는 코드를 짜서

진행해보았다.

 

이렇게 하는 이유는 paticle 수가 계속해서 많으면

컴퓨터의 연산량도 너무 많아지기 때문에 필요할 때만

늘리기 위해서 이다.

 

2. 코드 상에서 Global Localization 수행하기

 

service로 통신하기 위해서 2개의 client를 생성해준다.

 

여기서 set_parameters는 AMCL 내에 수정가능한

parameter를 마음대로 수정하기 위해서 사용한다.

 

particle 수를 조정해주기 위해서

max_particles, min_particles를 설정하여

max_particles, min_particles 라는 parameter에 그 값들을

입력시켜준다.

 

우리는 main 문에서 아래와 같이 설정하였다.

 

main 문에서는 위와 같이 particle 수를 조정해준 후에

 

이 함수를 사용해서 global localization을 수행해주고

다시 parameter를 줄인 후

 

global localization을 종료한다.

 

이걸 실제로 동작시켜보면

 

이렇게 성공적으로 particle 수가 변경되고

이 경우는 계속해서 실험을 해보기 위해서

particle수 줄이는 걸 실행하지 않았다.

 

아래와 같이 particle이 map 전역에

많이 뿌려지는 것을 볼 수 있다.

 

이 경우에는 2가지 위치에서 3번씩 실험을 진행해보았다.

 

 

 

두가지 경우 모두 2번 성공, 1번 실패하였다.

 

이를 통해 particle 수를 늘리면 늘릴 수록

global localization의 정확도가 올라간다는 것을 알 수 있었다.


오늘 global localization을 진행해보면서

particle 수의 중요성도 알게되고

 

필요에 따라 particle의 수를

조정할 수 있는 방법도 알게 되었다.

 

또한, global_localization에서

parameter를 수정하고자 할 때

set_parameters를 사용했었는데

 

이는 모든 알고리즘에 대부분 있어서

나중에 parameter를 수정하고자 할 때

찾아서 사용해봐야겠다고 생각하였다.


공부 시작시간
공부 종료시간

 

#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완

https://bit.ly/4hTSJNB

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr