Program Listing for File driver.hpp

Return to documentation for file (/tmp/ws/src/myactuator_rmd/include/myactuator_rmd/driver.hpp)

#ifndef MYACTUATOR_RMD__DRIVER
#define MYACTUATOR_RMD__DRIVER
#pragma once

#include <chrono>
#include <cstdint>
#include <string>

#include "myactuator_rmd/actuator_state/acceleration_type.hpp"
#include "myactuator_rmd/actuator_state/baud_rate.hpp"
#include "myactuator_rmd/actuator_state/control_mode.hpp"
#include "myactuator_rmd/actuator_state/feedback.hpp"
#include "myactuator_rmd/actuator_state/gains.hpp"
#include "myactuator_rmd/actuator_state/motor_status_1.hpp"
#include "myactuator_rmd/actuator_state/motor_status_2.hpp"
#include "myactuator_rmd/actuator_state/motor_status_3.hpp"
#include "myactuator_rmd/protocol/address_offset.hpp"
#include "myactuator_rmd/protocol/node.hpp"


namespace myactuator_rmd {

  class Driver: protected Node<AddressOffset::request,AddressOffset::response> {
    public:
      Driver(std::string const& ifname, std::uint32_t const actuator_id);
      Driver() = delete;
      Driver(Driver const&) = delete;
      Driver& operator = (Driver const&) = default;
      Driver(Driver&&) = default;
      Driver& operator = (Driver&&) = default;

      [[nodiscard]]
      std::int32_t getAcceleration();

      [[nodiscard]]
      std::uint16_t getCanId();

      [[nodiscard]]
      Gains getControllerGains();

      [[nodiscard]]
      ControlMode getControlMode();

      [[nodiscard]]
      std::string getMotorModel();

      [[nodiscard]]
      float getMotorPower();

      [[nodiscard]]
      MotorStatus1 getMotorStatus1();

      [[nodiscard]]
      MotorStatus2 getMotorStatus2();

      [[nodiscard]]
      MotorStatus3 getMotorStatus3();

      [[nodiscard]]
      float getMultiTurnAngle();

      [[nodiscard]]
      std::int32_t getMultiTurnEncoderPosition();

      [[nodiscard]]
      std::int32_t getMultiTurnEncoderOriginalPosition();

      [[nodiscard]]
      std::int32_t getMultiTurnEncoderZeroOffset();

      [[nodiscard]]
      std::chrono::milliseconds getRuntime();

      [[nodiscard]]
      float getSingleTurnAngle();

      [[nodiscard]]
      std::int16_t getSingleTurnEncoderPosition();

      [[nodiscard]]
      std::uint32_t getVersionDate();

      void lockBrake();

      void releaseBrake();

      void reset();

      Feedback sendCurrentSetpoint(float const current);

      Feedback sendPositionAbsoluteSetpoint(float const position, float const max_speed = 500.0);

      Feedback sendTorqueSetpoint(float const torque, float const torque_constant = 2.09);

      Feedback sendVelocitySetpoint(float const speed);

      void setAcceleration(std::uint32_t const acceleration, AccelerationType const mode);

      void setBaudRate(BaudRate const baud_rate);

      void setCanId(std::uint16_t const can_id);

      std::int32_t setCurrentPositionAsEncoderZero();

      void setEncoderZero(std::int32_t const encoder_offset);

      Gains setControllerGains(Gains const& gains, bool const is_persistent = false);

      void setTimeout(std::chrono::milliseconds const& timeout);

      void shutdownMotor();

      void stopMotor();
  };

}

#endif // MYACTUATOR_RMD__DRIVER