mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-03 16:27:46 +08:00
rtabmap node: added support for odom covariance with z=0, roll=0 and pitch=0 when Reg/Force3DoF is true. Fixed Rtabmap/ImagesAlreadyRectified and Grid/GlobalMaxNodes not modifed on rtabmap_ros side when parameters are dynamically changed.
This commit is contained in:
+35
-1
@@ -121,6 +121,7 @@ CoreWrapper::CoreWrapper() :
|
|||||||
createIntermediateNodes_(Parameters::defaultRtabmapCreateIntermediateNodes()),
|
createIntermediateNodes_(Parameters::defaultRtabmapCreateIntermediateNodes()),
|
||||||
maxMappingNodes_(Parameters::defaultGridGlobalMaxNodes()),
|
maxMappingNodes_(Parameters::defaultGridGlobalMaxNodes()),
|
||||||
alreadyRectifiedImages_(Parameters::defaultRtabmapImagesAlreadyRectified()),
|
alreadyRectifiedImages_(Parameters::defaultRtabmapImagesAlreadyRectified()),
|
||||||
|
twoDMapping_(Parameters::defaultRegForce3DoF()),
|
||||||
previousStamp_(0),
|
previousStamp_(0),
|
||||||
mbClient_(0)
|
mbClient_(0)
|
||||||
{
|
{
|
||||||
@@ -581,6 +582,10 @@ void CoreWrapper::onInit()
|
|||||||
{
|
{
|
||||||
Parameters::parse(parameters_, Parameters::kRtabmapImagesAlreadyRectified(), alreadyRectifiedImages_);
|
Parameters::parse(parameters_, Parameters::kRtabmapImagesAlreadyRectified(), alreadyRectifiedImages_);
|
||||||
}
|
}
|
||||||
|
if(parameters_.find(Parameters::kRegForce3DoF()) != parameters_.end())
|
||||||
|
{
|
||||||
|
Parameters::parse(parameters_, Parameters::kRegForce3DoF(), twoDMapping_);
|
||||||
|
}
|
||||||
|
|
||||||
if(paused_)
|
if(paused_)
|
||||||
{
|
{
|
||||||
@@ -1227,7 +1232,7 @@ void CoreWrapper::commonDepthCallbackImpl(
|
|||||||
genScanMaxDepth_,
|
genScanMaxDepth_,
|
||||||
genScanMinDepth_);
|
genScanMinDepth_);
|
||||||
genMaxScanPts += depth.cols;
|
genMaxScanPts += depth.cols;
|
||||||
scan = LaserScan(rtabmap::util3d::laserScan2dFromPointCloud(*scanCloud2d), 0, genScanMaxDepth_, LaserScan::kXY);
|
scan = LaserScan(rtabmap::util3d::laserScan2dFromPointCloud(*scanCloud2d), 0, genScanMaxDepth_);
|
||||||
}
|
}
|
||||||
else if(!scan2dMsg.ranges.empty())
|
else if(!scan2dMsg.ranges.empty())
|
||||||
{
|
{
|
||||||
@@ -1856,6 +1861,13 @@ void CoreWrapper::process(
|
|||||||
covariance.at<double>(5,5) = odomDefaultAngVariance_;
|
covariance.at<double>(5,5) = odomDefaultAngVariance_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(twoDMapping_)
|
||||||
|
{
|
||||||
|
// If 2d mapping, make sure all diagonal values of the covariance that even not used are not null.
|
||||||
|
covariance.at<double>(2,2) = covariance.at<double>(2,2)!=0?covariance.at<double>(2,2):1;
|
||||||
|
covariance.at<double>(3,3) = covariance.at<double>(3,3)!=0?covariance.at<double>(3,3):1;
|
||||||
|
covariance.at<double>(4,4) = covariance.at<double>(4,4)!=0?covariance.at<double>(4,4):1;
|
||||||
|
}
|
||||||
|
|
||||||
SensorData interData(cv::Mat(), cv::Mat(), CameraModel(), -1, rtabmap_ros::timestampFromROS(iter->first.header.stamp));
|
SensorData interData(cv::Mat(), cv::Mat(), CameraModel(), -1, rtabmap_ros::timestampFromROS(iter->first.header.stamp));
|
||||||
Transform gt;
|
Transform gt;
|
||||||
@@ -2025,6 +2037,13 @@ void CoreWrapper::process(
|
|||||||
covariance.at<double>(5,5) = odomDefaultAngVariance_;
|
covariance.at<double>(5,5) = odomDefaultAngVariance_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(twoDMapping_)
|
||||||
|
{
|
||||||
|
// If 2d mapping, make sure all diagonal values of the covariance that even not used are not null.
|
||||||
|
covariance.at<double>(2,2) = covariance.at<double>(2,2)!=0?covariance.at<double>(2,2):1;
|
||||||
|
covariance.at<double>(3,3) = covariance.at<double>(3,3)!=0?covariance.at<double>(3,3):1;
|
||||||
|
covariance.at<double>(4,4) = covariance.at<double>(4,4)!=0?covariance.at<double>(4,4):1;
|
||||||
|
}
|
||||||
|
|
||||||
std::map<std::string, float> externalStats;
|
std::map<std::string, float> externalStats;
|
||||||
std::vector<float> odomVelocity;
|
std::vector<float> odomVelocity;
|
||||||
@@ -2653,6 +2672,21 @@ bool CoreWrapper::updateRtabmapCallback(std_srvs::Empty::Request&, std_srvs::Emp
|
|||||||
createIntermediateNodes_ = uStr2Bool(parameters_.at(Parameters::kRtabmapCreateIntermediateNodes()));
|
createIntermediateNodes_ = uStr2Bool(parameters_.at(Parameters::kRtabmapCreateIntermediateNodes()));
|
||||||
NODELET_INFO("Create intermediate nodes = %s", createIntermediateNodes_?"true":"false");
|
NODELET_INFO("Create intermediate nodes = %s", createIntermediateNodes_?"true":"false");
|
||||||
}
|
}
|
||||||
|
if(parameters_.find(Parameters::kGridGlobalMaxNodes()) != parameters_.end())
|
||||||
|
{
|
||||||
|
maxMappingNodes_ = uStr2Int(parameters_.at(Parameters::kGridGlobalMaxNodes()));
|
||||||
|
NODELET_INFO("Max mapping nodes = %d", maxMappingNodes_);
|
||||||
|
}
|
||||||
|
if(parameters_.find(Parameters::kRtabmapImagesAlreadyRectified()) != parameters_.end())
|
||||||
|
{
|
||||||
|
alreadyRectifiedImages_ = uStr2Bool(parameters_.at(Parameters::kRtabmapImagesAlreadyRectified()));
|
||||||
|
NODELET_INFO("Already rectified images = %s", alreadyRectifiedImages_?"true":"false");
|
||||||
|
}
|
||||||
|
if(parameters_.find(Parameters::kRegForce3DoF()) != parameters_.end())
|
||||||
|
{
|
||||||
|
twoDMapping_= uStr2Bool(parameters_.at(Parameters::kRegForce3DoF()));
|
||||||
|
NODELET_INFO("2D mapping = %s", twoDMapping_?"true":"false");
|
||||||
|
}
|
||||||
rtabmap_.parseParameters(parameters_);
|
rtabmap_.parseParameters(parameters_);
|
||||||
mapsManager_.setParameters(parameters_);
|
mapsManager_.setParameters(parameters_);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user