I need your advice, please (planar laser to 3D using encoder)

asked 2016-06-17 10:26:50 -0500

ateator gravatar image

updated 2016-06-20 15:30:04 -0500

Hello everyone,

I am using Neato XV-11 Lidar with getSurreal Lidar Controller v1.2 (Teensy 2.0). I have an Intel Edison (Flashed with Emutex's Ubilinux), and I am trying (unsuccessfully, but that's not the issue. though, tips are appreciated) to install ros_comm using http://wiki.jigsawrenaissance.org/ROS... .I want to have the laser spinning (2D), have a motor spin the laser on another axis to get 3D reading and use an encoder to read the angle on the second axis which the laster is spinning.

I want to connect the encoder directly to the teensy (Should it go directly to Edison? my concern is latency) and use this Encoder library https://www.pjrc.com/teensy/td_libs_E... to grab the information from the encoder, then implement odometry using tf in order to create a point cloud.

I already have laser_assembler working, and have the laser_scan put into a buffer for 5 seconds, then have a point cloud published for rviz to read (done via a tutorial, don't have a link. you might know of it). But, of course, this just shows a point cloud of the "same" map stacked onto itself a few different times because I have no rotation being published (terminology problem?).

What do I need in order to get the information from the second axis of rotation into the point cloud? I envision the laser taking about 5 seconds to make a full turn on the second axis, then having the 3D point cloud published every 5 seconds.

I am sure there are a million holes in my plan, but that's why I come to the experts here at ROS. I'm new (+- 4 weeks) to ROS but have been studying ~40 hours a week to get this thing going. I have done the tf, catkin, and other tutorials from ROS so I do have a Beginner-Intermediate understanding of what's going on. I appreciate any tips, suggestions as to any part of my plan, or idea in general. Thank you in advance

EDIT (6/20/2016): After a lot of struggling, I am not much further. I have been messing with laser_geometry, and laser_assembler all day, trying to figure out how to even get a transform that can modify my point cloud Z values. I haven't figured it out. I've tried to create a TF, but didn't fully understand how. Here is my current launch file:

  <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="laser"/>
  <node pkg="tf" type="static_transform_publisher" name="map_to_odom" args="0.0 0.0 0.0 0 0 0.0 /map /odom 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="baselink_to_laser" args="0 0 0 0 0 0 /base_link /laser 10"/>

 <node pkg="laser_assembler" type="laser_scan_assembler" output="screen"  name ...
edit retag flag offensive close merge delete


have now successfully used odometry_publisher to add and simulate odometry changes (movement) in X Y and Z planes. Unfortunately, this does not affect my periodic_snapshotter, thus the point cloud and laserscan data stays the same. Please help!

ateator gravatar image ateator  ( 2016-06-21 15:19:15 -0500 )edit

So, sometimes I can see the points that are being updated being rotated for just second and then erased again. I am wondering if this is due to a frame issue. I've read about the fixed world frame vs the moving base_frame (base_link?). I thought it could be an rviz issue, but it is un-recreateable

ateator gravatar image ateator  ( 2016-06-21 15:38:11 -0500 )edit