publish_tracked_pose 和 use_pose_extrapolator
新版本增加的参数publish_tracked_pose
,默认false1
2
3
4
5
6
7
8
9
10
11struct NodeOptions {
::cartographer::mapping::proto::MapBuilderOptions map_builder_options;
std::string map_frame;
double lookup_transform_timeout_sec;
double submap_publish_period_sec;
double pose_publish_period_sec;
double trajectory_publish_period_sec;
bool publish_to_tf = true;
bool publish_tracked_pose = false;
bool use_pose_extrapolator = true;
};
在Node
构造函数中的部分1
2
3
4
5if (node_options_.publish_tracked_pose) {
tracked_pose_publisher_ =
node_handle_.advertise<::geometry_msgs::PoseStamped>(
kTrackedPoseTopic, kLatestOnlyPublisherQueueSize);
}
发布消息的部分在Node::PublishLocalTrajectoryData
的最后。
这里用到了新版本的另一个新内容: 参数use_pose_extrapolator
Node里的位姿估计器,作用是融合里程计和IMU,推测出一个位姿。 如果use_pose_extrapolator
参数为true,发布出的这个位姿不准,因为是先验的位姿,没有经过雷达校准,除非IMU和里程计特别准。因此这个参数一般都是false
如果参数publish_tracked_pose
为false,use_pose_extrapolator
其实就无效了
Node::MaybeWarnAboutTopicMismatch
新版本中的Node::AddTrajectory
添加1
2
3wall_timers_.push_back(node_handle_.createWallTimer(
::ros::WallDuration(kTopicMismatchCheckDelaySec),
&Node::MaybeWarnAboutTopicMismatch, this, /*oneshot=*/true) );
创建一个3s执行一次的定时器,由于oneshot=true
,所以只执行一次。检查设置的topic名字在ROS中是否存在,不存在则报错
pose_graph_odometry_motion_filter
CreateGlobalTrajectoryBuilder2D
的参数增加 pose_graph_odometry_motion_filter
里程计的滤波器,但没有初始化
1 | absl::optional<MotionFilter> pose_graph_odometry_motion_filter; |
GetTrajectoryStates
改名为 GetLocalTrajectoryData
原因在于后端里也有GetTrajectoryStates
,容易混淆
Node
构造函数 —— Node::PublishLocalTrajectoryData
—— map_builder_bridge_.GetLocalTrajectoryData()
最后用到的local_slam_data_
在MapBuilderBridge::OnLocalSlamResult
中赋值