Example ROS Code
The sample code include tools for publishing sensor data as standard ROS topics. Since ROS uses its own build system, it must be compiled separately from the rest of the sample code.
The provided ROS code has been tested on ROS Melodic on Ubuntu 18, and ROS Noetic Ubuntu 20. Use the installation instructions to get started with ROS on your platform.
Building ROS Driver
The build dependencies include those of the sample code:
sudo apt install build-essential cmake libeigen3-dev libjsoncpp-dev
Additionally, you should install the ros dependencies:
sudo apt install \
ros-<ROS-DISTRO>-pcl-ros \
ros-<ROS-DISTRO>-tf2-geometry-msgs \
ros-<ROS-DISTRO>-rviz
where <ROS-DISTRO>
is melodic
or noetic
.
Alternatively, if you would like to install dependencies with rosdep:
rosdep install --from-paths <path to ouster example>
To build:
mkdir -p ./catkin_ws/src
cd catkin_ws
ln -s <path to ouster_example> ./src/
source /opt/ros/<ROS-VERSION>/setup.bash
catkin_make -DCMAKE_BUILD_TYPE=Release
Warning
Do not create your workspace directory inside the cloned ouster_example repository, as this will confuse the ROS build system.
For each command in the following sections, make sure to first set up the ROS environment in each new terminal by running:
source catkin_ws/devel/setup.bash
Running ROS Nodes with a Sensor
Make sure the sensor is connected to the network. See “Connecting to the Sensor” in the Software User Manual for instructions and different options for network configuration.
To connect to a sensor and publish its data as ROS topics, execute the command:
roslaunch ouster_ros sensor.launch sensor_hostname:=<sensor hostname>
where:
- sensor_hostname:=<sensor hostname>
can be the hostname (os-99xxxxxxxxxx.local) or IP of the
sensor
Additionally, the launch file has following list of arguments that you can use:
- metadata:=<path-to-metadata>
to set the name where sensor metadata configuration will be
saved to. Note that by default the working directory of all ROS nodes is set to
${ROS_HOME}
, which is generally$HOME/.ros
. If you provide a relative path tometadata
, i.e.,metadata:=meta.json
it will write to${ROS_HOME}/meta.json
. If you wish the file be saved in the current directory you may use the absolute path instead, such asmetadata:=$PWD/meta.json
udp_dest:=<hostname>
to specify the hostname or IP to which the sensor should send datalidar_mode:=<mode>
where mode is one of512x10
,512x20
,1024x10
,1024x20
, or2048x10
, andviz:=true/false
to visualize the sensor output, if you have the rviz ROS package installed
Recording Data
To record raw sensor output you may use the provided record.launch
file as follows:
roslaunch ouster_ros record.launch \
sensor_hostname:=<sensor hostname> \
metadata:=<json file name> \
bag_file:=<optional bag file name>
This will connect to the specified sensor, write the sensor metadata to a file and start recording imu and lidar packets to the specified bag_file once the sensor is connected.
It is necessary that you provide a name for the metadata file and maintain this file along with the recorded bag_file otherwise you won’t be able to play the file correctly.
If no bag_file is specified then a name will be generated based on the current date/time.
By default ROS saves all files to $ROS_HOME, if you want to have these files saved in the current directory, simply give the absolute path to each file. For example:
roslaunch ouster_ros record.launch \
sensor_hostname:=<sensor hostname> \
metadata:=$PWD/<json file name> \
bag_file:=$PWD/<bag file name>
Alternatively, you may connect to the sensor using the roslaunch ouster_ros sensor.launch ..
command and then use the rosbag command in a separate terminal to start recording lidar packets
at any time using the following command:
rosbag record /ouster/imu_packets /ouster/lidar_packets
For more information on rosbag functionality refer to rosbag record.
Warning
When recording a bag file directly via the rosbag record
, you need to
save the metadata information of the sensor you are connected to. This can be
achieved by supplying a path to the metadata
argument of the sensor.launch
.
You will need the metadata file information to properly replay the recorded bag
file.
Playing Back Recorded Data
You may use the replay.launch
file to repalay previously captured sensor data.
Simply invoke the launch file with the following parameters:
roslaunch ouster_ros replay.launch \
metadata:=<json file name> \
bag_file:=<path to rosbag file>
A metadata file is mandatory for replay of data. See Recording Data for how to obtain the metadata file when recording your data.
Ouster ROS Services
The ROS driver currently advertises three services /ouster/get_metadata
,
/ouster/get_config
, and /ouster/set_config
. The first one is available
in all three modes of operation: Sensor
, Replay
, and Recording
.
The latter two, however, are only available in Sensor
and Recording
modes. i.e. when connected to a sensor.
The usage of the three services is described below:
/ouster/get_metadata
: This service takes no parameters and returns the current sensor metadata, you may use as follows:rosservice call /ouster/get_metadata
This will return a json string that contains the sensor metadata
/ouster/get_config
: This service takes no parameters and returns the current sensor configuration, you may use as follows:rosservice call /ouster/get_config
This will return a json string represting the current configuration
/ouster/set_config
: Takes a single parameter and also returns the updated sensor configuration. You may use as follows:rosservice call /ouster/set_config "config_file: '<path to sensor config>'"
It is not guranteed that all requested configuration are applied to the sensor, thus it is the caller responsibilty to examine the returned json object and check which of the sensor configuration parameters were successfully applied.