| 26 | |
| 27 | |
| 28 | bool LocalizationNode::Init() { |
| 29 | |
| 30 | LocalizationConfig localization_config; |
| 31 | localization_config.GetParam(&nh_); |
| 32 | |
| 33 | odom_frame_ = std::move(localization_config.odom_frame_id); |
| 34 | global_frame_ = std::move(localization_config.global_frame_id); |
| 35 | base_frame_ = std::move(localization_config.base_frame_id); |
| 36 | |
| 37 | laser_topic_ = std::move(localization_config.laser_topic_name); |
| 38 | |
| 39 | init_pose_ = {localization_config.initial_pose_x, |
| 40 | localization_config.initial_pose_y, |
| 41 | localization_config.initial_pose_a}; |
| 42 | init_cov_ = {localization_config.initial_cov_xx, |
| 43 | localization_config.initial_cov_yy, |
| 44 | localization_config.initial_cov_aa}; |
| 45 | |
| 46 | transform_tolerance_ = ros::Duration(localization_config.transform_tolerance); |
| 47 | publish_visualize_ = localization_config.publish_visualize; |
| 48 | |
| 49 | tf_broadcaster_ptr_ = std::make_unique<tf::TransformBroadcaster>(); |
| 50 | tf_listener_ptr_ = std::make_unique<tf::TransformListener>(); |
| 51 | |
| 52 | distance_map_pub_ = nh_.advertise<nav_msgs::OccupancyGrid>("distance_map", 1, true); |
| 53 | particlecloud_pub_ = nh_.advertise<geometry_msgs::PoseArray>("particlecloud", 2, true); |
| 54 | |
| 55 | // Use message filter for time synchronizer (laser scan topic and tf between odom and base frame) |
| 56 | laser_scan_sub_ = std::make_shared<message_filters::Subscriber<sensor_msgs::LaserScan>>(nh_, laser_topic_, 100); |
| 57 | laser_scan_filter_ = std::make_unique<tf::MessageFilter<sensor_msgs::LaserScan>>(*laser_scan_sub_, |
| 58 | *tf_listener_ptr_, |
| 59 | odom_frame_, |
| 60 | 100); |
| 61 | laser_scan_filter_->registerCallback(boost::bind(&LocalizationNode::LaserScanCallback, this, _1)); |
| 62 | |
| 63 | initial_pose_sub_ = nh_.subscribe("initialpose", 2, &LocalizationNode::InitialPoseCallback, this); |
| 64 | pose_pub_ = nh_.advertise<geometry_msgs::PoseStamped>("amcl_pose", 2, true); |
| 65 | |
| 66 | amcl_ptr_= std::make_unique<Amcl>(); |
| 67 | amcl_ptr_->GetParamFromRos(&nh_); |
| 68 | amcl_ptr_->Init(init_pose_, init_cov_); |
| 69 | |
| 70 | map_init_ = GetStaticMap(); |
| 71 | laser_init_ = GetLaserPose(); |
| 72 | |
| 73 | return map_init_&&laser_init_; |
| 74 | } |
| 75 | |
| 76 | bool LocalizationNode::GetStaticMap(){ |
| 77 | static_map_srv_ = nh_.serviceClient<nav_msgs::GetMap>("static_map"); |
nothing calls this directly
no test coverage detected