3. Running
When running any of the commands in the remaining sections of this document, make sure the shell environment has first been set by running the following command.
source PATH_TO_SOURCE/devel/setup.bash
As before, replace PATH_TO_SOURCE
with the name of the directory in which the ROS driver is installed.
3.1. Starting the Driver
Before running the ROS driver, make sure the MultiSense SL is powered. When the unit has power, two small LEDs on the front of the laser scanner will illuminate. The RJ45 end of the MultiSense SL developer’s cable should be plugged into the network port of the machine running the driver.
The next step is to configure the network. The multisense_bringup package contains an example configuration script called configureNetwork.sh. Because the NetworkManager daemon may override the settings from configureNetwork.sh, it is advisable to stop this daemon before running configureNetwork.sh. The script then changes the IP address of the host machine to 10.66.171.20 and configures other network parameters to communicate with the as-shipped MultiSense SL.
sudo stop network-manager
sudo PATH_TO_SOURCE/multisense/multisense_bringup/configureNetwork.sh
Note that use of our script is not required. You can manually change the computer IP to the MultiSense subnet, or change the MultiSense IP to a unused one on your subnet. But, you must still run the important parts of the the configure network script:
echo 16777215 > /proc/sys/net/core/rmem_max
echo 16777215 > /proc/sys/net/core/wmem_max
ifconfig eth0 mtu 7200
With the network interface configured, the ROS driver can be launched:
roslaunch multisense_bringup multisense.launch
This will connect to the MultiSense SL using the default IP address and MTU (10.66.171.21, and 7200, respectively.) If the MultiSense SL has been configured to use a different IP address, or if a different MTU is desired, the change can be specified with a command line argument:
roslaunch multisense_bringup multisense.launch ip_address:="10.66.171.14" mtu:="9000"
3.2. Namespacing
The MultiSense ROS driver supports individual namespacing of driver instances. This feature allows for multiple MultiSense units to be run on the same machine without any conflicts. The namespace of a particular MultiSense ROS driver instance can be changed by specifying the namespace parameter when launching the driver:
roslaunch multisense_bringup multisense.launch namespace:="multisense_1"
This starts the MultiSense driver with a namespace of /multisense_1.
Changing the namespace of a MultiSense ROS driver instance appends all the topic and transform names with the new namespace. The default namespace of a MultiSense driver instance is /multisense. The following documentation assumes the default namespace when describing transforms, topics, and the dynamic reconfigure interface.
3.3. Robot Model
The MultiSense ROS driver supports ROS robot models for various MultiSense sensor types. The launch file sensor parameter loads a specific robot model and corresponding URDF.
roslaunch multisense_bringup multisense.launch sensor:="{VARIANT}"
The above command starts the MultiSense driver using the MultiSense S21 URDF model, loading only the transforms applicable to a particular sensor configuration. Currently the SL, S21, S7, S7S, and S27 sensor parameters are supported. If no sensor parameter is specified, then the default parameter is SL is used.
As of ROS Driver version 4.0.0, the driver includes standalone and importable URDF models via xacros. To use the importable URDF models in your larger system, import the xacro and link it to the rest of your model, like so:
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="myfirst">
<xacro:include filename="$(find multisense_description)/urdf/multisenseSL/importable.urdf.xacro"/>
<link name="base_link">
<visual>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
</visual>
</link>
<xacro:importable_multisenseSL name="multisense" parent="base_link">
<origin xyz="0 0 1" rpy="0 0 0"/>
</xacro:importable_multisenseSL>
</robot>
3.4. Configuration
The ROS driver uses dynamic_reconfigure to adjust the LED duty cycle, spindle motor speed, IMU configuration, and camera parameters.
To bring-up the dynamic reconfigure graphical interface, execute:
rosrun rqt_reconfigure rqt_reconfigure
select the "/multisense" namespace from the drop-down list:
Dynamic reconfigure allows the camera resolution to be changed from 0.5 megapixels (1024x544) up to 2 megapixels (2048x1088). 3.0_beta firmware adds support for non-square vertical resolutions (1024x272 and 2048x544) and varying disparity levels (64, 128, and 256.) Please also note that in the 3.0_beta and newer firmware release, disparity data is available at all resolutions.
When switching resolutions there is a delay in the image streams while the sensor re-computes internal parameters. This delay can be on the order of 30 seconds.
Note that the spindle motor will not turn unless there is a subscription to the /multisense/lidar_points2, /multisense/lidar_points2_color, or /multisense/lidar_scan topics. Similarly the LEDs will not illuminate unless there is a subscription to an image or depth topic. See section 4.5 for more detailed information on these parameters.
Note that the LEDs will not illuminate unless there is a subscription to an image or depth topic. See section 4.5 for more detailed information on these parameters.
3.5. Visualization
The ROS full install includes a 3D visualization tool called RViz. To start RViz, execute:
rosrun rviz rviz
Once RViz opens, navigate to File → Open Config, and select the file called rviz_config.vcg located in the multisense_bringup package, located in the following directory:
PATH_TO_SOURCE/src/multisense/multisense_bringup
This will load the correct configuration to visualize all sensors on the Multisense SL.
Note that in the default Ubuntu 12.04 desktop, the File menu is not displayed on the RViz window, but rather on the panel at the top of the screen, and is only visible when the mouse hovers over the panel. To access the File menu, move the mouse to the top of the screen, and the menu should appear in the upper- left corner.
3.6. Calibration Check
Once the MultiSense SL driver has been launched, the calibration utility can be run by executing:
rosrun multisense_cal_check cal_check <options>
The calibration checking utility connects to the MultiSense SL captures data, and (by default) saves a ROS bag file into the directory from which the program is run.
After saving the bag file, the calibration checking utility analyzes it and generates a report. For information on how to customize this and other behaviors of the program, run the cal_check routine using the -h option:
rosrun multisense_cal_check cal_check -h
The generated bag file will contain the following:
-
Information about the MultiSense SL device being checked.
-
A synchronized left-rectified and disparity image pair.
-
A full revolution of laser scans.
To get the most meaningful calibration results use the following procedure:
-
Find an interior room corner where two walls meet the floor or ceiling. There must be sufficient visual texture on the walls and ceiling/floor that the stereo algorithm can generate good disparities. It is not important that the surfaces be exactly perpendicular or exactly flat, and it is acceptable to add visual texture by hanging posters, pictures, etc. Industrial carpet or suspended acoustic tile is generally sufficient for floor and ceiling. See below for an example.
-
Place the MultiSense SL approximately 2.5 meters from the corner, looking directly at the point where the walls and floor/ceiling intersect, and sufficiently far from the walls and floor/ceiling that the camera has a good view of each surface (see below for more detail). Verify that the images from the camera are clear, without large areas of over- or under-exposure. If necessary, the exposure time can be adjusted using the dynamic_reconfigure tool.
-
Ensure that the MultiSense SL is securely fastened to a stationary object, and that there is no motion within the field of view of the camera.
-
Start the MultiSense SL driver and then run the calibration checking routine. Ensure that nothing moves in the sensor field of view while the routine is running.
-
The tool will report the average error between the laser point cloud and the stereo point cloud. It represents this error terms of disparity. An image that represents this error is saved to the file system.
The figures below show an example camera set up and a screenshot of the resulting stereo data. The stereo data visualization was generated using RViz (see Section 2.4). Notice that there is plenty of valid stereo data on each surface. (Note: the walls in these images have a fabric covering that provides excellent texture for disparity generation.)
The next pair of pictures shows a scene in which two surfaces (a whiteboard and a door) do not have sufficient texture to generate a clean stereo image. This scene would not work well with the calibration checker. Subsequent pictures show a similar scene in which the disparities have been improved by adding artificial texture to a whiteboard.
In the following image pair, a marker pattern on the whiteboard provides missing texture and allows the calibration checker to run well.
3.7. Command Line Utilities
The driver contains several command line utilities for querying and setting information stored in non-volatile flash on your MultiSense SL.
The utilities are packaged as part of the low-level C\++ API in the multisense_lib package, and can be run using the rosrun command. For example, to see the built-in help of the IP address changing utility:
rosrun multisense_lib ChangeIpUtility --help