Resurgence (PY2022)
Codebase for the Husky Robotics 2021-2022 rover Resurgence
Loading...
Searching...
No Matches
CANMotor.h
1#pragma once
2
3#include "../world_interface/data.h"
4#include "CAN.h"
5#include "CANUtils.h"
6
7#include <chrono>
8#include <optional>
9
16namespace can::motor {
17
19enum class motormode_t {
20 pwm = MOTOR_UNIT_MODE_PWM,
21 pid = MOTOR_UNIT_MODE_PID
22};
23
25struct sensor_t {
26 enum {
27 encoder = 0,
28 potentiometer = 1
29 };
30};
31
38
46void initMotor(devicegroup_t group, deviceserial_t serial);
47
63void initEncoder(devicegroup_t group, deviceserial_t serial, bool invertEncoder,
64 bool zeroEncoder, int32_t pulsesPerJointRev,
65 std::optional<std::chrono::milliseconds> telemetryPeriod);
66
78
92 int32_t posHi, uint16_t adcLo, uint16_t adcHi,
93 std::optional<std::chrono::milliseconds> telemetryPeriod);
94
107 int32_t kD);
108
115void setMotorMode(devicegroup_t group, deviceserial_t serial, motormode_t mode);
116
123void setMotorPower(devicegroup_t group, deviceserial_t serial, double power);
124
133void setMotorPower(devicegroup_t group, deviceserial_t serial, int16_t power);
134
144void setMotorPIDTarget(devicegroup_t group, deviceserial_t serial, int32_t target);
145
153void setServoPos(devicegroup_t group, deviceserial_t serial, uint8_t servoNum, int32_t angle);
154
155void setStepperTurnAngle(devicegroup_t group, deviceserial_t serial, uint8_t stepper, int16_t angle);
156
167
176
188 devicegroup_t group, deviceserial_t serial,
189 const std::function<void(
190 devicegroup_t group, deviceserial_t serial,
192
200} // namespace can::motor
Represents data measured using a sensor at a given time.
Definition data.h:181
Utilities for interacting with motor boards over a CAN interface.
Definition CANMotor.cpp:21
void setMotorPower(devicegroup_t group, deviceserial_t serial, double power)
Set the power output of a motor board.
Definition CANMotor.cpp:104
void initPotentiometer(devicegroup_t group, deviceserial_t serial, int32_t posLo, int32_t posHi, uint16_t adcLo, uint16_t adcHi, std::optional< std::chrono::milliseconds > telemetryPeriod)
Initialize a potentiometer attached to the given motor.
Definition CANMotor.cpp:41
void setMotorPIDConstants(devicegroup_t group, deviceserial_t serial, int32_t kP, int32_t kI, int32_t kD)
Set the PID constants for a motor board.
Definition CANMotor.cpp:82
void setLimitSwitchLimits(devicegroup_t group, deviceserial_t serial, int32_t lo, int32_t hi)
Set the limits of the limit switch on a motor board.
Definition CANMotor.cpp:70
void setServoPos(devicegroup_t group, deviceserial_t serial, uint8_t servoNum, int32_t angle)
Set the angle of the PCA servo.
Definition CANMotor.cpp:123
motormode_t
The possible motor modes.
Definition CANMotor.h:19
void removeLimitSwitchCallback(callbackid_t id)
Remove a previously registered limit switch callback.
Definition CANMotor.cpp:161
void setMotorMode(devicegroup_t group, deviceserial_t serial, motormode_t mode)
Set the mode of a motor board.
Definition CANMotor.cpp:97
void pullMotorPosition(devicegroup_t group, deviceserial_t serial)
Poll the position data from a motor board.
Definition CANMotor.cpp:139
void initMotor(devicegroup_t group, deviceserial_t serial)
Initialize a motor.
Definition CANMotor.cpp:65
void initEncoder(devicegroup_t group, deviceserial_t serial, bool invertEncoder, bool zeroEncoder, int32_t pulsesPerJointRev, std::optional< std::chrono::milliseconds > telemetryPeriod)
Initialize an encoder attached to the given motor.
Definition CANMotor.cpp:23
callbackid_t addLimitSwitchCallback(devicegroup_t group, deviceserial_t serial, const std::function< void(devicegroup_t group, deviceserial_t serial, DataPoint< LimitSwitchData > limitSwitchData)> &callback)
Add a callback that is invoked when the limit switch is triggered for a motor board.
Definition CANMotor.cpp:143
void emergencyStopMotors()
Emergency stop all motors on the CAN bus.
Definition CANMotor.cpp:57
DataPoint< int32_t > getMotorPosition(devicegroup_t group, deviceserial_t serial)
Get the last reported position of a motor.
Definition CANMotor.cpp:135
void setMotorPIDTarget(devicegroup_t group, deviceserial_t serial, int32_t target)
Set the position PID target of a motor board.
Definition CANMotor.cpp:117
devicegroup_t
The possible device group codes.
Definition CANUtils.h:20
std::tuple< deviceid_t, telemtype_t, uint32_t > callbackid_t
An ID for a telemetry callback.
Definition CAN.h:25
uint8_t deviceserial_t
The type of the device serial number.
Definition CANUtils.h:67
::uint8_t uint8_t
::uint16_t uint16_t
::int32_t int32_t
::int16_t int16_t
The supported motor position sensors.
Definition CANMotor.h:25