Aisprid implementation challenge
| cfg | ||
| doc | ||
| src | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| makefile | ||
| README.md | ||
Multi motor controller
Simulation of a multi-motor controller for Aisprid technical challenge.
Compile
In root directory, call make to generate binary file. To clean up, call make clean.
Usage
Configure simulation
- Edit config file with simulation parameters. This file should be provided to every commands. Beware to set different ports to every motor.
Servers startup
- Start Motor servers (with valid IDs from config file):
./motorsim -c ./cfg/motors.yaml motor --id [ID] serve - Start Motor controller server (Beware, if modifying default port, other controllers commands except Port 8080):
./motorsim -c ./cfg/motors.yaml controller serve
Client usage
Motor controller commands
- Get joints values:
./motorsim -c ./cfg/motors.yaml controller getJoints - Set joints values:
./motorsim -c ./cfg/motors.yaml controller setJoints [Joint goals]
Motor commands
Every command should be provided with valid ID from config file:
- Listen motor state:
./motorsim -c ./cfg/motors.yaml motor --id [ID] listen - Set motor velocity:
./motorsim -c ./cfg/motors.yaml motor --id [ID] moveVel [Velocity]
TODO
- Closed loop control. Currently, not robust to delay in communications and limited command precision.
- Share Motor controller server port with other controller commands.
- Use coroutines for gRPC services callbacks.
- Fix get Motor State service (Behavior not robust).
- Send error responses to clients of gRPC services.