rawlog_record.cpp
Go to the documentation of this file.
00001 /***********************************************************************************
00002  * Revised BSD License                                                             *
00003  * Copyright (c) 2014, Markus Bader <markus.bader@tuwien.ac.at>                    *
00004  * All rights reserved.                                                            *
00005  *                                                                                 *
00006  * Redistribution and use in source and binary forms, with or without              *
00007  * modification, are permitted provided that the following conditions are met:     *
00008  *     * Redistributions of source code must retain the above copyright            *
00009  *       notice, this list of conditions and the following disclaimer.             *
00010  *     * Redistributions in binary form must reproduce the above copyright         *
00011  *       notice, this list of conditions and the following disclaimer in the       *
00012  *       documentation and/or other materials provided with the distribution.      *
00013  *     * Neither the name of the Vienna University of Technology nor the           *
00014  *       names of its contributors may be used to endorse or promote products      *
00015  *       derived from this software without specific prior written permission.     *
00016  *                                                                                 *
00017  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED   *
00019  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE          *
00020  * DISCLAIMED. IN NO EVENT SHALL Markus Bader BE LIABLE FOR ANY                    *
00021  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES      *
00022  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;    *
00023  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND     *
00024  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT      *
00025  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS   *
00026  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                    *                       *
00027  ***********************************************************************************/
00028 #include <stdio.h>
00029 #include <stdarg.h>
00030 
00031 #include <mrpt_rawlog_record/rawlog_record.h>
00032 #include <mrpt_rawlog_record/rawlog_record_defaults.h>
00033 
00034 #include <mrpt/base.h>
00035 #include <mrpt/slam.h>
00036 
00037 RawlogRecord::~RawlogRecord()
00038 {
00039     log_info("write data");
00040     MRPT_TODO("RawlogRecord writes the rawlog only on exit (Ctrl-C)");
00041     log_info("pRawLog    entries %i", pRawLog->size());
00042     log_info("pRawLogASF entries %i", pRawLogASF->size());
00043     if(pRawLog->size() > 0)  {
00044       std::string filename = param_->raw_log_folder + "/" + param_->raw_log_name;
00045       log_info("write %s", filename.c_str());
00046       pRawLog->saveToRawLogFile(filename);
00047     }
00048     if(pRawLogASF->size() > 0)   {
00049       std::string filename = param_->raw_log_folder + "/" + param_->raw_log_name_asf;
00050       log_info("write %s", filename.c_str());
00051       pRawLogASF->saveToRawLogFile(filename);
00052     }
00053     delete pRawLog;
00054     delete pRawLogASF;
00055 }
00056 
00057 RawlogRecord::RawlogRecord(Parameters *param)
00058     :param_(param) {
00059     pRawLog = new mrpt::slam::CRawlog;
00060     pRawLogASF = new mrpt::slam::CRawlog;
00061 }
00062 void RawlogRecord::updateRawLogName(const mrpt::system::TTimeStamp &t) {
00063     uint64_t        tmp = (t - ((uint64_t)116444736*1000000000));
00064     time_t          auxTime = tmp / (uint64_t)10000000;
00065     unsigned int    secFractions = (unsigned int)( 1000000 * (tmp % 10000000) / 10000000.0 );
00066     tm  *ptm = localtime( &auxTime );
00067     param_->raw_log_name = mrpt::format(
00068                                "%u-%02u-%02u--%02u-%02u-%02u--%s",
00069                                1900+ptm->tm_year,
00070                                ptm->tm_mon+1,
00071                                ptm->tm_mday,
00072                                ptm->tm_hour,
00073                                ptm->tm_min,
00074                                (unsigned int)ptm->tm_sec,
00075                                param_->raw_log_name.c_str());
00076     param_->raw_log_name_asf = mrpt::format(
00077                                    "%u-%02u-%02u--%02u-%02u-%02u--%s",
00078                                    1900+ptm->tm_year,
00079                                    ptm->tm_mon+1,
00080                                    ptm->tm_mday,
00081                                    ptm->tm_hour,
00082                                    ptm->tm_min,
00083                                    (unsigned int)ptm->tm_sec,
00084                                    param_->raw_log_name_asf.c_str());
00085 }
00086 
00087 
00088 void RawlogRecord::observation(mrpt::slam::CObservation2DRangeScanPtr laser, mrpt::slam::CObservationOdometryPtr odometry) {
00089 
00090     pRawLog->addObservationMemoryReference(odometry);
00091     pRawLog->addObservationMemoryReference(laser);
00092 
00093     if(odomLastPose_.empty()) {
00094         odomLastPose_ = odometry->odometry;
00095     }
00096 
00097     mrpt::poses::CPose2D incOdoPose = odometry->odometry - odomLastPose_;
00098 
00099 
00100     mrpt::slam::CActionRobotMovement2D odom_move;
00101     odom_move.timestamp = odometry->timestamp;
00102     odom_move.computeFromOdometry(incOdoPose, param_->motionModelOptions);
00103     mrpt::slam::CActionCollectionPtr action = mrpt::slam::CActionCollection::Create();
00104     action->insert(odom_move);
00105     pRawLogASF->addActionsMemoryReference(action);
00106 
00107     mrpt::slam::CSensoryFramePtr sf = mrpt::slam::CSensoryFrame::Create();
00108     mrpt::slam::CObservationPtr obs = mrpt::slam::CObservationPtr(laser);
00109     sf->insert(obs);
00110     pRawLogASF->addObservationsMemoryReference(sf);
00111 
00112     odomLastPose_ = odometry->odometry;
00113 }


mrpt_rawlog
Author(s):
autogenerated on Tue Aug 5 2014 10:58:08