본문 바로가기

라즈베리파이

[라즈베리파이4] ROS 설치하고 GPIO 읽어서 topic 발행하기

아 오늘은 라즈베리파이 4 8Gㅠ 보드에서 ROS(Noetic)를 설치라고, GPIO 핀을 통해서 받은 정보를 사용해서 topic을 던지는 방법을 알아보겠습니다.

 

크게 순서는 아래와 같으니, 필요한 부분만 발췌해서 읽으셔도 무방합니다.

 

0. 삽질기.. (이건 넘어가셔도 아무 문제없습니다.)

1. 라즈베리파이에 OS 설치하기

2. 세팅 및 Ubuntu Desktop 설치하기

3. ROS noetic 설치하기

4. RPi.GPIO 설치하기

5. VNC 설치하기

6. vsCode 설치하기

7. 코드 작성하기~!

 

 

0. 삽질기..

우선 기존에 저는 파이에 라즈비안을 설치해서 사용 중이었습니다..

정확히는 raspbian bookworm(12)을 사용하고 있었는데, 해당 OS는 아쉽지만 ROS Noetic을 지원하지 않았습니다.

그래서 찾아보니 raspbian 중 buster(10) 버전이 유일하게 ROS Noetic을 유일하게 지원하는 버전이었습니다.

 

문제가 있다면.. 우선 해당 버전은 라즈베리 파이 4에서는 공식적으로 지원을 중단하였습니다.

그래도 이미지 파일을 구해서 sd 카드에 구워 실행을 해보니 문제가 발생했습니다.

해당 OS는 32bit이고, 제 파이는 8GB인지라.. 실행 자체가 안되더군요...

(이건 다른 문제가 있을 수도 있습니다.. 몇 분은 실행까지는 된다는 글도 봤습니다..)

 

그래서 라즈비안은 깔끔하게 포기하고, Ubuntu를 설치하기로 합니다.

 

이전에 Ubuntu에서는 ROS를 설치한 경험이 있기 때문에..

[ROS1] ROS Noetic 설치 - rosbridge를 돌리기 위한 노력 (tistory.com)

 

[ROS1] ROS Noetic 설치 - rosbridge를 돌리기 위한 노력

갑자기 필요한 프로그램에서 ROS1을 쓰기를 요구하는 경우가 생겨버렸다. 무슨 오류가 오류가 그렇게 많은지... 혹시 다음에도 헤메이진 않을지 걱정되어 짧게 설치 방법을 정리하겠다. 허허.. ana

itgear.tistory.com

비교적 수월할 줄 알았습니다만,, 문제가 있다면 Ubuntu 20.04는 Raspberry Pi Imager에서는 설치할 수 없었습니다.

22.04부터 있었는데, 해당 버전은 또 Noetic을 지원하지 않는지라.. 차선인 Ubuntu 20.04 server를 설치하기로 합니다.

server와 desktop의 차이는 CLI와 GUI 인 부분이 다릅니다.

 

뒤에서 이야기하겠지만, server와 desktop의 커널이 같으므로..

server를 설치 후 desktop을 server위에 설치하기로 합니다.

arm64용 Ubuntu 20.04 이미지를 어디서 구해와서 설치해도 되지만, 또 호환성 문제를 겪기는 싫으므로.. 

저는 Raspberry Pi Imager를 통해 설치하는 걸로 가닥을 잡았습니다.

 

1. OS 설치하기

0번에서 말한 여러 이유로.. 저는 Ubuntu 20.04 server를 사용하기로 결정하였습니다.

 

우선 아래 경로에서 raspberry pi imager를 설치합니다.

Raspberry Pi OS – Raspberry Pi

 

Raspberry Pi OS – Raspberry Pi

From industries large and small, to the kitchen table tinkerer, to the classroom coder, we make computing accessible and affordable for everybody.

www.raspberrypi.com

 

설치는 대충 클릭클릭 하면 됩니다.

 

위 그림처럼 잘 설치가 되었으면, device를 RPi4로 선택을 합니다.

다음으로는 운영체제를 누르고 차례로 Other general-purpose OS, Ubuntu, Ubuntu Server 20.04.5 LTS(64-BIT)를 선택, 

저장소로 sd 카드를 선택해 줍니다. 그러면 아래 이미지 처럼 되는데, 여기서 주의할 점이 있습니다.

 

RPi Imager는 아래 그림처럼 기본 설정(root 계정, 무선랜, SSH, 등..)을 자동으로 저장해 둘 수 있는데,

설정을 편집하기로 들어가서 SSH를 활성화해 줍니다. 그리곤 계정을 제외하곤 모두 선택해제 해줍니다.

(왠지는 몰라도 해당 설정, 특히 무선랜 설정을 해두면 DNS 오류로 인터넷이 안되더군요.. -_-)

 

아무튼 잘 설치를 했으면  파이에 넣고 모니터에 연결해 줍니다.

(추가로 LAN도 연결해주세요, 키보드, 마우스는 필요 없습니다.)

만약 모니터가 없으면 LAN만 연결해 주세요

 

다음 단계로 넘어갈 준비가 다 되었습니다.

 

2. 세팅 및 Ubuntu Desktop 설치하기 <사실 여기부턴 Ubuntu 환경이라 스크린샷이 없습니다ㅎ..>

OS를 켜고 모니터를 보면 파이의 IP 주소가 떠있습니다.

해당 주소를 여러분들이 사용하는 SSH 프로그램에 때려 넣고 로그인해줍니다.

저는 Mac에서 Termius를 사용 중인데, 상당히 귀엽습니다.. 

 

아까 설정해 둔 root 계정으로 로그인 후 아래와 같은 명령어를 통해 업데이트를 해줍니다.

>> sudo apt update

>> sudo apt upgrade

>> sudo apt install net-tools

 

ubuntu-desktop을 설치합니다.

>> sudo apt install ubuntu-desktop

 

3. ROS noetic 설치하기

이제부턴 명령어 복붙의 시간입니다. 아래 명령어로 ROS를 설치합시다.

>> sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

(뒤에 ' 까지가 명령어 맞습니다.)

>> sudo apt install curl

>> curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

>> sudo apt update

>> sudo apt install ros-noetic-desktop
(저장 공간에 여유가 있다면 sudo apt install ros-noetic-desktop-full 명령어로 전체를 설치해도 좋습니다.)

 

sourcing을 자동으로 할 수 있도록 아래 명령어로 bashrc에 ros source를 추가합니다.

>> echo "source /opt/ros/noetic/setup.bash"

>> ~/.bashrc >> source ~/.bashrc

 

아래 명령어로 ros가 잘 설치되어 있나 확인해 봅니다.

>> roscore

 

큰 이상이 없다면 ctrl + c 눌러서 종료하고 다른 프로그램들을 설치해 줍니다.

>> sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

 

이젠 ros 설치는 다 끝났습니다.

 

4. RPi.GPIO 설치하기

사용자의 입장에서 Ubuntu와 Raspbian과 가장 큰 다른 점은

코드에서 import RPi를 바로 가져다 쓸 수 있나 없나의 차이 일 겁니다.

아래 명령어로 따로 설치해 줍니다.

>> sudo apt install python3 python3-pip

>> pip3 install RPi.GPIO

 

그리고 아래 명령어로 root user가 사용할 수 있을지 확인해 봅니다.

>> sudo adduser $USER gpio

 

5. VNC 설치하기

아무리 CLI로도 다 할 수 있다고는 해도 GUI에 길들여진 저희에겐 불편하기 마련입니다.

GUI로 일부 기능을 사용할 수 있도록(사실상 vsCode가 전부..) VNC로 접속하는 과정을 진행합니다.

 

>> sudo apt install xfce4 xfce4-goodies

>> sudo apt install tigervnc-standalone-server

좀 걸립니다. 그리고 중간에 어떤 디스플레이 매니저를 사용할지 물을 수 있는데 저는 기본 세팅인 GDM3을 사용하였습니다.

 

아래 명령어로 VNC 접속을 위한 비밀번호를 설정합니다.

>> vncpasswd

 

root 비밀번호와 같아도 되고 달라도 되지만, 일단 6글자만 넘으면 아무거나 상관없는 듯합니다.

 

사람들은 Vi를 많이 쓰지만 저는 nano가 훨씬 편합니다.. 

(초보 개발자라 그런 듯합니다.)

아래 명령어로 파일을 하나 만들어줍니다.

>> nano ~/.vnc/xstartup

해당 파일에 아래와 같은 내용을 넣고 저장해 줍니다.

#!/bin/sh 

unset SESSION_MANAGER 

unset DBUS_SESSION_BUS_ADDRESS 

exec startxfce4

 

만들어둔 파일에 권한을 부여합니다.

>> chmod u+x ~/.vnc/xstartup

 

다른 설정을 좀 세팅해 봅니다.

>> nano ~/.vnc/config

 

여기서는 주로 해상도 설정을 하는데,

저는 맥에서 사용할 거니까 아래와 같은 비율을 사용합니다. (여러분 모니터 설정과 맞추세요)

>> geometry=1920x1200

(영문자 x 입니다)

 

아래 명령어로 

>> sudo nano /etc/vnc.conf

중간쯤 localhost 어쩌구 default : $localhost="no"; 아마 이 부분이 주석처리 되어 있을 텐데

그 아래에 똑같이 써줍니다.

$localhost="no";

 

VNC server를 실행해 봅니다.

>> vncserver

 

큰 문제가 있다면 다음 과정으로, 뭐가 안된다 하면

>> vncserver -kill :1

>> sudo reboot

명령어로 재시작을 하고 다시 시도합니다.

 

6. vsCode 설치하기

여러분들이 사용하는 VNC 프로그램을 열고 접속을 합니다.

비밀번호를 물어보는데, root 계정의 비밀번호 말고 아까 설정한 VNC 비밀번호를 입력합니다.

아 GUI 좋습니다. 인터넷 브라우저에 들어가 vsCode 설치 파일을 받을 겁니다.

Download Visual Studio Code - Mac, Linux, Windows

 

Download Visual Studio Code - Mac, Linux, Windows

Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for building and debugging modern web and cloud applications.

code.visualstudio.com

주소 : code.visualstudio.com/download

저걸 받아야 합니다. 왜냐하면 그것이 arm64니까요 (끄덕)

이 아니고 라즈베리 파이 cpu 아키텍처가 arm64라 그렇습니다.

누르면 알아서 /home/$USER/downloads에 저장되는데 터미널에서 다음과 같은 명령어로 설치해 줍니다.

 

sudo apt install /home/$USER/downloads/방금받은 파일이름(아마code_어쩌구)

그런데 중간에 알아서 newer version이 있다며 repository에서 설치를 합니다...?

아마 저번에 설정을 해둔 덕인 거 같은데, 덕분에 CLI에서도 설치할 방법이 생긴 듯합니다..

코드는 아래와 같습니다.(위에서 설치 됐으면 안 하셔도 됩니다.)

>> sudo apt install software-properties-common apt-transport-https wget

>> wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -

>> sudo apt install code

 

7. 코드 작성하기~!

코드를 열고 python extension을 설치해 줍니다.

코드를 작성해줍니다.

 

뒤에 터미널을 열고 roscore를 실행시키고 작성한 코드를 실행하면 끝..