본 글은 18. [ROS RC카] Jetson Nano 셋업 (ROS 설치, 하드웨어 연결 확인) 상당수 복사하였습니다.

Ubuntu 20.04 custom image를 아래 위치에서 받습니다. 그리고 64GB uSD에 Etcher등으로 받은 이미지를 구워주세요. 이 장의 모든 작업은 Jetson에 TV를 연결하지 않고 SSH를 사용하는 것을 전제로 합니다.

PC ←USB cable → Jetson microB 연결을 사용합니다. 연결하면 Jetson은 192.168.55.1, PC는 192.168.55.100 주소가 생성됩니다. 이후 SSH를 사용할 수 있습니다.

Image for Orin Nano

Orin.20.04.img.zip

Image for Jeton Nano 4G/2G

https://drive.google.com/file/d/1FCw-XnPoCJEiRZTNEcdEM-2fCWDMpqVR/view?usp=sharing

원본 Jetson nano 이미지에서 변경한 내용:

1.piOLED 서비스 추가

Jetson Nano에 연결된 OLED에 ip주소 출력

2.메모리 절약을 위해 window manger를 변경, GNOME → LXDE

VNC문제도 해결함

3.60GB까지만 file system 확장. 64GB 확장할 경우 uSD 종류에 따라 image fuse 실패 발생하기 때문

4.swap 8G 추가

원본 Jetson nano 이미지 내용:

https://github.com/Qengineering/Jetson-Nano-Ubuntu-20-image

A Jetson Nano - Ubuntu 20.04 image with OpenCV, TensorFlow and Pytorch

Pre-installed software.

- [OpenCV] 4.6.0
- [TensorFlow] 2.4.1
- [Pytorch] 1.12.0
- [TorchVision] 0.13.0
- [TeamViewer aarch64] 15.24.5
- [Jtop] 3.1.2

Jetson Nano Image:

login:

id: jetson
passwd: jetson

아래는 login할때 메시지입니다.

Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 4.9.253-tegra aarch64)

 * Documentation:  <https://help.ubuntu.com>
 * Management:     <https://landscape.canonical.com>
 * Support:        <https://ubuntu.com/advantage>
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.

384 updates can be applied immediately.
304 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
'DISPLAY' environment variable not set... skipping surface info

backup GPT correction(Option)

#backupGPT 수정을 위해 아래 명령을 실행하고 'w'를 눌러 backupGPT 문제를 해결해주세요.
$ sudo gdisk /dev/mmcblk0

#아래는 실행로그입니다.
$ jetson@nano:~$ sudo gdisk /dev/mmcblk0
:
Main header: OK
Backup header: OK
Main partition table: OK
Backup partition table: ERROR

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: damaged

****************************************************************************
Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
verification and recovery are STRONGLY recommended.
****************************************************************************

Command (? for help): **w**  #왼쪽그림처럼 w를 입력해서 backup GPT를 만들어주세요.

다음은 추가적인 이미지 정보입니다.

#64G에 image를 구운 경우 약40%정도 여유공간이 남을 것입니다.
jetson@nano:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk0p1   56G   32G   22G  59% /

#아래는 Jetson 4G. 10G의 swap이 만들어졌습니다.
jetson@nano:~/Downloads$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3964         600        2512          13         850        3203
Swap:         10239           0       10239

# 배터리 절약이 필요한 경우 변경해서 사용하세요.
$ sudo nvpmodel -m 1

1. Tool install on Jetson

PC에서 SSH로 Jetson에 접속하기 위해서는 PC에 SSH client 프로그램을 설치하는게 좋습니다. 물론 default CLI명령어인 ssh를 사용할 수 있습니다. 본인이 즐겨 사용하는 프로그램을 PC에 설치해주세요. 아래는 대표적인 SSH 프로그램입니다.

Windows

Teraterm, SecureCRT, Termius, PuTTY

Ubuntu

Termius, PuTTY, asbru-cm

1.1. Terminal(=SSH)에서 WiFi 연결하기

Jetson에 이미지를 설치하기 위해 WiFi로 AP에 접속해야합니다. 물론 유선 연결(Ethernet)도 가능합니다. 아래는 CLI 명령어만드로 AP에 접속하는 방법입니다.

jetracer/software_setup.md at master · NVIDIA-AI-IOT/jetracer

# 실행해야할 명령
$ sudo nmcli device wifi list
$ sudo nmcli device wifi connect <ssid_name> password <password>
$ ifconfig

# 명령어 실행 예제
# password가 없는 경우
jetson@nano:~$ sudo nmcli device wifi connect STARTUP_LOUNGE_love
Device 'wlan0' successfully activated with 'e1d72d88-360a-468b-8487-3cf3ef5b343c'.
jetson@nano:~$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
:
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.37.160  netmask 255.255.255.0  broadcast 192.168.37.255
        inet6 fe80::89c:53da:d58:afc1  prefixlen 64  scopeid 0x20<link>
        ether 00:28:f8:7d:61:03  txqueuelen 1000  (Ethernet)
        RX packets 734  bytes 1018170 (1.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 350  bytes 35354 (35.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# password가 있는 경우
jetson@nano:~$ sudo nmcli device wifi connect U+NetD681 password xxxxxxx
Device 'wlan0' successfully activated with '51523154-f356-461f-b8bb-54e1ac21bd10'.
jetson@nano:~$ ifconfig wlan0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.219.107  netmask 255.255.255.0  broadcast 192.168.219.255
        inet6 fe80::21d:8403:c491:2b80  prefixlen 64  scopeid 0x20<link>
        ether 00:e0:4b:af:07:1f  txqueuelen 1000  (Ethernet)
        RX packets 6110  bytes 9029131 (9.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3666  bytes 340490 (340.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 연결을 해제할 때
$ sudo nmcli device disconnect wlan0

#명령 실행 로그
jetson@nano:~$ sudo nmcli device disconnect wlan0
Device 'wlan0' successfully disconnected.

1.2 Cooling Fan

쿨링팬이 없으면 생략하세요. 그러나 쿨링팬을 추가하는게 좋습니다.

3선 쿨링팬은 바로 동작합니다만, 4선 PWM 쿨링팬은 아래 작업을 해야 동작합니다. 즉 PWM 신호에 출력을 주어야 동작하는 것입니다. CPU 사용에 따라 쿨링팬 속도를 자동으로 조정하는 utility를 설치하는게 좋습니다.

cd Downloads
git clone <https://github.com/jetsonworld/jetson-fan-ctl.git>
cd jetson-fan-ctl
sudo sh install.sh

실행 로그는 아래와 같습니다.

jetson@nano:~$ cd Downloads/
jetson@nano:~/Downloads/jetson-fan-ctl$ sudo sh install.sh
install.sh: 4: [: !=: unexpected operator
settling to /usr/local/bin/automagic-fan/...
done
adding service to /lib/systemd/system/...
done
creating config at /etc/automagic-fan/
done
starting and enabling service...
Created symlink /etc/systemd/system/multi-user.target.wants/automagic-fan.service → /lib/systemd/system/automagic-fan.service.
done
automagic-fan installed sucessfully!

To configure, edit /etc/automagic-fan/config.json (needs sudo)

자세한 내용은 아래 블로그를 참고해주세요

제타의 IoT 나들이 : 네이버 블로그

1.3 VNC설치(Option)

VNC는 다음과 같은 경우 반드시 필요합니다. 만일을 위해 설치해두는게 좋습니다.

ROS remote 환경 설정을 만들지 못했으며, Jetson에 TV를 연결할 수 없을 경우

젯슨 나노는 화면 공유를 바로 허용하지 않게 되어있습니다. VNC를 사용해서 노트북에서 젯슨 화면을 보면서 작업할 경우 아래 글을 따라서 VNC 서버를 동작하게 해주십시오.

https://developer.nvidia.com/embedded/learn/tutorials/vnc-setup

# Jetson running LXDE
mkdir -p ~/.config/autostart
cp /usr/share/applications/vino-server.desktop ~/.config/autostart/.

gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino require-encryption false
gsettings set org.gnome.Vino authentication-methods "['vnc']"
# 아래 passord에 본인이 사용할 비밀번호로 변경하세요
gsettings set org.gnome.Vino vnc-password $(echo -n 'passsword'|base64)
# example, password is jetson
# gsettings set org.gnome.Vino vnc-password $(echo -n 'jetson'|base64)

위에서 ‘password’는 본인이 사용할 password로 대체해주세요.

그 후 PC에서 VNC viewer를 설치하여야합니다. 우분투의 경우 “Ubuntu Software” → “Remina”를 클릭하여 설치할 수 있습니다.

Untitled

다른 OS일 경우 아래 site에서 본인 OS에 맞는 프로그램을 다운로드할 수 있습니다.

VNC® Connect

Desktop OS 다운로드

Desktop OS 다운로드

아래 화면은 Ubuntu Remina를 실행해서 Jetson을 연결하는 화면입니다.

micro-USB 케이블로 PC와 Jetson을 연결

micro-USB 케이블로 PC와 Jetson을 연결

해상도가 낮을 경우 아래 글을 참고하여 xorg.conf를 수정하세요.

$ sudo gedit /etc/X11/xorg.conf 

#아래 내용 추가
Section "Screen"
   Identifier    "Default Screen"
   Monitor        "Configured Monitor"
   Device        "Default Device"
   SubSection "Display"
       Depth    24
       Virtual 1280 800
   EndSubSection
EndSection

제타의 AIoT 나들이 : 네이버 블로그

위 수정사항은 해상도를 1280x800으로 변경합니다. TV를 연결할 경우 해상도가 충분치 않아서 불편하시면 “ Virtual 1920 1080”으로 변경해주세요.

설정 버튼을 click하여 화면의 품질을 변경할 수 있습니다.

Untitled

1.4 jtop 사용

이미 custom image에 설치를 해두었습니다.

Untitled

설치가 되지 않은 이미지에서는 아래 명령어로 간단히 설치할 수 있습니다.

sudo apt install python3-pip
sudo -H pip3 install -U jetson-stats

자세한 내용은 아래 글을 참고하세요

제타의 IoT 나들이 : 네이버 블로그

1.5 I2C 장치 연결 확인

Jetson에 아무 모듈도 연결하지 않을 경우 아무 번호도 나오지 않습니다.

Orin Nano의 경우 I2C 주소에 1 대신 7을 사용해주세요

OLED를 연결한 경우 3c가 보일 것입니다.

$ sudo i2cdetect -r -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

#Orin Nano
$ sudo i2cdetect -r -y **7**
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: 70 -- -- -- -- -- -- -- 

PCA9685까지 연결하면 40, 70이 나타나야합니다. 단 address를 변경한 PCA9685인 경우 변경된 address가 보일 것입니다.

$ sudo i2cdetect -r -y 
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: 70 -- -- -- -- -- -- --

또는 보드 종류에 따라 41, 60등 추가 번호가 나오기도합니다.(예: Waveshare Jetracer)

$ sudo i2cdetect -r -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- 
40: 40 41 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: 70 -- -- -- -- -- -- --

Driver, 추가 구성에 따라 결과는 달라집니다.

2. ROS install on PC and Jetson

우분투에서 sftp를 연결하는 방법은 아래 그림을 참고하세요. sftp로 연결하여 Jetson에 있는 파일을 PC에서 쉽게 변경, 편집할 수 있습니다. Ubuntu에 있는 vi, nano등의 에디터가 익숙하지 않으면 이 방법을 이용하는 것이 가능합니다. 즉 PC geditor 또는 vscode로 Jetson에 있는 파일을 수정할 수 있습니다.

Untitled

Windows의 경우 winscp를 설치하시면 같은 기능을 사용할 수 있습니다.

WinSCP :: Official Site :: Download

2.1 ROS install on Jetson(and PC)

ROS2를 설치할 수 있는 script를 download하여 설치합니다. Jetson에서 아래를 실행해주세요. PC에서 remote 작업을 하려면 PC에도 동일하게 설치해주세요.

cd ~/Downloads
git clone -b galactic <https://github.com/zeta0707/installROS2.git>

cd installROS2
./install-ros2.sh

지금까지 작업하면 Downloads 폴더는 아래와 같을 것입니다.

jetson@nano:~/Downloads$ ls
installROS2  jetson-fan-ctl ...

실행하면 아래와 같은 결과가 보일 것입니다.

jetson@nano:~/Downloads/installROS2$ ./install-ros2.sh
[Update the package]
Get:1 file:/var/cuda-repo-l4t-10-2-local  InRelease
Ign:1 file:/var/cuda-repo-l4t-10-2-local  InRelease
Get:2 file:/var/visionworks-repo  InRelease
Ign:2 file:/var/visionworks-repo  InRelease
Get:3 file:/var/visionworks-sfm-repo  InRelease
Ign:3 file:/var/visionworks-sfm-repo  InRelease
:
Setting up python3-colcon-devtools (0.2.3-1) ...
Setting up python3-colcon-test-result (0.3.8-1) ...
Setting up python3-colcon-powershell (0.3.7-1) ...
Setting up python3-cov-core (1.15.0-3build1) ...
Setting up python3-colcon-bash (0.4.2-1) ...
Setting up python3-pytest-cov (2.8.1-1) ...
Setting up python3-colcon-parallel-executor (0.2.4-1) ...
Setting up python3-colcon-argcomplete (0.3.3-1) ...
Setting up python3-colcon-recursive-crawl (0.2.1-1) ...
Setting up python3-colcon-cmake (0.2.27-1) ...
Setting up python3-colcon-notification (0.2.15-1) ...
Setting up python3-colcon-cd (0.1.1-1) ...
Setting up python3-colcon-ros (0.3.23-1) ...
Setting up python3-colcon-common-extensions (0.3.0-1) ...
Processing triggers for man-db (2.9.1-1) ...
[Install workspace]
WARNING: ROS_PYTHON_VERSION is unset. Defaulting to 3
#All required rosdeps installed successfully

Summary: 0 packages finished [0.53s]
jetson@nano:~/Downloads/installROS2$

2.2 .bashrc 수정

PC, Jetson에 작업을 편리하게 할 환경을 .bashrc에서 추가해줍니다. alias 명령어추가, PC ↔ Jetson remote 환경을 설정합니다. ROS_DOMAIN_ID는 팀원들과 겹치지 않게 선택해주세요.

Jetson

# 또는 편리한 에디터로 .bashrc 열기
$ gedit ~/.bashrc 

# 파일 제일 아래에 다음과 같은 내용 입력
function ccp_fn(){
    if [ $# -ne 1 ]; then
        echo "Usage: ccp packageName"
    else
        rm -rf ~/ros2_ws/build/"$@" && rm -rf ~/ros2_ws/install/"$@" ;
    fi
}

function ccpa_fn(){
    if [ $# -ne 1 ]; then
        echo "Usage: ccpa basePackageName"
    else
        rm -rf ~/ros2_ws/build/"$1"* && rm -rf ~/ros2_ws/install/"$1"* ;
    fi
}

function cbpa_fn(){
    if [ $# -ne 1 ]; then
        echo "Usage: cbpa basePackageName"
    else
        ls ~/ros2_ws/src/"$1" | grep "$1" | sed ':a;N;$!ba;s/\\n/ /g' | xargs colcon build --packages-select
    fi
}

alias ccp=ccp_fn;
alias ccpa=ccpa_fn;
alias cbp="colcon build --packages-select"
alias cba="colcon build --symlink-install"
alias cca="rm -rf ~/ros2_ws/install ~/ros2_ws/build ~/ros2_ws/log"
alias cbpa=cbpa_fn;

alias rtl='ros2 topic list'
alias rte='ros2 topic echo'
alias rnl='ros2 node list'
alias testpub='ros2 run demo_nodes_cpp talker'
alias testsub='ros2 run demo_nodes_cpp listener'
alias rqti='ros2 run rqt_image_view rqt_image_view'

export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export ROS_DOMAIN_ID=108     

에디터 종료 후 terminal에서 .bashrc를 한 번 실행합니다.

$ source ~/.bashrc

PC

Jetson과 동일한 내용을 ~/.bashrc 만들어주세요. 에디터 종료 후 terminal에서 .bashrc를 한 번 업데이트합니다.

$ source ~/.bashrc

2.3 ros2 workspace 설치

아래 명령어를 사용하여 clean을 한 번 하면 cba가 문제없이 실행됩니다.

jetson@nano:~/ros2_ws$ cca
jetson@nano:~/ros2_ws$ cba

실행로그를 참고를 위해 아래에 추가했습니다.

jetson@nano:~/ros2_ws$ source ~/.bashrc
jetson@nano:~/ros2_ws$ cca
jetson@nano:~/ros2_ws$ cba

Summary: 0 packages finished [0.84s

제타의 IoT 나들이 : 네이버 블로그

2.4 ROS 동작 확인(Option)

설치 후 제대로 되었는지 demo_nodes_cpp로 확인할 수 있습니다. 두개의 창에 하나씩 아래 명령어를 실행해주세요. listener에 ‘Hello World’가 보이면 ROS가 제대로 설치된 것입니다.

# terminal #1
jetson@nano:~/ros2_ws$ ros2 run demo_nodes_cpp talker
# or
jetson@nano:~/ros2_ws$ testpub

# terminal #2
jetson@nano:~/ros2_ws$ ros2 run demo_nodes_py listener
# or
jetson@nano:~/ros2_ws$ testsub

Untitled