[Object Tracking Robot]4장 4주차 후기
2021.6.7 23:01
안녕하세요
프로그래밍을 배우는 빛나는 샤트입니다.
AIFFEL 해커톤3 4주차 진행 현황 및 후기.
- 기간: 2021.05.10 ~ 2021.06.18
- 주제: 특정 1인을 추적하며 따라가는 자율주행 모바일 로봇 구현(위고 코리아와 협업, 하드웨어 장비 및 기술 지원)
- 인원: 총 5명
- 역할: 팀장, Tracking 알고리즘 개발, ROS를 활용한 로봇 구동 & 알고리즘 연동
1. 4주차 목표: Test 영상을 이용해 deepsort(추적 모델) + ROS -> 로봇 바퀴 제어
2. 4주차 업무 키워드
- ROS 기초
- ROS Topic
- ROS /cmd_vel
- rospy(ROS + Python)
- deepsort + ROS
3. ROS 관련 글
아래 글에 정리함.
[Object Tracking Robot]Study 내용 정리 (5) - ROS 기초 (tistory.com)
[Object Tracking Robot]Study 내용 정리 (5) - ROS 기초
2021.6.1 00:21 안녕하세요 프로그래밍을 배우는 빛나는 샤트입니다. 자율주행 프로젝트 We-Go 진행하면서 공부한 내용들을 간략히 정리한 글입니다. 1. 주제: ROS 기초 2. 내용 workspace 생성 새로운 패
shinest-programming.tistory.com
4. ROS를 이용한 바퀴 제어
가장 기본적인 전진과 후진을 반복하는 Publisher를 작성해 구동해 본 결과이다.
아래 코드는 전진만 하는 코드이다.
tt.linear.x는 양수일 경우 전진, 음수일 경우 후진한다.
여기에 1을 할당하면 계속 전진하는 코드를 발행하고 ROS는 이것을 받아 로봇의 바퀴가 전진할 수 있도록 명령을 전달한다.
이렇게 나머지 변수들도 값을 지정해 주면 우리가 원하는 구동을 구현할 수 있다!
#! /usr/bin/env python
import rospy
from geometry_msgs.msg import Twist
class scout_pub_basic():
def __init__(self):
rospy.init_node("scout_pub_basic_name", anonymous=False)
self.msg_pub = rospy.Publisher(
'/cmd_vel',
Twist,
queue_size = 10
)
def sendMsg(self):
tt = Twist()
tt.linear.x = 1
# tt.linear.y = 0
# tt.linear.z = 0
# tt.angular.z = 0
self.msg_pub.publish(tt)
if __name__ == "__main__":
while not rospy.is_shutdown():
scout = scout_pub_basic()
rate = rospy.Rate(10)
scout.sendMsg()
rate.sleep()
5. DeepSORT + ROS
ROS를 통해 로봇을 제어하는 방법을 알았으니 이제 DeepSORT의 결과물(bbox)을 이용해 로봇을 제어할 수 있지 않을까 생각함.
실제로 아래와 같이 width, height의 값에 따라 'go', 'back'를 출력했고 로봇 제어도 성공했다. (바퀴가 잘 돌아갔다.)
그리고 추가로 rospy.Rate(숫자)의 값에 따라 FPS가 변하는 것을 확인함.
rospy.Rate()는 괄호 안의 숫자만큼의 Hz를 가지고 통신한다. 즉 Hz가 높을 수록 동일한 시간에 더 많은 통신을 주고 받는 다는 의미. (왜냐하면 Hz는 진동수로 1초에 몇 회 진동했는지를 나타낸다. 100Hz는 1초에 100번 진동)
*왼쪽부터 2Hz, 100Hz, 200Hz의 결과이다. FPS가 대략 5 -> 30 -> 45임을 확인했다.