Fusing Lidar data with IMU data (please verify my understanding/plan)
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.
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).
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