이동하기(SET_POSITION_TARGET_LOCAL_NED)
저작권: 쿼드(QUAD) 드론연구소 https://smartstore.naver.com/maponarooo
Last updated
저작권: 쿼드(QUAD) 드론연구소 https://smartstore.naver.com/maponarooo
Last updated
드론의 이동 명령은 아래 3가지 MAV_CMD가 사용될 수 있으며, GUIDED 모드(ArduPilot) 또는 OFFBOARD 모드(PX4) 에 있는 동안 드론의 위치, 속도 또는 자세를 제어하는 데 사용할 수 있습니다. 본 교재에서는 와 대해 학습 합니다. ( 은 잘 사용되지 않음)
차량의 목표 위치(EKF 원점에서 NED의 오프셋으로), 속도, 가속도, 방향 또는 선회율을 설정합니다. 메시지 정의는 다음과 같습니다.
명령 필드
설명
time_boot_ms
부팅 이후 보낸 사람의 시스템 시간(밀리초)
target_system
차량의 시스템 ID
target_component
비행 컨트롤러의 구성 요소 ID 또는 0
coordinate_frame
사용할 수 있는 MAV_FRAME은 다음과 같습니다.
type_mask
차량에서 무시 해야 하는 필드를 나타내는 비트 마스크 (POSITION_TARGET_TYPEMASK 열거형 참조)
bit1:PosX, bit2:PosY, bit3:PosZ, bit4:VelX, bit5:VelY, bit6:VelZ, bit7:AccX, bit8:AccY, bit9:AccZ, bit11:yaw, bit12:yaw 비율
Pos, Vel 및/또는 Accel을 제공할 때 3축을 모두 제공해야 합니다. Pos, Vel 및 Accel 중 하나 이상을 제공해야 합니다(예: Yaw 또는 YawRate만 제공하는 것은 지원되지 않음).
사용 위치 : 0b110111111000 / 0x0DF8 / 3576(십진수)
사용 속도 : 0b110111000111 / 0x0DC7 / 3527(십진수)
가속 사용 : 0b110000111111 / 0x0C3F / 3135 (십진수)
Pos+Vel 사용 : 0b110111000000 / 0x0DC0 / 3520(십진수)
Pos+Vel+Accel 사용 : 0b110000000000 / 0x0C00 / 3072(십진수)
요 사용 : 0b100111111111 / 0x09FF / 2559(십진수)
요레이트 사용 : 0b010111111111 / 0x05FF / 1535(십진수)
x
미터 단위의 X 위치(양수는 전방 또는 북쪽)
y
미터 단위의 Y 위치(양수는 오른쪽 또는 동쪽)
z
미터 단위의 Z 위치(양수는 아래)
vx
m/s 단위의 X 속도(양수는 전방 또는 북쪽)
vy
Y 속도(m/s)(양수는 오른쪽 또는 동쪽)
vz
Z 속도(m/s)(양수는 아래)
afx
m/s/s 단위의 X 가속(양수는 전방 또는 북쪽)
afy
Y 가속도(m/s/s)(양수는 오른쪽 또는 동쪽)
afz
m/s/s 단위의 Z 가속도(양수는 다운)
yaw
yaw 또는 라디안 방향(0은 전방 또는 북쪽)
yaw_rate
요레이트(rad/s)
coordinate_frame
는 다음 값을 사용합니다.프레임
설명
MAV_FRAME_LOCAL_NED
(1)
위치는 NED 프레임에서 차량의 EKF 원점을 기준으로 합니다.
즉 x=1,y=2,z=3은 원점에서 북쪽 1m, 동쪽 2m, 아래쪽 3m입니다.
EKF 원점 은 차량이 처음으로 위치 추정을 달성했을 때의 차량 위치입니다.
속도와 가속도는 NED 프레임에 있습니다.
MAV_FRAME_LOCAL_OFFSET_NED
(7)
위치는 차량의 현재 위치를 기준으로 합니다.
즉 x=1,y=2,z=3은 현재 위치에서 북쪽으로 1m, 동쪽으로 2m, 아래로 3m입니다.
속도와 가속도는 NED 프레임에 있습니다.
MAV_FRAME_BODY_NED
(8)
위치는 NED 프레임의 EKF 원점을 기준으로 합니다.
즉 x=1,y=2,z=3은 원점에서 북쪽 1m, 동쪽 2m, 아래쪽 3m입니다.
속도 및 가속도는 현재 차량 방향에 상대적입니다. 이를 사용하여 앞으로, 오른쪽 및 아래로(또는 음수 값을 사용하는 경우 반대) 속도를 지정합니다.
MAV_FRAME_BODY_OFFSET_NED
(9)
위치는 차량의 현재 위치 및 방향에 상대적입니다.
즉 x=1,y=2,z=3은 현재 위치에서 앞으로 1m, 오른쪽으로 2m, 아래로 3m
속도 및 가속도는 현재 차량 방향에 상대적입니다. 이를 사용하여 앞으로, 오른쪽 및 아래로(또는 음수 값을 사용하는 경우 반대) 속도를 지정합니다.
차량 요가 변경되지 않도록 요율을 0으로 지정
프레임에서
_OFFSET_
"차량 위치 기준"을 의미하고_LOCAL_
"홈 위치 기준"을 의미합니다( 속도 방향에 영향을 미치지 않음)._BODY_
속도 구성 요소가 NED 프레임이 아닌 차량의 방향에 상대적임을 의미합니다.
속도나 가속도 명령을 보내면 1초마다 다시 보내야 함(명령을 받지 않으면 3초 후 차량 정지)
다음은 이 명령을 테스트하기 위해 MAVProxy(일명 SITL)에 복사하여 붙여넣을 수 있는 몇 가지 예제 명령입니다. 이 명령을 실행하기 전에 다음을 실행하시오.
module load message
GUIDED 모드로 변경
암 스로틀
이륙 10m
MAVProxy/SITL 명령의 예
설명
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 1 3576 100 0 -10 0 0 0 0 0 0 0 0
EKF 원점에서 북쪽으로 100m, 위쪽 으로 10m 비행
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 7 3576 10 0 0 0 0 0 0 0 0 0 0
현재 위치에서 북쪽으로 10m 비행
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 9 3576 10 0 0 0 0 0 0 0 0 0 0
현재 위치에서 10m 전방 비행
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 1 3527 0 0 0 1 0 0 0 0 0 0 0
북쪽으로 1m/s로 비행
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 9 3527 0 0 0 1 0 0 0 0 0 0 0
1m/s로 앞으로 비행
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 9 1479 0 0 0 0 1 0 0 0 0 0 0
0의 요율로 1m/s로 오른쪽으로 비행
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 1 3135 0 0 0 0 0 0 1 0 0 0 0
북쪽으로 1m/s로 가속
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 9 3135 0 0 0 0 0 0 1 0 0 0 0
1m/s로 앞으로 가속
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 9 1087 0 0 0 0 0 0 0 1 0 0 0
0의 요율로 1m/s에서 오른쪽으로 가속
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 1 2503 0 0 0 0 0 0 0 0 0 0.7854 0
북동쪽으로 회전(Yaw 대상 + 속도 0)
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 9 2503 0 0 0 0 0 0 0 0 0 0.7854 0
오른쪽으로 45도 회전(Yaw target + 0의 속도)
message SET_POSITION_TARGET_LOCAL_NED 0 0 0 1 1479 0 0 0 0 0 0 0 0 0 0 0.174
시계 방향으로 10deg/sec로 회전(속도 0)
set_position_local_ned 메시지를 이용하여 드론을 이동하는 코드를 작성해 보겠습니다.
전체 코드는 아래와 같습니다. movement.py 파일을 만들고 아래 코드를 입력 합니다.
이제 터미널 창을 열고 실행을 해 봅시다.
드론이 고도 20m, 북쪽 방향으로 30m 전진하는 것을 볼 수 있습니다.
= 1, = 7,
= 8,
= 9