rpclpy 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rpclpy-1.0.0/PKG-INFO +587 -0
- rpclpy-1.0.0/README.md +526 -0
- rpclpy-1.0.0/pyproject.toml +67 -0
- rpclpy-1.0.0/rpclpy/CommunicationManager.py +418 -0
- rpclpy-1.0.0/rpclpy/DashboardApp.py +1261 -0
- rpclpy-1.0.0/rpclpy/KnowledgeManager.py +261 -0
- rpclpy-1.0.0/rpclpy/LoggingAndTracking.py +131 -0
- rpclpy-1.0.0/rpclpy/__init__.py +7 -0
- rpclpy-1.0.0/rpclpy/node.py +248 -0
- rpclpy-1.0.0/rpclpy/utils.py +15 -0
- rpclpy-1.0.0/rpclpy.egg-info/PKG-INFO +587 -0
- rpclpy-1.0.0/rpclpy.egg-info/SOURCES.txt +14 -0
- rpclpy-1.0.0/rpclpy.egg-info/dependency_links.txt +1 -0
- rpclpy-1.0.0/rpclpy.egg-info/requires.txt +50 -0
- rpclpy-1.0.0/rpclpy.egg-info/top_level.txt +1 -0
- rpclpy-1.0.0/setup.cfg +4 -0
rpclpy-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,587 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: rpclpy
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Python client library for building distributed node-based systems with communication, events, and knowledge management
|
|
5
|
+
Author-email: RoboSapiens Team <saharnasimi96@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/saharnn96/robosapiens-clientlibraries
|
|
8
|
+
Project-URL: Repository, https://github.com/saharnn96/robosapiens-clientlibraries
|
|
9
|
+
Project-URL: Issues, https://github.com/saharnn96/robosapiens-clientlibraries/issues
|
|
10
|
+
Keywords: robotics,distributed systems,redis,pub/sub,communication,knowledge management,MAPE-K
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
|
+
Classifier: Topic :: System :: Distributed Computing
|
|
21
|
+
Requires-Python: >=3.8
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
Requires-Dist: redis>=4.0
|
|
24
|
+
Requires-Dist: PyYAML>=6.0
|
|
25
|
+
Provides-Extra: mqtt
|
|
26
|
+
Requires-Dist: paho-mqtt>=1.6; extra == "mqtt"
|
|
27
|
+
Provides-Extra: rabbitmq
|
|
28
|
+
Requires-Dist: pika>=1.3; extra == "rabbitmq"
|
|
29
|
+
Provides-Extra: kafka
|
|
30
|
+
Requires-Dist: kafka-python>=2.0; extra == "kafka"
|
|
31
|
+
Provides-Extra: websocket
|
|
32
|
+
Requires-Dist: websocket-client>=1.6; extra == "websocket"
|
|
33
|
+
Provides-Extra: zenoh
|
|
34
|
+
Requires-Dist: eclipse-zenoh>=0.10; extra == "zenoh"
|
|
35
|
+
Provides-Extra: memcached
|
|
36
|
+
Requires-Dist: python-memcached>=1.59; extra == "memcached"
|
|
37
|
+
Provides-Extra: ignite
|
|
38
|
+
Requires-Dist: pyignite>=0.6; extra == "ignite"
|
|
39
|
+
Provides-Extra: hazelcast
|
|
40
|
+
Requires-Dist: hazelcast-python-client>=5.0; extra == "hazelcast"
|
|
41
|
+
Provides-Extra: tarantool
|
|
42
|
+
Requires-Dist: tarantool>=0.11; extra == "tarantool"
|
|
43
|
+
Provides-Extra: aerospike
|
|
44
|
+
Requires-Dist: aerospike>=8.0; extra == "aerospike"
|
|
45
|
+
Provides-Extra: dashboard
|
|
46
|
+
Requires-Dist: dash>=2.0; extra == "dashboard"
|
|
47
|
+
Requires-Dist: plotly>=5.0; extra == "dashboard"
|
|
48
|
+
Provides-Extra: all
|
|
49
|
+
Requires-Dist: paho-mqtt>=1.6; extra == "all"
|
|
50
|
+
Requires-Dist: pika>=1.3; extra == "all"
|
|
51
|
+
Requires-Dist: kafka-python>=2.0; extra == "all"
|
|
52
|
+
Requires-Dist: websocket-client>=1.6; extra == "all"
|
|
53
|
+
Requires-Dist: eclipse-zenoh>=0.10; extra == "all"
|
|
54
|
+
Requires-Dist: python-memcached>=1.59; extra == "all"
|
|
55
|
+
Requires-Dist: pyignite>=0.6; extra == "all"
|
|
56
|
+
Requires-Dist: hazelcast-python-client>=5.0; extra == "all"
|
|
57
|
+
Requires-Dist: tarantool>=0.11; extra == "all"
|
|
58
|
+
Requires-Dist: aerospike>=8.0; extra == "all"
|
|
59
|
+
Requires-Dist: dash>=2.0; extra == "all"
|
|
60
|
+
Requires-Dist: plotly>=5.0; extra == "all"
|
|
61
|
+
|
|
62
|
+
# RoboSapiens Client Libraries
|
|
63
|
+
|
|
64
|
+
A collection of high-performance client libraries for building distributed node-based systems with communication, events, and knowledge management capabilities. Available in **Python**, **C++**, and **Rust** with consistent APIs and Redis-based backend.
|
|
65
|
+
|
|
66
|
+
[](https://python.org)
|
|
67
|
+
[](https://en.cppreference.com/)
|
|
68
|
+
[](https://rust-lang.org)
|
|
69
|
+
[](https://redis.io)
|
|
70
|
+
|
|
71
|
+
## ๐ Features
|
|
72
|
+
|
|
73
|
+
All libraries provide:
|
|
74
|
+
|
|
75
|
+
- **Node Communication**: Publish/subscribe messaging and events with automatic metadata
|
|
76
|
+
- **Knowledge Management**: Distributed key-value storage with object serialization
|
|
77
|
+
- **Redis Integration**: Fast, reliable backend for all operations across multiple databases
|
|
78
|
+
- **Multi-language Support**: Consistent APIs across Python, C++, and Rust
|
|
79
|
+
- **Real-time Communication**: Event-driven architecture with thread-safe operations
|
|
80
|
+
- **Type Safety**: Strong typing and serialization (JSON, Pickle, Serde)
|
|
81
|
+
- **Logging & Monitoring**: Built-in structured logging with configurable levels
|
|
82
|
+
- **UUID & Timestamps**: Automatic message identification and timestamping
|
|
83
|
+
- **Error Handling**: Comprehensive error management and recovery
|
|
84
|
+
|
|
85
|
+
## ๐ Repository Structure
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
robosapiens-clientlibraries/
|
|
89
|
+
โโโ rpclpy/ # Python library
|
|
90
|
+
โ โโโ __init__.py # Library initialization
|
|
91
|
+
โ โโโ node.py # Main Node class
|
|
92
|
+
โ โโโ CommunicationManager.py # Redis pub/sub handling
|
|
93
|
+
โ โโโ KnowledgeManager.py # Knowledge storage
|
|
94
|
+
โ โโโ LoggingAndTracking.py # Logging infrastructure
|
|
95
|
+
โ โโโ examples/ # Python examples
|
|
96
|
+
โ โโโ sensor_node.py # Temperature sensor simulation
|
|
97
|
+
โ โโโ monitor_node.py # Data monitoring and analysis
|
|
98
|
+
โ โโโ data_models.py # Shared data structures
|
|
99
|
+
โ โโโ config.yaml # Configuration example
|
|
100
|
+
โ โโโ README.md # Examples documentation
|
|
101
|
+
โโโ rpclcpp/ # C++ library
|
|
102
|
+
โ โโโ include/ # Header files
|
|
103
|
+
โ โ โโโ node.hpp # Main Node interface
|
|
104
|
+
โ โ โโโ communication_manager.hpp
|
|
105
|
+
โ โ โโโ knowledge_manager.hpp
|
|
106
|
+
โ โ โโโ logger.hpp
|
|
107
|
+
โ โโโ src/ # Implementation files
|
|
108
|
+
โ โโโ examples/ # C++ examples
|
|
109
|
+
โ โโโ CMakeLists.txt # Build configuration
|
|
110
|
+
โโโ rpclrs/ # Rust library
|
|
111
|
+
โ โโโ src/ # Rust source code
|
|
112
|
+
โ โ โโโ lib.rs # Library entry point
|
|
113
|
+
โ โ โโโ node.rs # Main Node implementation
|
|
114
|
+
โ โ โโโ communication_manager.rs
|
|
115
|
+
โ โ โโโ knowledge_manager.rs
|
|
116
|
+
โ โโโ examples/ # Rust examples
|
|
117
|
+
โ โโโ Cargo.toml # Package configuration
|
|
118
|
+
โโโ .gitignore # Git ignore patterns
|
|
119
|
+
โโโ README.md # This file
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## ๐ Quick Start
|
|
123
|
+
|
|
124
|
+
### Python (rpclpy)
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
from rpclpy.node import Node
|
|
128
|
+
import yaml
|
|
129
|
+
|
|
130
|
+
# Load config and create node
|
|
131
|
+
with open('config.yaml', 'r') as f:
|
|
132
|
+
config = yaml.safe_load(f)
|
|
133
|
+
|
|
134
|
+
node = Node(config)
|
|
135
|
+
node.start()
|
|
136
|
+
|
|
137
|
+
# Publish event
|
|
138
|
+
node.publish_event("sensor/data", {"temperature": 22.5})
|
|
139
|
+
|
|
140
|
+
# Subscribe to events
|
|
141
|
+
node.register_event_callback("alerts/high", handle_alert)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### C++ (rpclcpp)
|
|
145
|
+
|
|
146
|
+
```cpp
|
|
147
|
+
#include "node.hpp"
|
|
148
|
+
using namespace rpclcpp;
|
|
149
|
+
|
|
150
|
+
Node node("MyNode");
|
|
151
|
+
node.start();
|
|
152
|
+
|
|
153
|
+
// Publish event
|
|
154
|
+
json data = {{"temperature", 22.5}};
|
|
155
|
+
node.publish_event("sensor/data", data);
|
|
156
|
+
|
|
157
|
+
// Subscribe to events
|
|
158
|
+
node.register_event_callback("alerts/high", [](const std::string& topic, const std::string& msg) {
|
|
159
|
+
// Handle alert
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Rust (rpclrs)
|
|
164
|
+
|
|
165
|
+
```rust
|
|
166
|
+
use rpclrs::Node;
|
|
167
|
+
use serde_json::json;
|
|
168
|
+
|
|
169
|
+
let mut node = Node::new("MyNode", "localhost", 6379)?;
|
|
170
|
+
node.start()?;
|
|
171
|
+
|
|
172
|
+
// Publish event
|
|
173
|
+
let data = json!({"temperature": 22.5});
|
|
174
|
+
node.publish_event("sensor/data", data)?;
|
|
175
|
+
|
|
176
|
+
// Subscribe to events
|
|
177
|
+
node.register_event_callback("alerts/high", |topic, message| {
|
|
178
|
+
println!("Alert: {}", message);
|
|
179
|
+
})?;
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## ๐ ๏ธ Installation & Setup
|
|
183
|
+
|
|
184
|
+
### Prerequisites
|
|
185
|
+
|
|
186
|
+
- **Redis Server**: Version 6.0+ running on localhost:6379 (or configured host)
|
|
187
|
+
- **Operating System**: Linux, macOS, or Windows
|
|
188
|
+
- Language-specific dependencies (see individual library READMEs)
|
|
189
|
+
|
|
190
|
+
### Redis Installation
|
|
191
|
+
|
|
192
|
+
**Ubuntu/Debian:**
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
sudo apt update && sudo apt install redis-server
|
|
196
|
+
sudo systemctl start redis-server
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**macOS:**
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
brew install redis
|
|
203
|
+
brew services start redis
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Docker:**
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
docker run --name redis-server -p 6379:6379 -d redis
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Python Setup (rpclpy)
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
cd rpclpy
|
|
216
|
+
pip install redis paho-mqtt PyYAML # Install dependencies
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### C++ Setup (rpclcpp)
|
|
220
|
+
|
|
221
|
+
**Ubuntu/Debian:**
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
sudo apt install cmake build-essential libhiredis-dev nlohmann-json3-dev
|
|
225
|
+
cd rpclcpp
|
|
226
|
+
mkdir build && cd build
|
|
227
|
+
cmake ..
|
|
228
|
+
make -j$(nproc)
|
|
229
|
+
sudo make install # Optional: system-wide installation
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**Build Examples:**
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
make sensor_node monitor_node
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Rust Setup (rpclrs)
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
cd rpclrs
|
|
242
|
+
cargo build --release
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Build Examples:**
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
cargo build --examples
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## ๐ Examples
|
|
252
|
+
|
|
253
|
+
### Sensor Monitoring System
|
|
254
|
+
|
|
255
|
+
All three libraries include a complete **real-time sensor monitoring system** that demonstrates:
|
|
256
|
+
|
|
257
|
+
- **Sensor Node**:
|
|
258
|
+
|
|
259
|
+
- Simulates realistic temperature sensors with drift and noise
|
|
260
|
+
- Publishes readings as events with automatic timestamping
|
|
261
|
+
- Generates alerts for abnormal conditions
|
|
262
|
+
- Stores data in knowledge base for persistence
|
|
263
|
+
|
|
264
|
+
- **Monitor Node**:
|
|
265
|
+
|
|
266
|
+
- Subscribes to sensor events in real-time
|
|
267
|
+
- Processes and analyzes readings for patterns
|
|
268
|
+
- Maintains system statistics and health metrics
|
|
269
|
+
- Responds to alerts with configurable severity levels
|
|
270
|
+
- Provides comprehensive monitoring dashboard
|
|
271
|
+
|
|
272
|
+
- **Data Models**:
|
|
273
|
+
- `SensorReading`: Temperature data with metadata
|
|
274
|
+
- `Alert`: Alert notifications with severity levels
|
|
275
|
+
- `SystemStatus`: Overall system health metrics
|
|
276
|
+
|
|
277
|
+
#### What You'll See
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
SENSOR MONITORING STATUS
|
|
281
|
+
============================================================
|
|
282
|
+
Active Sensors: 1
|
|
283
|
+
Total Readings: 47
|
|
284
|
+
Alert Count: 3
|
|
285
|
+
Average Temperature: 23.2ยฐC
|
|
286
|
+
|
|
287
|
+
Sensor Details:
|
|
288
|
+
TEMP_001: 24.1ยฐC [normal] at Lab Room A
|
|
289
|
+
|
|
290
|
+
Recent Alerts (2):
|
|
291
|
+
[HIGH] Temperature too high: 31.2ยฐC at Lab Room A
|
|
292
|
+
[MEDIUM] Temperature outside normal range: 27.8ยฐC at Lab Room A
|
|
293
|
+
------------------------------------------------------------
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
#### Running the Examples
|
|
297
|
+
|
|
298
|
+
**Python (Recommended for beginners):**
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
cd rpclpy/examples
|
|
302
|
+
# Terminal 1 - Start monitoring first
|
|
303
|
+
python monitor_node.py
|
|
304
|
+
|
|
305
|
+
# Terminal 2 - Start sensor
|
|
306
|
+
python sensor_node.py
|
|
307
|
+
|
|
308
|
+
# Alternative: Run automated test
|
|
309
|
+
python test_example.py
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**C++:**
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
cd rpclcpp/build
|
|
316
|
+
# Terminal 1
|
|
317
|
+
./monitor_node
|
|
318
|
+
|
|
319
|
+
# Terminal 2
|
|
320
|
+
./sensor_node
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**Rust:**
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
cd rpclrs
|
|
327
|
+
# Terminal 1
|
|
328
|
+
cargo run --example monitor_node
|
|
329
|
+
|
|
330
|
+
# Terminal 2
|
|
331
|
+
cargo run --example sensor_node
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
#### Testing All Features
|
|
335
|
+
|
|
336
|
+
Each library includes a comprehensive test script:
|
|
337
|
+
|
|
338
|
+
**Python:**
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
cd rpclpy/examples
|
|
342
|
+
python run_tests.py # Automated test suite with Redis setup check
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
The test validates:
|
|
346
|
+
|
|
347
|
+
- โ
Node initialization and startup
|
|
348
|
+
- โ
Event publishing and subscription
|
|
349
|
+
- โ
Message passing between nodes
|
|
350
|
+
- โ
Knowledge base read/write operations
|
|
351
|
+
- โ
Object serialization/deserialization
|
|
352
|
+
- โ
Alert generation and handling
|
|
353
|
+
- โ
Real-time data processing
|
|
354
|
+
|
|
355
|
+
## ๐๏ธ Architecture
|
|
356
|
+
|
|
357
|
+
### System Overview
|
|
358
|
+
|
|
359
|
+
```
|
|
360
|
+
โโโโโโโโโโโโโโโ Events/Messages โโโโโโโโโโโโโโโ
|
|
361
|
+
โ Sensor Node โโโโโโโโโโโโโโโโโโโโโโโโบโMonitor Node โ
|
|
362
|
+
โโโโโโโโโโโโโโโ Real-time โโโโโโโโโโโโโโโ
|
|
363
|
+
โ Communication โ
|
|
364
|
+
โผ โผ
|
|
365
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
366
|
+
โ Redis Backend โ
|
|
367
|
+
โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
368
|
+
โ โ Events โ โMessages โ โ Knowledge Base โ โ
|
|
369
|
+
โ โ (DB 0) โ โ (DB 1) โ โ (DB 2) โ โ
|
|
370
|
+
โ โ Pub/Sub โ โ Pub/Sub โ โ Key-Value โ โ
|
|
371
|
+
โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
372
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Communication Flow
|
|
376
|
+
|
|
377
|
+
1. **Events**: Structured data with automatic metadata (UUID, timestamp)
|
|
378
|
+
2. **Messages**: Direct point-to-point communication
|
|
379
|
+
3. **Knowledge**: Persistent storage with object serialization
|
|
380
|
+
|
|
381
|
+
### Thread Safety
|
|
382
|
+
|
|
383
|
+
All libraries implement thread-safe operations:
|
|
384
|
+
|
|
385
|
+
- **Python**: Threading locks and atomic operations
|
|
386
|
+
- **C++**: Mutexes and RAII patterns
|
|
387
|
+
- **Rust**: Arc/Mutex for shared state management
|
|
388
|
+
|
|
389
|
+
## ๐ง Configuration
|
|
390
|
+
|
|
391
|
+
All libraries use Redis with separated databases:
|
|
392
|
+
|
|
393
|
+
- **DB 0**: Events (pub/sub)
|
|
394
|
+
- **DB 1**: Messages (pub/sub)
|
|
395
|
+
- **DB 2**: Knowledge (key-value storage)
|
|
396
|
+
|
|
397
|
+
Example configuration (Python):
|
|
398
|
+
|
|
399
|
+
```yaml
|
|
400
|
+
Event_Manager_Config:
|
|
401
|
+
protocol: "redis"
|
|
402
|
+
host: "localhost"
|
|
403
|
+
port: 6379
|
|
404
|
+
db: 0
|
|
405
|
+
|
|
406
|
+
Message_Manager_Config:
|
|
407
|
+
protocol: "redis"
|
|
408
|
+
host: "localhost"
|
|
409
|
+
port: 6379
|
|
410
|
+
db: 1
|
|
411
|
+
|
|
412
|
+
Knowledge_Config:
|
|
413
|
+
knowledge_type: "redis"
|
|
414
|
+
host: "localhost"
|
|
415
|
+
port: 6379
|
|
416
|
+
db: 2
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
## ๐ API Consistency
|
|
420
|
+
|
|
421
|
+
All three libraries provide the same core functionality:
|
|
422
|
+
|
|
423
|
+
| Operation | Python | C++ | Rust |
|
|
424
|
+
| --------------- | ------------------------------------ | ------------------------------------ | ------------------------------------ |
|
|
425
|
+
| Create Node | `Node(config)` | `Node("name")` | `Node::new("name", host, port)` |
|
|
426
|
+
| Start | `node.start()` | `node.start()` | `node.start()` |
|
|
427
|
+
| Publish Event | `publish_event(topic, data)` | `publish_event(topic, json)` | `publish_event(topic, value)` |
|
|
428
|
+
| Subscribe | `register_event_callback(topic, fn)` | `register_event_callback(topic, fn)` | `register_event_callback(topic, fn)` |
|
|
429
|
+
| Write Knowledge | `write_knowledge(key, value)` | `write_knowledge(key, value)` | `write_knowledge(key, value)` |
|
|
430
|
+
| Read Knowledge | `read_knowledge(key)` | `read_knowledge(key)` | `read_knowledge(key)` |
|
|
431
|
+
|
|
432
|
+
## ๐งช Testing
|
|
433
|
+
|
|
434
|
+
### Comprehensive Test Coverage
|
|
435
|
+
|
|
436
|
+
Each library includes comprehensive examples that test:
|
|
437
|
+
|
|
438
|
+
- โ
**Node Communication**: Event and message passing between nodes
|
|
439
|
+
- โ
**Event Publishing/Subscribing**: Real-time event distribution
|
|
440
|
+
- โ
**Message Passing**: Direct point-to-point communication
|
|
441
|
+
- โ
**Knowledge Management**: Persistent data storage and retrieval
|
|
442
|
+
- โ
**Object Serialization**: Type-safe data exchange
|
|
443
|
+
- โ
**Alert Generation**: Automated alert creation and handling
|
|
444
|
+
- โ
**Real-time Data Processing**: Stream processing capabilities
|
|
445
|
+
- โ
**Error Handling**: Graceful error recovery and logging
|
|
446
|
+
- โ
**Thread Safety**: Concurrent operations validation
|
|
447
|
+
- โ
**Memory Management**: Resource cleanup and leak prevention
|
|
448
|
+
|
|
449
|
+
### Performance Characteristics
|
|
450
|
+
|
|
451
|
+
- **Latency**: Sub-millisecond message delivery
|
|
452
|
+
- **Throughput**: 10,000+ messages/second per node
|
|
453
|
+
- **Memory**: Efficient circular buffers for data retention
|
|
454
|
+
- **Scalability**: Horizontal scaling through Redis clustering
|
|
455
|
+
|
|
456
|
+
### Monitoring & Observability
|
|
457
|
+
|
|
458
|
+
- **Structured Logging**: JSON-formatted logs with context
|
|
459
|
+
- **Metrics**: Built-in counters for messages, errors, and performance
|
|
460
|
+
- **Health Checks**: Node status and connectivity monitoring
|
|
461
|
+
- **Debug Mode**: Detailed tracing for development and troubleshooting
|
|
462
|
+
|
|
463
|
+
## ๐ Documentation
|
|
464
|
+
|
|
465
|
+
- [Python Library (rpclpy)](./rpclpy/README.md)
|
|
466
|
+
- [C++ Library (rpclcpp)](./rpclcpp/README.md)
|
|
467
|
+
- [Rust Library (rpclrs)](./rpclrs/README.md)
|
|
468
|
+
- [Python Examples](./rpclpy/examples/README.md)
|
|
469
|
+
|
|
470
|
+
## ๐ค Contributing
|
|
471
|
+
|
|
472
|
+
We welcome contributions! Here's how to get started:
|
|
473
|
+
|
|
474
|
+
### Development Setup
|
|
475
|
+
|
|
476
|
+
1. **Fork the repository**
|
|
477
|
+
2. **Clone your fork**: `git clone https://github.com/yourusername/robosapiens-clientlibraries.git`
|
|
478
|
+
3. **Create a feature branch**: `git checkout -b feature/amazing-feature`
|
|
479
|
+
4. **Set up development environment**:
|
|
480
|
+
|
|
481
|
+
```bash
|
|
482
|
+
# Install Redis
|
|
483
|
+
docker run --name redis-dev -p 6379:6379 -d redis
|
|
484
|
+
|
|
485
|
+
# Setup Python environment
|
|
486
|
+
cd rpclpy && pip install -e .
|
|
487
|
+
|
|
488
|
+
# Setup C++ environment
|
|
489
|
+
cd rpclcpp && mkdir build && cd build && cmake ..
|
|
490
|
+
|
|
491
|
+
# Setup Rust environment
|
|
492
|
+
cd rpclrs && cargo build
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### Contribution Guidelines
|
|
496
|
+
|
|
497
|
+
- **Code Style**: Follow language-specific conventions (PEP 8 for Python, Google Style for C++, Rustfmt for Rust)
|
|
498
|
+
- **Testing**: Add tests for new features and ensure existing tests pass
|
|
499
|
+
- **Documentation**: Update READMEs and inline documentation
|
|
500
|
+
- **Commit Messages**: Use conventional commits format
|
|
501
|
+
- **API Consistency**: Maintain consistent APIs across all three languages
|
|
502
|
+
|
|
503
|
+
### Areas for Contribution
|
|
504
|
+
|
|
505
|
+
- ๐ **Bug Fixes**: Issues and bug reports
|
|
506
|
+
- โจ **New Features**: Additional communication protocols, storage backends
|
|
507
|
+
- ๐ **Documentation**: Tutorials, examples, API documentation
|
|
508
|
+
- ๐ง **Performance**: Optimizations and benchmarks
|
|
509
|
+
- ๐งช **Testing**: Additional test cases and integration tests
|
|
510
|
+
- ๐ **Internationalization**: Multi-language support
|
|
511
|
+
|
|
512
|
+
### Pull Request Process
|
|
513
|
+
|
|
514
|
+
1. Make your changes
|
|
515
|
+
2. Add/update tests
|
|
516
|
+
3. Update documentation
|
|
517
|
+
4. Ensure all tests pass
|
|
518
|
+
5. Submit a pull request with detailed description
|
|
519
|
+
|
|
520
|
+
## ๐ Troubleshooting
|
|
521
|
+
|
|
522
|
+
### Common Issues
|
|
523
|
+
|
|
524
|
+
**Redis Connection Failed:**
|
|
525
|
+
|
|
526
|
+
```bash
|
|
527
|
+
# Check if Redis is running
|
|
528
|
+
redis-cli ping
|
|
529
|
+
# Should return "PONG"
|
|
530
|
+
|
|
531
|
+
# Start Redis if not running
|
|
532
|
+
sudo systemctl start redis-server # Linux
|
|
533
|
+
brew services start redis # macOS
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
**Import Errors (Python):**
|
|
537
|
+
|
|
538
|
+
```bash
|
|
539
|
+
# Make sure rpclpy is in your Python path
|
|
540
|
+
export PYTHONPATH="${PYTHONPATH}:/path/to/robosapiens-clientlibraries"
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
**Build Errors (C++):**
|
|
544
|
+
|
|
545
|
+
```bash
|
|
546
|
+
# Install missing dependencies
|
|
547
|
+
sudo apt install cmake build-essential libhiredis-dev nlohmann-json3-dev
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
### Getting Help
|
|
551
|
+
|
|
552
|
+
- ๐ Check individual library READMEs for detailed setup instructions
|
|
553
|
+
- ๐ Open an issue for bug reports
|
|
554
|
+
- ๐ฌ Start a discussion for questions and feature requests
|
|
555
|
+
- ๐ง Contact maintainers for urgent issues
|
|
556
|
+
|
|
557
|
+
## ๐ License
|
|
558
|
+
|
|
559
|
+
MIT License - see individual library directories for details.
|
|
560
|
+
|
|
561
|
+
## ๐ท๏ธ Version
|
|
562
|
+
|
|
563
|
+
**Current version: 1.0.0**
|
|
564
|
+
|
|
565
|
+
All libraries maintain API compatibility and feature parity across languages.
|
|
566
|
+
|
|
567
|
+
### Changelog
|
|
568
|
+
|
|
569
|
+
- **v1.0.0** (2025-07-31): Initial release with Python, C++, and Rust libraries
|
|
570
|
+
- Core node communication functionality
|
|
571
|
+
- Redis-based backend with multi-database support
|
|
572
|
+
- Comprehensive sensor monitoring examples
|
|
573
|
+
- Thread-safe operations across all languages
|
|
574
|
+
- Object serialization and knowledge management
|
|
575
|
+
- Structured logging and error handling
|
|
576
|
+
|
|
577
|
+
## ๐ Acknowledgments
|
|
578
|
+
|
|
579
|
+
- **Redis Team**: For the excellent in-memory data structure store
|
|
580
|
+
- **Open Source Communities**: Python, C++, and Rust ecosystems
|
|
581
|
+
- **Contributors**: Everyone who helped make this project possible
|
|
582
|
+
|
|
583
|
+
---
|
|
584
|
+
|
|
585
|
+
**Built with โค๏ธ by the RoboSapiens Team**
|
|
586
|
+
|
|
587
|
+
For questions, support, or contributions, please visit our [GitHub repository](https://github.com/saharnn96/robosapiens-clientlibraries).
|