본문 바로가기

공부/ROS

[ROS]『ROS로 배우는 로봇 프로그래밍』 책 따라하기 - 원더 봇 #3

반응형

110p)

●#2의 예제 7-2를 하니 뒷방향의 거리를 읽는다고 했는데 찝찝해서 한번 직접 원인을 찾아봤다.

이를 위해 empty world에 상자 하나를 두고 /scan topic을 읽어 직접 분석해봤다.

 

구글링도 해보고 값들을 확인해봤다.

우리가 다뤘던 ranges의 값들은 360도를 1도씩 나눠서(topic의 angle_min, angle_max, increment 들은 radian이다. 모두 degree로 바꿔보면 0도부터 360도까지 1도씩 증가한다.) 각 방향마다의 거리를 측정해서 list로 출력한 것이다.

 

아마 이전 터틀봇은 세팅이 달라서 ranges의 180 index(180도 부분)을 사용한 것 같다. 우리는 그냥 첫 번째 index로 바꿔주면 0도 부분, 즉 후면이 아닌 정면을 측정하게 된다.

 

range_ahead = msg.ranges[int(len(msg.ranges)/2)]  →  range_ahead = msg.ranges[0] 

 

 

 

111~112p)

●예제 코드 7-3에서 twist = Twist() 부분부터 마지막 줄까지의 부분이 while 문 안으로 들어가야 한다. 그러지 않으면 전혀 움직이지 않는다.

 

●turtlebot에서는 문제가 없던 거 같은데 turtlebot3에선 예제 코드 7-3을 실행하면 문제가 발생한다.(아니면 그냥 코드 자체가 잘못된 거 아닌가 싶기도 하다.)

 

g_range_ahead = min(msg.ranges) 이 부분 때문에 장애물을 만나 회전을 해도 결국 360도 범위 안쪽에서 장애물과의 거리가 바뀌지 않으므로 계속 같은 자리에서 회전만 한다. 그래서 나는 min내부의 range 범위를 360도가 아닌 정면 90도(-45 ~ 45)로 바꿔줬다. 추가로 이동 시간, 속도도 예제 보다 조금 느리게 바꿨다.

 

g_range_ahead = min(msg.ranges[0:0+45]+msg.ranges[360-45:360])

동작 변경 거리 : 0.3

직진 속도 : 0.2

직진 최대 시간 : 10

회전 속도 : 0.4

회전 시간 : 3

 

 

 

 

113p)

●마찬가지로 wander.py도 실행시킬 때 turtlebot3 환경에서는 그냥 rosrun으로 실행시키면 된다. topic이름을 cmd_vel_mux/input/teleop로 바꿀 필요가 없다.

 

 

 

========================================================================
정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.
틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다. : )
========================================================================

반응형