본문 바로가기

IT/ROS

[ROS] 8. ROS + Arduino 와 통신 Rosserial

반응형

☞ 메인보드 : Jetson Nano Developer Kit

운영 체제 : Ubuntu 18.04 - JetPack 4.3

☞ ROS 버전 : Melodic

☞ 언어 : C++

 

 

 

 

 


목차

1. 아두이노

2. rosserial

 

 

 


 

 

 

 

 

 

① 아두이노

 

https://www.arduino.cc/

 

현재 1.8.12 버전이 최신 버전인데 , 최신 버전은 오류가 많을 것 같아 이전 버전을 다운로드하였다. 소프트웨어 다운로드 창 아래쪽을 보면 아래와 같이 이전 버전을 다운로드할 수 있도록 해 놓았다. (나는 1.8.9 버전을 받았음)

 

[+ Jetson Nano의 경우 64bit ARM 아키텍처(aarch64)로 되어있는 것을 다운로드하여야 실행 가능하다. 아두이노 1.8.7 버전 아래의 Linux ARM 다운로드는 32bit 기준으로 릴리즈 했기 때문에 Jetson에서 실행할 수 없다.]

 

 

 

 

나는 Linux ARM 64 다운로드가 있는 것 중에 최신 버전의 바로 전 버전을 다운로드하였다. tar 압축 파일로 다운로드하여지는데,  먼저 다운로드 디렉터리에서 홈으로 다운로드 파일을 보내고 실행 권한을 부여해주기 위해 터미널 창을 열어서 입력하자.

 

sudo chmod +x arduino-1.8.9-linuxaarch64.tar.xz

 

압축 풀고,

 

tar -xvf arduino-1.8.9-linuxaarch64.tar.xz

 

arduino-1.8.5 디렉터리에 들어가서 su 명령어로 관리자 계정(root)으로 전환하고./install.sh을 입력하여 아두이노를 설치한다.

(관리자 계정 비밀 번호를 모른다면 'sudo passwd' 명령어를 사용하여 비밀번호를 재설정하고 진행하자.) 

 

cd ~/arduino-1.8.9/
su
./install.sh
su [username]

 

 

 

 

taewon@taewon-desktop에서 왼쪽에 있는 taewon 이 현재 활성화된 계정이다.

설치를 완료하고 나서 관리자 계정(root)에서 일반 계정(taewon)으로 전환하기 위해서는 'su 계정명'을 입력하면 된다.

(그리고 내 이름은 taewon이 아니다.)

 

만약에 arduino를 실행했을 때,  /java/bin/java: no such file or directory의 에러나 exec 형식 오류 등의 에러가 발생한다면, 본인의 아키텍처에 맞는 아두이노를 설치했는지 다시 확인하기 바란다.

 

 

아두이노를 실행한다. (sudo를 쓰고 실행하면 허가 거부 문구가 없어진다. 물론 sudo로 실행했기 때문에 저장한 sketch도 root에 생긴다.)

 

arduino

 

 

 

 

 

실행하면 위 사진과 같이 글자가 미쳐버려 메뉴 창에 무엇이 적혀있는지도 모르는 상황이 발생한다. 침착하게 ctrl + , (콤마)를 눌러 환경설정 창을 켜고 'System Default'라고 적힌 자리를 클릭해 English로 언어를 변경한다. (아래에서 왼쪽 버튼을 클릭해야 활성화할 수 있다.)

 

 

 

 

 

 

 

아두이노는 아직 ros.h 가 뭔지 모르니 라이브러리를 설치하기 위해서는 메뉴 창의 Sketch -> Include Library -> Manage Libraries를 클릭해야 한다. 아래와 같이 라이브러리를 검색하는 칸에  rosserial을 검색하고 단 하나 나오는 라이브러리를 다운로드하여주자.

 

 

 

 

 

 

 

 

 

이제 아두이노가 ros.h를 이해할 수 있게 됐다. 

 

 

 

 

※ 라이브러리 추가

 

 

위에서 Arduino 소프트웨어의 Library Manager 에서 rosserial을 설치했는데 안 되는 경우가 있다. 그럴 경우에는 터미널 창을 2개 열어서 다음 작업을 해주면 된다.

 

 

//arduino-1.8.19 버전이 아니라면 아래의 디렉터리 주소를 그 버전에 맞게 바꿔주면 된다.
rosrun rosserial_arduino make_libraries.py ~/arduino-1.8.19/libraries

 

 

Multiple libraries were found for "ros.h" 라는 오류가 나오면 위에서 설치한 것 때문에 ros 라이브러리가 2개 있는 거니까 방금 rosrun 명령으로 설치한 ~/arduino-1.8.19/libraries/ros_lib를 남겨두고 나머지는 삭제해주자. 에러 내용에 라이브러리 경로가 있으니까 직접 디렉터리에 들어가서 삭제해주면 된다. [유저 디렉터리에서 Arduino 디렉터리가 만들어져 있을 거다. 이를 삭제하면 된다. 디렉터리 이름에 버전이 있는 1.8.19에 라이브러리를 넣어주길 바란다.]

 

 

 

 

 


② rosserial

 

☞ rosserial 단점 : 퍼블리셔, 서브스크라이버의 개 수 및 송, 수신 버퍼 크기를 미리 정해야 함

 

☞ float64 : MCU는 64비트 실수 연산 지원 X  ->  32비트

 

☞ 통신속도 : UART의 115200 bps와 같은 속도로는 메시지의 개 수가 많아지면 느림

 

 

 

 

rosserial을 사용하기 위해 다운로드한다. (나는 아마 아두이노를 받기 전에 이걸 설치했던 것 같다....)

 

sudo apt-get install ros-melodic-rosserial ros-melodic-rosserial-arduino

 

아두이노를 Jetson에 연결한다. 아래 명령어를 터미널에 입력하여 직렬 포트 연결이 되었는지 확인하자.

 

dmesg | grep tty

 

 

 

 

마지막 줄을 보고 ttyACM0 포트에 장치(아두이노)를 연결했음을 알 수 있다.

 

sudo chmod a+rw /dev/ttyACM0

 

포트 사용을 위해 모든 유저에게 읽고 쓰는 권한을 줍니다.

 

 

아두이노 예제 맨 아래에 보면 rosserial 예제가 있다... 그중에 hello world 예제를 클릭해 업로드하고 터미널 창을 3개 켠다. 아래의 명령을 모두 입력해주면 hello world가 보일 것이다.

 

roscore
rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600
rostopic echo chatter

 

 

 

 

 

 

 

 

반응형