The pdk-scene Command-Line Tool
pdk-scene inspects and modifies the scene on a running server from a
terminal, without writing code. It uses the same gRPC interface as every
binding, so it is useful whatever language your application is written in.
It is installed with the Python package; see Install for Python.
Use it for one-off scene setup, inspection and debugging. It builds the protobuf messages and checks status codes for you. Use the SDK for anything with real logic.
Global options
pdk-scene [--target HOST:PORT] <group> <command> [options]
--targetServer address. Default
localhost:50052. It goes before the group:pdk-scene --target 192.168.1.50:50052 workcell list
--helpWorks at every level:
pdk-scene --help,pdk-scene object --help,pdk-scene object create --help.--jsonRead commands can print JSON:
workcell list, everylistandget,system joints getandlicense status.
On error, pdk-scene prints Error: gRPC <CODE>: <details> for transport
errors or Error: <action> failed: <message> (code N) for application errors,
and exits with a non-zero code.
Important
Every command except workcell, license, log and version
needs an active workcell.
Command reference
pdk-scene
├── workcell
│ ├── create NAME [--description TEXT] [--load/--no-load]
│ ├── load NAME
│ └── list [--json]
├── object
│ ├── create NAME [--parent world] [--pos X Y Z] [--quat X Y Z W]
│ │ [--box LX LY LZ | --mesh PATH] [--color R G B A]
│ ├── move NAME [--pos X Y Z] [--quat X Y Z W]
│ ├── list [--json]
│ ├── get NAME [--json]
│ └── remove NAME
├── camera
│ ├── create NAME [--parent world] [--pos] [--quat] [--camera-id 0]
│ │ [--far-width 1.0] [--far-height 1.0]
│ │ [--far-distance 2.0] [--near-distance 0.1]
│ └── list | get | remove
├── coordinate
│ ├── create NAME [--parent world] [--pos] [--quat] [--scale X Y Z]
│ └── list | get | remove
├── surface-path
│ ├── create NAME --parent OBJECT [--from X Y Z] [--to X Y Z]
│ │ [--points N] [--quat X Y Z W]
│ └── list | get | remove
├── system-pose
│ ├── create NAME [--parent world] [--pos] [--quat] [--joints "j1,j2,..."]
│ └── list | get | remove
├── system
│ └── joints
│ ├── get NAME [--group system] [--json]
│ └── set NAME P1 P2 ... [--group system]
├── watch
├── license
│ ├── status [--json]
│ ├── identifier [-o FILE]
│ └── install -f FILE.lic [--file-name NAME]
├── log [--level debug] [--count 50] [--follow]
└── version
Defaults: --pos 0 0 0, --quat 0 0 0 1 (x y z w), --parent world.
workcell
pdk-scene workcell create demo # creates AND loads "demo" (use --no-load to skip)
pdk-scene workcell load demo
pdk-scene workcell list # the active workcell is marked with '*'
object
# A 10 cm box at (0.3, 0, 0.2) in the world frame
pdk-scene object create widget --box 0.1 0.1 0.1 --pos 0.3 0 0.2
# The same box in red: --color R G B A, each from 0 to 1
pdk-scene object create marker --box 0.1 0.1 0.1 --color 1 0 0 1
# A mesh parented to another object (the path must be readable by the server)
pdk-scene object create bracket --mesh /server/path/bracket.stl --parent widget
pdk-scene object list
pdk-scene object get widget
pdk-scene object get widget --json
pdk-scene object move widget --pos 0.5 0.1 0.3 # persisted; emits CHANGE_UPDATED
pdk-scene object remove bracket
--box and --mesh are mutually exclusive, and --color needs one of
them. object move sets the whole pose in the parent frame: a --pos or
--quat you leave out is reset to its default, not kept.
camera, coordinate, system-pose
pdk-scene camera create cam0 --parent widget --camera-id 0 \
--far-width 1.2 --far-height 0.9 --far-distance 2.0 --near-distance 0.1
pdk-scene coordinate create fixture --pos 0.4 0 0.1
# A full robot state: a Cartesian pose plus the joints that realize it
pdk-scene system-pose create home --pos 0.4 0 0.3 \
--joints "0, 0.5, -0.3, 1.2, 0, 0.8, 0"
pdk-scene camera list
pdk-scene coordinate get fixture
pdk-scene system-pose remove home
The server refuses to overwrite an existing system pose; remove it first.
surface-path
Creates a straight-line manual path on an object, interpolated with --points
waypoints (at least 2):
# 2 waypoints, 10 cm along +X from the object's origin
pdk-scene surface-path create weld --parent widget --from 0 0 0 --to 0.1 0 0
# 5 waypoints along a diagonal
pdk-scene surface-path create scan --parent widget --from 0 0 0 --to 0.15 0 0.05 --points 5
pdk-scene surface-path get weld
system
Moves a system in the scene, to try joint positions before planning or to check for collisions. It does not move a real or simulated robot, and it is not saved: a system starts at the home position in its config. Positions are in rad or m.
pdk-scene system joints get system_1 # every actuated joint
pdk-scene system joints get system_1 --group arm --json
pdk-scene system joints set system_1 0 -0.7 0 1.57 0 0.7 0 --group arm
--group is one of system, arm, external-robot-axis and
external-workpiece-axis.
watch
Streams scene events until interrupted; useful for debugging another client:
$ pdk-scene watch
Watching scene events (Ctrl-C to stop)...
change=1 origin=1 entity=4:'widget' frames=['widget']
Values are the enum numbers: change 1–5 are ADDED, UPDATED, REMOVED,
RENAMED, REFRESHED; origin 1 is CONFIG and 2 is FRAME; the entity type is a
ConfigType (4 is OBJECT). See Watching Scene Events.
license
Does not need a workcell. See Activate Licenses.
pdk-scene license status # table of services and license state
pdk-scene license identifier # writes license_identifier.txt to email to Flexiv
pdk-scene license install -f NEB-1234.lic # takes effect at once, no restart
log and version
Neither needs a workcell. When a command fails, the server’s log usually says why:
pdk-scene log # the newest 50 entries
pdk-scene log --level warning # only warnings and errors
pdk-scene log --follow # keep printing new entries until Ctrl-C
pdk-scene version # client and server versions
--count 0 prints every entry the server kept. version fails when the
client and server major or minor versions differ.