[ROS]『ROS로 배우는 로봇 프로그래밍』 책 따라하기 - 팔로우 봇 #1
이 실습은 Ch12의 팔로우-봇(pp.201~217)의 내용이다.
+)저작권 때문에 코드 전문은 올리지 않고 책의 내용을 noetic버전에서 실습할 때 도움이 되는 내용들 위주로 업로드할 예정이다.
+책은 ros indigo 버전이지만 나는 noetic 버전에서 실습했다. 이에 따라 달라지는 코드는 이 글에 적어두었다.
+나는 followbot_ws를 따로 만들지 않고 기존에 쓰던 catkin_ws 안에 followbot pkg를 만들었다.
202p)
●앞과 마찬가지로 나는 turtlebot3를 사용하기에 해당 패키지를 실행시켰다. 다만 이번 실습에선 카메라가 필요하므로 model을 burger가 아닌 waffle로 설정했다. 모델을 바꾸는 법은 이전에 포스팅했다.
[ROS]『ROS로 배우는 로봇 프로그래밍』 책 따라하기 - 텔레옵 봇 #4
133~134p) ●이 부분의 실습을 하기 위해선 turtlebot3_world, key_publisher, keys_to_twist_with_ramps까지 총 3개의 launch파일 및 노드가 실행되어야 한다. ●책에선 단순히 keys_to_twist_with_ramps가 publish하는 topic을
istein.tistory.com
$roslaunch turtlebot3_gazebo turtlebot3_world.launch
●이후 rostopic을 확인하면 책과 비슷한 list가 나오는데 turtlebot3의 경우 default로 depth camera를 사용하지 않기에 /camera/depth/camera ~ topic은 나오지 않을 것이다. 찾아보니 turtlebot3_gazebo에 depth camera(realsense R200)를 활성화시키는 법이 로보티즈에 올라와 있었다. 이후 실습에서 depth topic을 다룰 때 이 부분도 따라 할 예정이다.
https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_realsense/
ROBOTIS e-Manual
emanual.robotis.com
203~206p)
●이 부분은 크게 어려운 게 없다.
206~208p)
●OpenCV에 대한 내용이 나와서 간단하게 opencv를 구글링해보고 뭔지 공부해봤다.
컴퓨터의 눈, Open CV 란?
OpenCV (Open Source Computer Vision Library) 실시간 컴퓨터 비전을 목적으로 한 프로그래밍 Library 이다. 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다. 인텔 CPU에서 사용되는 경우 속도의 향상으
onnons.tistory.com
OpenCV - 나무위키
이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권
namu.wiki
●예제 코드 12-2에선 opencv를 ros에서 사용하기 위해 cv2와 cv_bridge 라이브러리를 사용했다. cv2는 opencv 본체이고 cv_bridge는 ros의 topic을 opencv로, 그 반대도 가능하게 하기 위한 '다리' 역할을 하는 라이브러리이다. 아래 그림을 보고 쉽게 이해했다.
cv_bridge - ROS Wiki
melodic noetic Show EOL distros: EOL distros: electric fuerte groovy hydro indigo jade kinetic lunar diamondback: Only showing information from the released package extracted on Unknown. No API documentation available. Please see this page for in
wiki.ros.org
●예제 코드 12-2는 image topic을 받고 opencv로 보내는 과정을 하나의 class Follower와 그 클래스 함수로 만들어서 처리했다.
●예제 코드 12-2의 흐름을 나름대로 분석해봤다. (opencv를 모르는 초보자가 분석한 것이다. 부정확할 수 있다.)
ⓐclass 초기화 때 bridge와 영상을 띄울 window를 만든다.
ⓑ이 ros 노드가 camera/rgb ~의 topic을 subscribe하면 image_callback 함수를 호출한다.
ⓒ(image_callback 함수) bridge의 imgmsg_to_cv2함수를 이용해 받은 ros image topic을 cv2가 받을 수 있는 형태로 변환하고 이 때 bgr8이라는 인코더를 사용한다.
ⓓ(image_callback 함수) cv2의 imshow함수를 이용해 만들어진 window에 image를 출력한다.
ⓔ(image_callback 함수) waitkey는 단순 delay용으로 사용되었다.
●예제 코드 12-2를 실행해보면 이전에 rviz로 image를 보는 방식이 아니라 독자적인 window가 하나 생겨서 turtlebot3의 camera 영상을 실시간으로 보여주고 있다.
========================================================================
정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.
틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다. : )
========================================================================