Bridging your browser to the ROS 2.0
Branch: develop
Clone or download
qiuzhong and minggangw [Update] Use flexible bridge address and update README for the demo (#…

When the user open the demo page remotely, it need to update the
up-board IP to run the demo. This is inconvenient and not necessary.
We can use window.location.hostname to fix it.
Latest commit 341ed13 Sep 17, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin Remove the unused rosbridge.bat Feb 12, 2018
data Adding authentication module (not integrated into server yet) Dec 27, 2017
demo [Update] Use flexible bridge address and update README for the demo (#… Sep 17, 2018
examples Change the link of roslibjs to get the latest edition. Jan 18, 2018
lib Disable the usage of TypedArray in rclnodejs Aug 16, 2018
test [UT] Add tests for Service APIs of roslibjs over ros2-web-bridge May 15, 2018
.eslintignore [test] Enable test automation on Travis CI (#23) Jan 16, 2018
.eslintrc Initiate the project Dec 21, 2017
.gitignore Initiate the project Dec 21, 2017
Dockerfile Update the travis ci configuration Jul 27, 2018
LICENSE Initiate the project Dec 21, 2017 Upgrade the dependencies and add the npm-check badge Apr 8, 2018
appveyor.yml Upgrade dependencies of ws and rclnodejs Jul 27, 2018
index.js Close the socket server when exiting Feb 11, 2018 Add script for generating the package for npm Feb 12, 2018
package.json Bump to 0.2.5 Sep 3, 2018

ros2-web-bridgeBuild StatusBuild statusnpmlicensedependencies Status


Server Implementations of the rosbridge v2 Protocol

ros2-web-bridge, which leverages the rclnodejs client, provides a JSON interface to ROS 2.0 by adopting the rosbridge v2 protocol. The bridge can process commands through JSON tuneled over WebSockets.

Supported Clients

A client is a program that communicates with ros2-web-bridge using its JSON API. Clients include:

  • roslibjs - A JavaScript API, which communicates with ros2-web-bridge over WebSockets.


1.Prepare for ROS2

Please reference the wiki to install ROS2.

2.Install Node.js You can install Node.js:

  • Download from Node.js offical website, and install it.
  • Use the Node Version Manager (nvm) to install it.

3.Install dependencies

npm install

Run Examples

1.Start ros2-web-bridge module:

node bin/rosbridge.js

2.Start the express server:

cd examples && node index.js

3.Open your browser, and navigate to URL:


Not supported op

Some experimental operations defined by rosbridge v2.0 protocol specification are not supported by ros2-web-bridge now, please check out the list:

and the authentication

Compability with rosbridge v2.0 protocol

We are trying to obey the rosbridge v2 protocol, but there are still some operation commands which can not follow the spec. The table below lists the differences:

opreations rosbridge v2.0 protocol spec ros2-web-bridge implementation
publish If the msg is a subset of the type of the topic, then a warning status message is sent and the unspecified fields are filled in with defaults. If the subset of the msg is unspecified, then an error status message is sent and this message is dropped.
subscribe The type of the topic is optional. The type of the topic must be offered.
call_service No requirement of the service type. You have to transfer both the request and the type of service through args.

If you use roslibjs as the client running in the browser, please reference the code snippet below:

  • Subscribe a topic.
// Define a topic with its type.
var example = new ROSLIB.Topic({
  ros : ros,
  name : '/example_topic',
  messageType : 'std_msgs/String'

// Subscribe a topic.
example.subscribe(function(message) {
  console.log(`Receive message: ${message}`);
  • Call a service.
let addTwoInts = new ROSLIB.Service({
  ros : ros,
  name : '/add_two_ints',
  serviceType : 'example_interfaces/AddTwoInts'

let request = new ROSLIB.ServiceRequest({
  a : 1,
  b : 2

// Encapsulate the request and the type of service into args.
let args = {request: request, type: 'example_interfaces/AddTwoInts'};
addTwoInts.callService(args, function(result) {
  console.log(`Receive result: ${result.sum}`);


If you want to contribute code to this project, first you need to fork the project. The next step is to send a pull request (PR) for review. The PR will be reviewed by the project team members. Once you have gained "Look Good To Me (LGTM)", the project maintainers will merge the PR.


This project abides by Apache License 2.0.