kinematics-dynamics
Loading...
Searching...
No Matches
KeyboardController.hpp
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __KEYBOARD_CONTROLLER_HPP__
4#define __KEYBOARD_CONTROLLER_HPP__
5
6#include <string>
7#include <vector>
8#include <functional>
9
10#include <yarp/conf/version.h>
11
12#include <yarp/os/RFModule.h>
13#include <yarp/os/ResourceFinder.h>
14
15#include <yarp/dev/PolyDriver.h>
16#include <yarp/dev/IControlLimits.h>
17#include <yarp/dev/IControlMode.h>
18#include <yarp/dev/IEncoders.h>
19#include <yarp/dev/IPositionControl.h>
20#include <yarp/dev/IVelocityControl.h>
21
22#include "LinearTrajectoryThread.hpp"
23#include "ICartesianControl.h"
24#include "KinematicRepresentation.hpp"
25
26namespace roboticslab
27{
28
38class KeyboardController : public yarp::os::RFModule
39{
40public:
41 ~KeyboardController() override
42 { close(); }
43
44 // used for array indexes and size checks
45 enum joint { Q1 = 0, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, MAX_JOINTS };
46 enum cart { X = 0, Y, Z, ROTX, ROTY, ROTZ, NUM_CART_COORDS };
47
48 bool configure(yarp::os::ResourceFinder & rf) override;
49 bool updateModule() override;
50 bool interruptModule() override;
51 double getPeriod() override;
52 bool close() override;
53
54private:
55 enum control_modes { NOT_CONTROLLING, JOINT_MODE, CARTESIAN_MODE };
56 enum joint_mode { POSITION, VELOCITY };
57
58 static const std::plus<double> increment_functor;
59 static const std::minus<double> decrement_functor;
60
61 template <typename func>
62 void incrementOrDecrementJointCommand(joint j, func op);
63
64 template <typename func>
65 void incrementOrDecrementCartesianCommand(cart coord, func op);
66
67 void toggleJointMode();
68 void toggleReferenceFrame();
69
70 void actuateTool(ICartesianControl::Actuator command);
71
72 void printJointPositions();
73 void printCartesianPositions();
74
75 void issueStop();
76
77 void printHelp();
78
79#if YARP_VERSION_COMPARE(>=, 4,0,0)
80 std::size_t axes {0};
81#else
82 int axes {0};
83#endif
85
86 double jointPosStep {0.0};
87 double jointVelStep {0.0};
88
90 std::string angleRepr;
92 control_modes controlMode {NOT_CONTROLLING};
93 joint_mode jointMode {VELOCITY};
94
95 bool supportsFrameToggle {false};
96 bool usingThread {false};
97 LinearTrajectoryThread * linTrajThread {nullptr};
98
99 yarp::dev::PolyDriver controlBoardDevice;
100 yarp::dev::PolyDriver cartesianControlDevice;
101
102 yarp::dev::IEncoders * iEncoders {nullptr};
103 yarp::dev::IControlMode * iControlMode {nullptr};
104 yarp::dev::IControlLimits * iControlLimits {nullptr};
105 yarp::dev::IPositionControl * iPositionControl {nullptr};
106 yarp::dev::IVelocityControl * iVelocityControl {nullptr};
107
108 roboticslab::ICartesianControl * iCartesianControl {nullptr};
109
110 std::vector<double> minPositionLimits;
111 std::vector<double> maxPositionLimits;
112 std::vector<double> maxVelocityLimits;
113 std::vector<double> currentJointVels;
114 std::vector<double> currentCartVels;
115};
116
117} // namespace roboticslab
118
119#endif // __KEYBOARD_CONTROLLER_HPP__
Abstract base class for a cartesian controller.
Definition ICartesianControl.h:22
Actuator
Actuator control vocabs.
Definition ICartesianControl.h:90
@ NONE
No actuator or no action.
Frame
Lists supported reference frames.
Definition ICartesianSolver.h:23
Sends streaming commands to the cartesian controller from a standard keyboard.
Definition KeyboardController.hpp:39
Periodic thread that encapsulates a linear trajectory.
Definition LinearTrajectoryThread.hpp:24
orientation_system
Lists available rotational representations.
Definition KinematicRepresentation.hpp:36
@ AXIS_ANGLE
(axis_x, axis_y, axis_z, rotation angle) [axis needs not to be normalized]
The main, catch-all namespace for Robotics Lab UC3M.
Definition groups.dox:6