Lihao
Lihao
1. 这套代码编写时是基于静态地图的,但是在地图变换的情况下也可以用,因为代码中订阅了栅格地图消息,可以实时获取最新的地图; 2. 针对动态地图,可能需要修改的点,a) 地图回调与main函数加上互斥锁同步,防止astar.PathPlanning(startPoint, targetPoint, PathList)执行过程中,进入回调执行astar.InitAstar(Map, Mask, config); b) 修改PathPlanning执行的条件,使得地图更新后自动重新进行路径规划; 3. 你的报错可能是因为获取的地图不是CV_8UC1格式的,代码中计算的Mask数据是CV_8UC1格式的(即单通道),但info字段是复制的地图的,(即OccGridMask.info = msg.info),这里可能导致实际数据大小与info中的不一致; 4. 在实际的建图+导航的应用中,一般不会直接使用裸A*算法,而会使用ros::navigation导航包,或其他高级的导航算法
感谢您细致的检查,根据您的反馈已经对代码进行了修正
有障碍物信息就可以,修改的话可以参考main.cpp中的void MapCallback(const nav_msgs::OccupancyGrid& msg)函数,重新实现一个void MapCallback(const nav_msgs::GridCells& msg)函数,计算Map
可以尝试一下弗洛伊德算法,我对路径平滑也没有什么研究
Check whether the topics subscribed by the astar node (including **/map**, **/initialpose**, and **move_base_simple/goal**) have data.