• Save
Os Grossupdated
Upcoming SlideShare
Loading in...5

Os Grossupdated






Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Os Grossupdated Os Grossupdated Presentation Transcript

  • OSS in Amateur Robotics Mark Gross [email_address]
    • OSCON-07 talk based on my on-going SRS robot Magellan development experience
  • SRS Robot Magellan contest
    • Autonomous navigation to orange traffic cones in an urban park setting.
      • grass, potholes, sidewalks curbs, trees…
    • 1000’ approximate distance between farthest cone and start.
    • robot < 50 pounds, fits in a 4’x4’x4’ cube.
    • robot has fail save pause / stop mechanism.
    • See http://www.robothon.org/robothon/robo-magellan.php for rules
  • My robot’s components
    • 16f877 PIC micro controller base SBC.
    • Linksys NSLU2 : IXP420 computer.
    • servos, motor controller, encoder, ultrasonic range finders, digital compass, bump sensor, safety switch, USB camera, USB hub, USB serial dongle, USB memory stick.
    • built on a radio shack RC toy truck
  • Architecture
    • Dual SBC design
    • PIC for low level device interface
    • NSLU2 running Linux doing the high level control and vision processing.
  • Architecture cont.
    • The PIC talks to all the devices except the USB.
      • motor controller, motor encoder, ultrasonic range finders, compass, servos, bump and safety switches.
    • PIC implements RT control loop processing for speed, steering etc.
    • PIC implements a command response protocol such that the NSLU2 can issue high level command and poll for completion over the serial port
      • get status, track_heading, forward_turn, reverse_turn
  • Architecture cont.
    • NSLU2 running a hacked version of Slugos from the Open Embedded distribution.
      • Includes spca5xxx camera driver
      • Python, python serial, python image library and pyv4l
      • Runs my magellan.py python program from a init script in rc3.d
  • It’s all a Work in progress.
    • PDXBot 2007 results : “Flash” took second place*
    • Robot was barley ready in time and ran with some know problems.
    • Details on robot its evolution, implementation patches and code are available at : www.thegnar.org
    • Web site will be updated as I get ready for the Seattle robot event.
      • There is a lot more to do 
    • *out of 2 entrants ;)
  • Back to OSS in amateur robotics
    • PIC was programmed using JALv2, a BSD licensed compiler with a Pascal like syntax and a mixture of BSD and GPL libraries.
      • GPL and LGPL in PIC library code is problematic for production use of such compiled code. I will not say more about this as that will be a non-amateur application.
    • NSLU2 ran the SlugOs-image from Open Embedded.
    • The high level logic of the robot was programmed in Python.
    • The rest of this presentation drills down on JAL, Open embedded and python use for the application.
  • JAL (smells like Pascal)
    • Language created by Wouter van Ooijen
      • http://www.voti.nl/jal/index_1.html
      • in 2003 was release as GPL and a source forge community project was started.
    • JALv2 written by Kyle York, is a technically better compiler
      • having 2 and 4 byte integers make is very compelling.
      • I have used both versions and like them both, but if you want multi-byte math JALv2 is the only way to go.
    • The JALv2 compiler author is resistant to starting a SF or other community project site.
  • Some Simple JAL code
    • procedure ping is
    • var byte temp
    • _I2C_HW_startbit
    • -- all sensors will respond to a ping request sent to i2c address zero
    • _I2C_HW_put_byte(0x00)
    • _I2C_HW_put_byte(0)
    • -- get distance in cm.... (need to wait about 2ms/foot!)
    • _I2C_HW_put_byte(0x51)
    • _I2C_HW_stopbit
    • end procedure
  • JALv0.4.xx
    • JALv0.4.xx is a GPL compiler with GPL libraries
    • http:// sourceforge.net/projects/jal /
    • Installation is the standard ./config, make , make install - build process. builds and runs in Linux, cygwin, mac-osx, and OS/2
    • Includes a test suite
    • JALv0.4xx is a better OSS project than Jal V2 with community and SF repository
    • This version has become stagnate.
  • JALv2 (by Kyle York)
    • http://www.casadeyork.com/jalv2/
    • JALv2 is BSD without library files bundled with the compiler.
    • JALv2 is a technically better compiler
      • smaller code
      • supports multi-byte arithmetic
    • Compiler is maintained by one guy, the libraries are maintained by others.
      • No good point for users to contribute fixes to other than Yahoo group mailing list.
      • bugs in some Library files have gone unfixed at times.
  • NSLU2 and Open Embedded
    • http://www.nslu2-linux.org/
      • is a project of derivative of Open Embedded.
      • Has a nice makefile base wrapper so you don’t need to understand Bit Bake.
      • Its got a nice community and good for root file systems that maintain the NAS functions intended for the product.
      • After using it initially I moved on to just using OE.
    • http://www.openembedded.org/
      • its pretty cool.
      • more suited to hacking than nslu2-linux.org.
      • Has some usability warts.
  • Open Embedded
    • Can be thought of as a bag-O-distributions.
    • Automates tool chain build, target build and image packaging for many of the existing hackable hardware platforms available today, NSLU2, zarus, n800, x86 pc’s, iPaq’…
    • Customizable build includes kernel and a wide assortment of components one can choose to include within a build.
    • has a strong developer community and has good ties to the freedesktop.org, gnome, handles.org, and similar communities.
  • OE architecture
    • OE consists of 2 components
      • Bit Bake
      • recipe repository
    • Bit bake is maintained in a SVN repository.
    • The recipes are maintained in a Monotone repository.
  • OE developer community
    • Only a few key folks have check in access to the bit bake and recipe archives.
    • bugs are identified and logged in the project bugzilla.
      • patches and bug fixes are submitted via the bugzilla
    • there is an active and responsive mailing list
    • there is an active IRC channel.
      • most OE developers are EU based
    • Development is quite active, most of the kernels tool chains, and user mode components are current
  • OE implementation from a high level
    • Bit bake is the build engine
    • it is implemented in Python
      • it parses the configuration and recipe tree recursively to build a dependency cloud.
      • The seed point for traversing the dependency cloud is determined by the command line argument given to the bit bake command.
    • Builds are executed under a non-privileged user account.
      • uses a utility known as fakeroot to build root file systems and device nodes.
  • Recipes and Monotone
    • developer boot straps recipe tree using a wget …OE.mnt to bring down a 100MB monotone database.
      • then a recipe tree is checked out to bring down all the current recipes.
    • Monotone has some of the CMS flavor of git and mercurial, but is relatively obscure and doesn’t work through proxies well
      • Monotone also tends to need to be built from source, and depends on boost.
      • Once the recipes are pulled down you don’t need to use monotone again.
      • HOWTO’s exist on http://www.openembedded.org/
  • Hacking OE isn’t trivial
    • A good UI for target component and dependency browsing or customization is missing from OE.
    • Sometimes components are available for down load temporarily.
    • The BitBake has some implicit targets and behaviors that are hard to reverse engineer.
    • Maintaining customizations across OE updates can is hard.
    • Has a fair amount of wiki based documentation, but still can be a challenge for the new developer to wrap there heads around.
    • The oe mailing list is very helpful.
    • Helping to create better documentation for OE/BitBake is on my to do list
  • Hacking tips and tricks
    • bitbake has a number of debug and trace command line options.
      • nohup bitbake –DDD slugos-image
      • If doing a new build and it breaks on getting source, try again in a few days. Sometimes archives are not too reliable.
      • Save your downloads in a up-leveled directory
  • example: my slugos-image hack
    • removing slugos NAS related cruft
    • adding python, python libraries and USB camera driver
    • adding and fixing up the sca5xx camera driver
    • wedging in pyv4l component into my OE build.
    • Much of this is document in a patch on:
      • http://www.thegnar.org/embedded_linux/SlugOsOpenEmbedded.html
  • removing NAS cruft from slugos
    • edit conf/distro/slugos.conf
      • remove kernel FS’s not needed
      • remove ext2_progs
      • remove lrzsz
      • remove libata, pata-artop
  • Adding Python with selected addons to my slugos image
    • edit slogos.conf
      • SLUGOS_EXTRA_RDEPENDS = &quot;${SLUGOS_STANDARD_RDEPENDS} python python-serial python-imaging&quot;
  • adding sca5xx and v4l to slugos
    • edit slugos.conf
      • SLUGOS_STANDARD_RDEPENDS += &quot; +spca5xx +kernel-module-v4l2-common +kernel-module-v4l1-compat +kernel-module-videodev
    • kernel.bbclass
      • sca5xx driver needs to find config.h from kernel build.
  • Python image library and PyV4L inclusion to my OE tree
    • PIL built easily but the installation needed trimming as PIL includes a lot of components I didn't need and took up space on the NSLU2's 8MB of flash.
    • PyV4L was harder
      • needed to create a new recipe
      • needed to hack the pyv4l tarball to build and integrate that into my down load
        • note: pyv4l isn’t well maintained.
      • My current implementation is a complete hack.
  • pyv4l / OE details
    • added python-pyv4l to RDEPENDS
    • created a new python-pyv4l BB file
    • created my a new pyv4l.tar file
      • build was painful
    • See documentation of what I did on my web site.
      • updates to my web page with information on this is coming soon :)
  • summary
    • there are OSS tools to implement a wide range of robotics applications.
    • I have only talked about what I used for my latest project. There are more tools and projects out there with high coolness levels.
      • I didn’t even talk about other MCUs and projects
        • The Arduino project is very cool, www.arduino.cc
        • AVR’s are better supported by OSS tools than PIC’s.
        • ARM-7’s are also cool, (I’m playing with an NXP2124 using the gnuarm tool chain with newlib).
    • Open Embedded and hackable COTS devices are effective platforms for robotic application development needing more than a control loop.