我正在寻找创建自主滑翔机并需要一些基本功能
检索GPS数据并将其存储到文件中
在Python函数中导入GPS数据
将航点lat,long,alt发送到自动驾驶仪(APM)
我当前正在使用MAVProxy作为我的GCS和ErleBrain 3作为我的自动驾驶仪硬件,但目标是不需要GCS,而只是使用python脚本根据接收到的GPS数据自动添加和删除航路点
#1 楼
有几个库可以做您想做的事情,第一个是pyMAVlink,第二个是dronekit-python,使用dronekit会最容易,因为它可以处理许多较低层的东西,例如处理传入数据包和连接您的首选界面会自动出现。我假设您想从文件中加载航路点并让您的无人机驾驶它们?在这种情况下,您可能希望将无人机设置为引导模式(有关Ardupilot上的模式的说明,请参见此处的文档),这将告诉Ardupilot您将逐步命令它做什么。这里是wiki的一些示例代码,它可以执行您想要的操作,您只需要加载文件并将坐标转换为纬度点即可:
def arm_and_takeoff(aTargetAltitude):
while not vehicle.is_armable:
print " Waiting for vehicle to initialise..."
time.sleep(1)
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
print " Waiting for arming..."
time.sleep(1)
print "Taking off!"
vehicle.simple_takeoff(aTargetAltitude)
# Wait for takeoff to finish
while True:
print " Altitude: ", vehicle.location.global_relative_frame.alt
if vehicle.location.global_relative_frame.alt>=aTargetAltitude*0.95: #Trigger just below target alt.
print "Reached target altitude"
break
time.sleep(1)
def get_distance_metres(aLocation1, aLocation2):
dlat = aLocation2.lat - aLocation1.lat
dlong = aLocation2.lon - aLocation1.lon
return math.sqrt((dlat*dlat) + (dlong*dlong)) * 1.113195e5
# define connection method
# see all the methods at http://python.dronekit.io/guide/connecting_vehicle.html
connection_string = "127.0.0.1:14550"
# Connect
vehicle = connect(connection_string, wait_ready=True)
# arm and takeooff to 10m
arm_and_takeoff(10)
# set airspeed to 3 m/s
vehicle.airspeed = 3
point1 = LocationGlobalRelative(-35.361354, 149.165218, 20)
vehicle.simple_goto(point1)
while vehicle.mode.name=="GUIDED": #Stop action if we are no longer in guided mode.
remainingDistance=get_distance_metres(vehicle.location.global_frame, point1)
print "Distance to target: ", remainingDistance
if remainingDistance<=targetDistance*0.01: #Just below target, in case of undershoot.
print "Reached target"
break;
time.sleep(2)
每个请求我都有一些pymavlink代码示例,您可以在此处看到更多示例,发送消息很麻烦,您需要确定需要发送哪种类型的数据包,并按照标准填充其参数
from pymavlink import mavutil
data = mavutil.mavlink_connection('udp:localhost:14551', planner_format=False,
notimestamps=True,
robust_parsing=True)
while True:
msg = data.recv_match();
#If we have a valid message
if msg is not None:
#print msg.get_type()
if msg.get_type() is "HEARTBEAT":
print msg.autopilot
elif msg.get_type() is "NAV_CONTROLLER_OUTPUT":
print msg
评论
$ \ begingroup $
马克,您好,谢谢您的答复。不幸的是,我必须使用pymavlink。有没有任何示例代码可以帮助我掌握方向。
$ \ endgroup $
–car12398
17 Mar 2 '17 at 15:05
$ \ begingroup $
为什么必须使用pymavlink?我可以在一分钟内发布一些示例,但是您必须实时提取所需的数据,知道其中包含哪些数据包,等等...如果可以使用,我强烈建议DroneKit。
$ \ endgroup $
– Mark Omo
17年3月2日在15:07
$ \ begingroup $
我使用的是Erle-brain,显然与Dronekit不兼容。您知道有任何指导您学习的基于教程的网站吗?
$ \ endgroup $
–car12398
17 Mar 2 '17 at 18:34
$ \ begingroup $
这是错误的,Erle-brain运行ardupilot,它使用mavlink,Dronekit和pymavlink都只是mavlink接口,可用于从Navio2到Erle-brain到Parrot bebop的任何平台
$ \ endgroup $
– Mark Omo
17 Mar 2 '17 at 18:43
$ \ begingroup $
谢谢您的帮助马克,如果Erle Brain清楚一点,那就容易多了!
$ \ endgroup $
–car12398
17 Mar 9 '17 at 14:25