티스토리 뷰

2021. 10. 3. 19:55

 

안녕하세요

프로그래밍을 배우는 빛나는 샤트입니다. 

 

SLAM 강의 17번째. Midterm Exam, Roomba-like Stochastic Navigation


*이 포스팅은 목원대학교 양정연 교수님의 SLAM강의 유튜브 영상을 보고 제작되었음을 밝힙니다.

출처: 17강. Midterm Exam, Roomba-like Stochastic Navigation

17강. Midterm Exam, Roomba-like Stochastic Navigation

 

🎉강의요약

1. 중간고사 과제 안내 영상이며 총 2가지 문제
2. 결정론적 방법을 이용해 로봇 청소기의 벽 따라가기를 구현. 최대 2시간. stochastic한 문제를 결정론적 방법으로 푸는게 얼마나 어려운 지 경험하는 것이 목적.

3. crobot7을 이용해 crobot8과 같이 벽을 (그나마) 잘 따라가는 움직임 구현

4. crobot8을 수정해서 보여준 예시처럼 벽을 잘 따라가는 움직임 구현

 

 

 

<Prob.1. Your BEST Strategy ex/robot/crobot>

crobot~crobot4 예제 제공

좌측 그래프는 헤딩 각도, 우측 그래프는 경로 로그.

>> 결정론적 방법을 이용해 공간을 잘 돌아다닐 수 있도록 과제 수행
(나만의 방법으로 구현 시도. 2시간 이상은 소비하지 말고 어려움을 느끼는 데 중점)

 

 

<ex/robot/crobot4>


중앙 센서: us[0]
우측 센서:us[2]
0,2번 센서를 사용. 1번 센서 사용하지 않음
중앙과 우측 센서의 사잇 각도값은 40~60도가 베스트.

전방 센서로 충돌한다면 왼쪽으로 90도 회전하는 전략 사용.

mode 변수를 이용해 충돌 여부에 따라 변경.
0: 충돌 없음 직진.
1: 충돌함
2: 에러 계산 (e=q_d-q, -π<e<π 범위가 아닐수도 있기 때문에 dpi함수를 불러 사용)
만약 e가 0.5보다 작으면, 90도 회전 완료되어서 mode=0, 아니라면 e를 수정해 좌회전으로 이동
q_d(q_desired) = 로봇이 생각하는 각도q + 90도

 

<ex/robot/crobot5 Increasing Collision Margin>

collision=5로 변경해 진행.
>> 벽에 잘 부딪히지 않지만 청소 성능이 좋지 않다. 벽 근처는 청소가 잘 되지 않는다.

 

<ex/robot/crobot6 Modifying 90 degree rotation>


90도 회전하는 부분의 코드 변경

 

collision = 5->2로 변경.
error < 0.5: 전방 센서, 측방 센서의 장매물이 없다면 전진. 90를 거의 다 회전했는데 90도를 맞추기 위해 계속 회전하는 것을 방지
앞이 막혀있지 않다면 직진!

<Prob2. Roomba-like Strategy Tuning of Left backward(ex/robot/crobot7)>

collision = 4
wl = -randn()-1 (randn: 정규 분포를 가지는 확률값이 들어온다)
wr = -randn()-0.5
> 충돌하게 되면 좌측 후진하게 된다.

 

<Prob. 2. Modify ex/robot/crobot8 Show your result>

crobot7을 조금 수정.

e = q_d - q
w0 = Ke (K>0)
wl = -w0 + aN(μl1,) (N: randn()함수)
w4 = w0 + aN(μr1,)
> K, a, μl, μr 4개의 변수를 적절히 바꾸면 된다. 거의 충돌이 없는 것처럼 보인다.

 

<In my case, Two types of Turning Strategy>


1. 전방 센서가 충돌: 90도 회전
2. 측방 센서가 충돌: 45도 회전 (벽 이탈 방지)

 

 

<Prob3. Mission: Basic Wall Following, However crobot8 does NOT follow walls. Let's go back to the first definition>


하나의 변수만 수정.
힌트: Roomba는 스파이럴 무브와 좌측 후진을 사용

 


예제 코드가 있다면 실습을 진행하고 싶지만 정식으로 수강을 한 것이 아니기에..

한 번 요청해서 실습을 진행해보고 싶다.

LIST
댓글