208~209p)
●책에선 느닷없이 followbot의 course라는 launch를 실행시킨다. 당연히 앞에서 설치한 적도 없고 만든 적도 없기에 나는 이를 대신해서 이전에 이미 설치했던 것을 사용했다.
$roslaunch turtlebot3_gazebo turtlebot3_autorace.launch
●course.launch처럼 단순한 line은 아니지만 따라갈 노란색의 line과 turtlebot이 spawn 되기에 실습을 따라가는데에 큰 문제가 없다고 판단했다.

●(중요)turtlebot3_autorace.launch로 불러온 turtlebot은 bashrc에 설정해둔 MODEL:=에 상관 없이 burger type으로 spawn된다. 앞에서 burger형은 카메라가 장착되어 있지 않다고 확인했지만 이 launch로 불러온 burger는 카메라가 장착되어 있다.
209~212p)
●예제 코드 12-3의 subscriber 선언 부분에서 subscribe하는 topic을 'camera/rgb/image_raw'에서 'camera/image'로 바꿔야 한다. autorace.launch의 turtlebot은 해당 이름의 topic으로 camera 영상을 publish하기 때문이다.
●예제 코드 12-3의 image_callback 메서드에서 1~5줄 까지는 한 덩어리로 많이 쓰이는 것 같다. cv2 color filter를 구글링 하면 대부분의 코드가 이 덩어리와 같은 형태였다.
●내가 이해한 바로는 예제 코드 12-3의 inRange부분은 (input, lower, upper)로 input을 lower~upper사이만 나오도록 필터링하는 함수이다. 여기서 input의 color type이 hsv면 lower, upper는 hsv array, bgr이면 bgr array를 받는다는 것 같다.
●예제 코드 12-3을 실행시키면 이상하게 노란선의 가장자리만 나왔다.

계속 원인을 찾아본 결과 예제 코드 12-3에 문제가 있다고 판단했다.
●image_callback 메서드의 1줄에서 imgmsg_to_cv2(msg, desired_encoding='bgr8')로 바꿔야 한다. 안 그러면 RGB의 msg를 그대로 받아서 BGR을 사용하는 cv2에서는 노란선이 아닌 하늘색 선으로 인식하게 된다.
●image_callback에서 lower, upper 값을 조정했다. lower = [22,93,0], upper = [45,255,255]
+)해당 값은 아래 글을 참고했다.
https://stackoverflow.com/questions/57262974/tracking-yellow-color-object-with-opencv-python
Tracking yellow color object with OpenCV python
How can I track a yellow object in python using opencv? And, if possible, how can I get the position of the object? I've tried using the following method but i can't figure out how to lower and up...
stackoverflow.com

212~214p)
●예제 코드 12-4의 cx, cy를 정의하는 부분에서 인덱스 관련 에러가 발생한다. search_top이 int형이 아닐 수 있기에 M의 index로 사용하면 에러가 날 수 있는 것이다. 아래와 같이 변경해주면 된다.
mask[0:int(search_top), 0:w] = 0
mask[int(search_bot):h, 0:w] = 0
●예제 코드 12-4에서 2진 영상을 얻는 부분(image_callback 메서드 5줄)까지는 이전과 같고 그 아래 부분은 2진 영상을 다루는 부분이라고 한다. 처리 과정을 정리하면 다음과 같다.
ⓐsubscribe한 영상의 가로, 세로를 h, w에 저장한다. (d는 구글링 해보니 채널이라고 하는데 뭔지 잘 모르겠다.(여기선 중요X)
ⓑ얻은 h, w를 기반으로 영상에서 필요 없는 부분을 가리는(교재에 따르면 픽셀을 0으로 만드는)필터를 만들고 입힌다.
ⓒ얻은 영역의 선 중앙에 빨간 점을 띄운다. (이 부분은 numpy와 OpenCV 공부를 더 해야 이해할 수 있을 것 같다.)

========================================================================
정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.
틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다. : )
========================================================================
'공부 > ROS' 카테고리의 다른 글
[RPI4][ROS1] Raspberry Pi 4B 에서 Ubuntu 20.04 server USB로 부팅하기 for ROS noetic (0) | 2024.07.09 |
---|---|
[ROS]『ROS로 배우는 로봇 프로그래밍』 책 따라하기 - 팔로우 봇 #3 (0) | 2023.01.12 |
[ROS]『ROS로 배우는 로봇 프로그래밍』 책 따라하기 - 팔로우 봇 #1 (0) | 2022.12.13 |
[ROS]『ROS로 배우는 로봇 프로그래밍』 책 따라하기 - 체스 봇 + ros_arm_moveit #3 (실습 실패) (0) | 2022.12.13 |
[ROS]『ROS로 배우는 로봇 프로그래밍』 책 따라하기 - 체스 봇 + ros_arm_moveit #2 (0) | 2022.12.06 |