Skip to content

Instantly share code, notes, and snippets.

@djdisodo
Created February 17, 2025 08:47
Show Gist options
  • Select an option

  • Save djdisodo/409ed9d6d350709b92ff2789171ea8e1 to your computer and use it in GitHub Desktop.

Select an option

Save djdisodo/409ed9d6d350709b92ff2789171ea8e1 to your computer and use it in GitHub Desktop.

아두파일럿을 "luckfox-pico"에 포팅하는 과정

luckfox-pico는 Rockchip의 RV1103 SoC를 장착하고있으며 스펙은 아래와 같다

CPU: ARM Cortex-A7 @ 1GHz x1
MEMORY: 64MB DDR2
STORAGE: 외부에 장착하는 microSD
기타: H264/H265 하드웨어 인코딩 지원 (720p)

이 중에서 카메라를 사용하게 되면 일부를 카메라에 할당하기때문에 사용가능한 메모리가 더 줄어든다.

따라서 메모리 사용량이 적은 리눅스 배포판이 필요하여 Alpine Linux를 사용하게 됨 링크

리눅스 사용법은 배포판별로 아주 큰 차이가 나지는 않음(대부분의 차이는 패키지 관리자의 차이임)

아래 아두파일럿 포팅 방법도 배포판별로 큰 차이가 나지 않음

PWM이나 I2C 하드웨어 접근방법도 추상화가 되어있어 보드별로/리눅스 배포판 별로 차이가 없음

Tools/ardupilotwaf/boards.py

먼저 파일의 다른 리눅스 보드들을 참고해서 보드 지원을 위한 클래스를 추가함

CONFIG_HAL_BOARD_SUBTYPE는 임의의 값으로 하지만

다른 보드들과 작명법을 같이하는것이 좋음

HAL_BOARD_SUBTYPE_LINUX_ASTROLUCKFOX는 나중에 C매크로 등에서 사용됨 image

Tools/scripts/board_list.py

위 파일의 보드 목록에 만든 클래스를 추가해준다 image

libraries/AP_HAL/AP_HAL_Boards.h

위 파일도 수정해준다 번호를 부여하는데 다른것과 겹치지 않도록 주의한다 image

libraries/AP_HAL_Linux/AnalogIn_IIO.h

ADC의 출력을 실제 전압으로 확인할려면 일반적으로 숫자를 곱해줘야한다

luckfox의 ADC는 최대 1.8V까지 측정가능하며 1.8v에서 1024를 출력하기때문에

1.8/1024를 추가해준다 image 위 이미지의 코드는 보드가 HAL_BOARD_SUBTYPE_LINUX_ASTROLUCKFOX

ADC의 배수를 1.757812500/1024로 설정하라는 의미이다.

libraries/AP_HAL_Linux/RCOutput_Sysfs_Table.h, libraries/AP_HAL_Linux/RCOutput_Sysfs_Table.cpp

위 두 파일들은 없던 파일들인데 libraries/AP_HAL_Linux/RCOutput_Sysfs.h를 참고해서 추가해 주었다

이 보드가 sysfs를 통해 PWM을 지원을 하지만 핀별로 부여된 번호가 순서대로가 아니기때문에

pwmchip-pwmpin을 순서대로 나열할 수 있는 클래스를 추가해 주었다.

이 소스코드는 그대로 사용해도 상관없으니 따로 적어두진 않음 링크 참고

libraries/AP_HAL_Linux/HAL_Linux_Class.cpp

image

117번째 줄의 내용은 보드가 HAL_BOARD_SUBTYPE_LINUX_ASTROLUCKFOX이면

static AnalogIn_IIO analogIn; 코드를 추가하는 내용이다.(ADC를 이용해서 배터리 전압 측정이 가능하도록 한다)

224번째 줄의 내용은 PWM핀을 순서대로 나열하는

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment