최근 저는 광운대에서 ROS 기초 수업을 진행했습니다. 해당 수업은 제가 ROS 기초를 진행하고 마치면, 그 다음 다른 분이 이어서 실제 주행로봇을 가지고 프로젝트를 진행하는 방식이었습니다. 그래서 제 뒤에 이어지는 수업에서 ROS melodic 버전을 사용하기 때문에 저도 수업을 melodic으로 진행을 했죠. 근데 melodic 버전에서 제가 블로그에서 YOLO pkg를 소개했던 적이 있습니다.
ROS melodic에서 영상인식 YOLOv3 패키지 세팅하기
최근 여러글에서 이야기했지만, 제가 지금은 (임시.ㅠㅠ.로) 한양대 에리카에 있습니다. 여러 고마운 분들의 배려로 아주 다양한 재미있는 일들을 경험중이랍니다. 그 중에 또 하나 멋진 일은 아
pinkwink.kr
위 글인데요. 위 글의 내용을 수강생들에게 소개하고 재미삼아 YOLO ROS pkg 설치하고 잠시 즐거운 시간을 보냈죠. 근데 제가 수업중에 간단히 저 패키지의 노드가 발행하는 토픽을 구독해서 여러 class를 인식하지만 사람(person)이 인식되면 몇 명이 인식되었는지 카운트해서 화면에 프린트하는 코드를 작성해 보라는 숙제를 주었죠.
근데 수업이 진행되면서 제가 그 과제를 주었는지 잊어버린.ㅠㅠ. 종강하던 날 한 학생이 해당 숙제를 제가 풀어주지 않았다고 알려주더군요. 그래서 부랴부랴~~ 숙제 풀이를 해서 이렇게 공개합니다.ㅠㅠ. 아무튼 오늘 글은 YOLO가 중요한게 아니라 어떤 노드가 발행하는 토픽을 구독하는 방법을 유심히 보면 좋겠습니다.
앞에서 언급한 ROS Melodic용 YOLO를 설치하고 위 그림처럼 roscore를 실행합니다.
그리고 cv_camera를 실행하구요~
그리고 yolov3_pytorch_ros 패키지의 detector.launch를 실행합니다.
rqt_image_view를 실행해서 detection_image_topic을 지정하면 인식이 된다는 것을 압니다. 저는 맥을 사용하는데 패러럴즈로 우분투를 실행했기 때문에 yolov3-tiny 버전을 실행했습니다.
이제 토픽을 구독하고 뭔가 하기 위해 detected_objects_in_image 토픽의 정보(info)를 조회해보면 해당 토픽이 BoundingBoxes라는 메세지로 되어 있음을 알 수 있습니다.
그래서 BoundingBoxes를 rosmsg info 명령으로 조회하면 BoundingBox라는 이름으로 배열로 되어 있구요. 그 이름은 bounding_boxes입니다.
일단 간단히 코드만 집중하려고 이미 설치한 yolo 패키지에 scripts라는 폴더를 만들고 그 안에 코드를 작성했습니다.
#! /usr/bin/env python
import rospy
from yolov3_pytorch_ros.msg import BoundingBoxes
def callback(data):
cnt = 0
for each in data.bounding_boxes:
if each.Class == "person":
cnt = cnt +1
print "person count : " + str(cnt)
rospy.init_node("count_classes", anonymous=False)
rospy.loginfo("--> Start Count Classes Node")
rospy.Subscriber("detected_objects_in_image", BoundingBoxes, callback)
rospy.spin()
위 코드는 detected_objects_in_image 토픽을 구독해서, 그 안에 bounding_boxes에서 Class에 person이 관찰되면 카운트(cnt)를 수행하도록 했습니다. 저렇게 보면 쉽죠^^. 아래에 공개한 영상을 보면서 어떻게 작성했는지 흐름을 봐주세요~
그리고 꼭 chmod 명령으로 실행권한을 추가해야 합니다. 아래 그림처럼 그리고 아까 말한 해당 코드를 실행합니다.
이제 그 결과는 영상에서 사람의 수를 카운트 해줍니다.
'Robot > Robot Program - ROS' 카테고리의 다른 글
ROS2에서 OpenCV를 사용할 때 numpy 관련 에러가 난다면 (0) | 2023.10.27 |
---|---|
ROS2 colcon build에서 SetuptoolsDeprecationWarning 대응법 (0) | 2023.10.25 |
ROS2 humble을 설치하고 공부하는데 필요한 설정 (4) | 2023.08.24 |
ROS 카메라 캘리브레이션 수행하기 (12) | 2021.04.27 |
ROS 토픽을 터미널에서 그래픽하게 보여주는 rosshow (2) | 2021.03.21 |
ROS에서 odom 정보를 기초로 로봇에 위치 명령 인가하기 (10) | 2021.03.14 |
Ubuntu 20.04에서 ROS1 Noetic과 ROS2 Foxy 같이 설치하기 (12) | 2021.02.22 |