我正在使用 APM 自动驾驶我的六轴飞行器并遵循本教程。通过查看这个可用的命令,我看不到如何命令无人机向左/向右/向前/向后?
有人可以帮我吗?
您需要创建一个 vehicle.message_factory.set_position_target_local_ned_encode。它将需要一个框架 mavutil.mavlink.MAV_FRAME_BODY_NED。您将所需的 x、y 和/或 z 速度(以 m/s 为单位)添加到消息中。
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")
玩得开心,当然,在编程和飞行无人机时要遵守严格的安全守卫。手动模式覆盖是必须的!
Dronekit-python 具有重要的 API 来在本地框架中命令无人机。从我个人的经验来看,使用这些命令让我的无人机在本地跟随一个形状,例如正方形或圆形,我很难理解。另一种方法是使用FlytOS 无人机 API。如果您在 github 上看到此示例 python 代码,您可以看到命令无人机向左 x 米然后向前 y 米等是多么容易。乔恩的回答确实正确地显示了如何使用dronekit 来实现您想要做的事情,但是另一个可能被复杂代码吓倒的初学者。
我有同样的问题,我希望这个链接有助于在此处查找文章的“通过指定车辆的速度分量进行控制”部分