Skip to main content

Titan

The Titan provides CAN bus DC motor control for up to 4 motors per unit, with closed-loop velocity and position control via the onboard S-Curve algorithm.

Configuration​

titan:
enabled: true
sensors: ["titan0"]
titan0:
can_id: 42
motor_freq: 15600
encoder_rate_hz: 20
motor_update_rate_hz: 50
limit_switches: false
m_0:
encoder_mode: "quadrature"
dist_per_tick: 0.0006830601
invert_motor: false
invert_encoder: false
invert_rpm: false
m_1:
encoder_mode: "quadrature"
dist_per_tick: 0.0006830601
m_2:
encoder_mode: "absolute"
m_3:
encoder_mode: "quadrature"
dist_per_tick: 0.0006830601

Parameters​

ParameterDescription
can_idCAN bus ID of the Titan unit
motor_freqPWM frequency in Hz
encoder_rate_hzEncoder topic publish frequency (default 20)
motor_update_rate_hzInternal motor command rate (default 50)
limit_switchesEnable limit switch inputs (default false)
m_N.encoder_mode"quadrature" or "absolute"
m_N.dist_per_tickMetres per encoder tick — required for quadrature mode
m_N.invert_motorFlip positive direction (default false)
m_N.invert_encoderFlip encoder count direction (default false)
m_N.invert_rpmFlip RPM sign (default false)
note

Use encoder_mode: "absolute" when using a Cypher Max absolute encoder. dist_per_tick has no effect in absolute mode.

Topics​

Subscribed​

TopicTypeDescription
/<name>/m_N/cmdstd_msgs/Float64Motor duty cycle command (−1.0 to 1.0)

Published​

TopicTypeDescriptionRate
/<name>/m_N/encoderstd_msgs/Float64Encoder distance (quadrature mode)encoder_rate_hz
/<name>/m_N/rpmstd_msgs/Float64Motor RPM (quadrature mode)encoder_rate_hz
/<name>/m_N/anglestd_msgs/Float64Absolute angle in degrees (absolute mode)encoder_rate_hz
/<name>/m_N/limit_fwdstd_msgs/BoolForward limit switch stateencoder_rate_hz
/<name>/m_N/limit_revstd_msgs/BoolReverse limit switch stateencoder_rate_hz
info

Limit switch topics publish only when limit_switches: true.

Service​

Service name: /<name>/titan_cmd
Type: studica_control/SetData

CommandRequired FieldsDescription
enable—Power on the controller
disable—Power off; all motors stop
set_speedn_encoder, speedSet motor duty cycle (−1.0 to 1.0)
set_speed_allspeedSet all 4 motors to the same duty cycle
stopn_encoderStop one motor
disable_motorn_encoderCut power to one motor
set_target_velocityn_encoder, speedClosed-loop velocity in RPM
set_target_distancen_encoder, int_valueClosed-loop position in encoder counts
set_target_anglen_encoder, speedDrive to target angle in degrees
set_position_holdn_encoder, holdLock motor at current position
configure_encodern_encoder, dist_per_tickOverride distance per tick at runtime
reset_encodern_encoderZero one encoder
invert_motorn_encoderFlip positive direction at runtime
get_rpmn_encoderRead current RPM
get_encoder_countn_encoderRead raw tick count
get_encoder_distancen_encoderRead odometry distance
get_firmware_version—Firmware version string