There is lots to cover here. We’ll roll this into a whitepaper once we’ve caught up on sleep but until then sorry about the stream of consciousness approach.
For testing, our vision team hacked up a mount for the LIDAR. We affectionately called it our 2018 robot : https://www.chiefdelphi.com/forums/showthread.php?t=156204&highlight=900+reveal. The main thing we focused on was getting the LIDAR at 19 or so inches high. This would give the best chance of seeing the metal parts of the field perimeter. Even so, any small deviation from perfectly level would mean we were probably hitting plastic instead…
I got to drive this around the field on a cart during calibration at one of our events (the students were doing more important things like making sure our actual robot connected to the field).
Are Pop Tarts and Dr. Pepper valid robot energy storage devices?
All we gathered from that was raw LIDAR data : https://drive.google.com/open?id=0B8hPVHrmVeDgUWlHWGxUSzVFSUU. We did some basic post processing using the ROS implementation of Hector Mapping / SLAM (http://wiki.ros.org/hector_mapping) since that was a quick and dirty way to see what sort of data we would get. Hector SLAM is nice because it relies only on LIDAR data. That’s good, since that’s all we had. Eventually we’ll combine it using fused IMU data but for now I just wanted to see if it the data was horribly broken.
Given that, it looks sorta reasonable :
In this first image you can clearly see the driver station wall and a bit of the airship. You can also make out some students sitting with their robot near the side peg. The longer field walls do come through, kind of. Looks like there are enough hits to conclude there’s a straight wall there, but at the same time we’re also occasionally getting hits from outside the field. I think this means that depending on where we are the LIDAR is missing the edge of the field some times. There’s also some weirdness stitching the field perimeter together but that might be more a reconstruction problem than something inherently wrong with the data.
Subjective impressions : this LIDAR has good resolution. I ran it in the stands as a demo, and you could see people’s arms moving separately from their bodies as they walked by. Same with the data I recorded from the cart - my legs are several pixels wide and you can see them moving individually behind the cart. That’s impressive. Also, depending on position it could see the full width of the field … but probably not the full length of it.
The reconstructed maps aren’t great. I wish we had put a navX on the cart along with the LIDAR to get fused IMU data correlated to the LIDAR. Still, given that we didn’t even know if we could see the shorter sides of the field I’m pretty optimistic with these results.
Here’s the launch file I used after installing ROS hector slam:
<?xml version="1.0"?>
<launch>
<!-- Transform x y z roll pitch yaw -->
<node pkg="tf2_ros" type="static_transform_publisher" name="laser" args="0 0 .19625 0 0 0 base_link laser" />
<node pkg="rosbag" type="play" name="player" output="screen" args="--clock /home/kjaget/RPLidar_2017-03-10-11-19-25_0.bag"/>
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find rplidar_ros)/rviz/rplidar.rviz" />
<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
<param name="map_frame" value="map" />
<param name="base_frame" value="base_link" />
<param name="odom_frame" value="base_link"/>
<param name="output_timing" value="false"/>
<param name="use_tf_scan_transformation" value="true"/>
<param name="use_tf_pose_start_estimate" value="false"/>
<param name="scan_topic" value="scan"/>
<!-- Map size / start point -->
<param name="map_resolution" value="0.025"/>
<param name="map_size" value="2048"/>
<param name="map_start_x" value="0.5"/>
<param name="map_start_y" value="0.5" />
<!-- Map update parameters -->
<param name="update_factor_free" value="0.4"/>
<param name="update_factor_occupied" value="0.9" />
<param name="map_update_distance_thresh" value="0.4"/>
<param name="map_update_angle_thresh" value="0.06" />
<param name="laser_max_dist" value="9.5" />
</node>
<arg name="disable_poseupdate" default="false" />
<group if="$(arg disable_poseupdate)">
<param name="hector_mapping/pub_map_odom_transform" value="true"/>
<remap from="poseupdate" to="poseupdate_disabled"/>
</group>
<group unless="$(arg disable_poseupdate)">
<param name="hector_mapping/pub_map_odom_transform" value="false"/>
<node pkg="tf" type="static_transform_publisher" name="map_nav_broadcaster" args="0 0 0 0 0 0 map nav 100"/>
<node pkg="tf" type="static_transform_publisher" name="nav__baselink_broadcaster" args="0 0 0 0 0 0 nav base_link 100"/>
</group>
</launch>
```<br><br>![better_photo_1024.jpg|690x500](upload://w21mo25OjuAw7Io1pnBLrCknceA.jpeg)<br>![Field_Map_1.png|690x500](upload://7ngwZ60tI0l2qB9KFqQeREcwZEJ.png)<br>![Field_Mapping_2.png|690x500](upload://uBYkSrT4lBIMoiRtT86HnGNIUPX.png.png)<br><br><br>![better_photo_1024.jpg|690x500](upload://w21mo25OjuAw7Io1pnBLrCknceA.jpeg)<br>![Field_Map_1.png|690x500](upload://7ngwZ60tI0l2qB9KFqQeREcwZEJ.png)<br>![Field_Mapping_2.png|690x500](upload://uBYkSrT4lBIMoiRtT86HnGNIUPX.png.png)<br>