Jetson에서 yolov4를 통해 얻은 정보를 이용하여 다이나믹셀을 제어하기 위해
Jetson과 OpenCR 사이의 시리얼 통신하는 법에 대해 알아보겠습니다.
OpenCR은 ARM 개발환경을 지원하지 않기 때문에 노트북에서 개발을 한 뒤 ARM에서 업로드하는 방식으로 진행해야 합니다.
젯슨에서 데이터를 보내는 코드입니다.
우선 serial 라이브러리를 설치해야 합니다.
pip3 install pyserial
코드 내용 중 통신 관련 부분만 발췌했습니다.
(이전에 게시한 tensorrt변환 내용 중 trt_yolo.py 내용을 일부 변경한 코드입니다.)
import serial #시리얼 통신용 라이브러리
serial_error = False #serial 통신 체크용
#try-except문을 이용한 Serial 확인 및 열려있는 통신 확인
try:
try:
ser = serial.Serial('/dev/ttyACM0',115200,timeout=0.1)
except:
serial.Serial("/dev/ttyACM0", 115200).close()
ser = serial.Serial('/dev/ttyACM0',115200,timeout=0.1)
except:
print('Serial error')
serial_error = True
def loop_and_detect(cam, trt_yolo, conf_th, vis):
while True:
boxes, confs, clss = trt_yolo.detect(img, conf_th)
if boxes.size > 0: #인식 확인
xx_dot = int((boxes[0,0]+boxes[0,2])/2) #0번 인식 객체의 x 위치
yy_dot = int((boxes[0,1]+boxes[0,3])/2) #0번 인식 객체의 y 위치
x_y = str(x_dot)+','+str(y_dot) #x,y 위치 저장
if serial_error == False: #serial 통신 실패 시 출력 유무 확인
ser.write(x_y.encode('utf-8'))
컴퓨터에 따라 시리얼 포트 이름이 ttyACM0가 아닐 수도 있습니다.
이때는
dmesg | grep tty
를 통해 알 수 있습니다.
코드를 간략하게 보면
ser = serial.Serial('/dev/ttyACM0',115200,timeout=0.1)
로 연결하고
ser.write(x_y.encode('utf-8'))
로 젯슨에서 계산한 데이터를 보내주는 내용입니다.
그리고 OpenCR에서 데이터를 받는 코드입니다.
Arduino ide를 설치합니다. (저는 윈도우 환경에서 설치했습니다.)
https://www.arduino.cc/en/software
설치를 한뒤 아두이노 ide를 실행해서 파일-환경설정에 들어가서
추가적인 보드 매니저 URLs에
https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/arduino/opencr_release/package_opencr_index.json
다음 내용을 넣고 확인을 눌러줍니다.
그리고 툴-보드-보드매니저에 들어가서
OpenCR을 검색한 뒤 설치해줍니다.
코드 내용 중 시리얼 통신과 관련된 부분만 보면
void setup() {
// put your setup code here, to run once:
}
String command;
void loop() {
if (Serial.available()) {
command = Serial.readStringUntil('\n');
Serial.setTimeout(5);
}
젯슨에서 계산한 데이터를 5ms 간격으로 받는 코드입니다.
나머지 내용은 (x,y)형태로 받은 데이터를 x값과 y값으로 분리하고
그 값을 이용해서 다이나믹셀을 pid제어하는 코드인데 제가 짠게 아니라 시리얼 통신 부분만 발췌했습니다.
OpenCR은 젯슨과 연결했을 때 업로드만 되고 개발이 안 되기 때문에
전체적으로 실행할 때 모터가 돌아가는 모습을 통해 두 코드가 정상적으로 작동하는 것을 확인은 할 수 있었으나
Arduino ide에서 시리얼모니터를 통해 값을 잘 받고 있는지 그런 모습은 확인할 수 없었습니다
'정나우 > Jetson' 카테고리의 다른 글
DeepSORT를 이용해서 Yolov4 성능 높이기 (2) | 2022.05.25 |
---|---|
[YOLOv4] 인식 결과 저장하기 (0) | 2022.05.05 |
TensorRT를 이용해서 Yolov4 성능 향상시키기 (3) | 2022.04.12 |
[yolov4] Bounding box 중심점 출력하기 (0) | 2022.03.28 |
[Yolov4] 영상인식 커스텀 학습법 (0) | 2022.03.20 |
댓글