Fixed build for upstream 0.16.1

This commit is contained in:
matlabbe
2018-02-16 20:00:32 -05:00
parent e3b2843d6f
commit 04b9abd1b9
12 changed files with 39 additions and 43 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ find_package(rviz)
## System dependencies are found with CMake's conventions ## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system) # find_package(Boost REQUIRED COMPONENTS system)
find_package(RTABMap 0.16.0 REQUIRED) find_package(RTABMap 0.16.1 REQUIRED)
find_package(OpenCV REQUIRED) find_package(OpenCV REQUIRED)
+1
View File
@@ -38,6 +38,7 @@ geometry_msgs/Transform[] localTransform
uint8[] laserScan uint8[] laserScan
int32 laserScanMaxPts int32 laserScanMaxPts
float32 laserScanMaxRange float32 laserScanMaxRange
int32 laserScanFormat
geometry_msgs/Transform laserScanLocalTransform geometry_msgs/Transform laserScanLocalTransform
# compressed user data # compressed user data
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<package> <package>
<name>rtabmap_ros</name> <name>rtabmap_ros</name>
<version>0.16.0</version> <version>0.16.1</version>
<description>RTAB-Map's ros-pkg. RTAB-Map is a RGB-D SLAM approach with real-time constraints.</description> <description>RTAB-Map's ros-pkg. RTAB-Map is a RGB-D SLAM approach with real-time constraints.</description>
<maintainer email="[email protected]">Mathieu Labbe</maintainer> <maintainer email="[email protected]">Mathieu Labbe</maintainer>
<author>Mathieu Labbe</author> <author>Mathieu Labbe</author>
+5 -7
View File
@@ -1033,7 +1033,7 @@ void CoreWrapper::commonDepthCallbackImpl(
if(rtabmap_.getMemory() && uStrNumCmp(rtabmap_.getMemory()->getDatabaseVersion(), "0.11.10") < 0) if(rtabmap_.getMemory() && uStrNumCmp(rtabmap_.getMemory()->getDatabaseVersion(), "0.11.10") < 0)
{ {
// backward compatibility, project 2D scan in /base_link frame // backward compatibility, project 2D scan in /base_link frame
scan = util3d::transformLaserScan(scan, scanLocalTransform); scan = util3d::transformLaserScan(LaserScan::backwardCompatibility(scan), scanLocalTransform).data();
scanLocalTransform = Transform::getIdentity(); scanLocalTransform = Transform::getIdentity();
} }
} }
@@ -1076,8 +1076,7 @@ void CoreWrapper::commonDepthCallbackImpl(
userData_ = cv::Mat(); userData_ = cv::Mat();
} }
SensorData data(scan, SensorData data(LaserScan::backwardCompatibility(scan,
LaserScanInfo(
scan2dMsg.get() != 0?(int)scan2dMsg->ranges.size():(genScan_?genMaxScanPts:scan3dMsg.get() != 0?scanCloudMaxPoints_:0), scan2dMsg.get() != 0?(int)scan2dMsg->ranges.size():(genScan_?genMaxScanPts:scan3dMsg.get() != 0?scanCloudMaxPoints_:0),
scan2dMsg.get() != 0?scan2dMsg->range_max:(genScan_?genScanMaxDepth_:0.0f), scan2dMsg.get() != 0?scan2dMsg->range_max:(genScan_?genScanMaxDepth_:0.0f),
scanLocalTransform), scanLocalTransform),
@@ -1280,7 +1279,7 @@ void CoreWrapper::commonStereoCallback(
if(rtabmap_.getMemory() && uStrNumCmp(rtabmap_.getMemory()->getDatabaseVersion(), "0.11.10") < 0) if(rtabmap_.getMemory() && uStrNumCmp(rtabmap_.getMemory()->getDatabaseVersion(), "0.11.10") < 0)
{ {
// backward compatibility, project 2D scan in /base_link frame // backward compatibility, project 2D scan in /base_link frame
scan = util3d::transformLaserScan(scan, scanLocalTransform); scan = util3d::transformLaserScan(LaserScan::backwardCompatibility(scan), scanLocalTransform).data();
scanLocalTransform = Transform::getIdentity(); scanLocalTransform = Transform::getIdentity();
} }
} }
@@ -1323,8 +1322,7 @@ void CoreWrapper::commonStereoCallback(
userData_ = cv::Mat(); userData_ = cv::Mat();
} }
SensorData data(scan, SensorData data(LaserScan::backwardCompatibility(scan,
LaserScanInfo(
scan2dMsg.get() != 0?(int)scan2dMsg->ranges.size():scan3dMsg.get() != 0?scanCloudMaxPoints_:0, scan2dMsg.get() != 0?(int)scan2dMsg->ranges.size():scan3dMsg.get() != 0?scanCloudMaxPoints_:0,
scan2dMsg.get() != 0?scan2dMsg->range_max:0, scan2dMsg.get() != 0?scan2dMsg->range_max:0,
scanLocalTransform), scanLocalTransform),
@@ -1451,7 +1449,7 @@ void CoreWrapper::process(
rtabmap_.getMemory()->getLastSignatureId() != filteredPoses.rbegin()->first || rtabmap_.getMemory()->getLastSignatureId() != filteredPoses.rbegin()->first ||
rtabmap_.getMemory()->getLastWorkingSignature() == 0 || rtabmap_.getMemory()->getLastWorkingSignature() == 0 ||
rtabmap_.getMemory()->getLastWorkingSignature()->sensorData().gridCellSize() == 0 || rtabmap_.getMemory()->getLastWorkingSignature()->sensorData().gridCellSize() == 0 ||
(!mapsManager_.getOccupancyGrid()->isGridFromDepth() && data.laserScanRaw().channels() == 2)) // 2d laser scan would fill empty space for latest data (!mapsManager_.getOccupancyGrid()->isGridFromDepth() && data.laserScanRaw().is2d())) // 2d laser scan would fill empty space for latest data
{ {
SensorData tmpData = data; SensorData tmpData = data;
tmpData.setId(-1); tmpData.setId(-1);
+6 -8
View File
@@ -262,7 +262,7 @@ int main(int argc, char** argv)
camInfoB.height = odom.data().depthOrRightRaw().rows; camInfoB.height = odom.data().depthOrRightRaw().rows;
camInfoB.width = odom.data().depthOrRightRaw().cols; camInfoB.width = odom.data().depthOrRightRaw().cols;
if(!odom.data().laserScanRaw().empty()) if(!odom.data().laserScanRaw().isEmpty())
{ {
if(scanPub.getTopic().empty()) scanPub = nh.advertise<sensor_msgs::LaserScan>("scan", 1); if(scanPub.getTopic().empty()) scanPub = nh.advertise<sensor_msgs::LaserScan>("scan", 1);
} }
@@ -412,7 +412,7 @@ int main(int argc, char** argv)
rightCamInfoPub.publish(camInfoB); rightCamInfoPub.publish(camInfoB);
} }
if(scanPub.getNumSubscribers() && !odom.data().laserScanRaw().empty()) if(scanPub.getNumSubscribers() && !odom.data().laserScanRaw().isEmpty())
{ {
//inspired from pointcloud_to_laserscan package //inspired from pointcloud_to_laserscan package
sensor_msgs::LaserScan msg; sensor_msgs::LaserScan msg;
@@ -430,16 +430,14 @@ int main(int argc, char** argv)
uint32_t rangesSize = std::ceil((msg.angle_max - msg.angle_min) / msg.angle_increment); uint32_t rangesSize = std::ceil((msg.angle_max - msg.angle_min) / msg.angle_increment);
msg.ranges.assign(rangesSize, 0.0); msg.ranges.assign(rangesSize, 0.0);
const cv::Mat & scan = odom.data().laserScanRaw(); const cv::Mat & scan = odom.data().laserScanRaw().data();
UASSERT(scan.type() == CV_32FC2 || scan.type() == CV_32FC3);
UASSERT(scan.rows == 1);
for (int i=0; i<scan.cols; ++i) for (int i=0; i<scan.cols; ++i)
{ {
cv::Vec2f pos = scan.at<cv::Vec2f>(i); const float * ptr = scan.ptr<float>(0,i);
double range = hypot(pos[0], pos[1]); double range = hypot(ptr[0], ptr[1]);
if (range >= scanRangeMin && range <=scanRangeMax) if (range >= scanRangeMin && range <=scanRangeMax)
{ {
double angle = atan2(pos[1], pos[0]); double angle = atan2(ptr[1], ptr[0]);
if (angle >= msg.angle_min && angle <= msg.angle_max) if (angle >= msg.angle_min && angle <= msg.angle_max)
{ {
int index = (angle - msg.angle_min) / msg.angle_increment; int index = (angle - msg.angle_min) / msg.angle_increment;
+2 -4
View File
@@ -572,8 +572,7 @@ void GuiWrapper::commonDepthCallback(
info.reg.covariance = covariance; info.reg.covariance = covariance;
rtabmap::OdometryEvent odomEvent( rtabmap::OdometryEvent odomEvent(
rtabmap::SensorData( rtabmap::SensorData(
scan, LaserScan::backwardCompatibility(scan,
LaserScanInfo(
scan2dMsg.get()?(int)scan2dMsg->ranges.size():0, scan2dMsg.get()?(int)scan2dMsg->ranges.size():0,
scan2dMsg.get()?(int)scan2dMsg->range_max:0, scan2dMsg.get()?(int)scan2dMsg->range_max:0,
scanLocalTransform), scanLocalTransform),
@@ -728,8 +727,7 @@ void GuiWrapper::commonStereoCallback(
info.reg.covariance = covariance; info.reg.covariance = covariance;
rtabmap::OdometryEvent odomEvent( rtabmap::OdometryEvent odomEvent(
rtabmap::SensorData( rtabmap::SensorData(
scan, LaserScan::backwardCompatibility(scan,
LaserScanInfo(
scan2dMsg.get()?(int)scan2dMsg->ranges.size():0, scan2dMsg.get()?(int)scan2dMsg->ranges.size():0,
scan2dMsg.get()?(int)scan2dMsg->range_max:0, scan2dMsg.get()?(int)scan2dMsg->range_max:0,
scanLocalTransform), scanLocalTransform),
+6 -4
View File
@@ -468,7 +468,8 @@ std::map<int, rtabmap::Transform> MapsManager::updateMapCaches(
cv::Mat ground, obstacles, emptyCells; cv::Mat ground, obstacles, emptyCells;
if(iter->first > 0) if(iter->first > 0)
{ {
cv::Mat rgb, depth, scan; cv::Mat rgb, depth;
LaserScan scan;
bool generateGrid = data.gridCellSize() == 0.0f; bool generateGrid = data.gridCellSize() == 0.0f;
static bool warningShown = false; static bool warningShown = false;
if(occupancySavedInDB && generateGrid && !warningShown) if(occupancySavedInDB && generateGrid && !warningShown)
@@ -522,7 +523,8 @@ std::map<int, rtabmap::Transform> MapsManager::updateMapCaches(
occupancyGrid_->parseParameters(parameters); occupancyGrid_->parseParameters(parameters);
} }
cv::Mat rgb, depth, scan; cv::Mat rgb, depth;
LaserScan scan;
bool generateGrid = data.gridCellSize() == 0.0f || (unknownSpaceFilled != negativeScanEmptyRayTracing_ && negativeScanEmptyRayTracing_); bool generateGrid = data.gridCellSize() == 0.0f || (unknownSpaceFilled != negativeScanEmptyRayTracing_ && negativeScanEmptyRayTracing_);
data.uncompressData( data.uncompressData(
occupancyGrid_->isGridFromDepth() && generateGrid?&rgb:0, occupancyGrid_->isGridFromDepth() && generateGrid?&rgb:0,
@@ -892,7 +894,7 @@ void MapsManager::publishMaps(
} }
if(jter!=gridMaps_.end() && jter->second.first.first.cols) if(jter!=gridMaps_.end() && jter->second.first.first.cols)
{ {
pcl::PointCloud<pcl::PointXYZRGB>::Ptr transformed = util3d::laserScanToPointCloudRGB(jter->second.first.first, iter->second, 0, 255, 0); pcl::PointCloud<pcl::PointXYZRGB>::Ptr transformed = util3d::laserScanToPointCloudRGB(LaserScan::backwardCompatibility(jter->second.first.first), iter->second, 0, 255, 0);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr subtractedCloud = transformed; pcl::PointCloud<pcl::PointXYZRGB>::Ptr subtractedCloud = transformed;
if(cloudSubtractFiltering_) if(cloudSubtractFiltering_)
{ {
@@ -939,7 +941,7 @@ void MapsManager::publishMaps(
} }
if(jter!=gridMaps_.end() && jter->second.first.second.cols) if(jter!=gridMaps_.end() && jter->second.first.second.cols)
{ {
pcl::PointCloud<pcl::PointXYZRGB>::Ptr transformed = util3d::laserScanToPointCloudRGB(jter->second.first.second, iter->second, 255, 0, 0); pcl::PointCloud<pcl::PointXYZRGB>::Ptr transformed = util3d::laserScanToPointCloudRGB(LaserScan::backwardCompatibility(jter->second.first.second), iter->second, 255, 0, 0);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr subtractedCloud = transformed; pcl::PointCloud<pcl::PointXYZRGB>::Ptr subtractedCloud = transformed;
if(cloudSubtractFiltering_) if(cloudSubtractFiltering_)
{ {
+11 -10
View File
@@ -717,10 +717,10 @@ rtabmap::Signature nodeDataFromROS(const rtabmap_ros::NodeData & msg)
transformFromPoseMsg(msg.groundTruthPose), transformFromPoseMsg(msg.groundTruthPose),
stereoModel.isValidForProjection()? stereoModel.isValidForProjection()?
rtabmap::SensorData( rtabmap::SensorData(
compressedMatFromBytes(msg.laserScan), rtabmap::LaserScan(compressedMatFromBytes(msg.laserScan),
rtabmap::LaserScanInfo(
msg.laserScanMaxPts, msg.laserScanMaxPts,
msg.laserScanMaxRange, msg.laserScanMaxRange,
(rtabmap::LaserScan::Format)msg.laserScanFormat,
transformFromGeometryMsg(msg.laserScanLocalTransform)), transformFromGeometryMsg(msg.laserScanLocalTransform)),
compressedMatFromBytes(msg.image), compressedMatFromBytes(msg.image),
compressedMatFromBytes(msg.depth), compressedMatFromBytes(msg.depth),
@@ -729,10 +729,10 @@ rtabmap::Signature nodeDataFromROS(const rtabmap_ros::NodeData & msg)
msg.stamp, msg.stamp,
compressedMatFromBytes(msg.userData)): compressedMatFromBytes(msg.userData)):
rtabmap::SensorData( rtabmap::SensorData(
compressedMatFromBytes(msg.laserScan), rtabmap::LaserScan(compressedMatFromBytes(msg.laserScan),
rtabmap::LaserScanInfo(
msg.laserScanMaxPts, msg.laserScanMaxPts,
msg.laserScanMaxRange, msg.laserScanMaxRange,
(rtabmap::LaserScan::Format)msg.laserScanFormat,
transformFromGeometryMsg(msg.laserScanLocalTransform)), transformFromGeometryMsg(msg.laserScanLocalTransform)),
compressedMatFromBytes(msg.image), compressedMatFromBytes(msg.image),
compressedMatFromBytes(msg.depth), compressedMatFromBytes(msg.depth),
@@ -770,16 +770,17 @@ void nodeDataToROS(const rtabmap::Signature & signature, rtabmap_ros::NodeData &
msg.gps.bearing = signature.sensorData().gps().bearing(); msg.gps.bearing = signature.sensorData().gps().bearing();
compressedMatToBytes(signature.sensorData().imageCompressed(), msg.image); compressedMatToBytes(signature.sensorData().imageCompressed(), msg.image);
compressedMatToBytes(signature.sensorData().depthOrRightCompressed(), msg.depth); compressedMatToBytes(signature.sensorData().depthOrRightCompressed(), msg.depth);
compressedMatToBytes(signature.sensorData().laserScanCompressed(), msg.laserScan); compressedMatToBytes(signature.sensorData().laserScanCompressed().data(), msg.laserScan);
compressedMatToBytes(signature.sensorData().userDataCompressed(), msg.userData); compressedMatToBytes(signature.sensorData().userDataCompressed(), msg.userData);
compressedMatToBytes(signature.sensorData().gridGroundCellsCompressed(), msg.grid_ground); compressedMatToBytes(signature.sensorData().gridGroundCellsCompressed(), msg.grid_ground);
compressedMatToBytes(signature.sensorData().gridObstacleCellsCompressed(), msg.grid_obstacles); compressedMatToBytes(signature.sensorData().gridObstacleCellsCompressed(), msg.grid_obstacles);
compressedMatToBytes(signature.sensorData().gridEmptyCellsCompressed(), msg.grid_empty_cells); compressedMatToBytes(signature.sensorData().gridEmptyCellsCompressed(), msg.grid_empty_cells);
point3fToROS(signature.sensorData().gridViewPoint(), msg.grid_view_point); point3fToROS(signature.sensorData().gridViewPoint(), msg.grid_view_point);
msg.grid_cell_size = signature.sensorData().gridCellSize(); msg.grid_cell_size = signature.sensorData().gridCellSize();
msg.laserScanMaxPts = signature.sensorData().laserScanInfo().maxPoints(); msg.laserScanMaxPts = signature.sensorData().laserScanCompressed().maxPoints();
msg.laserScanMaxRange = signature.sensorData().laserScanInfo().maxRange(); msg.laserScanMaxRange = signature.sensorData().laserScanCompressed().maxRange();
transformToGeometryMsg(signature.sensorData().laserScanInfo().localTransform(), msg.laserScanLocalTransform); msg.laserScanFormat = signature.sensorData().laserScanCompressed().format();
transformToGeometryMsg(signature.sensorData().laserScanCompressed().localTransform(), msg.laserScanLocalTransform);
msg.baseline = 0; msg.baseline = 0;
if(signature.sensorData().cameraModels().size()) if(signature.sensorData().cameraModels().size())
{ {
@@ -958,7 +959,7 @@ rtabmap::OdometryInfo odomInfoFromROS(const rtabmap_ros::OdomInfo & msg)
info.localMap.insert(std::make_pair(msg.localMapKeys[i], point3fFromROS(msg.localMapValues[i]))); info.localMap.insert(std::make_pair(msg.localMapKeys[i], point3fFromROS(msg.localMapValues[i])));
} }
info.localScanMap = rtabmap::uncompressData(msg.localScanMap); info.localScanMap = rtabmap::LaserScan::backwardCompatibility(rtabmap::uncompressData(msg.localScanMap));
return info; return info;
} }
@@ -1009,7 +1010,7 @@ void odomInfoToROS(const rtabmap::OdometryInfo & info, rtabmap_ros::OdomInfo & m
msg.localMapKeys = uKeys(info.localMap); msg.localMapKeys = uKeys(info.localMap);
points3fToROS(uValues(info.localMap), msg.localMapValues); points3fToROS(uValues(info.localMap), msg.localMapValues);
msg.localScanMap = rtabmap::compressData(info.localScanMap); msg.localScanMap = rtabmap::compressData(info.localScanMap.data());
} }
cv::Mat userDataFromROS(const rtabmap_ros::UserData & dataMsg) cv::Mat userDataFromROS(const rtabmap_ros::UserData & dataMsg)
+2 -2
View File
@@ -595,10 +595,10 @@ void OdometryROS::processData(const SensorData & data, const ros::Time & stamp)
} }
} }
if(odomLocalScanMap_.getNumSubscribers() && !info.localScanMap.empty()) if(odomLocalScanMap_.getNumSubscribers() && !info.localScanMap.isEmpty())
{ {
sensor_msgs::PointCloud2 cloudMsg; sensor_msgs::PointCloud2 cloudMsg;
if(info.localScanMap.channels() >= 5) if(info.localScanMap.hasNormals())
{ {
pcl::PointCloud<pcl::PointNormal>::Ptr cloud = util3d::laserScanToPointCloudNormal(info.localScanMap); pcl::PointCloud<pcl::PointNormal>::Ptr cloud = util3d::laserScanToPointCloudNormal(info.localScanMap);
pcl::toROSMsg(*cloud, cloudMsg); pcl::toROSMsg(*cloud, cloudMsg);
+1
View File
@@ -30,6 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <ros/subscriber.h> #include <ros/subscriber.h>
#include <rtabmap/utilite/UStl.h> #include <rtabmap/utilite/UStl.h>
#include <rtabmap/utilite/ULogger.h>
#include <rtabmap/core/util3d_transforms.h> #include <rtabmap/core/util3d_transforms.h>
#include <rtabmap_ros/MapData.h> #include <rtabmap_ros/MapData.h>
+2 -4
View File
@@ -232,8 +232,7 @@ private:
} }
rtabmap::SensorData data( rtabmap::SensorData data(
scan, LaserScan::backwardCompatibility(scan, maxLaserScans, scanMsg->range_max, localScanTransform),
LaserScanInfo(maxLaserScans, scanMsg->range_max, localScanTransform),
cv::Mat(), cv::Mat(),
cv::Mat(), cv::Mat(),
CameraModel(), CameraModel(),
@@ -321,8 +320,7 @@ private:
} }
rtabmap::SensorData data( rtabmap::SensorData data(
scan, LaserScan::backwardCompatibility(scan, maxLaserScans, 0, localScanTransform),
LaserScanInfo(maxLaserScans, 0, localScanTransform),
cv::Mat(), cv::Mat(),
cv::Mat(), cv::Mat(),
CameraModel(), CameraModel(),
+1 -2
View File
@@ -402,8 +402,7 @@ private:
} }
rtabmap::SensorData data( rtabmap::SensorData data(
scan, LaserScan::backwardCompatibility(scan,
LaserScanInfo(
scanMsg.get() != 0 || cloudMsg.get() != 0?maxLaserScans:0, scanMsg.get() != 0 || cloudMsg.get() != 0?maxLaserScans:0,
scanMsg.get() != 0?scanMsg->range_max:0, scanMsg.get() != 0?scanMsg->range_max:0,
localScanTransform), localScanTransform),