2016년 2월 29일 월요일

미션 플래너를 이용한 Erle-copter 드론 캘리브레이션

3DR의 IRIS+, X8+는 어느 정도 캘리브레이션이 되어 있으나, Erle copter는 그렇지 못하다. 하나씩 설치하고, 재설정해 주어야 한다. 그래서, 드론을 띄우면, 중심 위치에 호버링하기 매우 힘들다. 이런 이유로 mission planner를 이용해 캘리브레이션을 할 필요가 있다.

기종은 다르지만, 모두 APM (Ardupilot Mega) 기반 미션 플래너를 사용하고 있다.

다음은 캘리브레이션과 관련된 작업 순서 참고 문헌이다.


2016년 2월 28일 일요일

드론 카메라 짐벌(gimbal) 마운팅 및 오작동 문제 해결

짐벌(gimbal)은 드론 등과 같이 이동하는 장치에 마운팅하여, 데이터를 캡쳐하고자 하는 센서의 방향, 자세 등을 조정해 주고, 이동 장치에서 오는 진동을 상쇄시켜, 캡쳐된 센서 데이터의 노이즈를 줄여주는 역할을 한다.

이 글은 드론에 부착하는 짐벌 중 가장 많이 사용하고 있는 타롯 짐벌(Tarot Gimbal)을 드론에 마운팅하기 위해 작업해야 하는 사항을 정리해 본다.

이 글에서 다루는 타롯 짐벌은 3DR에서 설정이 모두 끝난 상태에서 판매되고 있는 3DR Tarot 2D gimbal, aliexpress 에서 구매할 수 있는 가격은 저렴하나 설정이 안되어 있는 Tarot 2D gimbal 두 가지 종류이다.

1. 3DR Tarot 2D gimbal 설치하기
3DR에서 설정이 다 되어 있는 Tarot 2D gimbal 을 구매하면, 다음 영상 및 레퍼런스를 참고해 따라하면, 손쉽게 설치할 수 있다.


보통, 이와 같은 기성품은 설정이 미리 잘 되어 있고, 캘리브레이션되어 있어, 따라만 하면 큰 문제 없이 정상 작동된다.

만약, 짐벌이 기성품이 아니라면, 다음 글을 확인하면서, 조립 및 설정하길 바란다.

2. 2 Axis Tarot Gyroscope 컨트롤러 기반 Tarot 2D gimbal 직접 조립/설정하기
짐벌은 aliexpress 등에서 쉽게 구매할 수 있다. 타롯 짐벌을 별도 구매하면, 다음과 같은 부품들을 볼 수 있다.

여기서 다음처럼 생긴 것은 컨트롤러로 짐벌 마운트와 IMU센서 및 짐벌 모터를 제어한다.

컨트롤러가 없다면, 다음 부품을 여기서 구매한다.
  • 2 Axis Tarot Gyroscope ZYX22 Gyro Fr TL68A08 T-2D Brushless Gimbal FPV

Tarot Gimbal 조립 방법은 다음 영상을 참고하시길 바란다.


3. 짐벌 동작 파라메터 설정하기
짐벌 마운팅 후에 전원을 연결해 보면, 정상 작동하지 않고 짐벌이 진동(vibration)하는 경우가 꽤 많다. 이 경우에는 짐벌 파라메터 설정이 필요하다. 본인의 경우에도 진동문제가 있어, 설정이 필요했다. 개별적으로 부품을 구매해 DIY하는 경우 많이 발생되는 문제이다.

우선 다음 링크에서 타롯 짐벌 컨트롤러를 모니터링하고 펌웨어를 업데이트할 수 있는 프로그램을 다운로드 받는다. 현재 프로그램은 1.4버전과 1.5버전이 있는 데, 본인의 경우 1.4버전으로 테스트하였다.
다운받은 프로그램을 실행하자. 먼저, 펌웨어를 업그레이드하는 것이 좋다. 다음 영상을 참고하여 두개의 펌웨어를 업그레이드한다.


업그레이드가 정상으로 되었다면, 다음과 같이 펌웨어 버전을 확인할 수 있다.



이제, 캘리브레이션을 한다. 캘리브레이션은 다음 영상을 확인해 따라한다. 큰 순서는 짐벌에 마운팅된 카메라 전면을 천장 위로 향하게 하고, 프로그램의 캘리브레이션 버튼을 클릭하면 된다.


그리고, 프로그램의 'Motor on'버튼을 클릭하면, 짐벌 모터가 카메라의 자세를 자동 제어한다. 만약, 이 경우에도 진동이 발생되면, 다음 영상을 보고, 모터 파라메터 값을 적절히 설정해 본다. 이와 관련된 레퍼런스에서는 마운팅된 카메라가 무거울 경우, 모터 구동 전압을 높이라는 설명이 있으나, GoPro의 경우에는 디폴트값으로도 큰 문제 없이 짐벌이 동작되었다.


만약, 모두 잘 조립해 설정하였음에도 불구하고 진동과 같은 문제가 발생하면, 다음 레퍼런스를 참고해 해결한다.

다음은 설치 후 잘 캘리브레이션된 짐벌의 실행 모습이다.



4. 마무리
사실, 특정 목적을 위해 직접 드론 장비들을 DIY 조합해 만들다보면, 이와 같은 일들이 많이 발생한다. 이 글에 소개된 짐벌의 경우만 해도, 짐벌장비의 정보를 확인하고, 구매한 후, 조립하고, 진동 등 문제를 해결하기 위한 구글링/설정/캘리브레이션 등으로 많은 시간이 소비되었다. 하지만, 이런 과정을 통해, 좀 더 깊이 센서를 마운팅하는 기술을 알 수 있고, 이를 통해 다양한 응용력을 키울 수 있다. 만약, 완성된 것을 구매만 하여 사용하였더라면, 연구 개발에 필요한 깊은 아이디어를 얻기가 어려울 것이다.

2016년 2월 27일 토요일

Erle copter 드론과 Mission Plennar 연결 / 시운전

로보틱스 기술과 드론은 밀접한 관계가 있다. 로보틱스 기술을 잘 활용하면, 드론을 지능적으로 운용할 수 있다.

로보틱스 기술은 ROS(robot operating system)의 예와 같이 급속히 표준화되고 개방화되고 있다. ROS를 이용하면, 다양한 로보틱스 응용을 손쉽게 개발할 수 있다.
드론의 경우, Arducopter와 같은 오픈소스 기술도 많이 활용되고 있으나, ROS를 직접 드론에서 구동하기 위한 노력도 많아지고 있다. Arducopter에서 제공하는 미션 플래너 기술을 이용하면, 드론을 실시간으로 모니터링할 수 있다. 하지만, 드론의 자세, 위치, 속도를 모니터링하는 것만으로는 드론 운용에 대한 일부 유스케이스만 커버할 수 있을 뿐이다.

ROS를 잘 활용하면, 다음과 같은 유스케이스를 구현할 수 있다.
  • 인프라스트럭처 시설물 센싱에 필요한 데이터를 효과적으로 캡쳐할 수 있다. 
  • 센싱 중 충돌할 수 있는 물체를 자동으로 피할 수 있다.
  • 실시간으로 데이터를 캡쳐하면서, 데이터의 특징이나 정보를 추출해, 원격으로 서버에 전달할 수 있다.
  • 드론이 캡쳐하는 데이터의 정보를 실시간으로 추적/관리할 수 있다.
이 글은 ROS를 직접 드론에서 구동하는 Erle copter 드론과 미션 플래너 연결 방법에 대한 것이다.

1. 개요
Erle copter는 ROS가 설치된 임베디드 컴퓨터가 설치되어 있는 Erle Brain이란 제어장치를 가지고 있다.


Erle Brain을 기반으로 모든 센서, 액추에이터를 제어하고, 지상국(ground station)과 통신하여, 필요한 데이터를 주고 받을 수 있다.

다음 링크를 참고한다. 이 문헌은 UDP 방식으로 미션플래너와 Erle Brain을 연결한다.

2. Erle Brain과 노트북 USB 연결
다음 그림과 같이 USB로 Erle Brain과 노트북을 연결한다.

그럼, 장치 관리자에 가상 이더넷인 RNDIS/Ethernet Gadget 드라이버가 생긴다. 다만, 드라이버 설치가 제대로 안되는 경우가 있어, 이와 관련해서는 이 글 참조의 RNDIS 문헌을 참고해 설치해야 한다.

그럼, 다음과 같이 가상 이더넷 드라이버가 정상적으로 동작한다. 


이제, 이 이더넷의 IP주소를 설정한다. Erle-Brain의 기본 IP주소를 다음과 같이 설정한다.


3. 미션 플래너 실행 및 UDP 연결
이제, 다음과 같이 미션 플래너를 실행하고, UDP모드로 설정한 후, 연결 버튼을 클릭한다.


UDP 포트 번호는 6000으로 입력한다. 그럼, 다음과 같이 연결된다 .


이제, 드론의 파라메터를 수정한다. 이 경우에는 비행 모드를 AltHold로 설정하였다.


다시 드론 전원을 껐다 키고, 미션 플래너를 연결하면, 설정값 대로 AltHold 비행 모드가 되어 있는 것을 확인할 수 있다.



4. 드론 시운전 테스트
모두 설정하였다면, 이전 글을 참고해, 모터 테스트를 해 본다.


이제 외부에서 테스트해 본다. 

시운전 전 드론 LED 표시 상태



드론 호버링(hovering) 시운전 모습

아직 호버링 비행이 안정적이지는 않다. ESC(electronic speed control) 등 캘리브레이션이 필요하다. 

5. 마무리

ROS기반 드론은 다양한 센서 연동을 통한 실시간 데이터 처리와 전송이 가능하다. 무엇보다, ROS의 수많은 센서 및 액추에이터 드라이버를 공짜로 사용할 수 있다. 이는 ROS기반 드론의 큰 잠재력이다. 이런 기술을 잘 활용한다면 드론 기반의 다양한 응용 서비스를 개발할 수 있을 것이다.


참고 내용



Arducopter기반 3D Robotics IRIS 드론과 Mission Planner 간 연결 / 설정 / 시운전 테스트

이 글은 아두콥터 기반 3DR IRIS+ 드론과 미션 플래너를 연결하고 설정하는 방법에 대한 것이다. 간단해 보이지만, 내가 원하는 작업을 하는 데, 많은 시행착오와 시간이 필요했다.

미션 플래너는 드론의 비행 모드 및 파라메터들을 설정하기 위해 필요하다. 예를 들어, 드론 기반 3차원 이미지 스캔을 위해서는 실내/실외 스캔 작업을 고려해야 하나, 처음 드론이 설정되어 있는 모드는 GPS Lock이 걸려 있으므로, 실내에서 작업할 때 문제가 된다. 다만, 실내에서 정밀한 드론 제어를 위해서는 별도의 광학 추적(optical tracking) 시스템 등이 필요하다.



여기서는 지금까지 다른 일들로 인해 시간이 없어, 약간씩 짬날때마다 작업했던 미션 플래너 설정 작업에 대한 내용을 남기고자 한다.

1. 미션 플래너 설치
다음 링크에서 미션 플래너를 설치하고, 컴퓨터를 재부팅한다.


2. 드론과 노트북 연결
드론과 노트북을 USB케이블을 이용해 다음과 같이 연결한다.


연결하면, 다음과 같은 새로운 COM포트(이 경우에는 Teensy USB Serial)가 생성된다. COM포트 번호를 기억해 둔다.



3. 미션 플래너 실행 및 연결
미션 플래너는 관련 유튜브 동영상을 확인한다. 관련 영상은 어떻게 미션 플래너를 사용하는 지 설명되어 있다. 미션 플래너를 실행하기 전에 한번 훝어 본다. 

미션 플래너를 실행하고, 동영상에서 지시하는 바 대로, 드론과 통신할 COM포트와 적절한 BPS를 선택하여, 연결한다. 그럼, 동영상처럼, 드론과 노트북이 연결된다.

참고로, 드론과 미션 플래너 간의 연결 프로토콜은 MAVLink 이다. MAVLink는 소형 UAV와 통신을 위한 오픈소스기반 프로토콜로 Lorenz Meier 에 의해 2009년 초에 발표되었다.

연결되면, 다음과 같이 고도 및 자세 각도인 Altitude, Yaw가 드론의 IMU센서에 따라 실시간으로 반영되는 것을 알 수 있다.




4. 미션플래너 살펴보기
미션플래너의 기능을 살펴보자. 우선 왼쪽 화면에 보면, 고도계 등 계기판이 있다.


계기판을 보면, 큰 글씨로 고도계, 속도, WP(work place)로 부터 드론까지 거리, 드론 자세 각도(Yaw), 상승 속도(vertical speed) 등이 표시되어 있다. 아울러, 고도계에서 보면, 드론 고도 및 자세 각도 표시 눈금과 배터리 전압 (그림에서는 12.30V) 등이 표시되어 있고, GPS시간 등이 우측 상단에 표시된다.

각 탭에는 다양한 파라메터 설정 및 센서 값들이 다음과 같이 표시된다.


5. 자동 비행 경로 설정 화면
그림과 같이 FLIGHT PLAN 화면을 이용하면, 비행 경로를 입력할 수 있다. 아래는 운동장에 경로를 입력해 본 모습이다. 첫번째와 마지막 포인트는 TAKEOFF, LAND 명령으로 설정하였다.



6. 초기 설정 화면 (INITIAL SETUP)
초기 설정 화면에서는 다음과 같은 기능을 제공한다.
  • 드론의 MAVLink 펌웨어 업데이트
  • 드론 자세 캘리브레이션(calibration)
  • 라디오 컨트롤 캘리브레이션
  • 비행 모드 설정 (Flight Modes) - AltHold(기본), Auto, Loiter, Stabilizer 등을 설정
  • FailSafe 기능 설정
  • 배터리 모니터링 센서 설정
  • 소나(sonar) 센서 설정
  • 모터 캘리브레이션
  • 카메라 짐벌(gimbal) 설정
  • 기타 다양한 센서 등 설정


7. 설정/튜닝 (CONFIG/TUNING)기본 튜닝 등 다양한 튜닝 방식을 지원한다.
  • 기본 튜닝 - roll, pitch, hover, climb sensitivity 등 민감도를 조정한다.
  • 표준 파라메터 설정 - 아밍(arming) 체크 설정, 배터리 모니터링 설정, 카메라 서터 설정, 채널 7 옵션 (Land 등) 설정, 채널 8 옵션 설정,  GPS Glitch (문제 발생) 보호 활성화 설정 등 모든 파라메터 옵션 설정 기능 

  • 어드밴스 파라메터 - 각종 센서 등 좀 더 어드밴스한 파라메터 설정
  • 전체 파라메터 리스트 및 트리 (Full Parameter List / Full Parameter Tree)
  • 플래너 기본 설정

8. 시뮬레이션 화면
가상으로 시뮬레이션할 수 있는 화면을 제공한다.

9. 터미널
APM과 터미널 방식으로 연결하는 기능 제공한다.

10. 시동전(프리암) 안전 체크 (Pre-Arm Safety Check)
드론이 시동전에 비행하기 어려운 문제가 발생하였을 때, 이륙을 방지하고, 사용자에게 에러를 주는 기능이다. 이럴 경우, 보통, 드론의 표시 등이 황색(노란색)으로 점멸(blink)한다.
드론에서 발생된 정확한 에러는 Mission Planner 의 계기판 화면에서 표시되는 적색 메시지 글씨를 통해 확인할 수 있다.

다음은 대표적인 에러들이다.

  • Need 3D Fix : GPS가 3D Fix를 얻지 못하는 경우로, 비행 모드가 GPS 데이터를 요구하는 모드(PosHold, Loiter, Auto 등)인데, GPS신호를 받지 못하거나(실내의 경우), circular fence 옵션이 활성화되어 있는 경우에 발생
  • Check fence : geo fencing (관련 영상) 이 필요한 비행 모드일 때, GPS 신호가 체크되지 않으면 발생. 참고로, Geo-Fencing은 드론 UAV가 정해진 가상의 영역 내에서만 비행하도록 하는 기술이다.
  • GPS Glitch : GPS 자체에 문제가 발생하는 경우
  • RC not calibrated : 송수신기 오류로 라디오 캘리브레이션이 수행되지 않은 상태
  • Check mag field : 지자계센서인 compass failures와 관련된 에러로, 드론 주변 자기장이 너무 강해 문제가 있는 경우 발생
  • Check Board Voltage : 드론 보드의 내부 전압이 4.3V이상이거나 5.8V이하일 때 발생
만약, 시동전 안전 체크에서 발생한 문제가 큰 문제가 없는 에러일 경우에는 다음과 같이 표준 파라메터 설정에서 Arming check 옵션을 Disabled 값 혹은 해당 체크를 Skip하도록 설정하면 된다. 다음은 GPS 체크만 Skip하도록 한 것이다.


참고로 실내에서 비행하고자 할 경우, GPS와 관련된 안전 체크 옵션은 Skip하고, 다음 그림과 같이 다른 GPS옵션도 Disable(GPS Failsafe Enable, GPS Glitch protection enable) 한다.


실내에서 테스트하는 경우는 위와 같이 옵션을 설정하고, 다음과 같이 모터 테스트를 해 본다.

그럼, 다음과 같이 시동(ARMED)되는 것을 확인할 수 있다.



물론 실내에서 RC로도 시동이 잘 걸린다.^^


다음은 에러 내용을 상세히 설명한 참조 문헌이다.

11. Radio module 기반 미션 플래너와 드론 연결
이제 마지막으로 라디오 모듈(radio module)을 이용해 무선으로 미션 플래너와 드론을 연결해 보도록 한다. 사용한 라디오 모듈은 915 MHz이며 아래와 같다. 이를 이용하면, 무선으로 스마트 패드에 라이오 모듈을 연결하고, 안드로이드용 미션 플래너를 통해, 드론을 조정할 수 있다.


이를 다음과 같이 노트북과 USB케이블로 연결하고, 미션 플래너의 연결 버튼을 클릭한다.


다음 영상은 연결 후 원격으로 드론을 테스트하는 모습이다.


다음 영상은 3DR 계열의 중형급 드론인 X8+를 테스트해 보는 모습이다.



12. 기타 참고 사항
파라메터에 대한 상세 설명은 다음 영상을 참고한다.


라디오 안테나와 연결하는 방법은 다음과 같다.


실내 비행과 관련된 응용은 다음을 참고한다.



DIY DRONE의 IRIS 실내 비행 모드

실내에서 DIY 드론의 IRIS 를 비행하려 하면, 에러가 난다.

이는 GPS Lock 이 걸려 있어서 그렇다. 이 때는 GPS 신호가 검출되지 않으면, 드론 비행을 할 수 없다.

이와 관련된 질의 응답 페이지 내용을 남긴다.

요약하면, 미션 플래너에서 GPS lock이 걸리지 않도록, 다음 옵션을 변경하라는 것이다.


MX-64 / MX-28 액추에이터 기반 센서 마운팅 용 로봇암

오늘은 이미지 스캔을 위한 마운팅 프레임과 결속된 MX-64와 MX-28의 ID설정 과정을 정리한다.

1. MX-64 설정
MX-64 스펙은 다음과 같다.

H/W Specification

  • MCU : ST CORTEX-M3 ( STM32F103C8 @ 72MHZ,32BIT)
  • POSITION SENSOR : Contactless absolute encoder (12BIT,360 DEGREE)
  • MOTOR : Maxon
  • BAUD RATE : 8000 bps ~ 4.5 Mbps
  • CONTROL ALGORITHM : PID CONTROL
  • Resolution : 0.088°
  • Running Degree
    • 0° ~ 360°
    • Endless Turn
  • Weight : 126g
  • Dimension : 40.2mm x 61.1mm x 41mm
  • Gear Reduction Ratio :  200 : 1
  • Stall Torque
    • 5.5N.m (at 11.1V, 3.9A),
    • 6.0N.m (at 12V, 4.1A)
    • 7.3N.m (at 14.8V, 5.2A)
  • No load speed
    • 58rpm (at 11.1V)
    • 63rpm (at 12V)
    • 78rpm (at 14.8V)
  • Running Temperature : -5℃ ~ +80℃
  • Voltage : 10  ~ 14.8V (Recommended Voltage 12V)
  • Command Signal : Digital Packet
  • Protocol Type
    • MX-64T (Half duplex Asynchronous Serial Communication (8bit,1stop, No Parity))
    • MX-64R (RS485 Asynchronous Serial Communication (8bit,1stop, No Parity))

MX-64도 이전 글과 마찬가지로 같은 방식으로 Dynamixel serial 과 전원을 연결하고, 다이나믹셀 위저드를 이용해 액추에이터 스캔을 해 보았다.

처음에는 57142 bps로 MX-64가 검출된다. 통신 속도가 마음에 들지 않아, 1000000 bps로 맞춰놓고, 적용을 해 보았다. 그리고는 다시 스캔...

근데 스캔이 안된다. 헐... 갑자기 밀려오는 후회와 짜증... 어쩔수 없이 구글링 삽질... 아래의 문서를 발견하였다.


mini DRC 참가할 때도 골탕먹었던 펌웨어 문제다. 답변에 언급된 펌웨어 복구 방법 설명 문서와 영상을 참고해 조심스럽게 MX-64 펌웨어를 업데이트해준다.


그리고 다시 스캔... 잘 된다.

다시 용기를 내어 1000000 bps로 적용 후 다시 스캔... 다음처럼 정상 검색된다. 기쁘다^^


2. 관절 목표 위치 테스트
이제 목표 위치를 변경해 볼까^^.... 모터 LED가 적색 점멸.. 깜빡 깜빡 blink ... Dynamixel Wizard의 ERROR 표시기에 5번 불이 켜져 있음.. 헐.. 동작 에러 아닌가.. 또 다시 구글링 삽질을 해 보니. 다음과 같은 에러 메시지 설명을 발견하였다.


과부하 에러? 그렇다면, 전압이... 다시 12V 전압을 줄 수 있는 배터리를 찾아 테스터기로 확인해 본 후, 전원 연결 케이블을 만들고, MX-64에 전원 인가해 보았다. 그리고 다시 시도... 잘 된다.^^


3. 관절 회전 각도 리미트 설정
관절에 해당하는 액추에이터는 0에서 360도로 회전하면, 프레임이나 모터 기어가 망가질 수 있다. 로보티즈 액추에이터는 이런 경우, 오버로드 에러가 발생하여, 기어 고장을 예방한다.

액추에이터에는 편리하게도 프로그램에서 제약된 각도 이상으로 동작하는 경우를 막는 파라메터터가 있다. 처음 아무 생각없이, 목표 위치를 설정하면, 최대치 속도로 한계 이상의 각도로 회전된 액추에이터때문에 놀랄 수 있다.

다음과 같이 시작 각도(CW 위치 제한)와 끝 각도(CCW 위치 제한)를 설정한다. 이 액추에이터에는 엔코더가 달려 있어, 현재 각도 위치를 '현재 위치'파라메터를 통해 알 수 있다. 이를 이용해 최대-최소 회전 가능한 각도를 알아낸다. 아울러, 너무 빠르게 회전하면, 동작이 불안해 지므로, 이동 속도 파라메터도 낮춘다. 본인의 경우에는 10 RPM 으로 하였다.


이제 테스트를 해보면, 10 RPM으로 회전 각도가 정해진 범위내에서만 변화되는 것을 알 수 있다.


나머지 액추에이터도 같은 방식으로 설정해 본다.

TTL케이블이 짧아 테스트해 보지 못했던 부분이 있다. 마운팅 부품들을 모두 결속하고, 케이블을 길게 연결 처리한 후 전원을 연결해 다시 테스트해 보았다. 다음과 같이 잘 동작한다.



마운팅할 센서는 ASUS RGBD센서이며, 차 후에 다른 센서 및 그립퍼 마운팅을 고려해서, 프레임을 좀 더 길게 처리했다. 이 부분은 차후 상황에 따라 조정하도록 한다.  
  • 작업 시 주의사항 - 속도, 토크 부하, 위치 최대/최소 리미트 설정에 매우 중의해야 한다. 너무 빠르게 회전해 예상치 못한 곳과 부딧힌다던지, 기구적으로 위치할 수 없는 부분까지 회전하면, 기구나 모터가 망가진다. 아울러, 케이블을 연결할 때도 다른 기구부와 간섭이 일어나지 않도록 주의하여 처리해야 한다. 그렇지 않으면, 기구가 동작할 때 간섭된 케이블이 끊어지거나, 모터의 케이블 연결 부분이 망가져 사용하기 어렵게 된다. 


4. 마무리
이동 속도 등은 전원을 다시 인가하고 확인해 보면 0(최대속도)로 초기화되는 문제가 있다. 이 파라메터는 RAM영역에 저장된다. 이런 파라메터들은 미리 테스트하여 코딩으로 설정해야 한다. 분홍색 영역의 파라메터만 EEPROM에 영구 저장된다.

좀 더 자세한 사항은 다음 메뉴얼을 참고한다.

이것으로 액추에이터에 대한 ID, 통신 속도, 회전 각도 리미트 설정 및 테스트를 끝마쳤다. 이 모든 과정은 처음 시도해보는 상황에서 충전된 배터리/전원 케이블 등이 미리 준비되어 있지 않다면 대략 2~3시간 정도 이상 걸린다. 익숙해 지면 30분에서 1시간 내에 가능하다.





2016년 2월 19일 금요일

로보티즈 액추에이터 및 OpenCM 제어

로보티즈 엑추에이터 제어를 위해 필요한 OpenCM 제어에 대해 간단히 관련 내용을 정리한다. OpenCM 메뉴얼은 다음 링크를 참고한다.
로보티즈의 다이나믹셀은 로봇 연구 개발에 가장 많이 활용되고 있는 액추에이터이다. 모터끼리 연결이 매우 쉽다(데이지 체인 연결 방식). RoboPlus 소프트웨어를 설치한 후, 다이나믹셀 위자드 프로그램을 이용해 간단히 각 모터에 ID를 부여하고, 아두이노와 유사한 OpenCM 을 사용해, 속도나 위치를 설정해 주면, 그에 따라서 동작한다.

1. OpenCM 필수 드라이버 및 통합개발환경 설치
다음 링크에서 OpenCM IDE 도움말을 따라하면서, 관련 필수 드라이버 및 OpenCM 통합개발환경을 설치한다.

http://support.robotis.com/ko/e-manual_kor.htm#software_manual.htm


제대로 설치된다면, 다음과 같이 ROBOTIS Virtual COM Port 가 설치된다.



2. 다이나믹셀 연결 및 RoboPlus 소프트웨어 설치

다이나믹셀을 다음과 같이 연결한다. 상세한 내용은 다음 영상을 참고해서 따라한다.



아울러, 다아나믹셀 시리얼도 다음과 같이 연결한다.



RoboPlus를 설치한다. 그리고, 다음과 같이 실행한다.


다이나믹셀 위자드를 실행해, 다이나믹셀을 검색한다.


앞의 동영상에서 설명한 대로, 따라하면서, 모터의 ID를 설정한다.

3. 코딩
다음과 같이, OpenCM 개발환경에서 샘플을 참고해, 두개의 모터에 대한, 해당 ID의 모터 스피드나 위치를 설정해 준다.


그럼 다음과 같이 동작한다.


이제 센서를 마운팅한 로봇암을 테스트할 수 있도록, OpenCM으로 코딩해, 다음과 같이 테스트해본다.

사실, 로보티즈 다이나믹셀(dynamixel) 리미트 값 제어가 쉽지 않다. 여러번의 시행착오를 해서 적절한 값을 설정해야 한다. 참고로, 토크 부하값이 넘어가면, 해당 모터가 동작하지 않으며, 그 이후의 데이지 체인에 연결된 모터들은 먹통이 된다.

테스트에 사용된 코드는 다음과 같다. 테스트 전에 Dynamixel Wizard를 이용해 아래부터 마운트 엔드까지 사용된 모터를 1, 2, 3, 4로 설정한 상태이다. 참고로, 이동 속도(moving speed)를 안전하게 설정하기 위해, 수치를 10으로 설정하였다.

#define DXL_BUS_SERIAL1 1  //Dynamixel on Serial1(USART1)  <-OpenCM9.04
#define DXL_BUS_SERIAL2 2  //Dynamixel on Serial2(USART2)  <-LN101,BT210
#define DXL_BUS_SERIAL3 3  //Dynamixel on Serial3(USART3)  <-OpenCM 485EXP
/* Dynamixel ID defines */
#define ID_NUM1 1
#define ID_NUM2 2
#define ID_NUM3 3
#define ID_NUM4 4
/* Control table defines */
#define GOAL_SPEED 10
#define GOAL_POSITION 30
#define CCW_Angle_Limit 8
#define CONTROL_MODE 11

Dynamixel Dxl(DXL_BUS_SERIAL1);

void setup() {
  // Dynamixel 2.0 Protocol -> 0: 9600, 1: 57600, 2: 115200, 3: 1Mbps 
  Dxl.begin(3);
  
  //AX MX RX Series
  Dxl.jointMode(ID_NUM1); 
  Dxl.jointMode(ID_NUM2); 
  Dxl.jointMode(ID_NUM3); 
  Dxl.jointMode(ID_NUM4); 
  
  Dxl.writeWord(ID_NUM1, 32, 10);  // MOVING SPEED
  Dxl.writeWord(ID_NUM2, 32, 10);
  Dxl.writeWord(ID_NUM3, 32, 10);
  Dxl.writeWord(ID_NUM4, 32, 10);
  Dxl.writeWord(ID_NUM1, 33, 20);
  Dxl.writeWord(ID_NUM2, 33, 20);
  Dxl.writeWord(ID_NUM3, 33, 20);
  Dxl.writeWord(ID_NUM4, 33, 20);
  
  Dxl.cwAngleLimit(ID_NUM1, 680);   // 60 degree
  Dxl.ccwAngleLimit(ID_NUM1, 1500);  // 130 degree 
  Dxl.cwAngleLimit(ID_NUM2, 2000);   
  Dxl.ccwAngleLimit(ID_NUM2, 3590);  
  Dxl.cwAngleLimit(ID_NUM3, 230);  
  Dxl.ccwAngleLimit(ID_NUM3, 1150);   
  Dxl.cwAngleLimit(ID_NUM4, 100);   //CW Angle Limit 
  Dxl.ccwAngleLimit(ID_NUM4, 4000);  //CCW Angle Limit 
  
  //XL-320
  //Dxl.writeByte(ID_NUM, CONTROL_MODE, 1);
  
  //test
  //pinMode(BOARD_LED_PIN, OUTPUT);    
}

void loop() {
  //forward
  Dxl.goalPosition(ID_NUM1, 700); 
  Dxl.goalPosition(ID_NUM2, 2500); 
  Dxl.goalPosition(ID_NUM3, 350); 
  Dxl.goalPosition(ID_NUM4, 3000); 
  delay(5000);
  //stop
  Dxl.goalPosition(ID_NUM1, 1200); 
  Dxl.goalPosition(ID_NUM2, 3000); 
  Dxl.goalPosition(ID_NUM3, 500); 
  Dxl.goalPosition(ID_NUM4, 4000); 
  delay(5000);
}

다이나믹셀 제어 변수 메뉴얼은 다음을 참고한다.


4. 응용 사례
이를 이용하면, 로봇암 등 다양한 어플리케이션을 개발할 수 있다.



다음은 참고 사이트 및 자료이다.