Ride cli commands

Usage: ride [-c|--connection SERVER] [-i|--insecure] [--spoc-token]
            [--spoc-force] [--spoc-timeout TIMEOUT] COMMAND

Available options:
  -v,--version             Show version
  -h,--help                Show this help text
  -c,--connection SERVER   Base URL for the API.
  -i,--insecure            Ignore all TLS errors and treat them as warnings.
  --spoc-token             Acquire control token without asking the user.
  --spoc-force             Force control token acquisition.
  --spoc-timeout TIMEOUT   Maximum seconds to wait for execution token.

Available commands:
  login                    Log in
  logout                   Log out
  bundle                   Bundle commands (default: list)
  node                     Node commands (default: list)
  execution                Execution commands
  service                  Service commands
  log                      Logging commands

You can get a list of currently available commands, by using bash or zsh tab-completion. Start typing a command and press <tab> to have the current command completed and press <tab> twice to get a list of available options and commands. Pressing <tab> twice is necessary if the available completion can not be disambiguated.

For example, if you start typing ride ex<tab> bash and zsh will autocomplete this to ride execution ``. If you start typing ``ride log<tab>, ride will not autocomplete, because both login, logout and log would match. Only when pressing <tab> again login, logout and log will be printed as the list of available commands. Most commands, options and parameters of the ride cli support tab-completion, but some of them might require you to login first.

Login commands

Before using other ride-cli functionality you need to login, as ride-cli requires proper credentials to communicate with the robot. The user account is the same as the one created for use with Desk.

To log in, execute the following:

$ ride login SERVER

robot.franka.de is an example for a SERVER address. ride-cli can connect through the shop-floor network and the port at the robot's base.

You will be prompted for your username and password. If the credentials are correct, a session will be created. Once you no longer need access to the robot, you can execute the ride logout command.

Execution commands

The execution group of commands manages state machine execution by starting and stopping state machines and by tracing the execution state.

Usage: ride execution COMMAND
  Execution commands

Available options:
  -h,--help                Show this help text

Available commands:
  start                    Start execution of a state machine, optionally with
                           tracing.
  stop                     Stop the current execution.
  trace                    Trace execution of a state machine.

Starting a state machine

After writing and uploading a state machine, or creating a task, it can be started using the execution start command:

Usage: ride execution start [-t|--trace] PATH [ARGUMENT]
  Start execution of a state machine, optionally with tracing.

Available options:
  -h,--help                Show this help text
  -t,--trace               After starting also trace its execution
  PATH                     State machine path to start
  ARGUMENT                 State machine arguments, e.g. '{ foo: 123; }'

Tasks are state machines as well and can therefore be started the same way. You can detect tasks in the output of ride node list through the 0_ prefix. Specify ARGUMENT if your state machine requires certain parameter.

If a Work Execution Wait Time is specified, a countdown will start and be displayed. The execution can be aborted during the countdown by pressing CTRL+C.

If the --trace option is enabled, stopping a running task or state machine is also possible by pressing CTRL+C.

Tracing the execution progress

If an execution is already running, the execution trace can be inspected by calling

$ ride execution trace

A sample trace could look like:

Execution [STOPPED]
Execution (10) of 0_wait [RUNNING]
0_wait.timeline_body.wait.skill.wait_execution.wait_library [ACTIVE]

Execution (10) of 0_wait [FINISHED]

Execution [STOPPED]

This is a trace of running a "wait" app, it shows the activation of each state along the path of active states and is updated every time the activation changes.

Stopping the execution

In order to stop any execution currently running, one can simply call

$ ride execution stop

An idle state machine will start as soon as a state machine is stopped.

Bundle commands

Commands for working with bundles are grouped together under the bundle subcommand. A bundle is a collection of state machines and resources.

ride bundle --help command lists all available bundle commands:

Usage: ride bundle [COMMAND]
  Bundle commands (default: list)

Available options:
  -h,--help                Show this help text

Available commands:
  list                     List bundles
  install                  Install bundles on a robot
  compile                  Compile a single bundle
  publish                  Compile and sign a single bundle
  remove                   Remove a bundle
  new                      Create a new bundle
  info                     Introspect a bundle archive

All commands shown here assume that you're successfully logged in to the robot. If you are using a different network configuration, append the -c <SERVER> parameter to your commands. This is useful if you for example temporarily use the shop floor to connect to the robot instead of the robot network. It will use the stored credentials to connect to the set SERVER.

Create a new bundle

This will create the directory structure for a new, empty bundle.

$ ride bundle new BUNDLE_PATH

Given a path like bundles/test this will create a structure similar to

.
└── bundles
  └── test
      ├── manifest.json
      ├── sources
      │  └── test.lf
      └── resources

Listing bundles

All currently uploaded bundles can be seen with

$ ride bundle list

or by simply executing ride bundle. There are two types of bundles:

  • CloudBundle: Downloaded and installed from the Franka World.

  • LocalBundle: Installed through ride-cli. Will be deleted once the app development feature is removed from the robot.

Compiling bundles

The compile command has the following form:

ride bundle compile DIR [-o|--output FILE] [-B|--bundle-dir DIRECTORY]
                        [--ignore-dependencies] [--fix-manifest] [--verbose]

with DIR as the path to the bundle directory, containing the manifest.json. A basic bundle is a folder containing:

  • manifest file

  • sources directory

  • resources directory

The manifest.json file encodes the bundle's meta information such as its name, version, dependencies and global context menu components (see `Parameter Modification <context_menu.html#global-components>`_in) a JSON format:

{
  "name": "my_bundle",
  "version": "1.0",
  "dependencies": [],
  "globalComponents": []
}

The sources folder contains state machines in the Lingua Franka format, as described by chapter LF file format. The resources folder contains any additional files, such as icons and images.

To create the structure you could use the above described ride bundle new BUNDLE_PATH command.

Note

If your state machines depend on states outside of the currently compiled bundle, you can append the path to the bundle containing those states using the --bundle-dir parameter. Make sure to also add these bundles to your manifest!

Handling dependencies

Oftentimes, you want to utilize state machines from other bundles, either ones you wrote yourself or from bundles written by other developers. How exactly you can use state machines from other bundles in your state machine is described later in more detail in the chapter LF file format. ride tries to assist you as much as possible with finding and fixing missing dependencies.

When you are using a state machine from another bundle you have to declare the bundle dependency in your manifest. Let's assume that our test bundle uses some functionality from the pick bundle. Oftentimes, it is enough to just use a dependency and let ride fix the manifest for you:

$ ride bundle compile bundles/test
~/statemachines/bundles/test/manifest.json: ERROR
    Missing or undeclared dependencies: pick
    Try these "dependencies": ["pick"] or use --fix-manifest.
ExitFailure 1

$ ride compile bundles/test --fix-manifest

The fixed manifest will then contain the bundle our test bundle depends on. Now ride happily compiles our test bundle again. However, this works only when the state machine you reference to is in the same folder as the bundle you compile.

{
  "name": "test",
  "version": "1.0",
  "dependencies": ["pick"]
}

Warning

Your code should not depend on system bundles. You can recognize those by their common prefix fe_system. These are only intended for internal use.

There is one edge case which has to be considered by developers and is not covered by RIDE. If a bundle uses a resource from another bundle (e.g. pick) and an SVG file is specified in the clientData.icon markup that bundle needs to be added manually to the dependencies section in the manifest. RIDE will not check if this dependency exists. Using this bundle on a robot where the dependency is missing will result in an HTML/JS error when using the Bundle in Desk.

Dependency resolution

Sometimes you get an error about missing dependencies, where RIDE does not offer the --fix-manifest option. This is because RIDE is unable to find the dependent bundle. By default RIDE will look through the parent folder of your bundle to resolve the bundles you depend on. Let's assume our workspace layout looks like this:

.
├── bundles
│ └── test
│     ├── manifest.json
│     ├── sources
│     │  └── Test.lf
│     └── resources
└── dependencies
  ├── pick
  └── ...

When we now try to compile the test bundle again, we will get an error message saying, that the pick dependency could not be resolved. This is because we explicitly have to tell where RIDE can find this dependency with the -B option:

$ ride bundle compile bundles/test -B dependencies/pick

Note

You can use multiple -B options to specify multiple paths for different dependencies. However you can also specify the workspace directory (e.g. -B dependencies/) to search recursively through all bundles.

Now our test bundle should compile nicely and can be installed on the robot.

Installing bundles

If you created, or were provided with a bundle as a .bundle file, you can upload it to the robot using:

$ ride bundle install FILE

You will get warnings associated to the installed bundle. If you want to get all warnings of all bundles, use the -a|--all-warnings option.

Publishing bundles

To publish your bundle to Franka World you need to sign it using your private key and your app developer certificate. This works similarly to how you compiled your bundle, but you add the paths to KEY and CERT. The following command will create a signed bundle, which you can upload to the Franka World:

ride bundle publish DIR [-o|--output FILE] [-B|--bundle-dir DIRECTORY]
                    KEY CERT [--verbose]

Removing bundles

You can remove a bundle by executing ride bundle remove BUNDLE_NAME. If you are not sure about the name of your bundle, use the ride bundle list command. You can remove bundles installed through the Franka World (CloudBundle) as well as bundles installed through ride-cli (LocalBundle).

Showing bundle information

The ride bundle info command lists the following information about a compiled bundle in a .bundle file:

  • The bundle's name

  • Version of the bundle

  • The list of contained apps and their icons

  • The list of other bundles on which this bundle depends

The information is presented in JSON format.

Node commands

Usage: ride node [COMMAND | [-t|--tree] [PATH]]
  Node commands (default: list)

Available options:
  -h,--help                Show this help text
  -t,--tree                List nodes at path and their children recursively as
                          tree.
  PATH                     Path of the (sub) nodes to list, separated by periods
                          (e.g. 0_timeline.timeline_body).

Available commands:
  list                     List root nodes

Listing state machines

All currently uploaded root nodes can be gathered through

$ ride node list

This list shows all state machines available on the robot, including both your own state machines as well as internal system state machines. Tasks on the robot are also listed and can be detected by the prefix 0_.

Using -t or --tree will show all nodes with their child nodes, without following linked states.

Nodes at path []:
├── 0_my_test_task
│   └── timeline_body
│       └── test_move
│           └── skill
...
├── fe_lib_robot__move
│   ├── check_empty_motion
│   ├── fe_lib_robot__convert_timeline_parameters
│   ├── move_cart
│   ├── move_joint
│   └── process_poses
├── fe_lib_robot__move_contact
│   ├── check_error
│   ├── motion
│   ├── move
│   └── stop_at_contact_change
...

By adding a path, only the subtree after the path will be shown, i.e calling

$ ride node list -t fe_lib_robot__move_contact

results only in

Nodes at path ["fe_lib_robot__move_contact"]:
├── check_error
├── motion
├── move
└── stop_at_contact_change

Note

This command is especially useful to find the correct name of a state machine to use for the ride execution start and ride execution stop calls.

Service commands

ride-cli allows you to get insight into the services that are currently connected to the core.

Usage: ride service COMMAND
  Service commands

Available options:
  -h,--help                Show this help text

Available commands:
  list                     List connected services
  echo                     Echo events of a service

Listing connected services

To list all connected services call:

$ ride service list

When the name of a service is appended, only information about that specific service is shown e.g.:

$ ride service list opcua
  Service opcua
    ...
    Operation readIntMap
      Request: { }
      Result:  []{ string key; int value; }
      Error:   string
    Operation readIntMapKeys
      Request: { }
      Result:  []string
      Error:   string
    Operation readPose
      Request: { string key; float timeout; }
      Result:  [16]float
      Error:   string
    Operation readPoseMap
      Request: { }
      Result:  []{ string key; [16]float value; }
      Error:   string
    ...

With -o and -e you can optionally choose to only list operations or events respectively.

Echoing event values

ride-cli also provides a tool to continuously print event values. Call

$ ride service echo SERVICE_NAME EVENT_NAME

to print values for the given event. For example, you can use

$ ride service echo robot robot_state

to publish the robot state values from the robot service.

Log commands

ride-cli is able to relay log messages from the core. This is useful to display print messages of your apps. In order to display the log messages from the core, simply call

$ ride log
[ INFO] 09:55:24.351 UTC: Idle stopped
[ INFO] 09:55:28.444 UTC: Example print from app
[ INFO] 09:55:31.518 UTC: Timeline: { error_cause: nil }
...

Note

By default this command will omit dates (but not times) from the output. If you need also the dates simply use the --with-date switch