首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python dronekit实现“向左/向右/向前/向后”?

如何使用python dronekit实现“向左/向右/向前/向后”?
EN

Stack Overflow用户
提问于 2016-09-26 13:22:41
回答 3查看 2.9K关注 0票数 0

我正在使用APM自动驾驶我的六角飞行器,并遵循this教程。通过查看this可用的命令,我无法理解如何命令无人机向左/向右/向前/向后移动?

有人能帮我解决这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-16 19:55:51

您需要创建一个vehicle.message_factory.set_position_target_local_ned_encode.它将需要一个mavutil.mavlink.MAV_FRAME_BODY_NED框架。您可以将所需的x、y和/或z速度(以m/s为单位)添加到消息中。

代码语言:javascript
复制
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")

玩得开心,当然,在编程和飞行无人机时要遵守严格的安全守卫。手动模式覆盖是必须的!

票数 2
EN

Stack Overflow用户

发布于 2017-04-17 21:37:10

Dronekit-python有非常重要的API来命令本地框架中的无人机。根据我的个人经验,我很难使用这些命令让我的无人机在局部遵循一个形状,例如一个正方形或一个圆形。另一种方法是使用FlytOS drone APIs。如果你看到这个示例python code on github,你可以看到命令无人机向左x米然后向前y米等等是多么容易。Jon的答案确实正确地展示了如何使用dronekit来实现你想要做的事情,但另一个初学者可能会被复杂的代码吓倒。

票数 0
EN

Stack Overflow用户

发布于 2018-12-06 01:25:40

我也遇到过同样的问题,我希望这个链接能帮助你找到here这篇文章中的“通过指定车辆的速度组件进行控制”部分

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39695181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档