산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

전방향 옴니 휠 로봇: 안전한 사람 추적 및 인사하기

부품 및 소모품

부품수량비고
L298N 듀얼 스테퍼 모터 드라이버2모터 3개 제어용 (각 드라이버 2채널)
LM2596 DC-DC 강압 컨버터112V 배터리 → 5V 레일 변환
리포 배터리 저전압 알람1배터리 과방전 방지
24RPM 12V 기어드 모터 (4mm 축)3옴니 휠 3개 구동
Arduino Nano R31모터 제어 전담
Microsoft LifeCam HD-3000 웹캠1얼굴 검출용 (타 웹캠 가능)
점퍼 와이어10+전원/신호 배선용
Creator Ci20 보드1OpenCV 얼굴 검출 처리 (메인 브레인)
11.1V 3셀 리포 배터리1전체 시스템 전원

필요 도구

소프트웨어

프로젝트 소개

"Hackster Terminate the Competition" 대회 출품작으로, 터미네이터처럼 사람을 찾아다니지만 해코지가 아닌 칭찬을 하는 로봇입니다. 이 옴니-방향(전방향) 로봇은 사람을 찾아내고, 얼굴을 감지해 다가가며, 가까이 오면 칭찬 멘트를 재생합니다.

설계 원칙

시스템 구조도

네 가지 주요 블록으로 구성:

  1. 전원부: 리포 배터리 → 강압 컨버터(LM2596) → 5V 레일 / 12V 모터 직결 / 저전압 알람
  2. Ci20 (두뇌): 웹캠으로 OpenCV 얼굴 검출 → 시리얼로 아두이노에 이동 명령 전송
  3. 아두이노 나노: Ci20 명령 수신 → L298N 드라이버 2개로 3개 모터 제어 (전방향 이동)
  4. 기계부: 3D 프린팅 옴니 휠 3개 + 기어드 모터 3개로 전방향 이동 구현

전원부 배선

배터리 → 저전압 알람 → LM2596 입력. LM2596 출력은 5V로 조정해 Ci20, 아두이노, 웹캠, 로직 회로에 공급. 모터 드라이버는 배터리 12V 직결.

아두이노 ↔ L298N 연결

인스트럭터블 튜토리얼 참조. 3개 모터 제어를 위해 L298N 2개 사용 (총 4채널 중 3채널 사용).

3D 프린팅 차체

Ci20에서 OpenCV 얼굴 검출 실행

  1. OpenCV 설치: 공식 리눅스 빌드 가이드 따라 빌드
  2. 얼굴 검출 코드 컴파일/실행:
    g++ -I/usr/local/include/opencv -I/usr/local/include/opencv2 \
        -L/usr/local/lib/ -g -o FaceTracking main.cpp \
        -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml \
        -lopencv_video -lopencv_features2d -lopencv_calib3d \
        -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_stitching
    
  3. 실행 시 웹캠 영상 창 뜨고, 얼굴 중앙에 오면 로봇 전진 명령 전송

Ci20 ↔ 아두이노 통신 프로토콜

아두이노 코드 (모터 제어)

메인 스케치


// 모터 3개 핀 정의 (각각 DIR1, DIR2, PWM)
int dir1PinA=3, dir2PinA=2, speedPinA=9;
int dir1PinB=4, dir2PinB=5, speedPinB=8;
int dir1PinC=6, dir2PinC=7, speedPinC=10;

String rpiString;
int x=0, y=0;
unsigned long startTime=0;

void setup() {
  Serial.begin(9600);
  // 모든 핀 OUTPUT 설정...
  startTime = millis();
}

void loop() {
  readDataFromRPi();
  // 수신 명령으로 모터 제어
  if (rpiString.length() > 0) {
    // 파싱: "F 50 50" 또는 "R 1000"
    // driveInDirection(x,y) 또는 rotate(ms) 호출
  }
  delay(30);
}

// 시리얼 수신 파싱 로직...

모터 제어 라이브러리 (전방향 이동 수학)


void driveInDirection(float newX, float newY) {
  // 옴니 휠 3개(120도 배치) 역기구학 계산
  float theta = atan2(newY, newX);
  float mag = sqrt(newX*newX + newY*newY);
  float vx = mag * cos(theta);
  float vy = mag * sin(theta);
  
  // 각 휠 속도 계산
  float w1 = -vx;
  float w2 = 0.5*vx - sqrt(3)/2*vy;
  float w3 = 0.5*vx + sqrt(3)/2*vy;
  
  // 최대값으로 정규화 (150 스케일 → 0~255 PWM 매핑)
  // 방향(CW/CCW) 결정 후 analogWrite/digitalWrite로 구동
}

void rotate(float ms) {
  // 3개 휠 동일 속도/방향으로 제자리 회전
  // ms 밀리초 후 정지
}

Ci20용 C++ 얼굴 검출 코드 (핵심)


#include "opencv2/objdetect.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include 
#include , ,   // 시리얼 통신용

CascadeClassifier face_cascade;
VideoCapture cap(0);

int sendSerial(char* msg) {
  int fd = open("/dev/ttyUSB0", O_RDWR);
  // termios 설정 (9600 8N1)
  write(fd, msg, strlen(msg));
  return 0;
}

void detectFaces(Mat frame) {
  vector faces;
  cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
  equalizeHist(frame_gray, frame_gray);
  face_cascade.detectMultiScale(frame_gray, faces, 1.1, 3, 0|CASCADE_SCALE_IMAGE, Size(30,30));
  
  for (each face) {
    Point center(face.x+face.width/2, face.y+face.height/2);
    ellipse(frame, center, Size(face.width/2, face.height/2), 0, 0, 360, Scalar(255,0,255), 4);
    
    // 얼굴이 화면 중앙 1/3 영역에 있으면 전진 명령
    if (center.x > frame.cols/3 && center.x < frame.cols*2/3) {
      sendSerial("F 50 50");
    } else {
      sendSerial("0 0");
    }
  }
  imshow("Face Detection", frame);
}

int main() {
  sendSerial("0 0");
  cap.set(CAP_PROP_FRAME_WIDTH, 480);
  cap.set(CAP_PROP_FRAME_HEIGHT, 240);
  face_cascade.load("haarcascade_frontalface_default.xml");
  
  Mat frame;
  while (cap.read(frame)) {
    detectFaces(frame);
    if (waitKey(30) >= 0) break;
  }
  return 0;
}

향후 개선 과제 (챌린지)

커스텀 파츠 (3D 프린팅)

회로도

프로젝트 페이지 'Schematics' 섹션에서 시스템 전체 배선도 확인.

제조공정

  1. 라즈베리 파이와 OpenCV로 탁구공 추적하기 – 고급 튜토리얼
  2. Raspoulette: 태양광 자율 닭장 문 시스템 프로토타입
  3. DIY 월-E 영감 라즈베리 파이 CD-박스 로봇
  4. 구르는 알람 로봇: 라즈베리 파이와 구글 캘린더 연동 스마트 모바일 기상 시스템
  5. 윈도우 10 IoT 코어로 음성·컴퓨터 비전 로봇 만들기
  6. ROS 로봇: 라즈베리파이 터미널 제어 내비게이션
  7. 심플 파이 로봇 – 라즈베리파이로 2WD 자율 로버 만들기
  8. 아두이노 프로젝트를 위한 스마트 실내 내비게이션 로봇 키트
  9. 리니어 모터 이해: 전기 에너지에서 정밀 직선 운동으로
  10. 음료 로봇 이해: 기술, 자동화, 음료 산업에서의 역할