Skip to content

Class hal::rmd::drc

ClassList > hal > rmd > drc

Driver for RMD motors equip with the DRC motor drivers.

  • #include <drc.hpp>

Classes

Type Name
struct feedback_t

Public Types

Type Name
enum hal::byte actuate
Commands for actuate the motor.
enum hal::byte read
Commands that can be issued to a RMD-X motor.
enum hal::byte system
Commands for controlling the motor as a whole.
enum hal::byte write
Commands for updating motor configuration data.

Public Functions

Type Name
drc (drc & p_other) = delete
drc (drc && p_other) noexcept
const feedback_t & feedback () const
status feedback_request (read p_command)
Request feedback from the motor.
void operator() (const can::message_t & p_message)
Handle messages from the canbus with this devices ID.
drc & operator= (drc & p_other) = delete
drc & operator= (drc && p_other) noexcept
status position_control (degrees p_angle, rpm speed)
Move motor shaft to a specific angle.
status system_control (system p_system_command)
Send system control commands to the device.
status velocity_control (rpm p_speed)
Rotate motor shaft at the designated speed.

Public Static Functions

Type Name
result< drc > create (hal::can_router & p_router, hal::steady_clock & p_clock, float p_gear_ratio, can::id_t device_id, hal::time_duration p_max_response_time=std::chrono::milliseconds(10))
Create a new drc device driver.

Public Types Documentation

enum actuate

enum hal::rmd::drc::actuate {
    speed = 0xA2,
    position_2 = 0xA4
};

enum read

enum hal::rmd::drc::read {
    multi_turns_angle = 0x92,
    status_1_and_error_flags = 0x9A,
    status_2 = 0x9C
};

enum system

enum hal::rmd::drc::system {
    clear_error_flag = 0x9B,
    off = 0x80,
    stop = 0x81,
    running = 0x88
};

enum write

enum hal::rmd::drc::write {
    pid_to_ram = 0x31,
    pid_to_rom = 0x32,
    acceleration_data_to_ram = 0x34,
    encoder_offset = 0x91,
    current_position_to_rom_as_motor_zero = 0x19
};

Public Functions Documentation

function drc [1/3]

hal::rmd::drc::drc (
    drc & p_other
) = delete

function drc [2/3]

hal::rmd::drc::drc (
    drc && p_other
) noexcept

function feedback

const feedback_t & hal::rmd::drc::feedback () const

function feedback_request

Request feedback from the motor.

status hal::rmd::drc::feedback_request (
    read p_command
) 

Parameters:

  • p_command - the request to command the motor to respond with

Returns:

status - success or failure

Exception:

  • std::errc::timed_out - if a response is not returned within the max response time set at creation.

function operator()

Handle messages from the canbus with this devices ID.

void hal::rmd::drc::operator() (
    const can::message_t & p_message
) 

Meant mostly for testing purposes.

Parameters:

  • p_message - message received from the bus

function operator=

drc & hal::rmd::drc::operator= (
    drc & p_other
) = delete

function operator=

drc & hal::rmd::drc::operator= (
    drc && p_other
) noexcept

function position_control

Move motor shaft to a specific angle.

status hal::rmd::drc::position_control (
    degrees p_angle,
    rpm speed
) 

Parameters:

  • p_angle - angle position in degrees to move to
  • speed - maximum speed in rpm's

Returns:

status - success or failure

Exception:

  • std::errc::timed_out - if a response is not returned within the max response time set at creation.

function system_control

Send system control commands to the device.

status hal::rmd::drc::system_control (
    system p_system_command
) 

Parameters:

  • p_system_command - system control command to send to the device

Returns:

status - success or failure status

Exception:

  • std::errc::timed_out - if a response is not returned within the max response time set at creation.

function velocity_control

Rotate motor shaft at the designated speed.

status hal::rmd::drc::velocity_control (
    rpm p_speed
) 

Parameters:

  • p_speed - speed in rpm to move the motor shaft at. Positive values rotate the motor shaft clockwise, negative values rotate the motor shaft counter-clockwise assuming you are looking directly at the motor shaft.

Returns:

status - success or failure

Exception:

  • std::errc::timed_out - if a response is not returned within the max response time set at creation.

Public Static Functions Documentation

function create

Create a new drc device driver.

static result< drc > hal::rmd::drc::create (
    hal::can_router & p_router,
    hal::steady_clock & p_clock,
    float p_gear_ratio,
    can::id_t device_id,
    hal::time_duration p_max_response_time=std::chrono::milliseconds(10)
) 

This factory function will power cycle the motor

Parameters:

  • p_router - can router to use
  • p_clock - clocked used to determine timeouts
  • p_gear_ratio - gear ratio of the motor
  • device_id - The CAN ID of the motor
  • p_max_response_time - maximum amount of time to wait for a response from the motor.

Returns:

result<drc> - the drc driver or an error

Exception:

  • std::errc::timed_out - a response is not returned within the max response time when attempting to power cycle.

The documentation for this class was generated from the following file libraries/include/libhal-rmd/drc.hpp