概述
用Python实现大疆无人机航点规划任务
- 一、硬、软件环境
- 二、航点规划任务的流程图
- 三、流程的基本步骤
- 四、`drone_proxy`包的获取方式
ROS| 大疆| M600 Pro| 开发者| Python| SDK|
一、硬、软件环境
- 无人机:大疆M600 Pro无人机
- 飞控单元:A3 Pro
- 飞控接口:大疆Onboard-SDK-ROS
- 开发平台:树莓派ubuntu、ubuntu电脑主机
- 代码实现语言:Python
事实上,以下机型都支持
Aircraft/FC | Firmware Package Version | Flight Controller Version | OSDK Branch | Notes |
---|---|---|---|---|
M210/M210 RTK | 1.1.0913 | 3.3.10.4 | OSDK-ROS 3.7 | |
M600/M600 Pro | 1.0.1.66 | 3.2.41.13 | OSDK-ROS 3.7 | |
A3/A3 Pro | 1.7.6.0 | 3.3.8.39 | OSDK-ROS 3.7 | |
N3 | 1.7.6.0 | 3.3.8.39 | OSDK-ROS 3.7 | |
M100 | 1.3.1.82 | 3.1.10.0 | OSDK-ROS 3.7 |
二、航点规划任务的流程图
三、流程的基本步骤
- 按照大疆官网安装Onboard-SDK-ROS ,链接;
- 导入相关的包,其中
drone_proxy
这个包定义了一系列无人机对象和方法,需要付费才能获取哦 ;
#!/usr/bin/python
# -*- coding: utf-8 -*-
import rospy
from drone_proxy import *
- 激活无人机并获取SDK控制权限 ;
drone = Drone()
ret = drone.activate()
if ret.result:
print "无人机激活成功!"
ret = drone.obtain_authority()
if ret.result:
print "SDK获取无人机控制权限成功!"
else:
if ret.ack_data == 3 and ret.cmd_set == 1 and ret.cmd_id == 0:
print "正在获取控制权限,再发一次请求..."
drone.obtain_authority()
else:
print "获取控制权限失败!"
- ROS节点初始化 并订阅当前位置;
rospy.init_node('demo_waypoint', anonymous=True)
ori_pos = rospy.client.wait_for_message("/dji_sdk/gps_position", NavSatFix, 2)
- 定义航点属性函数;
def waypoint_property(latitude, longitude, altitude, heading=0, hovertime=5):
"""航点属性赋值函数"""
wp = MissionWaypoint()
wp.latitude = latitude
wp.longitude = longitude
wp.altitude = altitude
wp.damping_distance = 0 # Bend length (effective coordinated turn mode only)
wp.target_yaw = heading # 目标偏航角
wp.target_gimbal_pitch = 0 #TODO
wp.turn_mode = 0 # 转弯模式 0顺时针方向 1逆时针方向
# 设置悬停
wp.has_action = 1 # 有没有动作 0无 1有
wp.action_time_limit = 5000
wp.waypoint_action.action_repeat = 1
wp.waypoint_action.command_list = "