YOLO


  • Robot에서만 진행합니다.  

설치하기


터미널에서 catkin_ws/src 폴더로 이동합니다. 

darkros 사이트에서 경로를 가져와주세요. 

git clone 명령으로 해당 경로에 있는 패키지를 다운 받습니다. 


그 후, workspace로 이동해서 빌드


  • 이 빌드는 좀 오래 걸려요

만약 빌드 과정에서 이런 에러가 난다면 

해당 파일의 아래 local 부분을 추가해서 수정해주세요


  • sudo nano /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake

이제 다운받은 패키지를 적용시키기 위해 source ~/.bashrc를 수행해줍니다. 

설치 확인하기


아래 경로의 yolo_network_config 폴더로 이동해주세요.


cd ~/catkin_ws/src/darknet_ros/darknet_ros/yolo_network_config/


  • 아래 보이는 cfg와 weights 폴더에 뭔가 받아서 저장할 게 있어요

weights 폴더로 이동해서 

sudo wget http://pjreddie.com/media/files/yolov3-tiny.weights 로 그 뭔가를 받아주세요. 


  • 이 파일은 필요한 기능을 다 지원해주는 만큼 너무 커서 git으로 배포를 할 수가 없어요 

일단 roscore를 실행하고, 로봇에서 카메라를 기동해봅시다. 

카메라가 발행하는 토픽은 /main_camera /image_raw 입니다. 


  • 카메라가 정상적으로 토픽을 발행 중인지 확인하는 방법은 rqt_image_view를 실행한 다음, 토픽 선택 항목에서 해당 토픽을 선택하고 영상이 뜨면 됩니다.

그 후, launch 파일들이 보관된 곳으로 이동해서 

nano로 darknet_ros.launch를 열어주세요. 


  • sudo로 접근하세요

먼저 아래 그림의 두 군데를 수정하고 

아래까지 수정한 다음에 저장해줍니다. 

파일을 빠져나가서 nano로 config 폴더의 ros.yaml을 열어주세요.  

카메라 토픽 부분을 변경해준 다음 


  • camera --> main_camera 

드디어 YOLO를 실행해봅니다~ 

rqt_image_view를 열고 아래 토픽 항목을 알맞게 바꾸어주세요. 

아래는 darknet_ros를 실행한 화면입니다. 

rqt_image_view로 확인해보면

근데, 그림 구경 말고 어떻게 내 코드에서 사용하지?

YOLO 설치 Error 해결방법 


최신 Jetpack의 기본 opencv 버전이 4.2로 설치된 경우 다음과 같은 에러가 발생한다. 

이 문제는 cv_bridge가 예상하는 opencv 위치가 /usr/include/opencv에 있어야하는데 jetson에서는

이 파일이 /usr/include/opencv4/opencv2에 있기 때문이다. 


https://answers.ros.org/question/199279/installation-from-source-fails-because-of-cv_bridge-include-dir/ 문서를 따라 다음과 같이

symlink를 생성한다.


$ sudo ln -s /usr/include/opencv4/opencv2/ /usr/include/opencv

 

YOLO 사용하기


아래의 msgs 관련 패키지만 내 PC에 설치하면 됩니다. 


  • 지원하는 ROS 버전이 달라도 (ex> kinetic <-> melodic) 메시지 타입만 동일하다면 통신이 가능합니다. 
  • roscore를 끄고 진행합니다. 


먼저 darknet_ros를 내 PC에 받고

그리고 darknet_ros_msgs만 남기고 지워주세요. 

그리고 워크스페이스로 이동한 후에 해당 패키지만 빌드해줍니다. 

그리고 source ~/.bashrc 로 적용시키고, 

다시 이렇게 실행

이 상태에서 rostopic list 로 darknet_ros가 잘 동작하고 있는지 확인하고, 

rostopic echo 명령으로 원하는 토픽의 값을 봅니다. 

rostopic echo /darknet_ros/bounding_boxes
rostopic echo /darknet_ros/bounding_boxes
rostopic echo /darknet_ros/found_object
rostopic echo /darknet_ros/found_object