ROS1은 TCP/IP 프로토콜을 통하여 Node끼리 통신이 가능합니다. 그러나 Arduino와 같은 인터넷 연결이 안 되는 MCU는 TCP/IP 프로토콜로 통신하기 어렵기 때문에 rosserial package를 설치하여 Arduino와 Serial 통신이 가능하도록 설정해봅시다.
1. Arduino IDE Setup
먼저 아두이노 IDE를 설치해야 합니다. 설치 링크는 아래와 같습니다. 설치 후 Arduino가 설치된 위치를 기억해 주세요! 보통 user home 폴더에 설치가 됩니다
https://www.arduino.cc/en/software
2. install rosserial
버전에 맞는 rosserial package를 설치해주세요
$ sudo apt-get install ros-noetic-rosserial-arduino
$ sudo apt-get install ros-noetic-rosserial
3. arduino IDE Libraries 에 ros_lib 추가
Arduino IDE에서 ros_lib를 사용하려면 라이브러리를 추가해야 됩니다. 1번에서 설치한 아두이노 경로에 libraries 폴더에서 다음과 같은 명령어를 실행합니다. 아래 명령어가 잘 실행된다면 Arduino IDE 메뉴 중에 File > Examples를 보시면 ros examples가 추가된 것을 확인 가능합니다.
$ cd <sketchbook>/libraries
$ rosrun rosserial_arduino make_libraries.py .rosserial/rosserial_arduino/src/rosserial_arduino
<shetchbook>은 Arduino가 설치된 경로를 뜻합니다.
3-1. serialClient.py import queue 에러
위 명령어를 실행하던 도중 위 제목과 같은 에러가 발생했었습니다. 저는 구 부분을 다음과 같이 수정하여 해결했습니다.
try:
import queue
except ImportError:
import Queue as queue
4. Arduino에서 topic Subscriber 구현 및 테스트
arduino에서 topic을 한번 받아 봅시다. 아래 코드는 모터 제어를 하던 코드이여서 제어 코드를 제거한 후 ROS topic 관련 소스코드만 남겨놨습니다.
#include <ros.h>
#include <std_msgs/Empty.h>
ros::NodeHandle nh;
void messageCb( const std_msgs::Empty& toggle_msg){
digitalWrite(13, HIGH-digitalRead(13)); // blink the led
}
ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );
void setup()
{
pinMode(13, OUTPUT);
nh.initNode();
nh.subscribe(sub);
}
void loop()
{
nh.spinOnce();
delay(1);
}
$ rosrun rosserial_python serial_node.py /dev/ttyUSB0 // serial 통신을 위한 Node 오픈
$ rostopic pub toggle_led std_msgs/Empty --once
정상적으로 동작 된다면 LED가 켜지고 꺼지는 것을 확인해 보실 수 있습니다. 다만 사용 시에 몇 가지 유의사항이 있습니다.
- 위 노드를 실행했을때는 이미 serial 사용 중이므로 아두이노 upload가 불가능합니다.
- Serial baudRate를 통일시켜줘야 합니다.
- Serial.println 혹은 Serial.print를 사용하면 안 됩니다.
5. keyboard로 motor control 하기
PC에서 키보드를 입력했을 때 모터 RPM을 변경 가능하도록 만들 수 있습니다
'ROS' 카테고리의 다른 글
[Nav2] AMCL(Adaptive Monte Carlo Localization) package 분석 (0) | 2024.01.09 |
---|---|
[ROS2] Callback group 개념 및 Deadlock 문제 해결 (1) | 2024.01.04 |
[ROS2] Life cycle node 개념 및 Nav2 예시 살펴보기 (0) | 2024.01.04 |
[ROS2] DDS와 RMW 개념 및 QoS 호환성 확인 (0) | 2023.12.05 |