Program Listing for File dynamixel_base.hpp

Return to documentation for file (/tmp/ws/src/rt_manipulators_cpp/rt_manipulators_lib/include/dynamixel_base.hpp)

// Copyright 2022 RT Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef RT_MANIPULATORS_LIB_INCLUDE_DYNAMIXEL_BASE_HPP_
#define RT_MANIPULATORS_LIB_INCLUDE_DYNAMIXEL_BASE_HPP_

#include <memory>
#include <string>
#include <vector>

#include "hardware_communicator.hpp"

namespace dynamixel_base {

using comm_t = std::shared_ptr<hardware_communicator::Communicator>;

class DynamixelBase {
 public:
  explicit DynamixelBase(const uint8_t id) : id_(id), name_("base") {}
  ~DynamixelBase() {}

  uint8_t get_id() const { return id_; }
  std::string get_name() const { return name_; }

  virtual bool read_operating_mode(
    const dynamixel_base::comm_t & comm, uint8_t & mode) { return false; }
  virtual bool write_operating_mode(
    const dynamixel_base::comm_t & comm, const uint8_t mode) { return false; }
  virtual bool read_current_limit(
    const dynamixel_base::comm_t & comm, double & limit_ampere) { return false; }
  virtual bool read_max_position_limit(
    const dynamixel_base::comm_t & comm, double & limit_radian) { return false; }
  virtual bool read_min_position_limit(
    const dynamixel_base::comm_t & comm, double & limit_radian) { return false; }

  virtual bool write_torque_enable(
    const dynamixel_base::comm_t & comm, const bool enable) { return false; }

  virtual bool write_velocity_i_gain(
    const dynamixel_base::comm_t & comm, const unsigned int gain) { return false; }
  virtual bool write_velocity_p_gain(
    const dynamixel_base::comm_t & comm, const unsigned int gain) { return false; }
  virtual bool write_position_d_gain(
    const dynamixel_base::comm_t & comm, const unsigned int gain) { return false; }
  virtual bool write_position_i_gain(
    const dynamixel_base::comm_t & comm, const unsigned int gain) { return false; }
  virtual bool write_position_p_gain(
    const dynamixel_base::comm_t & comm, const unsigned int gain) { return false; }

  virtual bool write_profile_acceleration(
    const dynamixel_base::comm_t & comm, const double acceleration_rpss) { return false; }
  virtual bool write_profile_velocity(
    const dynamixel_base::comm_t & comm, const double velocity_rps) { return false; }

  virtual unsigned int to_profile_acceleration(const double acceleration_rpss) { return 1; }
  virtual unsigned int to_profile_velocity(const double velocity_rps) { return 1; }
  virtual double to_position_radian(const int position) { return 0.0; }
  virtual double to_velocity_rps(const int velocity) { return 0.0; }
  virtual double to_current_ampere(const int current) { return 0.0; }
  virtual double to_voltage_volt(const int voltage) { return 0.0; }
  virtual unsigned int from_position_radian(const double position_rad) { return 0; }
  virtual unsigned int from_velocity_rps(const double velocity_rps) { return 0; }
  virtual unsigned int from_current_ampere(const double current_ampere) { return 0; }

  virtual bool auto_set_indirect_address_of_present_position(
    const dynamixel_base::comm_t & comm) { return false; }
  virtual bool auto_set_indirect_address_of_present_velocity(
    const dynamixel_base::comm_t & comm) { return false; }
  virtual bool auto_set_indirect_address_of_present_current(
    const dynamixel_base::comm_t & comm) { return false; }
  virtual bool auto_set_indirect_address_of_present_input_voltage(
    const dynamixel_base::comm_t & comm) { return false; }
  virtual bool auto_set_indirect_address_of_present_temperature(
    const dynamixel_base::comm_t & comm) { return false; }
  virtual bool auto_set_indirect_address_of_goal_position(
    const dynamixel_base::comm_t & comm) { return false; }
  virtual bool auto_set_indirect_address_of_goal_velocity(
    const dynamixel_base::comm_t & comm) { return false; }
  virtual bool auto_set_indirect_address_of_goal_current(
    const dynamixel_base::comm_t & comm) { return false; }

  virtual unsigned int indirect_addr_of_present_position(void) { return 0; }
  virtual unsigned int indirect_addr_of_present_velocity(void) { return 0; }
  virtual unsigned int indirect_addr_of_present_current(void) { return 0; }
  virtual unsigned int indirect_addr_of_present_input_voltage(void) { return 0; }
  virtual unsigned int indirect_addr_of_present_temperature(void) { return 0; }
  virtual unsigned int indirect_addr_of_goal_position(void) { return 0; }
  virtual unsigned int indirect_addr_of_goal_velocity(void) { return 0; }
  virtual unsigned int indirect_addr_of_goal_current(void) { return 0; }

  virtual unsigned int start_address_for_indirect_read(void) { return 0; }
  virtual unsigned int length_of_indirect_data_read(void) { return 0; }
  virtual unsigned int next_indirect_addr_read(void) const { return 0; }

  virtual unsigned int start_address_for_indirect_write(void) { return 0; }
  virtual unsigned int length_of_indirect_data_write(void) { return 0; }
  virtual unsigned int next_indirect_addr_write(void) const { return 0; }

  virtual bool extract_present_position_from_sync_read(
    const dynamixel_base::comm_t & comm, const std::string & group_name,
    double & position_rad) { return false; }
  virtual bool extract_present_velocity_from_sync_read(
    const dynamixel_base::comm_t & comm, const std::string & group_name,
    double & velocity_rps) { return false; }
  virtual bool extract_present_current_from_sync_read(
    const dynamixel_base::comm_t & comm, const std::string & group_name,
    double & current_ampere) { return false; }
  virtual bool extract_present_input_voltage_from_sync_read(
    const dynamixel_base::comm_t & comm, const std::string & group_name,
    double & voltage_volt) { return false; }
  virtual bool extract_present_temperature_from_sync_read(
    const dynamixel_base::comm_t & comm, const std::string & group_name,
    int & temperature_deg) { return false; }

  virtual void push_back_position_for_sync_write(
    const double position_rad, std::vector<uint8_t> & write_data) {}
  virtual void push_back_velocity_for_sync_write(
    const double velocity_rps, std::vector<uint8_t> & write_data) {}
  virtual void push_back_current_for_sync_write(
    const double current_ampere, std::vector<uint8_t> & write_data) {}

 protected:
  uint8_t id_;
  std::string name_;
};

}  // namespace dynamixel_base

#endif  // RT_MANIPULATORS_LIB_INCLUDE_DYNAMIXEL_BASE_HPP_