orca-robotics INTRODUCTION Overview Download and Install Documentation REPOSITORY Interfaces Drivers Libraries Utilities Software Map DEVELOPER Dashboard PEOPLE Contributors Users Project Download Mailing lists
|
rmpdefs.h00001 /* 00002 * Orca-Robotics Project: Components for robotics 00003 * http://orca-robotics.sf.net/ 00004 * Copyright (c) 2004-2008 Alex Brooks, Alexei Makarenko, Tobias Kaupp 00005 * 00006 * This copy of Orca is licensed to you under the terms described in 00007 * the LICENSE file included in this distribution. 00008 * 00009 */ 00010 #ifndef ORCA2_SEGWAY_RMP_CONFIGURATION_H 00011 #define ORCA2_SEGWAY_RMP_CONFIGURATION_H 00012 00013 #include <string> 00014 00015 // MESSAGE ID'S 00016 00017 // Segway->CPU messages 00018 // warning: Segway manual refers to them as Message 1-8 00019 // we call them Message 0-7 to synch with 0x0400-407 00020 // 0x0400 = 1024 00021 #define RMP_CAN_ID_MSG0 0x0400 00022 #define RMP_CAN_ID_MSG1 0x0401 00023 #define RMP_CAN_ID_MSG2 0x0402 00024 #define RMP_CAN_ID_MSG3 0x0403 00025 #define RMP_CAN_ID_MSG4 0x0404 00026 #define RMP_CAN_ID_MSG5 0x0405 00027 #define RMP_CAN_ID_MSG6 0x0406 00028 #define RMP_CAN_ID_MSG7 0x0407 00029 00030 // CPU->Segway message 00031 #define RMP_CAN_ID_SHUTDOWN 0x0412 00032 00033 // CPU->Segway message 00034 #define RMP_CAN_ID_COMMAND 0x0413 00035 00036 // CU->UI: CU Status message 00037 #define RMP_CAN_ID_STATUS 0x0680 00038 00039 // UI->CU: RMP Heartbeat message 00040 #define RMP_CAN_ID_HEARTBEAT 0x0688 00041 00042 // DATA MASKS 00043 00044 // Mask for user interface battery voltage in the heartbeat message. 00045 #define RMP_CAN_MASK_HEARTBEAT_UIBAT_VOLTAGE 0x03F0 00046 00047 // Mask for user interface battery status in the heartbeat message. 00048 #define RMP_CAN_MASK_HEARTBEAT_UIBAT_STATUS 0xC000 00049 00050 // from table: Bitfield for Reset Integrators, see sec.2.2.2 00051 #define RMP_CAN_RESET_RIGHT 0x01 00052 #define RMP_CAN_RESET_LEFT 0x02 00053 #define RMP_CAN_RESET_YAW 0x04 00054 #define RMP_CAN_RESET_FOREAFT 0x08 00055 #define RMP_CAN_RESET_ALL (RMP_CAN_RESET_RIGHT | \ 00056 RMP_CAN_RESET_LEFT | \ 00057 RMP_CAN_RESET_YAW | \ 00058 RMP_CAN_RESET_FOREAFT) 00059 00060 // CU STATUS WORD DEFINITIONS, see sec.2.4.1 00061 #define WORD1_SAFETY_SHUTDOWN_1 0x0001 00062 #define WORD1_SAFETY_SHUTDOWN_1_STRING "Safety Shutdown, type 1" 00063 #define WORD1_NOT_USED_0002 0x0002 00064 #define WORD1_NOT_USED_0002_STRING "Not Used" 00065 #define WORD1_SAFETY_SHUTDOWN_2 0x0004 00066 #define WORD1_SAFETY_SHUTDOWN_2_STRING "Safety Shutdown, type 2" 00067 #define WORD1_DISABLE_RESPONSE 0x0008 00068 #define WORD1_DISABLE_RESPONSE_STRING "Disable Response" 00069 #define WORD1_SPEED_LIMIT_4MPH 0x0010 00070 #define WORD1_SPEED_LIMIT_4MPH_STRING "Speed Limit to 4 mph" 00071 #define WORD1_SPEED_LIMIT_0MPH 0x0020 00072 #define WORD1_SPEED_LIMIT_0MPH_STRING "Speed Limit to 0 mph" 00073 #define WORD1_SYSTEM_INTEGRITY_FAULT 0x0040 00074 #define WORD1_SYSTEM_INTEGRITY_FAULT_STRING "System Integrity Fault" 00075 #define WORD1_MOTORS_ENABLED 0x0080 00076 #define WORD1_MOTORS_ENABLED_STRING "Motors Enabled" 00077 #define WORD1_BALANCE_MODE 0x0100 00078 #define WORD1_BALANCE_MODE_STRING "Balance Mode" 00079 #define WORD1_YAW_TRANSIENT_FLAG 0x0200 00080 #define WORD1_YAW_TRANSIENT_FLAG_STRING "Yaw Transient Flag" 00081 #define WORD1_EMPTY_BATTERY_HAZARD 0x0400 00082 #define WORD1_EMPTY_BATTERY_HAZARD_STRING "Empty Battery Hazard" 00083 #define WORD1_NOT_USED_0800 0x0800 00084 #define WORD1_NOT_USED_0800_STRING "Not Used" 00085 #define WORD1_WHEEL_SLIP_FLAG 0x1000 00086 #define WORD1_WHEEL_SLIP_FLAG_STRING "Wheel Slip Flag" 00087 #define WORD1_MOTOR_FEEDBACK_FAULT 0x2000 00088 #define WORD1_MOTOR_FEEDBACK_FAULT_STRING "Motor Feedback Fault" 00089 #define WORD1_LOW_BATTRY_HAZARD 0x4000 00090 #define WORD1_LOW_BATTRY_HAZARD_STRING "Low Battery Hazard" 00091 #define WORD1_NOT_USED_8000 0x8000 00092 #define WORD1_NOT_USED_8000_STRING "Not Used" 00093 00094 00095 #define WORD2_FOREAFT_PITCH_ANGLE_LIMIT_A 0x0001 00096 #define WORD2_FOREAFT_PITCH_ANGLE_LIMIT_A_STRING "Fore/Aft Pitch Angle Limit Exceeded (A)" 00097 #define WORD2_ESTOP_SWITCH_OPEN_A 0x0002 00098 #define WORD2_ESTOP_SWITCH_OPEN_A_STRING "E-Stop Switch Open (A)" 00099 #define WORD2_POSITION_ERROR_LIMIT_A 0x0004 00100 #define WORD2_POSITION_ERROR_LIMIT_A_STRING "Position Error Limit Exceeded (A)" 00101 #define WORD2_MAX_VELOCITY_A 0x0008 00102 #define WORD2_MAX_VELOCITY_A_STRING "Maximum Velocity Exceeded (A)" 00103 #define WORD2_BATTERY_EMPTY_A 0x0010 00104 #define WORD2_BATTERY_EMPTY_A_STRING "Battery Empty (A)" 00105 #define WORD2_BATTERY_TEMP_LIMIT_A 0x0020 00106 #define WORD2_BATTERY_TEMP_LIMIT_A_STRING "Battery Temperature Out of Range (A)" 00107 #define WORD2_ROLL_ANGLE_LIMIT_A 0x0040 00108 #define WORD2_ROLL_ANGLE_LIMIT_A_STRING "Roll Angle Limit Exceeded (A)" 00109 #define WORD2_LOW_BATTERY_BUS_VOLTAGE_A 0x0080 00110 #define WORD2_LOW_BATTERY_BUS_VOLTAGE_A_STRING "Low Battery Bus Voltage (A)" 00111 #define WORD2_FOREAFT_PITCH_ANGLE_LIMIT_B 0x0100 00112 #define WORD2_FOREAFT_PITCH_ANGLE_LIMIT_B_STRING "Fore/Aft Pitch Angle Limit Exceeded (B)" 00113 #define WORD2_ESTOP_SWITCH_OPEN_B 0x0200 00114 #define WORD2_ESTOP_SWITCH_OPEN_B_STRING "E-Stop Switch Open (B)" 00115 #define WORD2_POSITION_ERROR_LIMIT_B 0x0400 00116 #define WORD2_POSITION_ERROR_LIMIT_B_STRING "Position Error Limit Exceeded (B)" 00117 #define WORD2_MAX_VELOCITY_B 0x0800 00118 #define WORD2_MAX_VELOCITY_B_STRING "Maximum Velocity Exceeded (B)" 00119 #define WORD2_BATTERY_EMPTY_B 0x1000 00120 #define WORD2_BATTERY_EMPTY_B_STRING "Battery Empty (B)" 00121 #define WORD2_BATTERY_TEMP_LIMIT_B 0x2000 00122 #define WORD2_BATTERY_TEMP_LIMIT_B_STRING "Battery Temperature Out of Range (B)" 00123 #define WORD2_ROLL_ANGLE_LIMIT_B 0x4000 00124 #define WORD2_ROLL_ANGLE_LIMIT_B_STRING "Roll Angle Limit Exceeded (B)" 00125 #define WORD2_LOW_BATTERY_BUS_VOLTAGE_B 0x8000 00126 #define WORD2_LOW_BATTERY_BUS_VOLTAGE_B_STRING "Low Battery Bus Voltage (B)" 00127 00128 // gain schedule for the balance controller 00129 #define RMP_GAIN_SCHEDULE_NORMAL 0 00130 #define RMP_GAIN_SCHEDULE_TALL 1 00131 #define RMP_GAIN_SCHEDULE_HEAVY 2 00132 00133 // unit conversions from Data Reference, see sec.4 00134 00135 // different models 00136 #define RMP_COUNT_PER_M_RMP50 40181.0 00137 #define RMP_COUNT_PER_M_RMP100 40181.0 00138 #define RMP_COUNT_PER_M_RMP200 33215.0 00139 #define RMP_COUNT_PER_M_RMP400 33215.0 00140 00141 #define RMP_COUNT_PER_M_PER_S_RMP50 401.0 00142 #define RMP_COUNT_PER_M_PER_S_RMP100 401.0 00143 #define RMP_COUNT_PER_M_PER_S_RMP200 332.0 00144 #define RMP_COUNT_PER_M_PER_S_RMP400 332.0 00145 00146 #define RMP_COUNT_PER_DEG 7.8 00147 #define RMP_COUNT_PER_DEG_PER_S 7.8 00148 #define RMP_COUNT_PER_DEG_PER_SS 7.8 00149 #define RMP_COUNT_PER_RAD 446.9071 00150 #define RMP_COUNT_PER_RAD_PER_S 446.9071 00151 #define RMP_COUNT_PER_RAD_PER_SS 446.9071 00152 // This is different from rotation and depends on geometry 00153 #define RMP_COUNT_PER_REV_RMP50 117031.0 00154 #define RMP_COUNT_PER_REV_RMP100 117031.0 00155 #define RMP_COUNT_PER_REV_RMP200 112644.0 00156 #define RMP_COUNT_PER_REV_RMP400 112644.0 00157 00158 #define RMP_MAX_LATERAL_ACCELERATION 0.5*9.81 00159 #define RMP_MIN_SPEED_COUNTS_FOR_LATERAL_ACCEL_MODEL 518 00160 00161 // main (CU) battery voltage 00162 #define RMP_BASE_COUNT_PER_VOLT 4.0 00163 00164 // user interface battery voltage: volts=offset + n*counts 00165 #define RMP_UI_OFFSET 1.4 00166 #define RMP_UI_COEFF 0.0125 00167 // user interface battery status: low battery warning 00168 #define RMP_UI_LOW_WARNING 0x80 00169 // user interface battery status: empty battery shutdown 00170 #define RMP_UI_EMPTY_SHUTDOWN 0x40 00171 00172 // motor torque 00173 #define RMP_COUNT_PER_NM_RMP50 1463.0 00174 #define RMP_COUNT_PER_NM_RMP100 1463.0 00175 #define RMP_COUNT_PER_NM_RMP200 1094.0 00176 #define RMP_COUNT_PER_NM_RMP400 1094.0 00177 #define RMP_SEC_PER_FRAME 0.01 00178 00179 // limits 00180 00181 // from page 7 of the manual 00182 #define RMP_MAX_TRANS_VEL_COUNT 1176 00183 // This is for the latest ACFR-only firmware version 00184 #define RMP_MAX_ROT_VEL_COUNT 562 00185 // This is for the standard firmware (as of Feb 2008) 00186 // #define RMP_MAX_ROT_VEL_COUNT 1024 00187 00188 #define RMP_MAX_ROT_VEL_RAD_PER_S M_PI 00189 #define RMP_COUNT_PER_RAD_PER_S_CMD (RMP_MAX_ROT_VEL_COUNT/RMP_MAX_ROT_VEL_RAD_PER_S) 00190 00191 // minimum powerbase (CU) battery voltage (V) 00192 #define RMP_BASE_MIN_VOLTAGE 66.0 00193 // minimum user interface (UI) battery voltage (V) 00194 #define RMP_UI_MIN_VOLTAGE 6.0 00195 00196 // maximum time without incoming commands [s] 00197 #define RMP_COMMAND_TIMEOUT 0.4 00198 00199 // misc 00200 #define RMP_GEOM_WHEEL_SEP 0.54 00201 00202 #define RMP_CAN_DROPPED_PACKET 0x5A5A 00203 00204 namespace segwayrmpacfr { 00205 00206 enum RmpModel { 00207 RmpModel_50, 00208 RmpModel_100, 00209 RmpModel_200, 00210 RmpModel_400 00211 }; 00212 std::string toString( RmpModel model ); 00213 00214 enum OperationalMode { 00215 OperationalModeDisabled=0, 00216 OperationalModeTractor=1, 00217 OperationalModeBalance=2 00218 }; 00219 00220 enum GainSchedule { 00221 GainScheduleNormal=0, 00222 GainScheduleTall=1, 00223 GainScheduleHeavy=2 00224 }; 00225 00226 enum BalanceLockout 00227 { 00228 BalanceAllowed=0, 00229 BalanceNotAllowed=1 00230 }; 00231 00232 enum ConfigurationCommand { 00233 ConfigutationCommandNone=0, 00234 ConfigurationCommandSetMaxVelocityScale=10, 00235 ConfigurationCommandSetMaxAccelerationScale=11, 00236 ConfigurationCommandSetMaxTurnrateScale=12, 00237 ConfigurationCommandSetGainSchedule=13, 00238 ConfigurationCommandSetCurrentLimitScale=14, 00239 ConfigurationCommandSetBalanceModeLockout=15, 00240 ConfigurationCommandSetOperationalMode=16, 00241 ConfigurationCommandResetIntegrators=50 00242 }; 00243 std::string toString(ConfigurationCommand c); 00244 00245 enum StatusFlag { 00246 // General Flags 00247 StatusFlagSafetyShutdownType1, 00248 StatusFlagSafetyShutdownType2, 00249 StatusFlagDisableResponse, 00250 StatusFlagSpeedLimitTo4Mph, 00251 StatusFlagSpeedLimitTo0Mph, 00252 StatusFlagSystemIntegrityFault, 00253 StatusFlagMotorsEnabled, 00254 StatusFlagBalanceMode, 00255 StatusFlagYawTransient, 00256 StatusFlagEmptyBatteryHazard, 00257 StatusFlagWheelSlip, 00258 StatusFlagMotorFeedbackFault, 00259 StatusFlagLowBatteryHazard, 00260 00261 // Flags for side A 00262 StatusFlagForeAftPitchAngleLimitExceededA, 00263 StatusFlagEStopSwitchOpenA, 00264 StatusFlagPositionErrorLimitExceededA, 00265 StatusFlagMaxVelocityExceededA, 00266 StatusFlagBatteryEmptyA, 00267 StatusFlagBatteryTemperatureOutOfRangeA, 00268 StatusFlagRollAngleLimitExceededA, 00269 StatusFlagLowBatteryBusVoltageA, 00270 00271 // Flags for side B 00272 StatusFlagForeAftPitchAngleLimitExceededB, 00273 StatusFlagEStopSwitchOpenB, 00274 StatusFlagPositionErrorLimitExceededB, 00275 StatusFlagMaxVelocityExceededB, 00276 StatusFlagBatteryEmptyB, 00277 StatusFlagBatteryTemperatureOutOfRangeB, 00278 StatusFlagRollAngleLimitExceededB, 00279 StatusFlagLowBatteryBusVoltageB 00280 }; 00281 std::string toString(StatusFlag s); 00282 00283 } 00284 00285 #endif |
Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)