-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathREADME
231 lines (141 loc) · 8.23 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
ROS package for Phidgets devices
--------------------------------
By Bob Mottram
GPG ID: 0xEA982E38
GPG Fingerprint: D538 1159 CD7A 2F80 2F06 ABA0 0452 CC7C EA98 2E38
Currently supported devices
---------------------------
Accelerometer
Advanced Servo Controller
High Speed Encoder
Interface Kit (8/8/8)
Motor Control HC
Stepper Motor Controller
RFID reader
Text LCD display
IR Remote
LED controller
Spatial
PH Sensor
Installation
------------
1. Install phidgets drivers from
sudo apt-get install libusb-dev
http://www.phidgets.com/drivers.php
Make sure that you copy the udev rules file in order to enable
access to USB devices. You may need to reboot for this to
take effect.
2. Check out the code in your prefered directory
bzr branch lp:phidgets-ros-pkg
Rename the directory
mv phidgets-ros-pkg phidgets
3. Check out the sound_play package
svn co https://code.ros.org/svn/ros-pkg/stacks/sound_drivers/trunk/sound_play
4. Add the phidgets and sound_play directories to ROS_PACKAGE_PATH
Check the existing ROS path:
echo $ROS_PACKAGE_PATH
Copy the resulting string and then add the following to your ~/.bashrc
file with the phidgets directory appended to it:
export ROS_PACKAGE_PATH=<paste existing path>:<phidgets path>
Then save and run:
. ~/.bashrc
5. Make the package using
rosmake --pre-clean phidgets
Note that if this is the first time the package has been
made after installing ROS the compilation process may take
some considerable time.
6. Connect your Phidget devices, then run
rosrun phidgets manager
This should list all the connected devices and their serial numbers.
If you have multiple devices of the same type connected you may want
to take note of the serial numbers, which can be subsequently referenced.
Press CTRL-C to exit.
7. Run the ROS core server.
roscore
8. In a seperate shell, to run a ROS node for a given device:
rosrun phidgets <device> _serial:=<serial number>
For example, for the advanced servo controller:
rosrun phidgets advanced_servo _serial:=-1
Using -1 for the serial number will connect to the first device
of that type.
9. Then in another shell you can run the corresponding client.
For example,
rosrun phidgets advanced_servo_client
The client programs are only intended to be illustrative of how to
connect to a phidgets device and send or receive signals. You can
use the client source code as a guide to how to integrate Phidget
devices with your own ROS system.
Serial Numbers
--------------
Note that if you specify a serial number then the ROS topic changes accordingly.
So for example
phidgets/encoder
becomes
phidgets/encoder/<serial number>
So if you need to connect to a device with a specific serial number the client
code should be modified accordingly.
Joystick control of Motor control HC
------------------------------------
To control the motors using a joystick connected to sensor sockets 1 and 2 on the interface kit:
roscore
rosrun phidgets motor_control_hc _serial:=-1
rosrun phidgets interface_kit _serial:=-1
rosrun phidgets joystick _horizontalaxis:=1 _verticalaxis:=2 _horizontaldirection:=1 _verticaldirection:=1
rosrun sound_play soundplay_node.py
rosrun phidgets joystick_motor_control _enable:=true _speed:=30 _startbutton:=0 _stopbutton:=1
Note that if you wish to reverse the joystick axis directions set horizontaldirection and/or verticaldirection to -1.
The _startbutton and _stopbutton parameters are also optional. If these are set then the start button needs to be pressed before the joystick can be used to control the motors.
Alternatively an easier way to do this is to use the joystick_control launcher:
roslaunch phidgets joystick_control.launch
Joystick control of Servos
--------------------------
To control a pair of servos using a joystick:
roscore
rosrun phidgets advanced_servo _serial:=-1
rosrun phidgets interface_kit _serial:=-1
rosrun phidgets joystick _horizontalaxis:=1 _verticalaxis:=2 _horizontaldirection:=1 _verticaldirection:=1
rosrun phidgets joystick_servo_control _enable:=true _speed:=30
Note that if you wish to reverse the joystick axis directions set horizontaldirection and/or verticaldirection to -1.
Running an odometry server
--------------------------
For a differential drive robot using a couple of high speed encoder phidgets you can run an odometry server as follows:
roscore
rosrun phidgets high_speed_encoder __name:=encoder_left _serial:=<left encoder serial>
rosrun phidgets high_speed_encoder __name:=encoder_right _serial:=<right encoder serial>
rosrun phidgets odometry _serialleft:=<left encoder serial> _serialright:=<right encoder serial> _wheelbase:=400 _countspermmleft:=100 _countspermmright:=100 _verbose:=true
This will create a topic called "odom", of type nav_msgs::Odometry, which contains a pose estimate based upon the wheel odometry.
If you need to find out the serial numbers of the encoders then run:
rosrun phidgets manager
which will list all connected phidget devices and their serial numbers.
Alternatively an easier way to do this is to use the odometry launcher:
roslaunch phidgets odometry.launch
make sure that you change the serial numbers contained within odometry.launch to those used by your own system.
Odometry Calibration procedure
------------------------------
The number of counts per millimetre can be worked out knowing the encoder counts per revolution, gear ratio and wheel diameter. However, in practice the wheel diameter is not always exactly known and may vary due to wear and changes in contact point with the ground. Hence, it can be a good idea to calibrate the wheel odometry.
roslaunch phidgets joystick_control.launch
roslaunch phidgets odometry.launch
Joystick the robot forwards by some significant distance, for example one or two metres, then take a note of the counts for the left and right encoders. Measure the distance travelled as accurately as possible, then divide by the counts to obtain counts per millimetre, and update the odometry.launch script accordingly. There are separate counts per millimetre values for the left and right wheels, because wheel shape and diameter may not completely identical. The counts per millimetre value should always be positive.
Phidgets LIDAR
--------------
You can use a servo and one or more IR range sensor/s to create a low cost LIDAR system. This is intended for use with the following sensor types:
Name Index
Sharp GP2Y0A700K0F 0
Sharp GP2Y0A2JYK 1
Sharp GP2D120 2
Sharp GP2D12 3
Sharp GP2Y0A02YK 4
To run the LIDAR node:
roscore
rosrun phidgets advanced_servo _serial:=-1
rosrun phidgets interface_kit _serial:=-1
rosrun phidgets lidar _panservo:=0 _sensor:=0 _sensortype:=0 _left:=100 _right:=160 _leftdegrees:=-45 _rightdegrees:=45 _cycletime:=4 _speed:=30
rosrun phidgets lidar_client (an example client subscribing to the LIDAR messages)
Where panservo is the servo index, sensor is the sensor index on the interface kit, sensortype is the index of the sensor type (see above) and left and right are servo positions. Cycletime is the scan time in seconds. You will need to experiment with the speed and cycletime parameters, since the speed is given in arbitrary units used by the phidgets servo controller.
It is also possible to use multiple IR sensors, like this:
rosrun phidgets lidar _panservo:=0 _sensor:=0 _sensortype:=0 _sensors:=4 _left:=100 _right:=160 _leftdegrees:=-45 _rightdegrees:=45 _cycletime:=4 _speed:=30
Where _sensors denotes the number of sensors used. These must be adjacent on the interface kit, begining with the index given by the _sensor parameter. Separate sensor_msgs::LaserScan messages will be published for each sensor in a topic called phidgets/lidar. Each sensor is assigned to a frame ID of lidar_sensor_<sensor index>
Alternatively an easier way to do this is to use the lidar launcher:
roslaunch phidgets lidar.launch
You may need to edit the contents of lidar.launch to match the setup of your system.