DroneKit教程(二):控制Pixhawk示例
来源:互联网 发布:福建安全网络知识竞赛 编辑:程序博客网 时间:2024/06/09 22:40
DroneKit教程(二):控制Pixhawk示例
本篇提供了一个简单的示例,配以详细的注释说明不同语句的功能,希望能给各位一个总体的框架和印象。
- 该示例文件改写自DroneKit的官方示例。
- 在本示例中,我们使用SITL作为测试工具,MAVProxy进行数据转发
预先准备
根据“使用从源码编译的SITL测试DroneKit代码”中的要求,运行SITL和MAVProxy:
打开Cygwin Terminal,依次输入
cd ~/ardupilot/ArduCopter/./ArduCopter.elf --home -35,149,584,270 --model quad
新开一个cmd,运行
mavproxy.py --master tcp:127.0.0.1:5760 --sitl 127.0.0.1:5501 --out 127.0.0.1:14550 --out 127.0.0.1:14551
(可选)在MissionPlanner地面站中监控无人机的状态和轨迹。运行MissionPlanner地面站,右上角选择UDP,点击connect连接。端口填写14550
在测试过程中,请保持SITL和MAVProxy运行。
示例:simple_goto.py
本示例将展示如何连接到无人机,控制无人机解锁后升空到10m,依次朝两个方向飞行30s,最后返回出发点并降落。
#!/usr/bin/env python# -*- coding: utf-8 -*-"""© Copyright 2015-2016, 3D Robotics.simple_goto.py: GUIDED mode "simple goto" example (Copter Only)Demonstrates how to arm and takeoff in Copter and how to navigate to points using Vehicle.simple_goto."""from __future__ import print_functionimport timefrom dronekit import connect, VehicleMode, LocationGlobalRelative# 通过本地的14551端口,使用UDP连接到SITL模拟器connection_string = '127.0.0.1:14551'print('Connecting to vehicle on: %s' % connection_string)# connect函数将会返回一个Vehicle类型的对象,即此处的vehicle# 即可认为是无人机的主体,通过vehicle对象,我们可以直接控制无人机vehicle = connect(connection_string, wait_ready=True)# 定义arm_and_takeoff函数,使无人机解锁并起飞到目标高度# 参数aTargetAltitude即为目标高度,单位为米def arm_and_takeoff(aTargetAltitude): # 进行起飞前检查 print("Basic pre-arm checks") # vehicle.is_armable会检查飞控是否启动完成、有无GPS fix、卡曼滤波器 # 是否初始化完毕。若以上检查通过,则会返回True while not vehicle.is_armable: print(" Waiting for vehicle to initialise...") time.sleep(1) # 解锁无人机(电机将开始旋转) print("Arming motors") # 将无人机的飞行模式切换成"GUIDED"(一般建议在GUIDED模式下控制无人机) vehicle.mode = VehicleMode("GUIDED") # 通过设置vehicle.armed状态变量为True,解锁无人机 vehicle.armed = True # 在无人机起飞之前,确认电机已经解锁 while not vehicle.armed: print(" Waiting for arming...") time.sleep(1) # 发送起飞指令 print("Taking off!") # simple_takeoff将发送指令,使无人机起飞并上升到目标高度 vehicle.simple_takeoff(aTargetAltitude) # 在无人机上升到目标高度之前,阻塞程序 while True: print(" Altitude: ", vehicle.location.global_relative_frame.alt) # 当高度上升到目标高度的0.95倍时,即认为达到了目标高度,退出循环 # vehicle.location.global_relative_frame.alt为相对于home点的高度 if vehicle.location.global_relative_frame.alt >= aTargetAltitude * 0.95: print("Reached target altitude") break # 等待1s time.sleep(1)# 调用上面声明的arm_and_takeoff函数,目标高度10marm_and_takeoff(10)# 设置在运动时,默认的空速为3m/sprint("Set default/target airspeed to 3")# vehicle.airspeed变量可读可写,且读、写时的含义不同。# 读取时,为无人机的当前空速;写入时,设定无人机在执行航点任务时的默认速度vehicle.airspeed = 3# 发送指令,让无人机前往第一个航点print("Going towards first point for 30 seconds ...")# LocationGlobalRelative是一个类,它由经纬度(WGS84)和相对于home点的高度组成# 这条语句将创建一个位于南纬35.361354,东经149.165218,相对home点高20m的位置point1 = LocationGlobalRelative(-35.361354, 149.165218, 20)# simple_goto函数将位置发送给无人机,生成一个目标航点vehicle.simple_goto(point1)# simple_goto函数只发送指令,不判断有没有到达目标航点# 它可以被其他后续指令打断,此处延时30s,即让无人机朝向point1飞行30stime.sleep(30)# 发送指令,让无人机前往第二个航点print("Going towards second point for 30 seconds (groundspeed set to 10 m/s) ...")# 与之前类似,这条语句创建了另一个相对home高20m的点point2 = LocationGlobalRelative(-35.363244, 149.168801, 20)# simple_goto将目标航点发送给无人机,groundspeed=10设置飞行时的地速为10m/svehicle.simple_goto(point2, groundspeed=10)# 与之前一样,延时30stime.sleep(30)# 发送"返航"指令print("Returning to Launch")# 返航,只需将无人机的飞行模式切换成"RTL(Return to Launch)"# 无人机会自动返回home点的正上方,之后自动降落vehicle.mode = VehicleMode("RTL")# 退出之前,清除vehicle对象print("Close vehicle object")vehicle.close()
测试示例
测试提示:
- 确认SITL和MAVProxy正在运行
建议打开MissionPlanner并连接到SITL,可以在地图上直接观察到无人机的动态
保存以上文件为simple_goto.py。打开cmd,通过cd命令切换到simple_goto.py所在目录,运行
python simple_goto.py
你应该可以看到无人机升空到10m,依次朝两个方向飞行30s后,返回出发点并降落。
版本信息
1.0 20170914 initial commit
本作品采用知识共享署名-相同方式共享 3.0 未本地化版本许可协议进行许可。
阅读全文
0 0
- DroneKit教程(二):控制Pixhawk示例
- DroneKit教程(三):连接Pixhawk飞控
- 教程:使用DroneKit在室内控制无人机
- DroneKit教程(一):安装DroneKit和测试工具
- DroneKit教程(七):遥控信道覆盖
- DroneKit教程(五):使用自定义MAVLink指令
- DroneKit教程(六):继承和自定义Vehicle类
- DroneKit教程(四):属性和参数的读取与设置
- Mavlink协议理解Pixhawk APM(二)
- Pixhawk之姿态控制篇(2)_控制策略
- SpringMVC入门示例教程(二)
- SpringMVC详细示例实战教程(二)
- Pixhawk之姿态控制
- pixhawk姿态控制
- Swift简明教程(二)流程控制
- pixhawk JTAG 调试教程
- DroneKit示例分析1---状态的获取与设置
- (二)ROS中控制机器人运动(示例运行)
- Tour UVA
- 007-SDK框架之LYWSDKInterfaceProtocol.cpp
- c# winform 中的坐标系
- 踩着坑,刨着土,react native的环境配好了
- Mybatis——settings配置详解
- DroneKit教程(二):控制Pixhawk示例
- spring boot 整合mybatis
- WAI-ARIA无障碍网页应用属性完全展示
- 008-SDK框架之LYWSDKPlatformManager.h
- ramblock
- spring一
- 数据结构——线性表中的算法
- POJ2661 指数题log
- 【Java基础】——Set集合