Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
7a5e96a
wip
EshaMaharishi Sep 15, 2026
46edeb6
Drop vel/accel fields from StreamOptions
EshaMaharishi Sep 15, 2026
4515d22
Revert "Drop vel/accel fields from StreamOptions"
EshaMaharishi Sep 15, 2026
651b072
Document StreamOptions vel/accel fields as falling back to kinematics
EshaMaharishi Sep 15, 2026
15618b3
Rename StreamOptions.diagnostics_window_ms to diagnostics_window_secs
EshaMaharishi Sep 17, 2026
c9f1bdc
StreamOptions: use arm.v1.MoveOptions instead of separate vel/accel f…
EshaMaharishi Sep 18, 2026
b57a660
Condense StreamOptions' move_options/diagnostics_window_secs comments…
EshaMaharishi Sep 18, 2026
50ecd96
Remove comments above StreamOptions and StreamArmJointPositionsResponse
EshaMaharishi Sep 18, 2026
bd91975
Trim the Targets.positions comment
EshaMaharishi Sep 18, 2026
68dee49
Actually shorten the move_options/diagnostics_window_secs comments
EshaMaharishi Sep 18, 2026
1b51520
Remove the max_tcp_speed aside from the move_options comment
EshaMaharishi Sep 18, 2026
ab76475
Say "kinematic limits" instead of "velocity/acceleration limits"
EshaMaharishi Sep 18, 2026
c5c029d
Trim "(in ms)" and "sticky" from StreamOptions/Init comments
EshaMaharishi Sep 18, 2026
d50e989
Add a blank line between each StreamOptions field
EshaMaharishi Sep 18, 2026
b07ddde
Reword send_to_arm_interval_ms's comment
EshaMaharishi Sep 18, 2026
5eb1e35
Swap the order of diagnostics_window_secs and move_options in StreamO…
EshaMaharishi Sep 18, 2026
f2a3f34
Trim "(in seconds)" from diagnostics_window_secs' comment
EshaMaharishi Sep 18, 2026
02ad249
Rename target_runway_in_arm_ms to arm_side_target_runway_ms
EshaMaharishi Sep 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions proto/viam/service/motion/v1/motion.proto
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ syntax = "proto3";
package viam.service.motion.v1;

import "common/v1/common.proto";
import "component/arm/v1/arm.proto";
import "google/api/annotations.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
Expand Down Expand Up @@ -60,6 +61,13 @@ service MotionService {
option (google.api.http) = {get: "/viam/api/v1/service/motion/{name}/get_plan"};
}

// Streams joint-space waypoints to an arm, one session per arm at a time.
// The first message on the stream must be an Init; every subsequent message
// must be a Targets batch. Closing the request stream (client-side) drains
// any buffered trajectory to the arm before ending the call; canceling the
// call's context aborts the session immediately.
rpc StreamArmJointPositions(stream StreamArmJointPositionsRequest) returns (stream StreamArmJointPositionsResponse);

// DoCommand sends/receives arbitrary commands
rpc DoCommand(common.v1.DoCommandRequest) returns (common.v1.DoCommandResponse) {
option (google.api.http) = {post: "/viam/api/v1/service/motion/{name}/do_command"};
Expand Down Expand Up @@ -411,3 +419,48 @@ message PlanStep {
message ComponentState {
common.v1.Pose pose = 1;
}

message StreamOptions {
// How much trajectory the motion service tries to keep buffered on the arm's side.
optional int32 arm_side_target_runway_ms = 1;

// How often the motion service aims to top up the arm's buffered runway.
optional int32 send_to_arm_interval_ms = 2;

// Size of the diagnostics window; non-positive disables its retention.
optional int32 diagnostics_window_secs = 3;

// Kinematic limits for the session's trajectory.
optional viam.component.arm.v1.MoveOptions move_options = 4;
}

message StreamArmJointPositionsRequest {
// Name of the motion service.
string name = 1;

oneof message {
// Session initiation. Sent exactly once and must be the first message on the stream.
Init init = 2;

// A batch of joint-position targets to append to the running session. Sent N times after init.
Targets targets = 3;
}

message Init {
// Name of the arm to stream joint positions to. Only one session per arm may run at a time.
string component_name = 1;

// Optional session configuration. If unset, the motion service applies its own defaults.
optional StreamOptions options = 2;

// Additional arguments to the method.
google.protobuf.Struct extra = 99;
}

message Targets {
// Target joint positions to append to the session, in order.
repeated viam.component.arm.v1.JointPositions positions = 1;
}
}

message StreamArmJointPositionsResponse {}
Loading
Loading