Unsorted topics
This is where the author works on unfinished articles that are not yet categorized
Overarching architecture
Items
Identification
- keypair
- id
Personality
- name
- gender
AddressBook
- associates
- trust
Plan Book
- plans
Stanza Book
Development
Construct
Triggers
Grid
Eval
Serial Config
Group
Puppet
Controller config
Actuator config
Sensor config
MediaDevice
Operations
Plan execution
- skeptron
Event Stream
Traxxas robot example:
Identification - id: xxxxxx - keypair: yyyyyy
Personality - name: El Traxxo - gender: male
Controllers: 1. Arduino #1 - sensors: a. imu - media: a. usb cam b. android back cam c. android front cam with depth - lobes: a. Wheeled - stanzas: a. Driving
- Ardumy #1
- actuators: a. RC servo: throttle b. RC servo: steering
- sensors: b. usb lidar
- media: a. usb cam b. android back cam c. android front cam with depth
- lobes: a. Wheeled
Puppet: 1. RC car - scene: - body - wheel fl - wheel fr - wheel bl - wheel br - rc servo throttle - rc servo steering - lidar - cameras
Triggers: 1. Trigger-set #1 - triggers for entering location, detecting faces, etc
Grids: 1. Grid #1 - Sensor calculations
Plan: 1. main plan: - Full autonomy - skeptron for group with 2 other agents - waypoint mission - trigger-set #1 - grid #1 - blockchain audit trails enabled
Event Stream: 1.
Agent: - Mode: - puppet: RC Car - controller: Ardumy #1
Agent modes
Authority mode
Mode | Description |
---|---|
Independent (default) | When the Agent is first commissioned, it will be in independent authority mode. This means it will just comply with local commands issuded by user in local UI. |
Available | When another node has been granted skeptron authority for the agent, it can only be controlled when the agent is in the available authority mode. |
Skeptron mode
When a node gains skeptron authority over the agent, they may chose to control it. Given the agent is in available authority mode, the skeptron holder can enable skeptron on mode, effectively taking command of the agent.
Mode | Description |
---|---|
Skeptron Off (default) | No skeptron authority holders are currently controlling this agent. |
Skeptron On | A skeptron authority holder is currently controlling this agent. |
Control mode
Depending on other modes, the agent can be controlled in different ways. This mode corresponds to how the agent is currently controlled.
Mode | Description |
---|---|
Idle (default) | Currently the agent is not under any particular control. |
Waypoint | The agent is currently following a waypoint path on the map. |
Plan | The agent is currently following instructions from a plan. |
Manual | The agent is currently following manual instructions from a remote. |
Security model
The security model of OctoMY has some intrinsic complexities worth documenting.
For one, trusting a random node is difficult. How can you be sure they are who they claim?
Secondly, with the advanced communication patterns that OctoMY invites, there are many cases and edge cases that need to be addressed.
For example, any node should be able to communicate with any node with some level of granular permissions. Some nodes should have authority over others, including control over whom they can interact with.
Thirdly, the system is distributed with no guarantees of consisten commnucation between nodes. With a break between groups of nodes, we need to somehow gracefully adapt once communications are re-established.
Let's start by establishing some ground rules.
-
Local authority a. Each node has full authority over itself. If you can access the physical ui of a node, you should be able to take full control over it and shut out any other node from ownership. b. Each node has a "local only" mode that shuts down all communication and execution of plans from external sources, allowing you to make changes to config in the case of security escalations.
-
There exists 3 levels of trust: a. No trust. This is the default, there is no access. b. General trust. The nodes can collaborate with other nodes and control each other to a certain extent. Nodes have no access to security settings such as which other nodes we should trust. c. Skeptron. The node marked as skeptron becomes the full master of our node and is allowed to make any change available, including chnaging security settings.
-
Granular authorization
- In general trust, it is possible to specify more granularity of trust. Each node set the rules for what other nodes can do. Examples would be "can move" or "can use camera".
-
In skeptron mode all granular rules are ignored.
-
A node can accept membership into one or more groups. The membership in the group has two attributes; a. The control we have over the group b. The control the group have over us
A typical setup is for one node to have skeptron over a group and then there are zero or more nodes in the group that have skeptron or general trust to the group, allowing the owner to control them. This makes it easy to manage relations. To gain control over a new node simply add it to the group.
-
Plans a. A plan can dictate configuration changes, including permission changes. b. A plan can be executed on a node from another. It will perform all the steps that are permissable. If that node has skeptron authority, the plan will execute completely. c. The ui should warn if there are missing permissions before execution d. If permissions are changed during execution, the plan should have self-correcting provisions made to handle this. e. If node A has skeptron authority over node B and start executing a plan that requires skeptron permissions on B, the execution will continue with those permissions even when A and B are no longer in comms.
-
Permission delegation a. A node with skeptron over two nodes A and B can delegate permissions it has over one to the other. For example it can give A skeptron access to B. b. A node can give up it's permission (but not regain them alone) c. A node can give up trust as part of a plan's execution. For example if node A has skeptron authority over node B, then a plan on node B can remove this skeptron (given the permission of the plan executor has access to do this).
Glossary
Term | description |
---|---|
### Node | An intependent program with an identity in the OctoMY distributed system. Example node types are Agents (robots), Remotes (handheld remote controls) and Hubs (stationary remote controls with access to online resources). |
### Agent | A node that runs on board a robot. |
### Remote | A node that runs on a handheld device such as a smartphone enabling the ueser to remote control one or more agents. |
### Hub | A node that runs on a computer such as a cloud server or laptop enabling the ueser to remote control one or more agents. |
### Zoo | This is a social media platform for OctoMY agents to get to know each other, communicate and collaborate. |
### Delivery | The creation of a new node, such as an Agent or Remote. When the4 node is an Agent it is often referred to as the "birth" of the node. |
### Configuration | The process of setting up the hardware on which a node runs. This is most important for Agetns because they will interface with controller circuits that run a robot. |
### Discovery | The process of finding other nodes that are candidates for pairing. It works by the nodes broadcasting their status as "discoverable" on local network and via zoo discovery service. When two nodes see eachother, they become available for pairing. |
### Pairing | The process of assigning trust to nodes that were previously found in the discovery process. OctoMY provides several ways to enable the verification of the identity of nodes. |
### Unboxing | The process of integrating a new node into OctoMY. After installation of the node software (Agent, Remote or Hub), it has the following steps: delivery, configuration, discovery and pairing. |
### Birth | See delivery |
### Trust | In the pairing process, the user will assign trust to a discovered node. This will mark the node as either "trusted" or "untrusted". Untrusted nodes will be hidden while trusted nodes are made available for communications (see comms ). If trust cannot yet be determined, the decision can be deferredby the user selecting "ignore", which simply avoids assigning any trust but does not hide the node in question. |
Lobe concept
A lobe in the context of OctoMY is a real-time software function running on a controller that is responsible for controlling one or more actuators, possibly in feedback loops with sensors.
Why is this important?
To achieve lowest possible latency and to ensure real-time characteristics, it is not desirable to stream control signals out of the controller to make decision about actuator movements. It is better to stream higher level asynchronous control signals to the controller and let the lobe in the controller handle the actual real-time update.
- Lobe
- Actuator
- Sensor
- Controller
- Stanza
- Pose
Controller types implement a standardized interface Controllers can have 0 or more actuators Controllers can have 0 or more sensors Controllers are configured in two ways; controller native config, controller generic config The controller type spesific settings are available in the controller native config. The settings that are common for all controller typesare available in the generic controller config. The number of actuators & sensors a controller exposes in the generic config is determined in the controller native config. The controller native config is optional for simple controller types.
Example native controller settings are: Connection parameters for serial, micro controller pin mapping and power settings. Example generic controller settings are: Actuator enabled status, actuator limp status, sensor enable status, sensor name and sensor filtering.
Decoupling of sensors and actuators is done via name mappings. Each actuator and sensor is given a name string. In the mapping the actuator or sensor name is associated with corresponding items in the Stanza.
The mapping editor has a "automap" button that maps all items with the same name. For example if an actuator is called "throttle" and there is an item in the stanza called "throttle" those will be connected.
Stanza
Stanzas are a logical constellation of lobes, actuators and sensors that makes an agent act in a certain way. As an example you may have a legged robot with two stanzas, one "walking" stanza and one "interaction" stanza. The walking stanza will link all the servo actuators to the walking lobe, while the interaction stanza will connect the two front most legs to a "fine control" lobe. The waliking lobe will give the user an interface to steer the robot while a stable gait is generated in real time. The fine control lobe will allowe the user to carefully point the limbs in real time to poke and grab in the environment.
The actuators can only be under the control of one lobe at the time. Switching between stanzas allows the user to quickly chose between "modes".
Lobe types
Each lobe has a type which comes with an interface. For example the "locomotion" lobe type allows the path-finding subsystem to direct the agent towards the desired target location. The manipulator lobe type gives an interface for interactively grabbing and moving objects.
Hardware
Actuators
Sensors
Control
Controller interface
Servotor32
ArduMY
Gait planning
User interface
Actuator control
Pose control
Path planning
Intercom
Face
Connection
Activity
Intent
Stack
Wizard
Communications
Pairing
Discov ery
Identity
Delivery
Facial expression
Voice
How to handle variability of controller.
- Controllers have a generic fully deterministic configuration format which can be serialized. When a configuration is "applied", the controller state will be set up identical in a deterministic manner. Once the config is set then the api will start reporting what parts the controller support.
Project priority and milestones
Project parts
Part | Description |
---|---|
Build system | How the project is built from source into artefacts |
Complete UX | Documentation for the user experience |
Wiki | Community maintained documentation |
Blog | A stream of news about the projects intermixed with time relevant tidbits and musings |
Documentation | The official reference works for how to operate and partake in development of the project |
Qt static build | System to build Qt reliably |
MVP Hub | The first published version of Hub |
MVP Remote/Agent | The first published version of Remote and Agent |
MVP Zoo | The first published version of zoo |
Google Play deployment | Deployment of apps to Google Play |
Youtube channel | Market the project on YouTube |
Reddit channel | Market the project on Reddit |
ArduMY | Custom micro controller runtime for running robots |
External controller support | Support for 3rd party controllers |
External platform support | Support for 3rd party platforms like ESP32, tinsy, jetson, rpi etc. |
Organization formation | Start OctoMY foundation |
OctoMY seal | Sell OctoMY partnership to Hasboro |
Project organizational structure
Our organizational structure is losely based on the structure of Linux kernel team.
Since we are much smaller, we follow an organic growth path which divides the responsibilities into tiers as the workload grows out of the capacity of the original role. For example, Leo might give an additional team member "Alice" maintainer status over a certain part of the project. This part grows in complexity until Alice can no longer cope alone. She will then recruit "Bob" to serve under her to take over part of her task.
Each member is responsible for the members they directly recruit. Each member recruited will fall into the tier structure and receive a title as prescribed.
When a higher level member steps down, the responsibility falls to her supervisor until a replacement can be found. It is common that one of her subordinates step up in a promotion, or that we lean on internal mobility in some other way.
1. Leo (Benevolent Dictator 'BD')
- Founder and top maintainer of the OctoMY™ project.
- Defines the overall vision and direction of the project.
- Makes final decisions on architecture, features, and conflicts.
- Maintains the main repository and controls the release process.
- Has the final say in merging changes into the mainline kernel.
- Manages the merge window during the development cycle.
- Manage who will be the Captains
- Continuously vet candidates for his replacement to maintain the project longe-term.
2. First-Level subsystem responsible (Captain)
- Trusted members responsible for top-level subsystems:
- A. Core Framework & API
- B. Networking & Communication
- C. Robotics & Hardware Integration
- D. User Interface & UX
- E. Build System & CI/CD (OctoMY™ GitLab OGL)
- F. Documentation & Developer Relations
- G. Administration (everything non-product related like accounting, payrol, legal etc).
- Receive patches from subordinate responsible for code-relevant subsystems
- Manage who will be the Lieutenants
- Continuously vet candidates for their replacement to maintain the project longe-term.
3. Second-level subsystem responsible (Lieutenant)
- Maintain specific second-level component.
- For example A. Core Framework & API:
- Design and maintain the core functionality of OctoMY.
- Manage the API, ensuring backward compatibility.
- Optimize performance and scalability.
- Maintain code and manage pull requests and patches from contributors.
- Use OGL (OctoMY™ GitLab) for discussions.
- Manage who will be the Enlists
4. Patch Reviewers (Enlists)
- Experienced developers who review patches before merging.
- Ensure:
- Code quality
- Security
- Performance
- Catch bugs early
- Writing and running tests
- Use OGL (OctoMY™ GitLab) for discussions.
- Recruitment pool for Lieutenant role
5. Project Developers / Contributors (Troopers)
- Write and submit patches for the project.
- Can be:
- Independent contributors.
- Corporate employees (Google, Intel, Red Hat, AMD, etc.).
- Use OGL (OctoMY™ GitLab) for pull request submission.
- Participate in discussions, testing, and bug fixing.
- Recruitment pool for Enlist role
6. Stability team (Marine)
- Identify and document bugs
- Write automated tests
- Improve the test harness
7. Security Team (Marine)
- Handles security vulnerabilities privately before disclosure.
- Submit hotfixes, patches and guidelines for the rest of the project to follow
8. Corporate Contributors
- Manage contributed code such as controller drivers and bug fixes.
- Follow the same open-source process for submitting patches.
Development Workflow
- Developers submit patches to the relevant subsystem maintainer via LKML.
- Patch reviewers provide feedback and request improvements.
- Second-level maintainers merge accepted PRs into their branches.
- First-level maintainers merge accepted PRs into their branches.
- BD merges everything into the mainline kernel during the merge window.
- Stable maintainers
Key Characteristics of the OctoMY™ project Team
Meritocracy – Influence is earned through contributions. Decentralized – No single company owns OctoMY. Open – Everything happens in an open for all to see platform (GitLab). Pull Request base development – Every piece of code is scrutinized by a veritable barrage of automated test suites, talented developers and aspiring maintainers before being accepted. No line of code will be accepted unless it is flawless.
OctoMY™ GitLab (OGL)
- Primary communication hub for project development.
- Used for:
- Patch submissions/pull requests.
- Technical discussions.
- All project development should be kept here.
Project organizational structure
A. Core Framework & API
- Maintainers: Core Developers
- Responsibilities:
- Design and maintain the core functionality of OctoMY.
- Manage the API, ensuring backward compatibility.
- Optimize performance and scalability.
B. Networking & Communication
- Maintainers: Networking Engineers
- Responsibilities:
- Handle protocols, connectivity, and data exchange.
- Ensure low-latency and secure communication.
- Maintain support for Wi-Fi, Bluetooth, and other integrations.
C. Robotics & Hardware Integration
- Maintainers: Embedded & Robotics Engineers
- Responsibilities:
- Develop hardware abstraction layers (HAL).
- Work with real-time control systems and robot drivers.
- Support different robotic platforms.
D. User Interface & UX
- Maintainers: UI/UX Developers
- Responsibilities:
- Maintain desktop and mobile UI.
- Ensure a smooth user experience.
- Work on themes, accessibility, and usability improvements.
E. Build System & CI/CD
- Maintainers: DevOps Engineers
- Responsibilities:
- Automate builds, testing, and deployment.
- Maintain Docker, Qbs, and package distributions.
- Ensure code is always in a release-ready state. |
F. Documentation & Developer Relations
- Maintainers: Technical Writers & Developer Advocates
- Responsibilities:
- Maintain developer documentation.
- Write tutorials, API docs, and best practices.
- Engage with the developer community.