37 #include <visp3/core/vpConfig.h>
39 #if defined(VISP_HAVE_POLOLU) && defined(VISP_HAVE_THREADS)
45 class RPMSerialInterface;
96 vpPololu(
const std::string &device,
int baudrate = 38400,
int channel = 0,
bool verbose =
false);
110 void calibrate(
unsigned short &pwm_min,
unsigned short &pwm_max);
119 void connect(
const std::string &device,
int baudrate,
int channel);
126 bool connected()
const;
133 float getAngularPosition()
const;
140 unsigned short getPwmPosition()
const;
151 void getRangeAngles(
float &minAngle,
float &maxAngle)
const;
162 void getRangePwm(
unsigned short &min,
unsigned short &max);
172 void setAngularPosition(
float pos_rad,
float vel_rad_s = 0.f);
185 m_min_angle = min_angle;
186 m_max_angle = max_angle;
187 m_range_angle = m_max_angle - m_min_angle;
195 void setAngularVelocity(
float vel_rad_s);
206 void setPwmPosition(
unsigned short pos_pwm,
unsigned short speed_pwm = 0);
217 inline void setPwmRange(
unsigned short min_pwm,
unsigned short max_pwm)
221 m_range_pwm = m_max_pwm - m_min_pwm;
231 void setPwmVelocity(
short pwm_vel);
246 void stopVelocityCmd();
261 float pwmToRad(
unsigned short pwm)
const;
272 unsigned short radToPwm(
float angle)
const;
283 short radSToSpeed(
float speed_rad_s)
const;
294 float speedToRadS(
short speed)
const;
298 static RPMSerialInterface *m_interface;
299 static int m_nb_servo;
302 bool m_apply_velocity_cmd;
303 bool m_stop_velocity_cmd_thread;
305 unsigned short m_vel_speed;
306 unsigned short m_vel_target_position;
308 unsigned short m_vel_speed_prev;
309 unsigned short m_vel_target_position_prev;
311 std::mutex m_mutex_velocity_cmd;
314 unsigned short m_min_pwm = 4095;
315 unsigned short m_max_pwm = 7905;
316 unsigned short m_range_pwm = m_max_pwm - m_min_pwm;
317 float m_min_angle = -40;
318 float m_max_angle = 40;
319 float m_range_angle = abs(m_min_angle) + abs(m_max_angle);
329 void VelocityCmdThread();
Interface for the Pololu Maestro USB Servo Controllers.
void setVerbose(bool verbose)
void setAngularRange(float min_angle, float max_angle)
void setPwmRange(unsigned short min_pwm, unsigned short max_pwm)