Connect to live data sources with the Flora WebSocket, Rosbridge, and Velodyne Lidar connections. You can also load remote data files via URL.
Supported formats
Supported formats | Configuration options | |
---|---|---|
Flora WebSocket | WebSocket URL | |
Rosbridge | WebSocket URL | |
ROS 1 | ROS 1 (Desktop app only) | ROS_MASTER_URI and ROS_HOSTNAME |
Velodyne Lidar | Velodyne (Desktop app only) | UDP port |
Remote file | Requires CORS setup |
Limitations
When connecting to a live robotics stack, each connection will have different capabilities.
Flora WebSocket (recommended) | Rosbridge | ROS 1 | |
---|---|---|---|
Stream ROS 1 data | ✓ | ✓ | ✓ |
Stream ROS 2 data | ✓ | ✓ | |
Stream custom data | ✓ | ||
Custom message schemas | ✓ | ✓ | ✓ |
Publish messages | ✓ (ROS 1, ROS 2, JSON) | ✓ | ✓ |
Call services | ✓ | ✓ | |
Call actions | |||
Read and set parameters | ✓ | see discussion | ✓ |
Cross-Origin Resource Sharing (CORS) setup
To load remote data files, you must host your files in a server or cloud provider that supports Cross-Origin Resource Sharing (CORS) and accepts range requests.
When loading remote data into Flora for playback and analysis, we recommend hosting your files in a cloud provider like Amazon Simple Storage Service (S3), Google Cloud Storage (GCS), or Azure Storage. You can also host files on your own server, but it may be difficult and time-consuming to set up support for Cross-Origin Resource Sharing (CORS) and range requests.
If your data is sensitive, generate and use a signed URL – make sure that you point to the resource directly, as redirects will not work with CORS:
- S3 – Sharing objects using presigned URLs
- GCS – Signed URLS
- Azure Storage – Grant limited access to Azure Storage resources using shared access signatures (SAS)
This signed URL will work for a limited period of time. You can set up your server to only sign URLs for authenticated users.
Finally, set up your CORS configuration. Check out the following example of a Terraform config for an S3 bucket (docs):
cors_rule {
allowed_methods = ["GET", "HEAD", "OPTIONS"]
allowed_origins = ["https://app.flora.fan"]
allowed_headers = ["*"]
expose_headers = ["ETag", "Content-Type", "Accept-Ranges", "Content-Length"]
}
And a Terraform config for a GCS bucket (docs):
cors {
origin = ["https://app.flora.fan"]
method = ["GET", "HEAD", "OPTIONS"]
response_header = ["ETag", "Content-Type", "Accept-Ranges", "Content-Length"]
}