Publish correct transforms from SLAM. (#7)
parent
7ead7400d4
commit
abd503d6f8
|
@ -524,7 +524,13 @@ void Node::PublishSubmapList(const int64 timestamp) {
|
||||||
void Node::PublishPose(const int64 timestamp) {
|
void Node::PublishPose(const int64 timestamp) {
|
||||||
const ::cartographer::common::Time time =
|
const ::cartographer::common::Time time =
|
||||||
::cartographer::common::FromUniversal(timestamp);
|
::cartographer::common::FromUniversal(timestamp);
|
||||||
const Rigid3d tracking_to_map = trajectory_builder_->pose_estimate().pose;
|
const Rigid3d tracking_to_local = trajectory_builder_->pose_estimate().pose;
|
||||||
|
const ::cartographer::mapping::Submaps* submaps =
|
||||||
|
trajectory_builder_->submaps();
|
||||||
|
const Rigid3d local_to_map =
|
||||||
|
sparse_pose_graph_->GetOdometryToMapTransform(*submaps);
|
||||||
|
const Rigid3d tracking_to_map = local_to_map * tracking_to_local;
|
||||||
|
|
||||||
geometry_msgs::TransformStamped stamped_transform;
|
geometry_msgs::TransformStamped stamped_transform;
|
||||||
stamped_transform.header.stamp = ToRos(time);
|
stamped_transform.header.stamp = ToRos(time);
|
||||||
stamped_transform.header.frame_id = map_frame_;
|
stamped_transform.header.frame_id = map_frame_;
|
||||||
|
@ -532,18 +538,12 @@ void Node::PublishPose(const int64 timestamp) {
|
||||||
|
|
||||||
if (provide_odom_) {
|
if (provide_odom_) {
|
||||||
::cartographer::common::MutexLocker lock(&mutex_);
|
::cartographer::common::MutexLocker lock(&mutex_);
|
||||||
const ::cartographer::mapping::Submaps* submaps =
|
stamped_transform.transform = ToGeometryMsgTransform(local_to_map);
|
||||||
trajectory_builder_->submaps();
|
|
||||||
const ::cartographer::transform::Rigid3d odom_to_map =
|
|
||||||
sparse_pose_graph_->GetOdometryToMapTransform(*submaps);
|
|
||||||
stamped_transform.transform = ToGeometryMsgTransform(odom_to_map);
|
|
||||||
tf_broadcaster_.sendTransform(stamped_transform);
|
tf_broadcaster_.sendTransform(stamped_transform);
|
||||||
|
|
||||||
stamped_transform.header.frame_id = odom_frame_;
|
stamped_transform.header.frame_id = odom_frame_;
|
||||||
stamped_transform.child_frame_id = tracking_frame_;
|
stamped_transform.child_frame_id = tracking_frame_;
|
||||||
const ::cartographer::transform::Rigid3d tracking_to_odom =
|
stamped_transform.transform = ToGeometryMsgTransform(tracking_to_local);
|
||||||
odom_to_map.inverse() * tracking_to_map;
|
|
||||||
stamped_transform.transform = ToGeometryMsgTransform(tracking_to_odom);
|
|
||||||
tf_broadcaster_.sendTransform(stamped_transform);
|
tf_broadcaster_.sendTransform(stamped_transform);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in New Issue