自主飞行之入门¶
1.ROS¶
ROS官网: 维基
ROS是用于开发复杂的分布式机器人系统的广泛使用的框架.
2.MAVROS¶
3.px4_command介绍¶
px4_command功能包是一个基于PX4开源固件及Mavros功能包的开源项目,旨在为PX4开发者提供更加简洁快速的开发体验。 目前已集成无人机外环控制器修改、目标追踪、激光SLAM定位、双目V-SLAM定位、激光避障等上层开发代码、后续将陆续推 出涵盖任务决策、路径规划、滤波导航、单/多机控制等无人机/无人车/无人船科研及开发领域的功能。 配合板载计算机(树莓派、TX2、Nano)等运算能力比较强的处理器,来实现复杂算法的运行,运行得到的控制指令通过串口或者网口通信发送给底层控制板。
- state_from_mavros.h:订阅飞控状态,包括无人机当前的状态(/mavros/state),当前位置(/mavros/local_position/pose),当前速度(/mavros/local_position/velocity_local),和当前角度,角速度(/mavros/imu/data)
- command_to_mavros.h:发布px4_command功能包生成的控制量至mavros功能包,可发送期望位置,速度(本地系与机体系),角度,角速度,底层控制(遥控器输入)
- px4_pos_estimator.cpp:订阅激光雷达或者mocap发布的位置信息,并进行坐标转换,在state_from_mavros.h中已订阅飞控发布的位置,速度,欧拉角信息,此处直接使用,根据订阅的数据,发布相应的位置,偏航角给飞控
- px4_pos_controller.cpp:订阅由位置估计发布的DroneState,初始化当前飞机状态的时间.订阅ControlCommand(不知从何发布的数据).发布topic_for_log主题.在选择控制率,检查参数正确后,初始化完成.对move节点中,takeoff,Move_ENU,Move_Body,Hold,Land,Disarm,PPN_land和Trajectory_Tracking等进行逻辑处理.
- ground_station.cpp:订阅自定义日志主题(/px4_command/topic_for_log),订阅视觉系统位置估计PoseStamped主题(/vrpn_client_node/UAV/pose,非mavlink消息,数据包括point位置(x,y,z),四元数方向(w,x,y,z)),订阅飞控姿态四元数AttitudeTarget主题(/mavros/setpoint_raw/target_attitude,#82号mavlink消息).不断的更新视觉传感器状态,并打印当前飞机的状态.
- px4_sender.cpp:订阅自定义消息控制指令主题(/px4_command/control_command),机体系到惯性系坐标转换,move中控制命令的具体实现(0表示位置控制,3表示速度控制)
- autonomous_landing.cpp:降落识别使用xyz均为速度控制.订阅数据包括降落板与无人机的相对位置,降落板与无人机的相对偏航角,视觉flag 来自视觉节点.最后发布位置控制指令
- collisiom_avoidance_streo.cpp:订阅/streo_distance该数据作为计算飞机四个方向的距离判断.
- formation_control_sitl.cpp:多机仿真SITL,只适用于Move_ENU坐标系下,若使用Move_Body,需自行添加修改.
- payload_drop.cpp:订阅/mavros/local_position/pose本地位置.发布遥控器通道值.
- square.cpp:发布/px4_command/control_command命令.子模式xyz均为位置控制.
- target_tracking.cpp:
- move.cpp:发布/px4_command/control_command,并设置子模式xy速度控制(0b10),位置控制.z速度控制(0b01),位置控制
- set_mode.cpp:模拟遥控器,根据mavros服务,进行在SITL下解锁,切换offboard,控制飞行器.
- TFmini.cpp:激光定高雷达的处理,如果需要添加超声波传感器,可参考此代码.
4.飞行前准备¶
WiFi数传两种配置模式¶
根据WiFi-LINK配置模式有两种连接方式:一种是无线AP模式,另外一种无线网卡模式.出厂默认配置为AP模式,如需配置为无线网卡模式,可按照无线网卡模式说明文档自行配置
WIFI-LINK配置成无线AP模式¶
这是我们发货时的默认配置,其中WiFi-LINK模块相当与一个热点,笔记本2要连接这个热点进而连接QGC. 他们配置详细步骤请看WIFI数传远程连接QGroundControl非正常连接篇
WiFi-LINK配置成无线网卡模式¶
路由器设置
如图为 无线WiFi路由器默认IP地址为192.168.10.1, 登录到此路由器的后台,用已连接此WiFi的手机或电脑 登陆地址wifi.wavlink.com(默认密码为admin)。
WIFI设置:设置WiFi的名称(此名称会在数传设置中用到) 加密方式选择WPA2-PSK
WiFi数传设置
- 硬件连接
可用四根杜邦线连接usb转TTL与WiFi-LINK,下图是线序
- 软件配置
打开配置软件RM08K config tool CN V2.1.exe
选择相应的COM口使用一个细长的金属棒或者牙签点击WiFi数传 模块的reset按钮(模块上远离天线的那个孔),然后点击搜索 模块按钮,软件显示如下(Found Device at COMX(57600)) 说明连接成功。
然后下图所示配置你们的WiFi数传,其中网关要选择你的路由器 的网段,网络名称及密码设置你的WiFi路由器的名称与密码, 其中加密方式选择WPA2_AES。
设置完成后点击提交配置即可。
接下来测试是否配置成功:重启WiFi数传,假设你配置成功, 那么WiFi数传会自动连接WiFi路由器。那么我们用连接此 WiFi路由器的笔记本,打开终端(cmd),输入ping 192.168.10.105 尝试ping一下我们的WiFi数传,ping通了,那么恭喜你搞定了, ping不通那么你需要打开 RM08K config tool CN V2.1.exe 重新配置一下,可以点击查询配置,看看配置的是否有出入。
- 地面站连接:此步骤需要笔记本连接WiFi路由器的后才可进行,而且你已经在笔记本上ping通了WiFi数传。
打开QGC,如下图操作。
然后选择TCP类型,名称任意,主机地址为你设置得到wifi数传 的IP地址,端口为6000,然后确定即可。
点击你的配置名称,然后点击连接,即可连接飞控了。
WIFI数传远程连接QGroundControl¶
在WIFI数传连接QGroundControl的过程中,本小节文档中会分为两种情况来说明正常连接的过程以及非正常连接的过程.
正常连接¶
小技巧
飞机说明:本教程飞机配置为TX2+T265+D435I+pixhawk4
飞机整机图:
飞机上面贴有标签,WIFI数传名字为amov-uav76.密码为amov19076.
首先拿到飞机之后,上电,打开自己电脑WIFI,选择WIFI名为amov-uav76,并输入密码进行连接.(截图WIFI的连接图片)
然后打开一个终端,ping一下WIFI数传的IP,192.168.10.76.(截图为WIFI数传配置成功的图片)
发现已经ping成功了,说明我们可以连接到QGroundControl地面站上面了.
接着,打开QGC,第一步是打开 应用程序设置 菜单栏;第二步是选择 通讯连接 侧边栏;下面会出现五个可修改功能按钮,分别为删除,编辑,添加,连接,断开连接.第三步是点击 添加 按钮.(此处图片为qgc的连接1~3)
第四步是在类型旁边将原有的类型serial重选为TCP.(此处图片为第四步)
选择TCP类型之后,下面的输入框有所变化,主机地址就填写为192.168.10.76;端口号填写为6000,接着点击确认即可.(此处照片5~7)
第八步是选中刚才添加的通讯连接,第九步点击下面的连接按钮,进行连接到QGC.(此处照片为8~9)
第十步就可以看到WIFI数传连接成功,地面站上显示飞控的各个信息.(此处照片为10)
非正常连接¶
小技巧
飞机说明:本教程飞机配置为Nano+双目T265+A1+pixhawk4
飞机整体图:
飞机上面有标签,写的是有关WIFI数传的默认配置.例如本架飞机,我们出厂默认的WIFI数传配置为AP模式(数传是个热点,地面站连接热点).
上电之后热点名称就为:amov-uav77,热点密码为:amov19077,电脑连接上WIFI
这时候你就可以在你连接热点的电脑打开终端(Windows下面Ctrl+r,输入cmd进入终端,Ubuntu下面直接右击鼠标打开termial), 使用ping命令看是否能ping通热点.热点的IP为192.168.10.77.直接输入ping 192.168.10.77. 如果ping通,说明就正常可以使用了.如果ping不通,那就是WIFI数传没有配置正确.可以看到是ping失败了,WIFI没有配置成功,你需要自己重新手动配置一下
首先需要准备的东西有,配置软件RM08K config tool CN V2.1,和WIFI数传配置线以及工具刀(有的WiFi数传的复位按钮地方在里面,可能需要镊子或者较细的工具)
将WiFi数传配置线接上WIFI数传和电脑上,然后在电脑设备管理器查看识别到的串口号是多少,再打开配置软件,选择相应的串口号并点击搜索模块.点击搜索模块之后发现没响应,别急,继续看第三步.
在第三步中就要使用工具刀了,第二步执行点击搜索模块之后,使用工具刀按下WiFi数传复位按钮,复位按钮的位置在远离WiFi数传信号线的那个孔里面,如下图所示.(有的WIFI数传外壳遮挡住了复位按钮,根据实际情况选择适当的工具)
进行第四步,复位按钮按下之后,继续点击搜索模块.这时候会出现两种情况,一种是下图错误提示无法打开com口,解决办法是重启电脑重新执行第一步到第三步.
另外一种情况是,点击搜索模块之后,出现如图所示找到设备com口就说明正确打开了串口,可以继续下一步配置了.
第五步是配置WIFI数传为AP模式,如图所示,所有划红线部分为你手动选择或者手动添加内容,所有配置按照图片右边的具体配置一致即可,最后选择提交配置按钮.
第六步,提交配置之后,左边这一栏会显示刚才提交配置的信息,配置就算完成结束,别着急拔掉配置线,我们先测试一下配置的成功不成功.
继续连接WIFI,如下图所示
然后打开终端,ping一下WIFI数传的IP,直接执行 ping 192.168.10.77
发现ping通了之后,说明刚才配置就算完成,拔掉配置线,接到飞控上面.准备连接地面站QGroundControl.
打开QGC,选择 应用程序设置 菜单栏,继续选择 通讯连接 子项.下面有五种操作,分别为删除,编辑,添加,连接以及断开连接.
接下来,选择 添加 项,将类型选择由默认的serial(串口)改为TCP,上面的名称可改可不改.
下面的主机地址填写192.168.10.77(我们刚才ping通的地址,也就是WIFI数传配置好的IP地址),端口号填写为6000(注意和nomachine的默认端口号4000区分开).接着,右下角点击确认即可.
然后,选择刚添加的通讯连接,点击第四个连接操作连接到地面站.
最后可以看到QGC可以显示飞控相关姿态信息了.完成WiFi数传连接QGroundControl的过程.
远程连接TX2¶
需要的硬件:
- 有HDMI接口的显示器一台(用于显示TX2,TX2连接你准备好的路由器的WiFi)
- 带宽比较好的路由器一台
- 安装有QGC地面站与NoMachine电脑一台或两台
NoMachine配置:此步骤需要英伟达TX2中的Ubuntu系统连接成功WiFi路由器,并在终端上输入ifconfig命令找到TX2的IP(我的TX2 IP为192.168.10.140)。
打开NOMACHINA软件,点击 New新建
Protrocol选择NX模式,然后输入TX2的IP地址192.168.10.140,Port默认4000
下一步,鉴定方式选择Password,下一步选择Do not use proxy,最后Done
如下选择刚才配置的参数,点击连接
成功后点击YES
输入TX2的用户名以及密码 然后一路OK即可进行访问。
5.自主飞行说明¶
自主飞行可分为室内和室外两种模式,相应的室内分为激光SLAM飞行模式和视觉SLAM飞行模式,室外分为视觉SLAM飞行模式和GPS/RTK飞行模式. 每一种飞行模式又对应分为TX2板载计算机和Nano板载计算机.在每一种飞行模式中,你就可以进行室内外相应的实现定点飞行,降落等.
小技巧
每一种飞行模式的位置来源有所不同,这里在QGroundControl地面站中有两个非常重要的参数,该参数决定了使用不同的飞行模式需要选择不同的位置数据来源 EKF2_AID_MASK和EKF2_HGT_MODE,前者是位置数据来源参数.后者是高度数据来源参数.
室内飞行¶
激光SLAM¶
室内激光雷达定位模式
- EKF2_AID_MASK = 24 (选择位置以及偏航来源) ; EKF2_HGT_MODE = Vision/Range sensor(选择高度来源)
TX2¶
参数确定后尝试解锁,遇到解锁不成功,看看提示是否需要重新校准磁罗盘?解锁成功,电机启转,这时切记不要上浆试飞, 因为此时激光雷达没有工作,没有给飞控送入位置以及高度信息,所以此时姿态控制失效,飞机一飞就会偏。这是我们固件 的bug,近期会修复,请注意。
在TX2板载计算机系统里打开终端进入如下图所示目录并启动脚本:
./my_lidar_imu_fly.sh
脚本会依次启动各个launch文件
正常情况下各个窗口会正常工作,其中有个 px4_pos_estimate 节点要特别注意,如下图。
当出现上述问题,需重新启动飞控以及脚本,飞控的重启需要在地面站的控制台上,输入 reboot 然后回车即可。
NANO¶
与TX2类似,找其相应的启动脚本即可.
视觉SLAM¶
室内视觉SLAM定位模式
- EKF2_AID_MASK = 24 (选择位置以及偏航来源) ; EKF2_HGT_MODE = Vision/Range sensor(选择高度来源)
TX2¶
把飞机放在室内待起飞点,远程已连接好板载计算机与飞控。
现在已经连接上了nomachine,第一步就是打开目录,进入到amov_ws/src/px4_command/sh/sh_for_P200/vio目录下面,待会准备启动的脚本为vio_fly.sh.(图片)
然后进行第二步,鼠标右击空白处选择打开一个终端(图片)
第三步输入启动脚本的执行指令 ./vio_fly.sh
第四步,启动脚本完成之后,自动开启脚本终端.第一个终端为 roscore 此处不做详解.查看mavros脚本是否正常启动,如果红圈内容说明mavros正常与飞控已经建立了通信连接. (如果出现报错的话,请仔细查看报错的内容原因是什么,坐标系相关的报错是正常的,不影响我们飞行使用).图片
第五步,该脚本是T265驱动启动脚本,该脚本正常运行,说明T265已经正常启动.
第六步,是T265的处理脚本,不是异常错误就是正常的,此脚本角T265的位置信息提供给了位置估计节点,以用作位置估计定位
第七步,位置估计脚本,此处有多处打印消息,包含视觉信息,飞控信息,两者的各个数据基本保持动态波动就是正常的,波动很大就是非正常现象.如下图所示为正常.
第八步,是位置控制节点,按照提示输入1继续,它是位置环参数的初始化.如果此处不输入1继续的话,你可以在室内进行定位飞行,但是不能切换到offboard模式. 只有输入了1,确认位置环参数之后,才能进入offboard模式.
第九步,为move节点,正常启动.他可以控制飞机前后左右,位置速度控制飞行.
此时你也可以用另外一台电脑连接到飞控中去,按照开箱第一步的教程执行.上面脚本如果都能正常运行的话,此时在遥控器上的5通道(三段)拨到中间, 将飞行模式改为定点模式,在地面站QGC上面可以看到是可以切到定点飞行模式的,这就说明,此时可以在室内进行定点飞行了.
NANO¶
使用操作和TX2类似,区别在于文件目录不一致.