36 #include <mrpt/ros1bridge/laser_scan.h>
37 #include <mrpt/ros1bridge/pose.h>
38 #include <mrpt/ros1bridge/time.h>
41 #include <boost/interprocess/sync/scoped_lock.hpp>
43 using namespace mrpt::maps;
44 using namespace mrpt::obs;
46 int main(
int argc,
char** argv)
80 mrpt::poses::CPose3D& des,
const std::string& target_frame,
81 const std::string& source_frame,
const ros::Time& time,
84 geometry_msgs::TransformStamped transform;
88 target_frame, source_frame, time, timeout);
93 "Failed to get transform target_frame (%s) to source_frame (%s): "
95 target_frame.c_str(), source_frame.c_str(), e.what());
100 des = mrpt::ros1bridge::fromROS(tx);
105 const nav_msgs::Odometry& src, mrpt::obs::CObservationOdometry& des)
107 des.timestamp = mrpt::ros1bridge::fromROS(src.header.stamp);
109 mrpt::poses::CPose2D(mrpt::ros1bridge::fromROS(src.pose.pose));
112 des.sensorLabel = odom_frame_id;
113 des.hasEncodersInfo =
false;
114 des.hasVelocities =
false;
135 mrpt::poses::CPose3D sensor_pose_on_robot;
137 if (
getStaticTF(_msg.header.frame_id, sensor_pose_on_robot))
139 mrpt::ros1bridge::fromROS(
157 mrpt::poses::CPose3D sensor_pose_on_robot;
159 if (
getStaticTF(_msg.header.frame_id, sensor_pose_on_robot))
181 ROS_INFO(
"Problem to syn data for sensor frame!");
184 auto odometry = CObservationOdometry::Create();
188 CObservation2DRangeScan::Ptr range_scan;
189 CObservationBearingRange::Ptr bearing_range;
190 CObservationBeaconRanges::Ptr beacon_range;
195 if (fabs(mrpt::system::timeDifference(
201 range_scan = CObservation2DRangeScan::Create();
209 if (fabs(mrpt::system::timeDifference(
215 bearing_range = CObservationBearingRange::Create();
222 if (fabs(mrpt::system::timeDifference(
228 beacon_range = CObservationBeaconRanges::Create();
233 static std::shared_ptr<mrpt::poses::CPose2D> lastOdomPose;
236 lastOdomPose = std::make_shared<mrpt::poses::CPose2D>();
237 *lastOdomPose = odometry->odometry;
240 mrpt::poses::CPose2D incOdoPose = odometry->odometry - *lastOdomPose;
242 CActionRobotMovement2D odom_move;
243 odom_move.timestamp = odometry->timestamp;
245 auto action = CActionCollection::Create();
246 action->insert(odom_move);
249 auto sf = CSensoryFrame::Create();
252 CObservation::Ptr obs_range_scan = CObservation::Ptr(range_scan);
253 sf->insert(obs_range_scan);
258 CObservation::Ptr obs_bearing_range = CObservation::Ptr(bearing_range);
259 sf->insert(obs_bearing_range);
263 CObservation::Ptr obs_bearing_range = CObservation::Ptr(beacon_range);
264 sf->insert(obs_bearing_range);
268 *lastOdomPose = odometry->odometry;
274 std::string source_frame, mrpt::poses::CPose3D& des)
277 std::string source_frame_id = source_frame;
278 std::string key = target_frame_id +
"->" + source_frame_id;
279 mrpt::poses::CPose3D pose;
281 geometry_msgs::TransformStamped tfGeom;
288 "debug: updateLaserPose(): target_frame_id='%s' "
289 "source_frame_id='%s'",
290 target_frame_id.c_str(), source_frame_id.c_str());
296 target_frame_id, source_frame_id,
ros::Time(0));
309 tf2::Vector3 translation = transform.
getOrigin();
311 pose.x() = translation.x();
312 pose.y() = translation.y();
313 pose.z() = translation.z();
315 mrpt::math::CMatrixDouble33 Rdes;
316 for (
int c = 0; c < 3; c++)
317 for (
int r = 0; r < 3; r++) Rdes(r, c) = Rsrc.
getRow(r)[c];
318 pose.setRotationMatrix(Rdes);
321 "Static tf '%s' with '%s'", key.c_str(), pose.asString().c_str());