본문 바로가기

Study_ROS

우분투에서 Arduino IDE를 통한 rosserial 사용법

728x90
  • Ubuntu 20.04 환경에서 진행
  • 아래의 사이트에서 Arduino IDE 설치
  • https://www.arduino.cc/en/software
  • 혹은 terminal에서 아래 명령어를 통해 설치
$ wget https://downloads.arduino.cc/arduino-1.8.18-linux64.tar.xz

 

$ wget https://downloads.arduino.cc/arduino-1.8.18-linuxaarch64.tar.xz
  • 만약 CPU가 Jetson Nano나 Raspberry Pi 처럼 ARM 64 bits 기반일 경우, linux arm 64bits 설치 파일을 다운로드

 

$ sudo chmod +x arduino-1.8.18-linux64.tar.xz
  • 설치 완료 후, 설치파일을 홈 directory로 보낸 후 실행 권한 부여
  • chmod(change + mode)는 파일의 모드를 변경하는 명령어
    • 리눅스에서는 각 file 및 directory에 대해 읽기(r), 쓰기(w), 실행(x) 권한을 개별적으로 지정 가능
    • 그리고 위 3가지 권한을 파일을 소유한 사용자, 특정 그룹에 소속된 사용자, 그 외 사용자에 대해 각각 지정할 수 있게 함
    • r, w, x 권한 및 user, group, others에 대한 설정 값을 통틀어 모드(mode)라고 함 
    • 즉 위 명령어는 arduino-1.8.18-linuxaarch64.tar.xz 파일의 모드에 실행 권한을 추가함

출처 : https://recipes4dev.tistory.com/175

 

 chmod [OPTION] [MODE] [FILE]
      OPTION
        -v        : 모든 파일에 대해 모드가 적용되는 진단(diagnostic) 메시지 출력.
        -f        : 에러 메시지 출력하지 않음.
        -c        : 기존 파일 모드가 변경되는 경우만 진단(diagnostic) 메시지 출력.
        -R        : 지정한 모드를 파일과 디렉토리에 대해 재귀적으로(recursively) 적용.
      MODE
        파일에 적용할 모드(mode) 문자열 조합.
          u,g,o,a : 소유자(u), 그룹(g), 그 외 사용자(o), 모든 사용자(a) 지정.
          +,-,=   : 현재 모드에 권한 추가(+), 현재 모드에서 권한 제거(-), 현재 모드로 권한 지정(=)
          r,w,x   : 읽기 권한(r), 쓰기 권한(w), 실행 권한(x)
          X       : "디렉토리" 또는 "실행 권한(x)이 있는 파일"에 실행 권한(x) 적용.
          s       : 실행 시 사용자 또는 그룹 ID 지정(s). "setuid", "setgid".
          t       : 공유모드에서의 제한된 삭제 플래그를 나타내는 sticky(t) bit.
          0~7     : 8진수(octet) 형식 모드 설정 값.
  • chmod 명령어의 형태

 

$ tar -xvf arduino-1.8.18-linux64.tar.xz
  • 권한 부여 후 압축 해제
  • tar (Tape Archiver)는 여러 파일들을 하나로 압축하거나 압축을 해제할 때 사용
    • Archiver는 여러 파일들을 하나로 합칠 때 사용하는 프로그램
  • tar -xvf 는 뒤의 파일을 압축 해제하는 명령어
$ cd ~/arduino-1.8.18/
$ sudo ./install.sh

 

  • 압축 해제 후 arduino-1.8.18 directory에 들어가서 관리자 권한으로 install.sh 실행
$ su
$ su [lim]
  • sudo 명령어 외에도 위처럼 su 명령어를 통해 관리자 계정으로 전환 가능
  • su [계정이름] 명령어를 통해 일반 계정으로 전환 가능

 

$ sudo apt-get install ros-noetic-rosserial-arduino
$ sudo apt-get install ros-noetic-rosserial
  • rosserial-arduino 설치

 

  • Tools -> Library Manager에서 rosserial 설치

 

 

sketchbook의 directory 확인

$ cd /home/lim/Arduino/libraries
  • Sketchbook의 directory 확인 후 해당 위치로 이동
  • Sketchbook은 Linux Arduino가 sketch(Arduino에 upload 시키는 코드)들을 저장하는 directory
  • 보통 home directory에서 sketchbook이나 Arduino로 표시된다
  • 'lim'은 필자의 username

 

$ rm -rf ros_lib
$ rosrun rosserial_arduino make_libraries.py .
  • ros_lib 제거 후 rosserial_arduino 패키지의 make_libraries.py 노드를 실행하여 roslib rebuild
    • roslib는 ROS의 기본 Dependency 및 support Library로써, ROS Client Library 구현에서 공유되는 수많은 data 구조와 tool들이 포함된 package
    • rosserial에서 사용되는 roslib를 현재 ROS 버전에 맞게 재설정해야 한다
    • Rebuild 후  'ros_lib'라는 예제를 볼 수 있다

 

 

  • 위 과정 진행 후 코드를 upload하려 할 때 아래와 같은 오류를 만날 수 있다

  • /home/lim/Arduino/libraries/Rosserial_Arduino_Library/src/ros directory에 있는 msg.h 파일을 열고 아래와 같이 수정해주면 된다 (왼쪽 -> 오른쪽)

cstring -> string.h

  • #include<cstring>은 더이상 동작하지 않아 string.h로 바꿔줘야 함

std::memcpy -> memcpy

  • memcpy 함수는 더이상 std의 member가 아님

 

- "hello world!" 예제 실행

/*
 * rosserial Publisher Example
 * Prints "hello world!"
 */

#include <ros.h>
#include <std_msgs/String.h>

ros::NodeHandle  nh;

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

char hello[13] = "hello world!";

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
}

void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(1000);
}
  • Upload 진행 후 각각 다른 터미널창에서 아래의 명령어들 입력
$ roscore
$ rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600
$ rostopic echo chatter

 

 

실행 결과 화면

 

 

 

- OpenCR 사용법

  • OpenCR 사용을 위해선 아래의 주소를 Arduino의 Additional Borad URL에 복사
https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/arduino/opencr_release/package_opencr_index.json

 

  • 복사 후 OpenCR Board Manager 설치

  • OpenCR에 코드를 upload하려 할 때 아래와 같은 오류를 만날 수 있음
  • fork/exec /home/lim/.arduino15/packages/OpenCR/tools/opencr_gcc/5.4.0-2016q2/bin/arm-none-eabi-g++: no such file or directory Error compiling for board OpenCR Board.
$ sudo apt-get install libncurses5-dev:i386
  • 위 명령어를 통해 오류 해결

 

 

 

 


참고 자료 : 

https://recipes4dev.tistory.com/175

 

리눅스 chmod 명령어 사용법. (Linux chmod command) - 리눅스 파일 권한 변경.

1. 리눅스 파일 사용 권한 리눅스에서, 파일(File)을 사용해 할 수 있는 작업은 크게 세 가지로 나눌 수 있습니다. 파일에 저장된 데이터를 읽기. (r = read). 파일에 데이터를 쓰기. (w = write). 파일 실

recipes4dev.tistory.com

https://linuxopsys.com/topics/install-arduino-ide-on-ubuntu-20-04

 

How to Install Arduino IDE on Ubuntu 20.04

Learn how to install Arduino IDE on Ubuntu 20.04. There are three different ways to install Arduino on Ubuntu - using the official installer script, using the snap package, and apt.

linuxopsys.com

https://stackoverflow.com/questions/69671511/mismatched-protocol-version-in-packet-error-lost-sync-or-rosserial-python-is-fr

 

Mismatched protocol version in packet Error: lost sync or rosserial_python is from different ros release than the rosserial clie

I am using a raspberry pi 4 mode B to interface communicate with a Teensy 4.0. I'm using ROS noetic on Ubuntu 20.04. I've flashed the code to the Teensy successfully using platformio. I have a prob...

stackoverflow.com