From 4ad20eff28322c73983703c99eb43fdfcda5b0af Mon Sep 17 00:00:00 2001 From: Kees Smit Date: Thu, 21 Nov 2019 15:54:40 +0100 Subject: [PATCH] 191121 - Update for Pixy2 --- docs/tutorials/using-pixy-camera.md | 476 ++++++++++++++++-------- images/pixy-tutorial/pixymon-config.png | Bin 0 -> 41299 bytes 2 files changed, 329 insertions(+), 147 deletions(-) create mode 100644 images/pixy-tutorial/pixymon-config.png diff --git a/docs/tutorials/using-pixy-camera.md b/docs/tutorials/using-pixy-camera.md index e35ffb1c4..4edc92256 100644 --- a/docs/tutorials/using-pixy-camera.md +++ b/docs/tutorials/using-pixy-camera.md @@ -1,5 +1,5 @@ --- -title: Using the CMUcam5 Pixy for LEGO Mindstorms +title: Using Pixy/Pixy2 camera for LEGO Mindstorms group: hardware-extras author: "@KWSmit" --- @@ -9,57 +9,83 @@ author: "@KWSmit" ## Intro -The CMUcam5 Pixy camera is available in a version designed for -LEGO Mindstorms. In this tutorial we explain how to use it with ev3dev -and python. +Both versions of the Pixy camera, Pixy and Pixy2, are available in a special +LEGO version. In this tutorial we explain how to use them on ev3dev and using +Python. -General information about Pixy for LEGO Mindstorms can be found on -Charmed Lab's [wiki-page](https://docs.pixycam.com/wiki/doku.php?id=wiki:v1:lego_wiki). +General information about Pixy/Pixy2 for LEGO Mindstorms can be found on +Charmed Lab's [wiki-page](https://docs.pixycam.com). -## What you need +On ev3dev there is a difference in using Pixy or Pixy2: ev3dev does contain +a driver for Pixy, but not for Pixy2. But it's easy to use Pixy2 by setting +up direct I2C communication between the EV3 and Pixy2. Both methods will be +explained. At the end of this tutorial you will find a link to a Github +repository containing more detailed information and more examples +(including the linetracking functionality of Pixy2). -* LEGO Mindstorms EV3. -* CMUcam5 Pixy for LEGO Mindstorms, connected to the EV3 with the cable -delivered with your camera. If you have a regular version of CMUcam5 Pixy -you will need a special Pixy adapter for EV3. +## What you need -{% include /style/begin-panel.html type="info" heading="Note" %} -The Pixy camera comes with its own tool: PixyMon. This tool helps -you to set the signatures (objects you want Pixy to detect). To use this tool -you need to connect the camera directly to your PC by using a mini USB cable. -For this you can use the USB cable of your EV3. Beware that when PixyMon -is running on your PC (and the camera is plugged in to your PC), its values -are not updated to the EV3. So before starting your script be sure PixyMon -is not running!{% include /style/end-panel.html %} +* LEGO Mindstorms EV3 running on ev3dev. +* Pixy for LEGO Mindstorms or Pixy2 for LEGO Mindstorms. The camera is +connected to the EV3 with the cable delivered with your Pixy or Pixy2. + +{% include /style/begin-panel.html type="info" heading="Notes" %} + +* The camera comes with its own tool: PixyMon. This tool helps +you to set the signatures (objects you want Pixy/Pixy2 to detect). +To use this tool you need to connect the camera directly to your PC +by using a mini USB cable. When using Pixy, be aware that when PixyMon +is running on your PC and the camera is plugged in to your PC, its +values are not updated to the EV3. So before starting your script on +the EV3 be sure PixyMon is not running! +**This relates to Pixy only, not to Pixy2!** +* To run the scripts from Brickman, be sure it's executable. To make it +executable run ```chmod +x ``` once in the terminal. Also don't forget +the shebang ```#!/usr/bin/env python3``` in the first line of your script. +* When running the scripts in this tutorial from an SSH-terminal, run the script +with the command `brickrun -- python3 your-sript.py`. Reason is that +`brickrun` will take care of switching between consoles to prevent +the userinterface of Brickman to reappear at any time when your script is +running. +{% include /style/end-panel.html %} -## Connecting to the camera and reading data +## Using Pixy for LEGO Mindstorms In python use the `Sensor` class to connect to the Pixy camera: ```python -from ev3dev.ev3 import * -pixy = Sensor(address=INPUT_1) -assert pixy.connected, "Error while connecting Pixy camera to port1" -``` +from time import sleep -In this statement it is assumed the camera is connected to input port 1. -It's recommended to use the ```assert``` statement: when the connection fails -the program ends with a meaningful error message. +from ev3dev2.sensor import Sensor, INPUT_1 +from ev3dev2.port import LegoPort + +# Set LEGO port for Pixy on input port 1 +in1 = LegoPort(INPUT_1) +in1.mode = 'auto' +# Wait 2 secs for the port to get ready +sleep(2) + +# Connect Pixy camera +pixy = Sensor(INPUT_1) +``` + +In this example it is assumed the camera is connected to input port 1. Next set the mode for the camera: ```python -pixy.mode = 'ALL' +# Set mode to detect signature 1 only +pixy.mode = 'SIG1' ``` The Pixy camera has the following modes: -* ALL: the camera searches for all signatures you've set for it. -* SIGn: the camera searches for signature #n (n=1 to 7). +* `ALL`: the camera searches for all signatures you've set for it. +* `SIGn`: the camera searches for signature #n (n=1 to 7). The data which you retrieve from the camera depends on the camera mode. You can find detailed information on [this page](http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/sensor_data.html#pixy-lego). -We will explain it to you with some examples. +We will explain it to you with a simple example. When the mode is set to ```ALL```, you can retrieve data as follows: @@ -82,149 +108,305 @@ w = pixy.value(3) # Width of the largest SIG1-object h = pixy.value(4) # Height of the largest SIG1-object ``` -Below are two practical examples. They are tested with the latest version of -ev3dev (as of 21 Dec 2016) and with CMUcam5 Pixy camera for LEGO Mindstorms. +### Example for Pixy - Display detected object on EV3-LCD -{% include /style/begin-panel.html type="info" heading="Note" %} -To run the scripts form Brickman, be sure it's executable. To make it -executable run ```chmod +x ``` once in the terminal. Also don't forget -the shebang ```#!/usr/bin/env python3``` in the first line of your script. -{% include /style/end-panel.html %} +```python +#!/usr/bin/env python3 +from time import sleep -## Example 1 - Display detected object on EV3-LCD +from ev3dev2.display import Display +from ev3dev2.sensor import Sensor, INPUT_1, INPUT_4 +from ev3dev2.sensor.lego import TouchSensor +from ev3dev2.port import LegoPort -This example uses an EV3 with a Pixy camera and a TouchSenor plugged in. -In this example the camera searches for objects with signature SIG1 -and displays the data graphically on the LCD of the EV3. It draws a -rectangle centered at the X and Y centroid coordinates with measured -width and height. End this script by pressing the TouchSensor. -{% include /style/begin-panel.html type="info" heading="Note" %} -When running this script from the SSH terminal, the Brickman display may -reappear at any time, momentarily or permanently. Furthermore, when the script -stops it may take a while to before the screen reverts back to the Brickman -interface. To prevent this, follow these instructions: - -* Run ```sudo chvt 6``` before starting the script. This will clear the display. -For this command you need the password for robot, which is 'maker' by default. -* Run your script (once or several times). -* Run ```sudo chvt 1``` to bring back the interface of Brickman. -{% include /style/end-panel.html %} +# EV3 Display +lcd = Display() -``` -#!/usr/bin/env python3 -from ev3dev.ev3 import * +# Connect TouchSensor +ts = TouchSensor(INPUT_4) -lcd = Screen() +# Set LEGO port for Pixy on input port 1 +in1 = LegoPort(INPUT_1) +in1.mode = 'auto' +# Wait 2 secs for the port to get ready +sleep(2) # Connect Pixy camera -pixy = Sensor(address=INPUT_1) -assert pixy.connected, "Connecting PixyCam" +pixy = Sensor(INPUT_1) -# Connect TouchSensor -ts = TouchSensor(address=INPUT_4) -assert ts.connected, "Connecting TouchSensor" - -# Set mode +# Set mode to detect signature 1 only pixy.mode = 'SIG1' +# Read and display data until TouchSensor is pressed while not ts.value(): - lcd.clear() - if pixy.value(0) != 0: # Object with SIG1 detected - x = pixy.value(1)  - y = pixy.value(2) - w = pixy.value(3) - h = pixy.value(4) - dx = int(w/2) # Half of the width of the rectangle - dy = int(h/2)   # Half of the height of the rectangle - xb = x + int(w/2)  # X-coordinate of bottom-right corner - yb = y - int(h/2)  # Y-coordinate of the bottom-right corner - lcd.draw.rectangle((xa,ya,xb,yb), fill='black') + # Clear EV3 display + lcd.clear() + # Read values from Pixy + x = pixy.value(1) # X-coordinate of centerpoint of object + y = pixy.value(2) # Y-coordinate of centerpoint of object + w = pixy.value(3) # Width of rectangle around detected object + h = pixy.value(4) # Heigth of rectangle around detected object + # scale to resolution of EV3 display: + # Resolution Pixy while color tracking: (255x199) + # Resolution EV3 display: (178x128) + x *= 0.7 + y *= 0.6 + w *= 0.7 + h *= 0.6 + # Calculate reactangle to draw on EV3-display + dx = int(w/2) # Half of the width of the rectangle + dy = int(h/2) # Half of the height of the rectangle + xa = x - dx # X-coordinate of top-left corner + ya = y + dy # Y-coordinate of the top-left corner + xb = x + dx # X-coordinate of bottom-right corner + yb = y - dy # Y-coordinate of the bottom-right corner + # Draw rectangle on display + lcd.draw.rectangle((xa, ya, xb, yb), fill='black') + # Update display to show rectangle lcd.update() ``` +In this example Pixy is set to mode `SIG1`. The program continuously reads +data from the camera, until the TouchSensor is pressed. When valid data +is received, the program calculates the size and shape of the bouncing box +of the largest detected SIG1 object. Be aware that the resolution of the +Pixy camera and the resolution of the EV3 display are not the same. Pixy's +resolution while color tracking is (255x199) and EV3's resolution is +(178x128). This means you have to scale the values from the Pixy! +To update the bouncing box on the display, first the display needs to be +cleared and then the bouncing box can be redrawn. + This video shows this script running: {% include /util/youtube-embed.html youtube_video_id="b2LZpY1qbKE" %} -## Example 2 - Following an object +## Using Pixy2 for LEGO Mindstorms + +One important difference with the old Pixy is that you have to use Pixy2 +without a driver. An easy way to do this is by using the Python `smbus` +module for setting up direct I2C communication between the EV3 and +the Pixy2. + +First configure Pixy2 to communicate over I2C. For this you can use the +PixyMon tool that comes with Pixy2. Open the configure dialog and click on +the `Interface` tab. + +{% include /style/begin-panel.html type="info" heading="Note" %} +If you don't see the Interface tab, you're probably not running the right +firmware on the Pixy2 camera. Be sure to run the stock version, instead of +the LEGO version. See +[Pixy2 documentation](https://docs.pixycam.com/wiki/doku.php?id=wiki:v2:uploading_new_firmware) how to install firmware. +{% include /style/end-panel.html %} + +![Configure dialog in PixyMon](/images/pixy-tutorial/pixymon-config.png) + +Set `Data out port` to `I2C` and `I2C address` to `0x54` (or any other +address you like). + +In your Python script import the module `smbus`: + +```python +from smbus import SMBus +``` + +Next set the EV3 input port to `other-i2c`: + +```python +from time import sleep + +from ev3dev2.port import LegoPort +from ev3dev2.sensor import INPUT_1 + +# Set LEGO port for Pixy2 on input port 1 +in1 = LegoPort(INPUT_1) +in1.mode = 'other-i2c' +# Short wait for the port to get ready +sleep(0.5) +``` + +Define the I2C-bus: + +* for `INPUT_1`: `SMBus(3)` +* for `INPUT_2`: `SMBus(4)` +* for `INPUT_3`: `SMBus(5)` +* for `INPUT_4`: `SMBus(6)` + +Assume we're using port 1. Don't forget to use the same I2C-address as +configured on the Pixy2 (`0x54`): + + ```python + # Settings for I2C (SMBus(3) for INPUT_1) + bus = SMBus(3) + address = 0x54 +``` -This example uses an EV3 with Pixy camera, two LargeMotors and a TouchSensor. -The robot follows the object with signature SIG1. To stop the program the -user has to press the TouchSensor. +Now everything is set up to request and receive data form Pixy2. You can find +the serial protocol on the +[Pixy2 wiki](https://docs.pixycam.com/wiki/doku.php?id=wiki:v2:porting_guide#pixy2-serial-protocol-packet-reference). -This example uses a simple implementation for a PID-controller. The example -works very well, but fine tuning of the PID-constants can make the robot -react and move smoother. +Each request starts with the same two bytes `174, 193`. The other bytes depend on the type of request. For instance, when you want to request the firmware version of the camera, your data packet will be (check Pixy2 documentation): +```python +data = [174, 193, 14, 0] ``` + +You send this request to the camera as follows: + +```python +bus.write_i2c_block_data(address, 0, data) +``` + +Now you can read the response: + +```python +block = bus.read_i2c_block_data(address, 0, 13) +``` + +The first parameter in this read function is the I2C-address of the camera. +The second parameter is an offset, which is zero in this case. The third +parameter is the number of bytes that the response contains. As you can +see in the Pixy2 documentation, the version-request returns 13 bytes. +According to the documentation you find the major version in byte 8 and the +minor in byte 9: + +```python +print('Firmware version: {}.{}\n'.format(str(block[8]), str(block[9]))) +``` + +### Example for Pixy2 - Display detected object on EV3-LCD + +This is the same as the previous example, but this time written for Pixy2. +We like to detect objects with signature 1 and display the bouncing box on +the display of the EV3-brick. For this we use `getBlocks()` to receive +information about the detected object (see [Pixy2 documentation](https://docs.pixycam.com/wiki/doku.php?id=wiki:v2:porting_guide#getblocks-sigmap-maxblocks)). +The data packet for the request is like this: + +```python +data = [174, 193, 32, 2, sigs, 1] +``` + +Where `sigs` is the signature or signatures we're interested in. It is the +sum of all desired signatures. So in case we're only interested in +signature 1 `sigs = 1` and when we're interested in signatures 1, 2 and 3, +then `sigs = 6 (1 + 2 + 3 = 6)`. In this example `sigs = 1`. So the request +looks like this: + +```python +# Request block +bus.write_i2c_block_data(address, 0, data) +``` + +We're only interested in the largest detected object with signature 1, so the +last byte of our data packet has the value 1. To read the response to our +request: + +```python +# Read block +block = bus.read_i2c_block_data(address, 0, 20) +``` + +The response contains 20 bytes, hence the last parameter in +`read_i2c_block_data()` is 20. Now we can extract the desired data: + +```python +x = block[9]*256 + block[8] +y = block[11]*256 + block[10] +w = block[13]*256 + block[12] +h = block[15]*256 + block[14] +``` + +With this information we can calculate and display the bouncing box, +just like in the example for Pixy. Be aware that the resolution of the +Pixy2 camera and the resolution of the EV3 display are not the same. +Pixy2's resolution while color tracking is (316x208) and EV3's resolution +is (178x128). This means you have to scale the values from the Pixy2! + +Full code: + +```python #!/usr/bin/env python3 -from ev3dev.ev3 import * - -def limit_speed(speed): - """ Limit speed in range [-900,900] """ - if speed > 900: - speed = 900 - elif speed < -900: - speed = -900 - return speed - -# Connect Pixy camera and set mode -pixy = Sensor(address = INPUT_1) -assert pixy.connected, "Error while connecting Pixy camera" -pixy.mode = 'SIG1' +from time import sleep +from smbus import SMBus + +from ev3dev2.display import Display +from ev3dev2.sensor import INPUT_1, INPUT_4 +from ev3dev2.sensor.lego import TouchSensor +from ev3dev2.port import LegoPort -# Connect TouchSensor (to stop script) + +# EV3 Display +lcd = Display() + +# Connect ToucSensor ts = TouchSensor(INPUT_4) -assert ts.connected, "Error while connecting TouchSensor" - -# Connect LargeMotors -rmotor = LargeMotor(OUTPUT_A) -assert rmotor.connected, "Error while connecting right motor" -lmotor = LargeMotor(OUTPUT_D) -assert lmotor.connected, "Error while connecting left motor" - -# Defining constants -X_REF = 128  # X-coordinate of referencepoint -Y_REF = 150  # Y-coordinate of referencepoint -KP = 0.4   # Proportional constant PID-controller -KI = 0.01   # Integral constant PID-controller -KD = 0.005   # Derivative constant PID-controller -GAIN = 10   # Gain for motorspeed - -# Initializing PID variables -integral_x = 0 -derivative_x = 0 -last_dx = 0 -integral_y = 0 -derivative_y = 0 -last_dy = 0 +# Set LEGO port for Pixy2 on input port 1 +in1 = LegoPort(INPUT_1) +in1.mode = 'other-i2c' +# Short wait for the port to get ready +sleep(0.5) + +# Settings for I2C (SMBus(3) for INPUT_1) +bus = SMBus(3) +# Make sure the same address is set in Pixy2 +address = 0x54 + +# Signatures we're interested in (SIG1) +sigs = 1 + +# Data for requesting block +data = [174, 193, 32, 2, sigs, 1] + +# Read and display data until TouchSensor is pressed while not ts.value(): - if pixy.value(0) > 0: - x = pixy.value(1) # X-centroid of largest SIG1-object - y = pixy.value(2) # Y-centroid of largest SIG1-object - dx = X_REF - x # Error in reference to X_REF - integral_x = integral_x + dx # Calculate integral for PID - derivative_x = dx - last_dx # Calculate derivative for PID - speed_x = KP*dx + KI*integral_x + KD*derivative_x # Speed in X-direction - dy = Y_REF - y # Error in reference to Y_REF - integral_y = integral_y + dy # Calculate integral for PID - derivative_y = dy - last_dy # Calculate derivative for PID - speed_y = KP*dy + KI*integral_y + KD*derivative_y # Speed in Y-direction - # Calculate motorspeed out of speed_x and speed_y - # Use GAIN otherwise speed will be to slow, but limit in range [-900,900] - rmotor.run_forever(speed_sp = limit_speed(GAIN*(speed_y + speed_x))) - lmotor.run_forever(speed_sp = limit_speed(GAIN*(speed_y - speed_x))) - last_dx = dx     # Set last error for x - last_dy = dy     # Set last error for y - else: - rmotor.stop() # SIG1 not detected, stop motors - lmotor.stop() - -# End of script, stop motors -rmotor.stop() -lmotor.stop() + # Clear display + lcd.clear() + # Request block + bus.write_i2c_block_data(address, 0, data) + # Read block + block = bus.read_i2c_block_data(address, 0, 20) + # Extract data + sig = block[7]*256 + block[6] + x = block[9]*256 + block[8] + y = block[11]*256 + block[10] + w = block[13]*256 + block[12] + h = block[15]*256 + block[14] + # Scale to resolution of EV3 display: + # Resolution Pixy2 while color tracking; (316x208) + # Resolution EV3 display: (178x128) + x *= 0.6 + y *= 0.6 + w *= 0.6 + h *= 0.6 + # Calculate rectangle to draw on display + dx = int(w/2) + dy = int(h/2) + xa = x - dx + ya = y + dy + xb = x + dx + yb = y - dy + # Draw rectangle on display + lcd.draw.rectangle((xa, ya, xb, yb), fill='black') + # Update display to how rectangle + lcd.update() ``` This video shows this script running: -{% include /util/youtube-embed.html youtube_video_id="cDimWUEDwPU" %} +{% include /util/youtube-embed.html youtube_video_id="Wo6f2eQZVSY" %} + +{% include /style/begin-panel.html type="info" heading="Note" %} +When using `smbus` there is one important issue you have to think about: +it is limited to read 32 bytes of data at a time. This is fine for all Pixy2 +functionalities, except for linetracking. The linetracking datablock contains +more bytes of data, so you cannot read it completely in once. Therefore, +first read the header bytes, followed by the bytes containing the feature +data, one feature at a time. This is shown in the example on Github. +{% include /style/end-panel.html %} + +## More info + +* There is a GitHub repository where you can find more detailed information +and sample code about how to use Pixy and Pixy2 on ev3dev. You can find +it here: [GitHub KWSmit/Pixy_ev3dev](https://github.com/KWSmit/Pixy_ev3dev). +* Charmed Lab's wiki about Pixy/Pixy2: +[docs.pixycam.com](https://docs.pixycam.com/) diff --git a/images/pixy-tutorial/pixymon-config.png b/images/pixy-tutorial/pixymon-config.png new file mode 100644 index 0000000000000000000000000000000000000000..ccee8727d59aa9d7a344e220913bef3be05ec3e8 GIT binary patch literal 41299 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 F{{W58qy_*0 literal 0 HcmV?d00001