做购物平台网站 民治,wordpress转播,梧州论坛红豆思辨,百度指数查询官网大数据相关文章
ipa 功能包测试
ipa 分区算法 ipa 分区算法总结#xff0c;部分算法图解
ipa 覆盖算法分析#xff08;一#xff09;
ipa 覆盖算法分析#xff08;二#xff09; 测试
网上找的地图#xff1a; fig.1 测试地图 opencv fig.2 opencv 显示的覆盖路径 rviz fi…相关文章
ipa 功能包测试
ipa 分区算法 ipa 分区算法总结部分算法图解
ipa 覆盖算法分析一
ipa 覆盖算法分析二 测试
网上找的地图 fig.1 测试地图 opencv fig.2 opencv 显示的覆盖路径 rviz fig.3 rviz 显示的覆盖路径 rviz 中 path 话题只是将路径点连线起来而没有显示路径点单看话题还以为在障碍物和未知区域内规划了路径。cv 图片虽然区分了路径点和路线但也只有灰度图像不方便看。所以最好在 rviz 中再补个路径点的话题。
为了方便观察补充 posearray 话题显示所有路径点和起点终点。
效果如下绿线是路径红色箭头是路径点蓝色箭头是起点和终点。 fig.4 rviz 显示的覆盖路径和路径点 Ipa 参数测试
覆盖算法
action 数据结构
客户端发送任务参数对算法也有影响下面是 action.goal 数据结构
# goal definition
sensor_msgs/Image input_map # 地图,# 8bit 8UC1 灰度图 0 (黑) 表示障碍物 255 (白) 表示自由空间# todo: the image needs to be vertically mirrored compared to the map in RViz for using right coordinate systems# OccupancyGrid map origin lower left corner, image origin upper left corner# todo: take the OccupanyGrid message here instead to avoid confusion and deal with map coordinates in server
float32 map_resolution # 地图分辨率单位米/栅格
geometry_msgs/Pose map_origin # 地图原点位置暂不支持角度
float32 robot_radius # 没有用到看注释是要考虑机器半径来检查碰撞的
float32 coverage_radius # 下面 planning_mode 1 时候用的 footprint 覆盖面积
geometry_msgs/Point32[] field_of_view # 用 4 个点表示机器感知区域x 轴朝前y 朝左。下面 planning_mode 2 时候使用
geometry_msgs/Point32 field_of_view_origin # 上面 field_of_view 的原点在机器坐标系中的位置
geometry_msgs/Pose2D starting_position # starting pose of the robot in the room coordinate system [meter,meter,rad]
int32 planning_mode # 1:机器 footprint 计算覆盖面积 2传感器感知计算覆盖面积
参数测试
在 ipa_room_exploration/ros/launch 中覆盖算法有 3 个参数服务器配置文件
cob_map_accessibility_analysis_params 文件
5 个参数都没用到 coverage_monitor_server_params 文件
map_frame
Map 坐标名tf 转换用
robot_frame
机器坐标名tf 转换用
coverage_radius
有效覆盖半径单位米以实际覆盖区域的最大内接圆计算。然后用 coverage_radius 计算覆盖栅格的大小如下图绿色区域是有效覆盖半径蓝色正方形是其覆盖栅格。 fig.5 覆盖栅格 调整参数测试左边 0.25m右边 0.5m。可以看出该参数直接影响行距。 fig.6 coverage_radius 参数测试 coverage_circle_offset_transform 没用 robot_trajectory_recording_active coverage_monitor_server.cpp 中监测覆盖路径执行情况记录显示机器运行轨迹。 room_exploration_action_server_params 文件 room_exploration_algorithm
覆盖算法选择。 display_trajectory
是否显示算法步骤。
算法选择 boustrophedon explorator coverage_radius 是 0.25m。
左边是 cell path 步骤中间是 path 步骤右边是最后的 rviz 显示。 fig.7 display_trajectory 参数测试 仅仅是服务端多显示一步 “cell path” 把路径点转到栅格地图显示而已。 map_correction_closing_neighborhood_size
设置地图预处理中的“腐蚀-膨胀”的开操作虽然源码注释是闭操作迭代次数开操作主要用于过滤噪音。
源码中使用 3*3 的核对地图图片进行处理迭代 n 次意味着能够过滤 n 个像素的噪声。 需要注意到 opencv 中腐蚀和膨胀都是对白色像素的操作 所以源码的处理实际上是对自由空间的噪音的过滤可以根据需要修改代码选择开闭操作。 给测试地图增加噪点像素 fig.8(a) 增加噪点的测试地图 fig.8(b) 增加噪点的障碍物 fig.8(c) 增加噪点的障碍物 用 map_correction_closing_neighborhood_size 2 测试
从左到右分别是腐蚀步骤膨胀步骤规划路径rviz显示 fig.9 map_correction_closing_neighborhood_size 参数测试 return_path
返回路径到覆盖 action 的 result 中同时发布 rviz 话题。 execute_path
是否执行路径该功能会在覆盖路径上选择目标发布给到 move_base同时记录机器轨迹。 goal_eps
执行路径时候选择的目标点与机器最小距离。 use_dyn_goal_eps
启用该功能的话当路径曲率越大目标选择最近goal_eps 作为选点最远距离。 interrupt_navigation_publishing revisit_areas
因为计算或者动态障碍物干扰忽略过的区域是否要回去访问。 left_sections_min_area
重新访问时候最小的未访问区域大小。 global_costmap_topic
全局地图话题名 coverage_check_service_name
没用到 map_frame
map 坐标系名 camera_frame
相机坐标系名 规划器
****************** TSP 规划器 ****************** tsp_solver
根据注释
tsp 规划器第一类求解器 Nearest Neighbor 效果 fig.9(a) tsp_solver 参数测试 tsp 规划器第三类求解器 Concorde solver 需要到官网下载注释说这个规划算法更加费时我就不折腾看了。 略... tsp_solver_timeout
Tsp 规划超时时间单位秒 ****************** 牛耕法规划器 ****************** min_cell_area
为了方便查看效果rviz 增加了单元区域显示序号是单元遍历顺序。
测试图片是 200 pixel * 200 pixel 40000 pixel^2。
下图左边是 min_cell_area 200 效果右图是 min_cell_area 10000 效果。可以看到右图中 No.0 单元面积非常大远不止 10000 pixel^2。 fig.10 min_cell_area 参数测试 看了下代码源码的实现是跳过面积小于 min_cell_area 的单元当遇到面积满足条件的单元后再合并前面被忽略的相邻单元给到当前单元。由于 0 到 6 号单元面积都不满足条件且都相邻所以都被合并进 7 号单元了。 测试了 room_exploration_algorithm 8 的改进牛耕算法这部分单元融合效果是一样的。 path_eps
覆盖路径点间距单位是像素。
测试 room_exploration_algorithm 2 牛耕法左边 2 图是 path_eps 6.0右边 2 图是 path_eps 10.0。 fig.11 path_eps 参数测试 grid_obstacle_offset
第一个应用计算 min_cell_width在单元合并时候宽高小于 min_cell_width 的单元会被相邻的大单元合并。
const int min_cell_width half_grid_spacing_as_int 2.*grid_obstacle_offset/map_resolution;
第二个应用单元区域内计算牛耕路径之前会腐蚀迭代 (半个覆盖栅格grid_obstacle_offset) 次。
cv::erode(room_map, inflated_room_map, cv::Mat(), cv::Point(-1, -1), half_grid_spacing_as_intgrid_obstacle_offset);
这里腐蚀的 grid_obstacle_offset 个栅格可以认为是对障碍物的膨胀增加了路径安全保障。因为规划的路径认为是机器中心跟随的为保障路径可行需要腐蚀掉大于半个机器半径的自由栅格空间。
如图 fig.12 所示蓝色圆圈表示机器如果是几何外形可以用最大外接圆代替中间棕色正方形 ABCD 就是覆盖栅格区域girdObstacleOffset 距离就是最小的安全障碍物膨胀距离 grid_obstacle_offset 。由于源码的计算得到的是 int 类型小于 1 地图栅格还会变为 0 个栅格所以 grid_obstacle_offset 还得大于等于地图分辨率。另一种做法是用 std::ceil 向上取整。 fig.12 grid_obstacle_offset 参数意义图示 左图 grid_obstacle_offset 0.251右图 grid_obstacle_offset 0.1。右图单元边界附近的路径更多一些。 fig.13(a) grid_obstacle_offset 参数测试 为什么图 fig.13(a) 中地图上方路径点距离边界远一点但是地图下方路径距离边界却很近增加测试代码显示旋转后的地图如图 fig.13(b)旋转后的地图边界一圈障碍物确实发生了改变实际上右侧已经没有黑色像素了。而原图 fig.13(c) 的地图边界原本就是整齐的这说明 ipa 的旋转步骤会引入噪声。 fig.13(b) 旋转后的地图 fig.13(c) 测试原地图 为什么图 fig.13(a) 中 0 号单元区域左侧空隙较大
源码是在被腐蚀自由区域后的地图上增加路径安全距离再在单元区域内计算牛耕覆盖路径。被腐蚀区域大小是 half_grid_spacing_as_intgrid_obstacle_offset 也就是上面提到的第二个应用。 fig.13(d) 第 0 号单元区域 图 fig.13(e) 上方就是第 0 号单元区域。可以看到腐蚀后自由空间已经不多了。 fig.13(e) 腐蚀掉半个机身的地图 总的来说地图旋转导致了误差 安全距离腐蚀自由区域再次放大了误差导致最后得到的路径异常。 max_deviation_from_track
遇到障碍物时候牛耕路径最大偏移量单位地图像素。设置为负值会自动调整。
左图 max_deviation_from_track 0右图 max_deviation_from_track 8地图分辨率是 0.05cm。 fig.14 max_deviation_from_track 参数测试 发现单元相接的位置牛耕路径是会有重叠的原因是牛耕路径规划是单个单元区域进行的各个单元并不知道相邻单元的规划情况导致有大量路径重叠。 cell_visiting_order
单元遍历顺序 cell_visiting_order 1 是 TSP 规划 cell_visiting_order 2 是从左到右遍历。
左图是顺序遍历右图是 TSP 遍历。
TSP 的起点以机器所在单元开始这里单元区域被简化为单元的中心点也就是单元编号所在的位置来计算的。 fig.15 cell_visiting_order 参数测试 ****************** 神经网络规划器 ******************
神经网络规划器有些抽象应该要像论文那样动态地观察网络是如何更新的才好理解源码中大概扫了一眼没有找到动态观察的调试功能下面就是简单地测试 ipa 参数。
神经元定义部分
class Neuron
{
protected:// 外部刺激double I(){if(obstacle_ true)return -1.0*E_;else if(visited_ false)return E_;elsereturn 0.0;}// 神经信号值更新void updateState(){// get external inputconst double input I();// get the current sum of weights times the state of the neighbordouble weight_sum 0;for(size_t neighbor0; neighborneighbors_.size(); neighbor)weight_sum weights_[neighbor]*std::max(neighbors_[neighbor]-getState(true), 0.0);// calculate current gradient -- see stated paper from the beginningdouble gradient -A_*state_ (B_-state_)*(std::max(input, 0.0) weight_sum) - (D_state_)*std::max(-1.0*input, 0.0);// update state using euler methodstate_ step_size_*gradient;}
} step_size
神经信号增益。
左图 step_size 0.0008中图 step_size 0.008右图 step_size 0.012。 fig.16 step_size 参数测试 A
神经信号衰减值。
左图 step_size 0.008A 17右图 step_size 0.008A 10。 fig.17 A 参数测试 B
神经信号的最高预期值。当神经元信号高于该值下次迭代中信号会被拉低。
左图 step_size 0.008A 17B 5右图 step_size 0.008A 17B 10。 fig.18 B 参数测试 D
神经信号的最低预期值。当神经元信号低于该值下次迭代中信号会被拉高。
左图 step_size 0.008A 17B 5D 7右图 step_size 0.008A 17B 5D 3。 fig.19 D 参数测试 E
外部刺激信号大小E 来自障碍物未访问区域或者已访问区域。
左图 step_size 0.008A 17B 5D 7E 80。
右图 step_size 0.008A 17B 5D 3E 200。 fig.20 E 参数测试 mu
相邻神经元的影响权重该权重会被距离稀释。
左图 step_size 0.008A 17B 5D 7E 80mu 1.03。
右图 step_size 0.008A 17B 5D 3E 200mu 1.3。 fig.21 mu 参数测试 delta_theta_weight
相邻神经元的角度影响权重
左图 step_size 0.008A 17B 5D 7E 80mu 1.03delta_theta_weight 0.15。
右图 step_size 0.008A 17B 5D 3E 200mu 1.03delta_theta_weight 0.3。 fig.22 delta_theta_weight 参数测试 ****************** 凸感知放置规划器 ******************
在覆盖规划客户端修改 goal 的 planning_mode2 用传感器感知区域计算覆盖同时将传感器感知范围 field_of_view 设置如下大概模拟下扇形感知
std::vectorgeometry_msgs::Point32 fov_points(4);
fov_points[0].x 0.0;
fov_points[0].y 0.0;
fov_points[1].x 0.5;
fov_points[1].y 0.4;
fov_points[2].x 0.5;
fov_points[2].y -0.4;
fov_points[3].x 0.6;
fov_points[3].y 0.0; fig.23 凸感知范围简化几何 cell_size
凸感知使用的地图分辨率单位是地图像素。cell_size 0 会自动检测分辨率十分费时且效果不佳。分辨率越小规划越精确但是求解时间越久。
左边是 cell_size 0 自动检测分辨率和规划都十分耗时右边是 cell_size 7计算快多了。 fig.24 cell_size 参数测试 delta_theta
求解传感器放置位姿时候传感器放置角度的采样步进单位是弧度。
delta_theta 0.78539816339 和 delta_theta 1.570796。 fig.25 delta_theta 参数测试 ****************** 流网络规划器 ******************
程序陷入死循环代码未完成。 curvature_factor max_distance_factor 缺陷 TSP 规划十分耗时 牛耕算法中旋转地图引入了噪声。
为什么图 fig.13 中地图上方路径点距离边界远一点但是地图下方路径距离边界却很近增加测试代码显示旋转后的地图如图 fig.26旋转后的地图边界一圈障碍物确实发生了改变实际上右侧已经没有黑色像素了。而原图 fig.27 的地图边界原本就是整齐的这说明 ipa 的旋转步骤会引入噪声。 fig.26 旋转后的地图 fig.27 测试原地图 为什么在牛耕算法测试中 0 号单元区域左侧空隙较大
源码是在被腐蚀自由区域后的地图上增加路径安全距离再在单元区域内计算牛耕覆盖路径。被腐蚀区域大小是 half_grid_spacing_as_intgrid_obstacle_offset 也就是上面提到的第二个应用。 fig.28 第 0 号单元区域 图 fig.29 上方就是第 0 号单元区域。可以看到腐蚀后自由空间已经不多了。 fig.29 腐蚀掉半个机身的地图 总的来说地图旋转导致了误差 安全距离腐蚀自由区域再次放大了误差导致最后得到的路径异常。
单元内部存在重叠路径。
在 max_deviation_from_track 参数测试步骤中可以发现在 0 号单元内存在重叠路径图 fig.30 左侧当提高 max_deviation_from_track 偏移值后路径别没有重叠了图 fig.30 右侧。 fig.30 单元内路径重叠 牛耕法单元之间路径没有连接。
Ipa 功能包是为 move_base 框架服务的ipa 负责规划覆盖路径然后根据机器定位和感知情况选择路径点提供给 move_basemove_base 再进行点到点规划执行任务。 单元区间之间存在重叠的路径。
因为每个单元区是单独计算的 单元合并不合理。
应该是小面积单元先尝试与之前所有相邻的小单元合并检查面积是否达标不达标则暂时忽略跳过。 单元遍历顺序不合理。
就算是 TSP 规划遍历顺序用简化的单元中心点计算也不合适。可以做成实时的规划因为有时候因为动态障碍物干扰导致单元访问完毕后终点位置会有变化。 凸感知放置算法中感知范围设置只支持 4 个点的多边形。 改进 单元分解中对于单个超大面积单元可以增加分解。就是说单元分解不仅有最小面积限制还有最大面积限制超过最大单元面积需要分解为小单元。 障碍物边缘可以稍微离远点提高路径执行效率。另外执行沿边规划来访问地图边缘。 文章转载自: http://www.morning.mkydt.cn.gov.cn.mkydt.cn http://www.morning.trqhd.cn.gov.cn.trqhd.cn http://www.morning.sgbjh.cn.gov.cn.sgbjh.cn http://www.morning.jbxd.cn.gov.cn.jbxd.cn http://www.morning.jmmz.cn.gov.cn.jmmz.cn http://www.morning.haolipu.com.gov.cn.haolipu.com http://www.morning.kmbgl.cn.gov.cn.kmbgl.cn http://www.morning.prznc.cn.gov.cn.prznc.cn http://www.morning.lgznc.cn.gov.cn.lgznc.cn http://www.morning.zrqs.cn.gov.cn.zrqs.cn http://www.morning.yxgqr.cn.gov.cn.yxgqr.cn http://www.morning.fsqbx.cn.gov.cn.fsqbx.cn http://www.morning.xcbnc.cn.gov.cn.xcbnc.cn http://www.morning.mjxgs.cn.gov.cn.mjxgs.cn http://www.morning.kjxgc.cn.gov.cn.kjxgc.cn http://www.morning.mlntx.cn.gov.cn.mlntx.cn http://www.morning.hpxxq.cn.gov.cn.hpxxq.cn http://www.morning.nkpls.cn.gov.cn.nkpls.cn http://www.morning.cfnsn.cn.gov.cn.cfnsn.cn http://www.morning.hbpjb.cn.gov.cn.hbpjb.cn http://www.morning.mkxxk.cn.gov.cn.mkxxk.cn http://www.morning.kmqwp.cn.gov.cn.kmqwp.cn http://www.morning.hfrbt.cn.gov.cn.hfrbt.cn http://www.morning.ksggl.cn.gov.cn.ksggl.cn http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn http://www.morning.dgckn.cn.gov.cn.dgckn.cn http://www.morning.xinxianzhi005.com.gov.cn.xinxianzhi005.com http://www.morning.rmppf.cn.gov.cn.rmppf.cn http://www.morning.lizimc.com.gov.cn.lizimc.com http://www.morning.ljglc.cn.gov.cn.ljglc.cn http://www.morning.lcxzg.cn.gov.cn.lcxzg.cn http://www.morning.qygfb.cn.gov.cn.qygfb.cn http://www.morning.kybyf.cn.gov.cn.kybyf.cn http://www.morning.kjcfz.cn.gov.cn.kjcfz.cn http://www.morning.yrcxg.cn.gov.cn.yrcxg.cn http://www.morning.sqqds.cn.gov.cn.sqqds.cn http://www.morning.dsprl.cn.gov.cn.dsprl.cn http://www.morning.qpmwb.cn.gov.cn.qpmwb.cn http://www.morning.bnzjx.cn.gov.cn.bnzjx.cn http://www.morning.skrh.cn.gov.cn.skrh.cn http://www.morning.rtlg.cn.gov.cn.rtlg.cn http://www.morning.clpdm.cn.gov.cn.clpdm.cn http://www.morning.bktzr.cn.gov.cn.bktzr.cn http://www.morning.ldgqh.cn.gov.cn.ldgqh.cn http://www.morning.knzdt.cn.gov.cn.knzdt.cn http://www.morning.pttrs.cn.gov.cn.pttrs.cn http://www.morning.yhglt.cn.gov.cn.yhglt.cn http://www.morning.rryny.cn.gov.cn.rryny.cn http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn http://www.morning.wztnh.cn.gov.cn.wztnh.cn http://www.morning.wynqg.cn.gov.cn.wynqg.cn http://www.morning.tytly.cn.gov.cn.tytly.cn http://www.morning.wmqrn.cn.gov.cn.wmqrn.cn http://www.morning.lpppg.cn.gov.cn.lpppg.cn http://www.morning.bkkgt.cn.gov.cn.bkkgt.cn http://www.morning.grzpc.cn.gov.cn.grzpc.cn http://www.morning.cndxl.cn.gov.cn.cndxl.cn http://www.morning.kfrhh.cn.gov.cn.kfrhh.cn http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn http://www.morning.xbhpm.cn.gov.cn.xbhpm.cn http://www.morning.phwmj.cn.gov.cn.phwmj.cn http://www.morning.lqypx.cn.gov.cn.lqypx.cn http://www.morning.frmmp.cn.gov.cn.frmmp.cn http://www.morning.mxftp.com.gov.cn.mxftp.com http://www.morning.pfbx.cn.gov.cn.pfbx.cn http://www.morning.nqwz.cn.gov.cn.nqwz.cn http://www.morning.sbjbs.cn.gov.cn.sbjbs.cn http://www.morning.svrud.cn.gov.cn.svrud.cn http://www.morning.qkdcb.cn.gov.cn.qkdcb.cn http://www.morning.ppqjh.cn.gov.cn.ppqjh.cn http://www.morning.lftpl.cn.gov.cn.lftpl.cn http://www.morning.hfbtt.cn.gov.cn.hfbtt.cn http://www.morning.pdwzr.cn.gov.cn.pdwzr.cn http://www.morning.rwzqn.cn.gov.cn.rwzqn.cn http://www.morning.wnnlr.cn.gov.cn.wnnlr.cn http://www.morning.nckjk.cn.gov.cn.nckjk.cn http://www.morning.wwnb.cn.gov.cn.wwnb.cn http://www.morning.mynbc.cn.gov.cn.mynbc.cn http://www.morning.wklyk.cn.gov.cn.wklyk.cn http://www.morning.prsxj.cn.gov.cn.prsxj.cn