Hack a Bigtrak with Raspberry Pi 5
Hack a Bigtrak with Raspberry Pi 5
BUILD
5
CODE
Get hands-on with your Raspberry Pi
Deputy Editor
Aber Sailbot
Autonomous robot yacht that competes worldwide
Talking Pi
Your questions answered and your opinions shared
Hack a Bigtrak
Take a toy, a Raspberry Pi and a PS3 controller; add
a dash of Python and some solder for the perfect
remote-controlled gadget…
The Raspberry Pi is a small, low-cost
computer designed to promote an interest in THE PROJECT
ESSENTIALS
computing and programming – but it doesn’t Bigtrak
have to be straight-laced computing. In fact, in this article [Link]
we’ll be showing you how you can use it to turn a Bigtrak Motor driver
[Link]/1iOnFug
into a robot. That’s educational, right?
USB Battery pack
The Bigtrak is a toy that takes in a list of [Link]/1h2PBiI
straightforward commands (like go forwards, turn left, Breadboard
turn right) and then executes them. To make things more PS3 DualShock
interesting we’re going to remove the existing circuitry controller
10 Provide power
Power for the Raspberry Pi is supplied via a USB Above We’re using a
Model B here but the
battery pack that is installed on top of the engine B+ and A+ will be fine
and can be held in place by a couple of cable ties or
a Velcro strip. This type of battery is typically sold as
a portable mobile phone or iPad charger – the one
used here is rated at 8000mAh, able to power the
Raspberry Pi for up to eight hours.
11 Connect to the
Raspberry Pi – adding cables
As the Raspberry Pi will be mounted on the top of the
Bigtrak, we need to run the ribbon and power cable
through the top of the case. To do this, turn the top
of the Bigtrak upside down and release the front two
catches that hold the dark grey plastic in place – this
provides a big enough gap to feed the ribbon cable
and USB power cable through. Make sure that the
red edge of the ribbon cable
correctly matches up with the
connector on the breadboard
in order to save yourself from
having to twist the cable
inside the case.
12 Connect to the
Raspberry Pi – final
steps
With the top of the Bigtrak back
on, the Raspberry Pi can now
be put in place, keeping the
GPIO pins towards the front to allow the ribbon cable Above You can get
some great cases to
to easily connect. As for the battery pack, we’re holding fit your model of Pi
it in place with cable ties and sticky pads. In theory it’s from Adafruit
possible to attach the bare Raspberry Pi to the Bigtrak,
however this can cause the SD card to press against
the edge and bend, so it’s recommended to use a
case to protect the Raspberry Pi.
Connect the ribbon and power cable to the
Raspberry Pi, turn it on and it’s now ready to be told
what to do. For setting up the software it may be
easier to connect up a keyboard and monitor to the
Raspberry Pi at this point.
15 Next steps
Now that you have a solid base for your Raspberry
Pi robot, you can make further adjustments to it.
Possible next steps could be: add a USB Bluetooth
adaptor so the PS3 controller can be connected
wirelessly; replace the breadboard with a PiPlate
or ‘Slice of Pi’ add-on board, allowing
the Raspberry Pi to be installed
inside the Bigtrak; connect up
the Raspberry Pi camera
and a USB Wi-Fi adaptor
to stream video as you
drive around; or add
a robot arm!
Supercharge your
Raspberry Pi
Five more of the best add-ons available for
your Raspberry Pi
It’s clear that the Raspberry Pi has been a “There’s a
revolution for small form factor computing, but growing list
it’s not quite perfect – only so much technology
of add-ons
can be packed into a tiny space, after all. For enthusiasts
and makers there’s a growing list of extra-curricular add-
that can help
ons that can help make their projects, gadgets and Intenet make projects,
Of Things devices come to life. gadgets and
In the previous issue of RasPi we took a look at five of Intenet Of
our favourite add-on modules for the Pi, all of which would Things devices
make a fantastic addition to your kit and many of which come to life”
we regularly use in our own projects: analog to digital
converters, infrared reflectance sensors, the Raspberry
Pi camera module, USB power cables with switches and
servo/PWM driver boards. To round off your collection
we’ve got another five fantastic modules to recommend
that will open up even more project possibilities.
Portable touchscreen
Make your Raspberry Pi truly portable by attaching a
touchscreen display
Why do it?
There are numerous reasons why you’d want to add such a
Below Linux User &
screen to a Raspberry Pi but they all generally come down Developer has a guide
to the fact that the Pi is very small and very portable and to making a portable
video player using
most monitors are not. While you could VPN in via a phone if PiTFT: [Link]/1wtnL0r
you’re on the go, the screen is connected directly to the Pi and “This opens it
doesn’t involve awkward wireless networking. And since it’s a up to a world
touchscreen you don’t need to bring along other input devices, of possibilities.
as it’s powered off the Raspberry Pi as well.
Portable
This opens it up to a world of possibilities. Portable
computer, touchscreen control pad, video camera… anything
computer,
that could benefit from your Raspberry Pi having a screen and touchscreen
human input while away from your main monitor. control
pad, video
How to use it camera…”
All you need to get it to work is the PiTFT from our friends at
Pimoroni – soldering is required. Turn the Raspberry Pi off
and slot it into the GPIO. Make sure it’s still connected to a
conventional screen and turn it back on again, staying in
command line mode. Right now the PiTFT will not turn on as
you need to configure the Raspberry Pi, and more specifically
Raspbian, to support it. Once you’re logged in you can start
the process by downloading files with:
$ wget [Link]
com/[Link]
$ wget [Link]
com/[Link]
$ wget [Link]
com/[Link]
$ wget [Link]
[Link]/[Link]
$ wget [Link]
com/[Link]
spi-bcm2708
fbtft_device
Save that file out and now open up the Adafruit configuration
file with:
Section “Device”
Identifier “myfb”
Driver “fbdev”
Option “fbdev” “/dev/fb1”
EndSection
THE PROJECT
What is it? ESSENTIALS
Adafruit’s BMP180 is a barometric pressure Adafruit BMP180
sensor that allows you to detect changes in [Link]
air pressure. Coupled with a temperature sensor it can Breadboard
predict short-term changes in the weather. Connectors
Why do it?
Being able to predict the weather has the obvious
benefit of knowing whether or not to bring an umbrella
or sunglasses into work. However, you could also use it Below Adafruit sell
in home automation to open windows or close curtains the BMP180 on their
site for ten dollars
when it’s hot or about to start raining.
01 Enable I2C
In the terminal, open the
modules file to activate the
I2C pins by adding two lines.
After the following, reboot:
$ sudo nano /etc/modules
i2c-bcm2708
i2c-dev
THE PROJECT
What is it? ESSENTIALS
An electret microphone is a clever piece of Adafruit Electret
microphone design that uses a permanently Microphone Amp
[Link]
charged material called electret, forgoing the need for a
polarising power source. Electret effectively has a built-in
static electric charge that wont decay for hundreds of years
– some pretty clever stuff. The Adafruit Electret Microphone,
shown here, comes with a built-in amplifier and is rigged
and ready to use, bar soldering.
THE PROJECT
What is it? ESSENTIALS
There’s a fundamental drive instilled in all PiBorg PicoBorg
tinkerers and it goes something very much Reverse
like, ‘If you can, add motors to it’. The Raspberry Pi is no [Link]/picoborgrev
How to use it
In terms of setting up, the guys at PiBorg have been
incredibly thoughtful. The PicoBorg Reverse comes with
two colour-coded three-pin cables to connect the board
to your Raspberry Pi’s GPIO pins. It also comes with a
mounting kit so you can easily connect the board to
your Raspberry Pi without losing access to any of the
connectors. With the board mounted and the two cables
connected as per their instructions, the installation process
turns to the software side of things. Check out the step-
by-step software installation guide on the next page for
full details. The Python library supplied with the PicoBorg
Reverse is very full-featured and even allows for hardware
immobilisation should there be any difficulties. The library
“Instead of
itself also includes a Help() text function that breaks down
and lists every function and its parameters in plain English. manually
setting things
PicoBorg Reverse software installation up, all you need
to do is unzip
01 Download the examples the download,
Create a folder for the Python module and example change the
scripts to go in. At the terminal type:
mkdir ~/picoborgrev
permissions,
Now navigate into the folder (cd ~/picoborgrev). then run the
script”
02 Run the script
The PicoBorg Reverse uses I2C for communication, but
instead of manually setting things up, all you need to
do is unzip the download, change the permissions
(with chmod +x [Link]), then run the script
simply by typing ./[Link] at the command
Below Just two three-
prompt. It really is that straightforward. wire connectors are
needed between the
Pi and the Reverse
03 Check out the example programs
Assuming you’ve got
your motors already
connected, you’re ready
to go. You’ll even find a
new desktop shortcut on
your Raspberry Pi with
a small GUI program to
help you get started. You
can find all the example
programs and Python
library functions at
[Link]/picoborgrev/
examples.
Amplified stereo speakers
Listen to what your Pi has to say without
having to plug in earphones
THE PROJECT
What is it? ESSENTIALS
MAX98306 is a small board that connects to a Adafruit Stereo
Pi on one end and stereo speakers on the other. Amplifier
MAX98306
[Link]
Why do it?
The Raspberry Pi has no on-board speakers and can
only output via HDMI or the analogue audio jack. It’s not
amplified well, so the output is rather quiet.
01 Setting up dependencies
As we recommended with last issue’s tutorial, you’ll get
much more from the exercise if you download the code
([Link]/8QsK-w) and use it for reference as you create Skills to learn
your own animations and sound for your Pygame Python
projects. Regardless of whether you just want to simply You’ll need a basic
grounding in Python
preview and play or walk-through the code to get a to follow along
better understanding of basic game creation, you’re still with the code. Try
[Link]
going to need to satisfy some basic dependencies. The
two key requirements here are Pygame and Git, both of Classes
which are installed by default on up-to-date Raspbian Hopefully the
article shows how
installations. If you’re unsure if you have them, though, useful classes can
type the following at the command line: be to create and
manipulate multiple
sudo apt-get install python-pygame git objects with ease.
02 Downloading pivaders “Within the data
Git is a superb version control solution that helps
folder you’ll
programmers safely store their code and associated files.
Not only does it help you retain a full history of changes, it
find subfolders
means you can ‘clone’ entire projects to use and work on for both
from places like [Link]. To clone the version of the graphics and
project we created for this tutorial, go to your home folder sound assets,
from the command line (cd ~) and type: as well as the
git pull [Link] font we’ve
[Link]
used for the
This will create a folder called pivaders – go inside (cd
pivaders) and take a look around. title screen and
scores”
03 Navigating the project
The project is laid out quite simply across a few
subfolders. Within pivaders sits a licence, readme and
a second pivaders folder. This contains the main game
file, [Link], which launches the application. Within
the data folder you’ll find subfolders for both graphics
and sound assets, as well as the font we’ve used for the
title screen and scores. To take pivaders for a test-drive,
simply enter the pivaders subdirectory (cd pivaders/
pivaders) and type:
python [Link]
Use the arrow keys to steer left and right and the space
bar to shoot. You can quit to the main screen with the Esc
key and press it again to exit the game completely.
06 Tweaking assets
While many of the assets on sites like opengameart.
org can be used as is, you may want to import them
into an image-editing application like GIMP to configure
them to suit your needs – as we did with our ship sheet
asset to help us keep the code simple. We started
with the central ship sprite and centred it into a new
window. We set the size and width of the frame and
then copy-pasted the other frames either side of it. We
ended up with 11 frames of exactly the same size and
width in a single document. Pixel-perfect precision on
size and width is key, so we can just multiply it to find
the next frame.
def control(self):
for event in [Link]():
The Code ADD ANIMATION AND SOUND TO PIVADERS
if [Link] == [Link]:
GameState.start_screen = False
GameState.end_game = True
if [Link] == [Link] \
and [Link] == pygame.K_ESCAPE:
if GameState.start_screen:
GameState.start_screen = False
GameState.end_game = True
self.kill_all()
else:
GameState.start_screen = True
[Link] = [Link].get_pressed()
if [Link][pygame.K_LEFT]: Set flags
[Link] = -1 We’ve added
self.animate_left = True ‘animate_left’ and
self.animate_right = False
‘animate_right’
elif [Link][pygame.K_RIGHT]:
Boolean flags to
[Link] = 1
the control method.
self.animate_right = True
self.animate_left = False
When they’re true,
else: the actual animation
[Link] = 0 code is called via a
self.animate_right = False separate method.
self.animate_left = False
if [Link][pygame.K_SPACE]:
if GameState.start_screen:
GameState.start_screen = False
[Link] = 2
[Link] = 0
self.make_player()
The Code ADD ANIMATION AND SOUND TO PIVADERS
self.make_defenses()
self.alien_wave(0)
else:
GameState.shoot_bullet = True
self.bullet_fx.play() [Link]()
Having already
def animate_player(self): loaded the sound
if self.animate_right:
effect we want when
if self.ani_pos < 10:
we shoot, we now
[Link] = self.ship_sheet.subsurface(
just need to call it
self.ani_pos*64, 0, 64, 61)
when we press the
self.ani_pos += 1
else: space bar.
if self.ani_pos > 5:
self.ani_pos -= 1
[Link] = self.ship_sheet.subsurface(
self.ani_pos*64, 0, 64, 61)
if self.animate_left:
if self.ani_pos > 0:
self.ani_pos -= 1
[Link] = self.ship_sheet.subsurface(
self.ani_pos*64, 0, 64, 61)
else:
if self.ani_pos < 5:
[Link] = self.ship_sheet.subsurface(
self.ani_pos*64, 0, 64, 61)
self.ani_pos += 1
def player_explosion(self):
if [Link]:
The Code ADD ANIMATION AND SOUND TO PIVADERS
if self.explode_pos < 8:
self.explosion_image = self.explosion_sheet. subsurface(0, self.explode_pos*96, 79, 96)
self.explode_pos += 1
[Link](self.explosion_image, [[Link]. rect.x -10, [Link].y - 30])
else:
[Link] = False
self.explode_pos = 0
def alien_explosion(self):
if self.alien_explode:
if self.alien_explode_pos < 9:
self.alien_explode_graphics = self.alien_explosion_ [Link](0, self.
alien_explode_pos*96, 94, 96)
self.alien_explode_pos += 1
[Link](self.alien_explode_graphics, [int(self. explodey_alien[0]) - 50 ,
int(self.explodey_alien[1]) - 60])
else:
self.alien_explode = False
self.alien_explode_pos = 0
self.explodey_alien = []
def splash_screen(self):
while GameState.start_screen:
self.kill_all()
[Link](self.intro_screen, [0, 0])
[Link](self.intro_font.render(
“PIVADERS”, 1, WHITE), (265, 120))
[Link](self.game_font.render(
“PRESS SPACE TO PLAY”, 1, WHITE), (274, 191))
[Link]()
[Link]()
The Code ADD ANIMATION AND SOUND TO PIVADERS
[Link](self.refresh_rate / 2)
def make_player(self):
[Link] = Player()
self.player_group.add([Link])
self.all_sprite_list.add([Link])
def refresh_screen(self):
self.all_sprite_list.draw([Link])
self.animate_player()
self.player_explosion()
self.alien_explosion()
self.refresh_scores()
[Link]()
[Link]([Link], [0, 0])
[Link](self.refresh_rate)
def refresh_scores(self):
[Link](self.game_font.render(
“SCORE “ + str([Link]), 1, WHITE), (10, 8))
[Link](self.game_font.render( “The player_
“LIVES “ + str([Link] + 1), 1, RED), (355, 575)) explosion()
and alien_
def alien_wave(self, speed): explosion()
for column in range(BARRIER_COLUMN): methods
for row in range(BARRIER_ROW):
are similar
alien = Alien()
[Link].y = 65 + (column * (
but simpler
ALIEN_SIZE[1] + ALIEN_SPACER)) executions of
[Link].x = ALIEN_SPACER + ( essentially the
row * (ALIEN_SIZE[0] + ALIEN_SPACER)) same thing”
The Code ADD ANIMATION AND SOUND TO PIVADERS
self.alien_group.add(alien)
self.all_sprite_list.add(alien)
[Link] -= speed
def make_bullet(self):
if GameState.game_time - [Link] > [Link]:
bullet = Ammo(BLUE, BULLET_SIZE)
[Link] = -1
[Link] = 26
[Link].x = [Link].x + 28
[Link].y = [Link].y
self.bullet_group.add(bullet)
self.all_sprite_list.add(bullet)
[Link] = GameState.game_time
GameState.shoot_bullet = False
def make_missile(self):
if len(self.alien_group):
shoot = [Link]()
if shoot <= 0.05:
shooter = [Link]([
alien for alien in self.alien_group])
missile = Ammo(RED, MISSILE_SIZE)
[Link] = 1
[Link].x = [Link].x + 15
[Link].y = [Link].y + 40
[Link] = 10
self.missile_group.add(missile)
self.all_sprite_list.add(missile)
def is_dead(self):
if [Link] < 0:
[Link](self.game_font.render(
“The war is lost! You scored: “ + str(
[Link]), 1, RED), (250, 15))
self.rounds_won = 0
self.refresh_screen()
self.level_up = 50
[Link] = False
self.alien_explode = False
[Link](3000)
return True
The Code ADD ANIMATION AND SOUND TO PIVADERS
def defenses_breached(self):
for alien in self.alien_group:
if [Link].y > 410:
[Link](self.game_font.render(
“The aliens have breached Earth defenses!”,
1, RED), (180, 15))
self.refresh_screen()
self.level_up = 50
[Link] = False
self.alien_explode = False
[Link](3000)
return True
def win_round(self):
if len(self.alien_group) < 1:
self.rounds_won += 1
[Link](self.game_font.render(
“You won round “ + str(self.rounds_won) +
“ but the battle rages on”, 1, RED), (200, 15))
self.refresh_screen()
[Link](3000)
return True
def next_round(self):
[Link] = False
self.alien_explode = False
for actor in [self.missile_group,
self.barrier_group, self.bullet_group]:
for i in actor:
[Link]()
self.alien_wave(self.level_up)
The Code ADD ANIMATION AND SOUND TO PIVADERS
self.make_defenses()
self.level_up += 50
def calc_collisions(self):
[Link](
self.missile_group, self.barrier_group, True, True)
[Link](
self.bullet_group, self.barrier_group, True, True)
for z in [Link](
self.bullet_group, self.alien_group, True, True):
self.alien_explode = True
self.explodey_alien.append([Link].x)
self.explodey_alien.append([Link].y)
[Link] += 10
self.explosion_fx.play()
if [Link](
self.player_group, self.missile_group, False, True):
[Link] -= 1
[Link] = True
self.explosion_fx.play()
def main_loop(self):
while not GameState.end_game:
while not GameState.start_screen:
GameState.game_time = [Link].get_ticks()
GameState.alien_time = [Link].get_ticks()
[Link]()
self.make_missile()
self.calc_collisions()
The Code ADD ANIMATION AND SOUND TO PIVADERS
self.refresh_screen() “If you’re
if self.is_dead() or self.defenses_breached():
struggling to
GameState.start_screen = True
for actor in [self.player_group, self.bullet_group,
find free and
self.alien_group, self.missile_group]: open sound
for i in actor: effects, we
[Link]() recommend
if GameState.shoot_bullet: [Link]
self.make_bullet()
[Link]”
if self.win_round():
self.next_round()
self.splash_screen()
[Link]()
if __name__ == ‘__main__’:
pv = Game()
pv.main_loop()
Build an XLoBorg
tilt controller
Use the accelerometer in PiBorg’s small and
affordable XLoBorg device to turn your Pi into a
game controller...
[Link]()
[Link]()
[Link] = [Link]
class Ball([Link]):
def __init__(self, width, height):
[Link].__init__(self)
[Link] = (width, height)
[Link] = [Link]([width, height])
[Link](WHITE)
[Link] = [Link].get_rect()
[Link].x, [Link].y = WIDTH / 2, HEIGHT / 2
[Link] = (50, 50)
[Link] = [0, 0]
The Code ADD TILT CONTROL
def update(self, x, y): Update
[Link].x += x * [Link][0] The update method
[Link].y += y * [Link][1] in the ball class
print ‘X =’, x, ‘Y =’, y makes the ball move.
The method requests
def collide(self):
an x and y value –
if [Link].x > WIDTH - [Link][0]:
[Link].x = WIDTH - [Link][0]
we’ll be serving it our
elif [Link].x < 0: XLoBorg readings in
[Link].x = 0 the main loop later
if [Link].y > HEIGHT - [Link][1]:
[Link].y = HEIGHT - [Link][1]
elif [Link].y < 0:
[Link].y = 0
def main_loop():
game_over = False
ball = Ball(50, 50)
tilt = [Link]()
[Link](BLACK)
[Link](-tilt[0], tilt[1])
[Link]()
The Code ADD TILT CONTROL
[Link]([Link], [Link]) Feedback
[Link]() loop
[Link](REF_RATE)
The main_loop
[Link]()
function is where
if __name__ == ‘__main__’:
Pygame does its
try: heavy lifting. It’s also
main_loop() where we inject
the XLoBorg sensor
except KeyboardInterrupt: readings into the
[Link]() ball’s update method
Aber SailBot
The autonomous Raspberry Pi-powered robot yacht built
by British students that competes worldwide
How did you get into making and racing
autonomous sailing boats?
Dan Clark: It was because the opportunity
arose, really. I mean, robotics has always been a great
interest to me and then when the opportunity came up to
do something like this, I jumped at the chance.
Louis Taylor: The department does quite a lot of research
into autonomous sailing and they helped us start a team Dan Clark was
to actually build something for the [International Robotic an Aberystwyth
Sailing Regatta (SailBot)] competition. University student at
the time of writing,
Which competitions have you been in so far with the reading computer
Aber SailBot? science and artificial
DC: Last year in the summer we did SailBot 2013, which intelligence
was in [Boston, Massachusetts, USA]. Then we did the
World Robotic Sailing Championships, which was held in
Brest in the north of France. This year we’re going to be
doing the same two competitions again, but in different
places.
LT: This year SailBot is in [San Francisco, California, USA]
in June and World Robotic Sailing Championship is in
Galway, in Ireland.
Louis Taylor was
Are you particularly looking forward to one over the also at Aberystwyth
other? University studying
LT: I think SailBot because we have quite a lot of… computer science
unfinished business there. We were narrowly beaten by and artificial
the US Naval Academy by a few points [to first place]. intelligence. The two
met during their first
What made you choose the Raspberry Pi as a way to year tutorials
power your SailBot?
LT: We needed some sort of brains for the boat and
it needed to be somewhat low-powered, somewhat
compact enough to fit inside the boat. We wanted to
have the freedom to choose pretty much any language If you like
we wanted and obviously the Raspberry Pi lets us do Interested in the
that because it’s running a full Linux operating system. It robotics and
meant we could develop software on our Linux laptops, automation part
debug it on the laptops and then just put it on the Pi and of this project?
it would work instantly. Essentially we wanted something Then check out
that would run on Linux. Dawn Robotics for
DC: We already know how to use it, so it saved us from Raspberry Pi robot
having to learn anything that’s particularly new. kits:
[Link]
Had you used the Raspberry Pi in any projects before
the Aber SailBot? Further reading
LT: I had. I’ve also used the BeableBone and the To learn more
BeagleBoard, which are both considerably more about the Aber
expensive than the Pi. Sailbot, visit their
website at:
The Raspberry Pi Foundation is one of the sponsors for [Link]
the SailBot, how did that come about?
DC: In May last year we went to Cambridge to present
the boat at the Cambridge Raspberry Pi Jam; as it turned
out Jack Lang – one of the founding members of the
Raspberry Pi foundation – was there. He saw us and our
presentation where we said we needed some money
and he came up to us at the end to tell us the Foundation
could probably help us with that.
LT: It was pretty good, because at that point we were
uncertain as whether we could actually go to the
competition or not, because we hadn’t raised nearly
enough money to actually get ourselves to Boston. So
with a month to go to the competition, we were still not
sure whether we were actually going. We had a boat that
worked, but no money.
You’re working on a second version of the SailBot, will
it be ready for the competitions this year?
LT: Yes. So at the moment, we’ve been inundated with
coursework, exams and other univeristy work over the last
few months. But now term is finishing, we have a good
three weeks to put some really solid work on the boat. So
essentially we’re going to work full-time on it over the next
couple of weeks.
DC: It should be ready to sail, at least partially, in the next Below The Raspberry
two weeks. Pi is safely stowed
inside the hull in order
LT: At this point we can stop doing hardware and focus to prevent it from
more on the electronics and soldering. getting damaged by
the water
Once the second iteration of the SailBot is complete, “We’re quite
what will be the fate of the original boat? actively
DC: That at the moment is currently kind of designated as
looking for
a research boat to an extent. We’ve had a few ideas of
scientific papers we’d like to write around the topic. So this sponsorship.
boat will allow us to implement the experiments we need You can find
to do. out more
LT: Also it’s good to have two platforms for our software, information on
because the electronics and control system in terms of how to sponsor
hardware is almost identical. We can pretty much put the
us from the
same code on both boats and it should work. So we can
use that as a test for the other boat.
Aber Sailbot
website”
What else have you been using the Raspberry Pi for?
LT: I’ve used it for a small robot in the past with another
robotics team, so that was a small cute little thing that
picked up cubes and used vision to detect where it was.
I’m also working on another similar robot, as my pet
project.