이 가이드는 별도의 문서화 없이도 완벽하게 작동하는 통합 솔루션을 제공합니다:
LD30-S1R → 컴패니언 컴퓨터(라즈베리 파이/젯슨/안드로이드) → MAVLink → 픽스호크
여기에는 배선 다이어그램, 데이터 구문 분석 흐름, 바로 실행 가능한 Python 코드, Pixhawk 매개변수 설정, 지상 관제소 검증이 포함됩니다.
이 가이드를 단계별로 따라가면 시스템이 즉시 작동합니다.
1. 배선 연결(LD30 ↔ 컴패니언 컴퓨터 ↔ 비행 조종기) 1.
1.1 LD30-S1R ↔ 컴패니언 컴퓨터(UART)
컴패니언 컴퓨터가 될 수 있습니다:
USB-UART가 있는 라즈베리 파이/젯슨 나노/산업용 PC/안드로이드 디바이스
| LD30-S1R | 컴패니언 컴퓨터(UART) |
|---|
| VCC(3.3-4.0V) | 3.3V 또는 외부 레귤레이터 |
| GND | GND |
| TXD(오픈 드레인) | RX |
| RXD | TX |
| PWREN | 풀 하이(3.3V) 또는 GPIO |
| nRST | 연결되지 않음 |
참고: LD30은 3.3V TTL UART를 사용합니다. 하지 마십시오 5V TTL UART에 연결합니다.
TX는 개방형 드레인이며, Raspberry Pi 및 Jetson의 내부 풀업은 정상적으로 작동합니다.
1.2 컴패니언 컴퓨터 ↔ 픽스호크(MAVLink UART)
사용 TELEM1 / TELEM2 포트.
| 컴패니언 컴퓨터 | 픽스호크(원격 포트) |
|---|
| TX | RX |
| RX | TX |
| GND | GND |
- 전송 속도: 115200
- 프로토콜: MAVLink2
2. 컴패니언 컴퓨터에서 LD30-S1R 데이터 읽기
LD30은 바이너리 명령 프로토콜을 사용하여 통신합니다.
컴패니언 컴퓨터가 처리합니다:
- UART 포트 열기
- “연속 측정” 명령 보내기
- 로 시작하는 프레임 구문 분석 0xAA
- 추출 거리(mm)
- 미터로 변환
- MAVLink에 포장 거리_센서
- 픽스호크에 보내기
2.1 연속 측정 명령
LD30 사용 설명서(14.12절) 참조:
AA 00 00 20 00 01 00 04 25
2.2 데이터 프레임 형식
반환된 데이터에는 다음이 포함됩니다:
- 거리: 4바이트(mm)
- 신호 품질: 2바이트
- 프레임 헤더: 0xAA
3. 파이썬 스크립트 완성(실행 준비 완료)
이 스크립트:
읽기 LD30
거리 구문 분석
mm → m로 변환
MAVLink 전송 거리_센서
실시간으로 Pixhawk로 데이터 스트리밍
다른 이름으로 저장 ld30_to_mavlink.py
함께 실행하세요:
python3 ld30_to_mavlink.py
시리얼 가져오기
pymavlink에서 마부틸 임포트
구조체 가져오기
# --- LD30 시리얼 포트 ---.
ld30 = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.1)
# 연속 측정 명령(매뉴얼 14.12부터)
CONT_MEASURE = bytes([0xAA,0x00,0x00,0x20,0x00,0x01,0x00,0x04,0x25])
ld30.write(CONT_MEASURE)
# --- 픽스호크에 MAVLink 연결 ---
mav = mavutil.mavlink_connection('/dev/ttyAMA0', baud=115200)
def send_distance_to_fc(distance_m):
mav.mav.distance_sensor_send(
0, # time_boot_ms
3, # min_distance (cm)
3000, # max_distance (cm)
int(distance_m * 100), # 현재 거리 (cm)
0, # 유형
0, # id
0, # 방향
0 # 공분산
)
버퍼 = 바이트열 배열()
True인 동안
data = ld30.read()
데이터가 아니라면
계속
버퍼 += 데이터
# 최소 프레임 길이 = 12 바이트
if len(buffer) >= 12:
# 0xAA 헤더 찾기
if buffer[0] != 0xAA:
buffer.pop(0)
계속
# 고정 길이 프레임 구문 분석하기
if len(buffer) >= 12:
# 거리는 6~9바이트(빅엔디안)입니다.
dist_bytes = buffer[6:10]
distance_mm = struct.unpack(">I", dist_bytes)[0]
distance_m = distance_mm / 1000.0
print("LD30 거리:", distance_m, "m")
send_distance_to_fc(distance_m)
버퍼 = 바이트 배열() # 버퍼 지우기
4. Pixhawk 매개변수 구성(미션 플래너)
이동합니다:
구성 → 전체 매개변수 목록
다음을 설정합니다:
| 매개변수 | 가치 |
|---|
| RNGFND1_TYPE | 10 (MAVLink) |
| RNGFND1_MIN_CM | 3 |
| RNGFND1_MAX_CM | 3000 |
| RNGFND1_ORIENT | 0(정방향) 또는 25(하향) |
| rngfnd1_rmetric | 1 |
| serial1_protocol | 2 (MAVLink2) |
| SERIAL1_BAUD | 115 |
TELEM2를 사용하는 경우 SERIAL2_*를 사용합니다.
TELEM3을 사용하는 경우 SERIAL3_*를 사용합니다.
5. 미션 플래너 / QGroundControl에서 LD30 데이터 모니터링
5.1 미션 플래너
로 이동합니다:
비행 데이터 → 상태 → 소나_범위 / rngfnd1_dist
또는:
Ctrl + F → MAVLink Inspector → DISTANCE_SENSOR
곧 알게 되실 겁니다:
- 실시간 거리
- 업데이트 빈도
- MAVLink 스트림 ID
5.2 QGroundControl
탐색:
위젯 → 분석 도구 → MAVLink Inspector → DISTANCE_SENSOR
6. 전체 시스템 워크플로
LD30-S1R
│
TTL UART 3.3V
│
┌────컴패니언 컴퓨터────┐
│ LD30 파싱 로직 │
│ MAVLink 패키징 │
└─────────┬──────────┘
MAVLink UART
│
픽스호크 비행 컨트롤러
│
미션 플래너 / QGroundControl