rsasaki0109 / lidarslam_ros2 Goto Github PK
View Code? Open in Web Editor NEWROS 2 package of 3D lidar slam using ndt/gicp registration and pose-optimization
License: BSD 2-Clause "Simplified" License
ROS 2 package of 3D lidar slam using ndt/gicp registration and pose-optimization
License: BSD 2-Clause "Simplified" License
Hi Sasaki san
Thank you for your help.
I have one query regarding base_link jump.
I am not using odom (flag use_odom = false.) and when I am performing slam
base_link is jumping randomly.
Bug can be seen after 1:02 minute of video.
Can you please tell what could be the reason for that?
What I am missing here?
For this behavior I am sharing video link
https://www.youtube.com/watch?v=5PK0N8X5Hgg
Hi!
I have successfully gotten the map data using the lidarslam. But, there is an issue, I noticed that the map is not aligned when I tried to record it on a loop road (you may see the line in the red circle is not aligned). But when I record it on a non-looping road, it works just fine. How can I resolve this issue?
Thank you.
I try to use slamming for a robot, but moving it will create some strange results.
Moving the robot vertically works fine, as lone as the robot does not move more than 5 meters at once. The transformation will be published correctly.
However moving it in horizontal direction the slamming will not match the input pointclouds.
Also if the map is visualized, the map looks like all inputs are stacked.
To to resolve this, so that the scanmatcher will publish the correct transformation in horizontal direction and should the map look like this?
Hi, I was able to build a map but I was wondering if your package makes it possible to localize in the saved map.
Thank you
Perhaps a rudimentary question, but...
Is it possible to create a map from a previously recorded BAG file?
Or would it create a map from records from LIDAR in the ongoing process?
Looking forward to your reply!
Hello again,
I am running into some issues with the slam package. when I launch my robot in gazebo/rviz everything checks out, but issues arise when I launch the slam package. The terminal that I launch my robot in and the terminal I launch slam in gives me an error saying:
[rviz2-9] Warning: TF_OLD_DATA ignoring data from the past for frame base_footprint at time 289.900000 according to authority Authority undetectable
[rviz2-9] Possible reasons are listed at http://wiki.ros.org/tf/Errors%20explained
RVIZ also complains saying there is no transformation from Odom to base_link when the slam is running
The params in the lidarslam are global_frame_id is "map" and robot_frame_id are "base_footprint". I am lost on where to go from here. Am i missing something?
Here are the screenshots of the errors and the tf frames along with the lidarslam package from my local workspace:
[frames.pdf](https://github.com/rsasaki0109/lidarslam_ros2/files/6678740/frames.pdf
lidarslam_ros2.zip
screenshots.zip
Hi! I have an issue while recording a larger map using lidarslam.yaml. The desired route is about 6.2km long. So, the mapping stopped somewhere while I was recording it https://drive.google.com/file/d/17_C7tcCxtObeyDzwouvG9QjKfip85lPi/view?usp=sharing
I believe there is a limit in the yaml file right? If it is so, is it can be solved if I use the lidarslam_tukuba.yaml?
OS and Version: [Ubuntu 20.04]
ROS Version: [Galactic]
The goal:
To create a road map.
The issue:
Error when launched Lidarslam. The error --> [scanmatcher_node-1] [ERROR] [1663050603.996330287] [scan_matcher]: "odom" passed to lookupTransform argument target_frame does not exist.
Steps to reproduce the behavior:
Hi:
Thanks for the work of lidarslam_ros2.
Have you successfully run the ros2 version of lio-sam, and which rosbag to use? And how to set the yaml file?
Thanks
First: I'm using the scanmatcher node with ros2 galactic (ported from humble with a few changes of included headers).
When testing with gazebo, even for high odometry update rate (500 for odometry vs. 60 for laser), my log is spammed with transform lookup extrapolation warnings:
Lookup would require extrapolation into the future. Requested time 20.364000 but the latest data is at time 20.346000, when looking up transform from frame [robot/base_link] to frame [robot/odom]
Maybe you could try to avoid printing a warning when tf is outdated or provide a parameter for maximum timeout or for supressing of that warning. Or you could try to work with the outdated data if possible (in my scenario the messages occure while the robot was standing and odom did not change, so here even old odometry data should be usable).
System:
I was building lidarslam_ros2 with ndt_omp_ros2 installed. But failed to build the scanmatcher & graph_based_slam because there is no g2o. The error is stated as below:
"CMake Error at CMakeLists.txt:33 (find_package):
By not providing "Findg2o.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "g2o", but
CMake did not find one.
Could not find a package configuration file provided by "g2o" with any of
the following names:
g2oConfig.cmake
g2o-config.cmake
Add the installation prefix of "g2o" to CMAKE_PREFIX_PATH or set "g2o_DIR"
to a directory containing one of the above files. If "g2o" provides a separate development package or SDK, be sure it has been installed."
So, I am quite confused because I see in your scanmatcher package stated that I don't have to build the g2o.
Really appreciate for your help.
Does anyone have the same problem when initial pose is set on the right position but the current pose start at the other place.
Hello There!
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
Failed <<< scanmatcher [0.22s, exited with code 2]
Aborted <<< graph_based_slam [0.23s]
Aborted <<< examples_tf2_py [0.77s]
Summary: 15 packages finished [2.10s]
1 package failed: scanmatcher
2 packages aborted: examples_tf2_py graph_based_slam
2 packages had stderr output: graph_based_slam scanmatcher
1 package not processed
`
Can you help me about this problem ?
Edit:
also when ı open terminal ı get these messages:
`not found: "/home/hasanenesbagci/ros2_ws/install/graph_based_slam/share/graph_based_slam/local_setup.bash"'
'not found: "/home/hasanenesbagci/ros2_ws/install/scanmatcher/share/scanmatcher/local_setup.bash"`
I tried to compile the code using the command
colcon build --symlink-install --cmake-clean-first --parallel-workers 12 --ament-cmake-args -DPYTHON_EXECUTABLE=$MY_PYTHON_ENV
I keep on getting this error message
`This may be promoted to an error in a future release of colcon-override-check.
Starting >>> lidarslam_msgs
Starting >>> ndt_omp_ros2
Starting >>> ros2_kitti_publishers
Starting >>> turtlesim
Finished <<< lidarslam_msgs [15.5s]
[Processing: ndt_omp_ros2, ros2_kitti_publishers, turtlesim]
Finished <<< turtlesim [50.2s]
Finished <<< ros2_kitti_publishers [55.4s]
[Processing: ndt_omp_ros2]
Finished <<< ndt_omp_ros2 [1min 26s]
Starting >>> graph_based_slam
Starting >>> scanmatcher
--- stderr: graph_based_slam
** WARNING ** io features related to pcap will be disabled
** WARNING ** io features related to png will be disabled
** WARNING ** io features related to libusb-1.0 will be disabled
CMake Warning (dev) at /usr/share/cmake-3.16/Modules/FindOpenGL.cmake:275 (message):
Policy CMP0072 is not set: FindOpenGL prefers GLVND by default when
available. Run "cmake --help-policy CMP0072" for policy details. Use the
cmake_policy command to set the policy and suppress this warning.
FindOpenGL found both a legacy GL library:
OPENGL_gl_LIBRARY: /usr/lib/x86_64-linux-gnu/libGL.so
and GLVND libraries for OpenGL and GLX:
OPENGL_opengl_LIBRARY: /usr/lib/x86_64-linux-gnu/libOpenGL.so
OPENGL_glx_LIBRARY: /usr/lib/x86_64-linux-gnu/libGLX.so
OpenGL_GL_PREFERENCE has not been set to "GLVND" or "LEGACY", so for
compatibility with CMake 3.10 and below the legacy GL library will be used.
Call Stack (most recent call first):
/usr/share/cmake-3.16/Modules/CMakeFindDependencyMacro.cmake:47 (find_package)
/usr/local/lib/cmake/g2o/g2oConfig.cmake:4 (find_dependency)
CMakeLists.txt:33 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Error in CMakeLists.txt:
Imported target "g2o::solver_eigen" includes non-existent path
"/usr/local/include/g2o/solver_eigen"
in its INTERFACE_INCLUDE_DIRECTORIES. Possible reasons include:
The path was deleted, renamed, or moved to another location.
An install or uninstall procedure did not complete successfully.
The installation package was faulty and references files it does not
provide.
CMake Error in CMakeLists.txt:
Imported target "g2o::solver_eigen" includes non-existent path
"/usr/local/include/g2o/solver_eigen"
in its INTERFACE_INCLUDE_DIRECTORIES. Possible reasons include:
The path was deleted, renamed, or moved to another location.
An install or uninstall procedure did not complete successfully.
The installation package was faulty and references files it does not
provide.
`
Hi does this mapping framework provide output data to be used for Navigation Stack2 consumption?
In Nav2, it is used nav_msgs/OccupancyGrid map, if I am not wrong (Arrays from 0 to 100 to assign occupancy).
This framework provides: /map_array(lidarslam_msgs/MapArray) and /modified_map (sensor_msgs/PointCloud2)
Is there some available pkg to integrate this map to NAV2 Slam-toolbox usage?
Another question is if this mapping manner is more reliable and efficient than using occupancyGrid map. My application is also outdoor off-road. For this reason, it seems more reasonable to use this lidarslam_ros2 toolbox, it seems more faithful to the mapped environment. But I am not sure how to use it alongside NAV2.
I will be thankful for any hint (application pkg example) in this regard.
Hi,
How performant is this? E.g. can I run this on a mobile CPU like found on a NUC or would you require an automotive grade processing power for autonomous driving? Any metrics here would be helpful.
Additionally, have you done any reliability testing to know how large of maps it can handle before having problems or edge cases? Any comparison you can make to HDL from their datasets (or any of your other projects)?
I've taken a brief look over some of your github project; these all look very impressive. So many localization and slam projects, I can hardly tell which is better / newer / stronger / reliable 😉. Some metrics would be great to tell if these are good options for use. I can say the ROS community and general open-source community has a current lack in high-quality 6D localization and SLAM solutions and these all look interesting at least from the readme pictures.
(PS, you're also missing a license)
Steve
Dear @rsasaki0109,
Should I follow the IMU guide given in: https://github.com/TixiaoShan/LIO-SAM#prepare-imu-data?
I ask this since I assume I dont need to prepare the lidar data as such: https://github.com/TixiaoShan/LIO-SAM#prepare-lidar-data as pointCloud2 data does not carry ring numbers.
I assume that I can simply make sure myself that the axis of the IMU data align with the axis of the lidar? Or should the output of the IMU be identical to the axis of the IMU image? With all the axis modifications as mentioned?
Does the imu data have to contain RAW acceleration data? (incl. gravity) and do i need to compute a covariance matrix?
Last question: How can it be that the modules start running when I specify use_imu: True at moments when i am not launching the IMU? Shouldnt it wait for imu messages to come in before starting?
Im not able to get reliable performance yet. It jumps all over the place. But am hopeful.
Greetings and thank you for your time,
Deniz
hello, do you have saved map data?
Hello rsasaki0109
I'm using the lidarslam_ros2 with Livox MID-360, but /map topic will not be displayed properly in rviz2.
I tried to modify some parameters of lidarslam.launch.py in order to use MID-360, but I couldn't get a good result.
The modified parameters are shown as follows.
mapping = launch_ros.actions.Node( package='scanmatcher', executable='scanmatcher_node', parameters=[main_param_dir], remappings=[('/input_cloud','/livox/lidar')], output='screen' ) tf = launch_ros.actions.Node( package='tf2_ros', executable='static_transform_publisher', arguments=['0','0','0','0','0','0','1','base_link','livox_frame'] )
I would like you to give me some advice to solve the above issue.
Best regards
Required Info:
(1) I build this framework following the tutorial in the README.md.
(2) I tried running the demo and the problem occured.
The input dataset provided by the demo is in the .bag file format, but ros2 only provides access to the .sqlite3 file format. Even if the rosbag2 plugin is installed, the .sqlite file still cannot be read. Framework testing cannot continue.
I am very interested in how you read the .bag file in ros2. Can you provide the system version and ros version, or other solutions? Thanks~
Hello,
I have a question regarding the slam algorithm. For this package to work, does it take in raw Lidar data? Or does it take in point clouds that has already been filtered?
Hi, I'm trying to "colcon build" your humble package that I got from your github. When I try building theapplication I get this error + a lot of code errors as well. Is this code optimized for humble and if so what am I doing wrong since I just cloned the github humble repo.
Version: Ubuntu 22.04, Humble.
Steps that I took in this process:
Hi,
thank you for your repo !
I have some trouble when launching lidarslam
:
the /map pointcloud is in an " " frame rather than the map frame (that exists).
I guess this comes from the scanmatcher but cannot figure out how to correct it.
/path
is working correctly
I get no output on /modified_*
using debug mode on graphbasedslam does not help
The last message I get from logs is from the scan_matcher: create a first map
.
I get a single map from it
Do you have any idea about what I am doing wrong ?
Here is the param file I am using :
scan_matcher:
ros__parameters:
global_frame_id: "map"
robot_frame_id: "myrobot"
registration_method: "NDT"
ndt_resolution: 5.0
ndt_num_threads: 0
gicp_corr_dist_threshold: 5.0
trans_for_mapupdate: 1.5
vg_size_for_input: 0.2
vg_size_for_map: 0.05
use_min_max_filter: true
scan_min_range: 1.0
scan_max_range: 100.0
scan_period: 0.1
map_publish_period: 15.0
num_targeted_cloud: 10
set_initial_pose: true
initial_pose_x: 0.0
initial_pose_y: 0.0
initial_pose_z: 0.0
initial_pose_qx: 0.0
initial_pose_qy: 0.0
initial_pose_qz: 0.0
initial_pose_qw: 1.0
publish_tf: true
use_imu: false
use_odom: false
debug_flag: false
graph_based_slam:
ros__parameters:
registration_method: "NDT"
ndt_resolution: 5.0
ndt_num_threads: 0
voxel_leaf_size: 0.2
loop_detection_period: 3000
threshold_loop_closure_score: 0.7
distance_loop_closure: 100.0
range_of_searching_loop_closure: 20.0
search_submap_num: 2
num_adjacent_pose_cnstraints: 5
use_save_map_in_loop: true
debug_flag: false
Modified launch file
def generate_launch_description():
main_param_dir = launch.substitutions.LaunchConfiguration(
"main_param_dir",
default=os.path.join(
get_package_share_directory("lidarslam"),
"param",
"lidarslam-myrobot.yml",
),
)
mapping = launch_ros.actions.Node(
package="scanmatcher",
executable="scanmatcher_node",
parameters=[main_param_dir],
remappings=[("/input_cloud", "/ouster/points")],
output="screen",
)
# tf = launch_ros.actions.Node(
# package="tf2_ros",
# executable="static_transform_publisher",
# arguments=[
# "0",
# "0",
# "0",
# "0",
# "0",
# "0",
# "1",
# "myrobot",
# "os_sensor",
# ],
# )
graphbasedslam = launch_ros.actions.Node(
package="graph_based_slam",
executable="graph_based_slam_node",
parameters=[main_param_dir],
output="screen",
)
return launch.LaunchDescription(
[
launch.actions.DeclareLaunchArgument(
"main_param_dir",
default_value=main_param_dir,
description="Full path to main parameter file to load",
),
mapping,
# tf,
graphbasedslam,
]
)
Dear Mr. Rsasaki,
I have some question regarding the pose that publish by scanmatching node. I have been thinking about the relation between the limitation and constraint in translation "Z", orientation "pitch", orientation "roll" with the final pose SLAM output result.
If there is a limit in selected particular movement, can it help to improve the overall SLAM performance.
to put the constraint in "z" is possible but not with the "pitch" and "roll". I try to convert this line of quaternion into a rotation matrix again.
line 386 to line 394 (scanmatching component.cpp) void publishMapAndPose
geometry_msgs::msg::TransformStamped transform_stamped;
transform_stamped.header.stamp = stamp;
transform_stamped.header.frame_id = global_frame_id_;
transform_stamped.child_frame_id = robot_frame_id_;
transform_stamped.transform.translation.x = position.x();
transform_stamped.transform.translation.y = position.y();
transform_stamped.transform.translation.z = position.z();
transform_stamped.transform.rotation = quat_msg;
broadcaster_.sendTransform(transform_stamped);
the question is, it is possible? I hope you can give some opinion. Thank you.
Hi,
I am trying to echo the map_array topic to get som more information about it. But i get the following error message:
Traceback (most recent call last):
File "/opt/ros/foxy/bin/ros2", line 11, in <module>
load_entry_point('ros2cli==0.9.11', 'console_scripts', 'ros2')()
File "/opt/ros/foxy/lib/python3.8/site-packages/ros2cli/cli.py", line 67, in main
rc = extension.main(parser=parser, args=args)
File "/opt/ros/foxy/lib/python3.8/site-packages/ros2topic/command/topic.py", line 41, in main
return extension.main(args=args)
File "/opt/ros/foxy/lib/python3.8/site-packages/ros2topic/verb/echo.py", line 71, in main
return main(args)
File "/opt/ros/foxy/lib/python3.8/site-packages/ros2topic/verb/echo.py", line 86, in main
message_type = get_msg_class(node, args.topic_name, include_hidden_topics=True)
File "/opt/ros/foxy/lib/python3.8/site-packages/ros2topic/api/__init__.py", line 99, in get_msg_class
msg_class = _get_msg_class(node, topic, include_hidden_topics)
File "/opt/ros/foxy/lib/python3.8/site-packages/ros2topic/api/__init__.py", line 144, in _get_msg_class
return get_message(message_type)
File "/opt/ros/foxy/lib/python3.8/site-packages/rosidl_runtime_py/utilities.py", line 28, in get_message
interface = import_message_from_namespaced_type(get_message_namespaced_type(identifier))
File "/opt/ros/foxy/lib/python3.8/site-packages/rosidl_runtime_py/import_message.py", line 30, in import_message_from_namespaced_type
module = importlib.import_module(
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'lidarslam_msgs'
I cant find the msg type in the interface list either.. I am kind of new to ROS, is there something I am missing?
Hello, after I successfully completed the requirements to build steps, I encountered the fault that is below in the last step which is for using to build. What should I do?
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
user@ubuntu:~/ros2_ws$ colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
Starting >>> lidarslam_msgs
Starting >>> ndt_omp_ros2
Finished <<< lidarslam_msgs [0.72s]
--- stderr: ndt_omp_ros2
CMake Error at CMakeLists.txt:23 (find_package):
Could not find a configuration file for package "PCL" that is compatible
with requested version "1.12".
The following configuration files were considered but not accepted:
/usr/share/pcl-1.8/PCLConfig.cmake, version: 1.8.0
make: *** [Makefile:370: cmake_check_build_system] Error 1
---
Failed <<< ndt_omp_ros2 [0.96s, exited with code 2]
Summary: 1 package finished [1.23s]
1 package failed: ndt_omp_ros2
1 package had stderr output: ndt_omp_ros2
3 packages not processed
Hi @rsasaki0109!
Is it possible to use your 3D mapping with the mobile manipulator with the 3D depth camera on it?
Screencast from 09.06.2023 21:17:49.webm
The base_link
is the base of the platform. For this video the odom is static. The platform is not moving.
Also got errors:
[scanmatcher_node-1] Failed to find match for field 'intensity'.
[scanmatcher_node-1] Failed to find match for field 'intensity'.
[scanmatcher_node-1] Failed to find match for field 'intensity'.
[scanmatcher_node-1] Failed to find match for field 'intensity'.
[scanmatcher_node-1] Failed to find match for field 'intensity'.
[scanmatcher_node-1] Failed to find match for field 'intensity'.
Hi!
I just want to ask if I can edit or remove unwanted data from the point cloud data. Are there any tools for that?
Lidarslam_ros2 is working great for us, thank you for that!
But when moving outside, there are moments, when lidarslam looses its track and especially when returning to the same point the build map is wrong. (as in picture below)
Therefore, we wanted to add odometry. When doing that, is lidarslam then relying on the provided odometry for 100% or is it just complementary
?
I am encountering an issue where no data is being published to the /map topic.
Below are the details of my setup and the steps I have taken so far:
Environment:
ROS2 Version: Humble
Simulator: Webots
Visualization: Foxglove
System: Ubuntu 22.04 on Docker
Middleware: rmw_fastrtps_cpp
Issue Description:
The /map topic is visible, and ros2 topic list shows it as existing. However, ros2 topic echo /map reveals that no data is being published.
I am not using Velodyne lidar - I don't think this is a requirement.
Might be a middleware issue, but when I runros2 doctor
and ros2 doctor -r
, everything looks fine.
The lidarslam_ros2 node appears to be running without any apparent issues. (Log below)
ros2 launch lidarslam lidarslam.launch.py
[INFO] [launch]: All log files can be found below /root/.ros/log/2023-12-02-00-27-20-850854-72f875f9b2f4-23672
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [scanmatcher_node-1]: process started with pid [23708]
[INFO] [static_transform_publisher-2]: process started with pid [23710]
[INFO] [graph_based_slam_node-3]: process started with pid [23712]
[static_transform_publisher-2] [WARN] [1701476840.895559210] []: Old-style arguments are deprecated; see --help for new-style arguments
[static_transform_publisher-2] [INFO] [1701476840.903340210] [static_transform_publisher_dIfNbir1rGlI9JHN]: Spinning until stopped - publishing transform
[static_transform_publisher-2] translation: ('0.000000', '0.000000', '0.000000')
[static_transform_publisher-2] rotation: ('0.000000', '0.000000', '0.000000', '1.000000')
[static_transform_publisher-2] from 'base_link' to 'velodyne'
[scanmatcher_node-1] registration_method:NDT
[scanmatcher_node-1] ndt_resolution[m]:2
[scanmatcher_node-1] ndt_num_threads:2
[scanmatcher_node-1] gicp_corr_dist_threshold[m]:5
[scanmatcher_node-1] trans_for_mapupdate[m]:1.5
[scanmatcher_node-1] vg_size_for_input[m]:0.5
[scanmatcher_node-1] vg_size_for_map[m]:0.1
[scanmatcher_node-1] use_min_max_filter:true
[scanmatcher_node-1] scan_min_range[m]:1
[scanmatcher_node-1] scan_max_range[m]:200
[scanmatcher_node-1] set_initial_pose:true
[scanmatcher_node-1] publish_tf:true
[scanmatcher_node-1] use_odom:false
[scanmatcher_node-1] use_imu:false
[scanmatcher_node-1] scan_period[sec]:0.2
[scanmatcher_node-1] debug_flag:true
[scanmatcher_node-1] map_publish_period[sec]:15
[scanmatcher_node-1] num_targeted_cloud:20
[scanmatcher_node-1] ------------------
[scanmatcher_node-1] [INFO] [1701476840.913879376] [scan_matcher]: initialize Publishers and Subscribers
[scanmatcher_node-1] [INFO] [1701476840.915610793] [scan_matcher]: initialization end
[graph_based_slam_node-3] [INFO] [1701476840.934688085] [graph_based_slam]: initialization start
[graph_based_slam_node-3] registration_method:NDT
[graph_based_slam_node-3] voxel_leaf_size[m]:0.1
[graph_based_slam_node-3] ndt_resolution[m]:1
[graph_based_slam_node-3] ndt_num_threads:2
[graph_based_slam_node-3] loop_detection_period[Hz]:3000
[graph_based_slam_node-3] threshold_loop_closure_score:0.7
[graph_based_slam_node-3] distance_loop_closure[m]:100
[graph_based_slam_node-3] range_of_searching_loop_closure[m]:20
[graph_based_slam_node-3] search_submap_num:2
[graph_based_slam_node-3] num_adjacent_pose_cnstraints:5
[graph_based_slam_node-3] use_save_map_in_loop:true
[graph_based_slam_node-3] debug_flag:true
[graph_based_slam_node-3] ------------------
[graph_based_slam_node-3] [INFO] [1701476840.934871710] [graph_based_slam]: initialize Publishers and Subscribers
[graph_based_slam_node-3] [INFO] [1701476840.936463085] [graph_based_slam]: initialization end
ros2 node list correctly outputs graph_based_slam
node and scan_matcher
node:
ros2 node list
/Ros2Supervisor/Ros2Supervisor
/TurtleBot3Burger
/controller_manager
/diffdrive_controller
/foxglove_bridge
/foxglove_bridge_component_manager
/graph_based_slam
/joint_state_broadcaster
/robot_state_publisher
/scan_matcher
/static_transform_publisher_dIfNbir1rGlI9JHN
/static_transform_publisher_vc2cCkVSG7m3Rf60
/transform_listener_impl_aaaadaa2a1e8
/transform_listener_impl_aaaadf109cd8
Output from ros2 topic list
ros2 topic list
/Ros2Supervisor/remove_node
/TurtleBot3Burger/compass/bearing
/TurtleBot3Burger/compass/north_vector
/clicked_point
/clock
/cmd_vel
/current_pose
/diffdrive_controller/transition_event
/dynamic_joint_states
/imu
/initial_pose
/initialpose
/joint_state_broadcaster/transition_event
/joint_states
/map
/map_array
/modified_map
/modified_map_array
/modified_path
/move_base_simple/goal
/odom
/parameter_events
/path
/remove_urdf_robot
/robot_description
/rosout
/scan
/scan/point_cloud
/tf
/tf_static
/velodyne_points
Troubleshooting Steps Taken:
I checked that there is a publisher on the /map topic
ros2 topic info /map -v
Type: sensor_msgs/msg/PointCloud2
Publisher count: 1
Node name: scan_matcher
Node namespace: /
Topic type: sensor_msgs/msg/PointCloud2
Endpoint type: PUBLISHER
GID: 01.0f.56.e7.9c.5c.44.26.01.00.00.00.00.00.1b.03.00.00.00.00.00.00.00.00
QoS profile:
Reliability: RELIABLE
History (Depth): UNKNOWN
Durability: VOLATILE
Lifespan: Infinite
Deadline: Infinite
Liveliness: AUTOMATIC
Liveliness lease duration: Infinite
Any help would be appreciated. Thank you in advance.
Hi Sasaki san
I am very new to SLAM with LIDARs.
Please let me know that is this repository is compatible with another 3D-LIDAR or only Velodyne LIDAR is supported.
By the way I have Surestar R-Fans-16 3D LIDAR.
I am able to see in lidarslam.launch.py it is mentioned for velodyne.
If I have to use another LIDAR,is it possible to use it with your repository.
Please confirm.
Looking forward to hear from you soon.
Thanks
Hi, First ,Thanks for your great work! Why does g2o fix the latest pose instead of the first pose, what is the difference between them? Looking forward to your reply。 thanks。
OS: Pop!_OS 22.04 (ubuntu 22.04)
ROS: humble
Hi, I got an issue while building the package:
Could not find a package configuration file provided by "g2o" with any of
the following names:
g2oConfig.cmake
g2o-config.cmake
After I installed the g2o lib(https://github.com/RainerKuemmerle/g2o), and try to build again, it then reports:
Starting >>> scanmatcher
--- stderr: graph_based_slam
** WARNING ** io features related to pcap will be disabled
CMake Error at /usr/local/lib/cmake/g2o/modules/FindSuiteSparse.cmake:182 (message):
Failed to find SuiteSparse - Did not find AMD header (required SuiteSparse
component).
Call Stack (most recent call first):
/usr/local/lib/cmake/g2o/modules/FindSuiteSparse.cmake:232 (suitesparse_report_not_found)
/usr/local/lib/cmake/g2o/modules/FindSuiteSparse.cmake:323 (suitesparse_find_component)
/usr/share/cmake-3.22/Modules/CMakeFindDependencyMacro.cmake:47 (find_package)
/usr/local/lib/cmake/g2o/g2oConfig.cmake:7 (find_dependency)
CMakeLists.txt:38 (find_package)
What could be the reason for this error?
Hello,
the installation of the package went very smoothly and without problems.
But when i try to test it, with my ros2-bag, i got the following error only after i started to publish the data from the bag:
System: ubuntu 20.04
Ros: Foxy
Arm64 Architecture
I was working with the scanmatcher a few months ago and i didnt get any error like this with the tested ros_bags.
Do you know how i can get solve this problem?
If you need more information just ask.
Best
Lukas
Hello,
README says "scan period of input cloud[sec](If you want to compound imu, you need to change this parameter.)". I couldn't understand how to change this parameter, should it be the same as imu message's period or what should it be?
Thank you.
Hello, is it possible to extract map->odom transform with a few changes?
Hello,
i want to build the package lidarslam_ros2 on Ubuntu 20.04 (Focal Fossa) with ndt_omp_ros2 and g2o installed but i get the following error:
/home/christoph/IAC/mod_map_loc/LiDAR_SLAM/lidarslam_test_build/lidarslam_ros2/src/scanmatcher/src/scanmatcher_component.cpp:488:32: error: no matching function for call to ‘rclcpp::Publisher<sensor_msgs::msg::PointCloud2_<std::allocator<void> > >::publish(sensor_msgs::msg::PointCloud2_<std::allocator<void> >::Ptr&)’ 488 | map_pub_->publish(map_msg_ptr);
I am using PCL 1.10 because of Ubuntu 20.04.
Thanks for sharing. I read your code carefully and found that you use submap. This idea is very good. Unfortunately, the front-end and back-end are not completely decoupled. I don't know why? Can it be improved further? Using cartographer's submap idea
I am using ROS Foxy.
I've followed the steps described for cloning the repository in the readme.md file but when I colcon build
my workspace i always get the following issue:
`--- stderr: ndt_omp_ros2
CMake Error at CMakeLists.txt:23 (find_package):
Could not find a configuration file for package "PCL" that is compatible
with requested version "1.12".
The following configuration files were considered but not accepted:
/usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake, version: 1.10.0
/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake, version: 1.10.0
I tried to upgrade my PCL version to 1.12 but it doesn't seem to do the trick. I tried to download the repository as a zip and then run the
git submodule update --init --recursiveinside the package but it just gave me a longer series of g2o errors:
--- stderr: graph_based_slam
** WARNING ** io features related to pcap will be disabled
** WARNING ** io features related to png will be disabled
** WARNING ** io features related to libusb-1.0 will be disabled
CMake Warning (dev) at /usr/share/cmake-3.16/Modules/FindOpenGL.cmake:275 (message):
Policy CMP0072 is not set: FindOpenGL prefers GLVND by default when
available. Run "cmake --help-policy CMP0072" for policy details. Use the
cmake_policy command to set the policy and suppress this warning.
FindOpenGL found both a legacy GL library:
OPENGL_gl_LIBRARY: /usr/lib/x86_64-linux-gnu/libGL.so
and GLVND libraries for OpenGL and GLX:
OPENGL_opengl_LIBRARY: /usr/lib/x86_64-linux-gnu/libOpenGL.so
OPENGL_glx_LIBRARY: /usr/lib/x86_64-linux-gnu/libGLX.so
OpenGL_GL_PREFERENCE has not been set to "GLVND" or "LEGACY", so for
compatibility with CMake 3.10 and below the legacy GL library will be used.
Call Stack (most recent call first):
/usr/share/cmake-3.16/Modules/CMakeFindDependencyMacro.cmake:47 (find_package)
/usr/local/lib/cmake/g2o/g2oConfig.cmake:4 (find_dependency)
CMakeLists.txt:33 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.
In file included from /usr/local/include/g2o/core/sparse_block_matrix.h:43,
from /usr/local/include/g2o/core/sparse_optimizer.h:34,
from /home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/include/graph_based_slam/graph_based_slam_component.h:75,
from /home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/src/graph_based_slam_component.cpp:1:
/usr/local/include/g2o/core/matrix_structure.h:57:19: error: ‘std::string_view’ has not been declared
57 | bool write(std::string_view filename) const;
| ^~~~~~~~~~~
In file included from /usr/local/include/g2o/core/base_fixed_sized_edge.h:39,
from /usr/local/include/g2o/core/base_binary_edge.h:30,
from /usr/local/include/g2o/types/slam3d/edge_se3.h:30,
from /home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/include/graph_based_slam/graph_based_slam_component.h:83,
from /home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/src/graph_based_slam_component.cpp:1:
/usr/local/include/g2o/stuff/tuple_tools.h: In function ‘void g2o::tuple_apply_i(F&&, T&, int)’:
/usr/local/include/g2o/stuff/tuple_tools.h:41:46: error: ‘tuple_size_v’ is not a member of ‘std’; did you mean ‘tuple_size’?
41 | f, t, i, std::make_index_sequence<std::tuple_size_v<std::decay_t>>());
| ^~~~~~~~~~~~
| tuple_size
/usr/local/include/g2o/stuff/tuple_tools.h:41:46: error: ‘tuple_size_v’ is not a member of ‘std’; did you mean ‘tuple_size’?
41 | f, t, i, std::make_index_sequence<std::tuple_size_v<std::decay_t>>());
| ^~~~~~~~~~~~
| tuple_size
/usr/local/include/g2o/stuff/tuple_tools.h:41:73: error: template argument 1 is invalid
41 | f, t, i, std::make_index_sequence<std::tuple_size_v<std::decay_t>>());
| ^~
/usr/local/include/g2o/stuff/tuple_tools.h:41:77: error: expected primary-expression before ‘)’ token
41 | f, t, i, std::make_index_sequence<std::tuple_size_v<std::decay_t>>());
| ^
/home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/src/graph_based_slam_component.cpp: In member function ‘void graphslam::GraphBasedSlamComponent::doPoseAdjustment(lidarslam_msgs::msg::MapArray, bool)’:
/home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/src/graph_based_slam_component.cpp:272:10: error: ‘make_unique’ is not a member of ‘g2o’; did you mean ‘std::make_unique’?
272 | g2o::make_unique<g2o::LinearSolverEigeng2o::BlockSolver_6_3::PoseMatrixType>();
| ^~~~~~~~~~~
In file included from /usr/include/c++/9/memory:80,
from /opt/ros/foxy/include/rclcpp/rclcpp.hpp:144,
from /home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/include/graph_based_slam/graph_based_slam_component.h:42,
from /home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/src/graph_based_slam_component.cpp:1:
/usr/include/c++/9/bits/unique_ptr.h:868:5: note: ‘std::make_unique’ declared here
868 | make_unique(_Args&&...) = delete;
| ^~~~~~~~~~~
/home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/src/graph_based_slam_component.cpp:272:81: error: expected primary-expression before ‘>’ token
272 | g2o::make_unique<g2o::LinearSolverEigeng2o::BlockSolver_6_3::PoseMatrixType>();
| ^~
/home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/src/graph_based_slam_component.cpp:272:84: error: expected primary-expression before ‘)’ token
272 | g2o::make_unique<g2o::LinearSolverEigeng2o::BlockSolver_6_3::PoseMatrixType>();
| ^
/home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/src/graph_based_slam_component.cpp:274:10: error: ‘make_unique’ is not a member of ‘g2o’; did you mean ‘std::make_unique’?
274 | g2o::make_uniqueg2o::BlockSolver_6_3(std::move(linear_solver)));
| ^~~~~~~~~~~
In file included from /usr/include/c++/9/memory:80,
from /opt/ros/foxy/include/rclcpp/rclcpp.hpp:144,
from /home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/include/graph_based_slam/graph_based_slam_component.h:42,
from /home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/src/graph_based_slam_component.cpp:1:
/usr/include/c++/9/bits/unique_ptr.h:868:5: note: ‘std::make_unique’ declared here
868 | make_unique(_Args&&...) = delete;
| ^~~~~~~~~~~
/home/nadimdib/ros2_3D/src/lidarslam_ros2/graph_based_slam/src/graph_based_slam_component.cpp:274:42: error: expected primary-expression before ‘>’ token
274 | g2o::make_uniqueg2o::BlockSolver_6_3(std::move(linear_solver)));
| ^
make[2]: *** [CMakeFiles/graph_based_slam_component.dir/build.make:63: CMakeFiles/graph_based_slam_component.dir/src/graph_based_slam_component.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:107: CMakeFiles/graph_based_slam_component.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
---`
Hi
I'm trying to install the graph_based_slam_node
Colcon keeps on failing due to opengl dependency. I tried installing the opengl libaray, nothing helped.
Here is how I run the colcon command -
colcon build --symlink-install --parallel-workers 12 --ament-cmake-args -DPYTHON_EXECUTABLE=$MY_PYTHON_ENV -DCMAKE_BUILD_TYPE=Release
`CMake Error at CMakeLists.txt:69 (add_executable):
Target graph_based_slam_node links to target OpenGL::GL but the target
was not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
CMake Error at CMakeLists.txt:69 (add_executable):
Target graph_based_slam_node links to target OpenGL::GLU but the target
was not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?`
Excuse me. I build the lidarslam_ros2 done. A problem occured when i run the command $ ros2 launch lidarslam lidarslam.launch.py. The information is as followed.
[ERROR] [launch]: Caught exception in launch (see debug for traceback): Caught exception when trying to load file of format [py]: init() missing 1 required keyword-only argument: 'node_executable'
System: ubuntu 18.04
ros version: ros1 melodic + ros2 eloquent
How can i solve this problem? Thank u~
Will this package work with shitty LiDARs like RPLidar s1 if I will convert the output to PointCloud2 and follow the LiDAR data preparation?
I am testing the nodes with point clouds coming from a Robosense RS16, but the nodes keep crashing randomly without any error message. It just stops and I can't figure why.
Is this behavior normal or am I missing something ?
Everything going smooth with lidar alone mapping , but when set use_imu: true
,and publish IMU topic with 200HZ, Lidar 10HZ, i got error like below:
ros2 launch lidarslam lidarslam_tukuba.launch.py
[INFO] [launch]: All log files can be found below /home/david/.ros/log/2022-04-27-22-21-37-612097-david-pc-1003649
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [scanmatcher_node-1]: process started with pid [1003651]
[INFO] [static_transform_publisher-2]: process started with pid [1003653]
[INFO] [graph_based_slam_node-3]: process started with pid [1003655]
[static_transform_publisher-2] [INFO] [1651069297.746841314] [static_transform_publisher_Bp2zNgpNGCEbeiRh]: Spinning until killed publishing transform from 'base_link' to 'laser_link'
[scanmatcher_node-1] registration_method:NDT
[scanmatcher_node-1] ndt_resolution[m]:2
[scanmatcher_node-1] ndt_num_threads:1
[scanmatcher_node-1] gicp_corr_dist_threshold[m]:5
[scanmatcher_node-1] trans_for_mapupdate[m]:2
[scanmatcher_node-1] vg_size_for_input[m]:1
[scanmatcher_node-1] vg_size_for_map[m]:0.1
[scanmatcher_node-1] use_min_max_filter:true
[scanmatcher_node-1] scan_min_range[m]:1
[scanmatcher_node-1] scan_max_range[m]:100
[scanmatcher_node-1] set_initial_pose:true
[scanmatcher_node-1] use_odom:false
[scanmatcher_node-1] use_imu:true
[scanmatcher_node-1] scan_period[sec]:0.1
[scanmatcher_node-1] debug_flag:false
[scanmatcher_node-1] map_publish_period[sec]:100
[scanmatcher_node-1] num_targeted_cloud:30
[scanmatcher_node-1] ------------------
[scanmatcher_node-1] [INFO] [1651069297.773546138] [scan_matcher]: initialize Publishers and Subscribers
[scanmatcher_node-1] [INFO] [1651069297.781154965] [scan_matcher]: initialization end
[graph_based_slam_node-3] [INFO] [1651069297.788144665] [graph_based_slam]: initialization start
[graph_based_slam_node-3] registration_method:NDT
[graph_based_slam_node-3] voxel_leaf_size[m]:0.2
[graph_based_slam_node-3] ndt_resolution[m]:5
[graph_based_slam_node-3] ndt_num_threads:3
[graph_based_slam_node-3] loop_detection_period[Hz]:5000
[graph_based_slam_node-3] threshold_loop_closure_score:2.5
[graph_based_slam_node-3] distance_loop_closure[m]:100
[graph_based_slam_node-3] range_of_searching_loop_closure[m]:20
[graph_based_slam_node-3] search_submap_num:4
[graph_based_slam_node-3] num_adjacent_pose_cnstraints:5
[graph_based_slam_node-3] use_save_map_in_loop:true
[graph_based_slam_node-3] ------------------
[graph_based_slam_node-3] [INFO] [1651069297.788516988] [graph_based_slam]: initialize Publishers and Subscribers
[graph_based_slam_node-3] [INFO] [1651069297.791048893] [graph_based_slam]: initialization end
[scanmatcher_node-1] [INFO] [1651069301.453226030] [scan_matcher]: create a first map
[scanmatcher_node-1] [pcl::NormalDistributionsTransform::setInputTarget] Invalid or empty point cloud dataset given!
[scanmatcher_node-1] [pcl::VoxelGridCovariance::applyFilter] No input dataset given!
[scanmatcher_node-1] [pcl::registration::NormalDistributionsTransform::compute] No input target dataset was given!
[scanmatcher_node-1] [pcl::registration::NormalDistributionsTransform::compute] No input target dataset was given!
[scanmatcher_node-1] [pcl::registration::NormalDistributionsTransform::compute] No input target dataset was given!
[scanmatcher_node-1] [pcl::registration::NormalDistributionsTransform::compute] No input target dataset was given!
[scanmatcher_node-1] [pcl::registration::NormalDistributionsTransform::compute] No input target dataset was given!
[scanmatcher_node-1] [pcl::registration::NormalDistributionsTransform::compute] No input target dataset was given!
[scanmatcher_node-1] [pcl::registration::NormalDistributionsTransform::compute] No input target dataset was given!
[scanmatcher_node-1] [pcl::registration::NormalDistributionsTransform::compute] No input target dataset was given!
[scanmatcher_node-1] [pcl::registration::NormalDistributionsTransform::compute] No input target dataset was given!
[scanmatcher_node-1] [pcl::registration::NormalDistributionsTransform::compute] No input target dataset was given!
Is there any tricks about intergrate IMU to this project? seems IMU is highly relavant with time, should i sync my IMU's time and Lidar's time strictly, Thanks! looking forward for your replying.
Hi,
Firstly thanks for providing this package, especially in ROS2.
My question is about usage of ideal odometry data (and the corresponding tf) for mapping purposes.
The odometry data I'm using is "ideal" in the sense that its from an RTK system with centimeter accuracy. I'm not using IMU data. However when the pose from the SLAM algorithm is updated with the pose from pointcloud matching, I can see a visible drift at the point of loop closure. So the modified_map that's generated at the end has a visible mismatch at the loop closure point (but the input odometry data is continous, without any jump)
Is there some way to increase the weight of the pose information from the odometry, or some constraint parameter?
Thanks and regards
Hi,
I found each yaml file has no Lidar parameters. Will the test require modifying the Lidar parameters?
E.g. Can I run this using kitti dataset(Velodyne HDL-64E 3D laser scanner) without modifying any parameters?
Looking forward to your reply!
Hi all.
Currently I'm using ROS2 humble, and using LS Lidar C32. I have recorded a pointcloud in a ros bag and try to play it back in our office.
First I run lidarslam. It run as normal
ros2 launch lidarslam lidarslam.launch.py
Next, I run RVIZ2 to visualise the path and modified_path. Also, have no issue.
After running lidarslam and rviz2, I play the ros2 bag. The way I play the ros bag is as following:
ros2 bag play file.bag
After few seconds, the vehicle is moving and now we can see the path.
Suddenly, there is an error occured in lidarslam. The error is as following:
[scanmatcher_node-1] [pcl::VoxelGrid::applyFilter] Leaf size is too small for the input dataset. Integer indices would overflow.
[ERROR] [scanmatcher_node-1]: process has died [pid 121510, exit code -8, cmd '/home/reka/ros2_ws/install/scanmatcher/lib/scanmatcher/scanmatcher_node --ros-args --params-file /home/reka/ros2_ws/install/lidarslam/share/lidarslam/param/lidarslam.yaml -r /input_cloud:=/c32/lslidar_point_cloud'].
Now, the lidarslam is crash. and the path is not moving anymore. Can I know what the reason behind this and how to fix it?
I tried to fix it by increasing the leaf size in params.yaml, but seems not working.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.