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​
| Parameter | Description |
|---|---|
can_id | CAN bus ID of the Titan unit |
motor_freq | PWM frequency in Hz |
encoder_rate_hz | Encoder topic publish frequency (default 20) |
motor_update_rate_hz | Internal motor command rate (default 50) |
limit_switches | Enable limit switch inputs (default false) |
m_N.encoder_mode | "quadrature" or "absolute" |
m_N.dist_per_tick | Metres per encoder tick — required for quadrature mode |
m_N.invert_motor | Flip positive direction (default false) |
m_N.invert_encoder | Flip encoder count direction (default false) |
m_N.invert_rpm | Flip 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​
| Topic | Type | Description |
|---|---|---|
/<name>/m_N/cmd | std_msgs/Float64 | Motor duty cycle command (−1.0 to 1.0) |
Published​
| Topic | Type | Description | Rate |
|---|---|---|---|
/<name>/m_N/encoder | std_msgs/Float64 | Encoder distance (quadrature mode) | encoder_rate_hz |
/<name>/m_N/rpm | std_msgs/Float64 | Motor RPM (quadrature mode) | encoder_rate_hz |
/<name>/m_N/angle | std_msgs/Float64 | Absolute angle in degrees (absolute mode) | encoder_rate_hz |
/<name>/m_N/limit_fwd | std_msgs/Bool | Forward limit switch state | encoder_rate_hz |
/<name>/m_N/limit_rev | std_msgs/Bool | Reverse limit switch state | encoder_rate_hz |
info
Limit switch topics publish only when limit_switches: true.
Service​
Service name: /<name>/titan_cmd
Type: studica_control/SetData
| Command | Required Fields | Description |
|---|---|---|
enable | — | Power on the controller |
disable | — | Power off; all motors stop |
set_speed | n_encoder, speed | Set motor duty cycle (−1.0 to 1.0) |
set_speed_all | speed | Set all 4 motors to the same duty cycle |
stop | n_encoder | Stop one motor |
disable_motor | n_encoder | Cut power to one motor |
set_target_velocity | n_encoder, speed | Closed-loop velocity in RPM |
set_target_distance | n_encoder, int_value | Closed-loop position in encoder counts |
set_target_angle | n_encoder, speed | Drive to target angle in degrees |
set_position_hold | n_encoder, hold | Lock motor at current position |
configure_encoder | n_encoder, dist_per_tick | Override distance per tick at runtime |
reset_encoder | n_encoder | Zero one encoder |
invert_motor | n_encoder | Flip positive direction at runtime |
get_rpm | n_encoder | Read current RPM |
get_encoder_count | n_encoder | Read raw tick count |
get_encoder_distance | n_encoder | Read odometry distance |
get_firmware_version | — | Firmware version string |