Base Remote Control Service
The Base Remote Control service implements an input controller as a remote control for a base.
This uses the input
api to make it easy to add remote drive controls for your rover or other mobile robot with a controller like a gamepad.
Add the Base Remote Control service after configuring your robot with a base and input controller to control the linear and angular velocity of the base with the controller’s button or joystick controls.
Control mode is determined by the configuration attribute "mode"
, for which there are five options:
"arrowControl"
: Arrow buttons control speed and angle"triggerSpeedControl"
: Trigger button controls speed and joystick controls angle"buttonControl"
: Four buttons (usually X, Y, A, B) control speed and angle"joyStickControl"
: One joystick controls speed and angle"droneControl"
: Two joysticks control speed and angle
You can monitor the input from these controls in the Control tab of the Viam app.
Configuration
You must configure a base with a movement sensor as part of your robot to be able to use a Base Remote Control service.
Navigate to the Config tab of your robot’s page in the Viam app.
Click the Services subtab, then click Create service in the lower-left corner.
Select the type Base Remote Control
.
Enter a name for your service, then click Create.
{
"name": "<your-base-remote-control-service>",
"type": "base_remote_control",
"attributes": {
"base": "<your-base-name>",
"input_controller": "<your-controller-name>"
}
}
{
"name": "my-base-remote-control-service",
"type": "base_remote_control",
"attributes": {
"base": "my-base",
"input_controller": "my-input-controller",
"control_mode": "arrowControl"
}
}
Edit and fill in the attributes as applicable. The following attributes are available for base remote control services:
Name | Type | Inclusion | Description |
---|---|---|---|
base | string | Required | The name of the base you have configured for the base you are operating with this service. |
input_controller | string | Required | The name of the input controller you have configured for the base you are operating with this service. |
control_mode | string | Optional | The mode of remote control you want to use. Options:
Default: "arrowControl" |
max_angular_degs_per_sec | float | Optional | The max angular velocity for the base in degrees per second. |
max_linear_mm_per_sec | float | Optional | The max linear velocity for the base in meters per second. |
API
The base remote control service supports the following methods:
Method Name | Description |
---|---|
Close | Close out of all remote control related systems. |
ControllerInputs | Get a list of inputs from the controller that is being monitored for that control mode. |
Tip
The following code examples assume that you have a robot configured with a base named "my_base"
, input controller named "my_controller"
, and Base Remote Control service named "my_base_rc_service"
.
Make sure to add the required code to connect to your robot and import any required packages at the top of your code file.
Go to your robot’s Code sample tab on the Viam app for boilerplate code to connect to your robot.
Close
Close out of all remote control related systems.
Parameters:
ctx
(Context): A Context carries a deadline, a cancellation signal, and other values across API boundaries.
Returns:
- (error): An error, if one occurred.
For more information, see the Go SDK Docs.
baseRCService, err := baseremotecontrol.FromRobot(robot, "my_base_rc_service")
// Close out of all remote control related systems.
err := baseRCService.Close(context.Background())
ControllerInputs
Get a list of inputs from the controller that are being monitored for that control mode.
Parameters:
- None
Returns:
- ([]Control): A list of inputs from the controller that are being monitored for that control mode..
For more information, see the Go SDK Docs.
baseRCService, err := baseremotecontrol.FromRobot(robot, "my_base_rc_service")
// Get the list of inputs from the controller that are being monitored for that control mode.
inputs := baseRCService.ControllerInputs()
Have questions, or want to meet other people working on robots? Join our Community Discord.
Was this page helpful?
Glad to hear it! If you have any other feedback please let us know:
We're sorry about that. To help us improve, please tell us what we can do better:
Thank you!