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;