Your robot can have a lot of sensors to see the world; you can program a lot of nodes to take this data and do something, but the navigation stack is prepared only to use the planar laser's sensor. So, your sensor must publish the data with one of these types: sensor_msgs/LaserScan or sensor_msgs/PointCloud2.
We are going to use the laser located in front of the robot to navigate in Gazebo. Remember that this laser is simulated on Gazebo, and it publishes data on the hokuyo_link frame with the topic name /robot/laser/scan.
In our case, we do not need to configure anything in our laser to use it on the navigation stack. This is because we have tf configured in the .urdf file, and the laser is publishing data with the correct type.
If you use a real laser, ROS might have a driver for it. Indeed, in Chapter 7, Using Sensors and Actuators with ROS, we will show you how to connect the Hokuyo laser to ROS. Anyway, if you are using a laser that has no driver on ROS and want to write a node to publish the data with the sensor_msgs/LaserScan sensor, you have an example template to do it, which is shown in the following section.
But first, remember the structure of the message sensor_msgs/LaserScan. Use the following command:
$ rosmsg show sensor_msgs/LaserScan
The preceding command will generate the following output:
std_msgs/Header header uint32 seq time stamp string frame_id float32 angle_min float32 angle_max float32 angle_increment float32 time_increment float32 scan_time float32 range_min float32 range_max float32[] ranges float32[] intensities