Protocol and more for the cobotar project
Project description
CobotAR-Protocol
A collection of protobuf messages for the CobotAR-project
Current version: 0.20.6
Documentation
Find it here: documentation/README.md
New version
- Make changes
make publish bump={patch,minor,major}
NATS subject convention
CRUD
- add:
edit.<domain>.add - update:
edit.<domain>.update - delete:
edit.<domain>.delete - get:
get.<domain>.one - getByIds:
get.<domain>.some - getAll:
get.<domain>.all
Events
Subject shape: <kind>.<domain>.<type>.<scope..>
where:
- kind:
{command | event | plan | telemetry} - domain:
{robot | task | asset | ...} - type: event type as lower_snake_case string token (
start_stop,started,task_completed, etc.) - scope optional identifiers for routing (
robotId,taskId,assetId,lineId, etc.). Generally following this:<kind>.<domain>.<type>.<site>.<workcell>.<entityId>[.<planId>]
Examples:
command.robot.start_stop.workcellA.robot-1
plan.robot.path.workcellA.robot-1.plan-P123
telemetry.robot.state.workcellA.robot-1
event.robot.started.workcellA.robot-1
event.plan.cancelled.workcellA.plan-P123
Conceptual design of Assembly processes
A. Product definition (What the thing is)
- Parts
- Assemblies / sub-assemblies
- Product BOM / hierarchy
- Part occurrences / instances
- CAD / 3D model references
- Mating / connection hints if you have them
B. Process template (How the thing is normally assembled)
- Process recipe
- Sequences / sub-sequences
- Tasks / operations / steps
- Preconditions / ordering / alternatives / variants
- Required tool roles, skill requirements, actor constraints
- Operator text
C. Execution instance (What is happening right now on the floor)
- Running process
- Current state of sequences/tasks
- Assigned human(s)/robot(s)
- Start/end timestamps
- Current station
- Evidence / completion / faults / overrides
D. Resource library (What can be used to perform the work)
- Humans
- Robots
- Tools
- Fixtures
- Assets
- Stations / cells
- Models
E. Capability layer (Why a given resource can or cannot do a task)
- Skills
- Capability profiles
- Tool roles
- Constraints
- Validity / training / retraining / calibration / certification
Distinguish type from instance
Example: Part. In assembly we usually need both:
- Part definition: “M4x12 screw”
- Part occurrence: “the third M4x12 screw in this assembly”
thus distinguishing between the two is important and must be supported and done consistently.
Minimal TaskDefinition example
TaskDefinition {
id: "task-fasten-cover-screw-1"
name: "Fasten cover screw 1"
instruction_text: "Fasten screw 1 to 0.8 Nm"
task_type: TASK_TYPE_FASTEN
target: {
target_node_id: "node-screw-1"
target_part_definition_id: "part-m4x12"
local_target: {
anchor_id: "node-screw-1"
}
}
tool_requirements: [{
role: TOOL_ROLE_APPLY_TORQUE,
required_properties: [TOOL_PROPERTY_TORQUE_CONTROLLED],
minimum_capability: {
min_torque_nm: 0.72,
max_torque_nm: 0.88
}
}]
skill_requirements: [{
skill_id: "SK-APPLY-CONTROLLED-TORQUE",
minimum_level: SKILL_LEVEL_QUALIFIED
}]
validation: {
require_tool_feedback: true
allow_manual_confirmation: true
manual_confirmation_min_level: SKILL_LEVEL_QUALIFIED
}
execution_policy: {
assignment_preference: TASK_ASSIGNMENT_PREFERENCE_EITHER
actor_constraint: {
allowed_actor_kinds: [ACTOR_KIND_HUMAN, ACTOR_KIND_ROBOT]
collaboration_mode: COLLABORATION_MODE_SEQUENTIAL_HRC
}
}
}
Variant handling
Types of variants
Bucket A — Structural variants
Affect product tree. Modeled in product.
Examples:
- hinge side
- optional handle
- different fastener family
- extra sensor module
Bucket B — Workflow variants
Affect tasks/sequences/skills/tools/validation. Modeled in recipe applicability or recipe branching.
Examples:
- door must be flipped
- adhesive cure step required
- fragile part requires two-person lift
- robot can only assemble one orientation
Bucket C — Parametric variants
Do not change workflow structure. Passed at run-time.
Examples:
- color
- language
- customer text
- batch number
- cosmetic finish code
Handle variants without recipe explosion
For a product family, do this:
-
One ProductDefinition
- Contains all structural possibilities.
-
Few ProcessRecipes
Only split recipes where the workflow truly differs. For example:
- recipe-door-standard
- recipe-door-flipped-fixture
- recipe-door-adhesive
Not:
- red-left-short-handle
- red-left-long-handle
- blue-right-short-handle
- …
-
One ProcessRun per actual order/build
Contains:
- selected product configuration
- runtime parameters
Example
Product dimensions
- hinge_side = left | right
- color = red | green | blue
- handle = short | long
Recipe
recipe-door-standardis applicable when:- handle = short or long
- color = any
- hinge_side = left
recipe-door-flippedis applicable when:- hinge_side = right
They need to be split into two recipes because right-hinge requires a flip operation and different fixture.
Process run
When a real order starts the selection might look like this:
product_selection:
hinge_side = right
color = green
handle = long
thus the system chooses the recipe-door-flipped recipe and the recipe stays the same regardless of color.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cobotar_protocol-0.20.6.tar.gz.
File metadata
- Download URL: cobotar_protocol-0.20.6.tar.gz
- Upload date:
- Size: 990.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18257332db62e6cf3db0b3d6aacc8cb6a3bcbb56c9090d273bb86d1f5cfc70d9
|
|
| MD5 |
4361fe8ed15f150391903c4c414e7c52
|
|
| BLAKE2b-256 |
4dd391e4a0b4d9266597e217e70f118be5a003182ee26e717c55ccb42fa5bf67
|
Provenance
The following attestation bundles were made for cobotar_protocol-0.20.6.tar.gz:
Publisher:
publish-pypi.yml on cobotar/protocol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cobotar_protocol-0.20.6.tar.gz -
Subject digest:
18257332db62e6cf3db0b3d6aacc8cb6a3bcbb56c9090d273bb86d1f5cfc70d9 - Sigstore transparency entry: 1578308621
- Sigstore integration time:
-
Permalink:
cobotar/protocol@b7606fa4d02305ae9063f505aa6644cc85f37d2a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/cobotar
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@b7606fa4d02305ae9063f505aa6644cc85f37d2a -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file cobotar_protocol-0.20.6-py3-none-any.whl.
File metadata
- Download URL: cobotar_protocol-0.20.6-py3-none-any.whl
- Upload date:
- Size: 277.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea1b210d1e1e4c1e5028482f45de208a43b64f427201731e9bbe1c1bbe1ad70e
|
|
| MD5 |
7551e1eb3949142e7781be5ebe6a39b1
|
|
| BLAKE2b-256 |
02c84380b1fa793e2a4684322457e532a71344c7077bbb68b79816394cadba71
|
Provenance
The following attestation bundles were made for cobotar_protocol-0.20.6-py3-none-any.whl:
Publisher:
publish-pypi.yml on cobotar/protocol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cobotar_protocol-0.20.6-py3-none-any.whl -
Subject digest:
ea1b210d1e1e4c1e5028482f45de208a43b64f427201731e9bbe1c1bbe1ad70e - Sigstore transparency entry: 1578308859
- Sigstore integration time:
-
Permalink:
cobotar/protocol@b7606fa4d02305ae9063f505aa6644cc85f37d2a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/cobotar
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@b7606fa4d02305ae9063f505aa6644cc85f37d2a -
Trigger Event:
workflow_run
-
Statement type: