Pulls out RViz support into a separate package. (#66)

master
Damon Kohler 2016-09-20 10:30:21 +02:00 committed by GitHub
parent 534f0119c4
commit 1525dbdbc7
15 changed files with 189 additions and 114 deletions

View File

@ -21,11 +21,11 @@ set(PACKAGE_DEPENDENCIES
geometry_msgs geometry_msgs
cartographer_ros_msgs cartographer_ros_msgs
roscpp roscpp
rviz
sensor_msgs sensor_msgs
nav_msgs nav_msgs
tf2 tf2
tf2_eigen tf2_eigen
tf2_ros
) )
set(CMAKE_CXX_FLAGS "-pthread -std=c++11 -Wreorder") set(CMAKE_CXX_FLAGS "-pthread -std=c++11 -Wreorder")
@ -70,18 +70,6 @@ link_directories(${CARTOGRAPHER_LIBRARY_DIRS})
find_package(ZLIB REQUIRED) find_package(ZLIB REQUIRED)
include_directories(${ZLIB_INCLUDE_DIRS}) include_directories(${ZLIB_INCLUDE_DIRS})
set(CMAKE_AUTOMOC ON)
if(rviz_QT_VERSION VERSION_LESS "5")
message(STATUS "Using Qt4 based on the rviz_QT_VERSION: ${rviz_QT_VERSION}")
find_package(Qt4 ${rviz_QT_VERSION} EXACT REQUIRED QtCore QtGui)
include(${QT_USE_FILE})
else()
message(STATUS "Using Qt5 based on the rviz_QT_VERSION: ${rviz_QT_VERSION}")
find_package(Qt5 ${rviz_QT_VERSION} EXACT REQUIRED Core Widgets)
set(QT_LIBRARIES Qt5::Widgets)
endif()
add_definitions(-DQT_NO_KEYWORDS)
find_package(Boost REQUIRED find_package(Boost REQUIRED
COMPONENTS COMPONENTS
system system
@ -95,7 +83,6 @@ add_executable(cartographer_node
src/cartographer_node_main.cc src/cartographer_node_main.cc
src/msg_conversion.cc src/msg_conversion.cc
src/msg_conversion.h src/msg_conversion.h
src/node_constants.h
src/sensor_data.cc src/sensor_data.cc
src/sensor_data.h src/sensor_data.h
src/sensor_data_producer.cc src/sensor_data_producer.cc
@ -105,45 +92,24 @@ add_executable(cartographer_node
) )
target_link_libraries(cartographer_node target_link_libraries(cartographer_node
${CARTOGRAPHER_LIBRARIES} ${CARTOGRAPHER_LIBRARIES}
${catkin_LIBRARIES}
${PCL_LIBRARIES} ${PCL_LIBRARIES}
gflags # TODO(whess): Use or remove gflags_catkin. ${catkin_LIBRARIES}
gflags # TODO(whess): CMake-ify?
) )
add_dependencies(cartographer_node add_dependencies(cartographer_node
${catkin_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}
) )
add_library(cartographer_rviz_submaps_visualization
src/drawable_submap.cc
src/drawable_submap.h
src/node_constants.h
src/submaps_display.cc
src/submaps_display.h
)
target_link_libraries(cartographer_rviz_submaps_visualization
${Boost_LIBRARIES}
${CARTOGRAPHER_LIBRARIES}
${catkin_LIBRARIES}
${QT_LIBRARIES}
${ZLIB_LIBRARIES}
)
add_dependencies(cartographer_rviz_submaps_visualization
${catkin_EXPORTED_TARGETS}
)
catkin_add_gtest(time_conversion_test catkin_add_gtest(time_conversion_test
src/time_conversion_test.cc src/time_conversion_test.cc
src/time_conversion.h src/time_conversion.h
src/time_conversion.cc src/time_conversion.cc
) )
target_link_libraries(time_conversion_test target_link_libraries(time_conversion_test
${GTEST_BOTH_LIBRARIES}
${CARTOGRAPHER_LIBRARIES} ${CARTOGRAPHER_LIBRARIES}
${GTEST_BOTH_LIBRARIES}
${catkin_LIBRARIES} ${catkin_LIBRARIES}
) )
add_dependencies(time_conversion_test add_dependencies(time_conversion_test
${catkin_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}
) )
@ -160,18 +126,8 @@ install(DIRECTORY configuration_files/
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/configuration_files/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/configuration_files/
) )
install(TARGETS install(TARGETS cartographer_node
cartographer_rviz_submaps_visualization cartographer_node
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
) )
install(FILES
rviz_plugin_description.xml
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
install(DIRECTORY ogre_media/
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/ogre_media
)

View File

@ -45,22 +45,17 @@
<depend>rosbag</depend> <depend>rosbag</depend>
<depend>roscpp</depend> <depend>roscpp</depend>
<depend>roslib</depend> <depend>roslib</depend>
<depend>rviz</depend>
<depend>sensor_msgs</depend> <depend>sensor_msgs</depend>
<depend>std_msgs</depend> <depend>std_msgs</depend>
<depend>tf2</depend> <depend>tf2</depend>
<depend>tf2_eigen</depend> <depend>tf2_eigen</depend>
<depend>visualization_msgs</depend> <depend>tf2_ros</depend>
<depend>geometry_msgs</depend> <depend>geometry_msgs</depend>
<depend>nav_msgs</depend> <depend>nav_msgs</depend>
<depend>libpcl-all-dev</depend> <depend>libpcl-all-dev</depend>
<depend>pcl_conversions</depend> <depend>pcl_conversions</depend>
<depend>eigen_conversions</depend> <depend>eigen_conversions</depend>
<depend>message_runtime</depend> <depend>message_runtime</depend>
<depend>qtbase5-dev</depend>
<depend>libqt5-core</depend>
<depend>libqt5-gui</depend>
<depend>libqt5-widgets</depend>
<test_depend>rosunit</test_depend> <test_depend>rosunit</test_depend>

View File

@ -64,7 +64,6 @@
#include "tf2_ros/transform_listener.h" #include "tf2_ros/transform_listener.h"
#include "msg_conversion.h" #include "msg_conversion.h"
#include "node_constants.h"
#include "sensor_data.h" #include "sensor_data.h"
#include "sensor_data_producer.h" #include "sensor_data_producer.h"
#include "time_conversion.h" #include "time_conversion.h"
@ -99,6 +98,8 @@ constexpr char kImuTopic[] = "imu";
constexpr char kOdometryTopic[] = "odom"; constexpr char kOdometryTopic[] = "odom";
constexpr char kOccupancyGridTopic[] = "map"; constexpr char kOccupancyGridTopic[] = "map";
constexpr char kScanMatchedPointCloudTopic[] = "scan_matched_points2"; constexpr char kScanMatchedPointCloudTopic[] = "scan_matched_points2";
constexpr char kSubmapListTopic[] = "submap_list";
constexpr char kSubmapQueryServiceName[] = "submap_query";
struct NodeOptions { struct NodeOptions {
carto::mapping::proto::MapBuilderOptions map_builder_options; carto::mapping::proto::MapBuilderOptions map_builder_options;

View File

@ -1,31 +0,0 @@
/*
* Copyright 2016 The Cartographer Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef CARTOGRAPHER_ROS_GOOGLE_CARTOGRAPHER_SRC_NODE_CONSTANTS_H_
#define CARTOGRAPHER_ROS_GOOGLE_CARTOGRAPHER_SRC_NODE_CONSTANTS_H_
namespace cartographer_ros {
// The topic that the node will subscribe to.
constexpr char kSubmapListTopic[] = "submap_list";
// The service we serve in the Node and query in the RViz plugin for submap
// which are used for visualization.
constexpr char kSubmapQueryServiceName[] = "submap_query";
} // namespace cartographer_ros
#endif // CARTOGRAPHER_ROS_GOOGLE_CARTOGRAPHER_SRC_NODE_CONSTANTS_H_

View File

@ -0,0 +1,110 @@
# Copyright 2016 The Cartographer Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
cmake_minimum_required(VERSION 2.8)
project(cartographer_rviz)
set(PACKAGE_DEPENDENCIES
cartographer_ros_msgs
eigen_conversions
roscpp
rviz
)
set(CMAKE_CXX_FLAGS "-pthread -std=c++11 -Wreorder")
if(NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE Release)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Release")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -DNDEBUG")
elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -g -DNDEBUG")
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
message(FATAL_ERROR "Cartographer is too slow to be useful in debug mode.")
else()
message(FATAL_ERROR "Unknown CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
endif()
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
find_package(catkin REQUIRED COMPONENTS ${PACKAGE_DEPENDENCIES})
include_directories(${catkin_INCLUDE_DIRS})
catkin_package(
CATKIN_DEPENDS
message_runtime
${PACKAGE_DEPENDENCIES}
)
find_package(cartographer REQUIRED)
include_directories(${CARTOGRAPHER_INCLUDE_DIRS})
link_directories(${CARTOGRAPHER_LIBRARY_DIRS})
find_package(ZLIB REQUIRED)
include_directories(${ZLIB_INCLUDE_DIRS})
set(CMAKE_AUTOMOC ON)
if(rviz_QT_VERSION VERSION_LESS "5")
message(STATUS "Using Qt4 based on the rviz_QT_VERSION: ${rviz_QT_VERSION}")
find_package(Qt4 ${rviz_QT_VERSION} EXACT REQUIRED QtCore QtGui)
include(${QT_USE_FILE})
else()
message(STATUS "Using Qt5 based on the rviz_QT_VERSION: ${rviz_QT_VERSION}")
find_package(Qt5 ${rviz_QT_VERSION} EXACT REQUIRED Core Widgets)
set(QT_LIBRARIES Qt5::Widgets)
endif()
add_definitions(-DQT_NO_KEYWORDS)
find_package(Boost REQUIRED
COMPONENTS
system
iostreams
)
add_definitions(${BOOST_DEFINITIONS})
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
add_library(cartographer_rviz_submaps_visualization
src/drawable_submap.cc
src/drawable_submap.h
src/submaps_display.cc
src/submaps_display.h
)
target_link_libraries(cartographer_rviz_submaps_visualization
${Boost_LIBRARIES}
${CARTOGRAPHER_LIBRARIES}
${QT_LIBRARIES}
${ZLIB_LIBRARIES}
${catkin_LIBRARIES}
)
add_dependencies(cartographer_rviz_submaps_visualization
${catkin_EXPORTED_TARGETS}
)
install(TARGETS cartographer_rviz_submaps_visualization
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
install(FILES rviz_plugin_description.xml
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
install(DIRECTORY ogre_media/
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/ogre_media
)

View File

@ -0,0 +1,53 @@
<?xml version="1.0"?>
<!--
Copyright 2016 The Cartographer Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<package format="2">
<name>cartographer_rviz</name>
<version>1.0.0</version>
<description>
Cartographer is a system that provides real-time simultaneous localization
and mapping SLAM across multiple platforms and sensor configurations. This
package provides Cartographer's RViz integration.
</description>
<maintainer email="google-cartographer@googlegroups.com">
The Cartographer Authors
</maintainer>
<license>Apache 2.0</license>
<url>https://github.com/googlecartographer/cartographer_ros</url>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>g++-static</build_depend>
<depend>cartographer</depend>
<depend>cartographer_ros_msgs</depend>
<depend>eigen_conversions</depend>
<depend>libqt5-core</depend>
<depend>libqt5-gui</depend>
<depend>libqt5-widgets</depend>
<depend>message_runtime</depend>
<depend>qtbase5-dev</depend>
<depend>roscpp</depend>
<depend>roslib</depend>
<depend>rviz</depend>
<export>
<rviz plugin="${prefix}/rviz_plugin_description.xml" />
</export>
</package>

View File

@ -16,7 +16,7 @@
<library path="lib/libcartographer_rviz_submaps_visualization"> <library path="lib/libcartographer_rviz_submaps_visualization">
<class name="Submaps" <class name="Submaps"
type="cartographer_ros::rviz::SubmapsDisplay" type="cartographer_rviz::SubmapsDisplay"
base_class_type="rviz::Display"> base_class_type="rviz::Display">
<description> <description>
Displays submaps as a unified map in RViz. Displays submaps as a unified map in RViz.

View File

@ -30,8 +30,7 @@
#include <sstream> #include <sstream>
#include <string> #include <string>
namespace cartographer_ros { namespace cartographer_rviz {
namespace rviz {
namespace { namespace {
@ -237,5 +236,4 @@ float DrawableSubmap::UpdateAlpha(const float target_alpha) {
return current_alpha_; return current_alpha_;
} }
} // namespace rviz } // namespace cartographer_rviz
} // namespace cartographer_ros

View File

@ -14,8 +14,8 @@
* limitations under the License. * limitations under the License.
*/ */
#ifndef CARTOGRAPHER_ROS_GOOGLE_CARTOGRAPHER_SRC_DRAWABLE_SUBMAP_H_ #ifndef CARTOGRAPHER_RVIZ_SRC_DRAWABLE_SUBMAP_H_
#define CARTOGRAPHER_ROS_GOOGLE_CARTOGRAPHER_SRC_DRAWABLE_SUBMAP_H_ #define CARTOGRAPHER_RVIZ_SRC_DRAWABLE_SUBMAP_H_
#include <OgreManualObject.h> #include <OgreManualObject.h>
#include <OgreMaterial.h> #include <OgreMaterial.h>
@ -35,8 +35,7 @@
#include <future> #include <future>
namespace cartographer_ros { namespace cartographer_rviz {
namespace rviz {
// Contains all the information needed to render a submap onto the final // Contains all the information needed to render a submap onto the final
// texture representing the whole map. // texture representing the whole map.
@ -103,7 +102,6 @@ class DrawableSubmap : public QObject {
float current_alpha_ = 0.f; float current_alpha_ = 0.f;
}; };
} // namespace rviz } // namespace cartographer_rviz
} // namespace cartographer_ros
#endif // CARTOGRAPHER_ROS_GOOGLE_CARTOGRAPHER_SRC_DRAWABLE_SUBMAP_H_ #endif // CARTOGRAPHER_RVIZ_SRC_DRAWABLE_SUBMAP_H_

View File

@ -29,10 +29,7 @@
#include <rviz/frame_manager.h> #include <rviz/frame_manager.h>
#include <rviz/properties/string_property.h> #include <rviz/properties/string_property.h>
#include "node_constants.h" namespace cartographer_rviz {
namespace cartographer_ros {
namespace rviz {
namespace { namespace {
@ -42,12 +39,13 @@ constexpr char kGlsl120Directory[] = "/glsl120";
constexpr char kScriptsDirectory[] = "/scripts"; constexpr char kScriptsDirectory[] = "/scripts";
constexpr char kDefaultMapFrame[] = "map"; constexpr char kDefaultMapFrame[] = "map";
constexpr char kDefaultTrackingFrame[] = "base_link"; constexpr char kDefaultTrackingFrame[] = "base_link";
constexpr char kDefaultSubmapQueryServiceName[] = "/submap_query";
} // namespace } // namespace
SubmapsDisplay::SubmapsDisplay() : tf_listener_(tf_buffer_) { SubmapsDisplay::SubmapsDisplay() : tf_listener_(tf_buffer_) {
submap_query_service_property_ = new ::rviz::StringProperty( submap_query_service_property_ = new ::rviz::StringProperty(
"Submap query service", QString("/") + kSubmapQueryServiceName, "Submap query service", kDefaultSubmapQueryServiceName,
"Submap query service to connect to.", this, SLOT(Reset())); "Submap query service to connect to.", this, SLOT(Reset()));
map_frame_property_ = new ::rviz::StringProperty( map_frame_property_ = new ::rviz::StringProperty(
"Map frame", kDefaultMapFrame, "Map frame, used for fading out submaps.", "Map frame", kDefaultMapFrame, "Map frame, used for fading out submaps.",
@ -149,7 +147,6 @@ void SubmapsDisplay::update(const float wall_dt, const float ros_dt) {
} }
} }
} // namespace rviz } // namespace cartographer_rviz
} // namespace cartographer_ros
PLUGINLIB_EXPORT_CLASS(cartographer_ros::rviz::SubmapsDisplay, ::rviz::Display) PLUGINLIB_EXPORT_CLASS(cartographer_rviz::SubmapsDisplay, ::rviz::Display)

View File

@ -14,8 +14,8 @@
* limitations under the License. * limitations under the License.
*/ */
#ifndef CARTOGRAPHER_ROS_GOOGLE_CARTOGRAPHER_SRC_SUBMAPS_DISPLAY_H_ #ifndef CARTOGRAPHER_RVIZ_SRC_SUBMAPS_DISPLAY_H_
#define CARTOGRAPHER_ROS_GOOGLE_CARTOGRAPHER_SRC_SUBMAPS_DISPLAY_H_ #define CARTOGRAPHER_RVIZ_SRC_SUBMAPS_DISPLAY_H_
#include <cartographer/common/mutex.h> #include <cartographer/common/mutex.h>
#include <cartographer/common/port.h> #include <cartographer/common/port.h>
@ -29,8 +29,7 @@
#include "drawable_submap.h" #include "drawable_submap.h"
namespace cartographer_ros { namespace cartographer_rviz {
namespace rviz {
// RViz plugin used for displaying maps which are represented by a collection of // RViz plugin used for displaying maps which are represented by a collection of
// submaps. // submaps.
@ -72,7 +71,6 @@ class SubmapsDisplay
::cartographer::common::Mutex mutex_; ::cartographer::common::Mutex mutex_;
}; };
} // namespace rviz } // namespace cartographer_rviz
} // namespace cartographer_ros
#endif // CARTOGRAPHER_ROS_GOOGLE_CARTOGRAPHER_SRC_SUBMAPS_DISPLAY_H_ #endif // CARTOGRAPHER_RVIZ_SRC_SUBMAPS_DISPLAY_H_