Post

Offboard Control을 위한 Pixhawk-Jetson 통신

Pixhawk-Jetson

Pixhawk를 사용하면서 Jetson과 연결한 후 Mavros를 통해 제어를 진행한다.
이때 Jetson과 Pixhawk 사이의 통신 방법에 대해 적어보려고 한다.

CUAV X7에 PX4를 업로드하여 진행 하였으며, Jetson의 경우 Orin NX를 사용하였다.

Pixhawk-Jetson 연결 방식

Pixhawk와 Jetson 사이의 연결 방식은 크게 두 가지로 나뉜다.
Jetson에 위치한 GPIO 핀을 이용한 UART 통신 방법과 USB to TTL 컨버터를 사용하는 방식이다.

두 방식 모두 사용하는 Pixhawk의 Pinout을 확인한 후 Gnd와 TX, RX에 대한 와이어링을 진행해주면 된다.
또, Jetson과 Pixhawk 사이의 TX, RX를 교차하여 연결 해주는 것도 잊지 말자.

gpio

using GPIO pin

gpio

using USB to TTL Converter

연결 방식은 두가지 방식 중 GPIO 핀을 이용한 방식을 채택하였으며 이유는 다음과 같다.

  • USB to TTL 컨버터의 크기가 너무 큼
  • 안정적인 통신이 가능하며 부피도 거의 차지 안함
  • 드론 비행 중 발생할 수 있는 USB의 접촉 불량 가능성

PX4 Parameter

PX4 파라미터 설정은 간단하다.
Jetson과 연결하고자 하는 Pixhawk의 포트를 정한 후 그 포트에 대한 설정을 진행해주면 된다.

나의 경우에는 CUAV X7의 UART 포트를 활용하고자 하여, GPS2로 설정을 진행하였다.

Default UART Order (CUAV X7)

  • SERIAL0 = console = USB (MAVLink2)
  • SERIAL1 = Telemetry1 (MAVlink2 default)= USART2 DMA-enabled
  • SERIAL2 = Telemetry2 (MAVlink2 default)= USART6 DMA-enabled
  • SERIAL3 = GPS1 = USART1
  • SERIAL4 = GPS2 = UART4
  • SERIAL5 = USER = UART8 (not available except on custom carrier boards) DMA-enabled
  • SERIAL6 = USER = UART7
  • SERIAL7 = USB2 (Default protocol is MAVLink2)

변경한 파라미터는 아래와 같다.

1
2
MAV_1_CONFIG = GPS 2(202)
SER_GPS2_BAUD = 921600 8N1 (921600)

Port Permission & Mavros

기본적으로 Pixhawk와 연결된 포트를 사용하기 위하여 권한을 바꿔줄 필요가 있다.
기본적으로 GPIO핀으로 통신을 진행한다면 ttyTHS0로 잡힐 것이다.
USB to TTL 방식도 똑같이 해당되는 포트에 대한 권한을 풀어주면 된다.

여기서 a+rw는 모든 사용자에게 읽기 및 쓰기 권한을 부여하는 것이다.

1
sudo chmod a+rw /dev/ttyTHS0

이후 Mavros안에 위치한 px4.launch 파일에서 ‘fcu_url’ 에 내가 설정한 포트 이름과 Baudrate를 입력 해주면 통신이 가능해진다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<launch>
	<arg name="fcu_url" default="/dev/ttyTHS0:921600" />
	<arg name="gcs_url" default="" />
	<arg name="tgt_system" default="1" />
	<arg name="tgt_component" default="1" />
	<arg name="log_output" default="screen" />
	<arg name="fcu_protocol" default="v2.0" />
	<arg name="respawn_mavros" default="false" />
	<arg name="namespace" default="mavros"/>

	<include file="$(find-pkg-share mavros)/launch/node.launch">
		<arg name="pluginlists_yaml" value="$(find-pkg-share mavros)/launch/px4_pluginlists.yaml" />
		<arg name="config_yaml" value="$(find-pkg-share mavros)/launch/px4_config.yaml" />
		<arg name="fcu_url" value="$(var fcu_url)" />
		<arg name="gcs_url" value="$(var gcs_url)" />
		<arg name="tgt_system" value="$(var tgt_system)" />
		<arg name="tgt_component" value="$(var tgt_component)" />
		<arg name="log_output" value="$(var log_output)" />
		<arg name="fcu_protocol" value="$(var fcu_protocol)" />
		<arg name="respawn_mavros" value="$(var respawn_mavros)" />
		<arg name="namespace" value="$(var namespace)"/>
	</include>
</launch>
This post is licensed under CC BY 4.0 by the author.