X-Rover Color Seeking Autonomous Rover Announced!

All-
I am pleased to announce that I have completed the initial development of my new autonomous rover called X-Rover. Currently it is using an older Lynxmotion yellow 4WD chassis, Atom Pro 28, BB2, Standard Pan/Tilt, and a CMUcam2+, and 7.2V NiMH RC-car type battery pack.

Here is a link to my youtube video (there are some earlier tests on my youtube page):

Here is where you can buy a CMUcam2+ that I used: acroname.com/robotics/parts/ … -PLUS.html

I apologise that this is an older video. I have since got my code working much better and added several new features as well as much better tracking ability. The most important new feature is that X-Rover now scans his head and body when the target object is lost. He can be programmed to track almost any highly saturated color, however pure Red, Green, or Blue colors tend to be the easiest to track. XRover now reliably tracks 3" colored targets at over 6 feet with a slight reduction in tracking reliability under dim lighting.

Lynxmotion and I will be working on a complete tutorial, code, and instructions for you to build your own X-Rover and expand it’s capabilities. X-Rover behaves in many ways like a robot dog that you can play ball with. I have invented many fun fetch typed games to play.

Stay tuned here for more information, photos and videos.

Mark

Very impressive. looking forward to your tutorial. I’m building a tritrack and would love to see how you added the color tracking

very cool project. great video. well done. 8)

I am working on the instructions for the tutorial now! I will also have the new aluminum chassis version built this weekend. Hope to post new pics and video soon. One thing I have not done yet is find a better way to mount the camera. Right now it is just double-stick taped to a multi-purpose sensor bracket.
Mark

All-

I have completed the build of X-Rover on the new chassis. Other changes are that I am now running 12V 30:1 drive motors instead of 7.2V 50:1 motors. The performance of the robot has been greatly increased with significantly more torque at the low end. I am currently re-working the code and plan to post new pics, video and the code today.

stay tuned…

Mark

All-

Here is the latest version of the code I’m running for X-Rover. This code still has some hard coded values for the pan and tilt servos. I am in the process of re-writing it with constants that will make it easier to tune for your servo offsets.

Enjoy…

Note: Code posted in next post…

[code]’ X-Rover Autonomous Color Tracking Robot
’ Mark Fedasiuk 10/25/09

enablehservo

pinp con p0
pint con p1

speaker con p9
leftd con p12
rightd con p13
atx con p11
arx con p10
baudpc con i9600
baudatom con i9600
bauddisp con i9600

tiltc con -3000 'Tilt Servo Offset
tiltd con 400 ’ Tilt Servo Dead Zone
panc con 0 ’ Pan Servo Offset
pand con 100 ’ Pan Servo Deadzone
trackcon con 2 ’ Number of misses allowed while tracking

’ Define Variables
x var byte(10) ’ X Centroid Value from CMUcam2
y var byte(10) ’ Y Centroid Value from CMUcam2
packet var byte ’ Grab a single packet of data from camera
counter var byte
pan var sword
tilt var sword
stepp var word ’ Pan Servo Step Size
stept var word ’ Tilt Servo Step Size
stepsp var word ’ Pan Servo Step Speed
stepst var word ’ Tilt Servo Step Speed
posp var word ’ Pan Position
post var word ’ Tilt Position
rtpwr var word ’ Right Drive Motor Power ’ does this need to be signed? wasn’t before
lfpwr var word ’ Left DRive Motor Power ’ does this need to be signed? wasn’t before
dirp var sword ’ Pan Dirction
dirt var sword ’ Tilt Direction
val var byte ’ Variable for sound routines
tracking var nib ’ Number of times to allow non tracked object (filter)

'===================================
’ MAIN
'===================================

main

’ Initialize Variables
x = 0
y = 0
packet = 0
pan = panc
tilt = tiltc
stepp = 0
stept = 0
dirp = 1
dirt = 1
tracking = trackcon
counter = 0

hservo [pinp\pan]
hservo [pint\tilt]
hservo [leftd\0,rightd\0]

'Play Boot sound
for val = 2 to 5
sound speaker, [val30\val1000]
next

pause 1000 'wait for camera to boot

‘’’’’’’’’’’’’’’’’’’
‘Camera Commands
‘’’’’’’’’’’’’’’’’’’

’ set delay mode to get comms working
serout atx,baudatom,“DM 4”,13] ’ delay mode serial comms…DM value is about baud/2500 4,8,16 for 9600,19200, and 38400 baud
gosub ackno
serout atx,baudatom,“OM 0 3”,13] ’ output masinking for better tracking speed
gosub ackno
serout atx,baudatom,“NF 2”,13] ’ noise filtering default 2, 2-4 good range
gosub ackno
'serout atx,baudatom,“CR 19 32”,13] ’ used to turn off auto gain on cam
'gosub ackno

’ Play Sounds to let you know that the atom pro is properly talking to the CMUcam2
for val = 5 to 28
sound speaker, [val5\val(random tca)]
next

'track the color red with track color command note not using command subroutine
serout atx,baudatom,"tc “,dec 100,” “,dec 240,” “,dec 0,” “,dec 40,” “,dec 0,” ",dec 40,13]
gosub ackno

loop

gosub Tpacket

if pan > 10000 OR pan < -10000 then
dirp = dirp * -1
endif

if tilt > -1000 OR tilt < -7000 then
dirt = dirt * -1
endif

if x(counter) = 0 AND y(counter) = 0 AND tracking > 0 then
tracking = tracking -1
goto loop
elseif x(counter) = 0 AND y(counter) = 0

tracking = 0

if tilt > -1000 then
tilt = -1000
elseif tilt < -7000
tilt = -7000
endif

pan = pan + dirp * 400
tilt = tilt + dirt * 150

hservo [pinp\pan,pint\tilt,leftd-4000,rightd\4000] ’ scan head and body and wag tail when lost track

goto loop
endif

tracking = trackcon ’ Reset Tracking Filter

‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
’ AUTONOMOUS MODE TRACKING
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
stepp = abs(x(counter)-45)*25
stept = abs(y(counter)-100)*15 ’ <<<<<<<============== Hight Adjustment 72 center

'get hservo pan position

if x(counter) < 44 then
pan = (pan - stepp) min -10000
elseif x(counter) > 46
pan = (pan + stepp) max 10000
else
stepp = 0
endif

posp = abs(pan - panc) max 10000

if pan > (panc ) then ’ took out (panc + pand)
rtpwr = -posp
lfpwr = posp
elseif pan < (panc ) ’ took out (panc - pand)
rtpwr = posp
lfpwr = -posp
else
rtpwr = 0
lfpwr = 0
endif

if y(counter) < 95 then ' <<<<<<<============== Hight Adjustment
tilt = (tilt + stept) min -7000
elseif y(counter) > 105 ' <<<<<<<============== Hight Adjustment
tilt = (tilt - stept) max 8000
else
stept = 0
endif

post = abs(tilt - tiltc)*4 max 10000

if tilt > (tiltc + tiltd) then
rtpwr = (rtpwr + post) max 10000
lfpwr = (lfpwr + post) max 10000
elseif tilt < (tiltc - tiltd)
rtpwr = (rtpwr - post) min -10000
lfpwr = (lfpwr - post) min -10000
else
rtpwr = 0
lfpwr = 0
endif

hservo [pinp\pan,pint\tilt,rightd\rtpwr,leftd\lfpwr] ’ Drive the Servos while tracking object

goto loop

end

‘’’’’’’’’’’’’==================================
‘’’’’’’’’’’’’’====== SUBROUTINES ==========
‘’’’’’’’’’’’’’=================================

’ wait for ACK back
ackno
serin arx, baudatom, [wait(“ACK”)]
serin arx, baudatom, [packet] 'grabs the return after the ACK that confused me! this was the big fix
return

'retrieves a T type packet
Tpacket
serin arx, baudatom, [packet,dec x(counter),dec y(counter)]
'serout s_out,baudpc,[13,"T “,dec3 x(counter)\3,” ",dec3 y(counter)\3,13]
return
[/code]

All-

Here is the new code for X-Rover. It is nearly complete and only needs a few tweaks now. I’m waiting on the proper batteries and will do a final tuning rev if needed.

Enjoy!

Mark

[code]’
’ X-Rover Autonomous Color Tracking Robot
’ Mark Fedasiuk 10/25/09
’ Code is nearly complete!
’ I have re-coded X-Rover to make it more generalized
’ All offsets and tuning paremters now have constants

enablehservo

pinp con p0
pint con p1

speaker con p9
leftd con p12
rightd con p13
atx con p11
arx con p10
baudpc con i9600
baudatom con i9600
bauddisp con i9600

tiltc con -3000 'Tilt Servo Offset
tiltd con 0 ’ Tilt Servo Dead Zone (dangerous to increase)
tiltr con 4000 ’ Tilt Range
panc con 0 ’ Pan Servo Offset
pand con 100 ’ Pan Servo Deadzone
panr con 10000 ’ Pan Range
height con 110 ’ Height Adjustment (72 centers object vertically, higher numbers lower the object in the frame) (100-120 nominal)
trackcon con 2 ’ Number of misses allowed while tracking (range 1-3)

’ Define Variables
x var byte(3) ’ X Centroid Value from CMUcam2
y var byte(3) ’ Y Centroid Value from CMUcam2
packet var byte ’ Grab a single packet of data from camera
pan var sword ’ Pan Camera
tilt var sword ’ Tilt Camera
stepp var word ’ Pan Servo Step Size
stept var word ’ Tilt Servo Step Size
stepsp var word ’ Pan Servo Step Speed
stepst var word ’ Tilt Servo Step Speed
posp var word ’ Pan Position
post var word ’ Tilt Position
rtpwr var word ’ Right Drive Motor Power
lfpwr var word ’ Left DRive Motor Power
dirp var sword ’ Pan Dirction
dirt var sword ’ Tilt Direction
val var byte ’ Variable for sound routines
tracking var byte ’ Number of times to allow non tracked object (filter)

'===================================
’ MAIN
'===================================

main

’ Initialize Variables
x = 0
y = 0
packet = 0
pan = panc
tilt = tiltc
stepp = 0
stept = 0
dirp = 1
dirt = 1
tracking = trackcon

hservo [pinp\pan]
hservo [pint\tilt]
hservo [leftd\0,rightd\0]

'Play Boot sound
for val = 2 to 5
sound speaker, [val30\val1000]
next

pause 1000 'wait for camera to boot

‘’’’’’’’’’’’’’’’’’’
‘Camera Commands
‘’’’’’’’’’’’’’’’’’’

’ set delay mode to get comms working
serout atx,baudatom,“DM 4”,13] ’ delay mode serial comms…DM value is about baud/2500 4,8,16 for 9600,19200, and 38400 baud
gosub ackno
serout atx,baudatom,“OM 0 3”,13] ’ output masinking for better tracking speed
gosub ackno
serout atx,baudatom,“NF 2”,13] ’ noise filtering default 2, 2-4 good range
gosub ackno
'serout atx,baudatom,“CR 19 32”,13] ’ used to turn off auto gain on cam
'gosub ackno

’ Play Sounds to let you know that the atom pro is properly talking to the CMUcam2
for val = 5 to 10 ’ 10 was 28
sound speaker, [val5\val(random tca)]
next

‘’’’’’’’’’’’’’’’’’’
’ Color Tracking
‘’’’’’’’’’’’’’’’’’’

'track the color red with track color command note not using command subroutine
serout atx,baudatom,"tc “,dec 140,” “,dec 240,” “,dec 0,” “,dec 40,” “,dec 0,” ",dec 40,13]
gosub ackno

‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
’ Scanning MODE NOT TRACKING
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

loop

gosub Tpacket

if pan > (panc + panr) OR pan < (panc - panr) then
dirp = dirp * -1
endif

if tilt > (tiltc + tiltr) OR tilt < (tiltc - tiltr) then
dirt = dirt * -1
endif

if x(tracking) = 0 AND y(tracking) = 0 AND tracking > 0 then
tracking = tracking -1
goto loop
elseif x(tracking) = 0 AND y(tracking) = 0

'tracking = 0

if tilt > (tiltc + tiltr) then
tilt = (tiltc + tiltr)
elseif tilt < (tiltc -tiltr)
tilt = (tiltc -tiltr)
endif

pan = pan + dirp * 400
tilt = tilt + dirt * 150

hservo [pinp\pan,pint\tilt,leftd\0,rightd\0] ’ scan head and body and wag tail when lost track

goto loop
endif

‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
’ AUTONOMOUS MODE TRACKING
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

tracking = trackcon ’ Reset Tracking Filter

stepp = abs(x(tracking)-45)*30 ’ was 25
stept = abs(y(tracking)-height)*10 ’ was 10

'get hservo pan position

if x(tracking) < 44 then
pan = (pan - stepp) min -panr
elseif x(tracking) > 46
pan = (pan + stepp) max panr
else
stepp = 0
endif

posp = abs(pan - panc)*1 max 8000 ’ turn acceleration multiplier

'serout s_out,baudpc,[sdec pan," ",sdec posp,13]

if pan > (panc + pand) then
rtpwr = -posp
lfpwr = posp
elseif pan < (panc - pand)
rtpwr = posp
lfpwr = -posp
else
rtpwr = 0
lfpwr = 0
endif

if y(tracking) < (height - 1) then
tilt = (tilt + stept) max (tiltc + tiltr)
elseif y(tracking) > (height + 1)
tilt = (tilt - stept) min (tiltc - tiltr)
else
stept = 0
endif

post = abs(tilt - tiltc)*3 max 8000 ’ drive acceleration multiplier

'serout s_out,baudpc,[sdec tilt," ",sdec post,13]

if tilt > (tiltc + tiltd) then
rtpwr = (rtpwr + post)
lfpwr = (lfpwr + post)
elseif tilt < (tiltc - tiltd)
rtpwr = (rtpwr - post)
lfpwr = (lfpwr - post)
else
rtpwr = 0
lfpwr = 0
endif

'serout s_out,baudpc,[dec posp," ",dec post,13]

hservo [pinp\pan,pint\tilt,rightd\rtpwr,leftd\lfpwr] ’ Drive the Servos while tracking object

goto loop

end

‘’’’’’’’’’’’’=================================
‘’’’’’’’’’’’’====== SUBROUTINES ==========
‘’’’’’’’’’’’’=================================

’ wait for ACK back
ackno
serin arx, baudatom, [wait(“ACK”)]
serin arx, baudatom, [packet] 'grabs the return after the ACK that confused me! this was the big fix
return

'retrieves a T type packet
Tpacket
serin arx, baudatom, [packet,dec x(tracking),dec y(tracking)]
'serout s_out,baudpc,[13,"T “,dec3 x(tracking)\3,” ",dec3 y(tracking)\3,13]
return
[/code]

All,

Here is the final base code for X-Rover. The only thing that will change is the pin assignments to match the Lynxmotion Tutorials. Lynxmotion will be posting a tutorial, assembly guide, and code for you to be able to complete this project yourself. I will post new video’s in the next day or so to show the behavior of this charming little robot with the new Lynx 4WD Rover Aluminum Chassis.

Also for those of you who are interested I am using a piece of code on this bot that makes very interesting R2D2 type noises by intentionally using out of range numbers in the sound command. I was looking for something like this and was very pleased on how it came out when I wrote it myself! I will post that code snippet on stand alone thread tomorrow.

Mark

[code]’
’ X-Rover Autonomous Color Tracking Robot
’ Mark Fedasiuk 10/25/09
’ Code is nearly complete!
’ I have re-coded X-Rover to make it more generalized
’ All offsets and tuning paremters now have constants

enablehservo

pinp con p0
pint con p1

speaker con p9
leftd con p12
rightd con p13
atx con p11
arx con p10
baudpc con i9600
baudatom con i9600
bauddisp con i9600

tiltc con -3500 'Tilt Servo Offset
tiltd con 0 ’ Tilt Servo Dead Zone (dangerous to increase)
tiltr con 4000 ’ Tilt Range
panc con 0 ’ Pan Servo Offset
pand con 100 ’ Pan Servo Deadzone
panr con 10000 ’ Pan Range
height con 100 ’ Height Adjustment (72 centers object vertically, higher numbers lower the object in the frame) (100-120 nominal)
trackcon con 3 ’ Number of misses allowed while tracking (range 1-3)

’ Define Variables
x var byte(3) ’ X Centroid Value from CMUcam2
y var byte(3) ’ Y Centroid Value from CMUcam2
packet var byte ’ Grab a single packet of data from camera
pan var sword ’ Pan Camera
tilt var sword ’ Tilt Camera
stepp var word ’ Pan Servo Step Size
stept var word ’ Tilt Servo Step Size
stepsp var word ’ Pan Servo Step Speed
stepst var word ’ Tilt Servo Step Speed
posp var word ’ Pan Position
post var word ’ Tilt Position
rtpwr var word ’ Right Drive Motor Power
lfpwr var word ’ Left DRive Motor Power
dirp var sword ’ Pan Dirction
dirt var sword ’ Tilt Direction
val var byte ’ Variable for sound routines
tracking var byte ’ Number of times to allow non tracked object (filter)

'===================================
’ MAIN
'===================================

main

’ Initialize Variables
x = 0
y = 0
packet = 0
pan = panc
tilt = tiltc
stepp = 0
stept = 0
dirp = 1
dirt = 1
tracking = trackcon

hservo [pinp\pan]
hservo [pint\tilt]
hservo [leftd\0,rightd\0]

'Play Boot sound
for val = 2 to 5
sound speaker, [val30\val1000]
next

pause 1000 'wait for camera to boot

‘’’’’’’’’’’’’’’’’’’
‘Camera Commands
‘’’’’’’’’’’’’’’’’’’

’ set delay mode to get comms working
serout atx,baudatom,“DM 4”,13] ’ delay mode serial comms…DM value is about baud/2500 4,8,16 for 9600,19200, and 38400 baud
gosub ackno
serout atx,baudatom,“OM 0 3”,13] ’ output masinking for better tracking speed
gosub ackno
serout atx,baudatom,“NF 2”,13] ’ noise filtering default 2, 2-4 good range
gosub ackno
'serout atx,baudatom,“CR 19 32”,13] ’ used to turn off auto gain on cam
'gosub ackno

’ Play Sounds to let you know that the atom pro is properly talking to the CMUcam2
for val = 5 to 12 ’ 10 was 28
sound speaker, [val5\val(random tca)]
next

‘’’’’’’’’’’’’’’’’’’
’ Color Tracking
‘’’’’’’’’’’’’’’’’’’

'track the color red with track color command note not using command subroutine
serout atx,baudatom,"tc “,dec 120,” “,dec 240,” “,dec 0,” “,dec 40,” “,dec 0,” ",dec 40,13]
gosub ackno

‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
’ Scanning MODE NOT TRACKING
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

loop

gosub Tpacket

if pan > (panc + panr) OR pan < (panc - panr) then
dirp = dirp * -1
endif

if tilt > (tiltc + tiltr) OR tilt < (tiltc - tiltr) then
dirt = dirt * -1
endif

if x(tracking) = 0 AND y(tracking) = 0 AND tracking > 0 then
tracking = tracking -1
goto loop
elseif x(tracking) = 0 AND y(tracking) = 0

'tracking = 0

if tilt > (tiltc + tiltr) then
tilt = (tiltc + tiltr)
elseif tilt < (tiltc -tiltr)
tilt = (tiltc -tiltr)
endif

pan = pan + dirp * 400
tilt = tilt + dirt * 150

hservo [pinp\pan,pint\tilt,leftd\4000,rightd-4000] ’ scan head and body and wag tail when lost track

goto loop
endif

‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
’ AUTONOMOUS MODE TRACKING
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

tracking = trackcon ’ Reset Tracking Filter

stepp = abs(x(tracking)-45)*30 ’ was 25 Pan Speed
stept = abs(y(tracking)-height)*10 ’ was 10 Tilt Speed

'get hservo pan position

if x(tracking) < 44 then
pan = (pan - stepp) min -panr
elseif x(tracking) > 46
pan = (pan + stepp) max panr
else
stepp = 0
endif

posp = abs(pan - panc)*1 max 8000 ’ turn acceleration multiplier

'serout s_out,baudpc,[sdec pan," ",sdec posp,13]

if pan > (panc + pand) then
rtpwr = -posp
lfpwr = posp
elseif pan < (panc - pand)
rtpwr = posp
lfpwr = -posp
else
rtpwr = 0
lfpwr = 0
endif

if y(tracking) < (height - 1) then
tilt = (tilt + stept) max (tiltc + tiltr)
elseif y(tracking) > (height + 1)
tilt = (tilt - stept) min (tiltc - tiltr)
else
stept = 0
endif

post = abs(tilt - tiltc)*3 max 8000 ’ drive acceleration multiplier

'serout s_out,baudpc,[sdec tilt," ",sdec post,13]

if tilt > (tiltc + tiltd) then
rtpwr = (rtpwr + post)
lfpwr = (lfpwr + post)
elseif tilt < (tiltc - tiltd)
rtpwr = (rtpwr - post)
lfpwr = (lfpwr - post)
else
rtpwr = 0
lfpwr = 0
endif

'serout s_out,baudpc,[dec posp," ",dec post,13]

hservo [pinp\pan,pint\tilt,rightd\rtpwr,leftd\lfpwr] ’ Drive the Servos while tracking object

goto loop

end

‘’’’’’’’’’’’’=================================
‘’’’’’’’’’’’’====== SUBROUTINES ==========
‘’’’’’’’’’’’’=================================

’ wait for ACK back
ackno
serin arx, baudatom, [wait(“ACK”)]
serin arx, baudatom, [packet] 'grabs the return after the ACK that confused me! this was the big fix
return

'retrieves a T type packet
Tpacket
serin arx, baudatom, [packet,dec x(tracking),dec y(tracking)]
'serout s_out,baudpc,[13,"T “,dec3 x(tracking)\3,” ",dec3 y(tracking)\3,13]
return
[/code]

Here are a few pictures of X-Rover with the new lynxmotion aluminum chassis:


X-Rover and some of his toys…


X-Rover Initial Build

Awesome work Mark!

The rover reacts pretty quick. I would love to see the tutorial. I never had the time to check out the CMU cams so I wonder where you place the logic for the cam. (the logic for object tracking). I didn’t had the time to check the full topic so it might be in the code already :wink:

I’m gonna keep track of this project for sure!

Thanks for sharing,

Xan

Thanks for the feedback. It’s all in the code I posted! :wink:
Mark

Hi.
As I mentioned earlier, great job on the tracking code.
I have one request though, maybe you can include more comments in your code for people like me that are not so good in programming. It might be easier for us to undestand what you are doing in the code.
:slight_smile:

Hi Mark,

I had some time to overview your code. Great work! I was unaware that the CMU cam can do the tracking of a certain color. I was/am looking for a good cam to do some tracking but most cams need a powerfull processor (read PC) to do the tracking. This is a need onboard solution.

Again great work! I love how quick the rover reacts to the toycar.

Xan

Thanks Xan!

This was the first time I ever wrote code designed to be used by someone else. I’m glad you like it. I tried to make it easy to follow and as general as possible to allow easy modification by the users. I will try and add more comments to show you the key parameters to tune for changing the behavior.

On a separate note, I have been having trouble all week uploading my new videos to youtube…I will keep trying but I think the wind storms here must have screwed up our connection. The video’s constantly bomb during the upload proces.

I should have a good chunk of the tutorial done this weekend and the rest will be up to the good people at lynx.

Mark

I finally got my internet back up and was able to post one of the youtube videos…I think in this video the battery died and it stopped tracking near the end…most of the video shows X-Rover fairly well.

Thanks for the kind words…

For those of you who are interested the CMUcam2 manual can be found here: cs.cmu.edu/~cmucam2/CMUcam2_manual.pdf

It is a bit complicated for beginners (not you Xan :slight_smile: ) but the tutorial and code will be posted so that anyone including beginners can reproduce what yo usee in the video…

If anyone is interested I suggest you buy the XROVER parts this weekend while Lynx is having it’s 14% off sale…plus you ALSO get a SSC-32 board!!!

Also I would be glad to help anyone who wishes to build one before the tutorial is posted.

Mark