Coder Social home page Coder Social logo

utexas-bwi / bluetooth_bridge Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 1.0 100 KB

Connect two full machines over a bluetooth bound serial socket to transfer ROS messages

License: BSD 2-Clause "Simplified" License

CMake 1.44% Python 97.29% Shell 1.26%

bluetooth_bridge's People

Contributors

maxsvetlik avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

dongmuji

bluetooth_bridge's Issues

Add tools to analyze latency, bandwidth, etc

It would be helpful to have some tools that could identify possible strengths or weaknesses of the bluetooth_bridge suite as a multi-robot communication system.

In addition to raw statistics like cross-machine message latency and bandwidth, it is prudent to analyze how these things scale when resources become scarce, i.e. when

  1. more than 1 agent is connected at the same time
  2. agents are sharing large messages such as video streams

serial bridge nor port manager handle connection loss gracefully

While the serial_bridge does not fail on a connection loss event, the previously connected agent's topics are still available locally but no longer publishing data.

The serial_bridge does have the ability to deregister publishers and subscribers, but ideally this would happen when the connected bluetooth device is no longer within range- something the port manager has access to in theory. The ability for the port manager to notify the serial_bridge of this is likely blocked due to the reliance on system calls (see #2)

Documentation

Cohesive documentation is needed:

  • consolidate information in the READMEs
  • add docstrings to functions
  • add document headings
  • add license and author information where needed

Remove system calls from port manager

The port manager sets up a virtual serial port through system calls to make the port accessible to the entire Linux machine.

While this works, it has many shortcomings:

  1. it limits the degree of error handling around the creation and maintenance of ports, especially when connection is lost
  2. it requires the port manager to be run with sudo access
  3. it has a fundamental limit on scalability, as there are a finite number of virtual ports that can be made
  4. it requires a serial_bridge instance for each port

if feasible, virtual ports should be eliminated and migrated to serial port objects that emulate the RFCOMM bluetooth profile.

Implement optional rate limiter for incoming topics

Some standard topics can have needlessly high publish rates. /odom for instance on the V4s have a publish rate of 100Hz. The ability to cap incoming messages to a lower publish rate would reduce the load on the limited bluetooth bandwidth.

Correct the behavior of other ROS classes for serial_bridge

The Subscriber class works as intended bidirectionally- the local machine is expected to have those topics already available, subscribes to them internally and then relays them over the socket to the bridge on the remote, which in turn makes Publisher objects to handle the incoming flow.

Ideally Publisher objects could handle the opposite case, i.e. the local machine specifically wants to listen to a particular topic on a remote bridge.

This functionality should be close to working in its current state, but doesn't quite work as intended.
Other classes have not been thoroughly tested at all ( ServiceClient, ServiceServer ) as their use for close proximity, multi agent interactions is lower priority than data sharing. Even so, these should be tested and modified if needed for completeness.

Add multiagent support

While #8 lays the groundwork for multiple simultaneous connections, this has not been extensively tested

IO handling between BT PortManager and Port Manager Interface

Proper IO handling system between bluetooth_port_manager and port_manager_interface, the latter being introduced by #8. While port_manager_interface acts as an intermediary between the Python library bluetooth_port_manager and the ROS nodes of serial_bridge, there is useful output from port_manager_interface that isn't logged by ROS due to the fact that it is printed directly to the console.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.