Thursday, September 16, 2010

Weekly meeting

This week:
  1. Review the task list.
  2. Next week's meeting canceled -- Dr. Jones traveling to Case Western.
  3. Look through SVN, Dropbox files.
  4. Clean and inventory the lab.

Thursday, September 9, 2010

Organizational meeting

It's time to get the semester started! The agenda:
  1. Introductions, group home page
  2. Research overview
    1. Dynamics for continuum robots
    2. Desktop supercomputing
    3. Alternative navigation
  3. New student orientation
    1. Policy -- get everyone started on training. Jacob - update policy page. Krishna - add link to library formatting zip files.
    2. Make sure everyone is on e-mail list, has permissions to edit home page, task list, SVN. Dr. Jones -- add Quintin, Tommy, Jacob, Ankit (SVN). Get SVN path fixed for everyone else.
    3. Look at thesis formatting.
    4. Review software. Get everyone started on SVN. Dr. Jones to do -- find MathType old version.
    5. Update the people page!
    6. Discuss recommended courses.
  4. Schedule weekly meeting times; look at the task list.
  5. Lab: need to clean and inventory. Dr. Jones - card access for Steven, Ankit.
  6. SVN, Dropbox need to clean up! 

Monday, September 6, 2010

Fun links

I've been focusing on staying up to date with my inbox, but my blog has fallen far behind. A bit of catch-up:

  • I'm using Camtasia to create a series of videos for the "Digital approach to Bible study" Sunday School class I teach. The site uses Joomla, so I got to learn enough of that to post videos using a plugin. While the first two are just .mp4 files and therefore require Quicktime, I figured that uploading an extra file allows me to use the Flash player, which is much more widely supported.
  • The Autonomous Robots blog is neat.
  • Python(x, y) is great! I'm really liking it for my Intro to Robotics class. I certainly miss some features (a nice integrated debugger is one).
  • I decided to have a bit of fun and purchase the original StarCraft. It is fun!

Thursday, August 5, 2010


Here's a random collection of links I found interesting.

Friday, July 23, 2010

Electric cars

Electronic design posted an interesting article on the electric car. Here's an image of the Baker Electric, from the early 1900s. Wow.

Wednesday, July 21, 2010

Summer camp starting

Today is the beginning of the robotics portion of Summer Bridge camp I'm helping with. Looking around the web, I ran across another interesting teaching robot, the Finch. The Finch can use Myro, a Python robotics library aimed at education; I might take some ideas from that.

A team is driving an autonomous robot for 13,000 km -- wow! They start tomorrow.

Thursday, July 8, 2010

Almost done

My time here at Eglin AFB is almost over. It's been a great time! I've enjoyed learning a lot of new things and using skills I've developed over the years to solve some of the problems. I gave a presentation, but can't distribute it publicly until I get it approved.

I recently discovered several wonderful GMail labs features on their blog: hierarchical labels, archive and send, SMS chat, and offline mode. Also, I learned that I can drag and drop attachments. Wow! That's muuuuuch better.

Now, for random links:
A fun video!

Friday, June 4, 2010

To do

I tried searching for a paper to go with the quad-rotor video I posted yesterday, but no luck. I did find a couple of other papers, though.

Today's tasks:
  1. Review paper
  2. Quad-rotor dynamics
  3. Get wireless Matlab control working
  4. Work on P&T
  5. Look for Summer Bridge assistants
  6. Work on parts list -- 6 V and 3.3 V DC-DC converters; price for Meanwell unit

Thursday, June 3, 2010

Quad-rotor and LiPo

Some notes on LiPo batteries:
  1. Here's a good summary. In particular:
    1. We need a connector to mate with the battery's taps, to check that each cell is fully charged. A charge balancer would be nice; I've added one to the parts list.
    2. We need a safe charging set-up, with a bucket of sand handy and probably a Pyrex dish with sand to charge batteries in.
    3. Don't charge at more than 1C.
    4. Our ESCs have a built-in low-voltage cutoff that is set to (starting battery voltage) * 0.74. So, the batteries MUST BE FULLY CHARGED BEFORE CONNECTING THEM for this to work properly.
    Now, what neat things can a quad-rotor do?

    The list:

    1. Look up info re: LiPo charging / discharging
    2. Look for 1A inverting regulator
    3. Consider appropriate battery for quad-copter
    4. Review paper
    5. XBee / Bluetooth
    6. Finish deriving and document dynamics

    Wednesday, June 2, 2010

    To do

    The list for today:
    1. Paper review?
    2. XBee
    3. Meeting notes
    4. Schedule pest control
    5. Dynamics

    Friday, May 28, 2010

    Today's plans

    I finally figured out why my OpenCV code didn't work: there was a transpose in one matrix and I didn't understand how OpenCV lays out memory (it pads each column so that it's a multiple of 4 bytes). In general, indexing in OpenCV involves a painful cast; this is the most helpful summary of how to do that.

    I still can't get two XBee modems to communicate; I'm not sure what I'm doing wrong. I just found a nice howto and a tutorial which looks like the right things to try.

    Plans for today:

    1. E-mail / admin
    2. Derive dynamics for the quad-rotor
    3. Work on a list of reviewers for my P&T application
    4. Start deriving continuum dynamics
    5. Order breadboards, PICKit2s, mini-Bullys, etc.
    6. Prepare for meeting with Jimmy, TJ
    7. Work on recruiting Summer Bridge helpers

    Thursday, May 27, 2010

    The morning disappears

    The morning is disappearing. I worked a bit more on my CV, realized I'd forgotten to add my SECON paper and presentation to my list of publications. That took time to dig up (I still don't have the page numbers, can't access the ECE web server to post the PDFs, etc.). Going through my inbox, organizing some Summer Bridge things, etc. took a long time! I have just a few more admin tasks before I can (hopefully) be productive.

    The good news is that my home publications page and research publications page are a bit more updated as well, with some additional citations found.

    Wednesday, May 26, 2010


    It's high time to get a bit more organized for the summer!

    I've noticed several things about my netbook
    1. It worked best before I installed lots of software. First, the more I install, the more updaters run in the background, consuming precious memory. I'm now in the process of gradually removing unnecessary programs in hopes of restoring some of that performance.
    2. I went through a series of bad turn-on problems after upgrading my netbook's RAM to 2 GB (I have an Acer Aspire One 531h). I finally discovered that powering on with the power supply attached produced failures, at times even reporting that I only had 1 GB installed. I'm guessing the supply can't handle the initial current demands. Likewise, restarting instead of shutting down then powering back on produces flaky behavior.
    Things to do:
    1. Read
      1. The quad-rotor thesis
      2. Adam's paper
      3. Look at the QR decomposition in more detail. I'd always used the SVD for pseudo-inverse calculations, but wonder if the QR is more efficient.
    2. P&T
      1. Determine a list of reviewers
      2. Write a cover letter
      3. Fill out the forms
      4. Ask Tommy questions on his students for CV
      5. Get CV reviewed
    3. NSF
      1. Read reviews
      2. Look up references and incorporate
      3. Start reading and editing
    4. Quad rotor
      1. Order a MAX3232 to interface with the Microstrain / call Microstrain (look at IMU part number)
      2. Talk about DC-DC converters / power supply for PIC, speed controller
    5. Summer bridge
      1. Order parts: breadboards, PICKit 2s
      2. Debug / work around motor noise problems
      3. Build up alternate platform with encoders
      4. p14p development work -- GPIO testing
    6. Other
      1. Talk with Ben
      2. Schedule a meeting with TJ

    Monday, May 17, 2010

    Video tracking on a microcontroller

    Wow; I'm impressed. Here's a great senior design project in which the students do video processing / tracking on an AVR. That's a good reminder that even low-resolution, low-speed stuff can produce some impressive results!

    When we do image processing, the question should be "How little data do I need?" instead of "How large an image can I process in real time?

    Friday, May 7, 2010

    Promotion and Tenure

    I started as an assistant professor in August of 2005, so I go up for promotion and tenure beginning this August. I'm trying to get started early and work on it gradually throughout the summer, in order to do a better job and enjoy the process more. The CAAD page on P&T has a great image!

    As always, the process begins with some information gathering:
    1. The Faculty Handbook contains P&T procedures (also available as a PDF).
    2. The BCoE P&T policies.
    3. ECE P&T policies.
    4. The Provost's office page for faculty contains some useful info:
      1. Documenting teaching effectiveness.
      2. A list of peer research institutions from which I should get external letters.
      3. Tips on promotion and tenure.
    5. The UPTC website (which was very well hidden) has a suggested application organization document. Note: I've been told that the info on this web site is outdated and the site itself will soon be taken down. However, I still find the suggested application organization helpful and see elements of it in the P&T presentation given Spring 2010.

      Continuum robots

      Catching up on my e-mail, I've run across a couple of interesting links:

      1. A paper worth reading on a novel 3D elephant trunk.
      2. The ICRA workshop on medical applications for continuum and serpentine robots. A couple of paper listed in the papers section will definitely be worth reading.
      3. DuPont's latest work.

      Thursday, May 6, 2010

      At Eglin AFB

      I'm now at the Eglin Air Force Base in Florida. It's beautiful here! I've been enjoying meeting people, but at the same time I'm still in the process of discovering a good project to work on.

      From some e-mail catch-up, the robotics podcast looks interesting.

      A member of the Eglin group is a big advocate of PythonXY. It looks like a nice toolkit for doing MATLAB-like work in Python. Very interesting!

      Monday, April 19, 2010

      Amazing bionic elephant trunk

      Wow. I've seen a number of neat Festo demos, but this is nearest and dearest to my heart. Krishna found it.

      Now, how can I get my hands on one of these? :)

      Wednesday, April 14, 2010

      UAVs galore

      Here's a nice article which goes through a number of UAVs out there, from hobbyist to military versions.

      Tuesday, April 6, 2010

      Python for robotics

      I'm planning on using Python-on-a-chip for the Summer Bridge program and for my Intro to Robotics course next semester. I'm pondering also using Python on the host PC for Intro to Robotics, instead of Matlab. Thoughts:

      Helpful links:

      Requirement MATLAB Python
      Pseudo-inverse pinv linalg.pinv
      ODEs ode54, etc scipy.integrate
      3D visualzation My Coin/MATLAB bridge IVuPy or pivy

      Monday, April 5, 2010

      Scary video

      Wow. Big brother is coming, and we'll welcome him with open arms. Even worse, I'll be helping design the systems that makes it all possible. Wow. (Here's the full version of the video).

      Friday, April 2, 2010

      Clean up and catch up

      I'm working today, trying to clean up and catch up a bit. I've posted an updated oscope tutorial. Others stuff:

      • A great article by Mark Taylor on his ideas for effective engineering education.
      • Helpful advice for new faculty (I could still use it!)

      Tuesday, March 23, 2010

      Embedded Systems notes

      I'm impressed by the Embedded Systems newsletter from Netrino. There's a lot about programming I can learn from them! My favorite links:
      • Inside info on the Mars Pathfinder rover software failure.
      • Michael Barr's blog.
      • Nigel's Jones' blog.

      Monday, March 22, 2010

      Fractal fun and more

      After a couple of back-and-forth e-mails with the judges, it turns out that the MSU SECON team was judged third, due to eight penalty point assessed in the final round (a total of two were assessed in the previous three rounds; the behavior of the robot didn't change). Oh, well -- that puts us in 3rd place. It's a great robot and a good reminder to focus on standards other than winning.

      Some fun links:
      • Johnny Lee produces absolutely amazing videos of this HCI ideas. Wow.
      • Fractals can be quite pretty (and there are more!).

      Saturday, March 20, 2010

      SECON frustration

      I've just come from the awards ceremony, in which MSU received the 3rd place trophy while the University of Florida received 2nd place. The Florida team confirmed that they thought their score was lower and ours higher. However, the person that did the scoring is now sleeping. That's both disappointing and frustrating.

      SECON results

      The day is mostly done and the results are in. The robotics (hardware) team ended up with 2nd place overall, a great feat. In the initial three rounds, they scored 271 points (best 2 of three games), while the next team came in at 211. In the final match, all earlier results are ignored and the 3rd place robot built by Western Kentucky won with a very strong run of 166 points, while the MSU's SPIDR scored 111 and Florida's robot scored 105.

      The software team didn't place and was frustrated. They were placed in a cloud computing environment, which meant that keystrokes sometimes took seconds to appear. The problems primarily dealt with UI creation, rather that classical problem-solving. Given this is an IEEE programming contest, I'd like to see all teams given some sort of hardware (say, an iRobot Create) plus a task of making the robot do something interesting and useful.

      I took lots of video and photos, though I don't know when I'll sort through it all. Unfortunately, the Windows 7 Starter on the laptop doesn't play MPEG files from the camera, which is a bit disappointing.

      Go Dawgs!

      The competition begins

      Today is competition day here at SECON! The software competition team got started half an hour ago (it runs from 7 AM to 2 PM, with finalists then going an extra two hours). From what I hear, the hardware competition team (MSU_SECON on Twitter) is having a hard time, trying to improve their robot to take on the top dog, which can run ~6 laps compared to the teams ~4 lab abilities. Last-minute changes are always scary; I hope the robot still runs consistently for the competition!

      Internet service got much better last night, so I'm more able to catch up on e-mail and get a few things done. That's nice.

      I always learn something when I come to SECON. For example, one team showed me their Arduino environment. The things that made it useful for then is the object-oriented libraries for the processor (an Atmel 8-bit part) with a C++-like syntax based on Wiring. Essentially, a good library enables a wider audience to get involved in microcontroller development. I think my Python idea is therefore good, though the slowness and bulk of Python might be a barrier.

      Interesting links:

      I'm doing some catch-up, going through my inbox as usual. That always takes time. Projects for today (hopefully):
      • Permissions for the review paper -- I still haven't applied for them.
      • Salary request for Eglin trip.
      • Paper review -- I'd like to at least start reading a paper today.
      • Proposal review -- I need to download and take a look at this stuff.

      Beach and SECON

      It’s been busy. But then again, when haven’t I been busy? I’ve enjoyed a vacation to the beach in Destin, Florida with my family. Praise God for very pleasant weather – the boys had lots of fun.  While there, my laptop died Sunday evening! Ouch – I’d been working on a presentation to give to a research group at Eglin AFB on Tuesday, plus hoping to do a bit of work on a presentation on Friday at SECON. It’s a rather helpless feeling to be not only without Internet, but without a laptop when it’s needed!

      However, that served as a good reminder for me that God is good; he provides for all my needs. I found a computer repair guy that actually came by my condo and picked up the laptop, then dropped it back at the main office when he finished without charging me for his time. That was very gracious; he was able to determine that the root cause wasn’t as simply as a corrupted boot sector, but looked more like a hard drive controller failure.

      Hmmm. That left me without a laptop! So, based on the very positive feedback from several students who owned netbooks, I decided to purchase one -- $300 from Wal-Mart. Wow. I’ve been very happy with it thus far; it enabled me to give my presentation (after my grad students sent me the necessary files), plus be productive here at SECON.

      We drove back from the beach on Wednesday, then I headed out Thursday morning for SECON in Charlotte, NC. The drive went well, but was (of course) long. We arrived, checked in, picked up our registration materials, then had dinner. I was scheduled to give a presentation on microcontroller education the following day at 10:00 AM, but I hadn’t created more than two slides! So, I stayed up and did some work on the presentation, then worked on it the next morning. By God’s grace, it was in decent shape and the presentation went quite well. I got to meet several possible collaborators afterwards, then spoke with Microchip representatives. Both opportunities were very encouraging; again, praise God.

      Wednesday, March 10, 2010

      Back to blogging

      Sigh; I think I've let busyness overwhelm me lately, since I haven't taken any time to think or plan. Instead, I've mainly be doing. That's fun, but not a good long-term approach. So, in an effort to reorganize a bit:

      Random links:

      My p14p project doesn't work, though I can't figure out why. Sigh. I am making good progress on implementing features, though.

      Tuesday, February 23, 2010

      Catching up

      Last week was spent getting a journal paper revision done by the deadline. The paper (which is double-spaced) is 57 pages. That was a lot of work; I'm guessing ~25 typeset pages, or 3 normal journal papers. I wish I could somehow get that much credit for finally publishing this one. The editor indicated that, pending revisions suggested by the reviewers, they will accept our paper. Praise the Lord.

      Lessons learned:
      • When I'm busy, I should add a vacation message saying I'll only respond to urgent e-mails.
      • I discovered TexWorks, which is a great way to work on Latex documents.
      Today's list:
      1. Clean my office
      2. Go through e-mail
      3. Work on review paper copyright stuff
      4. Withdraw my paper to Russia, since I'll be in Florida for the summer
      5. Work on a revised interval analysis paper
      6. Work on p14p. I have so many ideas; I just want to implement them!

      Friday, February 12, 2010

      Fun links

      My inbox is growing, so I need to spend time to day thinning it out. Ouch.

      Luxury cars run on 20+ million lines of code. Wow.

      A student built a neat hexapod. According to the story, parts came from Crust Crawler Robotics, though I can't find them on that web site. It's powered by an on-board Intel Atom packaged as the Fit-PC2. Very impressive! Here's the video:

      It looks like some research groups are making progress on the nanocam featured in Alex's body book!

      Here's another video showing applications of that idea. It's a year old, but still seems like a simulation.

      My list:
      • Cal Dan Stutts
      • Create test 2 for Micro
      • Work on paper review
      • Work on review paper revision
      • Write recommendations
      • Make SECON hotel reservations

      Thursday, February 11, 2010

      Weekly meeting agenda

      Weekly meeting:

      1. Group lunch - Friday at 11:30?
      2. Task list - review and update.
      3. Review and update group policies - place dates for future sessions.
      4. Neat movie found by Krishna
      5. Research update
        1. Dr. Jones
          1. p14p - Progress; Doxygen support added.
          2. Funding - Air Force Summer Faculty Fellowship Program, Eglin AFB
          3. Funding - Time to make a movie!
          4. Funding - Looking into contacts for CUDA / ERDC work. Need to contact Dr. Ed Luke, who may have some expertise.
          5. Research - Another journal paper accepted. Revisions due on the accepted review paper.

      Tuesday, February 9, 2010

      Today's list

      Looking around a bit more at the AVR community, it seems that WinAVR is the most common choice that many use to write C code for the AVR. However, there's not IDE; instead, it uses makefiles. Ouch. Not a good choice for teaching.

      I recently did a voice-over for a simulation Buddy produced which shows the behavior of a fiddle string. I found this behavior complex and fascinating. Buddy's working on a version which will show the string in 3-D; below is a 2-D slice. Using Camtasia made is so easy to quickly record this.

      I spend some time yesterday evening creating my new personal home page on the web, since my old home page is years out of date. It's fairly simple, but at least a start.

      I felt like a kid in a candy store yesterday while order parts for the Summer Bridge program. I hadn't realized that Pololu (named after a valley in Hawaii) offered some many nice robotics parts. I'm also glad I could finally get the order placed; it took a while, but I think I found most of what I need.

      Little did I know, but the first annual National Robotics Week will be held from April 10-18!

      Today's plan:
      1. I still need to update the Micro libs with the bug fix.
      2. Spend a small amount of time on p14p. My plan is to put small but steady amounts of time in, since I can't afford to spend a lot of time on it.
      3. E-mail as always. I'm mostly caught up, with just a few items to take care of.
      4. Call Dan Stutts to finish our earlier conversation. Though not pressing; I can also do that on Wednesday.
      5. Research -- I need to review a paper, revise two papers.
      6. Funding. I really need to do this, but with other deadlines looming it's not looking like I'll make much progress. Perhaps I can put together one slide or make some other small quanta of progress.
      7. Type in corrected Micro grades.
      8. Clean up. My office is a dump. Update: better now.

      Monday, February 8, 2010


      Thank you for taking the time to look at my blog! Here's a brief introduction to who I am.

      My research interests include robotics, real-time control-system implementation, rapid prototyping for real-time systems, and modeling and analysis of mechatronic systems; for more information, see my professional page. On a more personal note, my wife keeps all our family's photos on her blog. My profile gives a few more tidbits of information about me, while my old personal web page contains outdated information.

      I'm a Christian and find I enjoy teaching both in the classroom and outside, primarily by leading a Sunday School class at Emmanuel Baptist Church. I serve as the faculty sponsor for Phase 2, a discipleship-focused ministry for college students.

      Test time

      Today is a Micro test day. The list:
      1. Order Summer Bridge parts!
      2. Update the Micro libs with the bug fix
      3. p14p work
      4. Double-check SECON motor selection
      5. Finish and print the Micro test
      6. E-mail clean-up
      7. Call Dan Stutts
      Neat stuff: Nvidia keeps coming up with amazing applications for its cards: real-time physics (including cloth!) and real-time ray tracing. They also have a scene graph language that sounds interesting!

      Thursday, February 4, 2010


      The plan for today:
      1. Check with Sol on the Micro parts order. Yesterday, I verified that the three power supplies he sent would work. This also means we can move to a cheaper power supply, I think.
      2. Order parts for the Summer bridge robot. In particular, I'd really like a PIC24HJ128GP502 to play with.
      3. p14p work - I figured out an important bug (building the same binary using two different versions of Python). Now, I can code on the PIC24 port and also work on Doxygen generation.
      4. Recommendation letter for Brad -- need to do that today.
      5. Weekly meeting for the robotics research group. I'd like to do a paper review, but don't have time for that today. The review is due the 22nd?, so I do need to get started.
      6. Work on the review paper. It's due the 18th, so I need to jump on it.
      7. Update the Micro libs, based on a bug report.
      Weekly meeting:
      1. Group lunch - Friday at 12:30?
      2. Task list - review and update.
      3. Review and update group policies - place dates for future sessions.
      4. Neat movie found by Krishna
      5. Research update
        1. Dr. Jones
          1. p14p - Progress; working on developing hardware interface libraries.
          2. Funding - NASA pre-proposal rejected
          3. Met with the Industrial Technology group on robotics collaborations.
          4. Turned Buddy's amazing sim into a movie.

      Tuesday, February 2, 2010


      Last week disappeared, mainly in getting p14p up and running on the PIC. The code is now in reasonable shape; I'm doing some clean-up and documentation work before plunging into further development.

      Interesting things: a HUD display on an iPhone to control a quad-rotor craft; this augmented reality idea is a great way to debug robots. I stumbled across a free book on robotics using Python running on a PC to control a robot. For embedded programming, Stack Overflow makes for interesting reading.

      Things I'm working on:
      • My overflowing inbox, still containing a fair amount of mail to sort through and reply to.
      • I now have funding to build the Summer Bridge robot, so it's time to order parts!
      • The continuum review paper was accepted pending a few revisions, so I need to get started on those.
      • The limiting case paper is still languishing and needs attention. Sigh.
      • I need to write the Micro test!
      • Report lights to be replaced, arrange some tutoring, other misc stuff.
      • Write recommendations.
      I'd like to also think about how to structure a Python-based PIC24 hardware library. Thoughts:
      • I'm not certain what the balance between writing in C and wrapping in Python vs. mainly writing in Python is.
        • One approach: define readBits and writeBits functions in C, then call that from Python for all hardware access. Pros: less wrapping. Cons: slower, might take too much RAM space.
        • Another approach: balance between Python and C, building Python classes on top of C functions. In essence, it's a rewrite of the existing PIC24 library plus lots of wrapping.
        • The other extreme: wrap the existing library in Python. That's a lot of wrap with little Python structure to help.
      • All the peripherals on all chip variants keep the same address in memory; duplicated peripherals have the same basic layout repeated at an offset. I'd like to take advantage of this by writing a function which can operate on any port instead of duplicating a function multiple times for each port.
      • Port configuration needs the most redesign, since it's implemented as hundreds of C functions and macros. Thoughts:
        • Create a digitalPins class. The constructor takes parameters of port, firstBit, numBits, isInput, isOpenDrain, isPullup and sets bits accordingly, issuing an error if the requested resources don't exist (on a nonexistant port or bit, a port with no pullup ability).
          • This requires writes to PCFG, ODBC, TRIS, CNxPUE. What't the best way to keep a table of PCFG, CNxPUE mappings?
          • Does it make sense to also provide a read back of these bits? I've never needed to do that in all my coding. In particular, reading back PCFG, CNxPUE bits through their mapping to port/pin combos would be complex. Probably not.
          • Should this function also make sure no peripheral output pin is mapped to the pin? That's definitely additional complexity. I'm not sure how much.
        • Override read and write: if the pins are all outputs, send writes to LAT, otherwise to PORT. Provide read access to PORT, LAT and write access to either PORT or LAT.
          • Question: should each read/write check to make sure the port is still correctly configured? That means reading back PCFG bits, which is painful. Probably not.

      Thursday, January 28, 2010

      Weekly meeting agenda

      Today's plans (here's the last meeting agenda):
      1. Task list - does everyone have access?
      2. Review and update group policies.
      3. Research update
        1. Dr. Jones
          1. Tutorial on the data transfer protocol.
          2. Our group's videos are featured on the IEEE RAM YouTube channel. I've entered some photos in a contest for the front cover of the IEEE Robotics and Automation magazine.
          3. Python now runs on the PIC24. Still work to do for the Summer Bridge program.
          4. Prepare a quad chart, two slide summary, three slide summary of the group's research.
          5.  Continuum review paper accepted; need to review another paper.
        2. Others

      Python on a PIC

      After some long hours, I got Python compiled and working on a PIC24HJ64GP502. It barely fits, but it does all work! Things to do:
      1. Clean up the make process. In particular, I'd like to be able to use make to build just the C code from the Python sources. I do have everything else building from both MPLAB and a Makefile (ugh).
      2. SVN commit this to the project.
      3. Write code to interface with the hardware. Idea: write a read/writeBit(s)/Word function, then use Python to build nice classes around all the peripherals. However, I'm not sure if there's enough RAM or if the Python will run too slowly to be practical.
      4. Put together a nice GUI so I can edit code, save it in a file, or send it to the PIC\
      Some notes: to run ipm, "/cygdrive/c/Python26/python --serial=com14 --baud=57600".

      Thursday, January 21, 2010

      Building a bridge

      I'm planning on helping with the MSU BCoE Summer Bridge program. I'm planning on a 10-day portion, having the students build a WareBot: a robot which follows line to deliver packages, avoiding obstacles along the way. There are two portions: the mechanical platform and the microcontroller. I'd like to develop a simple tracked mechanical platform to use DC motors, a servo and an IR distance sensor, and line sensors. I hope to have a student complete that for me this semester; the question of how difficult it is to build these remains. The microcontroller question is more complex. I could use a PIC24, but C programming for it would be painful. A second option is the BASIC Stamp; a third option would be some sort of Python-powered uC (perhaps an ARM).

      Investigating the BASIC Stamp, I'd think that a BASIC Stamp II would be fine. It needs a serial connection to the PC at RS232 levels per the schematic (sigh), so just an FTDI cable doesn't work (here's an example of using an FTDI chip plus interfacing transistors). The USB Board of Education provides a nice setup, but the prototyping area is too small, plus it's somewhat expensive. I'd need to add an additional breadboard to this for the sensors/motors I've chosen. PBASIC is OK, but I'm not that excited about it. Their IDE is nice, and integrated with a bootloader, which is very good. However, it doesn't have any analog inputs, which is bad; an alternative is to use an RC delay to read an analog voltage.

      The alternative would be Python running on a uC, supplemented by I/O libraries. That's a lot of work, especially if I'm not planning on using it elsewhere. However, it looks like I could buy one and follow the tutorial; the library looks reasonable.  However, I don't fully understand how to send it code / bootload it. I've downloaded the code and now need to update my Cygwin install to build it. Looks like more work, but also looks promising...

      Update: UNIX builds are always painful. PyChip built fine, after I found the docs/src/BuildSystem.txt to help me. I needed docutils to built the html files, which was easy to install after finding it. make check fails with a compiler error on ut_dict.c, which wasn't encouraging. Reading the docs/src/InteractivePython.txt, it seems like the interactive mode does what I'd hoped: transforms source code to bytecode, sends it to the target, then prints the results of executing that code on the target. Given that the PIC24HJ64GP502 has 6K of RAM (plus 2K of DMA space), perhaps I could run on it; docs/src/FrequentlyAskedQuestions.txt recommends 8K of RAM, with 4K as an absolute minimum. Of course, I'd then need to wrap many of the C functions in Python, which would be a pain.

      Hardware update: PyChip has some support for the a very nice STM32 board which costs just $25! However, it uses an RS-232 connection, which is a pain. I'm not sure if the TX and RX pins are accessible at TTL levels.

      Interesting articles

      Reading in the IEEE Spectrum, I ran across two interesting articles. First, an interesting perspective from a University of Alabama professor on the climate, contrasting strongly with claims that climate data is unquestionable. (Note that the second article gives a series of opinions from the pro-change perspective, rather than factual claims, though it sounds factual.) Second, an interesting article on the China's Great Firewall gives a graphics below of what's censored as the image below:

      In addition, a friend of mine with MS pointed me to some very exciting news: narrowed veins  (note the PDF is freely available) which do not carry enough blood away from the brain may be the root cause! There's a TV news story and web info on it as well.

      Wednesday, January 20, 2010

      Micro updates

      I spent some time today working on an updated slide for Micro based on what I taught; I think it does a better job of capturing the MOV instruction's abilities.

      I've also been thinking about re-doing the course using video supplemented with in-class exercises. I feel like I know what I'd like to do in these videos and how to do so reasonably efficiently. Now, what should I cover in the classroom without overwhelming myself?

      Based on today's lecture, I need to have two levels of exercises: simple problems which verify what was taught, versus more difficult problems that require a bit of reasoning. For example, I task students with swapping data between two registers or memory locations as in-class exercises. I was surprised at how many questions and how much confusion this could generate. For the video portion, I'd go with something simpler: what happens after a sequence of MOV instructions? For the in-class exercises, I can ask them to perform a task (swapping) using these instructions.

      The second in-class question is how to use in-class quizzes or something like that to reinforce the lecture. My guess is that I'd start with exercises, develop a good set of them, then move up to creating quizzes after the exercises are done.

      Now on to my annual review, which I've been avoiding all day...

      Tuesday, January 19, 2010

      Tutorial created

      Pondering a bit more on better ways to teach, I think my last few problems are resolved. In particular, my plan is to create a short (~7 minute) lesson which ends with an example, then an exercise based on that example. The exercises can and should be PC-based, such as writing and simulating some assembly code. I'm planning on recording in Camtasia from PowerPoint slides, supplemented by bringing in demos on MPLab, Quartus, etc. and showing data sheet, web sites, etc.

      As a first pass of doing this, I've created a dataXfer tutorial video and accompanying docs. It took longer than I'd planned and I see several things to improve on in the future. However, I think the idea is sound and fairly do-able.

      PC tools:
      • ZoomIt is a nice way to draw things while recording a video.
      • The latest version of Doxygen (1.6.2) doesn't work with my #ifndefs. After much playing, downgrading to 1.6.1 solved the problem. It now includes a nice search feature build into the docs!
      But these things have eaten so much of my day and there's lots I haven't done yet...

        Sunday, January 17, 2010

        Improving micro

        Three of my group's videos are now featured on the IEEE RAM YouTube channel. That's marketing progress! I tried uploading the 2007 SECON video on Friday, so I can replace the audio with something legal. The upload failed, however, so I'll try again Tuesday.

        One my my Micro students sings in a barbershop quarter. How neat! Here's the podcast:

        Note: this slick player came from here.

        One thing I've been thinking about is how to improve Micro. One suggestion by Mark Taylor involves placing all the lecture content in videos which students watch, then using class time to build problem solving skills. I like the idea, but there are several problems I need to work through to get there. My thoughts:

        • I typically include a lot of group work / discussion as I give the lecture. This gives me a chance to correct wrong impressions, etc. How can I incorporate this into a video lecture?
          • Just giving the correct answer after an exercise encourages not doing the problems: I know that I'd just watch the thing rather than work the exercises.
          • Not giving the correct answer might leave students confused when I tried to build on that concept later in the lecture.
        • How do I make the lecture interesting? I know that I'd be bored by lecturing to my PC for an hour.
          • Throw in video clips of me? If so, when and why?
          • Break the lecture up into 10 minute pieces, ending with an exercise due in class?
          • Throw in some background music? See it more like a radio program?
          • Perhaps use screencast advantages: show MPLAB doing something, pull up and highlight data sheets, refer to book pages.
        • Techincally, what's the best way to do this?
          • The simplest approach, probably a good place to start, is to narrate my PowerPoint slides.
          • It would be nice to splice in a screencast, etc. Perhaps make that a movie then embed in PowerPoint?
          • Adding some video (here's a motherboard, etc.) would definitely add some interest.
          • However, editing this might become a lot more painful.
          • I'd no longer have a simple set of slides to distribute, but a whole production. I'm not sure whether book adopters would like the multi-media version or not.
        • Tommy pointed out that this would be a great tool for a week when I was gone: record my lectures!
        • In the end, I'd like to just try it: record one lecture and see how it goes.

        Thursday, January 14, 2010

        Meetings and e-mail

        Bob passed on a neat quiz on embedded C. Wow -- I only got a 70%. Good stuff! The only annoyance is the registration requirement.

        I've spent most of my morning working through e-mail, scheduling meetings, etc. It's amazing how just e-mail backs up.

        Today is our research group meeting. Topics:
        1. Introductions - Justin and Jae-Pyung are new.
        2. Videos - from Ankit and a paper to review.
        3. Machining help - the Industrial Technology group is will to make things for us.
        4. Research update - everyone talks about what they're doing and any recent progress
          1. Me - My focus is marketing, followed by the paper with Durga.
            1. Ankit's movie 
            2. Summer bridge / Micro demoBot / Intro to Robotics base - with Cory
            3. The SECON movies are now on my YouTube channel.
            4. Three of our group's videos will be featured on the IEEE RAM YouTube channel.
            5. Prepare a quad chart, two slide summary, three slide summary of the group's research.
            6. Brainstorm on a good image / movie to showcase our group.
            7. Web site updates and improvements.
          2. Buddy - dynamics works!
        5. Procedures
          1. Review group policies. New: responsible conduct of research requirement to receive NSF funding.
          2. YouTube videos and audio tracks - from what I can tell, our videos don't constitute fair use. We need to use only free music. Sources:
            1., -- checked; this is truly FREE.
            2. YouTube's AudioSwap -- but they reserve the right to put in ads.
            3. Google for "free legal mp3" gives (unchecked), (unchecked), and more.
            4. (unchecked)
            5. NOT FREE: prohibits free usage for Internet videos (see item h on their terms of use), charging $100 per song!

        Tuesday, January 12, 2010

        Marketing, maybe?

        Tuesdays and Thursdays are my marketing (and research) days. However, there's always the odd task or two that still needs doing before I get to that. Today's surprise: converting the bootloader to 2005 forced me to fix some whar_t to char conversions I'd ignored earlier. That turned into a project, but is done now.

        While I still have the trial version, I'm now working on converting the full SECON movie to YouTube.

        Sounds like military robotics is hot!

        For marketing, things I can think of:
        • Publicity
        • Marketing
          • Post Ankit's video when it's ready
          • Improve our group's web site
          • Come up with an idea for an amazing image or movie to showcase our group.
          • Create a quad chart to summarize research group thrusts.
          • Put together a one-slide, two-slide, and three-slide research group summaries then meet with Lori, Gary to get their feedback and ask them to shop these ideas for me.
          • Work with Jean, Mike to publicize and recruit.
        • Funding
          • Look for and apply for funding of any sort I can think of.
          • Continue writing and revising my CAREER proposal.
          • Schedule an Eglin visit.
        I figured out how to embed a playlist without creating a custom player: it's hidden in the "Edit playlist info" dropdown. Here's the SECON 2008 full version:

        Family favorites

        It's always interesting to see what Alex and Daniel like. Some of their favorites, found during the snow and cold weather recently:
        • Why it's important to drive carefully on ice.
        • What cold animals do in a Florida zoo.
        • A water balloon to the face.
        More fun videos:

        Monday, January 11, 2010


        It seems like I'm just tying up lots of loose ends today. That's not much fun, but certainly is necessary.
        • Micro:
          • Attendance sheet
          • Prereq checks
          • File folder labeling and clean-up
          • Lab writeup editing
          • Create a ZIP with the latest library
          • E-mail Tommy re: Summer bridge purchasing
        • Yearly review writing
        • Record laser cut tutorial again
        • Return a call
        In working on some YouTube videos, I'm now trying to only use free audio tracks. Though it's still confusing how all this works (when does this constitute fair use), using only free music is best. Which leads to the question: what are good free music sources, not contaminated by commercial songs from a website which claims only free content? Perhaps YouTube's AudioSwap is easiest, and should be 100% legal. But it seems like I can't mix in more than one song and ads may still be displayed.

        SECON movie uploaded

        I spent time with the DivX Author trial and split the shorter version of SECON video Graham created into YouTube-sized pieces then uploaded them. Here they are (as a playlist -- watch them in series). The first video is the teaser Graham produced.

        To embed this playlist, I used a custom player (YouTube | My account | Custom video players). Then, I had to play around with the size to get the aspect ratio correct. I wonder if there's an easier way to do this?


        A student in Micro asked me if I'd considered Atmel's AVR when choosing a microprocessor for the book. I knew they didn't offer a C compiler and were limited to 8 bits, but little else. I did a bit of research and was impresssed:
        • There's one AVR core; the various families (tinyAVR, megaAVR, etc.) add features but share the same core. See the diagram to the right. Nice!
        • The AVR instruction set contains two 16-bit pointer registers for indirect addressing, compares and signed/unsigned branches, 16-bit addressing for data, a multiplier, and a stack. It's nice.
        • As shown in the overview, there are lots of DIP packages, great for breadboarding.
        • There are third-party C compilers, but no well-supported free ones. That's a big minus.
        I realized that I need to use tags (i.e. labels to Blogger) to keep track of my posts, so I've started using them.

          Friday, January 8, 2010


          I'm using Dropbox to share a video editing task with a student. What a convenient thing -- it's so much easier to use than SVN.

          Today's list:
          • Micro:
            • Work on a Micro exam 1
            • Look through and edit lab files
            • Fix homework #1
            • Prereq checks
            • Create attendance sheet
          • Work on my annual review
          • A bit more e-mail
          • Re-record bitmap to laser cut video
          But instead of doing this, I went to an excellent lecture on Gen NeXt by Mark Taylor. He had some neat ideas: moving lectures onto video and using class for problem solving. I'd love to do that, but it's a lot of work. Getting some in-class demos working this semester will be a good step in that direction, however. I also still want to re-record my tutorial on laser cut conversions.

          Alex is tired of doing his weekly reports. Maybe I should stop requiring these for him.

          Thursday, January 7, 2010

          Neat products alert

          Ryan, one of my Micro students, pointed out a neat product from Sparkfun, their LCD display. It's $35 and has an easy-to-use interface (serial commands to an attached ATMega), which is great.

          Reading the latest IEEE Spectrum, here's a Roomba competitor which uses a laser rangefinder to SLAM the room it's in. Wow! I'd certainly love to play with one of those...

          Camstudio bring-up

          From what I can tell, development on Camstudio has died. I'd prefer to use Camtasia Studio, but don't have the money to purchase it (sigh). However, it does work. Here are my setup notes:
          1. I prefer the Beta version, which shows corners around the area you record. Download it from the Camstudio blog.
          2. Fix the audio settings, which don't work on Vista: per this video, from the Recorder choose Options, Audio Options, Audio Options for Microphone, then use PCM, 22050 Hz, 16 bit, Stereo, 88200 Bytes/sec.
          3. I prefer something other than the default Microsoft Video 1 video codec, which does a poor job. The DivX codec I have is compatible with YouTube. The CamStudio lossless codec also works with YouTube.
          4. Be careful -- don't record movies longer than 10 minutes, or YouTube won't take them.
          Using that, here's a tutorial on how to convert a bitmap to a laser-cuttable vector image. I chose an octopus from the web; below are the before and after images.
          I made a video tutorial of the steps. Then I discovered the my microphone died right before I recorded this. Aargh. I'll re-do it when I'm back in operation...update: it's finally done.

          Today's PC task: convert movies on a DVD to YouTube. While Google shows lots of commerical apps, I'd like something both trustworthy and free. So, I downloaded the DivX Author program, which allows me a 30-day trial, and I'm converting. So far, so good. Though somewhat tedious, since I need to break the videos up into 10 minute chunks.

          Snow day

          Amazing -- today is a snow day. I'm working from home, which is nice. As always, a big goal is sorting through my e-mail inbox, which still needs some work.

          Random PC stuff: I'm trying to figure out how Google docs folder permissions interact with per-file permissions. I'd like to handle all sharing of the Micro labs using a folder, instead of changing the permission for each file. It seems like the permissions last edited take priority -- that folder permissions simply modify each file's permission. This would make sense in the case that a file can live in multiple folders. As long as I can get all the permissions looking the right way, I'll be happy for now. Part of the confusion is a lag: it seems to take a couple of minutes before the revised permissions take effect, which makes it harder to determine.

          An amazing video Ricky found:

          Today's goal is marketing: I'd like to look for proposal possibilities, develop PowerPoint slides to market our research, etc. More soon.

          Classes have started

          Classes started today; I've finished my lecture. Although enrollment for the last two spring semesters exceeded 60 students, we're at 50 this semester, so I've started the process of canceling a lab section. I also spent some time updating my syllabus with reading assignments. I'm thinking of trying some selective release features on myCourses to remind students to read; we'll see.

          One big problem right now: I can't log in to the Wiki in order to edit it!

          The list for today:
          • Micro:
            • Read through Micro papers
            • Updated permissions for Google docs access
            • Get Micro e-mail lists organized
            • Work on a Micro exam 1
            • Schedule room for Micro exams
            • Send lab files to Steve 
            • E-mail Justin re: time change
            • E-mail TAs re: meeting and plans
          • Reply to Ian's e-mail re: trunk kinematics
          • More e-mail work and cleanup
          • Schedule a review with Nick
          • Work on my annual review
          • Schedule lunch
          • Schedule a research group meeting
          Whenisgood makes scheduling a meeting soooo easy. I've got two pending.

            Tuesday, January 5, 2010

            Shape sensing

            Krishna found a neat shape sensor that might work for a continuum robot; it looks similar to ShapeTape. Some videos (here, here) nicely illustrate its capabilities.

            More random PC fixes:
            • Annoying MS security: viewing a downloaded .chm file doesn't work until you unblock it. Here's another method.
            I'm mostly ready for classes with an updated schedule for Micro. I think I'll try some conditional release use this semester to assign homework, etc. Or perhaps I'll stick with e-mail, since that seems to work.

            Monday, January 4, 2010

            Getting organized for the new year

            I'm back at work -- it's been two weeks. Wow.

            Some random thoughts and links I haven't had time to really categorize yet: the MSU budget (where is research spending shown?). The ARM Cortex-M3 Technical Reference Manual gives general ARM info, but lacks and instruction set encoding. That's in the ARMv7-M Architecture Reference Manual, which ARM doesn't publicly post (annoying). Of course, it's findable via Google. I wonder if there's a good textbook for the ARM Cortex? I haven't found one yet.

            PC fixes:
            • Windows Defender kept complaining and couldn't auto-update. The manual install method worked fine (follow the link from here).
            • To define a custom paper size in Windows, use File |  Server properties from the Windows Explorer when viewing Printers in the Control Panel (I'd never seen that one before!). However, the laser printer seems stuck on a max page size of 11x11 in. Grrr.
            • After playing with it, I've decided that Photoshop Elements is a disappointment. I keep wanting to use tools from the full version, which I have on the laptop. Sigh.
            • Perhaps this is why the laptop takes forever to resume after sleeping. We'll see.

            To do:
            1. A class schedule for Micro. I need to replace section numbers with page numbers for the reading assignments.
            2. Better plans for what I'd like to accomplish this semester.

              Sunday, January 3, 2010

              Painting in the new year

              Vika and I decided to repaint our kitchen. The old paint demonstrated several big problems. First, because it was a flat sheen, it both showed food stains, hand prints, etc. Second, washing it (even with a damp rag) discolored the wall, meaning any stain was for all purposes permanent. Third, it flaked off easily, so that any semi-vigorous rubbing would actually remove the paint from the wall! The color (an earthy tan) was nice, but definitely not kid-friendly.

              So, we began by asking friends, reading a book, borrowing some tools, then making many trips to Lowe's for supplies and more supplies. Neither Vika nor I have any painting experience, so we began without a clear picture of how to do this! It made for an adventure, a learning experience, and a fun time. To work around our kids' schedule, we painted in afternoons when they took a nap, then again in the evenings after they were in bed. We ended up painting until midnight or so for two nights, including new year's. There's nothing like doing something to really learn it. Lessons learned:

              • The AccuBrush (on the left), which I received as a Christmas present, works wonderfully. It takes a bit of time to learn and can't paint all the way into a corner, but it's very fast. The thing that took me time to realize was that the brush needs to paint in one direction: backwards when doing a long section of wall to avoid marks from the wheel, brush, etc.
              • A corner brush (on the right) was fairly useless. It doesn't paint the seam when the two corners meet. I found using a standard paint brush easier.
              • The paint stirrer was fairly useless. It works, but leaves a lot of paint on the stirrer afterwards. A free paint paddle would have worked better. Live and learn...
              • A trim edger is very, very helpful. However, be sure not to paint against one side, then place that painted side against something you don't wait painted. Oops.
              • Painter's tape it good, but not a cure-all.  Some paint actually seeped under it. In other places, pulling the tape off de-laminated the paint, since the paint formed a continuous sheet from wall to tape. So, it helps but don't rely on it too heavily.
              • A paint stirrer isn't that helpful -- a lot of paint sticks to it. A free paint paddle would have worked fine.
              • Rollers are wonderful. Brushes are much slower and harder to use.
              • It's really fun to see the results after you're done! Not perfect, but much, much better than it was...
              Here's the final result. If only I could paint that fast in real life...