Some tips on how to create a device for a new motor control board.
#include <cstdio>
public DeviceDriver,
public IPositionControl
{
public:
{
*ax = 2;
printf("FakeMotor reporting %d axes present\n", *ax);
return true;
}
{
return true;
}
{
return true;
}
bool positionMove(
const int n_joint,
const int* joints,
const double* refs)
override
{
return true;
}
{
return true;
}
{
return true;
}
bool relativeMove(
const int n_joint,
const int* joints,
const double* deltas)
override
{
return true;
}
{
return true;
}
{
return true;
}
bool checkMotionDone(
const int n_joint,
const int* joints,
bool* flag)
override
{
return true;
}
{
return true;
}
{
return true;
}
bool setRefSpeeds(
const int n_joint,
const int* joints,
const double* spds)
override
{
return true;
}
{
return true;
}
{
return true;
}
{
return true;
}
{
return true;
}
{
return true;
}
bool getRefSpeeds(
const int n_joint,
const int* joints,
double* spds)
override
{
return true;
}
{
return true;
}
{
return true;
}
{
return true;
}
bool stop(
int j)
override
{
return true;
}
{
return true;
}
bool stop(
const int n_joint,
const int* joints)
override
{
return true;
}
bool open(Searchable& config)
override
{
return true;
}
{
return true;
}
};
void testMotor(PolyDriver& driver)
{
IPositionControl* pos;
if (driver.view(pos)) {
int ct = 0;
pos->getAxes(&ct);
printf(" number of axes is: %d\n", ct);
} else {
printf(" could not find IPositionControl interface\n");
}
}
int main(
int argc,
char* argv[])
{
Drivers::factory().add(new DriverCreatorOf<FakeMotor>("motor",
"controlboard",
"FakeMotor"));
printf("============================================================\n");
printf("check our device can be instantiated directly\n");
PolyDriver direct("motor");
if (direct.isValid()) {
printf("Direct instantiation worked\n");
testMotor(direct);
} else {
printf("Direct instantiation failed\n");
}
direct.close();
printf("\n\n");
printf("============================================================\n");
printf("check our device can be wrapped in controlboard\n");
PolyDriver indirect("(device controlboard) (subdevice motor)");
if (indirect.isValid()) {
printf("Indirect instantiation worked\n");
} else {
printf("Indirect instantiation failed\n");
}
indirect.close();
printf("\n\n");
printf("============================================================\n");
printf("check our device can be accessed via remote_controlboard\n");
PolyDriver server("(device controlboard) (subdevice motor) (name /server)");
if (server.isValid()) {
printf("Server instantiation worked\n");
PolyDriver client("(device clientcontrolboard) (local /client) (remote /server)");
if (client.isValid()) {
printf("Client instantiation worked\n");
testMotor(client);
} else {
printf("Client instantiation failed\n");
}
client.close();
}
server.close();
return 0;
}
define control board standard interfaces
A fake motor control board for testing.
bool setRefAccelerations(const double *accs) override
Set reference acceleration on all joints.
bool positionMove(int j, double ref) override
Set new reference point for a single axis.
bool setRefSpeeds(const double *spds) override
Set reference speed on all joints.
bool getRefAccelerations(double *accs) override
Get reference acceleration of all joints.
bool getRefSpeeds(double *spds) override
Get reference speed of all joints.
bool setRefAcceleration(int j, double acc) override
Set reference acceleration for a joint.
bool setRefSpeed(int j, double sp) override
Set reference speed for a joint, this is the speed used during the interpolation of the trajectory.
bool relativeMove(int j, double delta) override
Set relative position.
bool getRefAcceleration(int j, double *acc) override
Get reference acceleration for a joint.
bool checkMotionDone(int j, bool *flag) override
Check if the current trajectory is terminated.
bool getAxes(int *ax) override
Get the number of controlled axes.
bool stop() override
Stop motion, multiple joints.
bool open(yarp::os::Searchable &config) override
Open the DeviceDriver.
bool getRefSpeed(int j, double *ref) override
Get reference speed for a joint.
bool close() override
Close the DeviceDriver.
Interface implemented by all device drivers.
A factory for creating driver objects of a particular type.
Global factory for devices.
Interface for a generic control board device implementing position control.
A container for a device driver.
Utilities for manipulating the YARP network, including initialization and shutdown.
A base class for nested structures that can be searched.
The main, catch-all namespace for YARP.
int main(int argc, char *argv[])