DynamixelBus#

rb::DynamixelBus is the direct peripheral-access class for Dynamixel-based devices. This page is intentionally close in spirit to ROBOTIS’s own PortHandler-style reference: open the bus, configure communication, then read or write grouped or per-device values.

Header

Header

#include <rby1-sdk/base/dynamixel_bus.h>

Declaration

Namespace

rb

Kind

class

Primary role

Open a Dynamixel device bus and perform low-level read or write operations for attached devices.

Public Member Functions

Method group

Purpose

Notes

DynamixelBus(...), OpenPort(), SetBaudRate(...)

Configure the port and communication settings.

This is the bus bring-up sequence.

Ping(...) and Read*() helpers

Check presence and read one device’s state or configuration.

Covers encoder, torque-enable, operating mode, temperature, and buttons.

GroupFastSyncRead*() and GetMotorStates(...)

Read multiple devices efficiently in one transaction.

Use for synchronized state polling.

Send*() and GroupSyncWrite*()

Write torque, position, operating mode, or vibration values.

Use the grouped variants for multi-device updates.

GetPosition*Gain() and SetPosition*Gain(...)

Inspect or change PID gains.

Covers individual gains or the combined PID record.

SetTorqueConstant(...)

Configure torque constants used by the helper routines.

Useful when mapping current or torque values.

Numeric Fields, Units & Encodings

Method or field family

Unit / encoding

Notes

SetBaudRate(baudrate)

Baud rate value

Serial line speed passed as an integer baud setting.

ReadEncoder(), GroupFastSyncReadEncoder(), MotorState::position

rad

Encoder values converted into joint angle.

MotorState::velocity

rad/s

Present motor velocity.

SendCurrent(...), MotorState::current

A

Motor current command/readback.

SendTorque(...), GroupSyncWriteSendTorque(...), MotorState::torque

Nm

Torque command/readback.

ReadTemperature(), MotorState::temperature

deg C

Motor temperature values.

SendGoalPosition(...), GroupSyncWriteSendPosition(...)

Encoder units

Public Python docs explicitly describe these as raw encoder units rather than radians.

SetPosition*Gain(...), GetPosition*Gain(...), PIDGain::p_gain/i_gain/d_gain

Register value

Raw PID register values, not normalized gains.

ReadOperatingMode(...), SendOperatingMode(...), GroupSyncWriteOperatingMode(...)

Register / enum value

Operating-mode encoding from the motor firmware.

ReadTorqueEnable(...), GroupFastSyncReadTorqueEnable(...), GroupSyncWriteTorqueEnable(...)

0 / 1

Torque-enable flag values.

ReadButtonStatus() / ButtonState::button, ButtonState::trigger

State value

Exposed as integer button/trigger states. No physical unit is defined.

SendVibration(level)

Range [0, 255]

Raw vibration-level command.

SetTorqueConstant(...)

Not specified

Public C++/Python docs describe the parameter but do not assign a unit.

Detailed Reference

class DynamixelBus#

Public Functions

explicit DynamixelBus(const std::string &dev_name)#
~DynamixelBus()#
std::optional<std::vector<std::pair<int, MotorState>>> GetMotorStates(const std::vector<int> &ids)#
std::optional<uint16_t> GetPositionDGain(int id)#
std::optional<uint16_t> GetPositionIGain(int id)#
std::optional<uint16_t> GetPositionPGain(int id)#
std::optional<DynamixelBus::PIDGain> GetPositionPIDGain(int id)#
std::optional<std::vector<std::pair<int, int>>> GroupFastSyncRead(const std::vector<int> &ids, int addr, int len)#
std::optional<std::vector<std::pair<int, double>>> GroupFastSyncReadEncoder(const std::vector<int> &ids)#
std::optional<std::vector<std::pair<int, int>>> GroupFastSyncReadOperatingMode(const std::vector<int> &ids, bool use_cache = false)#
std::optional<std::vector<std::pair<int, int>>> GroupFastSyncReadTorqueEnable(const std::vector<int> &ids)#
void GroupSyncWriteOperatingMode(const std::vector<std::pair<int, int>> &id_and_mode_vector)#
void GroupSyncWriteSendPosition(const std::vector<std::pair<int, double>> &id_and_position_vector)#
void GroupSyncWriteSendTorque(const std::vector<std::pair<int, double>> &id_and_torque_vector)#
void GroupSyncWriteTorqueEnable(const std::vector<int> &ids, int enable)#
void GroupSyncWriteTorqueEnable(const std::vector<std::pair<int, int>> &id_and_eanble_vector)#
bool OpenPort()#
bool Ping(int id)#
std::optional<std::pair<int, ButtonState>> ReadButtonStatus(int id)#
std::optional<double> ReadEncoder(int id)#
std::optional<int> ReadOperatingMode(int id, bool use_cache = false)#
std::optional<int> ReadTemperature(int id)#
std::optional<int> ReadTorqueEnable(int id)#
void SendCurrent(int id, double current)#
void SendGoalPosition(int id, int goal_position)#
bool SendOperatingMode(int id, int mode)#
void SendTorque(int id, double joint_torque)#
void SendTorqueEnable(int id, int onoff)#
void SendVibration(int id, int level)#
bool SetBaudRate(int baudrate)#
void SetPositionDGain(int id, uint16_t d_gain)#
void SetPositionIGain(int id, uint16_t i_gain)#
void SetPositionPGain(int id, uint16_t p_gain)#
void SetPositionPIDGain(int id, const DynamixelBus::PIDGain &pid_gain)#
void SetPositionPIDGain(int id, std::optional<uint16_t> p_gain, std::optional<uint16_t> i_gain, std::optional<uint16_t> d_gain)#
void SetPositionPIDGain(int id, uint16_t p_gain, uint16_t i_gain, uint16_t d_gain)#
void SetTorqueConstant(const std::vector<double> &torque_constant)#

Public Static Attributes

static int kAddrCurrentTemperature = 146#
static uint16_t kAddrGoalCurrent = 102#
static uint16_t kAddrGoalPosition = 116#
static uint16_t kAddrGoalVibrationLevel = 102#
static uint16_t kAddrOperatingMode = 11#
static uint16_t kAddrPositionDGain = 80#
static uint16_t kAddrPositionIGain = 82#
static uint16_t kAddrPositionPGain = 84#
static uint16_t kAddrPresentButtonState = 132#
static uint16_t kAddrPresentCurrent = 126#
static uint16_t kAddrPresentPosition = 132#
static uint16_t kAddrPresentVelocity = 128#
static uint16_t kAddrTorqueEnable = 64#
static int kCurrentBasedPositionControlMode = 5#
static int kCurrentControlMode = 0#
static int kDefaultBaudrate = 2000000#
static float kProtocolVersion = 2.0#
static int kTorqueDisable = 0#
static int kTorqueEnable = 1#
struct ButtonState#

Public Members

int button#
int trigger#
struct MotorState#

Public Members

double current#
double position#
int temperature#
double torque#
bool torque_enable#
double velocity#
struct PIDGain#

Public Members

uint16_t d_gain#
uint16_t i_gain#
uint16_t p_gain#

Related Types

Examples

  • module_test/gripper.cpp

  • module_test/head.cpp

  • module_test/tool_flange.cpp