C++ API and example

1. Introduction

This page exist in order to extract the examples from the Doxygen documentation, Please have look at the end of this page there are all the examples.

2. C++ API and example

class DGMSolo12 : public DynamicGraphManager
#include <dgm_solo12.hpp>

Public Functions

DGMSolo12()

DemoSingleMotor is the constructor.

~DGMSolo12()

~DemoSingleMotor is the destructor.

bool is_in_safety_mode()

This function make also sure that the joint velocity do not exceed a certain value.

void initialize_hardware_communication_process()

initialize_hardware_communication_process is the function that initialize the hardware.

void get_sensors_to_map(dynamic_graph_manager::VectorDGMap &map)

get_sensors_to_map acquieres the sensors data and feed it to the input/output map

Param :

void set_motor_controls_from_map(const dynamic_graph_manager::VectorDGMap &map)

set_motor_controls_from_map reads the input map that contains the controls and send these controls to the hardware.

Parameters:

map

void calibrate_joint_position_callback(mim_msgs::srv::JointCalibration::Request::SharedPtr req, mim_msgs::srv::JointCalibration::Response::SharedPtr res)

Ros callback for the callibration procedure.

Warning the robot will move to the next the joint index and back to “0” upon this call. Be sure that no controller are running in parallel.

Parameters:
  • req – nothing

  • res – True if everything went well.

Returns:

true if everything went well.

Returns:

false if something went wrong.

void compute_safety_controls()

compute_safety_controls computes safety controls very fast in case the dynamic graph is taking to much computation time or has crashed.

DGMSolo12()

DemoSingleMotor is the constructor.

~DGMSolo12()

~DemoSingleMotor is the destructor.

bool is_in_safety_mode()

This function make also sure that the joint velocity do not exceed a certain value.

void initialize_hardware_communication_process()

initialize_hardware_communication_process is the function that initialize the hardware.

void get_sensors_to_map(dynamic_graph_manager::VectorDGMap &map)

get_sensors_to_map acquieres the sensors data and feed it to the input/output map

Param :

void set_motor_controls_from_map(const dynamic_graph_manager::VectorDGMap &map)

set_motor_controls_from_map reads the input map that contains the controls and send these controls to the hardware.

Parameters:

map

void calibrate_joint_position_callback(mim_msgs::srv::JointCalibration::Request::SharedPtr req, mim_msgs::srv::JointCalibration::Response::SharedPtr res)

Ros callback for the callibration procedure.

Warning the robot will move to the next the joint index and back to “0” upon this call. Be sure that no controller are running in parallel.

Parameters:
  • req – nothing

  • res – True if everything went well.

Returns:

true if everything went well.

Returns:

false if something went wrong.

void compute_safety_controls()

compute_safety_controls computes safety controls very fast in case the dynamic graph is taking to much computation time or has crashed.

Private Functions

void calibrate_joint_position(const solo::Vector12d &zero_to_index_angle)

Calibrate the robot joint position.

Parameters:

zero_to_index_angle – is the angle between the theoretical zero and the next positive angle.

void calibrate_joint_position(const solo::Vector12d &zero_to_index_angle)

Calibrate the robot joint position.

Parameters:

zero_to_index_angle – is the angle between the theoretical zero and the next positive angle.

Private Members

solo::Solo12 solo_

Entries for the real hardware.

solo_ is the hardware drivers.

solo::Vector12d ctrl_joint_torques_

ctrl_joint_torques_ the joint torques to be sent.

Used in this class to perform a local copy of the control. This is need in order to send this copy to the solo::Solo class

solo::Vector12d ctrl_joint_positions_

Desired joint positions for the PD controller running on the udriver board.

solo::Vector12d ctrl_joint_velocities_

Desired joint velocities for the PD controller running on the udriver board.

solo::Vector12d joint_position_gains_

P gains for the PD controller running on the udriver board.

solo::Vector12d joint_velocity_gains_

D gains for the PD controller running on the udriver board.

bool was_in_safety_mode_

Check if we entered once in the safety mode and stay there if so.

solo::Vector12d zero_to_index_angle_from_file_

These are the calibration value extracted from the paramters.

They represent the distance between the theorical zero joint angle and the next jont index.

class DGMSolo8 : public DynamicGraphManager
#include <dgm_solo8.hpp>

Public Functions

DGMSolo8()

DemoSingleMotor is the constructor.

~DGMSolo8()

~DemoSingleMotor is the destructor.

void initialize_hardware_communication_process()

This function make also sure that the joint velocity do not exceed a certain value.

initialize_hardware_communication_process is the function that initialize the hardware.

void get_sensors_to_map(dynamic_graph_manager::VectorDGMap &map)

get_sensors_to_map acquieres the sensors data and feed it to the input/output map

Param :

void set_motor_controls_from_map(const dynamic_graph_manager::VectorDGMap &map)

set_motor_controls_from_map reads the input map that contains the controls and send these controls to the hardware.

Parameters:

map

void calibrate_joint_position_callback(mim_msgs::srv::JointCalibration::Request::SharedPtr req, mim_msgs::srv::JointCalibration::Response::SharedPtr res)
Parameters:
  • req

  • res

Returns:

true

Returns:

false

DGMSolo8()

DemoSingleMotor is the constructor.

~DGMSolo8()

~DemoSingleMotor is the destructor.

void initialize_hardware_communication_process()

This function make also sure that the joint velocity do not exceed a certain value.

initialize_hardware_communication_process is the function that initialize the hardware.

void get_sensors_to_map(dynamic_graph_manager::VectorDGMap &map)

get_sensors_to_map acquieres the sensors data and feed it to the input/output map

Param :

void set_motor_controls_from_map(const dynamic_graph_manager::VectorDGMap &map)

set_motor_controls_from_map reads the input map that contains the controls and send these controls to the hardware.

Parameters:

map

void calibrate_joint_position_callback(mim_msgs::srv::JointCalibration::Request::SharedPtr req, mim_msgs::srv::JointCalibration::Response::SharedPtr res)
Parameters:
  • req

  • res

Returns:

true

Returns:

false

Private Functions

void calibrate_joint_position(const solo::Vector8d &zero_to_index_angle)

Calibrate the robot joint position.

Parameters:

zero_to_index_angle – is the angle between the theoretical zero and the next positive angle.

void calibrate_joint_position(const solo::Vector8d &zero_to_index_angle)

Calibrate the robot joint position.

Parameters:

zero_to_index_angle – is the angle between the theoretical zero and the next positive angle.

Private Members

solo::Solo8 solo_

Entries for the real hardware.

test_bench_ the real test bench hardware drivers.

solo::Vector8d ctrl_joint_torques_

ctrl_joint_torques_ the joint torques to be sent.

Used in this class to perform a local copy of the control. This is need in order to send this copy to the solo::Solo class

bool was_in_safety_mode_

Check if we entered once in the safety mode and stay there if so.

solo::Vector8d zero_to_index_angle_from_file_

These are the calibration value extracted from the paramters.

They represent the distance between the theorical zero joint angle and the next jont index.

class DGMSolo8TI : public DynamicGraphManager
#include <dgm_solo8ti.hpp>

Public Functions

DGMSolo8TI()

DemoSingleMotor is the constructor.

~DGMSolo8TI()

~DemoSingleMotor is the destructor.

void initialize_hardware_communication_process()

initialize_hardware_communication_process is the function that initialize the hardware.

void get_sensors_to_map(dynamic_graph_manager::VectorDGMap &map)

get_sensors_to_map acquieres the sensors data and feed it to the input/output map

Param :

void set_motor_controls_from_map(const dynamic_graph_manager::VectorDGMap &map)

set_motor_controls_from_map reads the input map that contains the controls and send these controls to the hardware.

Parameters:

map

void calibrate_joint_position_callback(mim_msgs::srv::JointCalibration::Request::SharedPtr req, mim_msgs::srv::JointCalibration::Response::SharedPtr res)

Handle the calibrate_joint callback.

Parameters:
  • req – ROS request.

  • res – ROS response.

Returns:

True if calibration was successful, false otherwise.

DGMSolo8TI()

DemoSingleMotor is the constructor.

~DGMSolo8TI()

~DemoSingleMotor is the destructor.

void initialize_hardware_communication_process()

initialize_hardware_communication_process is the function that initialize the hardware.

void get_sensors_to_map(dynamic_graph_manager::VectorDGMap &map)

get_sensors_to_map acquieres the sensors data and feed it to the input/output map

Param :

void set_motor_controls_from_map(const dynamic_graph_manager::VectorDGMap &map)

set_motor_controls_from_map reads the input map that contains the controls and send these controls to the hardware.

Parameters:

map

void calibrate_joint_position_callback(mim_msgs::srv::JointCalibration::Request::SharedPtr req, mim_msgs::srv::JointCalibration::Response::SharedPtr res)

Handle the calibrate_joint callback.

Parameters:
  • req – ROS request.

  • res – ROS response.

Returns:

True if calibration was successful, false otherwise.

Private Functions

void calibrate_joint_position(const solo::Vector8d &zero_to_index_angle)

Calibrate the robot joint position.

Parameters:

zero_to_index_angle – is the angle between the theoretical zero and the next positive angle.

void calibrate_joint_position(const solo::Vector8d &zero_to_index_angle)

Calibrate the robot joint position.

Parameters:

zero_to_index_angle – is the angle between the theoretical zero and the next positive angle.

Private Members

solo::Solo8TI solo_

Entries for the real hardware.

test_bench_ the real test bench hardware drivers.

solo::Vector8d ctrl_joint_torques_

ctrl_joint_torques_ the joint torques to be sent.

Used in this class to perform a local copy of the control. This is need in order to send this copy to the solo::Solo class

bool was_in_safety_mode_

Check if we entered once in the safety mode and stay there if so.

solo::Vector8d zero_to_index_angle_from_file_

These are the calibration value extracted from the paramters.

They represent the distance between the theorical zero joint angle and the next jont index.

class HWPSolo12 : public HardwareProcess
#include <hwp_solo12.hpp>

Public Functions

HWPSolo12()

Constructor.

~HWPSolo12()

~Destructor.

bool is_in_safety_mode()

This function make also sure that the joint velocity do not exceed a certain value.

void initialize_drivers()

initialize_drivers is the function that initialize the hardware.

void get_sensors_to_map(dynamic_graph_manager::VectorDGMap &map)

get_sensors_to_map acquieres the sensors data and feed it to the input/output map

Param :

void set_motor_controls_from_map(const dynamic_graph_manager::VectorDGMap &map)

set_motor_controls_from_map reads the input map that contains the controls and send these controls to the hardware.

Parameters:

map

void compute_safety_controls()

compute_safety_controls computes safety controls very fast in case the dynamic graph is taking to much computation time or has crashed.

void calibrate_joint_position(const solo::Vector12d &zero_to_index_angle)

Calibrate the robot joint position.

Parameters:

zero_to_index_angle – is the angle between the theoretical zero and the next positive angle.

void calibrate_joint_position_from_yaml()

Calibrates the robot joint positions using the data from the yaml.

HWPSolo12()

Constructor.

~HWPSolo12()

~Destructor.

bool is_in_safety_mode()

This function make also sure that the joint velocity do not exceed a certain value.

void initialize_drivers()

initialize_drivers is the function that initialize the hardware.

void get_sensors_to_map(dynamic_graph_manager::VectorDGMap &map)

get_sensors_to_map acquieres the sensors data and feed it to the input/output map

Param :

void set_motor_controls_from_map(const dynamic_graph_manager::VectorDGMap &map)

set_motor_controls_from_map reads the input map that contains the controls and send these controls to the hardware.

Parameters:

map

void compute_safety_controls()

compute_safety_controls computes safety controls very fast in case the dynamic graph is taking to much computation time or has crashed.

void calibrate_joint_position(const solo::Vector12d &zero_to_index_angle)

Calibrate the robot joint position.

Parameters:

zero_to_index_angle – is the angle between the theoretical zero and the next positive angle.

void calibrate_joint_position_from_yaml()

Calibrates the robot joint positions using the data from the yaml.

Private Members

solo::Solo12 solo_

Entries for the real hardware.

solo_ is the hardware drivers.

solo::Vector12d ctrl_joint_torques_

ctrl_joint_torques_ the joint torques to be sent.

Used in this class to perform a local copy of the control. This is need in order to send this copy to the solo::Solo class

bool was_in_safety_mode_

Check if we entered once in the safety mode and stay there if so.

solo::Vector12d zero_to_index_angle_from_file_

These are the calibration value extracted from the paramters.

They represent the distance between the theorical zero joint angle and the next jont index.

class Solo8TI
#include <solo8ti.hpp>

Public Functions

Solo8TI()

Solo8 is the constructor of the class.

void initialize()

initialize the robot by setting aligning the motors and calibrate the sensors to 0

void send_target_joint_torque(const Eigen::Ref<Vector8d> target_joint_torque)

send_target_torques sends the target currents to the motors

void acquire_sensors()

acquire_sensors acquire all available sensors, WARNING !!!! this method has to be called prior to any getter to have up to date data.

bool calibrate(const Vector8d &home_offset_rad)

Calibrate the joints by moving to the next joint index position.

Parameters:

home_offset_rad – This is the angle between the index and the zero pose.

Returns:

true

Returns:

false

inline const Eigen::Ref<Vector8d> get_motor_inertias()

Joint properties.

get_motor_inertias

Returns:

the motor inertias

inline const Eigen::Ref<Vector8d> get_motor_torque_constants()

get_motor_torque_constants

Returns:

the torque constants of each motor

inline const Eigen::Ref<Vector8d> get_joint_gear_ratios()

get_joint_gear_ratios

Returns:

the joint gear ratios

inline const Eigen::Ref<Vector8d> get_motor_max_current()

get_max_torque

Returns:

the max torque that has been hardcoded in the constructor of this class. TODO: parametrize this via yaml or something else.

inline const Eigen::Ref<Vector8d> get_joint_positions()

Sensor Data.

get_joint_positions

Returns:

the joint angle of each module WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vector8d> get_joint_velocities()

get_joint_velocities

Returns:

the joint velocities WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vector8d> get_joint_torques()

get_joint_torques

Returns:

the joint torques WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vector8d> get_joint_target_torques()

get_joint_torques

Returns:

the target joint torques WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vector8d> get_joint_encoder_index()

get_joint_encoder_index

Returns:

the position of the index of the encoders a the motor level WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector4d> get_contact_sensors_states()

get_contact_sensors_states

Returns:

the state of the contacts states WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector4d> get_slider_positions()

get_slider_positions

Returns:

the current sliders positions. WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const std::array<bool, 8> &get_motor_enabled()

Hardware Status.

get_motor_enabled

Returns:

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

inline const std::array<bool, 8> &get_motor_ready()

get_motor_ready

Returns:

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

inline const std::array<bool, 4> &get_motor_board_enabled()

get_motor_board_enabled

Returns:

This gives the status (enabled/disabled of the onboard control cards).

inline const std::array<int, 4> &get_motor_board_errors()

get_motor_board_errors

Returns:

This gives the status (enabled/disabled of the onboard control cards).

Solo8TI()

Solo8 is the constructor of the class.

void initialize()

initialize the robot by setting aligning the motors and calibrate the sensors to 0

void send_target_joint_torque(const Eigen::Ref<Vector8d> target_joint_torque)

send_target_torques sends the target currents to the motors

void acquire_sensors()

acquire_sensors acquire all available sensors, WARNING !!!! this method has to be called prior to any getter to have up to date data.

bool calibrate(const Vector8d &home_offset_rad)

Calibrate the joints by moving to the next joint index position.

Parameters:

home_offset_rad – This is the angle between the index and the zero pose.

Returns:

true

Returns:

false

inline const Eigen::Ref<Vector8d> get_motor_inertias()

Joint properties.

get_motor_inertias

Returns:

the motor inertias

inline const Eigen::Ref<Vector8d> get_motor_torque_constants()

get_motor_torque_constants

Returns:

the torque constants of each motor

inline const Eigen::Ref<Vector8d> get_joint_gear_ratios()

get_joint_gear_ratios

Returns:

the joint gear ratios

inline const Eigen::Ref<Vector8d> get_motor_max_current()

get_max_torque

Returns:

the max torque that has been hardcoded in the constructor of this class. TODO: parametrize this via yaml or something else.

inline const Eigen::Ref<Vector8d> get_joint_positions()

Sensor Data.

get_joint_positions

Returns:

the joint angle of each module WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vector8d> get_joint_velocities()

get_joint_velocities

Returns:

the joint velocities WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vector8d> get_joint_torques()

get_joint_torques

Returns:

the joint torques WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vector8d> get_joint_target_torques()

get_joint_torques

Returns:

the target joint torques WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vector8d> get_joint_encoder_index()

get_joint_encoder_index

Returns:

the position of the index of the encoders a the motor level WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector4d> get_contact_sensors_states()

get_contact_sensors_states

Returns:

the state of the contacts states WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector4d> get_slider_positions()

get_slider_positions

Returns:

the current sliders positions. WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const std::array<bool, 8> &get_motor_enabled()

Hardware Status.

get_motor_enabled

Returns:

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

inline const std::array<bool, 8> &get_motor_ready()

get_motor_ready

Returns:

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

inline const std::array<bool, 4> &get_motor_board_enabled()

get_motor_board_enabled

Returns:

This gives the status (enabled/disabled of the onboard control cards).

inline const std::array<int, 4> &get_motor_board_errors()

get_motor_board_errors

Returns:

This gives the status (enabled/disabled of the onboard control cards).

Private Members

Vector8d motor_inertias_

Motor data.

Joint properties motors inertia.

Vector8d motor_torque_constants_

DCM motor torque constants.

Vector8d joint_gear_ratios_

joint gear ratios (9).

Vector8d motor_max_current_

Max appliable current before the robot shutdown.

Vector8d joint_zero_positions_

Offset to the theoretical “0” pose.

Eigen::Array<double, 8, 1> max_joint_torques_

Max joint torques (Nm)

std::array<bool, 8> motor_enabled_

Hardware status.

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

std::array<bool, 8> motor_ready_

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

std::array<bool, 4> motor_board_enabled_

This gives the status (enabled/disabled of the onboard control cards).

std::array<int, 4> motor_board_errors_

This gives the status (enabled/disabled of the onboard control cards).

Vector8d joint_positions_

Joint data.

joint_positions_

Vector8d joint_velocities_

joint_velocities_

Vector8d joint_torques_

joint_torques_

Vector8d joint_target_torques_

joint_target_torques_

Vector8d joint_encoder_index_

joint_encoder_index_

Eigen::Vector4d slider_positions_

Additional data.

slider_positions_ is the position of the linear potentiometer. Can be used as a joystick input.

Eigen::Vector4d contact_sensors_states_

contact_sensors_ is contact sensors at each feet of teh quadruped.

std::array<int, 8> motor_to_card_index_

Drivers communication objects.

This map for every motor the card number.

std::array<int, 8> motor_to_card_port_index_

This map for every motor the card port.

std::array<CanBus_ptr, 4> can_buses_

can_buses_ are the 4 can buses on the robot.

std::array<CanBusMotorBoard_ptr, 4> can_motor_boards_

can_motor_boards_ are the 4 can motor board.

std::array<MotorInterface_ptr, 8> motors_

motors_ are the objects allowing us to send motor commands and receive data.

blmc_drivers::BlmcJointModules<8> joints_

This is the collection of joints that compose the robot.

std::array<bool, 8> reverse_polarities_

Address the rotation direction of the motor.

std::array<Slider_ptr, 4> sliders_

sliders_ these are analogue input from linear potentiometers.

std::array<ContactSensor_ptr, 4> contact_sensors_

contact_sensors_ is the contact sensors at each foot tips.

They also are analogue inputs.

Private Static Attributes

static const double max_joint_torque_security_margin_

Security margin on the saturation of the control.

template<int X>
class SoloX
#include <solox.hpp>

Interface for the Solo robots using the master board.

This class is templated with the number of joints and can be used for both Solo8 and Solo12 by setting the corresponding number.

Solo8

TODO

Solo12

Mapping between the DOF and driver boards + motor ports:

  • FL_HAA: motor board 0, motor port 0, motor index 0

  • FL_HFE: motor board 1, motor port 1, motor index 3

  • FL_KFE: motor board 1, motor port 0, motor index 2

  • FR_HAA: motor board 0, motor port 1, motor index 1

  • FR_HFE: motor board 2, motor port 1, motor index 5

  • FR_KFE: motor board 2, motor port 0, motor index 4

  • HL_HAA: motor board 3, motor port 0, motor index 6

  • HL_HFE: motor board 4, motor port 1, motor index 9

  • HL_KFE: motor board 4, motor port 0, motor index 8

  • HR_HAA: motor board 3, motor port 1, motor index 7

  • HR_HFE: motor board 5, motor port 1, motor index 11

  • HR_KFE: motor board 5, motor port 0, motor index 10

This class is templated with the number of joints and can be used for both Solo8 and Solo12 by setting the corresponding number.

Solo8

TODO

Solo12

Mapping between the DOF and driver boards + motor ports:

  • FL_HAA: motor board 0, motor port 0, motor index 0

  • FL_HFE: motor board 1, motor port 1, motor index 3

  • FL_KFE: motor board 1, motor port 0, motor index 2

  • FR_HAA: motor board 0, motor port 1, motor index 1

  • FR_HFE: motor board 2, motor port 1, motor index 5

  • FR_KFE: motor board 2, motor port 0, motor index 4

  • HL_HAA: motor board 3, motor port 0, motor index 6

  • HL_HFE: motor board 4, motor port 1, motor index 9

  • HL_KFE: motor board 4, motor port 0, motor index 8

  • HR_HAA: motor board 3, motor port 1, motor index 7

  • HR_HFE: motor board 5, motor port 1, motor index 11

  • HR_KFE: motor board 5, motor port 0, motor index 10

Template Parameters:
  • X – Number of joints of the robot. Should be either 8 or 12.

  • X – Number of joints of the robot. Should be either 8 or 12.

Public Functions

SoloX()

Solo is the constructor of the class.

void initialize(const std::string &network_id, const std::string &slider_box_port = "auto")

Initialize the robot by setting aligning the motors and calibrate the sensors to 0.

Parameters:
  • network_id – Name of the network interface for connection to the robot.

  • slider_box_port – Name of the serial port to which the slider box is connected. Set to “” or “none” if no slider box is used. Set to “auto” to auto-detect the port.

void set_max_current(const double &max_current)

Sets the maximum joint torques.

void wait_until_ready()

Wait that the robot enters into the ready states.

bool is_ready()

Check if the robot is ready.

void send_target_joint_torque(const Eigen::Ref<Vectord<X>> target_joint_torque)

send_target_torques sends the target currents to the motors.

void send_target_joint_position(const Eigen::Ref<Vectord<X>> target_joint_position)

Sets the desired joint position of the P controller running on the card.

void send_target_joint_velocity(const Eigen::Ref<Vectord<X>> target_joint_velocity)

Sets the desired joint velocity of the D controller running on the card.

void send_target_joint_position_gains(const Eigen::Ref<Vectord<X>> target_joint_position_gains)

Sets the desired joint position gain P for the P controller running on the card.

void send_target_joint_velocity_gains(const Eigen::Ref<Vectord<X>> target_joint_velocity_gains)

Sets the desired joint velocity gain D for the D controller running on the card.

void acquire_sensors()

acquire_sensors acquire all available sensors, WARNING !!!! this method has to be called prior to any getter to have up to date data.

bool request_calibration(const Vectord<X> &home_offset_rad)

Asynchronously request for the calibration.

Parameters:

home_offset_rad – This is the angle between the index and the zero pose.

Returns:

true in case of success.

Returns:

false in case of failure.

inline const Eigen::Ref<Vectord<X>> get_motor_inertias()

Joint properties.

get_motor_inertias in [kg m^2]

Returns:

Motor inertias.

inline const Eigen::Ref<Vectord<X>> get_motor_torque_constants()

get_motor_torque_constants in []

Returns:

Torque constants of each motor.

inline const Eigen::Ref<Vectord<X>> get_joint_gear_ratios()

get_joint_gear_ratios

Returns:

Joint gear ratios

inline const Eigen::Ref<Vectord<X>> get_motor_max_current()

get_max_torque

Todo:

Parametrize the maximum current via yaml or something else.

Returns:

the max torque that has been hardcoded in the constructor of this class.

inline const Eigen::Ref<Vectord<X>> get_joint_positions()

Sensor Data.

get_joint_positions

Returns:

the joint angle of each module WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vectord<X>> get_joint_velocities()

get_joint_velocities

Returns:

the joint velocities WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vectord<X>> get_joint_torques()

get_joint_torques

Returns:

the joint torques WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vectord<X>> get_joint_target_torques()

get_joint_torques

Returns:

the target joint torques WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vectord<X>> get_joint_encoder_index()

get_joint_encoder_index

Returns:

the position of the index of the encoders a the motor level WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector4d> get_contact_sensors_states()

get_contact_sensors_states

Returns:

the state of the contacts states WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector4d> get_slider_positions()

get_slider_positions

Returns:

the current sliders positions. WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector3d> get_imu_accelerometer()

base accelerometer from imu.

Returns:

WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector3d> get_imu_gyroscope()

base gyroscope from imu.

Returns:

WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector4d> get_imu_attitude()

base attitude quaternion (ordered {x, y, z, w}) from imu.

Returns:

WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector3d> get_imu_linear_acceleration()

base linear acceleration from imu.

Returns:

WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const std::array<bool, X> &get_motor_enabled()

get_motor_enabled

Returns:

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

inline const std::array<bool, X> &get_motor_ready()

get_motor_ready

Returns:

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

inline const std::array<bool, X / 2> &get_motor_board_enabled()

get_motor_board_enabled

Returns:

This gives the status (enabled/disabled of the onboard control cards).

inline const std::array<int, X / 2> &get_motor_board_errors()

get_motor_board_errors

Returns:

This gives the status (enabled/disabled of the onboard control cards).

inline bool has_error() const

has_error

Returns:

Returns true if the robot hardware has an error, false otherwise.

inline bool is_calibrating()

is_calibrating()

Returns:

Returns true if the calibration procedure is running right now.

inline int get_num_sent_command_packets() const

Get total number of command packets sent to the robot.

inline int get_num_lost_command_packets() const

Get number of lost command packets.

inline int get_num_sent_sensor_packets() const

Get total number of sensor packets sent by the robot.

inline int get_num_lost_sensor_packets() const

Get number of lost sensor packets.

SoloX()

Solo is the constructor of the class.

void initialize(const std::string &network_id, const std::string &slider_box_port = "auto")

Initialize the robot by setting aligning the motors and calibrate the sensors to 0.

Parameters:
  • network_id – Name of the network interface for connection to the robot.

  • slider_box_port – Name of the serial port to which the slider box is connected. Set to “” or “none” if no slider box is used. Set to “auto” to auto-detect the port.

void set_max_current(const double &max_current)

Sets the maximum joint torques.

void wait_until_ready()

Wait that the robot enters into the ready states.

bool is_ready()

Check if the robot is ready.

void send_target_joint_torque(const Eigen::Ref<Vectord<X>> target_joint_torque)

send_target_torques sends the target currents to the motors.

void send_target_joint_position(const Eigen::Ref<Vectord<X>> target_joint_position)

Sets the desired joint position of the P controller running on the card.

void send_target_joint_velocity(const Eigen::Ref<Vectord<X>> target_joint_velocity)

Sets the desired joint velocity of the D controller running on the card.

void send_target_joint_position_gains(const Eigen::Ref<Vectord<X>> target_joint_position_gains)

Sets the desired joint position gain P for the P controller running on the card.

void send_target_joint_velocity_gains(const Eigen::Ref<Vectord<X>> target_joint_velocity_gains)

Sets the desired joint velocity gain D for the D controller running on the card.

void acquire_sensors()

acquire_sensors acquire all available sensors, WARNING !!!! this method has to be called prior to any getter to have up to date data.

bool request_calibration(const Vectord<X> &home_offset_rad)

Asynchronously request for the calibration.

Parameters:

home_offset_rad – This is the angle between the index and the zero pose.

Returns:

true in case of success.

Returns:

false in case of failure.

inline const Eigen::Ref<Vectord<X>> get_motor_inertias()

Joint properties.

get_motor_inertias in [kg m^2]

Returns:

Motor inertias.

inline const Eigen::Ref<Vectord<X>> get_motor_torque_constants()

get_motor_torque_constants in []

Returns:

Torque constants of each motor.

inline const Eigen::Ref<Vectord<X>> get_joint_gear_ratios()

get_joint_gear_ratios

Returns:

Joint gear ratios

inline const Eigen::Ref<Vectord<X>> get_motor_max_current()

get_max_torque

Todo:

Parametrize the maximum current via yaml or something else.

Returns:

the max torque that has been hardcoded in the constructor of this class.

inline const Eigen::Ref<Vectord<X>> get_joint_positions()

Sensor Data.

get_joint_positions

Returns:

the joint angle of each module WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vectord<X>> get_joint_velocities()

get_joint_velocities

Returns:

the joint velocities WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vectord<X>> get_joint_torques()

get_joint_torques

Returns:

the joint torques WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vectord<X>> get_joint_target_torques()

get_joint_torques

Returns:

the target joint torques WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Vectord<X>> get_joint_encoder_index()

get_joint_encoder_index

Returns:

the position of the index of the encoders a the motor level WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector4d> get_contact_sensors_states()

get_contact_sensors_states

Returns:

the state of the contacts states WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector4d> get_slider_positions()

get_slider_positions

Returns:

the current sliders positions. WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector3d> get_imu_accelerometer()

base accelerometer from imu.

Returns:

WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector3d> get_imu_gyroscope()

base gyroscope from imu.

Returns:

WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector4d> get_imu_attitude()

base attitude quaternion (ordered {x, y, z, w}) from imu.

Returns:

WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const Eigen::Ref<Eigen::Vector3d> get_imu_linear_acceleration()

base linear acceleration from imu.

Returns:

WARNING !!!! The method <acquire_sensors>”()” has to be called prior to any getter to have up to date data.

inline const std::array<bool, X> &get_motor_enabled()

get_motor_enabled

Returns:

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

inline const std::array<bool, X> &get_motor_ready()

get_motor_ready

Returns:

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

inline const std::array<bool, X / 2> &get_motor_board_enabled()

get_motor_board_enabled

Returns:

This gives the status (enabled/disabled of the onboard control cards).

inline const std::array<int, X / 2> &get_motor_board_errors()

get_motor_board_errors

Returns:

This gives the status (enabled/disabled of the onboard control cards).

inline bool has_error() const

has_error

Returns:

Returns true if the robot hardware has an error, false otherwise.

inline bool is_calibrating()

is_calibrating()

Returns:

Returns true if the calibration procedure is running right now.

inline int get_num_sent_command_packets() const

Get total number of command packets sent to the robot.

inline int get_num_lost_command_packets() const

Get number of lost command packets.

inline int get_num_sent_sensor_packets() const

Get total number of sensor packets sent by the robot.

inline int get_num_lost_sensor_packets() const

Get number of lost sensor packets.

Public Static Attributes

static const std::string SLIDER_BOX_DISABLED = "none"

Set slider box port to this value to disable it.

static const std::string LOGGER_NAME = "solo/Solo"

Name of the spdlog logger used by the class.

Private Functions

void initialize_joint_modules()
std::vector<odri_control_interface::CalibrationMethod> get_calibration_directions() const
void initialize_joint_modules()
std::vector<odri_control_interface::CalibrationMethod> get_calibration_directions() const
void initialize_joint_modules()
std::vector<odri_control_interface::CalibrationMethod> get_calibration_directions() const
void initialize_joint_modules()
std::vector<odri_control_interface::CalibrationMethod> get_calibration_directions() const
void initialize_joint_modules()
std::vector<odri_control_interface::CalibrationMethod> get_calibration_directions() const
void initialize_joint_modules()
std::vector<odri_control_interface::CalibrationMethod> get_calibration_directions() const

Private Members

std::shared_ptr<spdlog::logger> log_

Logger.

Vectord<X> motor_inertias_

Joint properties.

Motors inertia.

Vectord<X> motor_torque_constants_

DCM motor torque constants.

Vectord<X> joint_gear_ratios_

joint gear ratios (9).

Vectord<X> motor_max_current_

Max appliable current before the robot shutdown.

Vectord<X> joint_zero_positions_

Offset to the theoretical “0” pose.

Eigen::Array<double, X, 1> max_joint_torques_

Max joint torques (Nm)

std::array<bool, X> motor_enabled_

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

Hardware status

std::array<bool, X> motor_ready_

This gives the status (enabled/disabled) of each motors using the joint ordering convention.

std::array<bool, X / 2> motor_board_enabled_

This gives the status (enabled/disabled of the onboard control cards).

std::array<int, X / 2> motor_board_errors_

This gives the status (enabled/disabled of the onboard control cards).

Vectord<X> joint_positions_

Joint data.

joint_positions_

Vectord<X> joint_velocities_

joint_velocities_

Vectord<X> joint_torques_

joint_torques_

Vectord<X> joint_target_torques_

joint_target_torques_

Vectord<X> joint_encoder_index_

joint_encoder_index_

Eigen::Vector4d slider_positions_

slider_positions_ is the position of the linear potentiometer.

Additional data Can be used as a joystick input.

Eigen::Vector4d contact_sensors_states_

contact_sensors_ is contact sensors at each feet of teh quadruped.

std::string network_id_

This is the name of the network: Left column in ifconfig output.

std::array<int, X> map_joint_id_to_motor_board_id_

Map the joint id to the motor board id,.

See also

Solo12 description.

std::array<int, X> map_joint_id_to_motor_port_id_

Map the joint id to the motor port id,.

See also

Solo12 description.

Eigen::Vector3d imu_accelerometer_

base accelerometer.

Eigen::Vector3d imu_gyroscope_

base accelerometer.

Eigen::Vector4d imu_attitude_

base accelerometer.

Eigen::Vector3d imu_linear_acceleration_

base accelerometer.

SoloState state_

State of the solo robot.

std::shared_ptr<odri_control_interface::JointCalibrator> calib_ctrl_

Controller to run the calibration procedure.

bool calibrate_request_

Indicator if calibration should start.

std::shared_ptr<MasterBoardInterface> main_board_ptr_

Drivers communication objects.

Main board drivers.

PC <- Ethernet/Wifi -> main board <- SPI -> Motor Board

std::shared_ptr<slider_box::SerialReader> serial_reader_

Reader for serial port to read arduino slider values.

std::shared_ptr<odri_control_interface::Robot> robot_

The odri robot abstraction.

std::shared_ptr<odri_control_interface::JointModules> joints_

Collection of Joints.

std::shared_ptr<odri_control_interface::IMU> imu_

Robot Imu drivers.

bool active_estop_

If the physical estop is pressed or not.

bool _is_calibrating

If the joint calibration is active or not.

Private Static Attributes

static constexpr int SLIDER_BOX_NUM_VALUES = 5
static const double max_joint_torque_security_margin_ = 0.99

Security margin on the saturation of the control.

template<int COUNT>
class SpiJointModules

This class defines an interface to a collection of BLMC joints.

It creates a BLMCJointModule for every blmc_driver::MotorInterface provided.

Public Types

typedef Eigen::Matrix<double, COUNT, 1> Vector

Defines a static Eigen vector type in order to define the interface.

typedef Eigen::Matrix<double, COUNT, 1> Vector

Defines a static Eigen vector type in order to define the interface.

Public Functions

inline SpiJointModules(std::shared_ptr<MasterBoardInterface> robot_if, std::array<int, COUNT> &motor_to_card_index, std::array<int, COUNT> &motor_to_card_port_index, const Vector &motor_constants, const Vector &gear_ratios, const Vector &zero_angles, const Vector &max_currents, std::array<bool, COUNT> reverse_polarities)

Construct a new SpiJointModules object.

inline void enable()

Enable all motors and motor drivers used by the joint module.

inline bool is_ready()

Checks if all motors report ready.

Returns:

True if all motors are ready, false otherwise.

inline std::array<bool, COUNT> get_motor_enabled()
inline std::array<bool, COUNT> get_motor_ready()
inline void send_torques()

Send the registered torques to all modules.

inline void acquire_sensors()

Updates the measurements based on the lastest package from the master board.

inline void set_torques(const Vector &desired_torques)

Register the joint torques to be sent for all modules.

Parameters:

desired_torques – (Nm)

inline Vector get_max_torques()

Get the maximum admissible joint torque that can be applied.

Returns:

Vector (N/m)

inline Vector get_sent_torques() const

Get the previously sent torques.

Returns:

Vector (Nm)

inline Vector get_measured_torques() const

Get the measured joint torques.

Returns:

Vector (Nm)

inline Vector get_measured_angles() const

Get the measured joint angles.

Returns:

Vector (rad)

inline Vector get_measured_velocities() const

Get the measured joint velocities.

Returns:

Vector (rad/s)

inline void set_zero_angles(const Vector &zero_angles)

Set the zero_angles.

These are the joint angles between the starting pose and the zero theoretical pose of the urdf.

Parameters:

zero_angles – (rad)

inline Vector get_zero_angles() const

Get the zero_angles.

These are the joint angles between the starting pose and the zero theoretical pose of the urdf.

Returns:

Vector (rad)

inline Vector get_measured_index_angles() const

Get the index_angles.

There is one index per motor rotation so there are gear_ratio indexes per joint rotation.

Returns:

Vector (rad)

inline SpiJointModules(std::shared_ptr<MasterBoardInterface> robot_if, std::array<int, COUNT> &motor_to_card_index, std::array<int, COUNT> &motor_to_card_port_index, const Vector &motor_constants, const Vector &gear_ratios, const Vector &zero_angles, const Vector &max_currents, std::array<bool, COUNT> reverse_polarities)

Construct a new SpiJointModules object.

inline void enable()

Enable all motors and motor drivers used by the joint module.

inline bool is_ready()

Checks if all motors report ready.

Returns:

True if all motors are ready, false otherwise.

inline std::array<bool, COUNT> get_motor_enabled()
inline std::array<bool, COUNT> get_motor_ready()
inline void send_torques()

Send the registered torques to all modules.

inline void acquire_sensors()

Updates the measurements based on the lastest package from the master board.

inline void set_torques(const Vector &desired_torques)

Register the joint torques to be sent for all modules.

Parameters:

desired_torques – (Nm)

inline Vector get_max_torques()

Get the maximum admissible joint torque that can be applied.

Returns:

Vector (N/m)

inline Vector get_sent_torques() const

Get the previously sent torques.

Returns:

Vector (Nm)

inline Vector get_measured_torques() const

Get the measured joint torques.

Returns:

Vector (Nm)

inline Vector get_measured_angles() const

Get the measured joint angles.

Returns:

Vector (rad)

inline Vector get_measured_velocities() const

Get the measured joint velocities.

Returns:

Vector (rad/s)

inline void set_zero_angles(const Vector &zero_angles)

Set the zero_angles.

These are the joint angles between the starting pose and the zero theoretical pose of the urdf.

Parameters:

zero_angles – (rad)

inline Vector get_zero_angles() const

Get the zero_angles.

These are the joint angles between the starting pose and the zero theoretical pose of the urdf.

Returns:

Vector (rad)

inline Vector get_measured_index_angles() const

Get the index_angles.

There is one index per motor rotation so there are gear_ratio indexes per joint rotation.

Returns:

Vector (rad)

Private Members

Vector motor_constants_
Vector gear_ratios_
Vector max_currents_
Vector zero_angles_
Vector polarities_
std::array<int, COUNT> motor_to_card_index_
Vector index_angles_
std::array<bool, COUNT> saw_index_
std::array<Motor*, COUNT> motors_

Holds the motors in the joint order.

std::shared_ptr<MasterBoardInterface> robot_if_
template<class ROBOT_TYPE>
struct ThreadCalibrationData

This small structure is used for reading the calibration parameters for the calibrations demos.

Template Parameters:

ROBOT_TYPE

Public Functions

inline ThreadCalibrationData(std::shared_ptr<ROBOT_TYPE> robot_in)

Public Members

std::shared_ptr<ROBOT_TYPE> robot
Eigen::VectorXd joint_index_to_zero
namespace solo

Typedefs

template<int X>
using Vectord = Eigen::Matrix<double, X, 1>

Fixed-size double vector.

Template Parameters:

X – Size of the Vector

typedef Eigen::Matrix<double, 1, 1> Vector1d

Vector2d shortcut for the eigen vector of size 1.

typedef Eigen::Matrix<double, 2, 1> Vector2d

Vector2d shortcut for the eigen vector of size 2.

typedef Eigen::Matrix<double, 6, 1> Vector6d

Vector2d shortcut for the eigen vector of size 6.

typedef Eigen::Matrix<double, 8, 1> Vector8d

Vector8d shortcut for the eigen vector of size 8.

typedef Eigen::Matrix<double, 12, 1> Vector12d

Vector8d shortcut for the eigen vector of size 12.

typedef std::shared_ptr<blmc_drivers::CanBus> CanBus_ptr

CanBus_ptr shortcut for the shared pointer CanBus type.

typedef std::shared_ptr<blmc_drivers::CanBusMotorBoard> CanBusMotorBoard_ptr

CanBusMotorBoard_Ptr shortcut for the shared pointer CanBus type.

typedef std::shared_ptr<blmc_drivers::MotorInterface> MotorInterface_ptr

MotorInterface_ptr shortcut for the shared pointer MotorInterface type.

typedef std::shared_ptr<blmc_drivers::Motor> Motor_ptr

Motor_ptr shortcut for the shared pointer Motor type.

typedef std::shared_ptr<blmc_drivers::SafeMotor> SafeMotor_ptr

SafeMotor_ptr shortcut for the shared pointer SafeMotor type.

typedef std::shared_ptr<blmc_drivers::AnalogSensor> Slider_ptr

Slider_ptr shortcut for the linear potentiometer analog sensor.

typedef std::shared_ptr<blmc_drivers::AnalogSensor> ContactSensor_ptr

ContactSensor_ptr shortcut for the contact sensor.

It is also an analog sensor

typedef std::shared_ptr<blmc_drivers::AnalogSensor> HeightSensor_ptr

HeightSensor_ptr shortcut for the height sensor.

It is also an analog sensor

typedef blmc_drivers::MotorInterface::MeasurementIndex mi

mi, this typedef is used to get the measurements from the blmc api

typedef SoloX<12> Solo12
typedef SoloX<8> Solo8

Enums

enum class SoloState

Values:

enumerator initial
enumerator ready
enumerator calibrate
enumerator initial
enumerator ready
enumerator calibrate
enum class SoloState

Values:

enumerator initial
enumerator ready
enumerator calibrate
enumerator initial
enumerator ready
enumerator calibrate

Functions

std::atomic_bool CTRL_C_DETECTED (false)

This boolean is here to kill cleanly the application upon ctrl+c.

void my_handler(int)

This function is the callback upon a ctrl+c call from the terminal.

Parameters:

s – is the id of the signal

void enable_ctrl_c()

Enable to kill the demos cleanly with a ctrl+c.

void print_vector(std::string v_name, const Eigen::Ref<const Eigen::VectorXd> v)

Usefull tool for the demos and programs in order to print data in real time.

Parameters:
  • v_name – is a string defining the data to print.

  • v – the vector to print.

file tmp-cxx-standard.cpp
#include <iostream>

Functions

int main()
file CMakeCCompilerId.c

Defines

COMPILER_ID
STRINGIFY_HELPER(X)
STRINGIFY(X)
PLATFORM_ID
ARCHITECTURE_ID
DEC(n)
HEX(n)
C_DIALECT

Functions

int main(int argc, char *argv[])

Variables

char const  * info_compiler   = "INFO" ":" "compiler[" COMPILER_ID "]"
char const  * info_platform   = "INFO" ":" "platform[" PLATFORM_ID "]"
char const  * info_arch   = "INFO" ":" "arch[" ARCHITECTURE_ID "]"
const char * info_language_dialect_default  ="INFO" ":" "dialect_default[" C_DIALECT "]"
file CMakeCXXCompilerId.cpp

Defines

COMPILER_ID
STRINGIFY_HELPER(X)
STRINGIFY(X)
PLATFORM_ID
ARCHITECTURE_ID
DEC(n)
HEX(n)
CXX_STD

Functions

int main(int argc, char *argv[])

Variables

char const  * info_compiler   = "INFO" ":" "compiler[" COMPILER_ID "]"
char const  * info_platform   = "INFO" ":" "platform[" PLATFORM_ID "]"
char const  * info_arch   = "INFO" ":" "arch[" ARCHITECTURE_ID "]"
const char * info_language_dialect_default  = "INFO" ":" "dialect_default[""98""]"
file common_demo_header.hpp
#include “solo/common_programs_header.hpp”

Contains some default tools for creating demos.

Author

Maximilien Naveau (maximilien.naveau@gmail.com)

Version

0.1

Date

2019-11-07

Copyright

Copyright (c) 2019

file demo_solo12.cpp
#include <numeric>
#include “solo/common_programs_header.hpp”
#include “solo/solo12.hpp”
#include “common_demo_header.hpp

Implements basic PD controller reading slider values.

This file uses the Solo12 class in a small demo.

Author

Julian Viereck

Date

21 November 2019

Typedefs

typedef ThreadCalibrationData<Solo12> ThreadCalibrationData_t

Functions

void map_sliders(Eigen::Ref<Eigen::Vector4d> sliders, Eigen::Ref<Vector12d> sliders_out)
static THREAD_FUNCTION_RETURN_TYPE control_loop(void *thread_data_void_ptr)
int main(int argc, char **argv)
file demo_solo8.cpp
#include <numeric>
#include “solo/common_programs_header.hpp”
#include “solo/solo8.hpp”
#include “common_demo_header.hpp

The use of the wrapper implementing a small pid controller.

This file uses the Solo8 class in a small demo.

Author

Maximilien Naveau

Date

2018

Typedefs

typedef ThreadCalibrationData<Solo8> ThreadCalibrationData_t

Functions

static THREAD_FUNCTION_RETURN_TYPE control_loop(void *thread_data_void_ptr)
int main(int argc, char **argv)
file demo_solo8ti.cpp
#include <numeric>
#include “solo/common_programs_header.hpp”
#include “solo/solo8ti.hpp”

The use of the wrapper implementing a small pid controller.

This file uses the Solo8TI class in a small demo.

Author

Maximilien Naveau

Date

2018

Functions

static THREAD_FUNCTION_RETURN_TYPE control_loop(void *robot_void_ptr)
int main(int, char**)
file common_header.hpp
#include “yaml_utils/yaml_cpp_fwd.hpp”
#include <Eigen/Eigen>
#include <signal.h>
#include <atomic>
#include “real_time_tools/iostream.hpp”
#include “real_time_tools/spinner.hpp”
#include “real_time_tools/thread.hpp”
#include “real_time_tools/timer.hpp”

The hardware wrapper of the quadruped.

This file declares the TestBench8Motors class which defines the test bench with 8 motors.

Author

Maximilien Naveau

Date

2018

file common_header.hpp
#include “yaml_utils/yaml_cpp_fwd.hpp”
#include <Eigen/Eigen>
#include <signal.h>
#include <atomic>
#include “real_time_tools/iostream.hpp”
#include “real_time_tools/spinner.hpp”
#include “real_time_tools/thread.hpp”
#include “real_time_tools/timer.hpp”

The hardware wrapper of the quadruped.

This file declares the TestBench8Motors class which defines the test bench with 8 motors.

Author

Maximilien Naveau

Date

2018

file common_header_ti.hpp
#include “solo/common_header.hpp”
#include <blmc_drivers/devices/analog_sensor.hpp>
file common_header_ti.hpp
#include “solo/common_header.hpp”
#include <blmc_drivers/devices/analog_sensor.hpp>
file common_programs_header.hpp
#include “solo/common_header.hpp”
file common_programs_header.hpp
#include “solo/common_header.hpp”
file dgm_solo12.hpp
#include “solo/solo12.hpp”
#include “mim_msgs/srv/joint_calibration.hpp”
#include “dynamic_graph_manager/dynamic_graph_manager.hpp”
#include “yaml_utils/yaml_cpp_fwd.hpp”
file dgm_solo12.hpp
#include “solo/solo12.hpp”
#include “mim_msgs/srv/joint_calibration.hpp”
#include “dynamic_graph_manager/dynamic_graph_manager.hpp”
#include “yaml_utils/yaml_cpp_fwd.hpp”
file dgm_solo8.hpp
#include “solo/solo8.hpp”
#include “mim_msgs/srv/joint_calibration.hpp”
#include “dynamic_graph_manager/dynamic_graph_manager.hpp”
#include “yaml_utils/yaml_cpp_fwd.hpp”
file dgm_solo8.hpp
#include “solo/solo8.hpp”
#include “mim_msgs/srv/joint_calibration.hpp”
#include “dynamic_graph_manager/dynamic_graph_manager.hpp”
#include “yaml_utils/yaml_cpp_fwd.hpp”
file dgm_solo8ti.hpp
#include “solo/solo8ti.hpp”
#include “mim_msgs/srv/joint_calibration.hpp”
#include “dynamic_graph_manager/dynamic_graph_manager.hpp”
#include “yaml_utils/yaml_cpp_fwd.hpp”
file dgm_solo8ti.hpp
#include “solo/solo8ti.hpp”
#include “mim_msgs/srv/joint_calibration.hpp”
#include “dynamic_graph_manager/dynamic_graph_manager.hpp”
#include “yaml_utils/yaml_cpp_fwd.hpp”
file hwp_solo12.hpp
#include “solo/solo12.hpp”
#include “dynamic_graph_manager/hardware_process.hpp”
#include “yaml_utils/yaml_cpp_fwd.hpp”
file hwp_solo12.hpp
#include “solo/solo12.hpp”
#include “dynamic_graph_manager/hardware_process.hpp”
#include “yaml_utils/yaml_cpp_fwd.hpp”
file solo12.hpp
#include “solox.hpp

SoloX specialization for Solo12.

Author

Julian Viereck and others

Copyright

Copyright (c) 2019 New York University & Max Planck Gesellschaft

file solo12.hpp
#include “solox.hpp

SoloX specialization for Solo12.

Author

Julian Viereck and others

Copyright

Copyright (c) 2019 New York University & Max Planck Gesellschaft

file solo8.hpp
#include “solox.hpp

SoloX specialization for Solo8.

Author

Julian Viereck and others

Copyright

Copyright (c) 2020, New York University & Max Planck Gesellschaft.

file solo8.hpp
#include “solox.hpp

SoloX specialization for Solo8.

Author

Julian Viereck and others

Copyright

Copyright (c) 2020, New York University & Max Planck Gesellschaft.

file solo8ti.hpp
#include <blmc_drivers/blmc_joint_module.hpp>
#include <solo/common_header_ti.hpp>
#include <blmc_drivers/devices/analog_sensor.hpp>
#include <blmc_drivers/devices/motor.hpp>
file solo8ti.hpp
#include <blmc_drivers/blmc_joint_module.hpp>
#include <solo/common_header_ti.hpp>
#include <blmc_drivers/devices/analog_sensor.hpp>
#include <blmc_drivers/devices/motor.hpp>
file solox.hpp
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/spdlog.h>
#include <odri_control_interface/calibration.hpp>
#include <odri_control_interface/robot.hpp>
#include <slider_box/serial_reader.hpp>
#include “common_header.hpp

Interface for Solo robots using master board.

Copyright

Copyright (c) 2019 New York University & Max Planck Gesellschaft

file solox.hpp
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/spdlog.h>
#include <odri_control_interface/calibration.hpp>
#include <odri_control_interface/robot.hpp>
#include <slider_box/serial_reader.hpp>
#include “common_header.hpp

Interface for Solo robots using master board.

Copyright

Copyright (c) 2019 New York University & Max Planck Gesellschaft

file spi_joint_module.hpp
#include <math.h>
#include <Eigen/Eigen>
#include <array>
#include <iostream>
#include <stdexcept>
#include “blmc_drivers/devices/motor.hpp”
#include “solo/common_header.hpp”
#include “master_board_sdk/defines.h”
#include “master_board_sdk/master_board_interface.h”
file spi_joint_module.hpp
#include <math.h>
#include <Eigen/Eigen>
#include <array>
#include <iostream>
#include <stdexcept>
#include “blmc_drivers/devices/motor.hpp”
#include “solo/common_header.hpp”
#include “master_board_sdk/defines.h”
#include “master_board_sdk/master_board_interface.h”
file py_solo12.cpp
#include <pybind11/eigen.h>
#include <pybind11/pybind11.h>
#include <pybind11/stl_bind.h>
#include <solo/solo12.hpp>

Functions

PYBIND11_MODULE(py_solo12, m)
file py_solo8.cpp
#include <pybind11/eigen.h>
#include <pybind11/pybind11.h>
#include <pybind11/stl_bind.h>
#include <solo/solo8.hpp>

Functions

PYBIND11_MODULE(py_solo8, m)
file solo12_hwp.cpp
#include <pybind11/eigen.h>
#include <pybind11/pybind11.h>
#include <pybind11/stl_bind.h>
#include <solo/dynamic_graph_manager/hwp_solo12.hpp>

Python bindings for the solo12 hardware process.

License:

BSD 3-clause

Copyright

Copyright (c) 2021, New York University and Max Planck Gesellschaft

Functions

PYBIND11_MODULE(solo12_hwp_cpp, m)
page todo

Member solo::SoloX< X >::get_motor_max_current  ()

Parametrize the maximum current via yaml or something else.

Parametrize the maximum current via yaml or something else.

page license

File solo12_hwp.cpp

BSD 3-clause

dir build/solo/CMakeFiles/3.16.3
dir build
dir build/solo/cmake
dir build/solo/CMakeFiles
dir build/solo/CMakeFiles/3.16.3/CompilerIdC
dir build/solo/CMakeFiles/3.16.3/CompilerIdCXX
dir demos
dir include/solo/dynamic_graph_manager
dir install/solo/include/solo/dynamic_graph_manager
dir include
dir install/solo/include
dir install
dir build/solo
dir install/solo/include/solo
dir include/solo
dir install/solo
dir srcpy