Laelaps  2.3.5
RoadNarrows Robotics Small Outdoor Mobile Robot Project
laeSysDev.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////////////
2 //
3 // Package: Laelaps
4 //
5 // File: laeSysDev.h
6 //
7 /*! \file
8  *
9  * \brief Laelaps system devices.
10  *
11  * \author Robin Knight (robin.knight@roadnarrows.com)
12  *
13  * \par Copyright
14  * \h_copy 2015-2017. RoadNarrows LLC.\n
15  * http://www.roadnarrows.com\n
16  * All Rights Reserved
17  */
18 /*
19  * @EulaBegin@
20  *
21  * Unless otherwise stated explicitly, all materials contained are copyrighted
22  * and may not be used without RoadNarrows LLC's written consent,
23  * except as provided in these terms and conditions or in the copyright
24  * notice (documents and software) or other proprietary notice provided with
25  * the relevant materials.
26  *
27  * IN NO EVENT SHALL THE AUTHOR, ROADNARROWS LLC, OR ANY
28  * MEMBERS/EMPLOYEES/CONTRACTORS OF ROADNARROWS OR DISTRIBUTORS OF THIS SOFTWARE
29  * BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
30  * CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
31  * DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN
32  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  *
34  * THE AUTHORS AND ROADNARROWS LLC SPECIFICALLY DISCLAIM ANY WARRANTIES,
35  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
36  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN
37  * "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO
38  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
39  *
40  * @EulaEnd@
41  */
42 ////////////////////////////////////////////////////////////////////////////////
43 
44 #ifndef _LAE_SYS_DEV_H
45 #define _LAE_SYS_DEV_H
46 
47 #include "rnr/rnrconfig.h"
48 
49 #include "Laelaps/laelaps.h"
50 #include "Laelaps/laeUtils.h"
51 
52 // hardware (except motors)
53 /*
54 #include "Laelaps/laeI2C.h"
55 #include "Laelaps/laeI2CMux.h"
56 #include "Laelaps/laeWatchDog.h"
57 #include "Laelaps/laeVL6180.h"
58 #include "Laelaps/laeImu.h"
59 #include "Laelaps/laeCams.h"
60 */
61 
62 /*!
63  * \brief The \h_laelaps namespace encapsulates all \h_laelaps related
64  * constructs.
65  */
66 #ifndef SWIG
67 namespace laelaps
68 {
69 #endif // SWIG
70 
71  // ---------------------------------------------------------------------------
72  // Devices
73 
74  //
75  // Motor controllers serial default device name.
76  //
77  #ifdef LAE_DEV_MOTOR_CTLRS
78  const char* const LaeDevMotorCtlrs = LAE_DEV_MOTOR_CTLRS;
79  ///< motor controllers' serial device name
80  #else
81  const char* const LaeDevMotorCtlrs = "/dev/ttySAC0";
82  ///< odroid motor controllers' serial device name
83  #endif
84 
85  //
86  // Motor controllers serial default baud rate.
87  //
88  #ifdef LAE_BAUDRATE_MOTOR_CTLRS
89  const int LaeBaudRateMotorCtlrs = LAE_BAUDRATE_MOTOR_CTLRS;
90  ///< motor controller serial baudrate
91  #else
92  const int LaeBaudRateMotorCtlrs = 115200;
93  ///< motor controller serial baudrate
94  #endif
95 
96  //
97  // I2C default device names.
98  //
99  // Note 1:
100  // The Odroid comes with 2 available I2C interfaces through the expansion
101  // pins. The hardware I2C and the bit-banged software GPIO I2C.
102  // HW SW
103  // Kernel/Ubuntu 3.10.z/trusty /dev/i2c-3 /dev/12c-10
104  // Kernel/Ubuntu 3.10.z/xenial /dev/i2c-4 /dev/i2c-10
105  //
106  // Note 2:
107  // The Laelaps uses the hardware I2C.
108  //
109  // Note 3:
110  // The Odroid documentation says i2c-1 rather than i2c-3. We have never found
111  // this to be true.
112  //
113  // Note 4.
114  // The Laelaps udev rules will make symbolic links to the hardware I2C for
115  // the primary and secondary.
116  //
117  #ifdef LAE_DEV_I2C_0
118  const char* const LaeDevI2C_0 = LAE_DEV_I2C; ///< \h_i2c primary
119  #else
120  const char* const LaeDevI2C_0 = "/dev/i2c-laelaps"; ///< \h_i2c primary
121  #endif
122  const char* const LaeDevI2C_1 = "/dev/i2c-laelaps-alt"; ///< \h_i2c secondary
123  const char* const LaeDevI2C_2 = "/dev/i2c-1"; ///< \h_i2c tertiary
124 
125  //
126  // Front USB camera.
127  //
128  // Note: Makes use of udev rule to make symbolic link to device.
129  //
130  #ifdef LAE_DEV_FCAM
131  const char* const LaeDevFCam = LAE_DEV_FCAM; ///< front cam USB device name
132  #else
133  const char* const LaeDevFCam = "/dev/fcam";
134  ///< front cam USB udev linked name
135  #endif
136 
137  //
138  // IMU USB serial default device name.
139  //
140  // Note: Makes use of udev rule to make symbolic link to device.
141  //
142  #ifdef LAE_DEV_IMU
143  const char* const LaeDevIMU = LAE_DEV_IMU; ///< IMU USB device name
144  #else
145  const char* const LaeDevIMU = "/dev/imu"; ///< IMU USB udev linked name
146  #endif
147 
148  //
149  // IMU serial default baud rate.
150  //
151  #ifdef LAE_BAUDRATE_IMU
152  const int LaeBaudRateIMU = LAE_BAUDRATE_IMU; ///< IMU serial baudrate
153  #else
154  const int LaeBaudRateIMU = 115200; ///< IMU serial baudrate
155  #endif
156 
157  //
158  // Dynabus USB serial default device name.
159  //
160  // Note: Makes use of udev rule to make symbolic link to device.
161  //
162  #ifdef LAE_DEV_DYNABUS
163  const char* const LaeDevDynabus = LAE_DEV_DYNABUS;
164  ///< dynabus USB device name
165  #else
166  const char* const LaeDevDynabus = "/dev/dynabus";
167  ///< dynabus USB udev linked name
168  #endif
169 
170  //
171  // Dynabus default baud rate.
172  //
173  #ifdef LAE_BAUDRATE_DYNABUS
174  const int LaeBaudRateDynabus = LAE_BAUDRATE_DYNABUS; ///< dynabus baudrate
175  #else
176  const int LaeBaudRateDynabus = 1000000; ///< dynabus baudrate
177  #endif
178 
179 
180  // ---------------------------------------------------------------------------
181  // GPIOs
182 
183  //
184  // Motor controller chip select.
185  //
186  // Deprecated.
187  //
188  // Expansion Pin: 4 (RTS)
189  // States: 0 = select rear motor controller
190  // 1 = select front motor controller
191  //
192  const int LaeGpioMotorCtlrCs = 173; ///< motor controler chip select gpio
193 
194  //
195  // Motor controllers enable.
196  //
197  // Expansion Pin: 5 (CTS)
198  // States: 0 = disable power to motor controllers
199  // 1 = enable power to motor controllers
200  //
201  const int LaeGpioMotorCtlrEn = 174; ///< motor controler enable gpio
202 
203  //
204  // Watchdog reset.
205  //
206  // Expansion Pin: 10 (SPI_CLK)
207  // States: 1 to 0 = edge trigger to reset Arduino sub-processor
208  //
209  const int LaeGpioWdReset = 189; ///< Watchdog subprocessor reset gpio
210 
211  //
212  // I2C multiplexer reset.
213  //
214  // Expansion Pin: 11 (SPI_CSN)
215  // States: 1 to 0 = edge trigger to reset I2C.
216  //
217  const int LaeGpioI2CMuxReset = 190; ///< I2C multiplexer reset gpio
218 
219  //
220  // Top deck auxilliary battery power out enable.
221  //
222  // Expansion Pin: 9 (SPI_MISO)
223  // States: 0 = disable deck battery power.
224  // 1 = enable deck battery power.
225  //
226  const int LaeGpioAuxBattEn = 191; ///< auxilliary battery enable gpio
227 
228  //
229  // Top deck auxilliary regulated 5V power out enable.
230  //
231  // Expansion Pin: 7 (SPI_MOISO)
232  // States: 0 = disable deck regulated 5V power.
233  // 1 = enable deck regulated 5V power.
234  //
235  const int LaeGpioAux5VEn = 192; ///< Deck regulated 5V enable gpio
236 
237 
238  // ---------------------------------------------------------------------------
239  // Time of Flight Sensor Layout
240  //
241  // The Laelaps comes equipped, by default, with 3 front facing sensors. An
242  // add-on pack includes 5 more sensors: 2 on the sides, 3 rear facing.
243 
244  const int ToFSensorMaxNumOf = 8; ///< maximum number of ToF sensors
245  const int ToFSensorStdNumOf = 3; ///< max num of ToF sensors for std option
246 
247  //
248  // Sensor multiplexed channel order (CCW from forward).
249  //
250  const int ToFSensor0Chan = 0; ///< sensor 0 channel (bit) number
251  const int ToFSensor1Chan = 1; ///< sensor 1 channel (bit) number
252  const int ToFSensor2Chan = 2; ///< sensor 2 channel (bit) number
253  const int ToFSensor3Chan = 3; ///< sensor 3 channel (bit) number
254  const int ToFSensor4Chan = 4; ///< sensor 4 channel (bit) number
255  const int ToFSensor5Chan = 5; ///< sensor 5 channel (bit) number
256  const int ToFSensor6Chan = 6; ///< sensor 6 channel (bit) number
257  const int ToFSensor7Chan = 7; ///< sensor 7 channel (bit) number
258 
259  //
260  // Proximity beam direction (CCW from forward).
261  //
262  const double ToFSensor0Dir = degToRad(0.0); ///< sensor 0 direction
263  const double ToFSensor1Dir = degToRad(10.0); ///< sensor 1 direction
264  const double ToFSensor2Dir = degToRad(90.0); ///< sensor 2 direction
265  const double ToFSensor3Dir = degToRad(170.0); ///< sensor 3 direction
266  const double ToFSensor4Dir = degToRad(180.0); ///< sensor 4 direction
267  const double ToFSensor5Dir = degToRad(190.0); ///< sensor 5 direction
268  const double ToFSensor6Dir = degToRad(270.0); ///< sensor 6 direction
269  const double ToFSensor7Dir = degToRad(350.0); ///< sensor 7 direction
270 
271  //
272  // Sensor deadzones. Sensed data in the deadzones are filtered out.
273  //
274  const double ToFSensor0Deadzone = 0.008; ///< sensor 0 8mm deadzone
275  const double ToFSensor1Deadzone = 0.0145; ///< sensor 1 14.5mm deadzone
276  const double ToFSensor2Deadzone = 0.008; ///< sensor 2 8mm deadzone
277  const double ToFSensor3Deadzone = 0.0145; ///< sensor 3 14.5mm deadzone
278  const double ToFSensor4Deadzone = 0.008; ///< sensor 4 8mm deadzone
279  const double ToFSensor5Deadzone = 0.0145; ///< sensor 5 14.5mm deadzone
280  const double ToFSensor6Deadzone = 0.008; ///< sensor 6 8mm deadzone
281  const double ToFSensor7Deadzone = 0.0145; ///< sensor 7 14.5mm deadzone
282 
283 #ifndef SWIG
284 } // namespace laelaps
285 #endif // SWIG
286 
287 
288 #endif // _LAE_SYS_DEV_H
const int LaeGpioMotorCtlrEn
motor controler enable gpio
Definition: laeSysDev.h:201
const double ToFSensor6Deadzone
sensor 6 8mm deadzone
Definition: laeSysDev.h:280
const int LaeGpioMotorCtlrCs
motor controler chip select gpio
Definition: laeSysDev.h:192
const double ToFSensor6Dir
sensor 6 direction
Definition: laeSysDev.h:268
const double ToFSensor4Deadzone
sensor 4 8mm deadzone
Definition: laeSysDev.h:278
const int LaeGpioWdReset
Watchdog subprocessor reset gpio.
Definition: laeSysDev.h:209
double degToRad(double d)
Convert degrees to radians.
Definition: laeUtils.h:124
const double ToFSensor7Dir
sensor 7 direction
Definition: laeSysDev.h:269
const char *const LaeDevDynabus
dynabus USB udev linked name
Definition: laeSysDev.h:166
const int LaeBaudRateMotorCtlrs
motor controller serial baudrate
Definition: laeSysDev.h:92
const double ToFSensor0Deadzone
sensor 0 8mm deadzone
Definition: laeSysDev.h:274
const int ToFSensorStdNumOf
max num of ToF sensors for std option
Definition: laeSysDev.h:245
const int ToFSensor7Chan
sensor 7 channel (bit) number
Definition: laeSysDev.h:257
const double ToFSensor4Dir
sensor 4 direction
Definition: laeSysDev.h:266
const int LaeBaudRateDynabus
dynabus baudrate
Definition: laeSysDev.h:176
const double ToFSensor5Deadzone
sensor 5 14.5mm deadzone
Definition: laeSysDev.h:279
const double ToFSensor1Deadzone
sensor 1 14.5mm deadzone
Definition: laeSysDev.h:275
const int LaeGpioAuxBattEn
auxilliary battery enable gpio
Definition: laeSysDev.h:226
const int ToFSensorMaxNumOf
maximum number of ToF sensors
Definition: laeSysDev.h:244
const double ToFSensor0Dir
sensor 0 direction
Definition: laeSysDev.h:262
const int ToFSensor1Chan
sensor 1 channel (bit) number
Definition: laeSysDev.h:251
const int ToFSensor2Chan
sensor 2 channel (bit) number
Definition: laeSysDev.h:252
const double ToFSensor2Deadzone
sensor 2 8mm deadzone
Definition: laeSysDev.h:276
const int ToFSensor6Chan
sensor 6 channel (bit) number
Definition: laeSysDev.h:256
const char *const LaeDevFCam
front cam USB udev linked name
Definition: laeSysDev.h:133
The <b><i>Laelaps</i></b> namespace encapsulates all <b><i>Laelaps</i></b> related constructs...
Definition: laeAlarms.h:64
const char *const LaeDevI2C_0
I2C primary.
Definition: laeSysDev.h:120
const int ToFSensor0Chan
sensor 0 channel (bit) number
Definition: laeSysDev.h:250
const double ToFSensor3Deadzone
sensor 3 14.5mm deadzone
Definition: laeSysDev.h:277
const char *const LaeDevI2C_2
I2C tertiary.
Definition: laeSysDev.h:123
const int ToFSensor5Chan
sensor 5 channel (bit) number
Definition: laeSysDev.h:255
Laelaps common utilities.
const int LaeBaudRateIMU
IMU serial baudrate.
Definition: laeSysDev.h:154
const char *const LaeDevIMU
IMU USB udev linked name.
Definition: laeSysDev.h:145
const int LaeGpioAux5VEn
Deck regulated 5V enable gpio.
Definition: laeSysDev.h:235
const char *const LaeDevI2C_1
I2C secondary.
Definition: laeSysDev.h:122
const double ToFSensor2Dir
sensor 2 direction
Definition: laeSysDev.h:264
const double ToFSensor7Deadzone
sensor 7 14.5mm deadzone
Definition: laeSysDev.h:281
const double ToFSensor1Dir
sensor 1 direction
Definition: laeSysDev.h:263
const double ToFSensor5Dir
sensor 5 direction
Definition: laeSysDev.h:267
const int ToFSensor3Chan
sensor 3 channel (bit) number
Definition: laeSysDev.h:253
const char *const LaeDevMotorCtlrs
odroid motor controllers&#39; serial device name
Definition: laeSysDev.h:81
const int ToFSensor4Chan
sensor 4 channel (bit) number
Definition: laeSysDev.h:254
const int LaeGpioI2CMuxReset
I2C multiplexer reset gpio.
Definition: laeSysDev.h:217
Top-level package include file.
const double ToFSensor3Dir
sensor 3 direction
Definition: laeSysDev.h:265