3. 픽스호크-라즈베리파이 세팅

­윤다빈·3일 전
post-thumbnail

1. 라즈베리파이 세팅

  1. os 굽기









  2. cmd로 ssh 접속
    안드로이드 핸드폰이라면, wifi를 핸드폰 핫스팟으로 잡은 후 부팅하면 핸드폰에서 ip 확인 가능
    데스크탑의 cmd, powershell에서 가능
    ssh 유저이름@IP주소

2. 라즈베리파이-픽스호크 연동

해당 부분은 민규의_개발일지라는 분의 게시물을 많이 참고하였다.
(https://supersfel.tistory.com/entry/%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4%EC%99%80-%ED%94%BD%EC%8A%A4%ED%98%B8%ED%81%AC-%EC%97%B0%EB%8F%99-pixhawk-248)

나는 라즈베리파이 5B를 사용했는데, 참고한 게시물에서 다른 부분을 정리하고자 한다.

  1. 가상환경 켜기
    아래 오류 처리 부분에서 다루지만, 라즈베리파이 5는 Bookworm 시스템이기 때문에 가상환경을 만들어서 수행해줘야한다. 모듈 설치를 하기 전 가상 환경을 켜준다.
cd [프로젝트 폴더]
source [env 이름]/bin/activate
  1. 모듈 설치
    라즈베리파이 5B는 python3으로만 설치가 가능하다
    따라서 다음의 명령어들로 모듈을 설치하면 된다
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip
sudo apt-get install python3-dev
pip install future
pip install pyserial
pip install dronekit
pip install MAVProxy

sudo apt update
sudo apt install python3-wxgtk4.0
pip install lxml
  1. serial 포트 열기
    다음 명령어로 설정을 열어준 후 serial 설정을 수행한다
suro raspi-config

아래 명령어로 출력이 잘 나오는지 확인한다.

ls /dev/ttyAMA0

그 후 config 파일에서 블루투스 하드웨어를 비활성화하여 UART 시리얼 포트를 확보할 수 있도록 코드를 한 줄 추가해준다.
이는 기본적으로 블루투스가 사용하고 있던 고성능 하으뒈어 UART를 사용자가 GPIO 14, 15 핀을 통해 시리얼 통신 등의 다른 용도로 사용할 수 있게 해준다.
다만, 라즈베리파이 5B의 os인 bookworm부터는 /boot/config.txt가 /boot/firmware/config.txt로 이동하였다.

따라서 다음 명령어로 config 파일을 실행한 뒤, 맨 밑에 enable_uart=1로 포트가 열려있는지 확인 하고 밑에 코드를 한 줄 추가해주면 된다.

sudo nano /boot/firmware/config.txt (파일 실행)
dtoverlay=disable-bt (맨 밑에 추가)

그 후 저장하여 파일을 닫고 재부팅 해준다.

  1. 픽스호크와 연결
    이미지 출처: https://supersfel.tistory.com/entry/%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4%EC%99%80-%ED%94%BD%EC%8A%A4%ED%98%B8%ED%81%AC-%EC%97%B0%EB%8F%99-pixhawk-248

제품은 팰콘샵에서 라즈베리파이-픽스호크 연결 선을 구매하여 연결하였다.
(https://www.falconshop.co.kr/shop/goods/goods_view.php?goodsno=100086979)
전원 선을 꼭꼭꼭 잘 확인하여 상황에 맞게 사용하자.

  1. mavproxy 실행
    내 라즈베리파이는 baudrate 57600에서 잘 작동하였다.
    수행할 때 link 1 down이라는 메세지와 함께 연결이 안된다면 일단 baudrate부터 조절해보고 그 후에 배선을 바꿔보면 될 것 같다.
mavproxy.py --master=/dev/serial0 --baudrate 57600 --aircraft MyCopter


위 사진과 같이 잘 연결되어서 mode와 현재 발생 중인 PreArm 오류들을 잘 확인할 수 있다.

여기서 제일 위에 발생하는 WARNING: You should uninstall ModemManager as it conflicts with APM and Pixhawk을 확인해보자.
ModemManager는 LET 모뎀, 3G/4G USB 동글, GPS/통신 장치 등을 자동으로 감지해서 제어하는 서비스이다. 문제는 ModemManager가 /dev/tty, /dev/serial 같은 시리얼 장치에도 신호를 보내보는 것이다.
그래서 Pixhawk는 시리얼로 MAVLink를 쓰는데, ModelManager가 중간에 포트를 열었다 닫았다하며 연결에 영향을 줄 수 있다.

따라서 나는 ModelManager를 서비스만 비활성화하는 방식으로 warning을 해결하고자 한다.
(해당 오류는 시스템 설치 여부로 인해 경고가 발생하는 거라 비활성화해도 오류가 발생하긴 한다. 다만 나중에 쓸 수도 있으니.....삭제까진 하지 않고 비활성화만 하려고 한다.)

sudo systemctl disable --now ModemManager
systemctl status ModemManager (-> inactive (dead)이면 성공)
pgrep -a ModemManager (ModemManager 프로세스가 살아있는지 확인하는 명령어. 아무 출력 없으면 성공)

여기까지 성공했다면 라즈베리파이와 픽스호크의 연결이 잘 수행된 것이다. 끝!


오류 1
중간에 os를 밀고 다시 깔았더니 REMOTE HOST IDENTIFICATION HAS CHANGED - RSA key 오류 발생
이는 원격 호스트 식별 정보가 변경되어, 기존에 등록되어있던 RSA key가 다르기 때문이라고 한다.
쉽게 말하면, IP는 동일한데 목적지 서버 장비가 바뀌었을 경우 나오는 경고이다. 새로 os를 깔았는데 IP가 동일해서 이런 오류가 발생했나보다.

해결 방법

ssh-keygen -R [서버 ip]

참고 https://kingsong.tistory.com/127#google_vignette

오류 2
E: Package 'python-pip' has no installation candidate

python3-pip으로 변경

python-dev 도 python3-dev으로 변경

오류 3

해당 오류는 라즈베리파이 5가 Bookworm 시스템이기 때문에, sudo pip을 사용 시 "externally-managed-environment" 오류가 발생한다.
따라서, 가상 환경을 만들어서 수행하였다.

참고 https://mallard-oh-coding.tistory.com/20

mkdir [프로젝트 폴더]
cd [프로젝트 폴더]/
python3 -m venv --system-site-packages [env 이름]
source [env 이름]/bin/activate

pip install future
pip install pyserial
pip install dronekit
pip install MAVProxy

sudo apt update
sudo apt install python3-wxgtk4.0
pip install lxml
profile
Web-Front / SW-AI 개발자

0개의 댓글