Open hwh666 opened 1 year ago
Hi, Following the steps, you can find the "Merge Map":
The reason is that we do not have the "editor" mode, so the "localization" mode is reused.
Currently, LSD read/save the maps in the default path (LSD read the /proc/mounts and find the external disk which is mounted in /media and use it as the default path).
If you want to save/read the maps, you can simulate an external disk by: ''' mount --bind /home/znqc/work/ /media/external/ ''' Then, you can see the external disk in the "home" page.
Hi, Following the steps, you can find the "Merge Map":
- In "Config" => "Device" page, change the work mode to "SLAM" and upload config.
- In the detailed "SLAM" setting which at the left column, change to "Localization" mode and upload config.
- Refresh the editor page, you can see the "Merge Map" option.
The reason is that we do not have the "editor" mode, so the "localization" mode is reused.
Thank you for your answer. The problem has been resolved
Currently, LSD read/save the maps in the default path (LSD read the /proc/mounts and find the external disk which is mounted in /media and use it as the default path).
If you want to save/read the maps, you can simulate an external disk by: ''' mount --bind /home/znqc/work/ /media/external/ ''' Then, you can see the external disk in the "home" page.
Okay, thank you very much for your reminder. Thank you very much for your project
I found this problem before, I set a fixed folder /map_data locally and by modifying the has_extension_disk() function, it was able to do the read and save functions as well,Here is my code
def has_extension_disk():
has_disk = True
disk_name = '/home/znqc/work/map_data'
with open('/proc/mounts') as f:
for v in f:
v = v.split()
mount_name = v[1]
if '/media' in mount_name:
has_disk = True
disk_name = mount_name
break
return has_disk, disk_name
I would like to ask if using a local path would be more convenient and compatible,Or what is the necessity of using a disk for reading and saving
Currently, LSD read/save the maps in the default path (LSD read the /proc/mounts and find the external disk which is mounted in /media and use it as the default path). If you want to save/read the maps, you can simulate an external disk by: ''' mount --bind /home/znqc/work/ /media/external/ ''' Then, you can see the external disk in the "home" page.
Okay, thank you very much for your reminder. Thank you very much for your project
I found this problem before, I set a fixed folder /map_data locally and by modifying the has_extension_disk() function, it was able to do the read and save functions as well,Here is my code
def has_extension_disk(): has_disk = True disk_name = '/home/znqc/work/map_data' with open('/proc/mounts') as f: for v in f: v = v.split() mount_name = v[1] if '/media' in mount_name: has_disk = True disk_name = mount_name break return has_disk, disk_name
I would like to ask if using a local path would be more convenient and compatible,Or what is the necessity of using a disk for reading and saving
We use the external disk to store the data because the LSD can be running on both PC and embedded board like Xavier NX. These embedded boards normally don't have enough storage to save maps.
Hello, when I tested the "Map Merge" function, the two maps were stacked and not aligned
Here is how I tested it: I split a dataset into two parts, build a map of both datasets, and then perform a map merge,These two maps use the same cfg.yaml file
I think the possible reasons: The parameters in the /graph/map_info.txt file are all 0
Here is my log: ---------------------------------start merge Map 2023-05-05 18:39:52.622[433912:433912][map_loader.cpp:114] Localization: meta_file /home/znqc/work/map_data/lp_log/map/nofix2/graph/map_info.txt load graph map origin: 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 mOriginIsSet: false 2023-05-05 18:39:52.634[433912:433912][map_loader.cpp:38] Localization: total 60 key frames 2023-05-05 18:39:52.634[433912:433912][hdl_graph_slam_nodelet.cpp:51] initializing hdl graph nodelet... 2023-05-05 18:39:52.634[433912:433912][graph_slam.cpp:56] construct solver: lm_var
2023-05-05 18:39:52.634[433912:433912][loop_detector.hpp:50] initializing loop detection... 2023-05-05 18:39:52.634[433912:433912][registrations.cpp:57] registration: FAST_VGICP 2023-05-05 18:39:52.634[433912:433912][registrations.cpp:34] registration: FAST_GICP 2023-05-05 18:39:52.634[433912:433912][graph_slam.cpp:355] loading pose graph... 2023-05-05 18:39:52.634[433912:433912][graph_slam.cpp:363] nodes : 60 2023-05-05 18:39:52.634[433912:433912][graph_slam.cpp:364] edges : 59 2023-05-05 18:39:52.634[433912:433912][robust_kernel_io.cpp:138] kernels: 0 2023-05-05 18:39:52.634[433912:433912][hdl_graph_slam_nodelet.cpp:1154] Graph: max_se3_vertex_id 65, max_normal_vertex_id 100000, max_edge_id 79 2023-05-05 18:39:52.635[433912:433912][map_loader.cpp:204] Localization: after resample to 20 key frames 2023-05-05 18:39:52.635[433912:433912][map_loader.cpp:225] Localization: after voxel filter to 16 key frames 2023-05-05 18:39:52.635[433912:433912][map_loader.cpp:75] Merged Map: total 126 key frames ---------------------------------merge Map finish 2023-05-05 18:39:52,645[433912:433912][module_manager.py: 95] system is paused 2023-05-05 18:39:52.759[433912:433912][hdl_graph_slam_nodelet.cpp:286] start wait for flush keyframe queue 2023-05-05 18:39:52.759[433912:433912][hdl_graph_slam_nodelet.cpp:309] flush keyframe queue done 2023-05-05 18:39:52.761[433912:433912][hdl_graph_slam_nodelet.cpp:286] start wait for flush keyframe queue 2023-05-05 18:39:52.761[433912:433912][hdl_graph_slam_nodelet.cpp:309] flush keyframe queue done
Hi,
These two maps are created at the origin of the coordinate (0, 0, 0). So, when you perform map merging, you need to find out the two connected vertices in the maps and add an edge by manually (you can refer this). Then, the pose graph will be optimized automatically and you will see the full aligned map.
In outdoor environment, if the GPS sensor is avaliable, you can specify the origin of the two maps by the same latitude and longitude, then, these two map can be merged easily because they are in the same coordinate system.
hold "CTRL" key and click the vertex to select it
Thank you for your reply. After using manual loopback, it can be aligned
When I open http://localhost/editor When there is no 'merge map' option under the file, I have already pulled the latest library. The following is the output log information at startup
root@dns:/home/znqc/work/lidar-slam-detection# tools/scripts/start_system.sh run server python script dpkg-query: no packages found matching nvidia-l4t-core Running on board: IPC, machine: x86_64, jetpack: 20.04 2023-04-28 09:42:16,937[27174:27174][module_manager.py: 47] pipeline: Source connect to SLAM 2023-04-28 09:42:16,937[27174:27174][module_manager.py: 47] pipeline: SLAM connect to Sink 2023-04-28 09:42:16,937[27174:27174][module_manager.py: 71] start to setup module: SLAM 2023-04-28 09:42:16.937[27174:27182][localization.cpp:13] Localization: release static resources 2023-04-28 09:42:16.937[27174:27182][hdl_graph_slam_nodelet.cpp:122] releasing hdl graph nodelet... 2023-04-28 09:42:16,937[27174:27182][ slam.py: 51] SLAM use sensors: ['IMU', '0-RS-LiDAR-16', 'flir:0'] 2023-04-28 09:42:16,937[27174:27174][module_manager.py: 73] setup module: SLAM, done 2023-04-28 09:42:16,937[27174:27174][module_manager.py: 71] start to setup module: Sink iKD-Tree Multi thread started 2023-04-28 09:42:16.942[27174:27182][prefiltering_nodelet.cpp:39] downsample: VOXELGRID 0.15 2023-04-28 09:42:16.942[27174:27182][prefiltering_nodelet.cpp:78] outlier_removal: NONE 2023-04-28 09:42:16.942[27174:27182][hdl_graph_slam_nodelet.cpp:51] initializing hdl graph nodelet... 2023-04-28 09:42:16.942[27174:27182][graph_slam.cpp:56] construct solver: lm_var
Using CSparse poseDim -1 landMarkDim -1 blockordering 0
2023-04-28 09:42:16.942[27174:27182][loop_detector.hpp:50] initializing loop detection... 2023-04-28 09:42:16.942[27174:27182][registrations.cpp:57] registration: FAST_VGICP 2023-04-28 09:42:16.942[27174:27182][registrations.cpp:34] registration: FAST_GICP 2023-04-28 09:42:16,950[27188:27188][sink_template.py: 58] deamon UdpSink starts 2023-04-28 09:42:16,950[27174:27174][module_manager.py: 73] setup module: Sink, done 2023-04-28 09:42:16,950[27174:27174][module_manager.py: 71] start to setup module: Source 2023-04-28 09:42:16,954[27174:27174][player_data_manager.py:135] /home/znqc/work/slam_mapping_demo 2023-04-28 09:42:16,954[27174:27174][player_data_manager.py:136] player have 1942 frames, duration 194.099473 s