ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

Fusing Lidar data with IMU data (please verify my understanding/plan)

asked 2016-06-29 15:33:36 -0600

ateator gravatar image

updated 2016-06-29 15:38:36 -0600

Hello everyone,

I have a Neato XV-11 Lidar and a Sparkfun Razor 9DOF IMU. I have been able to get a live LaserScan, and PointCloud via laser_scan_assembler (periodic_snapshotter every few seconds). I have also used point_cloud_converter to get a PointCloud 2 and eventually an octomap. Mind you, this is all in 2D with just the Lidar.

I want to use the IMU data I am getting from razor_imu_9dof and fuse (transform) it with the Lidar data such that the point clouds that are being snappshotted end up in 3 dimensions. I don't mind if octomap is utilized.

I figure that since laserscan data isn't 3D, I will probably have to modify the laser_scan_assembler to subscribe to the IMU node also and do some maths with that data to rotate my 2D lidar data into 3D PointCloud data. This conversion will be done inside of laser_scan_assembler. My question is: Does this workflow sound correct? Is it a viable solution or is there a better/more correct method?

I would also appreciate verification that I am not starting off on the wrong foot. My launch file looks like this (for now):

   <launch>

      <node pkg="xv_11_laser_driver" type="neato_laser_publisher" name="xv_11_node">
        <param name="port" value="/dev/ttyACM0"/>
        <param name="firmware_version" value="2"/>
        <param name="frame_id" value="map"/>
      </node>

   <arg name="razor_config_file" default="$(find razor_imu_9dof)/config/my_razor.yaml"/>
  <node pkg="razor_imu_9dof" type="imu_node.py" name="imu_node" output="screen">
    <rosparam file="$(arg razor_config_file)" command="load"/>
  </node>

      <node type="laser_scan_assembler" pkg="laser_assembler" name="my_assembler">
        <param name="max_scans" type="int" value="400" />
        <param name="fixed_frame" type="string" value="base_link" />
      </node>

      <node pkg="tf" type="static_transform_publisher" name="baselink_to_laser" args="0 0 0 0 0 0 /base_link /laser 10"/>
      <node pkg="tf" type="static_transform_publisher" name="odom_to_baselink" args="0.0 0.0 0.0 0 0 0.0 /odom /base_link 10"/>
      <node pkg="tf" type="static_transform_publisher" name="map_to_odom" args="0 0 0 0 0 0 /map /odom 10"/>

      <node name="periodic_snapshotter" pkg="laser_assembler" type="periodic_snapshotter" respawn="false" output="screen" />
    </launch>

Thank you.

edit retag flag offensive close merge delete

Comments

I appreciate anything from as little as terminology, so that I may research and find the answer on my own, to complete detailed answers (and even email correspondence).

ateator gravatar image ateator  ( 2016-06-29 15:45:39 -0600 )edit

Also, I am not necessarily looking for a SLAM algorithm. I want to take measured IMU attitude information compiled with lidar data and snapshotted with periodic_snapshotter. I understand that this data will be erased every few seconds and reformed, but thats okay. This is just a starting point

ateator gravatar image ateator  ( 2016-06-29 15:55:01 -0600 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2016-06-30 08:57:54 -0600

I am doing something similar, building 3D maps using a 2D lidar. I would use a different method to get the altitute, such as a sonar, IR, or point laser range finder. They will be more accurate than integrating imu data. For mine I have a node that takes in ultrasonic sensor data and published the transform between base_footprint (the space underneath where my prototype is) and base_stabilized (where my prototype actually should be). It is generally considered good practice to build your own nodes/packages rather than modifying existing ones.

edit flag offensive delete link more

Comments

I'm considering a different method as seen here: http://answers.ros.org/question/10669...

where I could just transform laserscan data before running the laser_scan_assembler and then (hopefully) the rest is done by pre-assembled packages

ateator gravatar image ateator  ( 2016-06-30 09:46:33 -0600 )edit

Still just going to edit the laser_scan_assembler and associated files in order to accept my imu data and do the math needed to make a 3D point cloud. Going to accept your answer for closure

ateator gravatar image ateator  ( 2016-07-01 12:27:48 -0600 )edit

Question Tools

1 follower

Stats

Asked: 2016-06-29 15:33:36 -0600

Seen: 1,465 times

Last updated: Jun 30 '16