Skip to content

Commit

Permalink
Rename AmorControlboard device to AmorControlBoard
Browse files Browse the repository at this point in the history
  • Loading branch information
PeterBowman committed Aug 25, 2023
1 parent cb17197 commit 14671e4
Show file tree
Hide file tree
Showing 19 changed files with 289 additions and 774 deletions.
2 changes: 1 addition & 1 deletion doc/yarp-devices-install.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ For unit testing, you'll need the googletest source package. Refer to [Install g

### Components with known additional/specific dependencies

- [../libraries/YarpPlugins/AmorControlboard](../libraries/YarpPlugins/AmorControlboard#requirements)
- [../libraries/YarpPlugins/AmorControlBoard](../libraries/YarpPlugins/AmorControlBoard#requirements)
- [../libraries/YarpPlugins/AravisGigE](../libraries/YarpPlugins/AravisGigE#requirements)
- [../libraries/YarpPlugins/CanBusHico](../libraries/YarpPlugins/CanBusHico#requirements)
- [../libraries/YarpPlugins/CanBusPeak](../libraries/YarpPlugins/CanBusPeak#requirements)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-

#include "AmorControlboard.hpp"
#include "AmorControlBoard.hpp"

#define _USE_MATH_DEFINES
#include <cmath>
Expand All @@ -13,7 +13,7 @@ using namespace roboticslab;

// -----------------------------------------------------------------------------

bool AmorControlboard::indexWithinRange(const int& idx)
bool AmorControlBoard::indexWithinRange(const int& idx)
{
if (idx >= AMOR_NUM_JOINTS)
{
Expand All @@ -26,7 +26,7 @@ bool AmorControlboard::indexWithinRange(const int& idx)

// -----------------------------------------------------------------------------

bool AmorControlboard::batchWithinRange(const int& n_joint)
bool AmorControlBoard::batchWithinRange(const int& n_joint)
{
if (n_joint == 0)
{
Expand All @@ -45,14 +45,14 @@ bool AmorControlboard::batchWithinRange(const int& n_joint)

// -----------------------------------------------------------------------------

double AmorControlboard::toDeg(double rad)
double AmorControlBoard::toDeg(double rad)
{
return rad * 180 / M_PI;
}

// -----------------------------------------------------------------------------

double AmorControlboard::toRad(double deg)
double AmorControlBoard::toRad(double deg)
{
return deg * M_PI / 180;
}
Expand Down
181 changes: 181 additions & 0 deletions libraries/YarpPlugins/AmorControlBoard/AmorControlBoard.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-

#ifndef __AMOR_CONTROL_BOARD_HPP__
#define __AMOR_CONTROL_BOARD_HPP__

#include <mutex>
#include <vector>

#include <yarp/dev/ControlBoardInterfaces.h>
#include <yarp/dev/PolyDriver.h>

#include <amor.h>

namespace roboticslab
{

/**
* @ingroup YarpPlugins
* @defgroup AmorControlBoard
* @brief Contains roboticslab::AmorControlBoard.
*/

/**
* @ingroup AmorControlBoard
* @brief Implements several yarp::dev:: control board interfaces.
*/
class AmorControlBoard : public yarp::dev::DeviceDriver,
public yarp::dev::IAxisInfo,
public yarp::dev::IControlLimits,
public yarp::dev::IControlMode,
public yarp::dev::ICurrentControl,
public yarp::dev::IEncodersTimed,
public yarp::dev::IPositionControl,
public yarp::dev::IVelocityControl
{
public:

~AmorControlBoard() override
{ close(); }

// -------- DeviceDriver declarations. Implementation in IDeviceDriverImpl.cpp --------

bool open(yarp::os::Searchable& config) override;
bool close() override;

// ------- IPositionControl declarations. Implementation in IPositionControlImpl.cpp -------

bool getAxes(int *ax) override;
bool positionMove(int j, double ref) override;
bool positionMove(const double *refs) override;
bool relativeMove(int j, double delta) override;
bool relativeMove(const double *deltas) override;
bool checkMotionDone(int j, bool *flag) override;
bool checkMotionDone(bool *flag) override;
bool setRefSpeed(int j, double sp) override;
bool setRefSpeeds(const double *spds) override;
bool setRefAcceleration(int j, double acc) override;
bool setRefAccelerations(const double *accs) override;
bool getRefSpeed(int j, double *ref) override;
bool getRefSpeeds(double *spds) override;
bool getRefAcceleration(int j, double *acc) override;
bool getRefAccelerations(double *accs) override;
bool stop(int j) override;
bool stop() override;
bool positionMove(int n_joint, const int *joints, const double *refs) override;
bool relativeMove(int n_joint, const int *joints, const double *deltas) override;
bool checkMotionDone(int n_joint, const int *joints, bool *flags) override;
bool setRefSpeeds(int n_joint, const int *joints, const double *spds) override;
bool setRefAccelerations(int n_joint, const int *joints, const double *accs) override;
bool getRefSpeeds(int n_joint, const int *joints, double *spds) override;
bool getRefAccelerations(int n_joint, const int *joints, double *accs) override;
bool stop(int n_joint, const int *joints) override;
bool getTargetPosition(int joint, double *ref) override;
bool getTargetPositions(double *refs) override;
bool getTargetPositions(int n_joint, const int *joints, double *refs) override;

// ---------- IEncoders declarations. Implementation in IEncodersImpl.cpp ----------

bool resetEncoder(int j) override;
bool resetEncoders() override;
bool setEncoder(int j, double val) override;
bool setEncoders(const double *vals) override;
bool getEncoder(int j, double *v) override;
bool getEncoders(double *encs) override;
bool getEncoderSpeed(int j, double *sp) override;
bool getEncoderSpeeds(double *spds) override;
bool getEncoderAcceleration(int j, double *spds) override;
bool getEncoderAccelerations(double *accs) override;

// --------- IEncodersTimed declarations. Implementation in IEncodersTimedImpl.cpp ---------

bool getEncodersTimed(double *encs, double *time) override;
bool getEncoderTimed(int j, double *encs, double *time) override;

// --------- IVelocityControl Declarations. Implementation in IVelocityControlImpl.cpp ---------

bool velocityMove(int j, double sp) override;
bool velocityMove(const double *sp) override;
bool velocityMove(const int n_joint, const int *joints, const double *spds) override;
bool getRefVelocity(int joint, double *vel) override;
bool getRefVelocities(double *vels) override;
bool getRefVelocities(int n_joint, const int *joints, double *vels) override;

// --------- IControlLimits declarations. Implementation in IControlLimitsImpl.cpp ---------

bool setLimits(int axis, double min, double max) override;
bool getLimits(int axis, double *min, double *max) override;
bool setVelLimits(int axis, double min, double max) override;
bool getVelLimits(int axis, double *min, double *max) override;

// --------- IControlMode declarations. Implementation in IControlModeImpl.cpp ---------

bool getControlMode(int j, int *mode) override;
bool getControlModes(int *modes) override;
bool getControlModes(int n_joint, const int *joints, int *modes) override;
bool setControlMode(int j, int mode) override;
bool setControlModes(int n_joint, const int *joints, int *modes) override;
bool setControlModes(int *modes) override;

// -------- IAxisInfo declarations. Implementation in IAxisInfoImpl.cpp --------

bool getAxisName(int axis, std::string& name) override;
bool getJointType(int axis, yarp::dev::JointTypeEnum& type) override;

// --------- ICurrentControl Declarations. Implementation in ICurrentControlImpl.cpp ---------

bool getNumberOfMotors(int *ax) override;
bool getCurrent(int m, double *curr) override;
bool getCurrents(double *currs) override;
bool getCurrentRange(int m, double *min, double *max) override;
bool getCurrentRanges(double *min, double *max) override;
bool setRefCurrents(const double *currs) override;
bool setRefCurrent(int m, double curr) override;
bool setRefCurrents(int n_motor, const int *motors, const double *currs) override;
bool getRefCurrents(double *currs) override;
bool getRefCurrent(int m, double *curr) override;

// ------------------------------- Protected -------------------------------------

protected:

/**
* Check if index is within range (referred to driver vector size).
* @param idx index to check.
* @return true/false on success/failure.
*/
bool indexWithinRange(const int& idx);

/**
* Check if number of joints is within range.
* @param n_joint index to check.
* @return true/false on success/failure.
*/
bool batchWithinRange(const int& n_joint);

/**
* Convert from radians to degrees.
* @param rad radians
* @return degrees
*/
static double toDeg(double rad);

/**
* Convert from degrees to radians.
* @param deg degrees
* @return radians
*/
static double toRad(double deg);

private:

AMOR_HANDLE handle {AMOR_INVALID_HANDLE};
mutable std::mutex handleMutex;
yarp::dev::PolyDriver cartesianControllerDevice;
bool usingCartesianController {false};
int controlMode {VOCAB_CM_POSITION};
};

} // namespace roboticslab

#endif // __AMOR_CONTROL_BOARD_HPP__
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
# Copyright: (C) 2017 Universidad Carlos III de Madrid
# CopyPolicy: Released under the terms of the LGPLv2.1 or later, see LGPL.TXT

if(NOT AMOR_API_FOUND AND (NOT DEFINED ENABLE_AmorControlboard OR ENABLE_AmorControlboard))
message(WARNING "AMOR_API package not found, disabling AmorControlboard")
if(NOT AMOR_API_FOUND AND (NOT DEFINED ENABLE_AmorControlBoard OR ENABLE_AmorControlBoard))
message(WARNING "AMOR_API package not found, disabling AmorControlBoard")
endif()

yarp_prepare_plugin(AmorControlboard
yarp_prepare_plugin(AmorControlBoard
CATEGORY device
TYPE roboticslab::AmorControlboard
INCLUDE AmorControlboard.hpp
TYPE roboticslab::AmorControlBoard
INCLUDE AmorControlBoard.hpp
DEFAULT ON
DEPENDS AMOR_API_FOUND
EXTRA_CONFIG WRAPPER=controlBoard_nws_yarp)

if(NOT SKIP_AmorControlboard)
if(NOT SKIP_AmorControlBoard)

yarp_add_plugin(AmorControlboard AmorControlboard.cpp
AmorControlboard.hpp
yarp_add_plugin(AmorControlBoard AmorControlBoard.cpp
AmorControlBoard.hpp
DeviceDriverImpl.cpp
IAxisInfoImpl.cpp
IControlLimitsImpl.cpp
Expand All @@ -28,17 +25,17 @@ if(NOT SKIP_AmorControlboard)
LogComponent.hpp
LogComponent.cpp)

target_link_libraries(AmorControlboard YARP::YARP_os
target_link_libraries(AmorControlBoard YARP::YARP_os
YARP::YARP_dev
AMOR::amor_api)

yarp_install(TARGETS AmorControlboard
yarp_install(TARGETS AmorControlBoard
LIBRARY DESTINATION ${ROBOTICSLAB-YARP-DEVICES_DYNAMIC_PLUGINS_INSTALL_DIR}
ARCHIVE DESTINATION ${ROBOTICSLAB-YARP-DEVICES_STATIC_PLUGINS_INSTALL_DIR}
YARP_INI DESTINATION ${ROBOTICSLAB-YARP-DEVICES_PLUGIN_MANIFESTS_INSTALL_DIR})

else()

set(ENABLE_AmorControlboard OFF CACHE BOOL "Enable/disable AmorControlboard device" FORCE)
set(ENABLE_AmorControlBoard OFF CACHE BOOL "Enable/disable AmorControlBoard device" FORCE)

endif()
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-

#include "AmorControlboard.hpp"
#include "AmorControlBoard.hpp"

#include <vector>

Expand All @@ -15,7 +15,7 @@ constexpr auto DEFAULT_CAN_PORT = 0;

// ------------------- DeviceDriver related ------------------------------------

bool AmorControlboard::open(yarp::os::Searchable& config)
bool AmorControlBoard::open(yarp::os::Searchable& config)
{
int major, minor, build;
amor_get_library_version(&major, &minor, &build);
Expand Down Expand Up @@ -103,7 +103,7 @@ bool AmorControlboard::open(yarp::os::Searchable& config)

// -----------------------------------------------------------------------------

bool AmorControlboard::close()
bool AmorControlBoard::close()
{
if (usingCartesianController)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-

#include "AmorControlboard.hpp"
#include "AmorControlBoard.hpp"

#include <yarp/os/Log.h>

Expand All @@ -10,7 +10,7 @@ using namespace roboticslab;

// ------------------- IAxisInfo related ------------------------------------

bool AmorControlboard::getAxisName(int axis, std::string& name)
bool AmorControlBoard::getAxisName(int axis, std::string& name)
{
yCTrace(AMOR, "%d", axis);

Expand Down Expand Up @@ -52,7 +52,7 @@ bool AmorControlboard::getAxisName(int axis, std::string& name)

// -----------------------------------------------------------------------------

bool AmorControlboard::getJointType(int axis, yarp::dev::JointTypeEnum& type)
bool AmorControlBoard::getJointType(int axis, yarp::dev::JointTypeEnum& type)
{
yCTrace(AMOR, "%d", axis);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-

#include "AmorControlboard.hpp"
#include "AmorControlBoard.hpp"

#include <yarp/os/Log.h>

Expand All @@ -10,15 +10,15 @@ using namespace roboticslab;

// ------------------- IControlLimits related ------------------------------------

bool AmorControlboard::setLimits(int axis, double min, double max)
bool AmorControlBoard::setLimits(int axis, double min, double max)
{
yCError(AMOR, "setLimits() not available");
return false;
}

// -----------------------------------------------------------------------------

bool AmorControlboard::getLimits(int axis, double *min, double *max)
bool AmorControlBoard::getLimits(int axis, double *min, double *max)
{
yCTrace(AMOR, "%d", axis);

Expand Down Expand Up @@ -51,15 +51,15 @@ bool AmorControlboard::getLimits(int axis, double *min, double *max)

// -----------------------------------------------------------------------------

bool AmorControlboard::setVelLimits(int axis, double min, double max)
bool AmorControlBoard::setVelLimits(int axis, double min, double max)
{
yCError(AMOR, "setVelLimits() not available");
return false;
}

// -----------------------------------------------------------------------------

bool AmorControlboard::getVelLimits(int axis, double *min, double *max)
bool AmorControlBoard::getVelLimits(int axis, double *min, double *max)
{
yCTrace(AMOR, "%d", axis);

Expand Down
Loading

0 comments on commit 14671e4

Please sign in to comment.