diff --git a/CMakeLists.txt b/CMakeLists.txt
index 92fffb40..6623dcb4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,6 +19,8 @@ find_package(octomap_ros)
# find_package(Boost REQUIRED COMPONENTS system)
find_package(RTABMap 0.10.0 REQUIRED)
+find_package(OpenCV REQUIRED)
+
#Qt stuff
FIND_PACKAGE(Qt4 COMPONENTS QtCore QtGui REQUIRED)
INCLUDE(${QT_USE_FILE})
@@ -101,11 +103,13 @@ catkin_package(
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/include
${RTABMap_INCLUDE_DIRS}
+ ${OpenCV_INCLUDE_DIRS}
${catkin_INCLUDE_DIRS}
)
# libraries
SET(Libraries
+ ${OpenCV_LIBRARIES}
${catkin_LIBRARIES}
${RTABMap_LIBRARIES}
)
diff --git a/launch/demo/demo_turtlebot_mapping.launch b/launch/demo/demo_turtlebot_mapping.launch
index f8603ec2..8574a9de 100644
--- a/launch/demo/demo_turtlebot_mapping.launch
+++ b/launch/demo/demo_turtlebot_mapping.launch
@@ -25,6 +25,7 @@
+
@@ -48,8 +49,8 @@
-
-
+
+
@@ -69,7 +70,7 @@
-
+
@@ -79,6 +80,11 @@
+
+
+
+
+
diff --git a/launch/rgbd_mapping_kinect2.launch b/launch/rgbd_mapping_kinect2.launch
index efa45765..968a6d76 100644
--- a/launch/rgbd_mapping_kinect2.launch
+++ b/launch/rgbd_mapping_kinect2.launch
@@ -5,19 +5,21 @@
Install Kinect2 : Follow ALL directives at https://github.com/code-iai/iai_kinect2
Make sure it is calibrated!
Run:
+ $ roslaunch kinect2_bridge kinect2_bridge.launch publish_tf:=true
$ roslaunch rtabmap_ros rgbd_mapping_kinect2.launch
- $ rosrun kinect2_bridge kinect2_bridge _publish_tf:=true
-
- Prefixes:
- sd: rgb_lowres / depth_lowres
- hd: rgb_rect / depth_highres
- ir: ir_rect / depth_rect
-->
-
-
+
+
+
-
+
+
+
+
+
+
@@ -38,7 +40,7 @@
-
+
@@ -49,9 +51,9 @@
-
-
-
+
+
+
@@ -74,9 +76,9 @@
-
-
-
+
+
+
@@ -91,9 +93,9 @@
-
-
-
+
+
+
@@ -103,9 +105,9 @@
-
-
-
+
+
+
diff --git a/src/CoreWrapper.cpp b/src/CoreWrapper.cpp
index 16d63087..0bb12388 100644
--- a/src/CoreWrapper.cpp
+++ b/src/CoreWrapper.cpp
@@ -752,7 +752,8 @@ void CoreWrapper::commonDepthCallback(
std::vector cameraModels;
for(unsigned int i=0; iencoding.compare(sensor_msgs::image_encodings::MONO8) ==0 ||
+ if(!(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::TYPE_8UC1) == 0 ||
+ imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO8) ==0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO16) ==0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::BGR8) == 0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::RGB8) == 0) ||
@@ -786,7 +787,11 @@ void CoreWrapper::commonDepthCallback(
}
cv_bridge::CvImageConstPtr ptrImage;
- if(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO8) == 0 ||
+ if(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::TYPE_8UC1)==0)
+ {
+ ptrImage = cv_bridge::toCvShare(imageMsgs[i]);
+ }
+ else if(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO8) == 0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO16) == 0)
{
ptrImage = cv_bridge::toCvShare(imageMsgs[i], "mono8");
diff --git a/src/GuiWrapper.cpp b/src/GuiWrapper.cpp
index 54a3df51..6075646e 100644
--- a/src/GuiWrapper.cpp
+++ b/src/GuiWrapper.cpp
@@ -500,7 +500,8 @@ void GuiWrapper::commonDepthCallback(
std::vector cameraModels;
for(unsigned int i=0; iencoding.compare(sensor_msgs::image_encodings::MONO8) ==0 ||
+ if(!(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::TYPE_8UC1) ==0 ||
+ imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO8) ==0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO16) ==0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::BGR8) == 0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::RGB8) == 0) ||
@@ -534,7 +535,11 @@ void GuiWrapper::commonDepthCallback(
}
cv_bridge::CvImageConstPtr ptrImage;
- if(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO8) == 0 ||
+ if(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::TYPE_8UC1)==0)
+ {
+ ptrImage = cv_bridge::toCvShare(imageMsgs[i]);
+ }
+ else if(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO8) == 0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO16) == 0)
{
ptrImage = cv_bridge::toCvShare(imageMsgs[i], "mono8");
diff --git a/src/RGBDOdometryNode.cpp b/src/RGBDOdometryNode.cpp
index e1c23506..0239f91a 100644
--- a/src/RGBDOdometryNode.cpp
+++ b/src/RGBDOdometryNode.cpp
@@ -163,7 +163,8 @@ public:
{
if(!this->isPaused())
{
- if(!(image->encoding.compare(sensor_msgs::image_encodings::MONO8) ==0 ||
+ if(!(image->encoding.compare(sensor_msgs::image_encodings::TYPE_8UC1) ==0 ||
+ image->encoding.compare(sensor_msgs::image_encodings::MONO8) ==0 ||
image->encoding.compare(sensor_msgs::image_encodings::MONO16) ==0 ||
image->encoding.compare(sensor_msgs::image_encodings::BGR8) == 0 ||
image->encoding.compare(sensor_msgs::image_encodings::RGB8) == 0) ||
@@ -171,7 +172,9 @@ public:
depth->encoding.compare(sensor_msgs::image_encodings::TYPE_32FC1)==0 ||
depth->encoding.compare(sensor_msgs::image_encodings::MONO16)==0))
{
- ROS_ERROR("Input type must be image=mono8,mono16,rgb8,bgr8 (mono8 recommended) and image_depth=16UC1,32FC1,mono16");
+ ROS_ERROR("Input type must be image=mono8,mono16,rgb8,bgr8 (mono8 "
+ "recommended) and image_depth=16UC1,32FC1,mono16. Types detected: %s %s",
+ image->encoding.c_str(), depth->encoding.c_str());
return;
}
else if(depth->encoding.compare(sensor_msgs::image_encodings::TYPE_32FC1)==0)
@@ -214,7 +217,7 @@ public:
model.cx(),
model.cy(),
rtabmap_ros::transformFromTF(localTransform));
- cv_bridge::CvImageConstPtr ptrImage = cv_bridge::toCvShare(image, "mono8");
+ cv_bridge::CvImageConstPtr ptrImage = cv_bridge::toCvShare(image, image->encoding.compare(sensor_msgs::image_encodings::TYPE_8UC1)==0?"":"mono8");
cv_bridge::CvImageConstPtr ptrDepth = cv_bridge::toCvShare(depth);
rtabmap::SensorData data(
@@ -258,7 +261,8 @@ public:
std::vector cameraModels;
for(unsigned int i=0; iencoding.compare(sensor_msgs::image_encodings::MONO8) ==0 ||
+ if(!(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::TYPE_8UC1) ==0 ||
+ imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO8) ==0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO16) ==0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::BGR8) == 0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::RGB8) == 0) ||
@@ -292,7 +296,11 @@ public:
}
cv_bridge::CvImageConstPtr ptrImage;
- if(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO8) == 0 ||
+ if(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::TYPE_8UC1)==0)
+ {
+ ptrImage = cv_bridge::toCvShare(imageMsgs[i]);
+ }
+ else if(imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO8) == 0 ||
imageMsgs[i]->encoding.compare(sensor_msgs::image_encodings::MONO16) == 0)
{
ptrImage = cv_bridge::toCvShare(imageMsgs[i], "mono8");
diff --git a/src/nodelets/point_cloud_xyzrgb.cpp b/src/nodelets/point_cloud_xyzrgb.cpp
index 1cc01b23..48517ca8 100644
--- a/src/nodelets/point_cloud_xyzrgb.cpp
+++ b/src/nodelets/point_cloud_xyzrgb.cpp
@@ -156,7 +156,8 @@ private:
const sensor_msgs::ImageConstPtr& imageDepth,
const sensor_msgs::CameraInfoConstPtr& cameraInfo)
{
- if(!(image->encoding.compare(sensor_msgs::image_encodings::MONO8) ==0 ||
+ if(!(image->encoding.compare(sensor_msgs::image_encodings::TYPE_8UC1) ==0 ||
+ image->encoding.compare(sensor_msgs::image_encodings::MONO8) ==0 ||
image->encoding.compare(sensor_msgs::image_encodings::MONO16) ==0 ||
image->encoding.compare(sensor_msgs::image_encodings::BGR8) == 0 ||
image->encoding.compare(sensor_msgs::image_encodings::RGB8) == 0) &&
@@ -170,7 +171,7 @@ private:
if(cloudPub_.getNumSubscribers())
{
- cv_bridge::CvImageConstPtr imagePtr = cv_bridge::toCvShare(image, "bgr8");
+ cv_bridge::CvImageConstPtr imagePtr = cv_bridge::toCvShare(image, image->encoding.compare(sensor_msgs::image_encodings::TYPE_8UC1)==0?"":"mono8");
cv_bridge::CvImageConstPtr imageDepthPtr = cv_bridge::toCvShare(imageDepth);
image_geometry::PinholeCameraModel model;