From 1813292044b4162e840bf47bb469c1e324d2330b Mon Sep 17 00:00:00 2001 From: dgarbuzov <34632025+dgarbuzov@users.noreply.github.com> Date: Thu, 10 Jun 2021 20:18:53 -0700 Subject: [PATCH] ouster-ros Update for fw 2.1. See changelog for details. (#259) * Add support for the new signal_multiplier config parameter * Add support for the new 8-bit reflectivity format in simple_viz * Update Python ouster-sdk package to version 0.2.1, bugfix release * Remove viz_node and graphics packages from ROS build dependencies * Ensure ouster_ros dependencies can be satisfied using rosdep * Various improvements to the ROS img node output --- drivers/ouster-ros/CMakeLists.txt | 26 ++--- drivers/ouster-ros/Dockerfile | 61 +++++++++++ drivers/ouster-ros/ouster.launch | 12 +-- drivers/ouster-ros/package.xml | 13 +-- drivers/ouster-ros/src/img_node.cpp | 154 +++++++++++++--------------- drivers/ouster-ros/src/os_node.cpp | 32 ++++-- drivers/ouster-ros/src/ros.cpp | 1 - drivers/ouster-ros/src/viz_node.cpp | 70 ------------- drivers/ouster-ros/viz.rviz | 91 +++++++++------- 9 files changed, 232 insertions(+), 228 deletions(-) create mode 100644 drivers/ouster-ros/Dockerfile delete mode 100644 drivers/ouster-ros/src/viz_node.cpp diff --git a/drivers/ouster-ros/CMakeLists.txt b/drivers/ouster-ros/CMakeLists.txt index d34853c6..4e762e4e 100644 --- a/drivers/ouster-ros/CMakeLists.txt +++ b/drivers/ouster-ros/CMakeLists.txt @@ -8,8 +8,8 @@ project(ouster_ros) # ==== Requirements ==== find_package(Eigen3 REQUIRED) -find_package(GLEW REQUIRED) -find_package(glfw3 REQUIRED) +find_package(PCL REQUIRED COMPONENTS common) +find_package(tf2_eigen REQUIRED) find_package( catkin REQUIRED @@ -17,12 +17,10 @@ find_package( std_msgs sensor_msgs geometry_msgs - pcl_ros pcl_conversions roscpp tf2 - tf2_ros - tf2_geometry_msgs) + tf2_ros) # ==== Options ==== set(CMAKE_CXX_STANDARD 14) @@ -35,7 +33,7 @@ add_service_files(FILES OSConfigSrv.srv) generate_messages(DEPENDENCIES std_msgs sensor_msgs geometry_msgs) set(_ouster_ros_INCLUDE_DIRS - "include;../ouster_client/include;../ouster_client/include/optional-lite;../ouster_viz/include") + "include;../ouster_client/include;../ouster_client/include/optional-lite") catkin_package( INCLUDE_DIRS @@ -45,12 +43,11 @@ catkin_package( CATKIN_DEPENDS roscpp message_runtime - pcl_ros std_msgs sensor_msgs geometry_msgs DEPENDS - EIGEN3 GLFW3 GLEW) + EIGEN3) # ==== Libraries ==== # Build static libraries and bundle them into ouster_ros using the `--whole-archive` flag. This is @@ -59,15 +56,14 @@ catkin_package( set(_SAVE_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) set(BUILD_SHARED_LIBS OFF) add_subdirectory(../ouster_client ouster_client EXCLUDE_FROM_ALL) -add_subdirectory(../ouster_viz ouster_viz EXCLUDE_FROM_ALL) set(BUILD_SHARED_LIBS ${_SAVE_BUILD_SHARED_LIBS}) # catkin adds all include dirs to a single variable, don't try to use targets -include_directories(${_ouster_ros_INCLUDE_DIRS} SYSTEM ${catkin_INCLUDE_DIRS}) +include_directories(${_ouster_ros_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS}) add_library(ouster_ros src/ros.cpp) -target_link_libraries(ouster_ros PUBLIC ${catkin_LIBRARIES} ouster_build PRIVATE - -Wl,--whole-archive ouster_client ouster_viz -Wl,--no-whole-archive) +target_link_libraries(ouster_ros PUBLIC ${catkin_LIBRARIES} ouster_build pcl_common PRIVATE + -Wl,--whole-archive ouster_client -Wl,--no-whole-archive) add_dependencies(ouster_ros ${PROJECT_NAME}_gencpp) # ==== Executables ==== @@ -79,17 +75,13 @@ add_executable(os_cloud_node src/os_cloud_node.cpp) target_link_libraries(os_cloud_node ouster_ros ${catkin_LIBRARIES}) add_dependencies(os_cloud_node ${PROJECT_NAME}_gencpp) -add_executable(viz_node src/viz_node.cpp) -target_link_libraries(viz_node ouster_ros ${catkin_LIBRARIES} glfw GLEW) -add_dependencies(viz_node ${PROJECT_NAME}_gencpp) - add_executable(img_node src/img_node.cpp) target_link_libraries(img_node ouster_ros ${catkin_LIBRARIES}) add_dependencies(img_node ${PROJECT_NAME}_gencpp) # ==== Install ==== install( - TARGETS ouster_ros os_node os_cloud_node viz_node img_node + TARGETS ouster_ros os_node os_cloud_node img_node ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) diff --git a/drivers/ouster-ros/Dockerfile b/drivers/ouster-ros/Dockerfile new file mode 100644 index 00000000..fc497516 --- /dev/null +++ b/drivers/ouster-ros/Dockerfile @@ -0,0 +1,61 @@ +ARG ROS_DISTRO=melodic + +FROM ros:${ROS_DISTRO}-ros-core AS build-env +ENV DEBIAN_FRONTEND=noninteractive \ + BUILD_HOME=/var/lib/build \ + OUSTER_SDK_PATH=/opt/ouster_example + +RUN set -xue \ +# Kinetic and melodic have python3 packages but they seem to conflict +&& [ $ROS_DISTRO = "noetic" ] && PY=python3 || PY=python \ +# Turn off installing extra packages globally to slim down rosdep install +&& echo 'APT::Install-Recommends "0";' > /etc/apt/apt.conf.d/01norecommend \ +&& apt-get update \ +&& apt-get install -y \ + build-essential cmake \ + fakeroot dpkg-dev debhelper \ + $PY-rosdep $PY-rospkg $PY-bloom + +# Set up non-root build user +ARG BUILD_UID=1000 +ARG BUILD_GID=${BUILD_UID} + +RUN set -xe \ +&& groupadd -o -g ${BUILD_GID} build \ +&& useradd -o -u ${BUILD_UID} -d ${BUILD_HOME} -rm -s /bin/bash -g build build + +# Install build dependencies using rosdep +COPY --chown=build:build ouster_ros/package.xml ${OUSTER_SDK_PATH}/ouster_ros/package.xml + +RUN set -xe \ +&& apt-get update \ +&& rosdep init \ +&& rosdep update --rosdistro=${ROS_DISTRO} \ +&& rosdep install -y --from-paths ${OUSTER_SDK_PATH} + +# Set up build environment +COPY --chown=build:build cmake ${OUSTER_SDK_PATH}/cmake +COPY --chown=build:build ouster_client ${OUSTER_SDK_PATH}/ouster_client +COPY --chown=build:build ouster_viz ${OUSTER_SDK_PATH}/ouster_viz +COPY --chown=build:build ouster_ros ${OUSTER_SDK_PATH}/ouster_ros + +USER build:build +WORKDIR ${BUILD_HOME} + +RUN set -xe \ +&& mkdir src \ +&& ln -s ${OUSTER_SDK_PATH} ./src + + +FROM build-env + +RUN /opt/ros/${ROS_DISTRO}/env.sh catkin_make -DCMAKE_BUILD_TYPE=Release + +# Entrypoint for running Ouster ros: +# +# Usage: docker run --rm -it ouster-ros [ouster.launch parameters ..] +# +ENTRYPOINT ["bash", "-c", "set -e \ +&& . ./devel/setup.bash \ +&& roslaunch ouster_ros ouster.launch \"$@\" \ +", "ros-entrypoint"] diff --git a/drivers/ouster-ros/ouster.launch b/drivers/ouster-ros/ouster.launch index 39323766..0a208c29 100644 --- a/drivers/ouster-ros/ouster.launch +++ b/drivers/ouster-ros/ouster.launch @@ -8,8 +8,8 @@ - - + + @@ -30,12 +30,8 @@ - - - - - - + + diff --git a/drivers/ouster-ros/package.xml b/drivers/ouster-ros/package.xml index 14c0f7a0..9ad1606f 100644 --- a/drivers/ouster-ros/package.xml +++ b/drivers/ouster-ros/package.xml @@ -1,7 +1,7 @@ ouster_ros - 0.1.0 + 0.2.0 Ouster example ROS client ouster developers BSD @@ -11,17 +11,14 @@ std_msgs sensor_msgs geometry_msgs - pcl_ros - pcl_conversions + tf2_ros libjsoncpp-dev eigen message_generation - tf2 - tf2_ros - tf2_geometry_msgs - libglew-dev - libglfw3-dev + tf2_eigen + libpcl-all-dev + pcl_conversions libtclap-dev libjsoncpp diff --git a/drivers/ouster-ros/src/img_node.cpp b/drivers/ouster-ros/src/img_node.cpp index 1fc4eeb9..108e4a73 100644 --- a/drivers/ouster-ros/src/img_node.cpp +++ b/drivers/ouster-ros/src/img_node.cpp @@ -1,19 +1,20 @@ /** * @file - * @brief Example node to visualize range, ambient and intensity images + * @brief Example node to visualize range, near ir and signal images * - * Publishes ~/range_image, ~/ambient_image, and ~/intensity_image. Please bear + * Publishes ~/range_image, ~/nearir_image, and ~/signal_image. Please bear * in mind that there is rounding/clamping to display 8 bit images. For computer * vision applications, use higher bit depth values in /os_cloud_node/points */ #include +#include #include #include -#include #include #include #include +#include #include #include @@ -31,11 +32,21 @@ namespace sensor = ouster::sensor; namespace viz = ouster::viz; -using pixel_type = uint8_t; -constexpr size_t bit_depth = 8 * sizeof(pixel_type); +using pixel_type = uint16_t; const size_t pixel_value_max = std::numeric_limits::max(); -constexpr double range_multiplier = - 1.0 / 200.0; // assuming 200 m range typical + +sensor_msgs::ImagePtr make_image_msg(size_t H, size_t W, + const ros::Time& stamp) { + sensor_msgs::ImagePtr msg{new sensor_msgs::Image{}}; + msg->width = W; + msg->height = H; + msg->step = W * sizeof(pixel_type); + msg->encoding = sensor_msgs::image_encodings::MONO16; + msg->data.resize(W * H * sizeof(pixel_type)); + msg->header.stamp = stamp; + + return msg; +} int main(int argc, char** argv) { ros::init(argc, argv, "img_node"); @@ -57,98 +68,81 @@ int main(int argc, char** argv) { ros::Publisher range_image_pub = nh.advertise("range_image", 100); - ros::Publisher ambient_image_pub = - nh.advertise("ambient_image", 100); - ros::Publisher intensity_image_pub = - nh.advertise("intensity_image", 100); + ros::Publisher nearir_image_pub = + nh.advertise("nearir_image", 100); + ros::Publisher signal_image_pub = + nh.advertise("signal_image", 100); + ros::Publisher reflec_image_pub = + nh.advertise("reflec_image", 100); ouster_ros::Cloud cloud{}; - viz::AutoExposure ambient_ae, intensity_ae; - viz::BeamUniformityCorrector ambient_buc; + viz::AutoExposure nearir_ae, signal_ae, reflec_ae; + viz::BeamUniformityCorrector nearir_buc; - std::stringstream encoding_ss; - encoding_ss << "mono" << bit_depth; - std::string encoding = encoding_ss.str(); + ouster::img_t nearir_image_eigen(H, W); + ouster::img_t signal_image_eigen(H, W); + ouster::img_t reflec_image_eigen(H, W); auto cloud_handler = [&](const sensor_msgs::PointCloud2::ConstPtr& m) { pcl::fromROSMsg(*m, cloud); - sensor_msgs::Image range_image; - sensor_msgs::Image ambient_image; - sensor_msgs::Image intensity_image; - - range_image.width = W; - range_image.height = H; - range_image.step = W; - range_image.encoding = encoding; - range_image.data.resize(W * H * bit_depth / - (8 * sizeof(*range_image.data.data()))); - range_image.header.stamp = m->header.stamp; - - ambient_image.width = W; - ambient_image.height = H; - ambient_image.step = W; - ambient_image.encoding = encoding; - ambient_image.data.resize(W * H * bit_depth / - (8 * sizeof(*ambient_image.data.data()))); - ambient_image.header.stamp = m->header.stamp; - - intensity_image.width = W; - intensity_image.height = H; - intensity_image.step = W; - intensity_image.encoding = encoding; - intensity_image.data.resize(W * H * bit_depth / - (8 * sizeof(*intensity_image.data.data()))); - intensity_image.header.stamp = m->header.stamp; - - ouster::img_t ambient_image_eigen(H, W); - ouster::img_t intensity_image_eigen(H, W); - + auto range_image = make_image_msg(H, W, m->header.stamp); + auto nearir_image = make_image_msg(H, W, m->header.stamp); + auto signal_image = make_image_msg(H, W, m->header.stamp); + auto reflec_image = make_image_msg(H, W, m->header.stamp); + + // views into message data + auto range_image_map = Eigen::Map>( + (pixel_type*)range_image->data.data(), H, W); + auto nearir_image_map = Eigen::Map>( + (pixel_type*)nearir_image->data.data(), H, W); + auto signal_image_map = Eigen::Map>( + (pixel_type*)signal_image->data.data(), H, W); + auto reflec_image_map = Eigen::Map>( + (pixel_type*)reflec_image->data.data(), H, W); + + // copy data out of Cloud message, with destaggering for (size_t u = 0; u < H; u++) { for (size_t v = 0; v < W; v++) { const size_t vv = (v + W - px_offset[u]) % W; - const size_t index = u * W + vv; - const auto& pt = cloud[index]; - - if (pt.range == 0) { - reinterpret_cast( - range_image.data.data())[u * W + v] = 0; - } else { - reinterpret_cast( - range_image.data.data())[u * W + v] = - pixel_value_max - - std::min(std::round(pt.range * range_multiplier), - static_cast(pixel_value_max)); - } - ambient_image_eigen(u, v) = pt.ambient; - intensity_image_eigen(u, v) = pt.intensity; - } - } + const auto& pt = cloud[u * W + vv]; - ambient_buc(ambient_image_eigen); - ambient_ae(ambient_image_eigen); - intensity_ae(intensity_image_eigen); - ambient_image_eigen = ambient_image_eigen.sqrt(); - intensity_image_eigen = intensity_image_eigen.sqrt(); - for (size_t u = 0; u < H; u++) { - for (size_t v = 0; v < W; v++) { - reinterpret_cast( - ambient_image.data.data())[u * W + v] = - ambient_image_eigen(u, v) * pixel_value_max; - reinterpret_cast( - intensity_image.data.data())[u * W + v] = - intensity_image_eigen(u, v) * pixel_value_max; + // 16 bit img: use 4mm resolution and throw out returns > 260m + auto r = (pt.range + 0b10) >> 2; + range_image_map(u, v) = r > pixel_value_max ? 0 : r; + + nearir_image_eigen(u, v) = pt.ambient; + signal_image_eigen(u, v) = pt.intensity; + reflec_image_eigen(u, v) = pt.reflectivity; } } + // image processing + nearir_buc(nearir_image_eigen); + nearir_ae(nearir_image_eigen); + signal_ae(signal_image_eigen); + reflec_ae(reflec_image_eigen); + nearir_image_eigen = nearir_image_eigen.sqrt(); + signal_image_eigen = signal_image_eigen.sqrt(); + + // copy data into image messages + nearir_image_map = + (nearir_image_eigen * pixel_value_max).cast(); + signal_image_map = + (signal_image_eigen * pixel_value_max).cast(); + reflec_image_map = + (reflec_image_eigen * pixel_value_max).cast(); + + // publish range_image_pub.publish(range_image); - ambient_image_pub.publish(ambient_image); - intensity_image_pub.publish(intensity_image); + nearir_image_pub.publish(nearir_image); + signal_image_pub.publish(signal_image); + reflec_image_pub.publish(reflec_image); }; auto pc_sub = - nh.subscribe("points", 500, cloud_handler); + nh.subscribe("points", 100, cloud_handler); ros::spin(); return EXIT_SUCCESS; diff --git a/drivers/ouster-ros/src/os_node.cpp b/drivers/ouster-ros/src/os_node.cpp index 72d324ae..e01fa35a 100644 --- a/drivers/ouster-ros/src/os_node.cpp +++ b/drivers/ouster-ros/src/os_node.cpp @@ -56,17 +56,22 @@ void populate_metadata_defaults(sensor::sensor_info& info, } // try to write metadata file -void write_metadata(const std::string& meta_file, const std::string& metadata) { +bool write_metadata(const std::string& meta_file, const std::string& metadata) { std::ofstream ofs; ofs.open(meta_file); ofs << metadata << std::endl; ofs.close(); if (ofs) { - ROS_INFO("Wrote metadata to $ROS_HOME/%s", meta_file.c_str()); + ROS_INFO("Wrote metadata to %s", meta_file.c_str()); } else { - ROS_WARN("Failed to write metadata to %s; check that the path is valid", - meta_file.c_str()); + ROS_WARN( + "Failed to write metadata to %s; check that the path is valid. If " + "you provided a relative path, please note that the working " + "directory of all ROS nodes is set by default to $ROS_HOME", + meta_file.c_str()); + return false; } + return true; } int connection_loop(ros::NodeHandle& nh, sensor::client& cli, @@ -126,10 +131,6 @@ int main(int argc, char** argv) { auto lidar_mode_arg = nh.param("lidar_mode", std::string{}); auto timestamp_mode_arg = nh.param("timestamp_mode", std::string{}); - // fall back to metadata file name based on hostname, if available - auto meta_file = nh.param("metadata", std::string{}); - if (!meta_file.size() && hostname.size()) meta_file = hostname + ".json"; - // set lidar mode from param sensor::lidar_mode lidar_mode = sensor::MODE_UNSPEC; if (lidar_mode_arg.size()) { @@ -155,6 +156,16 @@ int main(int argc, char** argv) { } } + auto meta_file = nh.param("metadata", std::string{}); + if (!meta_file.size()) { + if (replay) { + ROS_ERROR("Must specify metadata file in replay mode"); + } else { + ROS_ERROR("Must specify path for metadata output"); + } + return EXIT_FAILURE; + } + if (!replay && (!hostname.size() || !udp_dest.size())) { ROS_ERROR("Must specify both hostname and udp destination"); return EXIT_FAILURE; @@ -197,7 +208,10 @@ int main(int argc, char** argv) { // write metadata file to cwd (usually ~/.ros) auto metadata = sensor::get_metadata(*cli); - write_metadata(meta_file, metadata); + if (!write_metadata(meta_file, metadata)) { + ROS_ERROR("Exiting because of failure to write metadata path"); + return EXIT_FAILURE; + } // populate sensor info auto info = sensor::parse_metadata(metadata); diff --git a/drivers/ouster-ros/src/ros.cpp b/drivers/ouster-ros/src/ros.cpp index 91ed09d1..4f77708e 100644 --- a/drivers/ouster-ros/src/ros.cpp +++ b/drivers/ouster-ros/src/ros.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include diff --git a/drivers/ouster-ros/src/viz_node.cpp b/drivers/ouster-ros/src/viz_node.cpp deleted file mode 100644 index cf1069d2..00000000 --- a/drivers/ouster-ros/src/viz_node.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Example node to visualize ouster lidar data - */ - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "ouster/lidar_scan.h" -#include "ouster/lidar_scan_viz.h" -#include "ouster/point_viz.h" -#include "ouster/types.h" -#include "ouster_ros/OSConfigSrv.h" -#include "ouster_ros/PacketMsg.h" -#include "ouster_ros/ros.h" - -namespace viz = ouster::viz; -namespace sensor = ouster::sensor; -using PacketMsg = ouster_ros::PacketMsg; - -int main(int argc, char** argv) { - ros::init(argc, argv, "viz_node"); - ros::NodeHandle nh("~"); - - ouster_ros::OSConfigSrv cfg{}; - auto client = nh.serviceClient("os_config"); - client.waitForExistence(); - if (!client.call(cfg)) { - ROS_ERROR("Calling config service failed"); - return EXIT_FAILURE; - } - - auto info = sensor::parse_metadata(cfg.response.metadata); - const size_t H = info.format.pixels_per_column; - const size_t W = info.format.columns_per_frame; - - auto packet_format = sensor::get_format(info); - - auto xyz_lut = ouster::make_xyz_lut(info); - - viz::PointViz point_viz( - {viz::CloudSetup{ - xyz_lut.direction.data(), xyz_lut.offset.data(), - info.format.columns_per_frame * info.format.pixels_per_column, - info.format.columns_per_frame, info.extrinsic.data()}}, - "Ouster Viz (ROS)"); - - viz::LidarScanViz lidar_scan_viz(info, point_viz); - - ouster::LidarScan ls(W, H); - - ouster::ScanBatcher batch(W, packet_format); - - auto lidar_handler = [&](const PacketMsg& pm) mutable { - if (batch(pm.buf.data(), ls)) lidar_scan_viz.draw(ls); - }; - - auto lidar_packet_sub = nh.subscribe( - "lidar_packets", 2048, lidar_handler); - - ros::spin(); - - return EXIT_SUCCESS; -} diff --git a/drivers/ouster-ros/viz.rviz b/drivers/ouster-ros/viz.rviz index d001a450..763a7e95 100644 --- a/drivers/ouster-ros/viz.rviz +++ b/drivers/ouster-ros/viz.rviz @@ -8,8 +8,8 @@ Panels: - /Status1 - /PointCloud21 - /TF1/Frames1 - Splitter Ratio: 0.5 - Tree Height: 573 + Splitter Ratio: 0.5654885768890381 + Tree Height: 756 - Class: rviz/Selection Name: Selection - Class: rviz/Tool Properties @@ -18,7 +18,7 @@ Panels: - /2D Nav Goal1 - /Publish Point1 Name: Tool Properties - Splitter Ratio: 0.588679016 + Splitter Ratio: 0.5886790156364441 - Class: rviz/Views Expanded: - /Current View1 @@ -29,6 +29,10 @@ Panels: Name: Time SyncMode: 0 SyncSource: PointCloud2 +Preferences: + PromptSaveOnExit: false +Toolbars: + toolButtonStyle: 2 Visualization Manager: Class: "" Displays: @@ -36,9 +40,9 @@ Visualization Manager: Cell Size: 1 Class: rviz/Grid Color: 160; 160; 164 - Enabled: true + Enabled: false Line Style: - Line Width: 0.0299999993 + Line Width: 0.029999999329447746 Value: Lines Name: Grid Normal Cell Count: 0 @@ -49,73 +53,85 @@ Visualization Manager: Plane: XY Plane Cell Count: 10 Reference Frame: - Value: true + Value: false - Alpha: 1 - Autocompute Intensity Bounds: true + Autocompute Intensity Bounds: false Autocompute Value Bounds: Max Value: 10 Min Value: -10 Value: true Axis: Z - Channel Name: intensity + Channel Name: z Class: rviz/PointCloud2 Color: 255; 255; 255 Color Transformer: Intensity Decay Time: 0 Enabled: true - Invert Rainbow: false + Invert Rainbow: true Max Color: 255; 255; 255 - Max Intensity: 1724 + Max Intensity: 15 Min Color: 0; 0; 0 - Min Intensity: 0 + Min Intensity: -10 Name: PointCloud2 Position Transformer: XYZ Queue Size: 10 Selectable: true - Size (Pixels): 3 - Size (m): 0.00999999978 - Style: Points + Size (Pixels): 2 + Size (m): 0.029999999329447746 + Style: Flat Squares Topic: /os_cloud_node/points Unreliable: false Use Fixed Frame: true Use rainbow: true Value: true - Class: rviz/Image - Enabled: true - Image Topic: /img_node/ambient_image + Enabled: false + Image Topic: /img_node/nearir_image Max Value: 1 Median window: 5 Min Value: 0 - Name: ambient + Name: near ir Normalize Range: true Queue Size: 2 Transport Hint: raw Unreliable: false - Value: true + Value: false - Class: rviz/Image Enabled: true - Image Topic: /img_node/intensity_image + Image Topic: /img_node/signal_image Max Value: 1 Median window: 5 Min Value: 0 - Name: intensity + Name: signal Normalize Range: true Queue Size: 2 Transport Hint: raw Unreliable: false Value: true - Class: rviz/Image - Enabled: true - Image Topic: /img_node/range_image + Enabled: false + Image Topic: /img_node/reflec_image Max Value: 1 Median window: 5 Min Value: 0 + Name: reflectivity + Normalize Range: true + Queue Size: 2 + Transport Hint: raw + Unreliable: false + Value: false + - Class: rviz/Image + Enabled: false + Image Topic: /img_node/range_image + Max Value: 1 + Median window: 50 + Min Value: 0 Name: range Normalize Range: true Queue Size: 2 Transport Hint: raw Unreliable: false - Value: true + Value: false - Class: rviz/TF Enabled: true Frame Timeout: 15 @@ -155,7 +171,10 @@ Visualization Manager: - Class: rviz/FocusCamera - Class: rviz/Measure - Class: rviz/SetInitialPose + Theta std deviation: 0.2617993950843811 Topic: /initialpose + X std deviation: 0.5 + Y std deviation: 0.5 - Class: rviz/SetGoal Topic: /move_base_simple/goal - Class: rviz/PublishPoint @@ -165,9 +184,9 @@ Visualization Manager: Views: Current: Class: rviz/Orbit - Distance: 10.2322998 + Distance: 45.77256774902344 Enable Stereo Rendering: - Stereo Eye Separation: 0.0599999987 + Stereo Eye Separation: 0.05999999865889549 Stereo Focal Distance: 1 Swap Stereo Eyes: false Value: false @@ -176,22 +195,22 @@ Visualization Manager: Y: 0 Z: 0 Focal Shape Fixed Size: false - Focal Shape Size: 0.0500000007 + Focal Shape Size: 0.05000000074505806 Invert Z Axis: false Name: Current View - Near Clip Distance: 0.00999999978 - Pitch: 0.595398128 + Near Clip Distance: 0.009999999776482582 + Pitch: 0.7153978943824768 Target Frame: Value: Orbit (rviz) - Yaw: 2.49040008 + Yaw: 4.228582382202148 Saved: ~ Window Geometry: Displays: collapsed: false - Height: 1051 + Height: 1080 Hide Left Dock: false Hide Right Dock: false - QMainWindow State: 000000ff00000000fd0000000400000000000003170000052ffc0200000009fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000005fb000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d00650072006100000005f0000000180000000000000000fb0000000800480065006c007000000002540000046e000000000000000000000001000002a8000003c7fc0200000008fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00720061006e00670065010000003a000000620000001600fffffffb000000120069006e00740065006e007300690074007901000000a2000000730000001600fffffffb0000000e0061006d006200690065006e0074010000011b000000690000001600fffffffb000000100044006900730070006c006100790073010000018a00000277000000c600fffffffb000000100044006900730070006c0061007900730100000189000002d10000000000000000fb0000000a00560069006500770073000000036d000002060000009e00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200001001000000a7fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000082b00000043fc0100000001fc000000000000082b0000000000fffffffa000000010200000002fb0000000800540069006d00650000000000ffffffff0000003600fffffffb0000000800540069006d006501000006c90000003a0000000000000000000004d2000003c700000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + QMainWindow State: 000000ff00000000fd0000000400000000000003170000032ffc0200000009fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000005fb0000046000000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d00650072006100000005f0000000180000000000000000fb0000000800480065006c007000000002540000046e000000000000000000000001000001e30000032ffc0200000005fb000000100044006900730070006c00610079007301000000ee0000032f000000c700fffffffb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb000000100044006900730070006c0061007900730100000189000002d10000000000000000fb0000000a00560069006500770073000000036d00000206000000a000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000780000000adfc0100000003fc00000000000007800000007b00fffffffa000000000200000006fb0000000c007300690067006e0061006c0100000000ffffffff0000001600fffffffb0000000e006e0065006100720020006900720100000000ffffffff0000001600fffffffb00000018007200650066006c006500630074006900760069007400790100000000ffffffff0000001600fffffffb000000120069006e00740065006e00730069007400790100000000ffffffff0000000000000000fb0000000a00720061006e006700650100000000ffffffff0000001600fffffffb0000000e0061006d006200690065006e0074010000003a000000c60000000000000000fc0000000000000a000000000000fffffffa000000000200000003fb000000120069006e00740065006e00730069007400790100000000ffffffff0000000000000000fb0000000a00720061006e006700650100000000ffffffff0000000000000000fb0000000e0061006d006200690065006e0074010000003a000000a70000000000000000fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000082b00000043fc0100000001fc000000000000082b0000000000fffffffa000000010200000002fb0000000800540069006d00650000000000ffffffff0000003700fffffffb0000000800540069006d006501000006c90000003a0000000000000000000005970000032f00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 Selection: collapsed: false Time: @@ -202,10 +221,12 @@ Window Geometry: collapsed: false Width: 1920 X: 0 - Y: 29 - ambient: - collapsed: false - intensity: + Y: 1151 + near ir: collapsed: false range: collapsed: false + reflectivity: + collapsed: false + signal: + collapsed: false