• Stars
    star
    137
  • Rank 266,121 (Top 6 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created about 9 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

ROS network stack: Topic/service transport over unreliable network connections

nimbro_network - ROS transport for high-latency, low-quality networks

nimbro_network is a set of ROS packages for transporting ROS topics and services over network. It was developed for the DLR SpaceBotCup competition and performed very well during the competition. Our team was one of the few teams which did not have communication problems.

The SpaceBotCup network had a few special aspects which forced us to design our own network solution, in particular a two-second delay in each direction.

The system was also used extensively in the DARPA Robotics Challenge, in which our team NimbRo Rescue achieved the fourth place.

Why?

ROS has a network transparency layer. But it has issues, namely:

  • For subscription, a lengthy TCP handshake is required, even if you want to use the UDP transport. If you lose the connection, you have to re-do the handshake, possibly taking a long time
  • No compression
  • ROS service calls need several handshakes for each call
  • Messages are transmitted at the rate at which they are published

Our network stack offers the same functions as the ROS network transparency, but addresses each of the above issues.

Alternatives

nimbro_network offers robust transport of ROS topics and services over unreliable networks. For high-level features like auto-discovery, job scheduling etc. take a look at alternatives like rocon or multimaster_fkie.

Features

  • Topic transport:
    • TCP protocol for transmission guarantee (still with communication timeouts!)
    • UDP protocol for streaming data (data which has no meaning if it arrives late)
    • Optional transparent BZip2 compression using libbz2
    • Automatic topic discovery on the receiver side. The transmitter defines which topics get transferred
    • Optional rate-limiting for each topic
    • Experimental Forward Error Correction (FEC) for the UDP transport
  • Service transport:
    • TCP protocol with minimal latency (support for TCP Fast-Open is included)
    • UDP protocol
  • Additional nodes:
    • Special nimbro_log_transport node for transporting the ROS log over a lossy connection
    • Special tf_throttle node for creating & transferring TF snapshots at pre- defined intervals.
    • Special nimbro_cam_transport package for encoding/decoding camera images to/from H.264

Getting started

See nimbro_topic_transport/README.md and nimbro_service_transport/README.md for documentation on the topic and service transport.

State

nimbro_network is mature in the sense that it has been used extensively in the preparation and during the competition of the SpaceBotCup and in the DARPA Robotics Challenge.

In the DRC, the software was used for the high-bandwidth link. Communication over the low-bandwidth link was handled by custom, highly specific code, which is not released at this point.

License

nimbro_network is licensed under the BSD 3-clause license. This repository includes the QCustomPlot library, which is licensed under the GPLv3 license.

Authors & Contact

Max Schwarz <[email protected]>
Institute of Computer Science VI
Rheinische Friedrich-Wilhelms-Universitรคt Bonn
Friedrich Ebert-Allee 144
53113 Bonn

More Repositories

1

rviz_cinematographer

Easy to use tools to create and edit trajectories for the rviz camera.
C++
224
star
2

attitude_estimator

A C++ implementation of a nonlinear 3D IMU fusion algorithm
C++
136
star
3

TopiCo

Time-optimal Trajectory Generation and Control
C++
124
star
4

easy_pbr

Lightweight Physically-Based Renderer designed for ease of use and fast prototyping
C++
104
star
5

lidar_mars_registration

C++
96
star
6

opt_control

Time-optimal Trajectory Generation and Control
95
star
7

mrs_laser_map

Local Multiresolution Grids for Efficient 3D Laser Mapping and Localization
C++
79
star
8

stillleben

Physics-based Scene Synthesis for Deep Learning
C++
61
star
9

humanoid_op_ros

ROS-based software framework for the igus Humanoid Open Platform.
C++
55
star
10

lattice_net

Fast Point Cloud Segmentation Using Permutohedral Lattices
Cuda
47
star
11

pointcloud_evaluation_tool

C++
44
star
12

DirectionalTSDF

Directional TSDF for improved reconstruction of surfaces with different orientation
C++
39
star
13

SmartEdgeSensor3DHumanPose

Real-Time Multi-View 3D Human Pose Estimation using Semantic Feedback to Smart Edge Sensors
C++
34
star
14

TemporalBallDetection

Official implementation of the paper: Utilizing Temporal Information in Deep Convolutional Network for Efficient Soccer Ball Detection and Tracking
Python
34
star
15

rot_conv_lib

Library for working with 3D rotations in C++
C++
25
star
16

vp-suite

A general framework for video prediction in PyTorch.
Python
23
star
17

neural_mvs

Official implementation for the publication "NeuralMVS: Bridging Multi-View Stereo and Novel View Synthesis"
Jupyter Notebook
22
star
18

catch_ros

ROS wrapper for the Catch unit test framework
C++
22
star
19

primitive_fitter

Automatic Optimal Capsule and Box collision primitives generator and inertia approximator given a URDF or XACRO file
C++
21
star
20

ExtrCamCalib_PersonKeypoints

Marker-free Extrinsic Camera Calibration using Person Keypoint Detections
Python
19
star
21

OCVP-object-centric-video-prediction

Official implementation of: "Object-Centric Video Prediction via Decoupling of Object Dynamics and Interactions" by Villar-Corrales et al. ICIP 2023
Python
14
star
22

Local_Freq_Transformer_Net

Jupyter Notebook
14
star
23

MotionSegmentation

Jupyter Notebook
13
star
24

synpick

SynPick dataset generator
C++
12
star
25

object_detection_in_laser_range_data

ROS packages to detect objects in sparse laser range data
C++
12
star
26

matlab_octave_rotations_lib

Library for working with 3D rotations in Matlab/Octave
MATLAB
11
star
27

temporal_latticenet

This repository provides the official implementation for the publication "Abstract Flow for Temporal Semantic Segmentation on the Permutohedral Lattice"
Python
11
star
28

state_controller_library

A C++ framework that implements generalised finite state machines
C++
10
star
29

shape_registration

Library for Shape Registration suited for Transfer of Grasping Skills
C++
10
star
30

FreqNet

Jupyter Notebook
9
star
31

HumanoidRobotPoseEstimation

Python
9
star
32

MSPred

Official implementation of "Video Prediction at Multiple Spatio-Temporal Scales with Hierarchical Recurrent Networks." by Villar-Corrales et al.
Python
7
star
33

LocDepVideoPrediction

Location Dependency in Video Prediction
Jupyter Notebook
5
star
34

pose_graph_prediction

Python
5
star
35

sl-scenes

An easy-to-use extension framework for stillleben that generates realistic and visually diverse indoor scenes with physically interacting objects
Python
4
star
36

Intention-Aware-Video-Prediction

Python
4
star
37

vector_compression

Utilities for 3D and 4D (unit) vector compression
C++
4
star
38

keypoint_gait_generator

Matlab implementation of the Keypoint Gait Generator
MATLAB
3
star
39

Pred_Semantic

Semantic Prediction: Which One Should Come First, Recognition or Prediction?
Python
3
star
40

abstract_vin

Python
3
star
41

SmartEdgeSensor3DScenePerception

3D Semantic Scene Perception using Distributed Smart Edge Sensors
C++
3
star
42

behaviour_control_framework

A C++ framework that uses inhibition trees for behaviour control
C++
3
star
43

MeshHashingDTSDF

Implementation of our paper "Directional TSDF: Modeling Surface Orientation for Coherent Meshes"
Cuda
2
star
44

multi_hypothesis_tracking

ROS package providing generic libraries for Multi Hypothesis Tracking.
C++
2
star
45

JetsonTRTPerception

C++
2
star
46

multi_hypothesis_tracking_msgs

CMake
2
star
47

Roughness_Sensing

Audio-based Roughness Sensing and Tactile Feedback for Haptic Perception in Telepresence
Jupyter Notebook
1
star
48

hands-free_locomotion_controller

1
star
49

planning_abstraction_net

C++
1
star
50

ros_openni2_multicam

Custom OpenNI2 driver designed especially for multicamera setups
C++
1
star
51

vismotcoord

Focused Online Visual-Motor coordination for Baxter robot
C++
1
star
52

nimbro_fsm2

C++17 Finite State Machine Framework
C++
1
star