Skip to content

Module drivers core

Stefan deBruyn edited this page Dec 30, 2018 · 12 revisions

Module drivers/core

Maintainers

Slack Github
Stefan @stefandebruyn @stefandebruyn
Tianshu @thetianshuhuang @thetianshuhuang

Related Issues

Usage

robot module

Contains the lowest-level robot class.

  • RobotFrame - A threaded encapsulation of subsystem states and an instruction sequence associated with them. Implementations should override loop

robotcore module

drivers.core.robotcore contains abstract representations of robot subsystems intended to provide a common interface for both simulated and actual robots.

  • Subsystem - Parent of all subsystems. Holds a unique name by which to identify the system
  • Motor - Parent of all motor types. Holds a robotmotion.MotionState and the timestamp of the last update
  • StepperMotor - Type of Motor that can be updated with a position x and a timestamp t. Velocity, acceleration, and jerk are then calculated by approximating the slopes of dx/dt, d2x/dt2, and d3x/dt3.
  • BinaryActuator - An actuator with a binary state, such as a servo claw
  • AnalogActuator - An actuator with a bounded state, such as a linear slide

robotmotion module

drivers.core.robotmotion contains things relating to motion planning and profiling. Like robotcore, this module is built to be common ground for the simulator and the robot.

  • MotionProfile - Represents a motion profile fitted to some endpoints and constraints. Target states at specific points in time within the profile can be fetched with state_at
  • MotionState - An instantaneous kinematic state in 1D space; <pos, vel, accel, jerk, time>. Clients shouldn't have to use this
  • MotionSegment - A MotionState held for some period of time. Clients shouldn't have to use this

profiling module

Contains the actual motion profile generation algorithms.

  • make_sym_trap - Generates a symmetrical trapezoidal (three-segment, acceleration-limited) profile
  • make_sym_scurve - Generates a symmetrical S-curve(seven-segment, acceleration- and jerk-limited) profile

The algorithms in this module generate only profiles with zero endpoint velocities, as this allows for complete tolerance of constraints that would have otherwise produced malformed profiles.

An overly verbose example of using a motion profile:

from drivers.core.profiling import make_sym_trap

initial_position = 0
final_position = 100

max_velocity = 10
max_acceleration = 5

profile = make_sym_trap(initial_position, final_position, max_velocity, max_acceleration)

middle_state = profile.state_at(profile.duration / 2)
middle_position = middle_state.x
middle_velocity = middle_state.v
middle_accel = middle_state.a
middle_jerk = middle_state.j
Clone this wiki locally