cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
osaRobot1394.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5  Author(s): Zihan Chen, Peter Kazanzides, Anton Deguet
6  Created on: 2011-06-10
7 
8  (C) Copyright 2011-2015 Johns Hopkins University (JHU), All Rights Reserved.
9 
10 --- begin cisst license - do not edit ---
11 
12 This software is provided "as is" under an open source license, with
13 no warranty. The complete license can be found in license.txt and
14 http://www.cisst.org/cisst/license.txt.
15 
16 --- end cisst license ---
17 */
18 
19 #ifndef _osaRobot1394_h
20 #define _osaRobot1394_h
21 
22 #include <vector>
23 #include <map>
24 #include <stdint.h>
25 
26 #ifndef SAW_ROBOT_IO_1394_WO_CISST
29 #else
30 #include <boost/shared_ptr.hpp>
31 #include <Eigen/Dense>
32 #include "EigenWrapper.h"
33 #include "MinimalPrm.h"
34 #endif
35 
37 
38 class AmpIO;
39 
40 namespace sawRobotIO1394 {
41 
49 {
50  public:
52  static const size_t WATCHDOG_MS_TO_COUNT = 192;
53 
57  const size_t maxConsecutiveCurrentSafetyViolations = 100,
58  const size_t maxConsecutivePotsToEncodersViolations = 200);
59 
60  void Configure(const osaRobot1394Configuration & config);
61 
62  void SetBoards(const std::vector<osaActuatorMapping> & actuatorBoards,
63  const std::vector<osaBrakeMapping> & brakeBoards);
64 
71  void PollValidity(void);
72  void PollState(void);
73  void ConvertState(void);
74  void CheckState(void);
82  //
84  void EnablePower(void);
85  void EnableBoardsPower(void);
86  void DisablePower(void);
87  void DisableBoardPower(void);
88  void WriteSafetyRelay(const bool & enabled);
89  void SetWatchdogPeriod(const double & periodInSeconds);
90 
91  void SetActuatorPower(const bool & enabled);
92  void SetActuatorPower(const vctBoolVec & enabled);
93  void SetBrakePower(const bool & enabled);
94  void SetBrakePower(const vctBoolVec & enabled);
95 
97  void SetEncoderPosition(const vctDoubleVec & pos);
98  void SetEncoderPositionBits(const vctIntVec & bits);
99  void SetSingleEncoderPosition(const int index, const double pos = 0);
100  void SetSingleEncoderPositionBits(const int index, const int bits = 0);
101 
103  void SetJointEffort(const vctDoubleVec & efforts);
104  void SetActuatorEffort(const vctDoubleVec & efforts);
105  void SetActuatorCurrent(const vctDoubleVec & currents);
106  void SetActuatorCurrentBits(const vctIntVec & bits);
107 
109  void UsePotsForSafetyCheck(const bool & usePotsForSafetyCheck);
110  void SetPotsToEncodersTolerance(const vctDoubleVec & tolerances);
111 
113  void SetBrakeCurrent(const vctDoubleVec & currents);
114  void SetBrakeCurrentBits(const vctIntVec & bits);
115  void BrakeRelease(void);
116  void BrakeEngage(void);
125  bool Valid(void) const;
126  bool PowerStatus(void) const;
127  bool SafetyRelay(void) const;
128  bool WatchdogStatus(void) const;
129  const vctBoolVec & ActuatorPowerStatus(void) const;
130  const vctBoolVec & BrakePowerStatus(void) const;
131  const vctDoubleVec & ActuatorCurrentFeedback(void) const;
132  const vctDoubleVec & BrakeCurrentFeedback(void) const;
133  const vctDoubleVec & PotPosition(void) const;
134  const vctDoubleVec & ActuatorTimeStamp(void) const;
135  const vctDoubleVec & BrakeTimeStamp(void) const;
136  const vctDoubleVec & EncoderPosition(void) const;
137  const vctDoubleVec & EncoderVelocity(void) const;
138  const vctDoubleVec & EncoderVelocitySoftware(void) const;
144  std::string Name(void) const;
145  size_t NumberOfJoints(void) const;
146  size_t NumberOfActuators(void) const;
147  size_t SerialNumber(void) const;
148  size_t NumberOfBrakes(void) const;
149  void GetJointTypes(prmJointTypeVec & jointTypes) const;
150  void GetJointEffortCommandLimits(vctDoubleVec & limits) const;
151  void GetActuatorEffortCommandLimits(vctDoubleVec & limits) const;
152  void GetActuatorCurrentCommandLimits(vctDoubleVec & limits) const;
164  void EncoderPositionToBits(const vctDoubleVec & pos, vctIntVec & bits) const;
166  void EncoderBitsToPosition(const vctIntVec & bits, vctDoubleVec & pos) const;
167  void EncoderBitsToDPosition(const vctIntVec & bits, vctDoubleVec & dpos) const;
168  void EncoderBitsToDTime(const vctIntVec & bits, vctDoubleVec & dt) const;
169  void EncoderBitsToVelocity(const vctIntVec & bits, vctDoubleVec & vel) const;
170 
172  void ActuatorEffortToCurrent(const vctDoubleVec & efforts, vctDoubleVec & currents) const;
173  void ActuatorCurrentToBits(const vctDoubleVec & currents, vctIntVec & bits) const;
174  void ActuatorBitsToCurrent(const vctIntVec & bits, vctDoubleVec & currents) const;
175  void ActuatorCurrentToEffort(const vctDoubleVec & currents, vctDoubleVec & efforts) const;
176 
178  void BrakeCurrentToBits(const vctDoubleVec & currents, vctIntVec & bits) const;
179  void BrakeBitsToCurrent(const vctIntVec & bits, vctDoubleVec & currents) const;
180 
182  void PotBitsToVoltage(const vctIntVec & bits, vctDoubleVec & voltages) const;
183  void PotVoltageToPosition(const vctDoubleVec & voltages, vctDoubleVec & pos) const;
186  protected:
187 
188  void ClipActuatorEffort(vctDoubleVec & efforts);
189  void ClipActuatorCurrent(vctDoubleVec & currents);
190  void ClipBrakeCurrent(vctDoubleVec & currents);
191 
193  std::vector<osaActuatorMapping> mActuatorInfo;
194  std::vector<osaBrakeMapping> mBrakeInfo;
195  std::map<int, AmpIO*> mUniqueBoards;
196  typedef std::map<int, AmpIO*>::iterator unique_board_iterator;
197  typedef std::map<int, AmpIO*>::const_iterator unique_board_const_iterator;
198 
201  std::string mName;
206 
207  // state of brakes
210 
212  vctIntVec
214 
237 
243  mActuatorCurrentFeedbackLimits, // limit used to trigger error
244  mBrakeCurrentFeedbackLimits, // limit used to trigger error
245  mPotsToEncodersTolerance; // maximum error between encoders and pots
246 
251 
253  bool
255  mPowerStatus,
260 
261  unsigned short mSafetyRelay;
262 
263  vctBoolVec
273 
274  vctIntVec
278  mEncoderVelocityBits, // latched velocity
279  mEncoderVelocityBitsNow, // current counting velocity bits
282 
283  vctIntVec
288 
291  mActuatorTimestampChange, // cumulated time since last encoder changed
292  mVelocitySlopeToZero, // slope used to reduced velocity to zero when no encoder count change
294  mPotVoltage,
295  mPotPosition,
305  mJointTorque,
319 
320  size_t
323 
324  size_t
327  };
328 
329 } // namespace sawRobotIO1394
330 
331 #endif // _osaRobot1394_h
void GetJointTypes(prmJointTypeVec &jointTypes) const
vctDoubleVec mActuatorTimestamp
Definition: osaRobot1394.h:290
size_t NumberOfBrakes(void) const
std::map< int, AmpIO * >::const_iterator unique_board_const_iterator
Definition: osaRobot1394.h:197
vctDoubleVec mJointTorque
Definition: osaRobot1394.h:290
vctDoubleVec mEffortToCurrentScales
Definition: osaRobot1394.h:216
vctDoubleVec mBrakeCurrentCommand
Definition: osaRobot1394.h:290
vctDoubleVec mActuatorTemperature
Definition: osaRobot1394.h:290
Typedef for dynamic vectors.
const vctDoubleVec & PotPosition(void) const
prmJointTypeVec mJointType
Robot type.
Definition: osaRobot1394.h:248
vctDoubleVec mEncoderVelocityDxDt
Definition: osaRobot1394.h:290
vctIntVec mEncoderPositionBits
Definition: osaRobot1394.h:275
void SetEncoderPosition(const vctDoubleVec &pos)
Encoder Control.
size_t mCurrentSafetyViolationsMaximum
Definition: osaRobot1394.h:321
vctIntVec mEncoderVelocityBitsNow
Definition: osaRobot1394.h:275
vctDoubleVec mPotPosition
Definition: osaRobot1394.h:290
vctIntVec mEncoderVelocityBits
Definition: osaRobot1394.h:275
vctDoubleVec mActuatorBitsToCurrentScales
Definition: osaRobot1394.h:216
void SetSingleEncoderPosition(const int index, const double pos=0)
vctDoubleVec mActuatorBitsToCurrentOffsets
Definition: osaRobot1394.h:216
vctDoubleVec mEncoderPosition
Definition: osaRobot1394.h:290
vctDoubleVec mJointVelocity
Definition: osaRobot1394.h:290
void SetActuatorPower(const bool &enabled)
vctDoubleVec mBrakeReleasingTimer
Definition: osaRobot1394.h:209
bool mBrakeReleasing
Definition: osaRobot1394.h:208
vctDoubleVec mBitsToVoltageOffsets
Definition: osaRobot1394.h:216
size_t mPotsToEncodersViolationsMaximum
Definition: osaRobot1394.h:325
vctDoubleVec mEncoderDPosition
Definition: osaRobot1394.h:290
std::map< int, AmpIO * > mUniqueBoards
Definition: osaRobot1394.h:195
vctDoubleVec mJointPosition
Definition: osaRobot1394.h:290
vctDoubleVec mBrakeCurrentFeedback
Definition: osaRobot1394.h:290
void ClipBrakeCurrent(vctDoubleVec &currents)
vctDoubleVec mPotsToEncodersError
Definition: osaRobot1394.h:290
vctDoubleVec mBitsToDPositionOffsets
Definition: osaRobot1394.h:216
void SetEncoderPositionBits(const vctIntVec &bits)
vctDoubleVec mBitsToPositionScales
Definition: osaRobot1394.h:216
bool SafetyRelay(void) const
bool mWatchdogStatus
Definition: osaRobot1394.h:254
vctDoubleVec mBrakeTemperature
Definition: osaRobot1394.h:290
size_t mNumberOfActuators
Definition: osaRobot1394.h:202
void SetSingleEncoderPositionBits(const int index, const int bits=0)
void ActuatorCurrentToBits(const vctDoubleVec &currents, vctIntVec &bits) const
unsigned short mSafetyRelay
Definition: osaRobot1394.h:261
vctBoolVec mEncoderOverflow
Definition: osaRobot1394.h:264
const vctDoubleVec & BrakeTimeStamp(void) const
vctDoubleVec mActuatorEffortCommandLimits
Definition: osaRobot1394.h:239
void SetBrakeCurrentBits(const vctIntVec &bits)
vctDoubleVec mPotVoltage
Definition: osaRobot1394.h:290
vctDoubleVec mBitsToVoltageScales
Definition: osaRobot1394.h:216
void EncoderBitsToVelocity(const vctIntVec &bits, vctDoubleVec &vel) const
const vctDoubleVec & EncoderPosition(void) const
std::vector< osaBrakeMapping > mBrakeInfo
Definition: osaRobot1394.h:194
bool mValid
State Members.
Definition: osaRobot1394.h:254
vctDoubleVec mActuatorEffortFeedback
Definition: osaRobot1394.h:290
vctDoubleVec mActuatorCurrentCommandLimits
Definition: osaRobot1394.h:239
vctDoubleVec mActuatorCurrentCommand
Definition: osaRobot1394.h:290
const vctBoolVec & ActuatorPowerStatus(void) const
vctDoubleVec mVoltageToPositionOffsets
Definition: osaRobot1394.h:216
Definition: osaConfiguration1394.h:105
void SetBoards(const std::vector< osaActuatorMapping > &actuatorBoards, const std::vector< osaBrakeMapping > &brakeBoards)
vctIntVec mActuatorCurrentBitsCommand
Definition: osaRobot1394.h:284
bool mPreviousWatchdogStatus
Definition: osaRobot1394.h:254
vctDoubleVec mEncoderDTime
Definition: osaRobot1394.h:290
vctBoolVec mBrakePowerEnabled
Definition: osaRobot1394.h:264
void SetActuatorEffort(const vctDoubleVec &efforts)
size_t mSerialNumber
Definition: osaRobot1394.h:205
vctIntVec mActuatorCurrentBitsFeedback
Definition: osaRobot1394.h:284
vctDoubleVec mEncoderVelocitySoftware
Definition: osaRobot1394.h:290
osaPot1394Location mPotType
Definition: osaRobot1394.h:249
vctDoubleVec mBrakeEngagedCurrent
Definition: osaRobot1394.h:290
void GetActuatorEffortCommandLimits(vctDoubleVec &limits) const
bool mPowerStatus
Definition: osaRobot1394.h:254
void Configure(const osaRobot1394Configuration &config)
void CalibrateEncoderOffsetsFromPots(void)
void ClipActuatorCurrent(vctDoubleVec &currents)
vctIntVec mBrakeCurrentBitsCommand
Definition: osaRobot1394.h:284
void SetActuatorCurrent(const vctDoubleVec &currents)
size_t mNumberOfBrakes
Definition: osaRobot1394.h:204
vctDoubleVec mBitsToPositionOffsets
Definition: osaRobot1394.h:216
vctDoubleVec mEncoderPositionPrev
Definition: osaRobot1394.h:290
std::map< int, AmpIO * >::iterator unique_board_iterator
Definition: osaRobot1394.h:196
void EncoderBitsToPosition(const vctIntVec &bits, vctDoubleVec &pos) const
bool WatchdogStatus(void) const
void SetActuatorCurrentBits(const vctIntVec &bits)
bool mIsAllBoardsFirmWareFour
Definition: osaRobot1394.h:254
vctDoubleVec mBrakeTimestamp
Definition: osaRobot1394.h:290
void EnablePower(void)
Power / Safety Control.
osaRobot1394Configuration GetConfiguration(void) const
void SetJointEffort(const vctDoubleVec &efforts)
Actuator Control.
vctIntVec mBrakeCurrentBitsFeedback
Definition: osaRobot1394.h:284
vctBoolVec mActuatorPowerEnabled
Definition: osaRobot1394.h:264
void PotBitsToVoltage(const vctIntVec &bits, vctDoubleVec &voltages) const
Conversions for potentiometers.
std::string Name(void) const
vctDoubleVec mBrakeReleasedCurrent
Definition: osaRobot1394.h:290
static const size_t WATCHDOG_MS_TO_COUNT
Watchdog counts per ms (note counter width, e.g. 16 bits)
Definition: osaRobot1394.h:52
const vctBoolVec & BrakePowerStatus(void) const
const vctDoubleVec & EncoderVelocitySoftware(void) const
void SetBrakePower(const bool &enabled)
void ActuatorCurrentToEffort(const vctDoubleVec &currents, vctDoubleVec &efforts) const
vctDoubleVec mBrakeReleaseCurrent
Definition: osaRobot1394.h:290
void BrakeCurrentToBits(const vctDoubleVec &currents, vctIntVec &bits) const
Conversions for brake commands.
vctBoolVec mActuatorPowerStatus
Definition: osaRobot1394.h:264
void GetJointEffortCommandLimits(vctDoubleVec &limits) const
size_t NumberOfJoints(void) const
vctDoubleVec mBrakeReleaseTime
Definition: osaRobot1394.h:290
vctDoubleVec mBrakeCurrentFeedbackLimits
Definition: osaRobot1394.h:239
vctDoubleVec mVelocitySlopeToZero
Definition: osaRobot1394.h:290
void ActuatorEffortToCurrent(const vctDoubleVec &efforts, vctDoubleVec &currents) const
Conversions for actuator current commands and measurements.
size_t mNumberOfJoints
Definition: osaRobot1394.h:203
vctIntVec mEncoderPositionBitsPrev
Definition: osaRobot1394.h:275
size_t SerialNumber(void) const
vctBoolVec mBrakePowerStatus
Definition: osaRobot1394.h:264
void EncoderBitsToDPosition(const vctIntVec &bits, vctDoubleVec &dpos) const
vctDoubleVec mActuatorTimestampChange
Definition: osaRobot1394.h:290
const vctDoubleVec & BrakeCurrentFeedback(void) const
void SetPotsToEncodersTolerance(const vctDoubleVec &tolerances)
void EncoderPositionToBits(const vctDoubleVec &pos, vctIntVec &bits) const
Conversions for encoders.
void ClipActuatorEffort(vctDoubleVec &efforts)
void BrakeBitsToCurrent(const vctIntVec &bits, vctDoubleVec &currents) const
const vctDoubleVec & EncoderVelocity(void) const
void ActuatorBitsToCurrent(const vctIntVec &bits, vctDoubleVec &currents) const
vctDoubleVec mJointEffortCommandLimits
Definition: osaRobot1394.h:239
void SetBrakeCurrent(const vctDoubleVec &currents)
Brake Control.
vctDoubleVec mActuatorCurrentToBitsOffsets
Definition: osaRobot1394.h:216
size_t NumberOfActuators(void) const
void EncoderBitsToDTime(const vctIntVec &bits, vctDoubleVec &dt) const
vctIntVec mEncoderDPositionBits
Definition: osaRobot1394.h:275
vctBoolVec mPreviousEncoderOverflow
Definition: osaRobot1394.h:264
const vctDoubleVec & ActuatorCurrentFeedback(void) const
vctIntVec mPotBits
Definition: osaRobot1394.h:275
std::vector< osaActuatorMapping > mActuatorInfo
Board Objects.
Definition: osaRobot1394.h:193
vctDoubleVec mBitsToVecocityScales
Definition: osaRobot1394.h:216
bool mUsePotsForSafetyCheck
Definition: osaRobot1394.h:250
vctBoolVec mDigitalInputs
Definition: osaRobot1394.h:264
vctDoubleVec mActuatorCurrentFeedbackLimits
Definition: osaRobot1394.h:239
vctIntVec mCountsPerTurn
Vectors of actuator properties.
Definition: osaRobot1394.h:213
size_t mCurrentSafetyViolationsCounter
Definition: osaRobot1394.h:321
vctDoubleVec mActuatorCurrentFeedback
Definition: osaRobot1394.h:290
void SetWatchdogPeriod(const double &periodInSeconds)
vctDoubleVec mActuatorCurrentToBitsScales
Definition: osaRobot1394.h:216
osaPot1394Location
Defines where the potentiometers are positioned, if any.
Definition: osaConfiguration1394.h:51
osaRobot1394Configuration mConfiguration
Robot Configuration.
Definition: osaRobot1394.h:200
Definition: osaRobot1394.h:48
std::string mName
Definition: osaRobot1394.h:201
vctDoubleVec mPotsToEncodersTolerance
Definition: osaRobot1394.h:239
vctDoubleVec mBrakeBitsToCurrentOffsets
Definition: osaRobot1394.h:216
vctBoolVec mEncoderChannelsA
Definition: osaRobot1394.h:264
bool mPreviousPowerStatus
Definition: osaRobot1394.h:254
vctDoubleVec mEncoderVelocity
Definition: osaRobot1394.h:290
vctDoubleVec mBrakeBitsToCurrentScales
Definition: osaRobot1394.h:216
vctDoubleVec mBitsToDTimeScales
Definition: osaRobot1394.h:216
vctDoubleVec mBrakeCurrentCommandLimits
Definition: osaRobot1394.h:239
vctDoubleVec mBitsToVelocityOffsets
Definition: osaRobot1394.h:216
vctDoubleVec mVoltageToPositionScales
Definition: osaRobot1394.h:216
vctDoubleVec mBrakeCurrentToBitsOffsets
Definition: osaRobot1394.h:216
const vctDoubleVec & ActuatorTimeStamp(void) const
vctDoubleVec mBrakeCurrentToBitsScales
Definition: osaRobot1394.h:216
vctIntVec mEncoderDTimeBits
Definition: osaRobot1394.h:275
bool PowerStatus(void) const
void PotVoltageToPosition(const vctDoubleVec &voltages, vctDoubleVec &pos) const
void UsePotsForSafetyCheck(const bool &usePotsForSafetyCheck)
Use potentiometers for safety.
vctBoolVec mPotsToEncodersErrorFlag
Definition: osaRobot1394.h:264
void GetActuatorCurrentCommandLimits(vctDoubleVec &limits) const
size_t mPotsToEncodersViolationsCounter
Definition: osaRobot1394.h:325
vctDoubleVec mActuatorEffortCommand
Definition: osaRobot1394.h:290
vctDoubleVec mBitsToDTimeOffsets
Definition: osaRobot1394.h:216
osaRobot1394(const osaRobot1394Configuration &config, const size_t maxConsecutiveCurrentSafetyViolations=100, const size_t maxConsecutivePotsToEncodersViolations=200)
vctDoubleVec mBitsToDPositionScales
Definition: osaRobot1394.h:216
void WriteSafetyRelay(const bool &enabled)