'O'nine'은 집안을 자율 주행하며 물체를 집어 옮기고, 알렉사 음성 명령으로 작업을 수행하는 홈 어시스턴트 로봇입니다. 메카넘 휠로 전방향 이동, 수직 리프트로 팔 작업 범위 확장, Kinect로 SLAM/내비게이션/물체 인식을 수행합니다.
고수준 아키텍처
아마존 에코 닷이 음성 명령 수신
커스텀 알렉사 스킬이 인텐트 파악
AWS Lambda 함수가 PubNub MQTT 브로커로 명령 발행
O'nine이 MQTT 구독 → 자율 작업 실행
하드웨어 서브시스템
3.1 로봇 베이스 (메카넘 드라이브)
4개 엔코더 DC 모터 + L298 + Teensy 펌웨어. ROS linorobot 패키지 사용. PID 속도 제어로 정밀 주행.
3.2 수직 리프트 (팔 부모)
스테퍼 모터 + EasyDriver + Teensy. MoveIt에서 목표 높이 받으면 스텝 수로 변환해 오픈루프 제어. 시리얼로 팔 컨트롤러와 통신.
3.3 로봇 팔 컨트롤러 (팔 자식)
아두이노 우노 + Braccio 쉴드. 리프트로부터 관절 각도 배열 수신 → 서보 구동.
3.4 전체 통합 배선
소프트웨어 설치 (ROS 기반)
필수: 리눅스 머신 2대 (개발용 PC + 로봇 보드 Odroid XU4)
4.1 ROS 설치
git clone https://github.com/linorobot/rosme
cd rosme && ./install
4.2 패키지 설치
# 개발 머신
cd ~/catkin_ws/src
git clone https://github.com/linorobot/lino_pid
git clone https://github.com/linorobot/lino_msgs
git clone https://github.com/linorobot/lino_visualize
cd .. && catkin_make
# 로봇 보드 (베이스)
git clone https://github.com/linorobot/lino_install
cd lino_install && ./install mecanum kinect
# O'nine 패키지 (양쪽 모두)
git clone https://github.com/grassjelly/onine_install
cd onine_install && ./install
# 알렉스 태스커
cd ~/onine_ws/src
git clone https://github.com/grassjelly/onine_alexa
cd .. && catkin_make
알렉사 스킬 + Lambda + PubNub 설정
알렉사 개발자 콘솔에서 커스텀 스킬 생성 → 인텐트 스키마/발화문 복사 (GitHub 참조)
AWS Lambda에서 Node.js 4.3 함수 생성 → 알렉사 스킬 트리거 연결 → PubNub 키 설정 → ZIP 업로드
PubNub 계정 생성 → 앱 생성 → Publish/Subscribe 키 기록
Pushover 계정/앱 생성 → User Key / API Token 기록 → O'nine 설정에 입력
펌웨어 업로드 및 udev 규칙
# udev 규칙 생성 (시리얼 포트 고정 이름 부여)
rosrun lino_udev lino_udev.py
# Teensy 베이스 → "linobase", Teensy 리프트 → "oninearm" 입력 후 Ctrl+C
sudo cp 58-lino.rules /etc/udev/rules.d/
sudo service udev reload && sudo service udev restart
ls /dev/linobase /dev/oninearm # 확인
# 펌웨어 업로드 (PlatformIO 사용)
roscd linorobot/firmware/teensy && platformio run --target upload # 베이스
cd <리프트_펌웨어_경로> && platformio run --target upload # 리프트
cd <브라치오_펌웨어_경로> && platformio run --target upload # 팔 (우노)
Linorobot 설정 수정 (O'nine 연동용)
bringup.launch에 리프트 시리얼 노드 + URDF 로드 추가
base_link_to_laser TF 수정 (Kinect 포인트클라우드 → 2D 레이저 변환용)
베이스 프레임 base_link → base_footprint 통일
catkin_make로 재빌드
물체 감지 (AR 태그 기반)
ar_track_alvar 패키지로 2cm×2cm AR 마커 인식 → 픽앤플레이스 대상 지정. 대체 가능: find_object_2d, tabletop_object_detector.