Gazebo GpuRaySensor - Field-Robotics-Lab/dave GitHub Wiki
The Gazebo GpuRaySensor provides an array of mXn rays prepared using the gazebo::rendering::GpuLaser module.  These rays are of type GpuLaserData and contain the following fields:
- beam: The vertical beam plane index, [0, vRes) (the beam row)
- intensity: The intensity value we want
- range: The distance value we want
- reading: The horizontal index, [0,hRes) (the beam column)
We need this record to additionally include:
- incident_anglebased on reflection. If we model secondary reflection, then we need vertical and horizontal angles. Otherwise we can get by with one normal angle.
Because GpuLaser is in a layer below GpuRaySensor and its internals are not accessible, we need to build Gazebo from source so we can add the incident_angle field.  We additionally need to make a new BeamSensor type (beam as opposed to ray or gpu_ray) that would produce one horizontal sweep of Sonar Beam data as an array.  Initially, output will be n records of (intensity, range) tuples.  Later, these fields will be n records of arrays of (intensity, range) tuples, where a given array of (intensity, range) tuples will consist of multiple range values.
Alternatives considered were:
- dsros_dvl: No, this uses the Physics instead of graphics engine.
- Depth camera: We want rays, not rasterization. However, we notice that incident angle support is being introduced to Gazebo using the Depth camera interface, ref. https://bitbucket.org/osrf/gazebo/pull-requests/3193/added-normals-in-depth-camera-sensor.