Publishing Sensor Data
Publishing Data Using LCM
HoloOcean supports publishing data to LCM (Lightweight Communications and Marshalling), a messaging system that is used to communicate between different processes. This allows you to publish sensor data to LCM channels, which can be used to communicate with other systems.
LCM configuration happens in the scenario file. LCM publishes data to a medium called the provider. This can be local, over the network, a log file, etc. This can be specified in the header of the scenario file. See here for options on this. If no provider is specified, HoloOcean uses the default LCM udqm.
{
"name": "{Scenario Name}",
"world": "{world it is associated with}",
"lcm_provider": "file:///home/lcm.log"
"agents":[
"array of agent objects"
]
}
Once the provider is chosen, HoloOcean publishes each sensor individually. The lcm_channel is set in the sensor configuration. If no channel is specified, the sensor will not be published.
{
"sensor_type": "RGBCamera",
"sensor_name": "FrontCamera",
"lcm_channel": "CAMERA",
}
Publishing Data Using ROS2 Bridge
ROS2 (Robot Operating System) is a popular middleware for robotics development. We have created the ROS2 Bridge package to allow users to connect ROS2 with other middleware systems, such as LCM and HoloOcean. This allows you to use ROS2 to control HoloOcean agents and publish sensor data to ROS2 topics.
This feature is written specifically to work with the implementation of Fossen vehicle dynamics.
Installation
Using the ROS2 Bridge requires downloading a separate package. After installing HoloOcean, clone the following repository into a ROS2 workspace: https://github.com/byu-holoocean/holoocean-ros
Warning
Currently, the ROS2 Bridge only supports single-agent scenarios.
Running holoocean and ROS2 in a virtual environment (ie. conda) may cause dependency issues.
The speed of the simulation may max out, which may cause timing errors.
The ROS workspace for holoocean works with the Humble installation of ROS2. Follow the ROS2 installation tutorials: https://docs.ros.org/en/humble/Tutorials
Usage
The example controller can be run after building the package in your ROS workspace:
source /opt/ros/humble/setup.bash
colcon build
source install/setup.bash
ros2 launch holoocean_main torpedo_launch.py
Follow the ROS2 documentation to build nodes to control the holoocean environment.
The holoocean_main node:
Subscribes to Controller commands
Publishes the sensor data retuned in holoocean state
Creates a timer to tick the environment
The holoocean publishers will use the namespace “holoocean” (see ROS documentation on namespaces). The name of the topic will follow the scenario name for the sensor. If there is no name given, it will be the same as sensor type.
Holoocean Interface package:
Holds the messages and service used for publishing sensor data
command_example node:
Publishes random HSD commands at specific intervals
Or publishes a preprogrammed sequence of HSD commands
Publishing Your Own Sensor
The ROS2 Bridge can be configured to work with custom sensors. After implementing your sensor in
HoloOcean(see Developing Sensors), follow these steps to publish your sensor data:
- Make a .msg
file in holoocean_interfaces
(ex. SensorData.msg
)
- Add .msg
file to Cmake list (ex. msg/SesnorData.msg
)
- In the sensor data converter file:
Add an elif statement in the
convert_to_msg
functionAdd a Key to
sensor_keys
Import the message object in first line of the file (ex.
from holoocean_interfaces.msg import SensorData
)Add a function to encode the data into a ROS message
Run the following code to rebuild your ROS2 workspace:
source /opt/ros/humble/setup.bash
colcon build
source install/setup.bash
Record Your Data
You can record the data from the HoloOcean environment using ros2bag. With ros2bag installed, you can record sensor data or commands by running a command like this from your ros2_ws folder:
source install/setup.bash
ros2 bag record /holoocean/desiredHSD /holoocean/RotationSensor /holoocean/LocationSensor -o /path/to/save_data
You can read more on the ros2 Documentation here to record and play back ros2 bag data: https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Recording-And-Playing-Back-Data/Recording-And-Playing-Back-Data.html