GithubHelp home page GithubHelp logo

lpslam_node's People

Contributors

alexeymerzlyakov avatar itsjas avatar th-lp avatar thomashauth avatar trilion99 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

lpslam_node's Issues

Conflict between zlib packages

WARN: Recipe 'tbb/2020.1' is deprecated in favor of 'onetbb'. Please, consider changing your requirements.
ERROR: Conflict in protobuf/3.9.1:
'protobuf/3.9.1' requires 'zlib/1.2.12' while 'boost/1.72.0' requires 'zlib/1.2.13'.
To fix this conflict you need to override the package 'zlib' in your root package.
CMake Error at lpslam/cmake/conan.cmake:402 (message):
Conan install failed='1'
Call Stack (most recent call first):
lpslam/cmake/conan.cmake:497 (conan_cmake_install)
lpslam/CMakeLists.txt:101 (conan_cmake_run)

New to this, not sure how should I approach this problem. Any help will be appreciated. Thank you.

Initial Nav2 integration items

Hi! Listing the items more or less required for first Nav2 integration (will be updated during the ticket lifetime).

lpslam_node crashes with a segmentation fault

Last output: [info] Occupancy Map: Computed needed grid size to..
[from openvslam/module/occupancy_map_exporter.cc@compute_parameters()]

Running the node in debug mode:

ros2 run --prefix 'gdb -ex run --args' lpslam lpslam_node --ros-args --log-level lpslam_node:=DEBUG --log-level rcl:=INFO -p lpslam_config:="PATH_TO_CONFIG.json" -p use_sim_time:=True -p laserscan_frame_id:=LASER_FRAME -p write_lpslam_log:=True -r left_image_raw:=RIGHT_TOPIC -r right_image_raw:=LEFT_TOPIC

gdb says, it comes from get_laser_rays_in_world()

Segmentation fault in openvslam::data::laser_landmark::get_laser_rays_in_world() const () 
from ...install/lpslam/lib/libopenvslam.so

Following the functions involved up to lpslam_node:

|___ openvslam/data/laser_landmark.cc@get_laser_rays_in_world()
|___ openvslam/laser/laser_scanner_2d.cc@get_laser_rays_in_world()
|
|___ openvslam/module/occupancy_map_exporter.cc@map_export()
|___ openvslam/publish/map_publisher.cc@occupancy_map_export()
|
|___ lpslam/src/InterfaceImpl/LpSlamManager.cpp@mappingGetMapRaw()
|___ lpslam/src/Trackers/OpenVSLAMStereoTracker.cpp@mappingGetMapRaw()
|___ lpslam/src/Manager/SlamManager.cpp@mappingGetMapRaw()
|
|___ lpslam_node/src/LpSlamNode.cpp@publishOccMap()

Apparently, the problem happens when LpSlamNode tries to publish the occupancy map and there is a map size mismatch at some point or a problem with laser data.
If it's just an initialization problem, adding an exception to let the node "try to publish the map" would let it carry on but this needs more investigation.

lpslam_node crashes when using direct OpenVSLAM mode

Debugger output,

Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50	../sysdeps/unix/sysv/linux/raise.c: No such file or directory.

@AlexeyMerzlyakov figured out that the crash is caused by spdlog version conflict. In our case spdlog/1.8.0 requested by lpslam/conan vs system spdlog/1.5.0 vs OpenVSLAM 3rd/spdlog.
So when doing manual changes to force all three to use the same spdlog version, the node works just fine!

Trivial typo in the CMakeLists.txt?

Hello LP-RESEARCH development team,

I just found this repository a few minutes ago, and I'm currently confirming your codes.

And I found (probably unintentional) typo lines (at current HEAD commit) shown as below.

I know this is just my quibble on insignificant detail, but I hope this will be of some help.

In the lines shown below , "lpslam or LPSLAM" is used.

project(lpslam)
# Default to C99
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
# Default to C++17
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(tf2 REQUIRED)
find_package(tf2_ros REQUIRED)
find_package(tf2_geometry_msgs REQUIRED)
find_package(nav_msgs REQUIRED)
find_package(yaml_cpp_vendor REQUIRED)
if (USE_OPENVSLAM_DIRECTLY)
find_package(message_filters REQUIRED)
find_package(builtin_interfaces REQUIRED)
find_package(cv_bridge REQUIRED)
if (NOT LPSLAM_BUILD_OPENVSLAM)
# This means that openvslam is built separately
find_package(openvslam REQUIRED)
endif()
else()
find_package(lpslam_interfaces REQUIRED)
endif()
SET(LPSLAM_BUILD_ROS2 ON CACHE BOOL "build with ROS2 support")
SET(LPSLAM_BUILD_LPSLAM ON CACHE BOOL "Build LPSLAM module")
SET(LPSLAM_BUILD_OPENVSLAM ON CACHE BOOL "enable")
SET(LPSLAM_BUILD_OPENVSLAM_PANGOLIN ON CACHE BOOL "enable")
SET(USE_PANGOLIN_VIEWER OFF CACHE BOOL "Use Pangolin Viewer")
SET(USE_OPENVSLAM_DIRECTLY OFF CACHE BOOL "Build with direct usage of OpenVSLAM (w/o lpslam module)")
if (LPSLAM_BUILD_LPSLAM)
add_subdirectory(lpslam)
endif()

In the lines shown below , "LPSPAM" is used.

lpslam_node/CMakeLists.txt

Lines 63 to 124 in 0ed2c5d

SET(LPSPAM_NODE_SRC src/LpBaseNode.cpp)
if(USE_OPENVSLAM_DIRECTLY)
LIST(APPEND LPSPAM_NODE_SRC src/OpenVSLAMNode.cpp)
else()
LIST(APPEND LPSPAM_NODE_SRC src/LpSlamNode.cpp)
endif()
LIST(APPEND LPSPAM_NODE_SRC src/main.cpp)
add_executable(lpslam_node
${LPSPAM_NODE_SRC}
)
SET(LPSPAM_NODE_LIBS
${OPENZEN_TARGET_NAME}
)
if(USE_OPENVSLAM_DIRECTLY)
LIST(APPEND LPSPAM_NODE_LIBS openvslam)
target_include_directories(lpslam_node
PRIVATE
lpslam/src/Interface)
if(USE_PANGOLIN_VIEWER)
LIST(APPEND LPSPAM_NODE_LIBS pangolin_viewer)
if (NOT LPSLAM_BUILD_LPSLAM)
# If build lpslam with conan, it will add pangolin dependency.
# Otherwise, adding it manually
LIST(APPEND LPSPAM_NODE_LIBS pangolin)
endif()
endif()
else()
LIST(APPEND LPSPAM_NODE_LIBS lpslam)
endif()
target_link_libraries(lpslam_node
${LPSPAM_NODE_LIBS}
)
SET(LPSPAM_NODE_DEPS
rclcpp
std_msgs
sensor_msgs
nav_msgs
tf2
tf2_ros
tf2_geometry_msgs
yaml_cpp_vendor
)
if(USE_OPENVSLAM_DIRECTLY)
LIST(APPEND LPSPAM_NODE_DEPS message_filters builtin_interfaces cv_bridge)
target_compile_definitions(lpslam_node PRIVATE -DUSE_OPENVSLAM_DIRECTLY)
else()
LIST(APPEND LPSPAM_NODE_DEPS lpslam_interfaces)
endif()
if(USE_PANGOLIN_VIEWER)
target_compile_definitions(lpslam_node PRIVATE -DUSE_PANGOLIN_VIEWER)
endif()
ament_target_dependencies(lpslam_node
${LPSPAM_NODE_DEPS})

Thanks,

Stereo images are not being rectified when using direct OpenVSLAM mode

For the USE_OPENVSLAM_DIRECTLY=OFF node, lpslam module is doing the preprocessing internally in lpslam/OpenVSLAMStereoTracker.cpp and not with OpenVSLAM but it also gives the option to use OpenVSLAM rectifier depending on whether StereoRectifier.model is set in the configuration file or not as specified in openvslam/system.cc.
But this doesn't work because the value is not being parsed properly and will always be False.

On the other hand, stereo rectification is needed to improve the stereo matching and the map quality.

Decoupling occupancy grid from VSLAM

Issue raised by @SteveMacenski (afaik):
At the moment the occupancy grid is created from laser scan data aligned to the VSLAM coordinate system. Laser scan segments are connected to camera key frames and (re)arranged correspondingly.

This should be more flexible. There are ways to create an occupany grid from camera data. Exploration of how to actually do that is another issue. This issue is for creating some kind of flexible interface.

Comment from @ThomasHauth:
Actually the code involved for the occ grid generation is not that much right now. So I don't know if it "deserve" its own library right now. Its all contained in this file:
https://github.com/lp-research/openvslam/blob/feature/lprmods/src/openvslam/module/occupancy_map_exporter.cc

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.