add timestamp unit setup
							parent
							
								
									8ad5dd2ba2
								
							
						
					
					
						commit
						ad692a628c
					
				| 
						 | 
				
			
			@ -123,9 +123,10 @@ Edit ``` config/velodyne.yaml ``` to set the below parameters:
 | 
			
		|||
 | 
			
		||||
1. LiDAR point cloud topic name: ``` lid_topic ```
 | 
			
		||||
2. IMU topic name: ``` imu_topic ``` (both internal and external, 6-aixes or 9-axies are fine)
 | 
			
		||||
3. Line number (we tested 16, 32 and 64 line, but not tested 128 or above): ``` scan_line ```
 | 
			
		||||
4. Translational extrinsic: ``` extrinsic_T ```
 | 
			
		||||
5. Rotational extrinsic: ``` extrinsic_R ``` (only support rotation matrix)
 | 
			
		||||
3. Set the parameter ```timestamp_unit``` based on the unit of **time** (Velodyne) or **t** (Ouster) field in PoindCloud2 rostopic
 | 
			
		||||
4. Line number (we tested 16, 32 and 64 line, but not tested 128 or above): ``` scan_line ```
 | 
			
		||||
5. Translational extrinsic: ``` extrinsic_T ```
 | 
			
		||||
6. Rotational extrinsic: ``` extrinsic_R ``` (only support rotation matrix)
 | 
			
		||||
- The extrinsic parameters in FAST-LIO is defined as the LiDAR's pose (position and rotation matrix) in IMU body frame (i.e. the IMU is the base frame).
 | 
			
		||||
 | 
			
		||||
Step B: Run below
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ common:
 | 
			
		|||
preprocess:
 | 
			
		||||
    lidar_type: 3                # 1 for Livox serials LiDAR, 2 for Velodyne LiDAR, 3 for ouster LiDAR, 
 | 
			
		||||
    scan_line: 64
 | 
			
		||||
    timestamp_unit: 3                 # 0-second, 1-milisecond, 2-microsecond, 3-nanosecond.
 | 
			
		||||
    blind: 4
 | 
			
		||||
 | 
			
		||||
mapping:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,8 @@ preprocess:
 | 
			
		|||
    lidar_type: 2                # 1 for Livox serials LiDAR, 2 for Velodyne LiDAR, 3 for ouster LiDAR, 
 | 
			
		||||
    scan_line: 32
 | 
			
		||||
    scan_rate: 10                # only need to be set for velodyne, unit: Hz,
 | 
			
		||||
    blind: 4
 | 
			
		||||
    timestamp_unit: 2            # the unit of time/t field in the PointCloud2 rostopic: 0-second, 1-milisecond, 2-microsecond, 3-nanosecond.
 | 
			
		||||
    blind: 2
 | 
			
		||||
 | 
			
		||||
mapping:
 | 
			
		||||
    acc_cov: 0.1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,7 @@ Panels:
 | 
			
		|||
        - /Odometry1/Odometry1/Covariance1/Orientation1
 | 
			
		||||
        - /MarkerArray1/Namespaces1
 | 
			
		||||
      Splitter Ratio: 0.6432291865348816
 | 
			
		||||
    Tree Height: 1144
 | 
			
		||||
    Tree Height: 811
 | 
			
		||||
  - Class: rviz/Selection
 | 
			
		||||
    Name: Selection
 | 
			
		||||
  - Class: rviz/Tool Properties
 | 
			
		||||
| 
						 | 
				
			
			@ -85,9 +85,7 @@ Visualization Manager:
 | 
			
		|||
          Enabled: true
 | 
			
		||||
          Invert Rainbow: false
 | 
			
		||||
          Max Color: 255; 255; 255
 | 
			
		||||
          Max Intensity: 159
 | 
			
		||||
          Min Color: 238; 238; 236
 | 
			
		||||
          Min Intensity: 0
 | 
			
		||||
          Name: surround
 | 
			
		||||
          Position Transformer: XYZ
 | 
			
		||||
          Queue Size: 1
 | 
			
		||||
| 
						 | 
				
			
			@ -100,7 +98,7 @@ Visualization Manager:
 | 
			
		|||
          Use Fixed Frame: true
 | 
			
		||||
          Use rainbow: true
 | 
			
		||||
          Value: true
 | 
			
		||||
        - Alpha: 0.15000000596046448
 | 
			
		||||
        - Alpha: 0.10000000149011612
 | 
			
		||||
          Autocompute Intensity Bounds: true
 | 
			
		||||
          Autocompute Value Bounds:
 | 
			
		||||
            Max Value: 15
 | 
			
		||||
| 
						 | 
				
			
			@ -115,9 +113,7 @@ Visualization Manager:
 | 
			
		|||
          Enabled: true
 | 
			
		||||
          Invert Rainbow: true
 | 
			
		||||
          Max Color: 255; 255; 255
 | 
			
		||||
          Max Intensity: 159
 | 
			
		||||
          Min Color: 0; 0; 0
 | 
			
		||||
          Min Intensity: 0
 | 
			
		||||
          Name: currPoints
 | 
			
		||||
          Position Transformer: XYZ
 | 
			
		||||
          Queue Size: 100000
 | 
			
		||||
| 
						 | 
				
			
			@ -145,9 +141,7 @@ Visualization Manager:
 | 
			
		|||
          Enabled: false
 | 
			
		||||
          Invert Rainbow: false
 | 
			
		||||
          Max Color: 255; 255; 255
 | 
			
		||||
          Max Intensity: 151
 | 
			
		||||
          Min Color: 0; 0; 0
 | 
			
		||||
          Min Intensity: 0
 | 
			
		||||
          Name: PointCloud2
 | 
			
		||||
          Position Transformer: XYZ
 | 
			
		||||
          Queue Size: 10
 | 
			
		||||
| 
						 | 
				
			
			@ -275,9 +269,7 @@ Visualization Manager:
 | 
			
		|||
      Enabled: false
 | 
			
		||||
      Invert Rainbow: false
 | 
			
		||||
      Max Color: 138; 226; 52
 | 
			
		||||
      Max Intensity: 248
 | 
			
		||||
      Min Color: 138; 226; 52
 | 
			
		||||
      Min Intensity: 0
 | 
			
		||||
      Name: PointCloud2
 | 
			
		||||
      Position Transformer: XYZ
 | 
			
		||||
      Queue Size: 10
 | 
			
		||||
| 
						 | 
				
			
			@ -326,33 +318,33 @@ Visualization Manager:
 | 
			
		|||
  Views:
 | 
			
		||||
    Current:
 | 
			
		||||
      Class: rviz/Orbit
 | 
			
		||||
      Distance: 135.68701171875
 | 
			
		||||
      Distance: 46.0853271484375
 | 
			
		||||
      Enable Stereo Rendering:
 | 
			
		||||
        Stereo Eye Separation: 0.05999999865889549
 | 
			
		||||
        Stereo Focal Distance: 1
 | 
			
		||||
        Swap Stereo Eyes: false
 | 
			
		||||
        Value: false
 | 
			
		||||
      Focal Point:
 | 
			
		||||
        X: 11.471270561218262
 | 
			
		||||
        Y: 33.732704162597656
 | 
			
		||||
        Z: -18.399494171142578
 | 
			
		||||
        X: -4.982542037963867
 | 
			
		||||
        Y: -15.83572006225586
 | 
			
		||||
        Z: -3.063523054122925
 | 
			
		||||
      Focal Shape Fixed Size: true
 | 
			
		||||
      Focal Shape Size: 0.05000000074505806
 | 
			
		||||
      Invert Z Axis: false
 | 
			
		||||
      Name: Current View
 | 
			
		||||
      Near Clip Distance: 0.009999999776482582
 | 
			
		||||
      Pitch: 0.04979678615927696
 | 
			
		||||
      Pitch: 0.399796724319458
 | 
			
		||||
      Target Frame: global
 | 
			
		||||
      Value: Orbit (rviz)
 | 
			
		||||
      Yaw: 4.707205772399902
 | 
			
		||||
      Yaw: 1.277182698249817
 | 
			
		||||
    Saved: ~
 | 
			
		||||
Window Geometry:
 | 
			
		||||
  Displays:
 | 
			
		||||
    collapsed: false
 | 
			
		||||
  Height: 1383
 | 
			
		||||
  Height: 1028
 | 
			
		||||
  Hide Left Dock: false
 | 
			
		||||
  Hide Right Dock: true
 | 
			
		||||
  QMainWindow State: 000000ff00000000fd0000000400000000000001c8000004b5fc020000000dfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d000004b5000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d0061006700650000000297000001dc0000000000000000fb0000000a0049006d0061006700650000000394000001600000000000000000fb0000000a0049006d00610067006501000002c5000000c70000000000000000fb0000000a0049006d00610067006501000002c5000000c70000000000000000fb0000000a0049006d00610067006501000002c5000000c700000000000000000000000100000152000004b7fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d000004b7000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000061f00000052fc0100000002fb0000000800540069006d006501000000000000061f000002eb00fffffffb0000000800540069006d0065010000000000000450000000000000000000000451000004b500000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
 | 
			
		||||
  QMainWindow State: 000000ff00000000fd0000000400000000000001c800000368fc020000000dfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000002700000368000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d0061006700650000000297000001dc0000000000000000fb0000000a0049006d0061006700650000000394000001600000000000000000fb0000000a0049006d00610067006501000002c5000000c70000000000000000fb0000000a0049006d00610067006501000002c5000000c70000000000000000fb0000000a0049006d00610067006501000002c5000000c700000000000000000000000100000152000004b7fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d000004b7000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000061f00000052fc0100000002fb0000000800540069006d006501000000000000061f000002eb00fffffffb0000000800540069006d00650100000000000004500000000000000000000004510000036800000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
 | 
			
		||||
  Selection:
 | 
			
		||||
    collapsed: false
 | 
			
		||||
  Time:
 | 
			
		||||
| 
						 | 
				
			
			@ -363,4 +355,4 @@ Window Geometry:
 | 
			
		|||
    collapsed: true
 | 
			
		||||
  Width: 1567
 | 
			
		||||
  X: 67
 | 
			
		||||
  Y: 27
 | 
			
		||||
  Y: 24
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,7 @@
 | 
			
		|||
 | 
			
		||||
/// *************Preconfiguration
 | 
			
		||||
 | 
			
		||||
#define MAX_INI_COUNT (20)
 | 
			
		||||
#define MAX_INI_COUNT (10)
 | 
			
		||||
 | 
			
		||||
const bool time_list(PointType &x, PointType &y) {return (x.curvature < y.curvature);};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -773,6 +773,7 @@ int main(int argc, char** argv)
 | 
			
		|||
    nh.param<double>("preprocess/blind", p_pre->blind, 0.01);
 | 
			
		||||
    nh.param<int>("preprocess/lidar_type", p_pre->lidar_type, AVIA);
 | 
			
		||||
    nh.param<int>("preprocess/scan_line", p_pre->N_SCANS, 16);
 | 
			
		||||
    nh.param<int>("preprocess/timestamp_unit", p_pre->time_unit, US);
 | 
			
		||||
    nh.param<int>("preprocess/scan_rate", p_pre->SCAN_RATE, 10);
 | 
			
		||||
    nh.param<int>("point_filter_num", p_pre->point_filter_num, 2);
 | 
			
		||||
    nh.param<bool>("feature_extract_enable", p_pre->feature_enabled, false);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,6 +49,25 @@ void Preprocess::process(const livox_ros_driver::CustomMsg::ConstPtr &msg, Point
 | 
			
		|||
 | 
			
		||||
void Preprocess::process(const sensor_msgs::PointCloud2::ConstPtr &msg, PointCloudXYZI::Ptr &pcl_out)
 | 
			
		||||
{
 | 
			
		||||
  switch (time_unit)
 | 
			
		||||
  {
 | 
			
		||||
    case SEC:
 | 
			
		||||
      time_unit_scale = 1.e3f;
 | 
			
		||||
      break;
 | 
			
		||||
    case MS:
 | 
			
		||||
      time_unit_scale = 1.f;
 | 
			
		||||
      break;
 | 
			
		||||
    case US:
 | 
			
		||||
      time_unit_scale = 1.e-3f;
 | 
			
		||||
      break;
 | 
			
		||||
    case NS:
 | 
			
		||||
      time_unit_scale = 1.e-6f;
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      time_unit_scale = 1.f;
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  switch (lidar_type)
 | 
			
		||||
  {
 | 
			
		||||
  case OUST64:
 | 
			
		||||
| 
						 | 
				
			
			@ -200,7 +219,7 @@ void Preprocess::oust64_handler(const sensor_msgs::PointCloud2::ConstPtr &msg)
 | 
			
		|||
      if (yaw_angle <= -180.0)
 | 
			
		||||
        yaw_angle += 360.0;
 | 
			
		||||
 | 
			
		||||
      added_pt.curvature = pl_orig.points[i].t / 1e6;
 | 
			
		||||
      added_pt.curvature = pl_orig.points[i].t * time_unit_scale;
 | 
			
		||||
      if(pl_orig.points[i].ring < N_SCANS)
 | 
			
		||||
      {
 | 
			
		||||
        pl_buff[pl_orig.points[i].ring].push_back(added_pt);
 | 
			
		||||
| 
						 | 
				
			
			@ -249,7 +268,7 @@ void Preprocess::oust64_handler(const sensor_msgs::PointCloud2::ConstPtr &msg)
 | 
			
		|||
      added_pt.normal_x = 0;
 | 
			
		||||
      added_pt.normal_y = 0;
 | 
			
		||||
      added_pt.normal_z = 0;
 | 
			
		||||
      added_pt.curvature = pl_orig.points[i].t / 1e6; // curvature unit: ms
 | 
			
		||||
      added_pt.curvature = pl_orig.points[i].t * time_unit_scale; // curvature unit: ms
 | 
			
		||||
 | 
			
		||||
      pl_surf.points.push_back(added_pt);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -318,7 +337,7 @@ void Preprocess::velodyne_handler(const sensor_msgs::PointCloud2::ConstPtr &msg)
 | 
			
		|||
        added_pt.y = pl_orig.points[i].y;
 | 
			
		||||
        added_pt.z = pl_orig.points[i].z;
 | 
			
		||||
        added_pt.intensity = pl_orig.points[i].intensity;
 | 
			
		||||
        added_pt.curvature = pl_orig.points[i].time / 1000.0; // units: ms
 | 
			
		||||
        added_pt.curvature = pl_orig.points[i].time * time_unit_scale; // units: ms
 | 
			
		||||
 | 
			
		||||
        if (!given_offset_time)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -387,7 +406,7 @@ void Preprocess::velodyne_handler(const sensor_msgs::PointCloud2::ConstPtr &msg)
 | 
			
		|||
        added_pt.y = pl_orig.points[i].y;
 | 
			
		||||
        added_pt.z = pl_orig.points[i].z;
 | 
			
		||||
        added_pt.intensity = pl_orig.points[i].intensity;
 | 
			
		||||
        added_pt.curvature = pl_orig.points[i].time / 1000.0;  // curvature unit: ms
 | 
			
		||||
        added_pt.curvature = pl_orig.points[i].time * time_unit_scale;  // curvature unit: ms // cout<<added_pt.curvature<<endl;
 | 
			
		||||
 | 
			
		||||
        if (!given_offset_time)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ typedef pcl::PointXYZINormal PointType;
 | 
			
		|||
typedef pcl::PointCloud<PointType> PointCloudXYZI;
 | 
			
		||||
 | 
			
		||||
enum LID_TYPE{AVIA = 1, VELO16, OUST64}; //{1, 2, 3}
 | 
			
		||||
enum TIME_UNIT{SEC = 0, MS = 1, US = 2, NS = 3};
 | 
			
		||||
enum Feature{Nor, Poss_Plane, Real_Plane, Edge_Jump, Edge_Plane, Wire, ZeroPoint};
 | 
			
		||||
enum Surround{Prev, Next};
 | 
			
		||||
enum E_jump{Nr_nor, Nr_zero, Nr_180, Nr_inf, Nr_blind};
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +95,8 @@ class Preprocess
 | 
			
		|||
  PointCloudXYZI pl_full, pl_corn, pl_surf;
 | 
			
		||||
  PointCloudXYZI pl_buff[128]; //maximum 128 line lidar
 | 
			
		||||
  vector<orgtype> typess[128]; //maximum 128 line lidar
 | 
			
		||||
  int lidar_type, point_filter_num, N_SCANS, SCAN_RATE;
 | 
			
		||||
  float time_unit_scale;
 | 
			
		||||
  int lidar_type, point_filter_num, N_SCANS, SCAN_RATE, time_unit;
 | 
			
		||||
  double blind;
 | 
			
		||||
  bool feature_enabled, given_offset_time;
 | 
			
		||||
  ros::Publisher pub_full, pub_surf, pub_corn;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue