Skip to content

Commit 8b606c7

Browse files
Add an example and reference in main readme
1 parent dceec5d commit 8b606c7

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ rclnodejs.init().then(() => {
2828
- [Tutorials](./tutorials/)
2929
- [Electron-based Visualization](#electron-based-visualization)
3030
- [Using TypeScript](#using-rclnodejs-with-typescript)
31+
- [Observable Subscriptions](#observable-subscriptions)
3132
- [ROS2 Interface Message Generation](#ros2-interface-message-generation)
3233
- [Performance Benchmarks](#performance-benchmarks)
3334
- [Efficient Usage Tips](./docs/EFFICIENCY.md)
@@ -133,6 +134,27 @@ rclnodejs.init().then(() => {
133134

134135
See [TypeScript demos](https://github.com/RobotWebTools/rclnodejs/tree/develop/ts_demo) for more examples.
135136

137+
## Observable Subscriptions
138+
139+
rclnodejs supports [RxJS](https://rxjs.dev/) Observable subscriptions for reactive programming with ROS 2 messages. Use operators like `throttleTime()`, `debounceTime()`, `map()`, and `combineLatest()` to build declarative message processing pipelines.
140+
141+
```javascript
142+
const { throttleTime, map } = require('rxjs');
143+
144+
const obsSub = node.createObservableSubscription(
145+
'sensor_msgs/msg/LaserScan',
146+
'/scan'
147+
);
148+
obsSub.observable
149+
.pipe(
150+
throttleTime(200),
151+
map((msg) => msg.ranges)
152+
)
153+
.subscribe((ranges) => console.log('Ranges:', ranges.length));
154+
```
155+
156+
See the [Observable Subscriptions Tutorial](./tutorials/observable-subscriptions.md) for more details.
157+
136158
## ROS2 Interface Message Generation
137159

138160
ROS client libraries convert IDL message descriptions into target language source code. rclnodejs provides the `generate-ros-messages` script to generate JavaScript message interface files and TypeScript declarations.

0 commit comments

Comments
 (0)