本文主要是介绍ROS naviagtion analysis: costmap_2d--StaticLayer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从UML中能够看到,StaticLayer主要是在实现Layer层要求实现的接口。
virtual void onInitialize();virtual void activate();virtual void deactivate();virtual void reset();virtual void updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, double* min_y,double* max_x, double* max_y);virtual void updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j);virtual void matchSize();
函数virtual void activate();
:
void StaticLayer::activate()
{onInitialize();
}
而函数onInitialize()
中,首先初始化了一堆参数,然后调用
map_sub_ = g_nh.subscribe(map_topic, 1, &StaticLayer::incomingMap, this);//一旦收到topic 是“map”的消息,就调用`incomingMap`
while (!map_received_ && g_nh.ok()){
ros::spinOnce();r.sleep();}//如果map_received_一直是false,则阻塞在这里。而更新map_received_的地方在回调函数incomingMap
接下来判断是否接受static map的更新,如果是则开启对topic为map_topic + "_updates"
的更新。最后开启参数动态配置服务。
函数matchSize
中的操作依然是根据master map的尺寸,更新本层的尺寸:
void Static
这篇关于ROS naviagtion analysis: costmap_2d--StaticLayer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!