使用手册
以下使用,以仿真下无人机单机控制为主,其他功能使用可以参考PrometheusGroundStation-Pro使用手册
连接无人机
注意
该步骤十分重要,基本上所有操作都是基于此步骤。
该小节讲述地面站连接无人机的使用过程,此处以仿真举例:
首先需要保证地面站和要连接的通信节点在同一数据链路上,可以相互Ping通,并关闭防火墙、科学上网软件、系统代理和VPN等。
通信节点配置
首先,请确保Prometheus已经正常安装(以仿真为例),可以参考Prometheus仿真环境配置
下面是一个完整的关于通信节点的启动launch文件,在这里介绍一下相关参数。
<launch>
<!-- 自启动相关 -->
<arg name="autoload" default="false"/>
<arg name="uav_control_start" default="gnome-terminal -- roslaunch prometheus_uav_control uav_control_main_indoor.launch"/>
<arg name="close_uav_control" default="gnome-terminal -- rosnode kill `rosnode list | grep -v /communication_bridge | grep -v /rosout`"/>
<arg name="swarm_control_start" default="'/home/amov/Prometheus/Modules/swarm_control/sh/simulation/sitl_swarm_3uav.sh'"/>
<arg name="close_swarm_control" default=""/>
<!-- 地面站IP地址 -->
<arg name="ground_station_ip" default="192.168.2.148"/>
<!-- robot id为唯一标识符,如果是集群(无人机集群、无人车集群、机车协同),该值不能重复 -->
<arg name="robot_id" default="1"/>
<!-- 根据实际情况进行输入该参数,该载体为无人车时,该值必须设置为0-->
<arg name="uav_id" default="1"/>
<!-- 根据实际情况进行输入该参数,该载体为无人机时,该值必须设置为0-->
<arg name="ugv_id" default="0"/>
<!-- 如果不是仿真或集群,将该值设置为0-->
<arg name="swarm_num" default="0"/>
<arg name="swarm_ugv_num" default="0"/>
<arg name="is_simulation" default="1"/>
<arg name="swarm_data_update_timeout" default="5"/>
<!-- 控制一些数据的转发给地面站或其他机器的频率 -->
<!-- 无人机状态和无人机控制状态发送频率,设置为0则以订阅频率发送,不能超过订阅频率 -->
<arg name="uav_basic_hz" default="10"/>
<!-- 无人车状态发送频率,设置为0则以订阅频率发送 -->
<arg name="ugv_basic_hz" default="10"/>
<!-- 吊舱状态发送频率,设置为0则以订阅频率发送 -->
<arg name="gimbal_basic_hz" default="0"/>
<!-- Prometheus功能包路径 -->
<arg name="prometheus_moudles_url" default="/home/amov/Prometheus/Modules/"/>
<!-- 单机配置文件路径 -->
<arg name="uav_control_yaml" default="uav_control/launch/uav_control_outdoor.yaml"/>
<!-- 集群配置文件路径 -->
<arg name="swarm_control_yaml" default="swarm_control/config/swarm_control_p600.yaml"/>
<!-- 轨迹配置文件路径 -->
<arg name="uav_command_yaml" default="uav_control/launch/uav_command_pub.yaml"/>
<node pkg="prometheus_communication_bridge" type="communication_bridge" name="communication_bridge" output="screen">
<!-- 组播ip -->
<param name="multicast_udp_ip" value="$(arg ground_station_ip)"/>
<!-- ego planner -->
<param name="next_drone_ip" value="127.0.0.1"/>
<param name="broadcast_ip" value="127.0.0.255"/>
<param name="drone_id" value="1"/>
<!-- 地面站IP,端口设置等 -->
<param name="ground_station_ip" value="$(arg ground_station_ip)"/>
<param name="udp_port" value="8889"/>
<param name="tcp_port" value="55555"/>
<param name="rviz_port" value="8890"/>
<param name="ROBOT_ID" value="$(arg robot_id)"/>
<param name="uav_id" value="$(arg uav_id)"/>
<param name="ugv_id" value="$(arg ugv_id)"/>
<param name="try_connect_num" value="5"/>
<param name="tcp_heartbeat_port" value="55556"/>
<!-- 是否仿真模式 1为是 0为否 -->
<param name="is_simulation" value="$(arg is_simulation)"/>
<!-- 集群数量,如果不是集群模式值为0 -->
<param name="swarm_num" value="$(arg swarm_num)"/>
<param name="swarm_ugv_num" value="$(arg swarm_ugv_num)"/>
<!-- 集群模式下,数据超时情况,多久判断其失联且回传地面站 -->
<param name="swarm_data_update_timeout" value="$(arg swarm_data_update_timeout)"/>
<!-- 轨迹控制相关设置 -->
<param name="trajectory_ground_control" value="true"/>
<param name="trajectory_flag" value="false"/>
<param name="trajectory_mode" value="0"/>
<param name="trajectory_time" value="0"/>
<!-- 是否自启 -->
<param name="autoload" value="$(arg autoload)"/>
<param name="uav_control_start" value="$(arg uav_control_start)"/>
<param name="close_uav_control" value="$(arg close_uav_control)"/>
<param name="swarm_control_start" value="$(arg swarm_control_start)"/>
<param name="close_swarm_control" value="$(arg close_swarm_control)"/>
<!-- 发送频率 -->
<param name="uav_basic_hz" value="$(arg uav_basic_hz)"/>
<param name="ugv_basic_hz" value="$(arg ugv_basic_hz)"/>
<param name="gimbal_basic_hz" value="$(arg gimbal_basic_hz)"/>
<!-- 单机配置文件加载 -->
<rosparam command="load" file="$(arg prometheus_moudles_url)$(arg uav_control_yaml)"/>
<!-- 集群配置文件加载 -->
<rosparam command="load" file="$(arg prometheus_moudles_url)$(arg swarm_control_yaml)"/>
<!-- 轨迹配置文件加载 -->
<rosparam command="load" file="$(arg prometheus_moudles_url)$(arg uav_command_yaml)"/>
</node>
</launch>
下面对一些可能需要修改的参数进行说明:
参数名 | 说明 |
---|---|
autoload | 用于地面站点击连接/开启集群和断开连接/关闭集群是否自动启动相关脚本 |
uav_control_start | autoload为true时,地面站上点击连接会调用该命令 |
close_uav_control | autoload为true时,地面站点击断开连接会调用该命令 |
swarm_control_start | autoload为true时,地面站上点击开启集群会调用该命令 |
close_swarm_control | autoload为true时,地面站上点击关闭集群会调用该命令 |
ground_station_ip | 此处设置为地面站的IP |
multicast_udp_ip | 组播IP,默认为224.0.0.8,如果是单机建议设置为ground_station_ip的值 |
robot_id | 唯一标识符,如果是集群(无人机集群、无人车集群、机车协同),该值不能重复,一般来说跟载体ID相同 |
uav_id | 根据实际情况进行输入该参数,该载体为无人车时,该值必须设置为0 |
swarm_num | 集群数量 |
is_simulation | 是否仿真,是为1,不是为0 |
如果是在阿木实验室产品中,仿真电脑可以在仿真启动器中启动,真机会设置为自启动。
手动启动方式如下:
# 一般而言,如果是仿真电脑或者真机可以参考对应功能包
roslaunch prometheus_communication_bridge bridge.launch
地面站配置连接
- 首先打开地面站,点击图上标注1连接设置,然后会弹出连接设置框。
- 然后将标注2中的名字和主机地址以及主机端口号填写,填写规则如下:
- 名字:分为两部分,第一部分,前缀为3个字母,只能为UAV或者UGV(不区分大小写),用于区分无人机和无人车,第二部分,后缀为一个数字,代表无人机的编号。可以参考机载端通信节点中的uav_id或者robot_id。
- 主机IP:填写运行通信节点的机载IP地址。
- 主机端口:默认55555,无特殊情况,默认不会进行修改。
- 上述标注2填写完成后,点击标注3添加按钮,点击后生成标注4。
- 上述标注5点击选择,勾选后,点击标注6连接按钮。
出现下图中提示语句说明连接成功:
地面站断开连接
- 首先,根据标注1选择需要断开的无人机,然后点击标注2断开连接按钮。
- 随后,出现标注3消息反馈说明断开连接成功。
地面站修改信息
- 首先打开地面站,如果连接了,请先断开连接后。
- 然后点击标注2,会将数据自动填充在标注3中。
- 然后将标注3的数据进行修改,修改完成后,点击标注4的修改按钮即可。
- 再次查看标注2中数据是否发生变化,变化成功说明修改成功。
单机控制
启动控制节点
以下在仿真环境下运行,需要安装好Prometheus仿真环境。
运行仿真环境
打开终端输入如下指令:
# p450无人机模型室外定位仿真脚本
'/home/amov/Prometheus/Scripts/simulation/px4_gazebo_sitl_test/px4_sitl_outdoor_P450.sh'
运行完毕后查看gazebo中是否出现无人机,以及查看第三个终端,数据是否正常,如下图:
连接无人机
连接完成后,查看状态灯是否正常,如果不正常可将鼠标移动到该状态灯显示原因。
准备控制
需要配合遥控器使用,遥控器具体使用可以参考:仿真中的遥控器使用说明。
然后将主界面切换到平面地图,然后查看单机控制栏,如下图:
前面两步为切到到平面地图,最后一步则为单机控制栏。
这里主要介绍单机控制栏:
控制中的按钮可以对应Prometheus中的几种模式(相关教程参考链接,相关msg文件(UAVCommand.msg),相关代码(uav_controller.cpp)),如下表格:
Agent_CMD | 按钮名 | 简介 |
---|---|---|
Init_Pos_Hover | 初始点悬停 | 无人机回到解锁点上方 |
Current_Pos_Hover | 当前点悬停 | 无人机保持当前位置进行悬停,一般用于移动模式后 |
Land | 降落 | 无人机降落 |
Move | 上传 | 无人机根据不同子模式以及控制量进行自主移动 |
单机控制栏中除了四个按钮,还有一个下拉框,以及多个输入框,下拉框为选择移动子模式,输入框为输入控制量(输入框无数据时会提示用户输入的控制量,不输入默认为0),下面解释这些移动子模式接口:
移动子模式 | 下拉框对应 |
---|---|
惯性系定点控制 | XYZ_POS |
惯性系定高速度控制 | XY_VEL_Z_POS |
惯性系速度控制 | XYZ_VEL |
机体系位置控制 | XYZ_POS_BODY |
机体系速度控制 | XYZ_VEL_BODY |
机体系定高速度控制 | XY_VEL_Z_POS_BODY |
轨迹追踪控制 | TRAJECTORY |
姿态控制(来自外部控制器) | XYZ_ATT |
绝对坐标系下的经纬度 | LAT_LON_ALT |
其中姿态控制(XYZ_ATT)暂不可用,其余接口均可正常使用,绝对坐标系下的经纬度控制需要在GPS或者RTK定位下才能使用。
坐标系说明:
- 惯性系:x轴指向东边,y轴指向北边,z轴指向天。
- 机体系:以无人机当前位置为原点,机头向前方向为x轴,垂直机头90度向左为y轴,垂直xy平面向上为z轴。
地面站控制
首先将SWA切到最下方,此时无人机将会解锁,然后将SWB切到最下方(缓慢一点),此时无人机将会起飞。
此时地面站状态显示如下:
然后检查数据:
解锁状态(是否解锁),飞行模式(是否进入OFFBOARD),定位源(根据实际情况,仿真室外一般为GPS或者RTK),控制状态(COMMAND_CONTROL),GPS星数(仿真下默认一直为10,真机飞行建议大于16),高度数据(可以只管看到是否起飞成功)。
检查正常进入后续操作。
惯性系定点控制(XYZ_POS)
首先查看无人机当前位置,以及在平面地图显示的位置,如下图:
然后再单机控制栏中进行下列操作:
- 控制栏中下拉框中选择XYZ_POS移动子模式
- 输入指点的位置(1,1,1.5,单位:m)
- 输入偏航(30,单位:deg)
- 点击发送
发送成功后,无人机将开始移动,地面站数据变化以及平面地图变化如下:
也可以通过查看期望值是否生效。
测试完成后,点击初始点悬停按钮,将无人机飞回起飞点。
惯性系定高速度控制(XY_VEL_Z_POS)
首先查看无人机当前位置,以及在平面地图显示的位置。
然后再单机控制栏中进行下列操作:
- 控制栏中下拉框中选择XY_VEL_Z_POS移动子模式
- 输入XY的速度(0.5,0.5,单位:m/s)
- 输入Z的高度(1.5,单位:m)
- 输入偏航(0,单位:deg)
- 点击发送
发送成功后,无人机将开始移动,地面站数据变化以及平面地图变化如下:
可以看到无人机存在一条红色的小尾巴(无人机的轨迹),然后期望XY速度都为0.5说明正常。
然后可以通过点击当前点悬停让无人机悬停,然后点击初始点悬停让无人机飞回起飞点。
惯性系速度控制(XYZ_VEL)
首先查看无人机当前位置,以及在平面地图显示的位置。
然后再单机控制栏中进行下列操作:
- 控制栏中下拉框中选择XYZ_VEL移动子模式
- 输入XYZ的速度(0.5,0.5,0.2,单位:m/s)
- 输入偏航(0,单位:deg)
- 点击发送
发送成功后,无人机将开始移动,地面站数据变化以及平面地图变化如下:
可以看到无人机存在一条红色的小尾巴(无人机的轨迹),然后期望XY速度都为0.5、期望Z速度为0.2说明正常。
然后可以通过点击当前点悬停让无人机悬停,然后点击初始点悬停让无人机飞回起飞点。
机体系位置控制(XYZ_POS_BODY)
首先查看无人机当前位置,以及在平面地图显示的位置。
然后再单机控制栏中进行下列操作:
- 控制栏中下拉框中选择XYZ_POS_BODY移动子模式
- 输入XYZ的位置(1,1,0,单位:m)
- 输入偏航(0,单位:deg)
- 点击发送
发送成功后,无人机将开始移动,地面站数据变化以及平面地图变化如下:
测试完成后,点击初始点悬停按钮,将无人机飞回起飞点。
机体系速度控制(XYZ_VEL_BODY)
首先查看无人机当前位置,以及在平面地图显示的位置。
然后再单机控制栏中进行下列操作:
- 控制栏中下拉框中选择XYZ_VEL_BODY移动子模式
- 输入XYZ的速度(0.5,0.5,0.2,单位:m/s)
- 输入偏航(0,单位:deg)
- 点击发送
发送成功后,无人机将开始移动,地面站数据变化以及平面地图变化如下:
可以看到无人机存在一条红色的小尾巴(无人机的轨迹),然后期望XY速度都为0.5、期望Z速度为0.2说明正常。
然后可以通过点击当前点悬停让无人机悬停,然后点击初始点悬停让无人机飞回起飞点。
机体系定高速度控制(XY_VEL_Z_POS_BODY)
首先查看无人机当前位置,以及在平面地图显示的位置。
然后再单机控制栏中进行下列操作:
- 控制栏中下拉框中选择XY_VEL_Z_POS_BODY移动子模式
- 输入XY的速度(0.5,0.5,单位:m/s)
- 输入Z的高度(0,单位:m)
- 输入偏航(0,单位:deg)
- 点击发送
发送成功后,无人机将开始移动,地面站数据变化以及平面地图变化如下:
可以看到无人机存在一条红色的小尾巴(无人机的轨迹),然后期望XY速度都为0.5说明正常。
然后可以通过点击当前点悬停让无人机悬停,然后点击初始点悬停让无人机飞回起飞点。
轨迹追踪控制(TRAJECTORY)
这个控制接口需要配合uav_command_pub节点才能使用。
地面站参数修改
按上述步骤操作即可,下面简单介绍步骤流程:
- 点击 系统设置,切换到系统设置界面。
- 点击 参数设置,切换参数设置界面。
- 点击 轨迹控制,切换轨迹控制参数显示界面。
- 此时可以看到轨迹控制中的一些参数,如果为空白,可以点击加载按钮重新加载参数,比如绕圆圆心、半径、速度等等,可以自行设置。
启动轨迹控制节点
可以用两种方式启动,一种是手动启动,另一种是地面站启动:
手动启动
通过打开终端,输入下方指令:
roslaunch prometheus_uav_control uav_command_pub.launch
地面站启动
通过自定义一个按钮,将轨迹控制节点的命令封装,正常关闭后会自动保存到配置文件,再次打开依旧存在,可反复使用。
按上述步骤操作即可,下面简单介绍步骤流程:
- 点击 系统设置,切换到系统设置界面。
- 点击 脚本设置,切换脚本设置界面。
- 点击 添加按钮。
- 在最新生成的区域中填写要生成按钮的名字(traject)。
- 填写运行指令(roslaunch prometheus_uav_control uav_command_pub.launch)。
- 发送方式选择。
- 最后点击生成按钮。
上述操作完成后,可以在调试帮助界面中查看生成按钮,进行如下操作:
按上述步骤操作即可,下面简单介绍步骤流程:
- 点击 功能脚本,切换到功能脚本界面。
- 查看自定义demo里面生成的按钮 轨迹控制,然后点击该按钮后启动轨迹控制节点。
点击后或者手动运行出现如下终端:
开启平面地图打点连线功能(可选)
该功能可以设置一段时间并固定频率将无人机上一位置和当前位置进行连线,在平面地图上打印出这段时间的轨迹,支持数据导出。
按上述步骤操作即可,下面简单介绍步骤流程:
- 点击 系统设置,切换到系统设置界面。
- 点击 地图设置,切换地图设置界面。
- 输入总时间和频率和需要画轨迹的无人机,数据填入完成后点击启动,然后会跳转到平面地图。
地面站控制
首先查看无人机当前位置,以及在平面地图显示的位置。
选中轨迹控制,此时会再次出现一个下拉框,包含Circle,Eight Shape,Step,Line四种轨迹,选择好飞行轨迹后,输入飞行时间。
绕圆效果图(开启平面地图打点连线功能)如下:
绕8效果图(开启平面地图打点连线功能)如下:
另外两种轨迹跟踪这里就不再显示效果图,可自行尝试。
将半径设置大,速度设置小,效果越好,反之效果越差。
姿态控制(XYZ_ATT)
暂未使用
绝对坐标系下的经纬度控制(LAT_LON_ALT)
仿真下设置无人机初始经纬度(可选)
在安装的仿真环境中,默认定位为国外,如果想要将经纬度设置为其他地方,打开bashrc文件,操作如下:
gedit ~/.bashrc
打开后会出现一个txt文件,在最后面追加下列语句:
# 注意:=旁边不能存在空格,否则会导致失败
# 下面此处定位为阿木实验室附近
export PX4_HOME_LAT=30.788034
export PX4_HOME_LON=103.858487
export PX4_HOME_ALT=100
追加完成后,重新打开一个终端运行室外仿真脚本:
# p450无人机模型室外定位仿真脚本
'/home/amov/Prometheus/Scripts/simulation/px4_gazebo_sitl_test/px4_sitl_outdoor_P450.sh'
运行完毕后,查看第三个终端,可以看到下面经纬度已经发生变化,说明修改成功:
具体操作
首先查看无人机当前位置,以及在平面地图显示的位置。
按上述步骤操作即可,下面简单介绍步骤流程:
- 首先切换界面到百度地图,然后选择移动子模式为LAT_LON_ALT。
- 然后选择百度地图工具栏的第二个指点,然后再地图上指点,如果移动子模式为LAT_LON_ALT则会将经纬度填入输入框。
- 输入高度后,点击上传发送命令。
蓝色线为无人机轨迹,最终效果图如下: