laxnpander / OpenREALM

OpenREALM is a pipeline for real-time aerial mapping utilizing visual SLAM and 3D reconstruction frameworks.
GNU Lesser General Public License v2.1
443 stars 114 forks source link

Run alex_reco.lanuch, can't get ply file #86

Closed peakpang closed 1 year ago

peakpang commented 1 year ago

Hi, thank you very much for open sourcing this project. Run alex_reco.lanuch, I have refer to issue 81, set save_dense_ply option to 1. But in /mosaicing/elevation/ply, I also can't find the ply file. I suspect that it is caused by the following error, if so, what solution does the author have? Thank you so much!

[ERROR] [1685621030.485793789]: PluginlibFactory: The plugin for class 'rviz_plugins/AerialMapDisplay' failed to load. Error: According to the loaded plugin descriptions the class rviz_plugins/AerialMapDisplay with base class type rviz::Display does not exist. Declared types are realm_rviz_plugin/GroundImage rviz/AccelStamped rviz/Axes rviz/Camera rviz/DepthCloud rviz/Effort rviz/FluidPressure rviz/Grid rviz/GridCells rviz/Illuminance rviz/Image rviz/InteractiveMarkers rviz/LaserScan rviz/Map rviz/Marker rviz/MarkerArray rviz/Odometry rviz/Path rviz/PointCloud rviz/PointCloud2 rviz/PointStamped rviz/Polygon rviz/Pose rviz/PoseArray rviz/PoseWithCovariance rviz/Range rviz/RelativeHumidity rviz/RobotModel rviz/TF rviz/Temperature rviz/TwistStamped rviz/WrenchStamped

If it is caused by other reasons, you can refer to the following complete output: Sincerely hope to get your help!

`SUMMARY

PARAMETERS

NODES / realm_densification (realm_ros/realm_stage_node) realm_exiv2_grabber (realm_ros/realm_exiv2_grabber) realm_mosaicing (realm_ros/realm_stage_node) realm_ortho_rectification (realm_ros/realm_stage_node) realm_pose_estimation (realm_ros/realm_stage_node) realm_surface_generation (realm_ros/realm_stage_node) rviz (rviz/rviz)

auto-starting new master process[master]: started with pid [213155] ROS_MASTER_URI=http://localhost:11311

setting /run_id to 5d22e3a6-0074-11ee-a3a2-6b780e5a7741 process[rosout-1]: started with pid [213291] started core service [/rosout] process[realm_exiv2_grabber-2]: started with pid [213298] process[realm_pose_estimation-3]: started with pid [213299] process[realm_densification-4]: started with pid [213300] process[realm_surface_generation-5]: started with pid [213301] process[realm_ortho_rectification-6]: started with pid [213302] process[realm_mosaicing-7]: started with pid [213303] process[rviz-8]: started with pid [213316] [ INFO] [1685621028.738182518]: STAGE_NODE [pose_estimation]: Loading stage settings from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/pose_estimation/stage_settings.yaml [ INFO] [1685621028.739728435]: STAGE_NODE [pose_estimation]: Detected stage type: 'pose_estimation' [ INFO] [1685621028.746025538]: STAGE_NODE [pose_estimation]: : Loading camera from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/camera/calib.yaml [ INFO] [1685621028.746227456]: STAGE_NODE [pose_estimation]: : Detected camera model: 'pinhole' [ INFO] [1685621028.746254259]: STAGE_NODE [pose_estimation]: : Loading vslam settings from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/pose_estimation/method/open_vslam_settings.yaml [ INFO] [1685621028.746357629]: STAGE_NODE [pose_estimation]: : Detected vslam type: 'OPEN_VSLAM' 2023-06-01 20:03:48.746 ( 0.079s) [ C6C0C000] pose_estimation.cpp:40 0| Stage [pose_estimation]: Created Stage with Settings:

<Param>[save_keyframes]: 0
<Param>[save_frames]: 0
<Param>[overlap_max_fallback]: 95
<Param>[overlap_max]: 100
<Param>[min_nrof_frames_georef]: 3
<Param>[init_lost_frames_reset_count]: 15
<Param>[log_to_file]: 1
<Param>[use_imu]: 0
<Param>[save_trajectory_gnss]: 1
<Param>[queue_size]: 10
<Param>[path_output]: 
<Param>[use_vslam]: 1
<Param>[use_initial_guess]: 0
<Param>[suppress_outdated_pose_pub]: 0
<Param>[save_keyframes_full]: 0
<Param>[save_trajectory_visual]: 1
<Param>[fallback_strategy]: 1
<Param>[set_all_frames_keyframes]: 0
<Param>[update_georef]: 0
<Param>[th_error_georef]: 0.1
<Param>[type]: pose_estimation
<Param>[do_delay_keyframes]: 0

[2023-06-01 20:03:48.747] [info] config file loaded: [ INFO] [1685621028.770622582]: STAGE_NODE [densification]: Loading stage settings from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/densification/stage_settings.yaml [ INFO] [1685621028.772800104]: STAGE_NODE [densification]: Detected stage type: 'densification' [ INFO] [1685621028.781641121]: STAGE_NODE [densification]: : Loading camera from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/camera/calib.yaml [ INFO] [1685621028.781893513]: STAGE_NODE [densification]: : Detected camera model: 'pinhole' [ INFO] [1685621028.781954258]: STAGE_NODE [densification]: : Loading densifier settings from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/densification/method/psl_settings.yaml [ INFO] [1685621028.782192937]: STAGE_NODE [densification]: : Detected densifier type: 'PSL'

[subpx_interp_mode]: 1 [match_cost]: 0 [plane_gen_mode]: 0 [type]: PSL [resizing]: 0.3 [nrof_planes]: 32 [enable_out_uniq_ratio]: 0 [enable_out_best_depth]: 0 [occlusion_mode]: 1 [n_cams]: 3 [enable_subpix]: 1 [enable_out_best_cost]: 0 [enable_out_cost_vol]: 0 [scale]: 1 [match_window_size_x]: 30 [enable_color_match]: 1 [match_window_size_y]: 30 [ INFO] [1685621028.788210486]: STAGE_NODE [densification]: Started stage node successfully! 2023-06-01 20:03:48.788 ( 0.054s) [Stage [densifica] worker_thread_base.cpp:43 0| Thread 'Stage [densification]' starting loop... [ INFO] [1685621028.811641490]: STAGE_NODE [surface_generation]: Loading stage settings from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/surface_generation/stage_settings.yaml [ INFO] [1685621028.813493224]: STAGE_NODE [surface_generation]: Detected stage type: 'surface_generation' [ INFO] [1685621028.822823477]: STAGE_NODE [surface_generation]: : Loading camera from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/camera/calib.yaml [ INFO] [1685621028.823070899]: STAGE_NODE [surface_generation]: : Detected camera model: 'pinhole' [ INFO] [1685621028.825184239]: STAGE_NODE [surface_generation]: Started stage node successfully! 2023-06-01 20:03:48.825 ( 0.045s) [Stage [surface_g] worker_thread_base.cpp:43 0| Thread 'Stage [surface_generation]' starting loop... [ INFO] [1685621028.906621617]: STAGE_NODE [ortho_rectification]: Loading stage settings from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/ortho_rectification/stage_settings.yaml [ INFO] [1685621028.908424667]: STAGE_NODE [ortho_rectification]: Detected stage type: 'ortho_rectification' [ INFO] [1685621028.917576812]: STAGE_NODE [ortho_rectification]: : Loading camera from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/camera/calib.yaml [ INFO] [1685621028.917815197]: STAGE_NODE [ortho_rectification]: : Detected camera model: 'pinhole' Stage [ortho_rectification]: Created Stage with Settings: [save_elevation_angle]: 0 [save_ortho_rgb]: 0 [save_valid]: 0 [publish_pointcloud]: 0 [GSD]: 0.15 [save_elevation]: 0 [path_output]: [save_ortho_gtiff]: 0 [queue_size]: 20 [log_to_file]: 1 [type]: ortho_rectification [ INFO] [1685621028.920717646]: STAGE_NODE [ortho_rectification]: Started stage node successfully! 2023-06-01 20:03:48.920 ( 0.073s) [Stage [ortho_rec] worker_thread_base.cpp:43 0| Thread 'Stage [ortho_rectification]' starting loop... [2023-06-01 20:03:48.954] [info] ___ __ _____ _ _ __ __ / _ \ _ __ ___ _ _\ \ / / __| | /_\ | \/ | | (_) | '_ \/ -_) ' \\ V /\__ \ |__ / _ \| |\/| | \___/| .__/\___|_||_|\_/ |___/____/_/ \_\_| |_| |_| Copyright (C) 2019, National Institute of Advanced Industrial Science and Technology (AIST) All rights reserved. This is free software, and you are welcome to redistribute it under certain conditions. See the LICENSE file. Camera: name: cam model: perspective setup: monocular color_order: RGB fx: 725.4394416 fy: 726.3970548 cx: 366.1941516 cy: 310.1503962 k1: -0.198806 k2: 0.122544 p1: -0.000221 p2: -0.000877 k3: 0 fps: 10 cols: 736 rows: 615 Feature: max_num_keypoints: 2000 ini_max_num_keypoints: 4000 scale_factor: 1.1 num_levels: 12 ini_fast_threshold: 20 min_fast_threshold: 5 Mapping: baseline_dist_thr_ratio: 0.02 [2023-06-01 20:03:48.954] [info] loading ORB vocabulary: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/pose_estimation/method/open_vslam/orb_vocab.fbow [ INFO] [1685621028.962254293]: STAGE_NODE [mosaicing]: Loading stage settings from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/mosaicing/stage_settings.yaml [ INFO] [1685621028.964894691]: STAGE_NODE [mosaicing]: Detected stage type: 'mosaicing' [ INFO] [1685621028.975640120]: Exiv2 Grabber Node [Ankommen]: Successfully loaded camera: cx = 610.324 cy = 516.917 fx = 1209.07 fy = 1210.66 k1 = -0.198806 k2 = 0.122544 p1 = -0.000221 p2 = -0.000877 [ INFO] [1685621028.981957035]: STAGE_NODE [mosaicing]: : Loading camera from path: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/profiles/alexa_reco/camera/calib.yaml [ INFO] [1685621028.982266148]: STAGE_NODE [mosaicing]: : Detected camera model: 'pinhole' Stage [mosaicing]: Created Stage with Settings: [save_num_obs_one]: 1 [save_elevation_obs_angle_all]: 0 [save_elevation_obs_angle_one]: 1 [save_elevation_var_one]: 0 [save_elevation_one]: 1 [save_ortho_gtiff_all]: 0 [save_dense_ply]: 1 [save_num_obs_all]: 0 [save_ortho_gtiff_one]: 1 [type]: mosaicing [log_to_file]: 1 [queue_size]: 100 [downsample_publish_mesh]: 0.5 [th_elevation_min_nobs]: 2 [save_elevation_var_all]: 0 [th_elevation_variance]: 1 [path_output]: [save_elevation_mesh_one]: 0 [publish_mesh_every_nth_kf]: 0 [publish_mesh_at_finish]: 1 [split_gtiff_channels]: 0 [save_elevation_all]: 0 [save_ortho_rgb_one]: 1 [save_valid]: 0 [save_ortho_rgb_all]: 0 [ INFO] [1685621028.987955382]: STAGE_NODE [mosaicing]: Started stage node successfully! 2023-06-01 20:03:48.988 ( 0.087s) [Stage [mosaicing] worker_thread_base.cpp:43 0| Thread 'Stage [mosaicing]' starting loop... [ INFO] [1685621028.994703318]: Scanning input image for provided meta tags... [2023-06-01 20:03:48.995] [info] startup SLAM system [ INFO] [1685621028.995425981]: [FOUND] 'Exif.GPSInfo.GPSAltitude' [ INFO] [1685621028.995464621]: [FOUND] 'Exif.GPSInfo.GPSLatitude' [ INFO] [1685621028.995493290]: [FOUND] 'Exif.GPSInfo.GPSLatitudeRef' [ INFO] [1685621028.995516935]: [FOUND] 'Exif.GPSInfo.GPSLongitude' [ INFO] [1685621028.995533269]: [FOUND] 'Exif.GPSInfo.GPSLongitudeRef' [ INFO] [1685621028.995548059]: [FOUND] 'Exif.Image.Model' [ INFO] [1685621028.995566133]: [FOUND] 'Xmp.exif.REALM.Heading' [ WARN] [1685621028.995585487]: [NOT FOUND] 'Xmp.exif.REALM.Timestamp' [2023-06-01 20:03:48.995] [info] start mapping module [ INFO] [1685621028.995636943]: Image #0, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0000.jpg 2023-06-01 20:03:48.995 ( 0.328s) [ C6C0C000] pose_estimation.cpp:99 0| Evaluating fallback strategy... 2023-06-01 20:03:48.995 ( 0.328s) [ C6C0C000] pose_estimation.cpp:109 0| Selected: NEVER - Image projection will not be used. [2023-06-01 20:03:48.995] [info] start global optimization module 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] loguru.h:2056 0| Logging to '/home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48/pose_estimation/stage.log', mode: 'a', verbosity: 9 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] stage_base.cpp:42 0| Successfully initialized! 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] stage_base.cpp:43 0| Stage path set to: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48/pose_estimation 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:396 0| ### Stage process settings ### 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:397 0| - use_vslam: 1 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:398 0| - use_fallback: 0 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:399 0| - do_update_georef: 0 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:400 0| - do_suppress_outdated_pose_pub: 0 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:401 0| - th_error_georef: 0.10 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:402 0| - min_nrof_frames_georef: 3 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:403 0| - init_lost_frames_reset_count: 15f 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:404 0| - overlap_max: 100.00 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:405 0| - overlap_max_fallback: 95.00 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:407 0| ### Stage save settings ### 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:408 0| - save_trajectory_gnss: 1 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:409 0| - save_trajectory_visual: 1 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:410 0| - save_frames: 0 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:411 0| - save_keyframes: 0 2023-06-01 20:03:49.002 ( 0.335s) [ C6C0C000] pose_estimation.cpp:412 0| - save_keyframes_full: 0 [ INFO] [1685621029.002940097]: STAGE_NODE [pose_estimation]: Started stage node successfully! 2023-06-01 20:03:49.002 ( 0.336s) [Stage [pose_esti] worker_thread_base.cpp:43 0| Thread 'Stage [pose_estimation]' starting loop... 2023-06-01 20:03:49.045 ( 0.266s) [ D989F000] loguru.h:2056 0| Logging to '/home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48/surface_generation/stage.log', mode: 'a', verbosity: 9 2023-06-01 20:03:49.045 ( 0.266s) [ D989F000] stage_base.cpp:42 0| Successfully initialized! 2023-06-01 20:03:49.045 ( 0.266s) [ D989F000] stage_base.cpp:43 0| Stage path set to: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48/surface_generation 2023-06-01 20:03:49.045 ( 0.266s) [ D989F000] surface_generation.cpp:165 0| ### Stage process settings ### 2023-06-01 20:03:49.045 ( 0.266s) [ D989F000] surface_generation.cpp:166 0| - try_use_elevation: 1 2023-06-01 20:03:49.046 ( 0.266s) [ D989F000] surface_generation.cpp:167 0| - compute_all_frames: 0 2023-06-01 20:03:49.046 ( 0.266s) [ D989F000] surface_generation.cpp:168 0| - mode_surface_normals: 0 2023-06-01 20:03:49.046 ( 0.266s) [ D989F000] surface_generation.cpp:170 0| ### Stage save settings ### 2023-06-01 20:03:49.046 ( 0.266s) [ D989F000] surface_generation.cpp:171 0| - save_elevation: 0 2023-06-01 20:03:49.046 ( 0.266s) [ D989F000] surface_generation.cpp:172 0| - save_normals: 0 [ INFO] [1685621029.046255988]: STAGE_NODE [surface_generation]: Received output directory, set to: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48 2023-06-01 20:03:49.048 ( 0.314s) [ FCC68000] loguru.h:2056 0| Logging to '/home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48/densification/stage.log', mode: 'a', verbosity: 9 2023-06-01 20:03:49.048 ( 0.314s) [ FCC68000] stage_base.cpp:42 0| Successfully initialized! 2023-06-01 20:03:49.048 ( 0.314s) [ FCC68000] stage_base.cpp:43 0| Stage path set to: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48/densification 2023-06-01 20:03:49.048 ( 0.315s) [ FCC68000] densification.cpp:374 0| ### Stage process settings ### 2023-06-01 20:03:49.048 ( 0.315s) [ FCC68000] densification.cpp:375 0| - use_filter_bilat: 1 2023-06-01 20:03:49.048 ( 0.315s) [ FCC68000] densification.cpp:376 0| - use_filter_guided: 0 2023-06-01 20:03:49.048 ( 0.315s) [ FCC68000] densification.cpp:377 0| - compute_normals: 1 2023-06-01 20:03:49.048 ( 0.315s) [ FCC68000] densification.cpp:379 0| ### Stage save settings ### 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] densification.cpp:380 0| - save_bilat: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] densification.cpp:381 0| - save_dense: 1 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] densification.cpp:382 0| - save_guided: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] densification.cpp:383 0| - save_imgs: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] densification.cpp:384 0| - save_normals: 1 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] densification.cpp:385 0| - save_sparse: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] densification.cpp:386 0| - save_thumb: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:170 0| ### PlaneSweep settings ### 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:171 0| - nframes: 3 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:172 0| - enable_subpix: 1 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:173 0| - enable_color_match: 1 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:174 0| - enable_out_best_depth: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:175 0| - enable_out_best_cost: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:176 0| - enable_out_cost_vol: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:177 0| - enable_out_uniq_ratio: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:178 0| - nrof_planes: 32 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:179 0| - scale: 1.00 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:180 0| - match_window_size_width: 30 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:181 0| - match_window_size_height: 30 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:182 0| - occlusion_mode: 1 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:183 0| - plane_gen_mode: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:184 0| - match_cost: 0 2023-06-01 20:03:49.049 ( 0.315s) [ FCC68000] plane_sweep.cpp:185 0| - subpx_interp_mode: 1 [ INFO] [1685621029.049550118]: STAGE_NODE [densification]: Received output directory, set to: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48 [ INFO] [1685621029.096125384]: Image #1, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0001.jpg 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000] loguru.h:2056 0| Logging to '/home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48/ortho_rectification/stage.log', mode: 'a', verbosity: 9 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000] stage_base.cpp:42 0| Successfully initialized! 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000] stage_base.cpp:43 0| Stage path set to: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48/ortho_rectification 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000]ortho_rectification.cpp:195 0| ### Stage process settings ### 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000]ortho_rectification.cpp:196 0| - GSD: 0.15 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000]ortho_rectification.cpp:197 0| - publish_pointcloud: 0 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000]ortho_rectification.cpp:199 0| ### Stage save settings ### 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000]ortho_rectification.cpp:200 0| - save_ortho_rgb: 0 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000]ortho_rectification.cpp:201 0| - save_ortho_gtiff: 0 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000]ortho_rectification.cpp:202 0| - save_elevation: 0 2023-06-01 20:03:49.151 ( 0.304s) [ 69382000]ortho_rectification.cpp:203 0| - save_elevation_angle: 0 [ INFO] [1685621029.151612112]: STAGE_NODE [ortho_rectification]: Received output directory, set to: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48 [ INFO] [1685621029.196557166]: Image #2, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0002.jpg 2023-06-01 20:03:49.258 ( 0.358s) [ 91EA7000] loguru.h:2056 0| Logging to '/home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48/mosaicing/stage.log', mode: 'a', verbosity: 9 2023-06-01 20:03:49.258 ( 0.358s) [ 91EA7000] stage_base.cpp:42 0| Successfully initialized! 2023-06-01 20:03:49.258 ( 0.358s) [ 91EA7000] stage_base.cpp:43 0| Stage path set to: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48/mosaicing 2023-06-01 20:03:49.258 ( 0.358s) [ 91EA7000] mosaicing.cpp:346 0| ### Stage process settings ### 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:347 0| - publish_mesh_nth_iter: 0 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:348 0| - publish_mesh_every_nth_kf: 0 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:349 0| - do_publish_mesh_at_finish: 1 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:350 0| - downsample_publish_mesh: 0.50 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:351 0| - use_surface_normals: 1 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:352 0| - th_elevation_min_nobs: 2 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:353 0| - th_elevation_var: 1.00 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:355 0| ### Stage save settings ### 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:356 0| - save_ortho_rgb_one: 1 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:357 0| - save_ortho_rgb_all: 0 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:358 0| - save_ortho_gtiff_one: 1 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:359 0| - save_ortho_gtiff_all: 0 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:360 0| - save_elevation_one: 1 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:361 0| - save_elevation_all: 0 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:362 0| - save_elevation_var_one: 0 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:363 0| - save_elevation_var_all: 0 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:364 0| - save_elevation_obs_angle_one: 1 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:365 0| - save_elevation_obs_angle_all: 0 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:366 0| - save_elevation_mesh_one: 0 2023-06-01 20:03:49.259 ( 0.358s) [ 91EA7000] mosaicing.cpp:367 0| - save_num_obs_one: 1 2023-06-01 20:03:49.259 ( 0.359s) [ 91EA7000] mosaicing.cpp:368 0| - save_num_obs_all: 0 2023-06-01 20:03:49.259 ( 0.359s) [ 91EA7000] mosaicing.cpp:369 0| - save_dense_ply: 1 [ INFO] [1685621029.259628671]: STAGE_NODE [mosaicing]: Received output directory, set to: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_20-03-48 [ INFO] [1685621029.274226783]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621029.296915582]: Image #3, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0003.jpg [ INFO] [1685621029.367688582]: STAGE_NODE [pose_estimation]: Frame reference set at: 52.400844, 10.227508 2023-06-01 20:03:49.367 ( 0.700s) [Stage [pose_esti] pose_estimation.cpp:482 0| Input frame buffer at 10.00% 2023-06-01 20:03:49.367 ( 0.701s) [Stage [pose_esti] pose_estimation.cpp:250 0| { track 2023-06-01 20:03:49.367 ( 0.701s) [Stage [pose_esti] pose_estimation.cpp:251 0| . Frame id: #2, timestamp: 1685621029237 [ INFO] [1685621029.368224616]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621029.397372645]: Image #4, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0004.jpg [ INFO] [1685621029.477074972]: STAGE_NODE [pose_estimation]: Received frame. 2023-06-01 20:03:49.481 ( 0.814s) [Stage [pose_esti] pose_estimation.cpp:291 WARN| . No tracking. 2023-06-01 20:03:49.482 ( 0.815s) [Stage [pose_esti] pose_estimation.cpp:250 0| } 0.114 s: track 2023-06-01 20:03:49.482 ( 0.815s) [Stage [pose_esti] worker_thread_base.cpp:81 0| Timing [Total]: 115 ms 2023-06-01 20:03:49.482 ( 0.815s) [Stage [pose_esti] pose_estimation.cpp:482 0| Input frame buffer at 10.00% 2023-06-01 20:03:49.482 ( 0.815s) [Stage [pose_esti] pose_estimation.cpp:250 0| { track 2023-06-01 20:03:49.482 ( 0.815s) [Stage [pose_esti] pose_estimation.cpp:251 0| . Frame id: #3, timestamp: 1685621029335 2023-06-01 20:03:49.497 ( 0.830s) [Publisher [pose_] pose_estimation.cpp:651 0| . Publishing pose of frame #2... [ INFO] [1685621029.497703552]: Image #5, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0005.jpg [ INFO] [1685621029.570672065]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621029.598171500]: Image #6, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0006.jpg 2023-06-01 20:03:49.608 ( 0.941s) [Stage [pose_esti] pose_estimation.cpp:291 WARN| . No tracking. 2023-06-01 20:03:49.608 ( 0.941s) [Stage [pose_esti] pose_estimation.cpp:250 0| } 0.126 s: track 2023-06-01 20:03:49.608 ( 0.941s) [Stage [pose_esti] worker_thread_base.cpp:81 0| Timing [Total]: 126 ms 2023-06-01 20:03:49.608 ( 0.941s) [Stage [pose_esti] pose_estimation.cpp:482 0| Input frame buffer at 10.00% 2023-06-01 20:03:49.608 ( 0.941s) [Stage [pose_esti] pose_estimation.cpp:250 0| { track 2023-06-01 20:03:49.608 ( 0.941s) [Stage [pose_esti] pose_estimation.cpp:251 0| . Frame id: #4, timestamp: 1685621029440 2023-06-01 20:03:49.649 ( 0.982s) [Publisher [pose_] pose_estimation.cpp:651 0| . Publishing pose of frame #3... [ INFO] [1685621029.680902010]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621029.698563000]: Image #7, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0007.jpg 2023-06-01 20:03:49.734 ( 1.067s) [Stage [pose_esti] pose_estimation.cpp:291 WARN| . No tracking. 2023-06-01 20:03:49.734 ( 1.067s) [Stage [pose_esti] pose_estimation.cpp:250 0| } 0.126 s: track 2023-06-01 20:03:49.734 ( 1.067s) [Stage [pose_esti] worker_thread_base.cpp:81 0| Timing [Total]: 126 ms 2023-06-01 20:03:49.734 ( 1.067s) [Stage [pose_esti] pose_estimation.cpp:482 0| Input frame buffer at 10.00% 2023-06-01 20:03:49.734 ( 1.067s) [Stage [pose_esti] pose_estimation.cpp:250 0| { track 2023-06-01 20:03:49.734 ( 1.067s) [Stage [pose_esti] pose_estimation.cpp:251 0| . Frame id: #5, timestamp: 1685621029537 2023-06-01 20:03:49.750 ( 1.083s) [Publisher [pose_] pose_estimation.cpp:651 0| . Publishing pose of frame #4... [ INFO] [1685621029.777224178]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621029.799032031]: Image #8, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0008.jpg 2023-06-01 20:03:49.865 ( 1.198s) [Stage [pose_esti] pose_estimation.cpp:291 WARN| . No tracking. 2023-06-01 20:03:49.865 ( 1.198s) [Stage [pose_esti] pose_estimation.cpp:250 0| } 0.131 s: track 2023-06-01 20:03:49.865 ( 1.198s) [Stage [pose_esti] worker_thread_base.cpp:81 0| Timing [Total]: 131 ms 2023-06-01 20:03:49.865 ( 1.198s) [Stage [pose_esti] pose_estimation.cpp:482 0| Input frame buffer at 20.00% 2023-06-01 20:03:49.865 ( 1.198s) [Stage [pose_esti] pose_estimation.cpp:250 0| { track 2023-06-01 20:03:49.865 ( 1.198s) [Stage [pose_esti] pose_estimation.cpp:251 0| . Frame id: #6, timestamp: 1685621029641 [ INFO] [1685621029.882556311]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621029.899424706]: Image #9, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0009.jpg 2023-06-01 20:03:49.900 ( 1.234s) [Publisher [pose_] pose_estimation.cpp:651 0| . Publishing pose of frame #5... [ INFO] [1685621029.967035087]: STAGE_NODE [pose_estimation]: Received frame. [2023-06-01 20:03:49.992] [info] initialization succeeded with F [ INFO] [1685621029.999922844]: Image #10, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0010.jpg [ INFO] [1685621030.078099014]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621030.100201143]: Image #11, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0011.jpg [ INFO] [1685621030.161564312]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621030.200463428]: Image #12, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0012.jpg [ INFO] [1685621030.260182938]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621030.300941344]: Image #13, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0013.jpg [ INFO] [1685621030.360695277]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621030.401250012]: Image #14, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0014.jpg [ INFO] [1685621030.459952386]: STAGE_NODE [pose_estimation]: Received frame. [ERROR] [1685621030.485793789]: PluginlibFactory: The plugin for class 'rviz_plugins/AerialMapDisplay' failed to load. Error: According to the loaded plugin descriptions the class rviz_plugins/AerialMapDisplay with base class type rviz::Display does not exist. Declared types are realm_rviz_plugin/GroundImage rviz/AccelStamped rviz/Axes rviz/Camera rviz/DepthCloud rviz/Effort rviz/FluidPressure rviz/Grid rviz/GridCells rviz/Illuminance rviz/Image rviz/InteractiveMarkers rviz/LaserScan rviz/Map rviz/Marker rviz/MarkerArray rviz/Odometry rviz/Path rviz/PointCloud rviz/PointCloud2 rviz/PointStamped rviz/Polygon rviz/Pose rviz/PoseArray rviz/PoseWithCovariance rviz/Range rviz/RelativeHumidity rviz/RobotModel rviz/TF rviz/Temperature rviz/TwistStamped rviz/WrenchStamped [ INFO] [1685621030.501536959]: Image #15, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0015.jpg [ INFO] [1685621030.565497588]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621030.601790028]: Image #16, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0016.jpg [ INFO] [1685621030.666816597]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621030.702237761]: Image #17, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0017.jpg [ INFO] [1685621030.768643440]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621030.802509257]: Image #18, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0018.jpg [ INFO] [1685621030.866828194]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621030.902764955]: Image #19, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0019.jpg [ INFO] [1685621030.974340953]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621031.003088911]: Image #20, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0020.jpg [ INFO] [1685621031.070429181]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621031.103286803]: Image #21, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0021.jpg [ INFO] [1685621031.162288560]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621031.203551050]: Image #22, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0022.jpg [ INFO] [1685621031.268727395]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621031.303812969]: Image #23, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0023.jpg [ INFO] [1685621031.362252284]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621031.404070227]: Image #24, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0024.jpg [ INFO] [1685621031.464091589]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621031.504318641]: Image #25, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0025.jpg [ INFO] [1685621031.569974450]: STAGE_NODE [pose_estimation]: Received frame. [ INFO] [1685621031.604570189]: Image #26, image Path: /home/nwpu/DataSet/02_OpenRealm/open_realm_edm_dataset/edm_big_overlap_50p/img_0026.jpg [2023-06-01 20:03:51.637] [info] new map created with 59 points: frame 0 - frame 4 ` ### In the end: `0| GeoTIFF saved, t = [0.12 s], location: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_21-46-34/mosaicing/nobs/nobs.tif 2023-06-01 21:48:03.065 ( 88.479s) [ ED74000] gis_export.cpp:40 0| GeoTIFF saved, t = [0.39 s], location: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_21-46-34/mosaicing/ortho/ortho.tif 2023-06-01 21:48:03.353 ( 88.767s) [ ED74000] gis_export.cpp:40 0| GeoTIFF saved, t = [0.29 s], location: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_21-46-34/mosaicing/elevation/gtiff/elevation.tif 2023-06-01 21:48:03.638 ( 89.052s) [ ED74000] gis_export.cpp:40 0| GeoTIFF saved, t = [0.28 s], location: /home/nwpu/Project/Cpp_Project/01_OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/output/23-06-01_21-46-34/mosaicing/obs_angle/angle.tif terminate called after throwing an instance of 'std::out_of_range' 2023-06-01 21:48:03.638 ( 89.052s) [Stage [mosaicing] worker_thread_base.cpp:101 0| Thread 'Stage [mosaicing]' finished! what(): No layer with name 'valid' available. 2023-06-01 21:48:03.697 ( 89.399s) [Stage [pose_esti] pose_estimation.cpp:297 0| . Frame insertion. 2023-06-01 21:48:03.698 ( 89.399s) [Stage [pose_esti] pose_estimation.cpp:250 0| } 1.954 s: track 2023-06-01 21:48:03.698 ( 89.399s) [Stage [pose_esti] pose_estimation.cpp:181 0| Info [Scale Drift]: Scale change of current frame: 0.68% 2023-06-01 21:48:03.698 ( 89.399s) [Stage [pose_esti] worker_thread_base.cpp:81 0| Timing [Total]: 1954 ms 2023-06-01 21:48:03.698 ( 89.399s) [Stage [pose_esti] worker_thread_base.cpp:101 0| Thread 'Stage [pose_estimation]' finished! [2023-06-01 21:48:03.701] [info] clear BoW database [2023-06-01 21:48:03.841] [info] clear map database [rosout-1] killing on exit [master] killing on exit shutting down processing monitor... ... shutting down processing monitor complete done `
peakpang commented 1 year ago

I found that saveElevationPointsToPLY() in pcl_export.cpp calls saveElevationPoints(), and then assert(map.exists(mask_layer_name)) in saveElevationPoints(); so the above output appears: No layer with name 'valid' available. Is it possible that this is the reason, then how to solve it?

peakpang commented 1 year ago

Add two pictures: image

image

laxnpander commented 1 year ago

@peakpang Hmm, do you see results in rviz, e.g. the elevation map as image published? The rviz aerialmap plugin has nothing to do with it.

peakpang commented 1 year ago

Thank you so much for your reply! The following is the picture of rviz: image

I seem to have found out where it might be wrong. First, 1->2->3 is the function call. Then after step 3, the terminal output (shown in the next few pictures):

terminate called after throwing an instance of 'std::out_of_range'
what(): No layer with name 'valid' available.

As a result, the following 'Fill in the cloud data' did not continue to execute. Is there any way to solve it? Thank you!

image image image image

laxnpander commented 1 year ago

@peakpang Jeah, the valid layer seems to be missing. Maybe I have removed it at some point, but not fixed the PLY export. I think you could try to replace

cv::Mat mask = map[mask_layer_name];

with

cv::Mat mask = (elevation == elevation);

This should check elevation for NaN values and mask those out.

peakpang commented 1 year ago

After your modification, the problem seems to be solved and the ply file has been obtained! ! ! Really appreciate your guidance! ! !

image

laxnpander commented 1 year ago

@peakpang Perfect! I'd merge a pull request if you create one.

peakpang commented 1 year ago

@laxnpander ok. Thanks again!

laxnpander commented 1 year ago

@peakpang Thank you! :)