Add option to disable PoseExtrapolator (#946)
This is useful for tuning/debugging to rule out (simulated) time issues (because published pose will then only depend on header times). Another use case is when Cartographer runs on a separate machine that has a different system clock than the sensors.master
parent
b9af6366db
commit
2df3b83c80
|
@ -231,14 +231,20 @@ void Node::PublishLocalTrajectoryData(const ::ros::TimerEvent& timer_event) {
|
||||||
// information is better.
|
// information is better.
|
||||||
const ::cartographer::common::Time now = std::max(
|
const ::cartographer::common::Time now = std::max(
|
||||||
FromRos(ros::Time::now()), extrapolator.GetLastExtrapolatedTime());
|
FromRos(ros::Time::now()), extrapolator.GetLastExtrapolatedTime());
|
||||||
stamped_transform.header.stamp = ToRos(now);
|
stamped_transform.header.stamp =
|
||||||
|
node_options_.use_pose_extrapolator
|
||||||
|
? ToRos(now)
|
||||||
|
: ToRos(trajectory_data.local_slam_data->time);
|
||||||
|
const Rigid3d tracking_to_local_3d =
|
||||||
|
node_options_.use_pose_extrapolator
|
||||||
|
? extrapolator.ExtrapolatePose(now)
|
||||||
|
: trajectory_data.local_slam_data->local_pose;
|
||||||
const Rigid3d tracking_to_local = [&] {
|
const Rigid3d tracking_to_local = [&] {
|
||||||
if (trajectory_data.trajectory_options.publish_frame_projected_to_2d) {
|
if (trajectory_data.trajectory_options.publish_frame_projected_to_2d) {
|
||||||
return carto::transform::Embed3D(
|
return carto::transform::Embed3D(
|
||||||
carto::transform::Project2D(extrapolator.ExtrapolatePose(now)));
|
carto::transform::Project2D(tracking_to_local_3d));
|
||||||
}
|
}
|
||||||
return extrapolator.ExtrapolatePose(now);
|
return tracking_to_local_3d;
|
||||||
}();
|
}();
|
||||||
|
|
||||||
const Rigid3d tracking_to_map =
|
const Rigid3d tracking_to_map =
|
||||||
|
|
|
@ -40,6 +40,10 @@ NodeOptions CreateNodeOptions(
|
||||||
lua_parameter_dictionary->GetDouble("pose_publish_period_sec");
|
lua_parameter_dictionary->GetDouble("pose_publish_period_sec");
|
||||||
options.trajectory_publish_period_sec =
|
options.trajectory_publish_period_sec =
|
||||||
lua_parameter_dictionary->GetDouble("trajectory_publish_period_sec");
|
lua_parameter_dictionary->GetDouble("trajectory_publish_period_sec");
|
||||||
|
if (lua_parameter_dictionary->HasKey("use_pose_extrapolator")) {
|
||||||
|
options.use_pose_extrapolator =
|
||||||
|
lua_parameter_dictionary->GetBool("use_pose_extrapolator");
|
||||||
|
}
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ struct NodeOptions {
|
||||||
double submap_publish_period_sec;
|
double submap_publish_period_sec;
|
||||||
double pose_publish_period_sec;
|
double pose_publish_period_sec;
|
||||||
double trajectory_publish_period_sec;
|
double trajectory_publish_period_sec;
|
||||||
|
bool use_pose_extrapolator = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
NodeOptions CreateNodeOptions(
|
NodeOptions CreateNodeOptions(
|
||||||
|
|
|
@ -24,6 +24,7 @@ options = {
|
||||||
odom_frame = "odom",
|
odom_frame = "odom",
|
||||||
provide_odom_frame = true,
|
provide_odom_frame = true,
|
||||||
publish_frame_projected_to_2d = false,
|
publish_frame_projected_to_2d = false,
|
||||||
|
use_pose_extrapolator = true,
|
||||||
use_odometry = false,
|
use_odometry = false,
|
||||||
use_nav_sat = false,
|
use_nav_sat = false,
|
||||||
use_landmarks = false,
|
use_landmarks = false,
|
||||||
|
|
|
@ -24,6 +24,7 @@ options = {
|
||||||
odom_frame = "odom",
|
odom_frame = "odom",
|
||||||
provide_odom_frame = true,
|
provide_odom_frame = true,
|
||||||
publish_frame_projected_to_2d = false,
|
publish_frame_projected_to_2d = false,
|
||||||
|
use_pose_extrapolator = true,
|
||||||
use_odometry = false,
|
use_odometry = false,
|
||||||
use_nav_sat = false,
|
use_nav_sat = false,
|
||||||
use_landmarks = false,
|
use_landmarks = false,
|
||||||
|
|
|
@ -24,6 +24,7 @@ options = {
|
||||||
odom_frame = "odom",
|
odom_frame = "odom",
|
||||||
provide_odom_frame = true,
|
provide_odom_frame = true,
|
||||||
publish_frame_projected_to_2d = false,
|
publish_frame_projected_to_2d = false,
|
||||||
|
use_pose_extrapolator = true,
|
||||||
use_odometry = false,
|
use_odometry = false,
|
||||||
use_nav_sat = false,
|
use_nav_sat = false,
|
||||||
use_landmarks = false,
|
use_landmarks = false,
|
||||||
|
|
|
@ -24,6 +24,7 @@ options = {
|
||||||
odom_frame = "odom",
|
odom_frame = "odom",
|
||||||
provide_odom_frame = true,
|
provide_odom_frame = true,
|
||||||
publish_frame_projected_to_2d = false,
|
publish_frame_projected_to_2d = false,
|
||||||
|
use_pose_extrapolator = true,
|
||||||
use_odometry = false,
|
use_odometry = false,
|
||||||
use_nav_sat = false,
|
use_nav_sat = false,
|
||||||
use_landmarks = false,
|
use_landmarks = false,
|
||||||
|
|
|
@ -24,6 +24,7 @@ options = {
|
||||||
odom_frame = "odom",
|
odom_frame = "odom",
|
||||||
provide_odom_frame = false,
|
provide_odom_frame = false,
|
||||||
publish_frame_projected_to_2d = false,
|
publish_frame_projected_to_2d = false,
|
||||||
|
use_pose_extrapolator = true,
|
||||||
use_odometry = true,
|
use_odometry = true,
|
||||||
use_nav_sat = false,
|
use_nav_sat = false,
|
||||||
use_landmarks = false,
|
use_landmarks = false,
|
||||||
|
|
Loading…
Reference in New Issue