36 #include <mrpt/obs/CObservation2DRangeScan.h> 37 #include <mrpt/obs/CObservationBeaconRanges.h> 38 #include <mrpt/obs/CObservationBearingRange.h> 39 #include <mrpt/obs/CRawlog.h> 40 #include <mrpt/obs/CSensoryFrame.h> 41 #include <mrpt/ros1bridge/laser_scan.h> 42 #include <mrpt/ros1bridge/pose.h> 43 #include <mrpt/ros1bridge/time.h> 44 #include <mrpt/system/filesystem.h> 48 #include <boost/interprocess/sync/scoped_lock.hpp> 51 #include <mrpt/serialization/CArchive.h> 53 int main(
int argc,
char** argv)
86 n_.
advertise<mrpt_msgs::ObservationRangeBearing>(
"landmark", 10);
89 robotPose = mrpt::poses::CPose3DPDFGaussian();
93 const mrpt::obs::CObservation::Ptr& o)
95 mrpt::poses::CPose3D pose_sensor;
96 o->getSensorPose(pose_sensor);
98 geometry_msgs::Pose msgSensorPose;
102 auto lambdaSendTfSensorPose = [&](
const std_msgs::Header&
header) {
104 mrpt::ros1bridge::toROS_tfTransform(pose_sensor);
106 geometry_msgs::TransformStamped tfGeom =
109 tfGeom.child_frame_id =
header.frame_id;
115 if (
auto laser = std::dynamic_pointer_cast<CObservation2DRangeScan>(o);
118 mrpt::ros1bridge::toROS(*laser,
msg_laser_, msgSensorPose);
128 else if (
auto beacon =
129 std::dynamic_pointer_cast<CObservationBeaconRanges>(o);
141 else if (
auto landmark =
142 std::dynamic_pointer_cast<CObservationBearingRange>(o);
156 "Observation mapping to ROS not implemented: %s",
157 o->GetRuntimeClass()->className);
163 CActionCollection::Ptr
action;
164 CSensoryFrame::Ptr observations;
165 CObservation::Ptr obs;
169 if (!CRawlog::getActionObservationPairOrObservation(
170 rs, action, observations, obs,
entry_))
182 mrpt::poses::CPose3DPDFGaussian out_pose_increment;
183 action->getFirstMovementEstimation(out_pose_increment);
205 transform = mrpt::ros1bridge::toROS_tfTransform(
robotPose.mean);
209 MRPT_TODO(
"Publish /odom topic too?");
212 geometry_msgs::TransformStamped tfGeom =
216 tfGeom.child_frame_id =
msg_odom_.header.frame_id;
int main(int argc, char **argv)
ros::Publisher pub_landmark_
mrpt::io::CFileGZInputStream rawlog_stream_
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
RawlogPlayNode(ros::NodeHandle &n)
sensor_msgs::LaserScan msg_laser_
void update(const unsigned long &loop_count)
mrpt::poses::CPose3DPDFGaussian robotPose
nav_msgs::Odometry msg_odom_
void publish(const boost::shared_ptr< M > &message) const
void publishSingleObservation(const mrpt::obs::CObservation::Ptr &o)
mrpt_msgs::ObservationRangeBearing msg_landmark_
bool toROS(const mrpt::obs::CObservationBeaconRanges &_obj, mrpt_msgs::ObservationRangeBeacon &_msg)
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
tf2_ros::TransformBroadcaster tf_broadcaster_
ROSCPP_DECL void shutdown()
ros::Publisher pub_beacon_
ROSCPP_DECL void spinOnce()
unsigned long loop_count_
mrpt_msgs::ObservationRangeBeacon msg_beacon_
ros::Publisher pub_laser_