December 9, 2009

High Anxiety

I have a suspicion. I don't know how deeply I've gone into it on this blog, if at all, but the fact is I have a piercing fear of disapproval. Most people do, to some extent--humans are social animals, and being cast out of a group used to be a life and death thing during the long period over which we evolved. Stage fright is probably the most common manifestation. But I've got it bad. Recall the fear you feel while, say, giving a job interview. Now imagine if that sort of fear gripped you about such trifling matters as whether or not to make eye contact while walking past someone you recognize, but don't really know. Yeah, not fun.
Anywhoo, I've been plagued with this for all my life, it seems, and I've had no luck freeing myself from it, and precious little insight into it in the first place. But I've just had the suspicion of an idea. Perhaps this fear is not as maddeningly insubstantial as it seems. What if, instead of being a general fear of "doing it wrong" in any social situation, it was merely a fear of not knowing what it would be to do it right or wrong in the first place? This could explain the intensity of it; for me, at least, there is nothing worse than uncertainty. This could also be a first step towards easing it, as well. If it were merely a fear of failure, then there would be no defense besides mere conditioning: training myself to be less afraid of the possibility of failure; to accept it. But if it were merely the result of ignorance--of not knowing what to do--then the solution is simply education, which is much easier than training. It makes sense, too. I've always been a shy person, so it's no surprise that I find myself lacking the normal experience most people have with social situations. I had no idea the ramifications were so extreme, though.
Even assuming this suspicion is correct, there's still one problem. The rules of social interaction are not fixed, and they vary from person to person. There is no single set of rules to be learned, and I would also have to learn to gauge situations, to find out which set of rules applies at any given time. That's no easy task, and I'm not sure if it can be learned without a whole lot of hands-on experience... which, naturally, would be hard for me to acquire. After all, I'm not just afraid of social situations--I also don't care much for them to begin with. Maybe I should go to finishing school.

November 6, 2009

Was It All Worth It?

I got a letter from the government today. I've been getting them for a while, but this one has special significance. Just recently I confirmed that despite all odds, each one of the six remaining classes I need to graduate is offered next semester, and with very little time overlap as well. I still have to take the GWPE (Graduate Writing Proficiency Exam), and of course I still have to take each course and worry about keeping up my GPA, but passing them is not a concern. I now have no reason to be concerned that I might not graduate in May. This brings with it a huge list of concerns, but it's also very heartening, and I'm quite relieved. I'm particularly enjoying the thought of no longer having to fill out a FAFSA (Free Application for Federal Student Aid). (Basically it's a form where you have to prove how much money you have, so they know how little to loan you.)
The letter I got today was just a statement of how much money I owe in federal loans. I'm not going to take any more loans, so this is it--essentially, this is the bill for five years of college. It comes out to just about $20,000.

I don't really have a framework to understand that amount. It's not horribly much, I suppose... in fact I think it's about average. It could have been more. I guess I won't really know until I find a job, and discover just how much I can expect to pay per month, and how much I'll be making. It's good to have an amount, though. And it'll be even better to have a degree. It's all coming to a close.

October 27, 2009

Wave

I finally got a Wave invite! I've been waiting for this for a while, so I'm kind of excited, but it's tempered a bit by the fact that the purpose of Wave is to be a communications mechanism... so there's not much to do with it if nobody else has it. Also it's still very much unfinished. But I'm excited nevertheless.

For the uninitiated:


October 14, 2009

Auschwitz On Facebook

And I've never been more glad to have gotten out while I still had the chance.

http://news.bbc.co.uk/2/hi/europe/8307162.stm

EDIT: I mean out of Facebook.

October 4, 2009

Victory

Well, the climax has finally come. It's been months since I returned from Germany, and the Robbie project has been marching on, but the competition has come and passed in just a day. Sick Robot Day 2009 took place on October 3rd, and Kobra (Robbie 13's robot day build) took first place.
It's not uniformly good news, because evidently our robot only recognized two of the posts (out of nine), while none of the others recognized more than one. I guess it was a more difficult task than I thought--I hope they put up some video of the competition soon. In the meantime, though, here's the press release--in German--and the official blog--also in German, but with pictures! It's so nice to see the final setup of the robot looking just like I imagined it would. I'd better go now before I get all teary-eyed.

August 27, 2009

Jumping to Conclusions

Just a moment ago I was kind of frazzled. I was handing in the first assignment in Calculus, and it was almost painfully easy--just a single problem, that required nothing more complicated than an application of the Pythagorean theorem. In fact as I was writing it, the math teachers from my past were chiding me in my head that I wasn't "showing my work". The paper looked awfully bare... but there was nothing to show, really. There was no work involved. But the professor rejected the assignment as I was handing it in, saying that I should have written out the question (it was a word problem, by the way, three or four sentences of text describing a single equation), and I shouldn't have written it in pen, and that she would give me a low grade for that reason if I handed it in as-is.
As I was walking out of class, I was feeling kind of upset by this, and briefly considered writing a three-page essay with nested footnotes describing in all possible detail (and then some) the thought processes that went on behind the solving of this problem. In the end all I did was write a blog post about professors who value style over substance--or perhaps are unable to appreciate substance without the proper style. And as I was typing away on my laptop, the professor walked up to me out of the blue, and apologized. She said that she was just trying to set an example, more for the other students than for me (because she had been my precalc teacher and she knew that I wasn't at the same level as most of the other students), and that what seems silly now is necessary to get coherent assignments back from the class when the problems started getting harder.
Needless to say I was mollified, and as I thought about it more I realized that I had noticed that earlier in class the professor was kind of put-off by the questions that other students asked, and the deep lack of understanding thereby revealed. Her response as I tried to turn in the assignment was likely colored by some amount of frustration, and frankly the paper looked pretty desolate. So, once again, I'm simply trying to get through the day, and I nevertheless find myself thrown on an emotional rollercoaster, and learning a valuable lesson besides. And there's a little synchronicity thrown in to take the point home.
The post I started writing was titled "little tyrants". I thought that I remembered the phrase from somewhere, and I decided to look it up to give proper credit, or at least not mangle the original intent of the phrase. I never found out where it came from, but the first Google search that came up was a conservative echo chamber. Please read the post--it's short, and your eyes won't melt a whole lot. Here's the key phrase:
"I am not willing to assume the presence of facts not in evidence that would have recast their behavior in an acceptable light."
This phrase struck a chord with me, because I've known for a long time that this position is thoroughly inadvisable. This particular event was just one in a long string of experiences which taught me the importance of reserving judgement. It's very easy to hear about a situation, or even be in one, and think you know all the facts. If you look at the other side of an issue, there is almost always more information that you weren't aware of. It's very easy to be convinced of something if you're entirely unaware of the facts of the other side. And once you're convinced of something, it's just one small step away from rejecting contradictory evidence, and then you have a feedback loop.
Open your mind from the start, and do your darndest to keep it that way. It needs the fresh air.

Fair Warning?

This popped up on the "Student Center" website recently. I understand where they're coming from, but the last sentence really gets me.


Important Student Fee Information

The CSU makes every effort to keep student costs to a minimum. Fees listed in published schedules or student accounts may need to be increased when public funding is inadequate. Therefore, CSU must reserve the right, even after initial fee payments are made, to increase or modify any listed fees, without notice, until the date when instruction for a particular semester or quarter has begun. All CSU listed fees should be regarded as estimates that are subject to change upon approval by The Board of Trustees.

August 13, 2009

In Absentia

It's difficult to appreciate something in its absence. Ironically enough, this also applies to the appreciation of the absence of something. Say an annoyance, or physical pain. It's easy to look forward to relief, and enjoy the relief as it comes, but once it is gone we quickly return to base levels of happiness. This is true for just about everything, but it seems to happen even faster with negative stimuli.
Specifically I am referring to the dormitory I was living in this summer. It was a pretty awful place, and I couldn't wait to leave. But I have to say that the pleasant, warm feeling I got from being away from that place was more intense while I was still there, merely anticipating it. It was nice for the first hour or so, but a mere day or two after leaving, I find it difficult to enjoy the simple pleasures of quiet, companionship, and sanitation to the extent that I had expected. I'm not going to define myself by what I've left, but I would like it if I could remember it well enough to be thankful.

August 8, 2009

Heidelberg Zoo

I know I'm a little late on this one, but I took a couple of photos and videos that I can't resist posting.
Here's the photos from the Heidelberg Zoo.
And here are some videos I took there:
Headbutting practice.
Mongoose abuse.
Hydrokinetic child labor.
Bouncing weasel.

Thank you for your attention.

Second-Best Headline Ever

But it really only works with the picture.

http://news.bbc.co.uk/2/hi/asia-pacific/8160279.stm

July 27, 2009

Return to Bremen

Last year I spent a semester in Bremen. When I found out I was going back to Germany this summer, I decided I couldn't pass up the chance to visit friends that I had met, and see Bremen again. But things came up, and time went by, as it is wont to do, and it was starting to look like I wouldn't get to visit at all. With that in mind, I decided last Thursday that I should travel to Bremen on Saturday, just for a day, because it was the last day that could possibly work. So I did, and... well, it was at once exactly what I expected, and nothing like I had expected. And I think I'm glad that I went, but I'm not sure how I feel about it, even now.
When I arrived in Bremen it was just like I expected. Everything looked familiar, as if I had never left, and I wandered around the city center like a local (or maybe a local with a camera). It was nice to see the city again, the weather was pleasant, and I took some good photographs. I went for a walk in the park, ate at a cafe, and generally had a nice time. But because of the scheduling rush, and various other coincidences, I never ended up meeting anyone I met last year. Some fell out of touch a long time back, some more recently, and others simply couldn't make it that day... but I just realized that the same applies for this entire summer. I haven't met a single person that I met last year. Not one. It was a strange experience. And then, just a few hours later, I got on the train and left town again. Lately it seems like I can't go anywhere without leaving somewhere else.

July 17, 2009

Back to Work

I have been working this whole time (well, except last week), even though I've kept pretty quiet about it on the blogging front. I think it's about time for an update.
The DynamixelNetwork code is just about finished. That is, it feels very well-rounded, it's densely-commented, and it'll do everything we need it to do. (In fact I think there's now more comments in it than actual code... but I did it for Doxygen, so that you don't even have to open the source code now to find out everything you need to know about it.) There are still one or two problems with it--a couple obscure functions of the servos aren't yet supported, and the latency is pretty high--which I'm hoping to get the chance to iron out before I leave, but I still think it's a nice bit of code, and better than anything else available for Linux for these servos. I hope the university will choose a license for it soon, so I can post a link. It's my first real contribution to the "open-source community", and hopefully not the last. I hope it gets a good response.
On the robot front, I'm making good progress writing the pan-tilt unit module to integrate into the software framework. That's kind of minimal, though--just a bit of code to accept and send messages, which talks to the servos with my library. I've also been tasked with designing the hardware for the robot body... somehow. Heh. When I first got here I started in on the pan-tilt unit, and I had never designed hardware before. What I'm doing isn't really too complicated, it's just a bit of CAD... but I had never done it before, and I didn't have any idea where to start. I did it, though, and it was pretty fun. It turns out that by doing that, I became the most experienced person on the team when it came to hardware. So I was the natural choice to design everything else.
I'm not complaining, though. I'm learning some valuable new skills, and I do like to tinker with gadgets every now and then. It's staves off the drudgery of programming 24/7, and I'm getting better at it, too. So on Tuesday I'm going to take the robot apart again, pull off a few things, walk to the workshop with an armful of aluminum, and slap it all together. Fun times.

I'm leaving Germany on the 12th of August. That means I've got three weeks left to finish up. If I finish the hardware next week, I should be able to get the software wrapped up before I leave. It's really strange to be leaving so soon. Three months isn't really much time at all. It's okay, though--it wasn't long enough to get overly attached to the place, but it was long enough to get a whole lot of stuff done, and get some memorable moments in there, too. I'm not really excited about jumping right back into school again, though...

July 16, 2009

Best Headline Ever

Fiji Freemasons Held for Sorcery

That is all.

July 15, 2009

Crowded Life

(How about a little original fiction to spice things up?)

It was hard at first. The food was awful, and the living space was cramped. Each resident could clearly hear every word uttered by the neighbors; there was no privacy at all. And there was precious little social atmosphere, either--each resident kept to himself, appearing almost fearful of making eye contact, of stepping outside of their own little boxes. They each had their own little distractions, and whether it be a book, an electrical gadget, or merely one's own mind, it kept the fear of human contact and the boredom of the long waking hours at bay. Beyond this there wasn't much to say. At night they slept: a difficult, uncomfortable task made easy only by long repetition.
It was hard at first, harder than anyone had expected it to be. No one had expected to spend their lives this way... it's simply how things worked out. And if they could find no comfort in this life, then at least there was the certainty that their children would be better off. The childless were the most resistant, and it was months before their mourning was no longer heard. Living in such a packed mass of humanity, although it set up rebellious thoughts in some, had over time a profound homogenizing effect. When one is faced with a situation one cannot change, one simply must adapt. Even an impossible reality must be accepted as reality. Although unspoken, this was the consensus they had all reached, in the first few months after they discovered that their plane was not going to land. It hadn't crashed, either, after approximately three years... although by now everyone had stopped counting. The food kept coming in little sealed trays, and they never ran out of crushed ice or cola. It wasn't so bad, once they got used to it.
It was hard at first. But it got easier.

July 11, 2009

Students

Recently I've been in Heidelberg for a meeting of all the RISE students in Germany. And I have to say, it feels like I'm a high school student again. I'm surrounded by stereotypical examples of my age group, universities are vying for my attention, and we're all being herded extremely inefficiently to our crowded rooms, halfhearted events, and cheap food. That sounds very negative, but it wasn't entirely intentional... that really is a pretty accurate description of what happens when one tries to wrangle students. But it's not all bad. Thursday was fun--I saw one or two graduate programs that looked intriguing, and it was nice to feel wanted again. But today was kind of a dud. You see, this program generally caters to the hard sciences, such as biology, chemistry, and particularly engineering. The reasons for this are obvious--the grant money comes from the German government and various German industries, and they are all interested in gaining the most profitable talent for their country/company. There were a few computer science opportunities grouped under "software engineering", and I snuck in on one of those, but today when we did our company visits, I was lumped in with the engineering group. We went to visit Bosch, where we saw an assembly line making fuel injectors, and we also visited the Porsche museum. I got the feeling the engineers were happy enough, but I was bored out of my mind.
Afterwards we went to a dinner, which was nothing special... had some good conversations and okay food, at least. But then, as students do, we all got separated and wandered around the city looking for bars. Our group wound up fragmenting and reforming in some very organic ways, and the entire time everyone was talking intently about where to go, without any decisions being reached. It was my intent from the very beginning to simply find the next bus back to the youth hostel, and I was merely following the other students because I thought, naively, that the general direction of the group might head that way. I was right, as it turned out, but it took almost two hours, and meanwhile I was treated to an endless monologue about every aspect of getting shitfaced drunk for as cheap as possible. (It wasn't just one person, but I hesitate to use the word "dialogue", because everyone just seemed to be shouting into the crowd and waiting for an echo to come back on a close enough subject to continue the "conversation". Amoebalogue, maybe?)
I'd like the emphasize that this... there, now I'm hesitating to even use the word "activity"... that this state of being was not restricted to the hours after dinner and before breakfast. Every waking hour I have been with these students has been the same loop playing over and over. Usually in the same order, too: how drunk we were last night... how drunk we're going to be tonight... how we can get as drunk as possible for as cheap as possible... how hung over we're going to be tomorrow morning. The different hours of the day are like the different states of matter--different behaviors emerge, and reactions are different, but in the end it's all just a bunch of atoms. Or, in this case, alcohols.
To summarize... this trip has been alright, except for all the students. And I am looking forward to having a nice restful Sunday.

Update: The last day was very similar to the second--the tour (this time of the castle overlooking Heidelberg) was quite boring to me, and when it was all over it just sort of... ended. We got together for a group picture, everyone applauded, and then the huge lump of 300 students slowly dissolved into the city. There was one thing that helped a bit, though. The "debriefing" on Saturday morning consisted mostly of a summary of how things went, and a lot of talking about how we were less rowdy than the previous group, and about how difficult it was for them to organize all of this. (Apparently they've only had like two full-time staff members organizing everything and answering emails for the last three months or so.) It may not sound like much of a motivational speech, but it was very humanizing. I think it really did a lot to prevent us from walking away griping about how shoddily this was all planned.

June 29, 2009

Relief

I finally got all my mouse buttons working in Linux. And no, I'm not going to bitch about how unhelpful Linux was this time... I'll leave that task to the simple fact that I've had this laptop for almost a full year now. Granted it mostly worked correctly, and the only thing I was missing specifically was that the back/forward buttons didn't work in Nautilus. But it's nice to have it working fully again, and even nicer that I found a comfortable solution.
It didn't take me long to abandon the "supported method", which is to install imwheel and edit the settings by scratching arcane figures into stone tablets. Fortunately I was quick to find an alternative called btnx, which has a (gasp!) graphical user interface. Although it's not exactly shiny, and it was probably just a lucky break that it supported my mouse, it was simple to use, fully-featured, and worked the very first second time. (It didn't say it had to run as superuser, and didn't warn me, either... it just failed when I tried to save the settings.) But the interface was nothing less than I expected--a straightforward "click the button you want to edit" process. One limitation I think it might have compared to imwheel (I haven't really searched for it, though) is the ability to have different settings for each program. Fortunately that's not one of the things I want to do right now, but hopefully it'll be supported in the future.

I wouldn't exactly call this a glowing recommendation ("Ubuntu: Its inadequacies aren't entirely unsurmountable!"), but it's the closest anything in Linux has come to "just working" in quite a while.

June 22, 2009

Well hot damn!

You know that shell interface to C++ I was talking about? Turns out it already exists! It's a tool called SWIG, used for wrapping up one type of code to be used by another language. And it turns out to be exactly what I'm looking for--a (relatively) simple way to access class member functions directly, in an ad-hoc way.
I don't have the servos with me right now, so I can't test it out fully, but after sweating over a hot command line for the better part of an hour, I've got it to the point of compiling and throwing the expected exception when it can't find the serial port. I am super excited about this, and I'm definitely going to be learning more Python from here on out. And maybe I'll finally get back into Lisp, if I can find a single goddamn interpreter...


EDIT: It works like a charm. :D

June 21, 2009

Theis Schmesis

For about a year now I've been actively contemplating graduate school. I'm getting my Bachelor's degree (barring misfortune) in just two more semesters. After that, the rules go away. Oh, they've been fading for a while, and college has been a great way to gradually transition into the concept of actual responsibility. But up to now I've always had a pretty well-defined "roadmap" for success. Every year a new class, every week a new assignment, every summer a few grades and a long vacation. This pattern has structured my years for literally my entire life--I can't remember a time when I wasn't in school. And it's been something of a crutch, too, at least for me. I crave structure. I fear making decisions. And although I've had to make a few vague choices about my future when applying to college, choosing my major, and taking classes, in one year I'm about to fall out of the structured, comfortable, predictable, guaranteed, reliable system, and into... what? Whatever it is, the transition isn't going to be structured, and it isn't guaranteed to be smooth.
So for about a year I've been contemplating the steep cliff in front of me. And I can see two options: get a job (career?), or go to graduate school. (I can't help but notice here that I've implicitly defined failure as "not an option". I wonder if I'll be chuckling about this in 12 months...) And I'm really not very familiar with either of them. I'm afraid that at some level the primary reason I want to go to graduate school is just to stay within a structured system--if true, I would consider that a "wrong reason", perhaps even a character flaw. But I can't tell if it's true. What I can say is that the thing that frightens me most about graduate school is the concept of the Thesis. And despite the two rambling introductory paragraphs, that's actually what I started this post intending to talk about.
You see, the Thesis scares me. But it just occurred to me that I don't know why. I hardly even know what it is! I suspect that all this "thinking about my future" that I've been doing has been nothing more than rehashing the precious little I know about what my future could be, rather than going out and actually researching what it would be like. My concept of a Thesis was only vaguely defined as being something along the lines of a 100+ page paper. I doubt anyone really enjoys writing papers, and in many cases it's been nothing more than drudgery. What's more, the drudgery has been directly linked to the length of the paper. Strangely enough, it only just occurred to me to look behind the mere stimulus-response of this learned aversion to paper writing, and figure out what was causing it. It's not all that surprising when looked at carefully: When taking six classes a semester, there's only so much time/effort/interest one can put into each class. And the greater the amount of work that an individual professor assigns, the more strained that already-small amount of time/effort/interet becomes. The result is often a whole lot of disingenuous boilerplate, which can quickly sour the entire paper-writing process.
But is a thesis different? I never asked myself that question before, but I think the answer is yes. I love to learn, and I'm gradually coming to the conclusion that having only one thing to learn at once, instead of seven, might make a huge difference in my motivation level. So far, in the last few weeks, I've been working on this code almost nonstop--partially because I don't have anything else to do with my free time, but also because I really am interested in improving it. I think this is a good sign, because hopefully this will be similar to what I could be employed to do... but something tells me that I might be better served by staying in a university setting, where I'd have more freedom to choose a topic to learn about, and spend my time producing knowledge, rather than being heavily focused on producing a product. Maybe the thesis is just an extension of this concept--I could learn and learn to my heart's content, and the "proof" of that learning, in the form of expounding on the topic at length in a paper (and in a verbal defense), would come naturally.
This gives me hope. But I have to make sure I'm not forgetting any key details... like teaching classes. Is that an inherent part of graduate school? I'll have to do some more research...

(Word to the wise: In case you couldn't tell, the verbosity of this post (both in length of individual words and number of words written) is a dead giveaway that I'm writing this post at or around midnight, frantically typing out a half-formed idea before I fall asleep and forget it entirely. I suspect that's the entire point of blogging, but I just thought I should warn you nonetheless. Hmm. Maybe I should just put that in my profile and save time.)

All you need is cash

Wouldn't it be awesome to have an interactive C++ shell? It's probably best to pay me no mind, because I'm pretty new to the concepts, and I'm speaking from enthusiasm rather than experience... but lately I've been doing a lot of testing of the DynamixelNetwork library using a rudimentary C++ program that's nothing but a few 'cin's, a switch statement, and some function calls. I have to recompile it every time I want to test something new, which makes it very difficult to test a variety of things at once. I'd love to just cut out the middleman, and type the function calls directly at the command line. In this project that wouldn't be much of a problem, although I can see how trying to build a general-purpose shell to handle every function of C++ could pose some difficulties. But it would be a neat utility, if only just for simple testing, wouldn't it?
I've been getting interested in learning Python lately, and today took the first step and found out that Python does indeed have an interactive environment available. And according to Wikipedia, it interfaces well with C++ code (among others). I'm not quite sure how to do it yet... but I think I might try to hack something together. Wait... isn't "hack" more commonly paired with "apart"...?

June 19, 2009

These servos are fun!

Driver code: Just about finished.

Today and yesterday were a bit of a grind. Although I was being productive, the type of work I was doing wasn't exactly mentally stimulating. But it had to be done. A lot of the functions of the servos--almost all of them, in fact--are controlled by setting registers. There are a few variations, but in the end the bulk of the class falls into four or five private methods, and the dozens of public methods are only there to provide a user-friendly interface to the servo registers. I tried to find a simpler way, but the data varied too much to make anything very consistent--for example, some of the values are stored in two registers (for values over 0xFF) with the high-byte and low-byte swapped, some are restricted to a smaller range of values, and some are just bit flags. So the class is now chock full of tons of one-line functions, but it should be pretty simple to use--abstract enough for anyone to have an easy time using it, detailed enough for someone familiar with the servos to do anything they want, and secure enough to prevent anyone from breaking anything without explicitly trying to (for the most part).
I wouldn't call this completely finished--there are still one or two functions which I haven't implemented yet, there are a few aesthetic decisions that I might change, and I've still got to write most of the comments. But right now, for the project I'm working on, the code will do everything we need it to do. I feel accomplished.

June 15, 2009

It compiled! It compiled!

Okay, it's not a gigantic achievement. But it is a significant milestone, and it took me a lot of work to get here (more than it ought to have taken, honestly...). I finally compiled my first C++ class. I mean, besides the little ten-line classes that I wrote in school when I was still learning what object-oriented programming was. This is the first real object-oriented code I've written, and although it's not finished, a firm groundwork has been laid.
What I've got now is a "DynamixelNetwork" class that controls a serial port with an arbitrary amount of Dynamixel servos on it (we're using RX-10's, but I believe the communication protocol for other Dynamixel models is very similar, if not fully compatible). The reason for having one "Network" class instead of individual objects for each servo is because they can be daisy-chained together, so the communications all have to share the same serial port. Plus, there's not a whole lot that an individual servo class would do. The main requirement is simply an interface to the communications protocol, and that can just as well be centralized and used for any arbitrary servo. I may uncover additional requirements as I finish up the class, but I'm doing my best to keep the code flexible.
What's been taking me so long is just figuring out how to write to and read from the serial port. It seems to me that it's one of those tasks that just seems to be harder than it needs to be. I'm using the termios.h interface, which is archaic, difficult, and fugly, to say the best, but at least it's a standard. Right now I've got a working "sendMessage" method, and the "getResponse" method is mostly working, but giving me some weird errors. I don't understand what's wrong just yet, but I've mostly isolated the problem, and once I get that solved I'll have just about all I need. After some little difficulty I rolled those into a working class, got the .h and .cpp files all nice and neat-looking, and poked it with a sharp stick until it compiled. Once that was working, adding additional functionality was almost as simple as just finding which registers to write to (in the servo), and sticking in a few more methods. I also took some time along the way to add some bounds checking, sprinkle in some custom exceptions, and put in a few routines to improve general performance (like one that instructs the servos to stop sending status packets back after each instruction, to save the time it takes to wait for each one).
It's not all a cakewalk from here, though. What I have to do now, and I hope to finish this before Thursday, is to finally get the getResponse method working, organize the inheritance of my exceptions into a more logical structure (right now they're all inherited from the base exception class), write a udev rule for the USB serial port adaptor, fully comment the code, and add in baud rate switching. This last one's the hardest, because if you make a mistake switching the baud rate, you could end up with a servo that refuses to listen to you. (Because of the way the baud rate is set within the servos, it might even be possible to switch it to a rate that the PC serial port isn't capable of using... I think that's my biggest fear right now.) I might also add in a few "scan for servos on network" methods, but that's on low priority for now, because we're going to be working with a known configuration for this project. Eventually I'd like to add it, though, so that this could become a good general-purpose C++ library for the Dynamixel servos. I searched pretty thoroughly before deciding to roll my own, but now that I'm putting all this work into it I'd like to make it a contribution to others who don't want to put in this much effort (and also don't want to use .NET).

Well, that was an unnecessary amount of detail. Hope you enjoyed it. It's good to get all my thoughts laid out in text, though.

June 6, 2009

What I'm Doing Here

I'm here in Koblenz working with the Arbeitsgruppe Aktives Sehen (AGAS)--the active vision team. In a word, I'm working with robots. Right now I'm involved with the Robbie 13 project, which is the 13th iteration (in as many semesters) of a robot that is by now quite adept at fulfilling its duties--namely, to autonomously navigate a simulated "disaster area", map the area, and find "victims" (heat sources). Robbie has been very successful at past competitions, participating in the RoboCup Rescue League. I won't go too far into detail, but there's a lot more information at the website if you're interested. Now, though, Robbie is being groomed to take part in a different competition, the SICK Robot Day. Unfortunately the description is all in German, but I'll summarize the basic competition. The robot will be placed in a large oblong arena with obstacles scattered about, and 9 signposts clearly labeled 1-9. The robot's task is to navigate to each of the signposts in order (naturally, it has to read the numbers itself), while avoiding the obstacles as well as a second robot doing the same task in the opposite order. A collision with the other robot will mean disqualification, but the final judge of success is speed. It sounds pretty challenging, but a lot of Robbie's existing capabilities are well-suited to this task. In fact, except for the lack of image recognition (to read the numbers) and weatherproofing (this competition will take place outside, rain or shine) he's almost got everything he needs right now. But of course there is always room for improvement, and we've got until September to make him ready.
Unfortunately I'll only be here until mid-August, so I won't get to see the little guy compete. Currently my task is to build a pan-tilt unit to integrate the new laser range finder. Robbie already has one of these, and it's an indispensable part of his operation--it scans a wide radius in 2 dimensions to sense walls, and it's hooked up to a little servo which allows it to scan up and down to get a 3-D snapshot, mostly for identifying inaccessible areas ("rough terrain"). It's just a little tiny one, though, and now we've got a big heavy-duty new one--the SICK S300. It's actually quite portable compared to most LRFs, but it still weighs more than a kilogram, so just sticking it on top of a servo won't quite work. That's what I'm here for. Although I've never done any CAD before, I jumped in feet-first and over the past week I made a pretty good, basic schematic for an aluminum bracket to hold the LRF. Once the servos get here, I can take a few final measurements, get the design finalize, and then find out if the thing works at all, but for now I'm working on the software to control the servos. It's been a long time since I've done any object-oriented programming, so once again I'm really learning on the job. Overall, though, I think I can get this all finished in just another week or so. I hope so, anyway--this is interesting work, but I'd like to get this finished and start on another project before I go. I'm particularly hoping to have a crack at the higher-level designing... actually contributing to the intelligence of the robot. Anyway, I'll keep you posted!

Hello Internet

I will be blogging for you today. Let me introduce myself--my name is Thomas Foss, and I'm a California college student currently interning at the University of Koblenz in Germany. I figured this was as good a time as ever to start a blog, because it seems like I might actually have something to talk about for a few months. So, glad to make your acquaintance... now let's get started.