<!-- .slide: data-background="https://hackmd.io/_uploads/HJaiXwgya.jpg" -->
<style>
.reveal a code {
color: var(--r-link-color);
}
.reveal blockquote {
font-size: 2rem;
}
.mermaid {
text-align: center !important;
}
table {
font-size: 2rem;
}
.reveal pre code {
max-height: 800px;
font-size: 2rem;
}
#left {
left:-8.33%;
text-align: left;
float: left;
width:50%;
z-index:-10;
}
#right {
top: 75px;
float: right;
z-index:-10;
width:50%;
}
</style>
#### dora-rs, fast and simple dataflows for robotic applications
<div class="avatar margin-bottom--sm"><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/haixuantao" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Haixuan Xavier Tao</span></a></div><small class="avatar__subtitle" itemprop="description">Maintainer of dora-rs</small></div></div>
---
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
In 2023, AI is booming! Open source robotic framework however hasn't changed much in years...
---
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
## ROS2
> Honestly, I don't even get what ROS is about? **ros2 seems an "amalgamation" of tools and scripts to create a general API with some ideas of robotics application in mind.**
> [name=HN First Comment ]
> From my perspective as a generalist software engineer who isn't a low-level robotics expert – as an ecosystem, **[ros2] seems to have adopted every bad practice available and invented some more of its own**. [...]. **Many of the architectural design decisions are frankly baffling**, although I appreciate that this is in part down to age, legacy, and the open nature of the platform.
> [name=HN Second Comment ]
---
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
## dora-rs
- Radically simplify APIs, 5min to get started
- 100% Ready for AI, training and inference
- Backward-compatible from legacy software
---
## Is it fast?
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->

---
## dora: Carla Simulator
<div>
<div id="left">
<img src=https://hackmd.io/_uploads/HJgQIzPJ6.jpg width=650/>
</div>
<div id="right">
- Simulating Lidar, Radar, Camera, Pedestrians, Cars, Towns...
- Trying out AI Models, planning models, localisations
- Carla Simulator
</div>
</div>
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
---
## dora-rover
<div>
<div id="left">
<img src=https://hackmd.io/_uploads/rJk6Hzwyp.jpg width=350/>
</div>
<div id="right">
- Lidar
- GNSS, IMU
- Camera
- NVIDIA Orin
</div>
</div>
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
## dora-car
<div>
<div id="left">
<img src=https://hackmd.io/_uploads/B1aS9zwJp.jpg width=550/>
</div>
<div id="right">
- Chinese Lidar
- GNSS, IMU
- 6 Cameras
- Chinese ARM Computers
</div>
</div>
---
---
# h1fe
```mermaid
graph TD
Rust(<img src='https://cdn.icon-icons.com/icons2/2699/PNG/512/rust_lang_logo_icon_170766.png' width='100' height='' />)
Python(<img src='https://upload.wikimedia.org/wikipedia/commons/f/f8/Python_logo_and_wordmark.svg' width='100' height='' />)
c++(<img src='https://upload.wikimedia.org/wikipedia/commons/1/18/ISO_C%2B%2B_Logo.svg' width='30' height='' />)
c(<img src='https://upload.wikimedia.org/wikipedia/commons/1/18/C_Programming_Language.svg' width='30' height='' />)
Python --> C
c --> C
c++ --> C
Rust --> C[<img src='https://arrow.apache.org/docs/_static/arrow.png' width='80' height='' />]
C --> D[<img src='https://upload.wikimedia.org/wikipedia/commons/3/31/NumPy_logo_2020.svg' width='80' height='' />]
C --> E[<img src='https://raw.githubusercontent.com/pandas-dev/pandas/main/web/pandas/static/img/pandas.svg' width='80' height='' />]
C --> F[<img src='https://pytorch.org/assets/images/logo-dark.svg' width='80' height='' />]
C --> G[<img src='https://upload.wikimedia.org/wikipedia/commons/3/32/OpenCV_Logo_with_text_svg_version.svg' width='40' height='' />]
```
---
# r2
```mermaid
graph TD
Traces(Traces)
Logs(Logs)
Metrics(Metrics)
Logs --> C
Traces --> C
Metrics --> C[<img src='https://opentelemetry.io/img/logos/opentelemetry-horizontal-color.svg' width='100' height='50' />]
C --> D[<img src='https://www.jaegertracing.io/img/jaeger-logo.png' width='100' height='30' />]
C --> E[<img src='https://upload.wikimedia.org/wikipedia/commons/a/a1/Grafana_logo.svg' width='80' height='' />]
C --> F[<img src='https://upload.wikimedia.org/wikipedia/en/7/7e/Datadog_logo.svg' width='80' height='' />]
C --> G[<img src='https://upload.wikimedia.org/wikipedia/commons/f/f4/Elasticsearch_logo.svg' width='170' height='' />]
Data --> H(<img src='https://arrow.apache.org/docs/_static/arrow.png' width='120' height='' />) --> Storage
```
---
## Partner University
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
    
<!--  -->
---
## Backward Compatibility
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
```mermaid
graph TD
dora --> |Arrow| C[dora-ros2-bridge]
C --> |ros2|D[ros2 node] --> Sensors
D --> P[Project]
C --> |ros2|F[Custom Message]
C --> |ros2|E[Tooling: rosbag, rviz]
```
---
## Fast Prototyping
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
- `dora-rs` can do real-time programming by using Python interpreter.
- Removing the need to resetting and recompiling robots/autonomous vehicle at every change. e.g.: This can takes couple of minutes in ROS2
- Saving time for student and phd candidates
---
## Roadmap
```mermaid
graph LR;
A[<b>dora-rs 0.2</b><br/>Rust, Python, C/C++ API<br/>Arrow<br/>Opentelemetry<br/>ros2-bridge]
C[<b>dora-rs 0.3</b><br/>Data Log & Replay<br/>Data Visualization<br/>Time Constraints<br/>Deadline<br/>Fault tolerance<br/>Cloud Native Integration]
D[<b>dora-rs 0.4</b><br/>Fault tolerance<br/>Redundancy<br/>Elastic Resources<br/>Dynamic Dataflow]
E[<b>dora-rs 0.5</b><br/>Fleet Management<br/>Fleet Support<br/>Mission Scheduling]
A --> C --> D --> E
```
> Open for proposal of additional feature
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
---
Annex
| Features | ROS2 | Dora - Arrow |
|------------------------------|------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------|
| Shared Memory API | Complex API | same API |
| Mesage type | Custom ROS messages requiring ser/deserialization | Apache Arrow format |
| Computation | No optimization for compute | Optimized for CPU and GPU workload |
| Compiler-free | Complex Build System | Native language build system |
| Observability | MCAP | OpenTelemetry used by Prometheus, InfluxDB, Datadog... |
| Prototyping | Need to recompile the whole project for each change | Live development with hot-reloading |
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
---
## Best practices
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
- YAML Dataflow description similar to `Kubernetes`, `docker`
- Native package manager `cargo`, `pip`
---
## Distributed
<!-- .slide: data-background="https://hackmd.io/_uploads/BktKQDlyp.png" -->
{"description":"Rust-Python FFI & multilanguage system debugging!","title":"Dora elevator pitch","slideOptions":"{\"theme\":\"white\"}","contributors":"[{\"id\":\"dcd8580f-6041-4708-8c3f-3f0de43b5626\",\"add\":30920,\"del\":21776}]"}