peaq-robotics
This skill manages a peaq-robotics ROS 2 workspace: it installs https://github.com/peaqnetwork/peaq-robotics-ros2, starts ROS 2 nodes with ros2 run, and performs DID/wallet/storage/tether operations. It executes host shell commands (git clone, colcon build, ros2 run), downloads and runs remote code, and reads wallet secrets from ~/.peaq_robot/wallet.json.
Peaq ROS 2 Integration
Overview
Use this skill to make OpenClaw operate a local peaq-robotics-ros2 workspace by starting ROS 2 nodes and calling their services for identity, storage, access control, and tether USDT operations.
Install and share (first step)
- Decide how other agents will install the skill:
- Same host, shared: place this folder at
~/.openclaw/skills/peaq-roboticsso all agents on the host see it. - Per-workspace: place it at
<workspace>/skills/peaq-robotics. - Remote agents: publish to ClawHub/ClawdHub, or ship the packaged
peaq-robotics.skillfile.
- Install the peaq-robotics-ros2 repo (defaults to
https://github.com/peaqnetwork/peaq-robotics-ros2into~/peaq-robotics-ros2). This auto-copiespeaq_robot.example.yamltopeaq_robot.yaml, pins mainnet WSS, and auto-runscolcon build --symlink-install:
{baseDir}/scripts/peaq_ros2.sh install- Optional overrides:
PEAQ_ROS2_REPO_URL=...and/orPEAQ_ROS2_REPO_REF=... - Update an existing clone:
{baseDir}/scripts/peaq_ros2.sh install --update - Skip build if you want to build later:
{baseDir}/scripts/peaq_ros2.sh install --skip-build
Requires: ROS 2 + colcon on the host (the installer sources ROS_SETUP, default /opt/ros/humble/setup.bash).
Network pinning + fallback:
PEAQ_ROS2_NETWORK_PRIMARY(defaultwss://quicknode3.peaq.xyz)PEAQ_ROS2_NETWORK_FALLBACKS(CSV, defaultwss://quicknode1.peaq.xyz,wss://quicknode2.peaq.xyz,wss://peaq.api.onfinality.io/public-ws,wss://peaq-rpc.publicnode.com)core-configurewill auto-retry and switch networks if the primary fails.- Set
PEAQ_ROS2_PIN_NETWORK=0to leave the config network untouched.
Wallet path:
PEAQ_ROS2_WALLET_PATH(optional) to setwallet.pathduring install. Defaults to~/.peaq_robot/wallet.json.
- Configure env vars via OpenClaw skills config so every agent uses the same ROS 2 workspace:
PEAQ_ROS2_ROOT- repo root of peaq-robotics-ros2PEAQ_ROS2_CONFIG_YAML- path to your config fileROS_DOMAIN_ID- optional ROS 2 domain isolationPEAQ_ROS2_LOG_DIR/PEAQ_ROS2_PID_DIR- optional overrides (defaults include-<ROS_DOMAIN_ID>suffix).
Note: when invoked from an OpenClaw workspace (where AGENTS.md/TOOLS.md exist) and PEAQ_ROS2_CONFIG_YAML is not set, the helper auto-creates a per-workspace config at <workspace>/.peaq_robot/peaq_robot.yaml with a workspace-local wallet (<workspace>/.peaq_robot/wallet.json). It also auto-assigns a stable ROS_DOMAIN_ID in the 100–199 range per workspace (overriding the default 0) to avoid collisions.
- Ensure the agent can run host commands (non-sandboxed session or ROS 2 inside the sandbox).
Invite message templates (copy/paste)
ClawHub/ClawdHub install (preferred for remote agents):
clawhub install peaq-robotics && ~/.openclaw/skills/peaq-robotics/scripts/peaq_ros2.sh install
Local shared install (same host):
cp -R /path/to/peaq-robotics ~/.openclaw/skills/peaq-robotics && ~/.openclaw/skills/peaq-robotics/scripts/peaq_ros2.sh install
Restart the OpenClaw session after installing the skill.
Bootstrap agent (funding source)
- Ensure the ROS 2 workspace is built and you have a config YAML (usually
peaq_ros2_examples/config/peaq_robot.yaml). - Start core node and activate it:
{baseDir}/scripts/peaq_ros2.sh core-start{baseDir}/scripts/peaq_ros2.sh core-configure{baseDir}/scripts/peaq_ros2.sh core-activate
- Get wallet address and DID (send address to yourself for funding):
{baseDir}/scripts/peaq_ros2.sh core-address{baseDir}/scripts/peaq_ros2.sh core-did
- Fund this address with peaq tokens. This becomes the funding source for new agents.
New agent onboarding flow
- Install the skill (shared host path, workspace path, or ClawHub/ClawdHub).
- Set
PEAQ_ROS2_ROOTandPEAQ_ROS2_CONFIG_YAMLvia skills config. - Start core node + configure + activate.
- Run
{baseDir}/scripts/peaq_ros2.sh core-addressand ask the bootstrap agent to fund it. - After funding, run
{baseDir}/scripts/peaq_ros2.sh did-create '{"type":"robot"}'.
Core bootstrap (human-friendly)
~/.openclaw/skills/peaq-robotics/scripts/peaq_ros2.sh core-start && \
~/.openclaw/skills/peaq-robotics/scripts/peaq_ros2.sh core-configure && \
~/.openclaw/skills/peaq-robotics/scripts/peaq_ros2.sh core-activate
Use fund-request separately to ask for funds.
Funding request template (copy/paste)
peaq-robotics funding request:
address: <PASTE_CORE_ADDRESS>
reason: initial DID creation + storage/access ops
amount: <AMOUNT> PEAQ
Funding (agent → agent)
Use the funded agent to transfer PEAQ to a new agent address:
- Check balance:
{baseDir}/scripts/peaq_ros2.sh balance [address] - Fund another agent:
{baseDir}/scripts/peaq_ros2.sh fund <to_address> <amount> - Generate a request:
{baseDir}/scripts/peaq_ros2.sh fund-request [amount] [reason] - Auto-send request to a funder agent:
{baseDir}/scripts/peaq_ros2.sh fund-request-send <funder_agent_id> [amount] [reason]
Notes:
funduses the local agent wallet fromwallet.pathin config.- Amount is in PEAQ by default; use
--planckto send raw planck units. - If a fund transfer returns a transient websocket error, the script checks for a balance delta before failing.
- Storage bridge defaults to local IPFS when Pinata is not configured (
storage.modemissing or pinata.jwt empty).
One-line funding request (copy/paste)
peaq-robotics fund-request: address=<ADDRESS> amount=<AMOUNT> PEAQ reason="DID + storage init"
Auto-message the funder (agent → agent)
If you know the funder agent id, use OpenClaw’s agent-to-agent tool to send the request line:
- Generate the line:
{baseDir}/scripts/peaq_ros2.sh fund-request [amount] [reason] - Send it via
sessions_sendto the funder agent.
If you’re running outside the agent runtime, you can also use the helper:
{baseDir}/scripts/peaq_ros2.sh fund-request-send <funder_agent_id> [amount] [reason]
Agent-to-agent messaging (OpenClaw)
Agents can talk via OpenClaw sessions:
- Create another agent:
openclaw agents add <agent-id> --workspace <dir> --non-interactive - Send a message:
openclaw agent --agent <agent-id> --message "<your message>"
Use this to send the fund-request line to your funding agent.
Identity card (DID-linked contact record)
Use identity cards to make DIDs actionable as agent contact records (name, roles, endpoints). These are embedded in the DID document during creation.
- Build JSON (no chain write):
{baseDir}/scripts/peaq_ros2.sh identity-card-json [name] [roles_csv] [endpoints_json] [metadata_json] - Create DID with identity card metadata:
{baseDir}/scripts/peaq_ros2.sh identity-card-did-create [name] [roles_csv] [endpoints_json] [metadata_json] - Read identity card from DID:
{baseDir}/scripts/peaq_ros2.sh identity-card-did-read
Schema (identity card JSON):
{
"schema": "peaq.identityCard.v1",
"name": "Agent Name",
"roles": ["funder", "operator"],
"endpoints": {"openclaw": {"agentId": "funder"}},
"metadata": { "any": "extra fields" }
}
Notes:
namedefaults to the OpenClaw agent id (if available), else hostname.- For existing DIDs, updates are not supported by the ROS2 core service (create-only). Create the identity card during DID creation.
Core workflows
Start nodes (typical)
- Start the core node and activate it:
{baseDir}/scripts/peaq_ros2.sh core-start{baseDir}/scripts/peaq_ros2.sh core-configure{baseDir}/scripts/peaq_ros2.sh core-activate
Run fund-request separately once the core is active.
- Optional nodes:
- Storage bridge:
{baseDir}/scripts/peaq_ros2.sh storage-start - Events node:
{baseDir}/scripts/peaq_ros2.sh events-start - Tether node:
{baseDir}/scripts/peaq_ros2.sh tether-start(requires tether config + npm install inpeaq_ros2_tether/js) - Humanoid bridge:
{baseDir}/scripts/peaq_ros2.sh humanoid-start
Call services
Use the helper script subcommands for the common service calls:
- Create DID (defaults to
{"type":"robot"}if omitted):{baseDir}/scripts/peaq_ros2.sh did-create - Create DID with metadata JSON or full DID doc JSON:
{baseDir}/scripts/peaq_ros2.sh did-create '{"type":"robot"}' - Create DID from file:
{baseDir}/scripts/peaq_ros2.sh did-create @/path/to/did_doc.json - Read DID:
{baseDir}/scripts/peaq_ros2.sh did-read - Store data:
{baseDir}/scripts/peaq_ros2.sh store-add sensor_data '{"temp":25.5}' FAST - Read data:
{baseDir}/scripts/peaq_ros2.sh store-read sensor_data - Access control:
{baseDir}/scripts/peaq_ros2.sh access-create-role operator 'Robot operator'
Notes:
did-createtreats JSON with DID fields (id,controller,services,verificationMethods, etc.) as a full DID document.- Plain metadata JSON is wrapped into a DID
servicesentry (type: peaqMetadata) so it is preserved on-chain.
For full service/parameter mappings and raw ROS 2 topic/service names, read references/peaq_ros2_services.md.
Safety and guardrails
- Confirm before actions that incur on-chain cost or real funds (DID creation, storage writes, access changes, USDT transfers).
- Never pass private keys or mnemonics through ROS 2 services; tether operations use address-only calls.
- If running multiple ROS 2 graphs on one host, set
ROS_DOMAIN_IDper environment to avoid collisions.
References
- Service map:
references/peaq_ros2_services.md