The electric bike

Last summer I decided to buy an electric bike conversion kit from Cyclotricity. They sell a 250W front wheel kit that doesn't require any major assembly or hacking into your bike, so I thought I'd give it a go. I'd like to think that I'm still as fit as I was ten years ago (because ten years ago I wasn't that fit either..) but I've definitely put on some weight since then.. Since my last major touring cycle I've probably put on as much as the weight of the touring luggage I used to carry, so it's as if any ride is a touring ride these days. Can't blame anyone but myself for that though.

The front wheel kit is pretty easy to install. The simplest version (the one that I got) comes with a battery, a controller box, a throttle (no pedal assist here, it's all manual control) and a front wheel that contains the motor, so in theory all you have to do is stick the bits on your bike without any disassembly other than taking the front wheel off. I did run into various difficulties though.

The first surprise was when attempting to put the new wheel onto my fork. It turns out the Surly Long Haul Trucker has some sticky-outy metal bits where the wheel connects with the fork, which is normally fine for almost any wheel because a normal wheel's wheel nuts are usually small enough to fit. But the motorized wheel's nuts were way too big, and I ended having to file large bits of my fork off so the wheel could fit. I'm pretty sure that the bits I filed off were decorative, but I really have no idea how it'll hold up in terms of structural integrity in the long term. The frame was already a write-off anyway since it was bent during a previous plane trip, so it makes for a nice experiment bike.

There were some other issues during mounting: the throttle unit doesn't fully break open, so if you want to put it into your handlebar you have to slide it on. This means having to remove the handlebar tape, brake/gear unit etc. I didn't like the idea of doing that right from the get-go, so I bought a handlebar extender instead, thinking it'd be useful for other purposes as well, like mountaing a smartphone holder and/or light unit. The one I got is way too wide though, and I'm not sure I'd buy it again. The controller unit goes underneath the frame in front of the rear wheel, and I again ran into mounting issues because the clamps provided were just a little bit too wide for my frame, and I ended up having to jury-rig that by wrapping the frame and the unit in tape to prevent the unit from jiggling around too much. It's all very ghetto, but it works.

My little bike shed is pictured below. I remember the days when I used to rent a 'studio' apartment that was a converted garage the size of this..

As you can see the cables are a bit of a mess. There's not really any way around this. I certainly could have tidied them up a bit better, but the way the package is set up is that you'll always end up with a bunch of connectors and wires that need to go somewhere. I can definitely see the value of a bicycle that has everything integrated in the frame.

I did a bunch of rides with it last year and I quite liked it. I hardly noticed the additional weight of the battery pack and wheel motor, probably because my touring bike is pretty heavy to begin with, and so am I. What I definitely did notice is the pull it provides on a hillclimb. The 'throttle' really only has one setting if you're going for the 250W model: on or off. I've cycled hillclimbs with up to a 10-12% gradient with this, and they are a piece of cake, even with a heavy bike and a heavy person on it. 250W is plenty to get up a hill at low speed with only a little human power added. If you're a hardcore cyclist and/or a glutton for punishment I'm sure it's hard to imagine 'cheating' by skipping the uphills, but for someone like me who's not in it for the performance, this is fantastic. Because of where I live I pretty much cannot avoid a 10% hillclimb if I want to go anywhere, and the motor just lets me 'skip' this without too much effort, or alternatively I can keep my speed up by adding my own power.

Before I bought this I did wonder if the front wheel unit would have enough grip when pushing, since the weight will be on the rear wheel, but so far I've not had a single issue. The front wheel motor is plenty grippy for every situation I've encountered.

What I like: it doesn't actually feel much heavier than usual, and I can skip any uphills that I don't want to do so I can preserve my strength to do longer rides.

What I don't like: the cables are an unavoidable mess, and I'm not really sure about the reliability. I did one longer ride last year where the motor kept cutting out on me despite the battery telling me it still had plenty of juice left. I couldn't reproduce that this year with a freshly charged battery, so I suspect it's not a case of faulty wiring or motor issues, but just the battery not being very accurate about its actual level. I need to do more rides to confirm that though. And even if it does fail: "escalators don't break down, they just turn into stairs". It's the same for an electric bike.

I still love cycling.

Posted in Cycling , UK

RSS Feed

Although in the previous post I lamented about wishing I'd stayed on Wordpress, a day after I published that this article about wordpress.com pricing model issues became the top post on Hacker News. Just changing out the pricing model for their existing users seems like a practice that would certainly have made me unhappy if I had been their customer. It made me feel slightly better about the time I spent on this blog. But only slightly.

And speaking of ancient technologies, since it seems I'll be on my self-built platform for a while I added support for RSS feed generation to my static blog platform. The front page now has an RSS feed, though I likely won't bother to add feeds for categories, tags or article comments unless there's more early-2010s nostalgia fans like me out there.

I'm still thinking about publishing this on Github but I know there's tons of static blog solutions out there that are way better than mine, so I've not been in a hurry. It's on my todo list though.

Posted in Tech | Tagged

Comments

I deeply regret moving away from Wordpress. It was a terrible choice. Self-hosting is much, much faster, more secure and I have more freedom to do what I want with this site, but even something as simple as making a comment form involves so many decisions and so much future maintenance burden that it just makes me sad.

Anyway, it's working. There's comments again now. I have to regenerate the entire site to make this work, but it's not something that should happen too often. I had planned to go with a full AWS-based solution but ended up incredibly frustrated because everything AWS is just so needlessly complex. Lambdas and SES seem like a great way to handle "serverless" comment form submissions, but hooking it all up and figuring out which set of permissions to use made me vow never to use AWS again if I can avoid it. Instead, pythonanywhere.com lets you very easily spin up any kind of python server, which made it super easy to get started, and the free tier provides more than enough capacity for a blog of this size. I gave up on SES as well and ended up going with mailjet which again provides a very usable free tier and a straightforward API.

I also had to add a captcha to avoid abuse. It's unfortunate, but kind of necessary on today's internet. An alternative would have been to ask people to tie an identity to their comment and authenticate them with Google, Facebook or whatever, but that runs counter to what I'd like this blog to be. If you do think this would have been better, feel free to leave a comment! You can do that now!

So in the end I had to use three new cloud services to make comments work on my static blog: a non-static web hosting service to handle the comment form submissions, a mail service to send out the comment notifications, and a captcha service to prevent abuse. In return, what I get is data that remains under my control: comments (and email addresses used in comments) are in my inbox and on my PC, rather than on some external commenting service. No ads, no spam, no bullshit. Mild hassle because of the captcha, but hey, you can't have everything.

What I would do different in the future if I still had to stick to a static/custom solution: just load everything in memory. All the 17 years of content on this blog, compiled into html, is less than 256 megabytes. Even if I became twice as prolific over the next 17 years it would still easily fit into memory. Single server, maybe with a CDN in front of it, though I doubt it'd need it. Optionally I could parse the original templates on-demand to save even more memory, but it doesn't really matter. That way I wouldn't need to jump through hoops to make static hosting work and could have everything be contained in a single web service. All of this is of course still worse than moving back to Wordpress.

Posted in Tech | Tagged

This blog as a hobby project

My rate of blogposting started going down around 2012. That's ten years ago. Between then and now I thought a lot about what I wanted to do with this blog, and if I even wanted to continue it. I probably changed my mind on that every year or so. The term 'blogging' itself has kind of become obsolete in the meantime, as did the code for the static blog generation framework I built to produce these pages. It feels weird to unironically work on 'comment forms' for a 'blogging framework' in 2022. All of a sudden it's gone from mainstream internet to a weird kind of nostalgia. Who even 'blogs' in this day and age? Plenty of people write, of course, but it doesn't take a self-hosted, self-published platform to do that. Just sign up for a Medium account, or if you don't like that there's plenty of alternatives. Some people write entire articles on Twitter, which is a whole other weird internet thing..

I can liken the experience of blogging and maintaining your personal blog software to that of driving and tinkering on a classic car. It's a fun weekend project with no practical purpose whatsoever, all commercially available solutions are way newer and better than what you're working on, and whatever you're doing will never actually be useful to anyone else. But it's fun somehow. It keeps me busy. And, to continue the analogy, there is tangible output: just like you can take a finished oldtimer back on the public road, this blog exists on the public internet. Even if it can't keep up with all the modern alternatives around it, it's still there for people to see. And that's worth something. In my case, pretty much all of my life is documented here - from all the way back in 2005 to now. I enjoy reading what I did back then, and I hope the people who knew me back then do too. If Medium is a modern-day Toyota, this blog is a poorly-put-together 80s kit car.

(I guess for most people reading this the car example is actually less relatable than that of maintaining a blog. Oh, how time flies..)

So that's what I spent my weekend on. Old man blogger. Here's what I did over the weekend, and how things easily spiral out of control..:

  • I wanted to make comments work so I had to first decide on a format and import comments from the wordpress days. This meant interacting with a wordpress SQL backup that only really restored well onto a MySQL installation, which I didn't have running, so I wrote a nasty little script that regexes over the SQL dump and extracts comments. Yum..
  • As I was playing around with the comments I noticed that a lot of the old articles' image links were broken due to the way they linked to S3 bucket content. So I did some search/replaces on historical content to fix that.
  • Because I fixed a bunch of old posts and changed the base templates I had to regenerate the full site from scratch. This turned out to be less user-friendly than I liked given the scripts I wrote a couple of years ago, so I ended up spending hours refactoring those scripts to be more user-friendly.
  • As part of the comment loading I ended up making some rapid-fire javascript changes to static files, which I had to upload manually myself every time I made a change. This eventually annoyed me so much that I updated the blog generation scripts to also be able to upload static files.
  • While working on the styling for comments I figured I might as well do some other drive-by fixes to padding, colors etc. so I improved the styling a bit.
  • The imported comments needed to be mass-published, so I added functionality to the generation scripts for that as well.
  • For the first time since starting this static blog I actually have non-broken 404 and 403 pages. omg
  • In the end I got comment display working but didn't manage to finish work on the comment submission form. I'll save that for another weekend..

It's my goal to eventually publish the static blog generation framework on github, even though I know for a fact that there's way better alternatives out there already, and I wouldn't recommend anyone to start a static blog themselves at this point as the hosted solutions are way easier. But if I can publish the code on github I can at least call it 'finished'. Perhaps when that happens I'll finally consider moving back to a hosted solution. But for now I will stubbornly keep tinkering..

Posted in Tech | Tagged

I made a Minecraft mod!

After 10 years of not touching Java I somehow made a Minecraft mod. The reason? I wanted to see if I could turn on my IoT living room light with a switch inside Minecraft. Great success!

The mod is called Breakoutbox and is available on my github page: https://github.com/rheide/breakoutbox.

Breakoutbox is a very basic mod that lets you 'break out of Minecraft' by calling external scripts on the serverside. Once you're out, anything's possible. Controlling IoT lights as mentioned above, pulling in cryptocurrency prices into your Minecraft world, pushing a button to make a Tweet, you name it. And building all those things is a hell of a lot easier in an ad-hoc external script than it is to publish a dedicated Minecraft mod every time. Anything and everything, all of the time.

It was interesting to experience the Java ecosystem again after such a long time away. Some observations:

  • The build system for Minecraft mods is really nice. The Forge MDK (mod development kit) comes with good documentation to get you started, and a gradle build file that makes it super easy to compile a mod jar or run a dev Minecraft server.
  • That said, the Minecraft code itself is closed-source, so from there on you're walking through decompiled, de-obfuscated bytecode, guessing at what things are ok to call, hoping the arguments you've provided make sense. This could've been an absolute nightmare, but thanks to the fact that Java is a strongly typed language, and community efforts at deobfuscating the code every time a new release comes out, it's surprisingly not that painful.
  • It's so difficult/terse to do simple things in Java, compared to Python. The Java standard library featureset is still a joke. No json or yaml parser in the standard lib? Bah.
  • I gave up trying to figure out how to bundle a third party library with my jar. Couldn't figure out if it's just not standard practice or if I then had to burden everyone who downloads the mod with also figuring out how to download the dependency. Either way seemed bad.
  • It's veerrry easy to get Minecraft to misbehave. The redstone behavior has a 'contract' in that running a redstone command should finish quickly, e.g. in less than .1 second. External scripts can easily take any amount of time, and I had to guard against that. I found it quite interesting how easily I could get a 'professional' game to break just by adding a few lines of code in a tiny jar file.
  • I managed to get around the long-running script issue by queueing the tasks in the Minecraft server object's internal threadpool, but I wasted hours trying to figure out why it wouldn't just work from my own threadpool. I had created a separate threadpool for my own tasks, but somehow the commands never executed if I ran them from my own threadpool. Queueing them in the threadpool that was kept in the server object fixed things. Without looking at the actual source code, which is impossible, it's very difficult to say why. My guess is that the internal threadpool had some kind of hooks attached to it that updated the game state at the end of each task, whereas with my own pool stuff just disappeared into nowhere and was ignored by the game loop. But who knows.

Anyway, it was a fun little exercise. It was a project I started in spite of wanting to finish other projects I had already started. I had no particular need for it, but having it available on github in the form of a downloadable jar that anyone can stick into their Minecraft server, and source code available for anyone who feels like forking it, does feel good. I will endeavor to finish more things this year.

(I think I finally have an idea in my head to reintroduce comments to this blog without incurring massive maintenance or financial costs. More to come.)

Posted in Games , Tech | Tagged , ,

No more analytics

Apparently Google Analytics might become illegal soon in the Netherlands. It reminded me that I still had a Google Analytics script on this blog, which I've now removed. No more tracking!

Side note: bit rot is real. I had to update various Python libs to their latest version to make this static blog platform work with the latest Python. The maintenance burden is real.

Posted in Tech | Tagged

Twenty twenty one

Time goes by very quickly lately. I suspect it's a combination of growing older and the pandemic lifestyle of hardly ever going out. New things are less and less new, and there are less and less new things. At the beginning of last week I wanted to do a little 'end of year review' kind of post, but found it difficult to get into the mindset of writing again, so I ended up putting it off over and over again, and now it's 2022. That said, I've not felt this write-y for years, and I'd like to write a little bit about why.

Let's start with a question: why even bother writing on a public blog at all? I've been wondering this for about five years now. This blog doesn't get a lot of hits. I googled for 'colorfulwolf' the other day and found that my site had been removed from the search results entirely. Couldn't even find it on page 10. It seems to be back now though. Side note: DuckDuckGo is a lot better, I started using this more and more lately. Google search results have been terrible for a long time, but I digress.

Writing on the internet is a risk. More so than ever. Opinions are saturated and extreme, and even if you write something that you think is perfectly nuanced the internet mob could still come after you and 'cancel' you. I consider myself a pretty 'uncancellable' personality since I'm not in politics and I'm not showing my face on Youtube, but what I write here does reflect on companies that employ me or might potentially employ me, and that has kept me from writing here in the stream-of-consciousness style I used to write in back when I was living in Japan. I consider myself very moderate in everything, but you never know what could be misinterpreted in the future, "so why take the risk". The pros of writing in public need to outweigh the cons.

Though I don't write in public much any more, I do write in a private 'log book' of sorts. The same thoughts I used to shout out publicly I still write for myself, so I don't censor myself internally, though as you can see from this blog it does mean there's less content here. I don't feel particularly bad about that because that is in line with my life goals. It is not my life goal to be a contraversial opinion on anything on the internet. I just want to write about my life. But as a result I think my writing quality has gone down. It's the difference between programming something quick and dirty for internal use versus publishing something for all the world to see. It's just different quality standards. I would like to come back to all those private writings at some point and publish them here. That's definitely not going to happen any time soon though.

I write for myself and for those who know me in person, but not for strangers. I believe walled gardens like Facebook are fine for casual thought-sharing, but one should assume that all the information will eventually just disappear. Platforms like Wordpress or Medium are not bad, but I'd rather abstract away that layer and own my own domain. Walled gardens require maintenance and presence, which is why I prefer this content to be available to anyone. Certainly some people in my family would be annoyed if they had to log in to something in order to read this. Open data is good.

"Why bother writing anywhere at all, even in private"? For me there are two reasons. One: I obtain value from reading back things that I wrote years ago. My memory is far from perfect, and those log books help me remember what kind of person I was in years past, and how I used to think about things. It gives me a sense of continuity and identity. Two: it's therapeutic. Processing life events by writing about them has great value for me. Whenever I write something I feel like I'm offloading it from my brain so I don't have to think about it any more. The reverse also holds true: if I don't write about something it feels like it's something I have to remember, and it weighs me down.

The last thing I wanted to write about is: why have I not felt like writing in the past few years? There's an easy answer to that, but one that's difficult for me to write down here in public: I was burned out. I will not go into details here, but I consciously chose to be in a situation where I felt stressed out and miserable for a long time in order to gain in other areas of my life. It was a situation I rationally felt I should not escape from, because the pros outweighed the cons. When that situation finally came to an end this year I thought that my life would be better instantly; that I could just wake up the next day and feel good about myself again. Instead I continued to feel miserable for two weeks until I finally started to feel a little bit like myself again for the first time in years. I do not regret where I was or where it took me, and I do not blame anyone but myself for any negative feelings, but I sure am glad that's over. Issendai has a gripping article about Sick Systems that resonated very strongly with me.

I don't want to dwell on those experiences too deeply, but one thing I did find interesting was that I repeatedly thought "X is the cause of my feeling bad", and "if I do Y I will suddenly feel good again", and I repeatedly proved myself wrong. One example of this was suddenly being able to work from home when the pandemic hit. I suddenly had way more time on my hands, and I thought "life will be better now", but it quickly became the new normal again and I felt how I usually felt. It's easy to blame external causes for this, but I had made a habit out of not looking within myself for the cause. If there's one 'lesson' I learned this year, it would be to look within more. The Dokkōdō continues to be a source of inspiration for me.

This may sound weird after writing all that, but 2021 has been an amazing year for me. I am getting closer to where I want to be in life, and things are looking up for the future. My (very middle-aged) highlights of the year were:

  • We got a cat! He requires a lot of attention but he is absolutely awesome.
  • I bought a smart exercise bike. It was crazy expensive but I use it a lot.
  • Finally did a '1.0' of Legobot. It's fully functional and about the size I wanted it to be. My stretch goal was to clean up and publish all the code on GitHub, but I continue to procrastinate on that. That's probably a good thing because the code is several years old by now..
  • Built and published a UK Retirement Calculator (and unlike Legobot the code for this is on GitHub).
  • Finally had the utility room of our apartment re-tiled. For introverts like us this is a major accomplishment.
  • Enjoyed some excellent holidays: we went driving in Scotland, hiking in Wales and did scuba diving in Bonaire.
  • Bought and sold a VR headset. I previously owned the Oculus dev kit back in 2013 but was not happy with it. I thought that a higher resolution would make VR everything I ever wanted and that I would use it all the time, but instead it turned out to be just the occasional gimmick and I quickly lost interest. Beat Saber and Google Earth VR were cool though.

The new year has already begun. Let's make the most of it.

(maybe I'll finally get around to re-implementing commenting functionality on this blog... YOU NEVER KNOW)

Posted in Daily Life , Thoughts , UK | Tagged ,

A little update

Hello blog, you're still here. I have lots of topics and ideas I want to write about here, but life always seems to keep getting in the way. Somewhere along the line writing on this blog has gone from one of the first things I do with my free time to somewhere near the end of my priority list. I write down short notes on thoughts in private but I don't really take the time to refine them into coherent posts any more. It's a sign of the times, I think. The generation that grew up with blogging, my generation, has gotten older. My "I'm only adulting ironically" stance on life has definitely become unironic in what seemed like an instant. Suddenly I'm old. That's what it feels like.

In my mind I always imagined myself eventually getting back to this blog many, many years later, once I am retired, to go through the list of things I wanted to write about, and actually start writing and publishing them. I still intend to do this, but I also need to recognize that this is a dream of me-in-my-thirties, much like cycling around Japan was the dream of me-in-my-twenties. It doesn't mean that I won't get around to it, but it does mean that I keep finding other interesting things to do in life, which I might consider more important. Life never stops, and that's a great thing.

I am in the middle of a journey right now. What will happen to this blog is something I will decide at the end of my current journey. For now I'll leave it as-is. From a technical point of view it's definitely a pain to maintain in its current state - I'm aware that I've still not added back commenting functionality yet since switching from Wordpress, but given how little I write here these days, I think it can wait.

My friends, here is where I am: I have recently quit one job and am about to start another. In the meantime I've had a lucky few weeks where I am in-between jobs without the job anxiety, and the wife and I took full advantage of that by going on a holiday abroad for the first time in almost two years. I feel thoroughly refreshed and ready for a new challenge. Let's see what the next few years will bring.

Posted in Daily Life , Thoughts | Tagged

I minted an NFT and put it up for sale

The internet's going crazy about NFTs (non-fungible tokens) right now, so I wanted to see what all the fuss was about. In a nutshell, NFTs are bits of information that are stored on a public blockchain, which are provably 'owned' by a particular blockchain address. Anyone can see it, but only the owner of the address can prove ownership of the NFT, and transfer it to others, since the owner is the only one who is in possession of the private key required to do those things. From a technical point of view it's not very novel at all, it just seems like a logical evoluation of the presence of public blockchains, yet the internet has become infatuated with it recently, with some artwork selling for utterly insane amounts.

The world of cryptocoins has progressed a lot since I first wrote about it. It's incredibly easy these days to just download a mobile crypto wallet, transfer in some money (either crypto or fiat) and then use that wallet to trade. The intended user experience is fantastic, but in practice.. we're not quite there yet. In order to link your wallet to an auction site like rarible.com you have to connect your wallet via a QR code, and in theory the site will then ask your wallet for confirmation for the actions required to mint an NFT and put it up for sale. In practice there's 4 different wallet connection protocols and dozens of wallets that implement them, and your experience will vary greatly depending on which protocol and wallet you use.

MY first attempt at minting an NFT on rarible was to use WalletConnect to connect to crypto.com's mobile wallet app, and it was nothing but pain. Confirmation requests never arrived, or after confirming nothing happened on the auction site. Even transferring money in and out seems near-impossible sometimes. But then I switched to using the Coinbase wallet app and protocol and things were just smooth. It took only a couple of minutes to mint a new NFT and put it up for sale.

So what piece of 'art' did I put up for sale? Given the internet hype around this whole thing I thought it the most appropriate to mint a screenshot of the very first blogpost I wrote about Bitcoin in 2011: Resources are being utterly and completely wasted on mining Bitcoins. You can find the NFT for sale here on rarible.com. This post was written way back in the day when I was GPU mining at home. In those days, even without being part of a mining pool you'd occassionally find the winning hash and get the full 50 BTC. 50 BTC is worth $3,000,000 today..

Looking back on that post, I wish I had been a bit more prescient about the price of Bitcoin rather than the resource usage.. While it's true that Bitcoin's energy usage has ballooned (apparently more energy is spent on mining Bitcoins than is used by entire countries), which I predicted back then, I did not predict that the price would go from $9 to $59000. If I had predicted the price right I'm sure I would at this point be able to buy a news company to write this article for me. Oh well. You win some, you lose a lot.

Posted in Tech | Tagged , ,

Legobot + Base Station 1.0

It's been a while since I wrote about my ongoing hobby project of building a Lego Raspberry Pi tracked vehicle. I've been working on it on and off since the last post, so here's a bunch of updates.

I finally made the plunge and bought a Raspberry Pi UPS Hat (note: does not come with batteries). The reason I held off for so long was mainly for two reasons: the capacity is lower than a separate USB power bank, and I didn't want to faff about with custom wiring and having to worry about short-circuiting things. I ended up caving in because the UPS hat just wasn't that expensive, and faffing about with custom wiring means the end product can be a lot smaller.The big gain you get from a UPS hat is that actually unintterrupted. With every single USB power bank I tried there was always a blip in voltage when plugging the power bank in to mains power that caused the Raspberry Pi to reset itself. No such issue exists when you're using a UPS Hat, and the 2.5A output is more than enough to power two Lego Power Functions XL motors at 8.4V.

Things worked out really well with the UPS hat. Previously I had a separate converter that stepped up the external power bank's 5V USB Power to 9 or 12 volts, which then went into the ThunderBorg motor controller. I found that with the UPS Hat I can pipe the 8.2V input power straight into the ThunderBorg and it's more than enough to drive the two tracks. I ended up having to add an additional switch, because hooking it up to the input power means there's no real way to turn off the power at all, since the ThunderBorg ends up powering the Pi if the UPS hat power switch is turned off. A bit weird, but all in all a lot more compact than my previous solution.

With things getting closer to a finished product I also shortened the Lego power cables, which I had kept intact so far, and was hooking into them with awkward DuPont cables that took up a lot of space. I also made the camera mount more compact by removing the ability to rotate horizontally.

With so much space saved, I managed to add in an additional motor to the front of the vehicle. This motor doesn't connect to anything when the vehicle is driving around. When docked into the base station, this motor can drive any kind of functionality supported by the base station. As you can see from the video below, the base station I built has a retractable ramp which is powered by this custom front motor. Another idea I have is to build a lift for it so I can make the bot look out the window.

I had originally planned to have a worm gear somewhere in the base station winch assembly, but then I figured that the motor resistance is easily enough to hold up the ramp when docked. Plus, as you can see from the second half of the video, you get this cool rapid ramp drop effect just by driving the bot backwards out of the docking station without having to lower the ramp through the winch motor.

The UI shows the video feed and various control buttons for all the motors and lights. It's not clear from the video, but the status bar shows information about battery charge, wifi signal, current wattage, motor voltage and so on. The UPS hat came with a Python library to read the charge percentage, but it did not compensate for the nonlinear dropoff of Li-ion cells, so I had to write a layer on top of that to get a somewhat predictable battery percentage out of it. It's not perfect, but good enough.

Software-wise it's all quite messy. I've been meaning to publish the finished product on github, but the last time I seriously looked at the code was a couple of years ago. The video streaming solution was very unprofessional and optimized to work for the first Raspberry Pi. It definitely needs some polish before I can publish it. But once the software has been published I think I can officially consider this project done. I can't believe I've been at this for several years now. I'll have to find a new hobby..

Posted in Tech | Tagged , ,