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.
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
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:
http://localhost:3000/html/publisher.html
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
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.