基于MATLAB的运动基元生成函数代码分析
参数
- resolution = 0.01 //必须与图片读入的分辨率一致,否则会出现运动基元文件读取错误的bug
- numberofangles = 16 //将2*PI划分为16个等份,即平面上所有的点都是落在这16个角度范围内的,对应的编号为0-15
- numberofprimsperangle = 5 //每一个角度方向含有5中基元模式,可以定义多种,设置的差别在于基元的末端状态
- basemprimendpts0_c = zeros(numberofprimsperangle,4) //初始化
- 解释: [dx,dy, (int)delta_theta, multipliers]
- multipliers //共5种运动形式
- forwardcostmult
- backwardcostmult
- forwardandturncostmult
- sidestepcostmult
- turninplacecostmult
- 单个象限考虑的角度
- case1: 0,45,22.5,33.75,11.25
- case2: 0, 22.5, 45
- 每个运动基元末端角度设置
- 0 theta change:basemprimendpts0_c(1,:)=[1 0 0 forwardcostmult];
- 1/16 theta change:basemprimendpts0_c(4,:) = [8 1 1 forwardandturncostmult];
循环赋值
- 外部循环: 1:numberofangles
- 内部循环: 1:numberofprimsperangle
- 处理角度:currentangle_36000int = round((angleind-1)*36000/numberofangles); %单位为度°
- 判断使用哪一种角度模板:(rem(currentangle_36000int, K) == 0), K=9000,4500,7875…
- 计算基元末端坐标
- 计算基元起始点与终点之间的插值坐标,算法见http://sbpl.net/node/53
- 输出保存到*.mprim类型文件中
总结
- 可以根据实际精度需求改变图片分辨率
- 360°角度的划分可以根据实际精度要求进行,划分角度越多,对角度的表征越精确
- 每个角度对应的运动基元数目可以为多个,默认为5个
- 运动基元的末状态设置可以根据实际精度要求进行,若基元末状态值比较小,虽然在进行全局规划时需要调用多个基元才能到达目标点,规划时间长,但是能够保证精度;若运动基元末状态值比较大,规划时间短,但可能会影响规划精度