1. Intro
ROS is too heavy for new project with little dependence on open-source project.
Plan: Understand the design and philosophy of ROS1 and ROS2, design my own robotics stack
2. ROS1
2.1. Philosophy and Design Principles
Goal: to support code reuse in robotics
- as thin as possible? Really?
- ROS-agnostic
- Scaling
- Test, Language
How: Node for executables to be run individually
2.2. Architecture
Two concepts
Filesystem:
- Package
- Metapackage
- Package Minifests
- Repositories
- Message Type
- Service Type: request and response
Computation Graph:
- Node
- Master: name registration, help node find each other
- Parameter Server: allow data store in central location
- Message: Nest data
- Topics: one way
- Services: good for request reply interaction
- Bags: storing data
2.3. Middleware
- Master is implemented via XMLRPC, HTTP based protocal
- Node
- Slave API: XMLRPC API, receiving callbacks
- Topic transport protocal: TCPROS, UDPROS
- Command-line API
- Topic: TCP, UDP
- Message serialization:
3. ROS2
Why?
- Multiple Robots
- Less computation
- Real time
- Non ideal network
- Production
- Clear pattern
- New API
- Use open-source middleware
Most important change: use DDS as middleware
4. New
new middleware
new build (ament)
c++11
4.1. Philosophy and Design Principles
De-centralized nature
4.2. Architecture
Very similar with ROS1, but add discovery
4.3. Middleware
Apply open-source software
Has a abstract middleware interface
DDS: end2end middleware
- Publish, subscribe transport