아두이노에서 ros 라이브러리를 설치하면 topic publish와 subscribe 등 로스 통신을 할 수 있고
ros 코딩을 할 수 있다.
정확히는, PC와 아두이노 보드(uno, mega 등)는 시리얼 통신을 하는데,
아두이노 IDE에 ros_lib 라이브러리를 설치하고, PC에서 rosserial 패키지를 이용해서
아두이노와 PC 사이의 시리얼 통신을 마치 ROS 토픽을 주고받는 방식처럼 코드적으로 작성할 수 있다는 것이다.
아두이노 ros_lib 라이브러리를 설치해서 ros topic으로 서보모터를 움직여보자.
1. 아두이노 IDE 설치
(다운로드 링크) Linux 버전을 다운받아야 한다.
https://www.arduino.cc/en/Main/Software
위 링크에서 arduino-1.6.xx.tar.xz 파일을 받은 후, 아래 링크를 참고해 설치한다.
Arduino Linux 버전 설치 방법
https://www.arduino.cc/en/Guide/Linux
2. 아두이노 IDE 설정 & ros_lib 설치
3. 서보모터 움직이기
아두이노 보드를 pc에 연결한다.
아두이노 IDE를 연다. 위쪽 메뉴 탭의 '툴'에서 보드와 포트가 잘 설정되어 있는지 확인한다.
예를 들어 보드 "Arduino Uno" , 포트 "dev/tty/ACM0"
위쪽 메뉴 탭에서 파일 -> 예제 -> ros_lib -> ServoControl 을 선택해서 servo control 예제를 띄운다.
위 사진의 코드를 보면 servo.attach(9); 로 되어 있다.
이것은 servo.attach 함수는 서보모터를 몇번 핀으로 컨트롤 할 것인지 지정해주는 함수이다.
함수 인자가 9로 되어 있으므로 9번 핀에 연결해야 한다.
따라서 서보모터를 아두이노 보드에 다음과 같이 연결해준다.
서보모터의 가운데 빨간색 선은 전원 선으로, 5V 전원에 연결해주고, 갈색선은 GND(접지)선이므로 GND에 연결해준다.
주황색 선은 PWM선으로 서보모터 컨트롤을 위한 선이다. 9번 핀에 연결해준다.
pwm 제어 : 일정한 주기 내에서 Duty비를 변화 시켜서 평균 전압을 제어하는 방법
[출처] PWM 제어란?|작성자 BROTHER GEARMOTOR
보드에 servo control예제를 업로드한다.
만약 업로드에서 permision denied 에러가 뜬다면
ls /dev/ttyACM0
sudo chmod a+rw /dev/ttyACM0
이제 ros topic을 보내서 서보모터를 움직여보자.
1. 먼저 roscore 실행
$ roscore
2. rosserial 실행
$ rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600
3. rostopic pub
예제 코드를 보면
ros::Subscriber sub("servo", servo_cb);
즉 서보모터의 각도값을 받는 토픽 이름이 'servo'로 되어 있다.
rostopic list 명령으로 servo 토픽이 존재하는지 확인해보자.
$ rostopic list
/servo 토픽을 확인할 수 있다.
이제 rostopic pub 명령으로 servo 토픽을 publish 해보자.
$ rostopic pub /servo std_msgs/UInt16 "data: 0"
이 명령에서 "data: 0"으로 되어 있는 것을 0~180 사이의 어떤 값으로 바꾸면 모터가 그 각도로 움직일 것이다 .
'기타' 카테고리의 다른 글
2020 여름방학 AI & ROS특강 (0) | 2020.08.07 |
---|---|
자동차 urdf로 slam (2) | 2020.04.13 |