6.5 视觉穿环例子
文件说明如下:
“PX4MavCtrlV4.py”
是就用mavlink
的通信接口,全平台(Windows
和Linux
,Linux
系统需安装Python3+pymavlink+OpenCV4
等组件)均可用,提供接口控制RflySim3D
程序,以及接口获取信息并控制飞控(软件在环或硬件在环)“PX4MavCtrlV4ROS.py”
使用mavros
实现的接口程序,功能与上一个模块完全相同,只能用于Linux
系统(Ubuntu
电脑、树莓派等,需安装ROS+Python3+OpenCV4
等环境)“ScreenCapApiV4.py”
是配置RflySim3D
图像接口,并将图像传输到局域网(支持多路传输)中,本程序只能用于Windows
系统。“RflyVisionAPI.py”
是从接口接收局域网中图像的接口,可以用于Windows
和Linux
系统中。“client_ue4***.bat”
是在Windows
环境下运行软件在环或硬件在环仿真的脚本,能直接启用RflySim
平台并配置成需要的通信模式与数据传输模式。 ` “client_ue4**.py”是在Windows下运行的
Python脚本,用于配置
RflySim3D三维视景窗口,并将图像传输到局域网 *
“Python38Run.bat”是在
Windows电脑下的脚本,能开启一个当前目录下的
Python环境,用于运行本文件夹的
python脚本。 *
“server_ue4.py”是在另一台电脑(
Windows或
Linux`均可以)上,通过局域网运行获取图像,并通过局域网控制飞机的程序代码。“server_ue4_Serial.py”
是在另一台电脑(Windows
或Linux
均可以)上,通过局域网运行获取图像,并通过串口控制飞机的程序代码。本例程需要使用Pixhawk
硬件进行HITL
仿真,因此请使用HITL
版的bat
启动脚本;其次本例程需要用数传连接Pixhawk
的TELEM
口和远程计算机的USB
口,并用串口方式与Pixhawk
通信;Windows
电脑进行连接时请使用mav = PX4MavCtrl.PX4MavCtrler('COM14:57600')
格式,Linux
电脑请使用mav = PX4MavCtrl.PX4MavCtrler('/dev/ttyUSB0:57600')
格式进行串口连接,其中COM14
和/dev/ttyUSB0
需要换成你的数传对应串口号。“server_ue4ROS.py”
是在Linux/ROS
系统下,获取图像,通过局域网运行获取图像,并通过局域网控制飞机的程序代码。“server_ue4ROS_Serial.py”
是在Linux/ROS
系统下,获取图像,通过局域网运行获取图像,并通过数传串口控制飞机的程序代码,请使用mav = PX4MavCtrl.PX4MavCtrler('/dev/ttyUSB0:57600')
格式进行串口连接。
6.5.1 准备工作
- 本测试需要的硬件设备包括:一台路由器(剩余至少两个网口,千兆路由+千兆网线+千兆网卡),一台
Windows
电脑作为RflySim
平台的主机,一台机载视觉计算机(台式机、笔记本、树莓派、TX2、NX等都可以,需要安装Linux
系统+OpenCV4+Python+ROS+mavros
等环境)、一个Pixhawk
飞控、一个数传模块(有线和无线均可)、一根USB线,两根网线。 RflySim
主机和视觉计算机通过网线连接到路由器,并记录下两台电脑的IP地址。- 为了便于观察,请确保
RflySim
主机可以通过自带的“远程桌面连接”获取到机载计算机的图像,并进行操作。方法参见:0-Preparation
文件夹中教程,需要鼠标、键盘和显示器来完成配置工作。 Pixhawk
飞控通过USB线连接电脑,机载计算机通过数传连接Pixhawk
的TELEM
口。- 将
RflyVisionTransV5
文件夹整个拷贝到机载视觉计算机上,便于后续的测试。
6.5.2视觉穿环例子
本例子的代码见“RflyVisionTransV5\3-CrossRing”
文件夹
6.5.3 本机仿真测试(软件在环UDP通信)
- 双击运行
“client_ue4_SITL.bat”
开启一个软件在环仿真例程(注意,本脚关键配置语句有:“SET UDPSIMMODE=2”
) - 等到
CopterSim
显示EKF初始化完毕并进入Loiter
模式 - 双击运行本文件夹的
“Python38Run.bat”
来打开Python
环境 输入命令
“python client_ue4.py”
来开启视角调整并发送图像注意:由于是本机测试
“python client_ue4.py”
中的255.255.255.255
的广播IP地址,可以改成127.0.0.1
来提高通信效率(广播会向局域网每台电脑发送图像包,数据量很大)。等待窗口提示
“Start Transfer Img”
。左边为前置摄像头视角,右边为上帝观察视角。用VSCode打开
“server_ue4.py”
程序,然后运行,就能通过UDP
接收双目图像,并连接CopterSim
完成闭环控制。下图左下角的图是Python
从局域网获取到的图像,并进行OpenCV
处理后的结果。
注意:由于是本机测试“server_ue4.py”
中的255.255.255.255
的广播IP地址,也可以改成’127.0.0.1’
来提高通信效率(广播会向局域网每台电脑发送mavlink
数据包,数据量很大)。- 观察到飞机解锁起飞,并穿越三个环。
6.5.4 本机仿真测试(硬件在环UDP通信)
本实验连线图:飞控USB
直接连RflySim
仿真电脑
- 插入
Pixhawk
飞控到RflySim
仿真电脑 - 双击运行
“client_ue4_HITL.bat”
开启一个硬件在环仿真例程(注意,本脚关键配置语句有:“SET UDPSIMMODE=2”
) - 其他流程与5.2.1中步骤完全相同。
6.5.5本机仿真测试(硬件在环串口通信)
本实验连线图:飞控USB直接连电脑,数传模块连Pixhawk
的TELEM
口和电脑
- 只插入
Pixhawk
飞控到RflySim
仿真电脑(先不插数传) - 双击运行
“client_ue4_HITL.bat”
开启一个硬件在环仿真例程(注意,本脚关键配置语句有:“SET UDPSIMMODE=2”
),并记录此时的串口号。例如,如下图所示,我的飞控串口是13. - 用数传模块一端连接
Pixhawk
的TELEM
口,另一端连电脑,关闭QGroundControl
软件(避免自动占用串口),去Windows
的设备管理器中查看数传的串口号。例如,如下图所示,我这里的数传串口号为14,对应“COM14”
。特别注意:如果没有正确识别到数传串口,请先安装串口驱动程序,可以使用360驱动大师、驱动精灵等软件自动识别安装。 - 双击运行本文件夹的
“Python38Run.bat”
来打开Python
环境 - 输入命令
“python client_ue4.py”
来开启视角调整并发送图像 - 等待窗口提示
“Start Transfer Img”
。 - 用VSCode打开
“server_ue4_Serial.py”
程序,修改代码连接代码为mav =PX4MavCtrl.PX4MavCtrler('COM14:57600')
其中COM14
需要换成你自己的数传串口号。注意:这里我使用Pixhawk
默认的波特率为57600
,请确认并修改为自己设置的波特率(例如115200
)。 - 在
VSCode
中运行server_ue4_Serial.py
程序,可以观察到同样现象。
6.5.6 联机仿真测试(软件在环UDP通信)
本实验连线图:机载计算机和Windows
电脑通过网线连接在同一路由上
- 双击运行
“client_ue4_SITL.bat”
开启一个软件在环仿真例程(注意,本脚关键配置语句有:“SET UDPSIMMODE=2”
、“SET IS_BROADCAST=1”
,用于启用MAVLink
的UDP
通信和启用局域网广播) - 等到
CopterSim
显示EKF初始化完毕并进入Loiter
模式 - 机载计算机连接网线并开机,等待小段时间待完全开机后,用
Windows
的远程桌面连接上机载计算机,拷贝“RflyVisionTransV5\3-CrossRing”
文件夹到桌面,并进入本文件夹,记录远程电脑的IP地址。注:如下图所示,我这里的地址为192.168.3.61
。 - 在
Windows
电脑下,用VSCode
打开client_ue4.py
,点击运行按钮,开启图像传输。
注:由于是联机测试“python client_ue4.py”
中的255.255.255.255
的广播IP地址,可以改成目标电脑的IP地址,例如这里是’192.168.3.61’
来提高通信效率(广播会向局域网每台电脑发送图像包,数据量很大,指定IP方式能减小延迟)。 - 在机载计算机的
Linux
系统中,启动终端,定位到3-CrossRing
目录 - 如果是第一次运行本例子(之后不用运行),请安装必要的
Python
依赖包,在Linux
终端串口中输入如下指令pip3 install pymavlink serial pyserial rospkg
- 然后,输入如下命令来开启视觉在环控制
python3 server_ue4.py
注:由于是联机测试“server_ue4.py”
中的255.255.255.255
的广播IP地址,也可以改成RflySim
电脑的IP地址(例如这里是’192.168.3.60’
)来提高通信效率(广播会向局域网每台电脑发送mavlink
数据包,数据量很大)。 - 可以观察到飞机起飞并穿环。
6.5.7联机仿真测试(硬件在环UDP通信)
本实验连线图:相比上个实验,多连接一个Pixhawk到电脑
- 插入
Pixhawk
飞控到RflySim
仿真电脑 - 在
Windows
电脑下,双击运行“client_ue4_HITL.bat”
开启一个硬件在环仿真例程(注意,本脚关键配置语句有:“SET UDPSIMMODE=2”
、“SET IS_BROADCAST=1”
,用于启用MAVLink
的UDP
通信和启用局域网广播) - 在
Windows
电脑下,用VS Code
打开client_ue4.py
,点击运行按钮,开启图像传输。等待窗口提示“Start Transfer Img”
。 - 机载计算机联网、开机,用
Windows
的远程桌面连接上机载计算机。在机载计算机中,打开终端,定位到3-CrossRing
目录,并输入python3 server_ue4.py
- 现象和上一个例子相同
6.5.8联机仿真测试(硬件在环数传串口通信)
注意:进行本实验室请进行下面检查确认
1)确保数传连线正确,且能收到飞机数据,并与飞机通信。测试方法:将飞控的USB口和数传口都插入电脑,打开QGroundControl
软件,在MAVLinkInspector
中查看HEARTBEAT
心跳包的频率是否为2Hz
(说明USB和数传口都连接上了)。
2)检查下
Pixhawk
数传TELEM1
口设置的波特率是否为57600
。检查方法,如下图所示在设置-参数 的搜索框中输入“baud”
开始搜索,查看SER_TEL1_BAUD
的数值,如果是57600
那么后续实验可直接进行。如果不是57600
,而是115200
或其他值,后续串口波特率设置的地方,都需要进行修改。
本实验连线图:相比上个实验,多用一个数传连接机载计算机和Pixhawk
- 插入
Pixhawk
飞控到RflySim
仿真电脑,Pixhawk
的TELEM
通过数传连接到机载计算机。 - 在
Windows
电脑下,双击运行“client_ue4_HITL.bat”
开启一个硬件在环仿真例程(注意,本脚关键配置语句有:“SET IS_BROADCAST=1”
,用于启用局域网广播;由于本书实验通过串口传输MAVLink
消息,脚本中UDPSIMMODE
不要求设置为MAVLink
模式) - 在
Windows
电脑下,用VS Code
打开client_ue4.py
,点击运行按钮,开启图像传输。等待窗口提示“Start Transfer Img”
。 - 用Windows的远程桌面连接上机载计算机。在机载计算机中,先不插入数传模块到机载计算机,输入指令
“ls -l /dev/tty\*”
,来查看本机所有的串口号。 - 插入数传模块到机载计算机,再次输入指令
“ls -l /dev/tty\*”
,来查看最新本机所有的串口号。如下图所示,通常可以在最末尾看到新增的串口硬件,这个就是数传的串口号,这里记录为“/dev/ttyUSB0”
。 - 在机载计算机中,用
VIM
或Gedit
打开“server_ue4_Serial.py”
程序,修改代码连接代码为mav = PX4MavCtrl.PX4MavCtrler('/dev/ttyUSB0:57600')
,然后保存文件。 - 在机载计算机中,打开终端,定位到
3-CrossRing
目录,并输入python3 server_ue4_Serial.py
- 现象和上一个例子相同
6.5.9 联机仿真测试(硬件在环UDP通信,机载计算机使用mavros进行通信)
- 本实验的硬件连接与本小节的实验(5)相同
- 插入
Pixhawk
飞控到RflySim
仿真电脑 - 在
Windows
电脑下,双击运行“client_ue4_HITL.bat”
开启一个硬件在环仿真例程 - 在
Windows
电脑下,用VS Code
打开client_ue4.py
,点击运行按钮,开启图像传输。等待窗口提示“Start Transfer Img”
。 - 用
Windows
的远程桌面连接上机载计算机。在机载计算机中,打开终端,定位到3-CrossRing
目录,并输入python3 server_ue4ROS.py
- 现象和上一个例子相同
注意:ROS
的例子与普通UDP
的例子的区别如下
- 普通
UDP
的例子进行mavlink
通信是基于pymavlink
的,而ROS
的例子通信是基于mavros
的,可以更好的与ROS
进行连接。 - 普通
UDP
通信的API
文件为PX4MavCtrlV4.py
,因此,引入API
库的语句为import PX4MavCtrlV4 as PX4MavCtrl
而ROS
例子的API
文件为PX4MavCtrlV4ROS.py
;因此,在server_ue4ROS.py
中,引入API
库的语句为import PX4MavCtrlV4ROS as PX4MavCtrl
- 由于
PX4MavCtrlV4
和PX4MavCtrlV4ROS
进行了输入输出接口统一,因此在使用上没有其他区别。如果要基于ROS
开发,可以对PX4MavCtrlV4ROS.py
进行一定的修改,来订阅和发布其他节点的数据。
6.5.10 联机仿真测试(硬件在环数传串口通信,机载计算机使用mavros进行通信)
- 本实验的硬件连接与本小节的实验(6)相同
- 实验流程与(6)基本相同,唯一区别在于机载计算机的执行命令为
python3 server_ue4ROS_Serial.py
- 现象和之前的例子相同