2016-09-26 6 views
0

Я использую APM для автопилота моего гексакоптера и последующего this учебника. посмотрев на this доступных команд, я не вижу, как можно управлять дроном, чтобы идти влево/вправо/вперед/назад?Как сделать «идти влево/вправо/вперед/назад» с помощью python dronekit?

Может ли кто-нибудь помочь мне в этом?

ответ

0

Вам необходимо создать транспортное средство.message_factory.set_position_target_local_ned_encode. Для этого потребуется рамка mavutil.mavlink.MAV_FRAME_BODY_NED. Вы добавляете к сообщению требуемые скорости x, y и/или z (в м/с).

from pymavlink import mavutil 
from dronekit import connect, VehicleMode, LocationGlobalRelative 
import time 

def send_body_ned_velocity(velocity_x, velocity_y, velocity_z, duration=0): 
    msg = vehicle.message_factory.set_position_target_local_ned_encode(
     0,  # time_boot_ms (not used) 
     0, 0, # target system, target component 
     mavutil.mavlink.MAV_FRAME_BODY_NED, # frame Needs to be MAV_FRAME_BODY_NED for forward/back left/right control. 
     0b0000111111000111, # type_mask 
     0, 0, 0, # x, y, z positions (not used) 
     velocity_x, velocity_y, velocity_z, # m/s 
     0, 0, 0, # x, y, z acceleration 
     0, 0) 
    for x in range(0,duration): 
     vehicle.send_mavlink(msg) 
     time.sleep(1) 

connection_string = 'tcp:192.168.1.2:5760' # Edit to suit your needs. 
takeoff_alt = 10 
vehicle = connect(connection_string, wait_ready=True) 
while not vehicle.is_armable: 
    time.sleep(1) 
vehicle.mode = VehicleMode("GUIDED") 
vehicle.armed = True 
while not vehicle.armed: 
    print('Waiting for arming...') 
    time.sleep(1) 
vehicle.simple_takeoff(takeoff_alt) # Take off to target altitude 
while True: 
    print('Altitude: %d' % self.vehicle.location.global_relative_frame.alt) 
    if vehicle.location.global_relative_frame.alt >= takeoff_alt * 0.95: 
     print('REACHED TARGET ALTITUDE') 
     break 
    time.sleep(1) 

# This is the command to move the copter 5 m/s forward for 10 sec. 
velocity_x = 0 
velocity_y = 5 
velocity_z = 0 
duration = 10 
send_body_ned_velocity(velocity_x, velocity_y, velocity_z, duration) 

# backwards at 5 m/s for 10 sec. 
velocity_x = 0 
velocity_y = -5 
velocity_z = 0 
duration = 10 
send_body_ned_velocity(velocity_x, velocity_y, velocity_z, duration) 

vehicle.mode = VehicleMode("LAND") 

Удачи и, конечно же, понаблюдать за строгими безопасными предохранителями при программировании и летающих БПЛА. Ручное переопределение режима является обязательным!

0

Dronekit-python имеет нетривиальные API для управления дроном в локальном фрейме. По моему личному опыту, было трудно поднять голову, используя эти команды, чтобы мой гудок следовал за формой локально, например, квадрат или круг. Альтернатива использует FlytOS drone APIs. Если вы видите этот образец python code on github, вы можете увидеть, как легко выполнить команду, чтобы гул прошел слева, а затем переместил y метров и т. Д. Ответ Джона действительно показывает, как можно использовать дронекит для достижения того, что вы пытаетесь сделать, но другое начинающий, которого можно запугать сложным кодом.

 Смежные вопросы

  • Нет связанных вопросов^_^