5 분 소요

동키카를 까는 험난한 여정

와이파이 연결상태에서 인터넷이 안될때

다음과 같이 Configuration에서 Localisation에 들어간다.. 그리고 “Set WLAN Country”선택!

image-20240125130653507

보통 여기서 UK(Britian)으로 되어 있는 경우가 많은데, 그래서 안된거다.(근데 신기한게 와이파이로 원격은 된다. 이뭔????ㄷㄷ???)

image-20240125130837919

쨋든 위와 같이 KR Korea(South)로 변경해준다.

근데 이렇게 해도 문제가 해결되지 않았다. (그래서 진짜 집에 갈까 진지하게 고민했다ㅅㅂ…)

결국 이미지를 다시 깔아서 해결했다. 절대 인터넷접속이 되게 하려면, 초기설정을 라즈베리파이 접속해서 하도록 하자. 그러면 무조건 된다!!

핫스팟 연결을 무조건 라즈베리파이 안에 들어가서 하자!

그리고 다시 동키카를 처음부터 깔기 시작했다.

동키카여! 제발 좀 깔려라!

Step1. 라이브러리 설치하기(링크)

  • 이미지를 열고 정상적으로 설치되었는지 확인하라. 인터넷 브라우저에서 들어가서 제대로 연결이 된것을 확인하고 나면 아래 라이브러리를 설치해준다.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential python3 python3-dev python3-pip python3-virtualenv python3-numpy python3-picamera 
sudo apt-get install python3-pandas python3-rpi.gpio i2c-tools avahi-utils joystick libopenjp2-7-dev libtiff5-dev gfortran 
sudo apt-get install libatlas-base-dev libopenblas-dev libhdf5-serial-dev git ntp

sudo apt-get install build-essential python3 python3-dev python3-pip python3-virtualenv python3-numpy python3-picamera : 기본적인 개발도구와 파이썬 DevKit 및 패키지들을 설치해줍니다. build-essential은 빌드도구이고, 패키지들은 파이썬을 동작시키기 위한 기타 백그라운드 환경이라 보면 된다.

sudo apt-get install python3-pandas python3-rpi.gpio i2c-tools avahi-utils joystick libopenjp2-7-dev libtiff5-dev gfortran: 파이썬과 라즈베리파이를 연동시켜주는 특수 라이브러리입니다.

sudo apt-get install libatlas-base-dev libopenblas-dev libhdf5-serial-dev git ntp: 선형대수 관련 라이브러리란다. 그냥 그렇다고 한다ㅇㅇ.

파이썬은 윈도우에서도 돌아간다. 하지만 그 패키지와는 조금 다른데 어쨋든 임베디드에서 돌아가도록 하기 위해 별다른 구축을 따로 해주는 작업이 필요하다.

Step2. Raspi-config로 임베디드 설정해주기(링크)

sudo raspi-config
  • [Interface Options]에 들어가서 [I2C]를 활성화해주기
  • [Interface Options]에 들어가서 [legacy Camera]가 비활성화되어 있도록 해준다.
  • [Advanced Options]에 들어가서 [Expand Filesystem]을 선택해준다.

image-20240125143936240

위와 같은 문구가 뜨면 제대로 된거다.

Step3. 동키카를 위한 가상환경 구축하기

  • 파이썬 가상환경 생성
python3 -m venv env --system-site-packages
  • 가상환경 활성화(스크립트)
source ~/env/bin/activate
  • 가상환경 즉시 활성화(권장하지 않음, 나중에 정 필요하다 싶으면 할)
echo "source ~/env/bin/activate" >> ~/.bashrc
source ~/.bashrc

echo "source ~/env/bin/activate" >> ~/.bashrc: ~/.bashrc이라는 경로 및 파일을 열어 그 아랫줄에 “source ~/env/bin/activate”를 넣는다는 뜻이다.

source ~/.bashrc: ~/.bashrc파일을 현재의 셀 세션에 다시 로드합니다. 이는 주로 사용자가 새로운 환경설정이나 변경사항을 적용하기 위해 사용됩니다.

TMI: 만약 /로 시작하는 경로는 루트에서부터 시작해서 거슬러내려간다는 뜻이고, ~로 시작하는 경로는 home에서부터 시작해서 거슬러 내려간다는 뜻이다.

  • 가상환경을 받쳐줄 참조 라이브러리 설치
sudo apt install libcap-dev

참고로 현재는 그냥 쌩(pure) 파이썬에다가 가상환경 구축 후에 동키카를 까는작업이다. 현재 빨간 SD Card에 작업중인데, 나중에 하얀색 SD Card에서 작업할때는 miniconda에서 가상환경 구축후에 작업을 해보려고 한다.

Step4. (구축된 환경위에) 동키카 설치하기

  • 동키카를 설치하는 방법은 사용자모드설치와 개발자모드설치가 있는데 우리는 후자를 선택한다.(for 확장)

여기서부터는 dcworks로 들어가서 깔아준다. 왜냐하면 기존의 동키카 홉페이지에 있는 라이브러리를 pip install -e .[pi] 통해서 깔아주었을때 “setup.py”가 없어 깔리지 않는 문제가 발생했기 때문이다.

그래서 소공방에 있는 git경로로 시도해보았다.

git clone git@github.com:sogongbang/dcworks.git

하지만 ssh key 로그인이 안되서 퍼미션이 거부되는 이슈가 발생했다.

cf. ssh key 로그인(링크)

1)SSH KEY 생성하기

ssh-keygen -t rsa

뭐 입력하고 두번 뜰텐데 그냥 엔터 눌러서 무시해주자!

image-20240125161037973

2)키 생성 확인

ls -al ~/.ssh/

image-20240125161013035

3)authorized_keys 생성

cd ~/.ssh
cp -rp id_rsa.pub authorized_keys
ls -al ~/.ssh/

image-20240125160941974

4)SSH 디렉토리 권한 변경

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/authorized_keys

image-20240125160913417

.ssh 디렉토리는 매우 중요한 보안정보가 담긴 디렉토리이기 때문에 퍼미션 설정을 꼭 해줘야 합니다.

5)ssh config 파일 수정

sudo nano /etc/ssh/sshd_config

아래와 같이 주석해제를 해준다.

  • PubkeyAuthentication yes
  • AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

image-20240125161510315

6)ssh 재시작

service sshd restart

image-20240125161632861


여기까지 먼 고생을 했다. 이제 키가 제대로 만들어졌을 것이다. 이 키를 나의 깃허브 계정에 등록해놓으면 권한이 인정된다. 즉 라즈베리파이에서 접근하려 할때 이미 키를 등록해놨기 때문에 프리패스라는 거다.

키를 등록해보자!

7)SSH 공개키 등록

sudo apt-get install xclip
cat ~/.ssh/id_rsa.pub | xclip -selection clipboard

xclip이라는 라즈비안 전용 모듈을 설치했다. 클립보드 기능이라 보면 된다.

그리고 cat명령어를 통해 생성된 공개키를 출력하고 이를 클립보드에 저장한다.

그리고 깃허브 웹사이트에 나의 계정으로 들어가준다.

  • 오른쪽 상단의 프로필 사진을 클릭 후,

Settings -> SSH and GPG keys로 이동한다.

image-20240125164937028

  • New SSH key 또는 Add SSH key를 클릭하고, 클립보드에 복사한 SSH 공개키를 붙여넣자.

image-20240125165053951

그러면 정상적으로 git-clone이 될것이다.

git clone git@github.com:sogongbang/dcworks.git

이후, dcworks에 들어가 다음 명령어 수행!!

cd dcworks
git submodule update --init

이는 깃 저장소 내의 서브모듈을 초기화하고 업데이트하는 거란다.

서브모듈이라는 것 뭐냐면, 다른 깃 저장소를 현재의 깃프로젝트에 포함시키는 작업이라고 한다.

이에 대해서는 설명이 힘들어서 그림을 그렸다ㅋㅋ

일단 라즈베리파이의 주요 디렉토리 구조이다.

image-20240125165643130

우리는 git으로 dcworks를 복제해서 받았다. 그리고 이번에는 깃허브(sogonbang)에 있는 dcworks의 내부 구조이다.

image-20240125165735464

음… 좀 어지럽긴 한데ㅋㅋ 여기서

  • {donkeycar}
  • {donkeycar_wrapper}
  • {gym_dokeycar}
  • {stable-baseline3}
  • {ubinos}

위와 같이 중과호 쳐져있는 것들이 모두 서브모듈들이다.

이것들은 다른 깃허브주소에 프로젝트단위로 묶여있다. 이것들으 서브모듈로서 초기화랑 업데이트해주는 작업을 해주는 것이라 보면된다.

image-20240125171153344

위 빨간박스처럼 서브모듈들을 받고 있는 것을 볼수가 있다.

아뿔사!! 가상환경에서 설치해야 한다는 것을 잊어버리고 실수로 일반 사용자환경에서 설치해버렸다! 그래서 일단 지우고 다시 깔아보자!

그래서ㅜㅠ 다시 아래와 같이 절차를 수행했다.

  1. 가상환경생성(이건 이미 한거임)
  2. 가상환경진입
  3. projects 디렉토리 진입
  4. git으로 dcworks 받아오기
  5. dcworks 디렉토리 진입
  6. dcworks에 물려있는 서브모들 초기화 및 업데이트 받아오기
1> python3 -m venv env --system-site-packages
2> source ~/env/bin/activate
3> cd projects
4> git clone git@github.com:sogongbang/dcworks.git
5> cd dcworks
6> git submodule update --init

이후 텐서플로우를 설치해준다.(지금 동키카 공식위키랑 소공방문서를 번갈아보면서 하니까 헷갈린다ㅜㅠㅠ)

pip install tensorflow
python -c "import tensorflow; print(tensorflow.__version__)"

그 다음 파이썬 패키지 관리자(pip)를 업그레이드하는 명령어와 setuptools을 업그레이드하는 명령어, 그리고 donkeycar_wrapper안에서 requirements.txt안에 있는 라이브러리 내역들을 다운로드하는 명령어들을 다운받아 준다.

pip install --upgrade pip
pip install --upgrade wheel setuptools
cd library/donkeycar_wrapper
pip install -r requirements.txt

근데 중간에 잘 깔리다가 이슈가 터졌는데,,

jupyterlab이 깔리지 않았다.

그래서 다음 조치를 취했다.

jupyterlab==4.0.11
rm -rf $HOME/.cache/pip
pip install --no-cache-dir --force-reinstall https://www.piwheels.org/simple/jupyterlab/jupyterlab-4.0.11-py3-none-any.whl

근데 이슈는 해결되지 않았고, 오히려 다른 이슈가 떴다. 그래서 다음 조치를 취했다.

pip download --no-deps --no-binary :all: jupyterlab==4.0.11

하지만 이후 tesorflow-dataset에 대해서 또다시 해시 충돌 이슈가 발생했다.

그래서 아까와 같은 방식으로 이슈를 해결했다.

tensorflow-datasets==4.9.3
rm -rf $HOME/.cache/pip
pip install --no-cache-dir --force-reinstall https://www.piwheels.org/simple/tensorflow-datasets/tensorflow_datasets-4.9.3-py3-none-any.whl
pip download --no-deps --no-binary :all: tensorflow-datasets==4.9.3

하지만 이후 tesorflow-dataset에 대해서 또!! 또!! 다시 해시 충돌 이슈가 발생했다.

이번에는 piwheels.org 대신 TensorFlow-Datasets를 공식 PyPI에서 직접 다운로드하여 설치할 수 있다.

rm -rf $HOME/.cache/pip
pip install --no-cache-dir --force-reinstall tensorflow-datasets==4.9.3

하지만 이후 의존패키지인 wrapt라이브러리의 버전이 너무 높아서 다운그레이드를 하라고 떴다.

즉 충돌이 발생한 것이었다. 충돌로 인해 패키지 간의 의존성 버전이 맞지 않은 것이었다.

해결책으로서,

  1. wrapt 버전 다운그레이드
pip install wrapt==1.15.0
  1. tensorflow-cpu-aws 업그레이드
pip install --upgrade tensorflow-cpu-aws

그리고 chatGPT를 통해서 찾아봤을때 더 복잡한 프로젝트에서는 pip-toolsconda와 같은 패키지 관리가 되는 도구들을 써서 명시적인 의존성 관리를 수행하는 것이 좋을 것 같다. 이렇게 하면 의존성 버전이 일관되게 유지된다고 한다.

# pip-tools 설치
pip install pip-tools

# requirements.in 파일에 필요한 패키지 명시
echo "tensorflow-cpu-aws" > requirements.in

# requirements.txt 파일 생성
pip-compile --output-file=requirements.txt requirements.in

# 생성된 requirements.txt 파일을 이용하여 패키지 설치
pip install -r requirements.txt
  1. pip-tools 설치

image-20240125201042451

  1. requirements.in 파일에 필요한 패키지 명시

image-20240125201145089

  1. requirements.txt 파일 생성

image-20240125201713874

  1. 생성된 requirements.txt 파일을 이용하여 패키지 설치

image-20240125202031517

이렇게 또한번 버전충돌이 발생하여, chatGPT의 도움을 한번 더 받았다.

pip install absl-py==0.11.0 protobuf==3.20.3
pip install --upgrade tensorflow-metadata

그리고 dcworks에 있는 순서대로 설치했다.

pip install -U setuptools==66
pip install -U wheel==0.38.4

image-20240125202445288

이렇게 계속해서 문제가 생겼다. 그래서 의존성 관리를 위해 conda를 깔아야 하는 필요성을 절실히 느꼈다.그리고 동키카사이트에 과거 라즈베리파이 이미지가 있던데 그걸로 깔걸을 후회했다.

pip install --upgrade absl-py
pip install tensorflow-cpu-aws==2.15.0

그리고 본격적으로 동키카 프로젝트의 패키지들을 설치했다.

cd ..
cd donkeycar
pip install -e .

cd ..
cd gym-donkeycar
pip install -e .

cd ..
cd stable-baselines3
pip install -e .

image-20240125203744350

근데 statble-baseline3에서 의존성 패키지를 설치할때 문제가 생겼다.

다음 절차를 진행했다.

  1. 휠파일 재다운로드
pip install --no-cache-dir --force-reinstall https://www.piwheels.org/simple/sympy/sympy-1.12-py3-none-any.whl
  1. Sympy 패키지 직접 설치
pip install --no-cache-dir --force-reinstall sympy
  1. SymPy 패키지 업그레이드
pip install --no-cache-dir --upgrade sympy
  1. 패키지 소스 설치
pip install --no-cache-dir --force-reinstall git+https://github.com/sympy/sympy.git
  1. 패키지 삭제후 재설치
pip uninstall sympy
pip install --no-cache-dir sympy
  1. 패키지 관리자를 이용한 설치
sudo apt-get install python3-sympy

열번찍어서 안넘어가는 나무가 없다는 말이 있듯이, 이것도 처음에 install명령어 쳤을때는 안되고 두번째에도 안되다가 세번째로 쳤는데 성공하는 경우가 있다.(이 뭔??)

명령어 토시 하나 안바꿨는데도 말이다.

Step5. (동키카 위에) 시뮬레이터[에뮬레이터] 설치하기

wget https://github.com/tawnkramer/gym-donkeycar/releases/download/v22.11.06/DonkeySimWin.zip
unzip DonkeySimWin.zip

트러블슈팅

image-20240125211937688

위와 같이 모듈이 안깔렸다는 것은 서브모듈들에 대해서,

pip install -e .

이 제대로 먹히지 않았다는 뜻이다.

image-20240125212130156

참고로 donkeycar_wrapper디렉토리에는 setup.py파일이 없기 때문에 의존성 패키지 설치가 불가능하다.

업데이트(24-01-29)

원래는 29일자 코딩일지에 써야 하는데 귀찮기도하고 여기에 적어야 보기도 편해서 여기다가 이어서 쓰려고 한다.


얘가 python manage.py drive를 해줘도 작동을 안하길래 projects에서 workspace로 디렉토리명을 바꿔줬다.

이후 가상환경을 다시 껐다가 다시 켰다. 확인해보니 지금까지 다른 pi디렉토리 바로 아래의 env가상환경에서 작업하고 있었다. 일단 deactivate로 비활성화시키고 dcworks로 들어가 그 안에 있는 env가상환경으로 다시 구동시켜서 작업하게 되었다.

image-20240129185333550

도저히 안되어서 다른 SD카드에 다시 설치해보려고 한다. 이번에는 콘다환경에서 패키지 버전관리 받으면서 설치해야 겠다.

미니콘다 환경 구축하기

1.업데이트 받았다.

sudo apt-get update
sudo apt-get upgrade

2.다운받았다.

#환경 확인
uname -m

#for 32bit
wget http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-armv7l.sh

#for 64bit
wget https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.3-Linux-aarch64.sh

3.설치했다.

sudo apt-get install -y bzip2
sudo md5sum Miniconda3-latest-Linux-armv7l.sh
sudo /bin/bash Miniconda3-latest-Linux-armv7l.sh

bzip2는 압축을 md5 해시파일을 해제할때 필요한 것 같다.

sudo md5sum Miniconda3-latest-Linux-armv7l.sh는 설치스크립트 파일의 MD5해시를 확인하는 명령어라 한다. MD5는 파일이 손상되지 않았음을 보장하기 위해 사용된다고 한다.

sudo /bin/bash Miniconda3-latest-Linux-armv7l.sh에서부터 실제로 miniconda3가 시스템에 설치가 된다고 한다.

댓글남기기