6.5 视觉穿环例子

本节导航


文件说明如下:

  • “PX4MavCtrlV4.py”是就用mavlink的通信接口,全平台(WindowsLinuxLinux系统需安装Python3+pymavlink+OpenCV4等组件)均可用,提供接口控制RflySim3D程序,以及接口获取信息并控制飞控(软件在环或硬件在环)
  • “PX4MavCtrlV4ROS.py”使用mavros实现的接口程序,功能与上一个模块完全相同,只能用于Linux系统(Ubuntu电脑、树莓派等,需安装ROS+Python3+OpenCV4等环境)
  • “ScreenCapApiV4.py”是配置RflySim3D图像接口,并将图像传输到局域网(支持多路传输)中,本程序只能用于Windows系统。
  • “RflyVisionAPI.py”是从接口接收局域网中图像的接口,可以用于WindowsLinux系统中。
  • “client_ue4***.bat”是在Windows环境下运行软件在环或硬件在环仿真的脚本,能直接启用RflySim平台并配置成需要的通信模式与数据传输模式。 ` “client_ue4**.py”是在Windows下运行的Python脚本,用于配置RflySim3D三维视景窗口,并将图像传输到局域网 * “Python38Run.bat”是在Windows电脑下的脚本,能开启一个当前目录下的Python环境,用于运行本文件夹的python脚本。 * “server_ue4.py”是在另一台电脑(WindowsLinux`均可以)上,通过局域网运行获取图像,并通过局域网控制飞机的程序代码。
  • “server_ue4_Serial.py”是在另一台电脑(WindowsLinux均可以)上,通过局域网运行获取图像,并通过串口控制飞机的程序代码。本例程需要使用Pixhawk硬件进行HITL仿真,因此请使用HITL版的bat启动脚本;其次本例程需要用数传连接PixhawkTELEM口和远程计算机的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 准备工作

  1. 本测试需要的硬件设备包括:一台路由器(剩余至少两个网口,千兆路由+千兆网线+千兆网卡),一台Windows电脑作为RflySim平台的主机,一台机载视觉计算机(台式机、笔记本、树莓派、TX2、NX等都可以,需要安装Linux系统+OpenCV4+Python+ROS+mavros等环境)、一个Pixhawk飞控、一个数传模块(有线和无线均可)、一根USB线,两根网线。
  2. RflySim主机和视觉计算机通过网线连接到路由器,并记录下两台电脑的IP地址。
  3. 为了便于观察,请确保RflySim主机可以通过自带的“远程桌面连接”获取到机载计算机的图像,并进行操作。方法参见:0-Preparation文件夹中教程,需要鼠标、键盘和显示器来完成配置工作。
  4. Pixhawk飞控通过USB线连接电脑,机载计算机通过数传连接PixhawkTELEM口。
  5. RflyVisionTransV5文件夹整个拷贝到机载视觉计算机上,便于后续的测试。

6.5.2视觉穿环例子

本例子的代码见“RflyVisionTransV5\3-CrossRing”文件夹

6.5.3 本机仿真测试(软件在环UDP通信)

  1. 双击运行“client_ue4_SITL.bat”开启一个软件在环仿真例程(注意,本脚关键配置语句有:“SET UDPSIMMODE=2”
  2. 等到CopterSim显示EKF初始化完毕并进入Loiter模式
  3. 双击运行本文件夹的“Python38Run.bat”来打开Python环境
  4. 输入命令“python client_ue4.py”来开启视角调整并发送图像

    注意:由于是本机测试“python client_ue4.py”中的255.255.255.255的广播IP地址,可以改成127.0.0.1来提高通信效率(广播会向局域网每台电脑发送图像包,数据量很大)。

  5. 等待窗口提示“Start Transfer Img”。左边为前置摄像头视角,右边为上帝观察视角。

  6. 用VSCode打开“server_ue4.py”程序,然后运行,就能通过UDP接收双目图像,并连接CopterSim完成闭环控制。下图左下角的图是Python从局域网获取到的图像,并进行OpenCV处理后的结果。
    注意:由于是本机测试“server_ue4.py”中的255.255.255.255的广播IP地址,也可以改成’127.0.0.1’来提高通信效率(广播会向局域网每台电脑发送mavlink数据包,数据量很大)。

  7. 观察到飞机解锁起飞,并穿越三个环。

6.5.4 本机仿真测试(硬件在环UDP通信)

本实验连线图:飞控USB直接连RflySim仿真电脑

  1. 插入Pixhawk飞控到RflySim仿真电脑
  2. 双击运行“client_ue4_HITL.bat”开启一个硬件在环仿真例程(注意,本脚关键配置语句有:“SET UDPSIMMODE=2”
  3. 其他流程与5.2.1中步骤完全相同。

6.5.5本机仿真测试(硬件在环串口通信)

本实验连线图:飞控USB直接连电脑,数传模块连PixhawkTELEM口和电脑

  1. 只插入Pixhawk飞控到RflySim仿真电脑(先不插数传)
  2. 双击运行“client_ue4_HITL.bat”开启一个硬件在环仿真例程(注意,本脚关键配置语句有:“SET UDPSIMMODE=2”),并记录此时的串口号。例如,如下图所示,我的飞控串口是13.
  3. 用数传模块一端连接PixhawkTELEM口,另一端连电脑,关闭QGroundControl软件(避免自动占用串口),去Windows的设备管理器中查看数传的串口号。例如,如下图所示,我这里的数传串口号为14,对应“COM14”。特别注意:如果没有正确识别到数传串口,请先安装串口驱动程序,可以使用360驱动大师、驱动精灵等软件自动识别安装。
  4. 双击运行本文件夹的“Python38Run.bat”来打开Python环境
  5. 输入命令“python client_ue4.py”来开启视角调整并发送图像
  6. 等待窗口提示“Start Transfer Img”
  7. 用VSCode打开“server_ue4_Serial.py”程序,修改代码连接代码为 mav =PX4MavCtrl.PX4MavCtrler('COM14:57600') 其中COM14需要换成你自己的数传串口号。注意:这里我使用Pixhawk默认的波特率为57600,请确认并修改为自己设置的波特率(例如115200)。
  8. VSCode中运行server_ue4_Serial.py程序,可以观察到同样现象。

6.5.6 联机仿真测试(软件在环UDP通信)

本实验连线图:机载计算机和Windows电脑通过网线连接在同一路由上

  1. 双击运行“client_ue4_SITL.bat”开启一个软件在环仿真例程(注意,本脚关键配置语句有:“SET UDPSIMMODE=2”“SET IS_BROADCAST=1”,用于启用MAVLinkUDP通信和启用局域网广播)
  2. 等到CopterSim显示EKF初始化完毕并进入Loiter模式
  3. 机载计算机连接网线并开机,等待小段时间待完全开机后,用Windows的远程桌面连接上机载计算机,拷贝“RflyVisionTransV5\3-CrossRing”文件夹到桌面,并进入本文件夹,记录远程电脑的IP地址。注:如下图所示,我这里的地址为192.168.3.61
  4. Windows电脑下,用VSCode打开client_ue4.py,点击运行按钮,开启图像传输。

    注:由于是联机测试“python client_ue4.py”中的255.255.255.255的广播IP地址,可以改成目标电脑的IP地址,例如这里是’192.168.3.61’来提高通信效率(广播会向局域网每台电脑发送图像包,数据量很大,指定IP方式能减小延迟)。
  5. 在机载计算机的Linux系统中,启动终端,定位到3-CrossRing目录
  6. 如果是第一次运行本例子(之后不用运行),请安装必要的Python依赖包,在Linux终端串口中输入如下指令
    pip3 install pymavlink serial pyserial rospkg
  7. 然后,输入如下命令来开启视觉在环控制 python3 server_ue4.py 注:由于是联机测试“server_ue4.py”中的255.255.255.255的广播IP地址,也可以改成RflySim电脑的IP地址(例如这里是’192.168.3.60’)来提高通信效率(广播会向局域网每台电脑发送mavlink数据包,数据量很大)。
  8. 可以观察到飞机起飞并穿环。

6.5.7联机仿真测试(硬件在环UDP通信)

本实验连线图:相比上个实验,多连接一个Pixhawk到电脑

  1. 插入Pixhawk飞控到RflySim仿真电脑
  2. Windows电脑下,双击运行“client_ue4_HITL.bat”开启一个硬件在环仿真例程(注意,本脚关键配置语句有:“SET UDPSIMMODE=2”“SET IS_BROADCAST=1”,用于启用MAVLinkUDP通信和启用局域网广播)
  3. Windows电脑下,用VS Code打开client_ue4.py,点击运行按钮,开启图像传输。等待窗口提示“Start Transfer Img”
  4. 机载计算机联网、开机,用Windows的远程桌面连接上机载计算机。在机载计算机中,打开终端,定位到3-CrossRing目录,并输入 python3 server_ue4.py
  5. 现象和上一个例子相同

6.5.8联机仿真测试(硬件在环数传串口通信)

注意:进行本实验室请进行下面检查确认 1)确保数传连线正确,且能收到飞机数据,并与飞机通信。测试方法:将飞控的USB口和数传口都插入电脑,打开QGroundControl软件,在MAVLinkInspector中查看HEARTBEAT心跳包的频率是否为2Hz(说明USB和数传口都连接上了)。 2)检查下Pixhawk数传TELEM1口设置的波特率是否为57600。检查方法,如下图所示在设置-参数 的搜索框中输入“baud”开始搜索,查看SER_TEL1_BAUD的数值,如果是57600那么后续实验可直接进行。如果不是57600,而是115200或其他值,后续串口波特率设置的地方,都需要进行修改。


本实验连线图:相比上个实验,多用一个数传连接机载计算机和Pixhawk

  1. 插入Pixhawk飞控到RflySim仿真电脑,PixhawkTELEM通过数传连接到机载计算机。
  2. Windows电脑下,双击运行“client_ue4_HITL.bat”开启一个硬件在环仿真例程(注意,本脚关键配置语句有:“SET IS_BROADCAST=1”,用于启用局域网广播;由于本书实验通过串口传输MAVLink消息,脚本中UDPSIMMODE不要求设置为MAVLink模式)
  3. Windows电脑下,用VS Code打开client_ue4.py,点击运行按钮,开启图像传输。等待窗口提示“Start Transfer Img”
  4. 用Windows的远程桌面连接上机载计算机。在机载计算机中,先不插入数传模块到机载计算机,输入指令“ls -l /dev/tty\*”,来查看本机所有的串口号。
  5. 插入数传模块到机载计算机,再次输入指令“ls -l /dev/tty\*”,来查看最新本机所有的串口号。如下图所示,通常可以在最末尾看到新增的串口硬件,这个就是数传的串口号,这里记录为“/dev/ttyUSB0”
  6. 在机载计算机中,用VIMGedit打开“server_ue4_Serial.py”程序,修改代码连接代码为
    mav = PX4MavCtrl.PX4MavCtrler('/dev/ttyUSB0:57600'),然后保存文件。
  7. 在机载计算机中,打开终端,定位到3-CrossRing目录,并输入 python3 server_ue4_Serial.py
  8. 现象和上一个例子相同

6.5.9 联机仿真测试(硬件在环UDP通信,机载计算机使用mavros进行通信)

  1. 本实验的硬件连接与本小节的实验(5)相同
  2. 插入Pixhawk飞控到RflySim仿真电脑
  3. Windows电脑下,双击运行“client_ue4_HITL.bat”开启一个硬件在环仿真例程
  4. Windows电脑下,用VS Code打开client_ue4.py,点击运行按钮,开启图像传输。等待窗口提示“Start Transfer Img”
  5. Windows的远程桌面连接上机载计算机。在机载计算机中,打开终端,定位到3-CrossRing目录,并输入 python3 server_ue4ROS.py
  6. 现象和上一个例子相同

注意:ROS的例子与普通UDP的例子的区别如下

  • 普通UDP的例子进行mavlink通信是基于pymavlink的,而ROS的例子通信是基于mavros的,可以更好的与ROS进行连接。
  • 普通UDP通信的API文件为PX4MavCtrlV4.py,因此,引入API库的语句为 import PX4MavCtrlV4 as PX4MavCtrlROS例子的API文件为PX4MavCtrlV4ROS.py;因此,在server_ue4ROS.py中,引入API库的语句为 import PX4MavCtrlV4ROS as PX4MavCtrl
  • 由于PX4MavCtrlV4PX4MavCtrlV4ROS进行了输入输出接口统一,因此在使用上没有其他区别。如果要基于ROS开发,可以对PX4MavCtrlV4ROS.py进行一定的修改,来订阅和发布其他节点的数据。

6.5.10 联机仿真测试(硬件在环数传串口通信,机载计算机使用mavros进行通信)

  1. 本实验的硬件连接与本小节的实验(6)相同
  2. 实验流程与(6)基本相同,唯一区别在于机载计算机的执行命令为 python3 server_ue4ROS_Serial.py
  3. 现象和之前的例子相同

results matching ""

    No results matching ""