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> 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());
unsigned int sync_attempts_sensor_frame_
double bearing_range_std_pitch
mrpt::obs::CObservationBearingRange::Ptr last_bearing_range_
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
bool getStaticTF(std::string source_frame, mrpt::poses::CPose3D &des)
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
void callbackLaser(const sensor_msgs::LaserScan &)
double sensor_frame_sync_threshold
int main(int argc, char **argv)
bool waitForTransform(mrpt::poses::CPose3D &des, const std::string &target_frame, const std::string &source_frame, const ros::Time &time, const ros::Duration &timeout, const ros::Duration &polling_sleep_duration=ros::Duration(0.01))
double bearing_range_std_range
ros::Subscriber subOdometry_
CActionRobotMovement2D::TMotionModelOptions motionModelOptions
std::string odom_frame_id
virtual geometry_msgs::TransformStamped lookupTransform(const std::string &target_frame, const std::string &source_frame, const ros::Time &time, const ros::Duration timeout) const
mrpt::obs::CObservation2DRangeScan::Ptr last_range_scan_
std::string base_frame_id
double bearing_range_std_yaw
void fromMsg(const A &, B &b)
void convert(const nav_msgs::Odometry &src, mrpt::obs::CObservationOdometry &des)
std::map< std::string, mrpt::poses::CPose3D > static_tf_
TF2SIMD_FORCE_INLINE const Vector3 & getRow(int i) const
void addObservation(const ros::Time &time)
void updateRawLogName(const mrpt::system::TTimeStamp &t)
bool fromROS(const marker_msgs::MarkerDetection &_msg, const mrpt::poses::CPose3D &sensorPoseOnRobot, mrpt::obs::CObservationBearingRange &_obj)
void callbackOdometry(const nav_msgs::Odometry &)
mrpt::obs::CObservationBeaconRanges::Ptr last_beacon_range_
mrpt::obs::CObservationOdometry::Ptr last_odometry_
ros::Subscriber subLaser_
RawlogRecordNode(ros::NodeHandle &n)
void callbackMarker(const marker_msgs::MarkerDetection &)
commands
bool record_bearing_range
tf2_ros::Buffer tf_buffer_
ros::Subscriber subMarker_