主要内容

使用混合恒星生成代码的路径规划

这个例子展示了如何执行代码生成计划的无碰撞路径车辆使用混合a *算法通过映射。验证算法在MATLAB®,之后使用codegen(MATLAB编码器)函数来生成一个墨西哥人的功能。使用生成的墨西哥人文件的可视化算法规划路径。

写算法规划路径

创建一个函数,codegenPathPlanner,使用一个plannerHybridAStar对象从一开始就计划一个路径对目标构成的地图。

函数路径= codegenPathPlanner (mapData startPose goalPose)% # codegen%创建一个二进制入住率地图地图= binaryOccupancyMap (mapData);%创建一个状态空间对象stateSpace = stateSpaceSE2;%更新状态空间边界地图限制一样。stateSpace。StateBounds = [map.XWorldLimits; map.YWorldLimits;[-ππ]];%构造状态验证器对象使用statespace和映射对象验证器= validatorOccupancyMap (stateSpace地图=地图);%设置验证验证器的距离验证器。ValidationDistance = 0.01;%分配状态验证器对象plannerHybridAStar对象规划师= plannerHybridAStar (validator);%计算一个给定启动和目标路径pathObj =计划(计划、startPose goalPose);%从路径中提取的路径提出了对象路径= pathObj.States;结束

这个函数作为包装标准的混合电话*路径规划。它接受标准的输入,并返回一个无碰撞路径为一个数组。因为你不能使用一个处理对象作为输入或输出的函数支持代码生成、创建计划对象内部的函数。万博1manbetx保存codegenPathPlanner函数在当前文件夹。

在MATLAB验证路径规划算法

验证路径规划算法在MATLAB生成代码。

生成一个随机二维迷宫地图。

地图= mapMaze (5 MapSize = 25 [25] MapResolution = 1);mapData = occupancyMatrix(地图);

启动和目标提出了定义为(x yθ)向量。xy指定位置的米,θ指定的定向角弧度。

startPose =(3 3π/ 2);goalPose =(22 22π/ 2);

计划指定的路径开始姿势,和目标姿态和地图。

路径= codegenPathPlanner (mapData startPose goalPose);

可视化计算路径。

表演(binaryOccupancyMap (mapData))%开始状态散射(startPose (1, 1), startPose (1、2),“g”,“填充”)%的目标状态散射(goalPose (1, 1), goalPose (1、2),“r”,“填充”)%的路径情节(路径(:1),路径(:,2),“r -”线宽= 2)传说(“开始姿势”,“目标姿势”,“MATLAB生成路径”传奇(位置=“西北”)

生成代码的路径规划算法

您可以使用codegen(MATLAB编码器)函数或MATLAB编码器(MATLAB编码器)应用程序来生成代码。对于这个示例,生成一个墨西哥人文件通过调用codegen在MATLAB命令行。为每个输入指定样本输入参数函数使用arg游戏选项,func_inputs输入参数。

调用codegen功能和指定单元阵列的输入参数。这个函数创建一个单独的codegenPathPlanner_mex函数使用。你也可以生成C代码通过使用选项输入参数。这一步要花些时间。

codegen配置:墨西哥人codegenPathPlannerarg游戏{mapData, startPose, goalPose}
代码生成成功。

使用生成的墨西哥人函数验证结果

计划通过调用路径的墨西哥人版本指定开始姿势,路径规划算法和目标姿态和地图。

mexPath = codegenPathPlanner_mex (mapData startPose goalPose);

可视化的路径计算的墨西哥人版本的路径规划算法。

散射(mexPath (: 1) mexPath (:, 2),标志=“o”,MarkerFaceColor =“b”,MarkerEdgeColor =“b”)传说(“开始姿势”,“目标姿势”,“MATLAB生成路径”,“墨西哥人生成路径”传奇(位置=“西北”)举行

检查生成的代码的性能

比较生成的墨西哥人的执行时间函数的执行时间通过使用原始功能时间

时间时间= (@ ()codegenPathPlanner (mapData, startPose goalPose))
时间= 0.3735
mexTime =时间(@ ()codegenPathPlanner_mex (mapData、startPose goalPose))
mexTime = 0.0474
时间/ mexTime
ans = 7.8872

在这个例子中,墨西哥人函数运行超过五倍。结果对你的系统可能会有所不同。

计划在新地图路径使用生成的墨西哥人的功能

计划为一个新的开始和目标提出了新的地图。新地图的大小必须一样的地图用于生成墨西哥人的功能。

生成一个随机二维迷宫地图。

mapNew = mapMaze (5 MapSize = 25 [25] MapResolution = 1);mapDataNew = occupancyMatrix (mapNew);

指定开始和目标提出了。

startPoseNew =[22 3π/ 2);goalPoseNew = 22π/ 2 [3];

计划指定的路径开始姿势,和目标姿态和地图。

pathNew = codegenPathPlanner_mex (mapDataNew startPoseNew goalPoseNew);

可视化新路径计算的墨西哥人的功能。

表演(binaryOccupancyMap (mapDataNew))%开始状态散射(startPoseNew (1, 1), startPoseNew (1、2),“g”,“填充”)%的目标状态散射(goalPoseNew (1, 1), goalPoseNew (1、2),“r”,“填充”)%的路径情节(pathNew (: 1) pathNew (:, 2),“r -”线宽= 2)传说(“开始姿势”,“目标姿势”,“墨西哥人生成路径”传奇(位置=“东北”)