使用Simulink的摄像机传感器避障
的实现光流算法避障。在这里,无人机要穿越一个仿真软件®3 d动画竞技场采用光流算法计算,利用无人机的前视摄像头。本模型旨在帮助您开始在地面/空中机器人中使用计算机视觉和控制系统。使用该模型,您可以使用车辆的正面(鸟瞰)视觉数据使您的无人机/UGV避开障碍物。
看看解释这个例子的视频:https://www.youtube.com/watch?v=YTmq13xGnLg
对该模型
该模型展示了实现光流算法的工作流程,用于引导无人机通过具有极点作为障碍物的竞技场。
以下步骤描述了工作流程:
- 从机载摄像机获取输入图像。
- 从图像中计算光流线Horn-Schunck方法
- 实现一种从计算的流线转向车辆的算法
- 实现基于交换的逻辑Stateflow®从光流算法切换到PID控制算法。
- 通过与虚拟世界相关联的VR Sink块(用于设置无人机的位置/旋转和虚拟世界对象的视觉属性)可视化无人机导航障碍物。
当你打开模型并执行它时,无人机将从直升机停机坪起飞,通过避开障碍物导航,一旦它检测到它接近着陆区域,切换到PID控制器,最终,降落在着陆直升机停机坪上。
模型
obstacleAvoidanceUsingOpticalFlow.slx该模型实现了光流算法的障碍物导航和PID控制算法的无人机着陆。
startScript.mlx包含模型中使用的常量。
virtualworld文件夹包含在Simulink 3D动画世界中显示四轴飞行器所需的文件
uav_environment.wrl显示用于模拟的三维环境。
注意:在运行模型之前,请确保所有这些文件都在当前文件夹中
如何运行模型?
打开Simulink模型obstacleAvoidanceUsingOpticalFlow.slx.
模型自动添加virtualworld文件夹到路径。检查PostLoadFcn模型的回调.
模型自动加载startScript.m它初始化运行模型所需的参数。检查InitFcn模型的回调.
- 运行模型。
模型中的假设
- 在设计系统时,将无人机作为一个点质量考虑,不考虑无人机的动力学。
- 无人机的反馈来自Simulink 3D动画传感器。
- 该模型假设用户知道在什么点控制器从使用光流切换到使用PID控制器。
- 该模型还假设落点位置的x坐标大于光流控制器到PID控制器的过渡点的x坐标。
注意:不要更改鸟的眼睛视图的车载摄像头而且虚拟现实的传感器块。这将影响光流算法,因为我们需要来自前相机的图像。
的子系统
- 传感器输入:传感器输入(摄像头视图和估计位置)
- 光流线计算:使用“Horn-Schunk”方法计算图像的光流线。
- 光流避障算法:转向车辆的控制器:
- FlowDifferencesMATLAB®函数:由该系统计算左右光流。
- 光流算法和着陆PID控制器:
- DronePositionEstimation:
- OpticalFlowAlgorithm:线速度的符号(V_Y)根据左右光流分配
- ControlAlgorithm:切换到PID控制器,使其悬浮在目标坐标之上。
- DroneLanding:把无人机降到地面上。
- DroneOrientationEstimation:
- OpticalFlowAlgorithm:角速度的符号(W_Y)根据左右光流分配
- ControlAlgorithm:从角速度求出方向
- DronePositionEstimation:
- 三维可视化:一旦在模型中估计出位置和方向输出,它们被发送到VR接收器块,然后用于设置无人机的位置/旋转。
- 降落直升机停机坪与当前位置之间的距离:这个子系统计算当前点和直升机停机坪位置之间的距离。如果无人机靠近直升机停机坪,就会停止模拟。由于降落直升机停机坪上的传感器将被激活,螺旋桨将被关闭。
如何更改起始位置、落地位置等参数?
模型中使用的所有变量都包含在startScript.m文件。要更改任何参数,请更改文件中的变量值。你可以运行文件,以确保变量已更新。
- droneStartLocation:无人机将从哪里起飞的位置。
- helipadLocation:无人机将降落的位置。目前这里被指定为直升机停机坪的中心位置。这可以修改为无人机需要着陆的值。
- linearVelocity:光流导航时的线速度[V_X V_Z V_Y]。
- angularVelocity:光流导航时的角速度[W_X W_Z W_Y]。
- angularVelocityforLanding:无人机着陆时的角速度。
- switchingXLimit:光流控制器切换到PID控制器的x坐标
- finalHoverHeight:降落前越过直升机停机坪的高度。
- δ:执行PID控制器的阈值距离。如果无人机的当前坐标在此范围内,无人机将开始着陆δ价值。
如何调整线速度和角速度?
定义的线速度和角速度startScript.mlx如果Simulink 3D动画环境被修改,需要调整。以下是调优相同的步骤:
- 确保在给定的线速度下,无人机不会移出竞技场。
- V_Y是取决于光流算法输出的速度。这里,V_Y的模不变,只是符号变了。如果:
- vleftflow>vrightflow,然后V_Y是正的。因此,无人机将转向其右侧。
- vrightflow>vleftflow,然后V_Y是负的。因此,无人机将转向左侧。
- 同样的,角速度W_Y将根据光流算法的输出来确定。这里,W_Y的大小不变,只是符号改变了。如果:
- vleftflow>vrightflow然后W_Y是负的(顺时针)
- vrightflow>vleftflow然后W_Y是积极的(逆时针)
- 如果无人机不能绕过所有的障碍与给定V_Y,改变V_Y随着滚动速度的增加。
- 总是尝试较小的角速度值,以确保较少的振荡,因为决策是根据流量差异做出的。例如,如果无人机的两侧有很多障碍物,标志flowDifference将迅速翻转。如果这里的角速度很高,无人机就会有太多的振荡,这是不可取的。
请注意:线速度的第一个分量是V_X,线速度的第二个分量是V_Z,线速度的第三分量是V_Y.
产品需求
该模型使用以下MathWorks产品:2022世界杯八强谁会赢?
- MATLAB
- 仿真软件®
- 仿真软件3 d动画
- Stateflow
- 航空航天Blockset™
- 航空航天工具箱
- 计算机视觉工具箱™
如有任何问题,请与我们联系roboticsarena@mathworks.com.
版权所有:The MathWorks, Inc.
引用作为
MathWorks学生竞赛团队(2022年)。使用Simulink的摄像机传感器避障GitHub (https://github.com/mathworks-robotics/obstacle-avoidance-using-camera/releases/tag/1.0.0)。检索.