mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-10 03:29:49 +08:00
Updated CoreWrapper to directly call rtabmap methods (don't start rtabmap thread)
git-svn-id: http://rtabmap.googlecode.com/svn/trunk/ros-pkg@735 f169173b-cf89-36c8-b27e-44dbe73f0c83
This commit is contained in:
@@ -31,7 +31,6 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CoreWrapper rtabmap(deleteDbOnStart);
|
CoreWrapper rtabmap(deleteDbOnStart);
|
||||||
rtabmap.start();
|
|
||||||
|
|
||||||
ROS_INFO("RTAB-Map started...");
|
ROS_INFO("RTAB-Map started...");
|
||||||
ros::spin();
|
ros::spin();
|
||||||
|
|||||||
+14
-19
@@ -35,7 +35,7 @@ CoreWrapper::CoreWrapper(bool deleteDbOnStart) :
|
|||||||
parametersLoadedPub_ = nh.advertise<std_msgs::Empty>("parameters_loaded", 1);
|
parametersLoadedPub_ = nh.advertise<std_msgs::Empty>("parameters_loaded", 1);
|
||||||
|
|
||||||
rtabmap_ = new Rtabmap();
|
rtabmap_ = new Rtabmap();
|
||||||
UEventsManager::addHandler(rtabmap_);
|
|
||||||
loadNodeParameters(UDirectory::homeDir()+"/.rtabmap/rtabmap.ini");
|
loadNodeParameters(UDirectory::homeDir()+"/.rtabmap/rtabmap.ini");
|
||||||
|
|
||||||
rtabmap_->init(UDirectory::homeDir()+"/.rtabmap/rtabmap.ini", deleteDbOnStart);
|
rtabmap_->init(UDirectory::homeDir()+"/.rtabmap/rtabmap.ini", deleteDbOnStart);
|
||||||
@@ -60,11 +60,6 @@ CoreWrapper::~CoreWrapper()
|
|||||||
delete rtabmap_;
|
delete rtabmap_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CoreWrapper::start()
|
|
||||||
{
|
|
||||||
rtabmap_->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CoreWrapper::loadNodeParameters(const std::string & configFile)
|
void CoreWrapper::loadNodeParameters(const std::string & configFile)
|
||||||
{
|
{
|
||||||
ROS_INFO("Loading parameters from %s", configFile.c_str());
|
ROS_INFO("Loading parameters from %s", configFile.c_str());
|
||||||
@@ -86,11 +81,11 @@ void CoreWrapper::loadNodeParameters(const std::string & configFile)
|
|||||||
|
|
||||||
void CoreWrapper::saveNodeParameters(const std::string & configFile)
|
void CoreWrapper::saveNodeParameters(const std::string & configFile)
|
||||||
{
|
{
|
||||||
ROS_INFO("Saving parameters to %s", configFile.c_str());
|
printf("Saving parameters to %s\n", configFile.c_str());
|
||||||
|
|
||||||
if(!UFile::exists(configFile.c_str()))
|
if(!UFile::exists(configFile.c_str()))
|
||||||
{
|
{
|
||||||
ROS_WARN("Config file doesn't exist, a new one will be created.");
|
printf("Config file doesn't exist, a new one will be created.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
ParametersMap parameters = Parameters::getDefaultParameters();
|
ParametersMap parameters = Parameters::getDefaultParameters();
|
||||||
@@ -106,41 +101,41 @@ void CoreWrapper::saveNodeParameters(const std::string & configFile)
|
|||||||
|
|
||||||
Rtabmap::writeParameters(configFile.c_str(), parameters);
|
Rtabmap::writeParameters(configFile.c_str(), parameters);
|
||||||
|
|
||||||
std::string databasePath = parameters.at(Parameters::kRtabmapWorkingDirectory())+"/LTM.db";
|
std::string databasePath = parameters.at(Parameters::kRtabmapWorkingDirectory())+"LTM.db";
|
||||||
ROS_INFO("Database/long-term memory (%lu MB) is located at %s/LTM.db", UFile::length(databasePath)/1000000, databasePath.c_str());
|
printf("Saving database/long-term memory... (located at %s)\n", databasePath.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CoreWrapper::imageReceivedCallback(const sensor_msgs::ImageConstPtr & msg)
|
void CoreWrapper::imageReceivedCallback(const sensor_msgs::ImageConstPtr & msg)
|
||||||
{
|
{
|
||||||
if(msg->data.size())
|
if(msg->data.size())
|
||||||
{
|
{
|
||||||
ROS_INFO("Received image.");
|
//ROS_INFO("Received image.");
|
||||||
cv_bridge::CvImageConstPtr ptr = cv_bridge::toCvShare(msg);
|
cv_bridge::CvImageConstPtr ptr = cv_bridge::toCvShare(msg);
|
||||||
UEventsManager::post(new CameraEvent(ptr->image.clone()));
|
rtabmap_->process(ptr->image.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CoreWrapper::resetMemoryCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&)
|
bool CoreWrapper::resetMemoryCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&)
|
||||||
{
|
{
|
||||||
UEventsManager::post(new RtabmapEventCmd(RtabmapEventCmd::kCmdResetMemory));
|
rtabmap_->resetMemory();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CoreWrapper::dumpMemoryCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&)
|
bool CoreWrapper::dumpMemoryCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&)
|
||||||
{
|
{
|
||||||
UEventsManager::post(new RtabmapEventCmd(RtabmapEventCmd::kCmdDumpMemory));
|
rtabmap_->dumpData();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CoreWrapper::deleteMemoryCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&)
|
bool CoreWrapper::deleteMemoryCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&)
|
||||||
{
|
{
|
||||||
UEventsManager::post(new RtabmapEventCmd(RtabmapEventCmd::kCmdDeleteMemory));
|
rtabmap_->resetMemory(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CoreWrapper::dumpPredictionCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&)
|
bool CoreWrapper::dumpPredictionCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&)
|
||||||
{
|
{
|
||||||
UEventsManager::post(new RtabmapEventCmd(RtabmapEventCmd::kCmdDumpPrediction));
|
rtabmap_->dumpPrediction();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,7 +152,7 @@ void CoreWrapper::parametersUpdatedCallback(const std_msgs::EmptyConstPtr & msg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ROS_INFO("Updating parameters");
|
ROS_INFO("Updating parameters");
|
||||||
UEventsManager::post(new ParamEvent(parameters));
|
rtabmap_->updateParameters(parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CoreWrapper::handleEvent(UEvent * anEvent)
|
void CoreWrapper::handleEvent(UEvent * anEvent)
|
||||||
@@ -171,7 +166,7 @@ void CoreWrapper::handleEvent(UEvent * anEvent)
|
|||||||
|
|
||||||
if(infoPub_.getNumSubscribers())
|
if(infoPub_.getNumSubscribers())
|
||||||
{
|
{
|
||||||
ROS_INFO("Sending RtabmapInfo msg (last_id=%d)...", stat.refImageId());
|
//ROS_INFO("Sending RtabmapInfo msg (last_id=%d)...", stat.refImageId());
|
||||||
rtabmap::InfoPtr msg(new rtabmap::Info);
|
rtabmap::InfoPtr msg(new rtabmap::Info);
|
||||||
msg->refId = stat.refImageId();
|
msg->refId = stat.refImageId();
|
||||||
msg->loopClosureId = stat.loopClosureId();
|
msg->loopClosureId = stat.loopClosureId();
|
||||||
@@ -180,7 +175,7 @@ void CoreWrapper::handleEvent(UEvent * anEvent)
|
|||||||
|
|
||||||
if(infoPubEx_.getNumSubscribers())
|
if(infoPubEx_.getNumSubscribers())
|
||||||
{
|
{
|
||||||
ROS_INFO("Sending infoEx msg (last_id=%d)...", stat.refImageId());
|
//ROS_INFO("Sending infoEx msg (last_id=%d)...", stat.refImageId());
|
||||||
rtabmap::InfoExPtr msg(new rtabmap::InfoEx);
|
rtabmap::InfoExPtr msg(new rtabmap::InfoEx);
|
||||||
msg->refId = stat.refImageId();
|
msg->refId = stat.refImageId();
|
||||||
msg->loopClosureId = stat.loopClosureId();
|
msg->loopClosureId = stat.loopClosureId();
|
||||||
|
|||||||
@@ -30,8 +30,6 @@ public:
|
|||||||
CoreWrapper(bool deleteDbOnStart = false);
|
CoreWrapper(bool deleteDbOnStart = false);
|
||||||
virtual ~CoreWrapper();
|
virtual ~CoreWrapper();
|
||||||
|
|
||||||
void start();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void imageReceivedCallback(const sensor_msgs::ImageConstPtr & msg);
|
void imageReceivedCallback(const sensor_msgs::ImageConstPtr & msg);
|
||||||
void twistCallback(const geometry_msgs::TwistConstPtr & msg);
|
void twistCallback(const geometry_msgs::TwistConstPtr & msg);
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ int GuiWrapper::exec()
|
|||||||
|
|
||||||
void GuiWrapper::infoExReceivedCallback(const rtabmap::InfoExConstPtr & msg)
|
void GuiWrapper::infoExReceivedCallback(const rtabmap::InfoExConstPtr & msg)
|
||||||
{
|
{
|
||||||
ROS_INFO("RTAB-Map info ex received!");
|
//ROS_INFO("RTAB-Map info ex received!");
|
||||||
|
|
||||||
// Map from ROS struct to rtabmap struct
|
// Map from ROS struct to rtabmap struct
|
||||||
rtabmap::Statistics * stat = new rtabmap::Statistics();
|
rtabmap::Statistics * stat = new rtabmap::Statistics();
|
||||||
@@ -131,7 +131,7 @@ void GuiWrapper::infoExReceivedCallback(const rtabmap::InfoExConstPtr & msg)
|
|||||||
stat->addStatistic(msg->statsKeys.at(i), msg->statsValues.at(i));
|
stat->addStatistic(msg->statsKeys.at(i), msg->statsValues.at(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
ROS_INFO("Publishing statistics...");
|
//ROS_INFO("Publishing statistics...");
|
||||||
UEventsManager::post(new rtabmap::RtabmapEvent(&stat));
|
UEventsManager::post(new rtabmap::RtabmapEvent(&stat));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user