<< return to Pixycam.com

User Tools

Site Tools


wiki:v2:line_quickstart

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
wiki:v2:line_quickstart [2018/07/03 16:47]
pixycam created
wiki:v2:line_quickstart [2019/01/30 01:50] (current)
pixycam
Line 1: Line 1:
-==== Line tracking quickstart ====+===== Line tracking quickstart ​=====
  
 This guide will help you get started with the line tracking algorithm on the Pixy2. ​ This guide will help you get started with the line tracking algorithm on the Pixy2. ​
  
-=== Running line tracking through PixyMon === +==== Running line tracking through PixyMon ​==== 
  
 PixyMon will display what Pixy2 detects graphically and is a good way to familiarize yourself with what the line tracking algorithm is capable of, and it's a good way to make adjustments. ​ Start by selecting the line tracking algorithm in the _Program_ menu.  PixyMon will display what Pixy2 detects graphically and is a good way to familiarize yourself with what the line tracking algorithm is capable of, and it's a good way to make adjustments. ​ Start by selecting the line tracking algorithm in the _Program_ menu. 
  
-*** pic+ 
 +{{wiki:​v2:​image_367.png}}  
  
 Draw a line on a piece of paper and put it in front of Pixy2. ​ Pencil will work, but black marker is usually better. ​ You should see something like this: Draw a line on a piece of paper and put it in front of Pixy2. ​ Pencil will work, but black marker is usually better. ​ You should see something like this:
  
-*** pic 
  
-What Pixy2 has done is found the best line candidate to track and has assigned it to the Vector. ​ The Vector is the line that Pixy2 (or your robot) is currently tracking/​following. ​ You can move the paper and see that Pixy2 can track the line fairly quickly. ​ PixyMon slows down the tracking algorithm typically to 20-30 frames-per-second because it takes some time to send the raw frame data across USB, but if you change the view to "no background",​ you can get a feel for what the tracking algorithm looks like at the native 60 frames-per-second. ​ This is framerate your robot will see.  ​+{{wiki:​v2:​image_368.png}} 
 + 
 + 
 +What Pixy2 has done is found the best line candidate to track and has assigned it to the Vector. ​ The Vector is the line that Pixy2 (or your robot) is currently tracking/​following. ​ You can move the paper and see that Pixy2 can track the line fairly quickly. ​ PixyMon slows down the tracking algorithm typically to 20-30 frames-per-second because it takes some time to send the raw frame data across USB, but if you change the view to "no background" ​(see pic below), you can get a feel for what the tracking algorithm looks like at the native 60 frames-per-second. 
 + 
 + 
 +{{wiki:​v2:​image_369.png}} 
 + 
 + 
 +This (60 fps) is framerate your robot will see.  
 + 
 +You can also see what happens when you turn on Pixy2'​s lamp.  
 + 
 + 
 +{{wiki:​v2:​image_370.png}} 
 + 
 + 
 +Note, with the lamp on, Pixy2 will typically reduce the exposure (sampling) time of the image, which reduces motion blur.  ​In general, motion blur happens because a camera is sampling a subject while the subject is moving. ​ In this case, the subject is a line (or set of lines). ​ If they are blurred due to motion (the motion of your robot), it can make the lines more difficult for Pixy2 to detect and track. ​ Pixy2'​s lamp can help with this.  The upshot is that the lamp makes your robot go faster! 
  
-*** pic 
  
 Go ahead and change back to the "All features"​ view if you switched views. ​ Make a 4-way intersection by drawing another line through the original line and place it in front of Pixy2. ​ Pixy2 will identify the intersection and quickly choose the default branch of the intersection,​ which is the "​straightest"​ branch of the intersection.  ​ Go ahead and change back to the "All features"​ view if you switched views. ​ Make a 4-way intersection by drawing another line through the original line and place it in front of Pixy2. ​ Pixy2 will identify the intersection and quickly choose the default branch of the intersection,​ which is the "​straightest"​ branch of the intersection.  ​
 +
 +
 +{{wiki:​v2:​image_372.png}}
 +
  
 You can change the "​default turn angle" in the Expert configure tab.  You'll see that the default turn angle is 0 (by default), which is straight. ​ The angle is based on a straight-referenced angle coordinate scheme. You can change the "​default turn angle" in the Expert configure tab.  You'll see that the default turn angle is 0 (by default), which is straight. ​ The angle is based on a straight-referenced angle coordinate scheme.
  
-*** angle pic+ 
 + 
 +[{{wiki:​v2:​image_364.png?​400|Angle coordinates from Pixy2'​s perspective.}}] 
 + 
 + 
 + 
 +Try changing the default turn angle to -90 (right-most turn/​branch) and click on Apply. ​  
 + 
 + 
 +{{wiki:​v2:​image_376.png}} 
 + 
 + 
 +Now when you place the intersection in front of Pixy2, it will choose the right-most branch of the intersection. ​  
 + 
 + 
 +{{wiki:​v2:​image_377.png}} 
 + 
 + 
 +By default, Pixy2 will choose the branch automatically based on default turn angle or the most recent call to [[wiki:​v2:​line_api|setNextTurn()]]. ​ You can change this behavior by enabling "​delayed turn" in the Expert configure tab.   
 + 
 + 
 +Go ahead and enable delayed turn and click on Apply. ​  
 + 
 + 
 +{{wiki:​v2:​image_371.png}} 
 + 
 + 
 +Now when you place the intersection in front of Pixy2, it won't choose the branch automatically. ​ Instead Pixy2 will label the intersection because, it doesn'​t know what action to take.  
 + 
 + 
 +{{wiki:​v2:​image_375.png}} 
 + 
 + 
 +In delayed turn mode, Pixy2 will wait for your controller to call [[wiki:​v2:​line_api|setNextTurn()]] which will instruct Pixy2 to choose the branch of the intersection that matches the angle the closest. ​  
 + 
 + 
 + 
 + 
 + 
 + 
 +==== Barcodes ==== 
 + 
 +We wanted Pixy2 to be able to receive simple commands or information while it is performing line tracking, so we added the barcode feature. ​ The barcodes are intended to act as "​roadsigns"​. ​ You can add graphics to the barcodes that are human-readable as long as you keep the barcode unobstructed. ​   To test the barcode functionality,​ download the print the [[https://​github.com/​charmedlabs/​pixy2/​raw/​master/​documents/​other/​all_codes.pdf|all_codes.pdf]] document. ​ (Note, other barcode files and images can be found [[https://​pixycam.com/​downloads-pixy2/​|here]].) 
 + 
 + 
 + 
 +Holding the document in front of Pixy2 while it is running the line tracking algorithm will yield something like this: 
 + 
 + 
 +{{wiki:​v2:​image_374.png}} 
 + 
 + 
 +==== Running a simple Arduino line tracking example ==== 
 + 
 +If you haven'​t hooked your Arduino to your Pixy2 yet, use the supplied Arduino cable to connect Pixy to your Arduino as shown below. 
 + 
 +//Note: if you're using Arduino Nano, the ribbon cable faces the interior of the Nano, it doesn'​t exit off the side like on the Uno (pictured).\\ 
 +If the cable is plugged in backwards, you won't be able to upload to the Nano, or have serial communication with it.// 
 + 
 + 
 +{{wiki:​img:​ce5166e65a245cce097741efef288fe09b08da8a.jpg?​400}}\\ 
 +{{wiki:​v2:​img_5257_result.jpg?​400}} 
 + 
 + 
 +Next, download the latest Arduino library "​arduino\_pixy2-x.y.z.zip"​ [[https://​pixycam.com/​downloads-pixy2/​|here]]. Bring up the Arduino IDE and import the Pixy library by selecting ​**Sketch➜Include Library➜Add .ZIP Library...** (or if you're using an older version **Sketch➜Import Library**) in the Arduino IDE, and then browsing to the Arduino zip file that you just downloaded. 
 + 
 +Next, load the "​line\_hello\_world"​ example by selecting it in **File➜Examples➜Pixy2**. Upload it and bring up the **Serial Monitor**. You should see messages printed that look similar to this. 
 + 
 + 
 +<​code>​ 
 +vector: (38 51) (39 9) index: 0 flags 4 
 +vector: (37 51) (38 10) index: 0 flags 4 
 +vector: (37 51) (40 12) index: 0 flags 4 
 +vector: (37 51) (37 13) index: 0 flags 4 
 +vector: (36 51) (40 15) index: 0 flags 4 
 +vector: (36 16) (38 0) index: 2 flags 4 
 +intersection:​ (36 16) 
 +  0: index: 7 angle: -88 
 +  1: index: 2 angle: -7 
 +  2: index: 1 angle: 93 
 +  3: index: 0 angle: 180 
 +vector: (34 16) (37 0) index: 2 flags 4 
 +vector: (36 19) (37 0) index: 2 flags 4 
 +vector: (39 21) (37 0) index: 2 flags 4 
 +vector: (35 22) (37 0) index: 2 flags 4 
 +vector: (35 23) (37 0) index: 2 flags 4 
 +vector: (35 24) (37 0) index: 2 flags 4 
 +vector: (35 25) (37 0) index: 2 flags 4 
 +... 
 +</​code>​ 
 + 
 + 
 +In particular, when you hold a barcode, line or intersection,​ you can see the numbers that Pixy2 returns. ​ Bear in mind that the numbers Pixy2 returns are based on the coordinate system below.  
 + 
 + 
 +[{{wiki:​v2:​image_366.png?​500|Line tracking image coordinates from Pixy2'​s perspective.}}] ​  
 + 
 + 
 +Also note that the intersections and barcodes are only reported once every time the intersection or barcode comes into view.  This means you (the programmer) doesn'​t need to keep track of which intersections and barcodes have been seen before and which have not.   
 + 
 + 
 + 
 +==== The line tracking API ==== 
 + 
 +The line tracking API can be found [[wiki:​v2:​line_api|here]]. ​ It applies to Arduino (SPI interface) as well as the Raspberry Pi, or similar controllers (USB interface). ​  
 + 
 + 
 + 
  
  
wiki/v2/line_quickstart.1530636427.txt.gz · Last modified: 2018/07/03 16:47 by pixycam