mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-04 00:37:46 +08:00
Updated API for OdomInfo object/conversion.
This commit is contained in:
@@ -166,7 +166,7 @@ int main(int argc, char** argv)
|
||||
rtabmap::CameraInfo cameraInfo;
|
||||
rtabmap::SensorData data = reader.takeImage(&cameraInfo);
|
||||
rtabmap::OdometryInfo odomInfo;
|
||||
odomInfo.covariance = cameraInfo.odomCovariance;
|
||||
odomInfo.reg.covariance = cameraInfo.odomCovariance;
|
||||
rtabmap::OdometryEvent odom(data, cameraInfo.odomPose, odomInfo);
|
||||
double acquisitionTime = timer.ticks();
|
||||
while(ros::ok() && odom.data().id())
|
||||
@@ -494,7 +494,7 @@ int main(int argc, char** argv)
|
||||
timer.restart();
|
||||
cameraInfo = rtabmap::CameraInfo();
|
||||
data = reader.takeImage(&cameraInfo);
|
||||
odomInfo.covariance = cameraInfo.odomCovariance;
|
||||
odomInfo.reg.covariance = cameraInfo.odomCovariance;
|
||||
odom = rtabmap::OdometryEvent(data, cameraInfo.odomPose, odomInfo);
|
||||
acquisitionTime = timer.ticks();
|
||||
}
|
||||
|
||||
+2
-2
@@ -569,7 +569,7 @@ void GuiWrapper::commonDepthCallback(
|
||||
return;
|
||||
}
|
||||
|
||||
info.covariance = covariance;
|
||||
info.reg.covariance = covariance;
|
||||
rtabmap::OdometryEvent odomEvent(
|
||||
rtabmap::SensorData(
|
||||
scan,
|
||||
@@ -724,7 +724,7 @@ void GuiWrapper::commonStereoCallback(
|
||||
return;
|
||||
}
|
||||
|
||||
info.covariance = covariance;
|
||||
info.reg.covariance = covariance;
|
||||
rtabmap::OdometryEvent odomEvent(
|
||||
rtabmap::SensorData(
|
||||
scan,
|
||||
|
||||
+19
-13
@@ -884,10 +884,13 @@ rtabmap::OdometryInfo odomInfoFromROS(const rtabmap_ros::OdomInfo & msg)
|
||||
{
|
||||
rtabmap::OdometryInfo info;
|
||||
info.lost = msg.lost;
|
||||
info.matches = msg.matches;
|
||||
info.inliers = msg.inliers;
|
||||
info.icpInliersRatio = msg.icpInliersRatio;
|
||||
info.covariance = cv::Mat(6,6,CV_64FC1, (void*)msg.covariance.data()).clone();
|
||||
info.reg.matches = msg.matches;
|
||||
info.reg.inliers = msg.inliers;
|
||||
info.reg.icpInliersRatio = msg.icpInliersRatio;
|
||||
info.reg.icpRotation = msg.icpRotation;
|
||||
info.reg.icpTranslation = msg.icpTranslation;
|
||||
info.reg.icpStructuralComplexity = msg.icpStructuralComplexity;
|
||||
info.reg.covariance = cv::Mat(6,6,CV_64FC1, (void*)msg.covariance.data()).clone();
|
||||
info.features = msg.features;
|
||||
info.localMapSize = msg.localMapSize;
|
||||
info.localScanMapSize = msg.localScanMapSize;
|
||||
@@ -910,8 +913,8 @@ rtabmap::OdometryInfo odomInfoFromROS(const rtabmap_ros::OdomInfo & msg)
|
||||
info.words.insert(std::make_pair(msg.wordsKeys[i], keypointFromROS(msg.wordsValues[i])));
|
||||
}
|
||||
|
||||
info.wordMatches = msg.wordMatches;
|
||||
info.wordInliers = msg.wordInliers;
|
||||
info.reg.matchesIDs = msg.wordMatches;
|
||||
info.reg.inliersIDs = msg.wordInliers;
|
||||
|
||||
info.refCorners = points2fFromROS(msg.refCorners);
|
||||
info.newCorners = points2fFromROS(msg.newCorners);
|
||||
@@ -934,12 +937,15 @@ rtabmap::OdometryInfo odomInfoFromROS(const rtabmap_ros::OdomInfo & msg)
|
||||
void odomInfoToROS(const rtabmap::OdometryInfo & info, rtabmap_ros::OdomInfo & msg)
|
||||
{
|
||||
msg.lost = info.lost;
|
||||
msg.matches = info.matches;
|
||||
msg.inliers = info.inliers;
|
||||
msg.icpInliersRatio = info.icpInliersRatio;
|
||||
if(info.covariance.type() == CV_64FC1 && info.covariance.cols == 6 && info.covariance.rows == 6)
|
||||
msg.matches = info.reg.matches;
|
||||
msg.inliers = info.reg.inliers;
|
||||
msg.icpInliersRatio = info.reg.icpInliersRatio;
|
||||
msg.icpRotation = info.reg.icpRotation;
|
||||
msg.icpTranslation = info.reg.icpTranslation;
|
||||
msg.icpStructuralComplexity = info.reg.icpStructuralComplexity;
|
||||
if(info.reg.covariance.type() == CV_64FC1 && info.reg.covariance.cols == 6 && info.reg.covariance.rows == 6)
|
||||
{
|
||||
memcpy(msg.covariance.data(), info.covariance.data, 36*sizeof(double));
|
||||
memcpy(msg.covariance.data(), info.reg.covariance.data, 36*sizeof(double));
|
||||
}
|
||||
msg.features = info.features;
|
||||
msg.localMapSize = info.localMapSize;
|
||||
@@ -960,8 +966,8 @@ void odomInfoToROS(const rtabmap::OdometryInfo & info, rtabmap_ros::OdomInfo & m
|
||||
msg.wordsKeys = uKeys(info.words);
|
||||
keypointsToROS(uValues(info.words), msg.wordsValues);
|
||||
|
||||
msg.wordMatches = info.wordMatches;
|
||||
msg.wordInliers = info.wordInliers;
|
||||
msg.wordMatches = info.reg.matchesIDs;
|
||||
msg.wordInliers = info.reg.inliersIDs;
|
||||
|
||||
points2fToROS(info.refCorners, msg.refCorners);
|
||||
points2fToROS(info.newCorners, msg.newCorners);
|
||||
|
||||
+15
-17
@@ -449,12 +449,12 @@ void OdometryROS::processData(const SensorData & data, const ros::Time & stamp)
|
||||
|
||||
//set covariance
|
||||
// libviso2 uses approximately vel variance * 2
|
||||
odom.pose.covariance.at(0) = info.covariance.at<double>(0,0)*2; // xx
|
||||
odom.pose.covariance.at(7) = info.covariance.at<double>(1,1)*2; // yy
|
||||
odom.pose.covariance.at(14) = info.covariance.at<double>(2,2)*2; // zz
|
||||
odom.pose.covariance.at(21) = info.covariance.at<double>(3,3)*2; // rr
|
||||
odom.pose.covariance.at(28) = info.covariance.at<double>(4,4)*2; // pp
|
||||
odom.pose.covariance.at(35) = info.covariance.at<double>(5,5)*2; // yawyaw
|
||||
odom.pose.covariance.at(0) = info.reg.covariance.at<double>(0,0)*2; // xx
|
||||
odom.pose.covariance.at(7) = info.reg.covariance.at<double>(1,1)*2; // yy
|
||||
odom.pose.covariance.at(14) = info.reg.covariance.at<double>(2,2)*2; // zz
|
||||
odom.pose.covariance.at(21) = info.reg.covariance.at<double>(3,3)*2; // rr
|
||||
odom.pose.covariance.at(28) = info.reg.covariance.at<double>(4,4)*2; // pp
|
||||
odom.pose.covariance.at(35) = info.reg.covariance.at<double>(5,5)*2; // yawyaw
|
||||
|
||||
//set velocity
|
||||
bool setTwist = !odometry_->previousVelocityTransform().isNull();
|
||||
@@ -470,12 +470,12 @@ void OdometryROS::processData(const SensorData & data, const ros::Time & stamp)
|
||||
odom.twist.twist.angular.z = yaw;
|
||||
}
|
||||
|
||||
odom.twist.covariance.at(0) = setTwist?info.covariance.at<double>(0,0):BAD_COVARIANCE; // xx
|
||||
odom.twist.covariance.at(7) = setTwist?info.covariance.at<double>(1,1):BAD_COVARIANCE; // yy
|
||||
odom.twist.covariance.at(14) = setTwist?info.covariance.at<double>(2,2):BAD_COVARIANCE; // zz
|
||||
odom.twist.covariance.at(21) = setTwist?info.covariance.at<double>(3,3):BAD_COVARIANCE; // rr
|
||||
odom.twist.covariance.at(28) = setTwist?info.covariance.at<double>(4,4):BAD_COVARIANCE; // pp
|
||||
odom.twist.covariance.at(35) = setTwist?info.covariance.at<double>(5,5):BAD_COVARIANCE; // yawyaw
|
||||
odom.twist.covariance.at(0) = setTwist?info.reg.covariance.at<double>(0,0):BAD_COVARIANCE; // xx
|
||||
odom.twist.covariance.at(7) = setTwist?info.reg.covariance.at<double>(1,1):BAD_COVARIANCE; // yy
|
||||
odom.twist.covariance.at(14) = setTwist?info.reg.covariance.at<double>(2,2):BAD_COVARIANCE; // zz
|
||||
odom.twist.covariance.at(21) = setTwist?info.reg.covariance.at<double>(3,3):BAD_COVARIANCE; // rr
|
||||
odom.twist.covariance.at(28) = setTwist?info.reg.covariance.at<double>(4,4):BAD_COVARIANCE; // pp
|
||||
odom.twist.covariance.at(35) = setTwist?info.reg.covariance.at<double>(5,5):BAD_COVARIANCE; // yawyaw
|
||||
|
||||
//publish the message
|
||||
odomPub_.publish(odom);
|
||||
@@ -539,8 +539,6 @@ void OdometryROS::processData(const SensorData & data, const ros::Time & stamp)
|
||||
cloudMsg.header.frame_id = odomFrameId_;
|
||||
odomLastFrame_.publish(cloudMsg);
|
||||
}
|
||||
}else{
|
||||
NODELET_ERROR("ERROR, Wrong Type of Odometry, Shouldn't happen");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -626,16 +624,16 @@ void OdometryROS::processData(const SensorData & data, const ros::Time & stamp)
|
||||
{
|
||||
if(icpParams_)
|
||||
{
|
||||
NODELET_INFO( "Odom: quality=%d, ratio=%f, std dev=%fm|%frad, update time=%fs", info.inliers, info.icpInliersRatio, pose.isNull()?0.0f:std::sqrt(info.covariance.at<double>(0,0)), pose.isNull()?0.0f:std::sqrt(info.covariance.at<double>(5,5)), (ros::WallTime::now()-time).toSec());
|
||||
NODELET_INFO( "Odom: quality=%d, ratio=%f, std dev=%fm|%frad, update time=%fs", info.reg.inliers, info.reg.icpInliersRatio, pose.isNull()?0.0f:std::sqrt(info.reg.covariance.at<double>(0,0)), pose.isNull()?0.0f:std::sqrt(info.reg.covariance.at<double>(5,5)), (ros::WallTime::now()-time).toSec());
|
||||
}
|
||||
else
|
||||
{
|
||||
NODELET_INFO( "Odom: quality=%d, std dev=%fm|%frad, update time=%fs", info.inliers, pose.isNull()?0.0f:std::sqrt(info.covariance.at<double>(0,0)), pose.isNull()?0.0f:std::sqrt(info.covariance.at<double>(5,5)), (ros::WallTime::now()-time).toSec());
|
||||
NODELET_INFO( "Odom: quality=%d, std dev=%fm|%frad, update time=%fs", info.reg.inliers, pose.isNull()?0.0f:std::sqrt(info.reg.covariance.at<double>(0,0)), pose.isNull()?0.0f:std::sqrt(info.reg.covariance.at<double>(5,5)), (ros::WallTime::now()-time).toSec());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
NODELET_INFO( "Odom: ratio=%f, std dev=%fm|%frad, update time=%fs", info.icpInliersRatio, pose.isNull()?0.0f:std::sqrt(info.covariance.at<double>(0,0)), pose.isNull()?0.0f:std::sqrt(info.covariance.at<double>(5,5)), (ros::WallTime::now()-time).toSec());
|
||||
NODELET_INFO( "Odom: ratio=%f, std dev=%fm|%frad, update time=%fs", info.reg.icpInliersRatio, pose.isNull()?0.0f:std::sqrt(info.reg.covariance.at<double>(0,0)), pose.isNull()?0.0f:std::sqrt(info.reg.covariance.at<double>(5,5)), (ros::WallTime::now()-time).toSec());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user