<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Juraph</title>
    <link>/</link>
    <description>Recent content on Juraph.com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Mon, 08 Jul 2024 00:00:00 +0000</lastBuildDate>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Migrating from Gazebo to Drake</title>
      <link>/kiwi/migrating_to_drake/</link>
      <pubDate>Mon, 08 Jul 2024 00:00:00 +0000</pubDate>
      <guid>/kiwi/migrating_to_drake/</guid>
      <description>Pre-ramble I have been wanting to give drake a try for a while now, and after running into some issues with Gazebo, I decided it was a good chance to finally get around to trying Drake. There were some hurdles along the way, but truthfully it was less painful than I was expecting. The end result is drake as a stand-in replacement for Gazebo, publishing to /joint_states,/imu, and subscribing to /cmd_vel for joint commands.</description>
    </item>
    <item>
      <title>I can&#39;t stop thinking about Throbol</title>
      <link>/miscellaneous/introspection/</link>
      <pubDate>Mon, 11 Mar 2024 00:00:00 +0000</pubDate>
      <guid>/miscellaneous/introspection/</guid>
      <description>This post is going to be more &amp;ldquo;stream of consciousness&amp;rdquo; than my other writings. This is noteworthy as I haven&amp;rsquo;t really felt the need to write about something that wasn&amp;rsquo;t a presentation of some form. Up to this point, all of my posts have been of form &amp;ldquo;Look at this milestone in this project&amp;rdquo; or &amp;ldquo;Here is a trick I figured out&amp;rdquo; and I&amp;rsquo;ve enjoyed having the value of my writing derived from the milestone itself.</description>
    </item>
    <item>
      <title>Balancing the Inverted pendulum with LQR</title>
      <link>/kiwi/balancing_with_lqr/</link>
      <pubDate>Fri, 12 Jan 2024 00:00:00 +0000</pubDate>
      <guid>/kiwi/balancing_with_lqr/</guid>
      <description>I&amp;rsquo;m back, and as promised we&amp;rsquo;re now doing a dive on LQR. I had to do a ton of scope adjustments for this post, as it was difficult trying to estimate what the &amp;ldquo;stopping point&amp;rdquo; should be. The initial vision for this segment also included an introduction to Control Barrier functions, Control-Lyapunov to be specific. However this would have required a primer on not only stability, but also on convergence and initial guesses.</description>
    </item>
    <item>
      <title>Adding a debugger to ros.el</title>
      <link>/miscellaneous/ros_emacs_debugging/</link>
      <pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate>
      <guid>/miscellaneous/ros_emacs_debugging/</guid>
      <description>I have brought up the ros.el emacs package a number of times now, as it has become a package that I use multiple times a day. A little while ago, I had the idea to see if I could add a debugger function, to take advantage of the emacs-gdb functionality.&#xA;The implementation took me down a rabbit hole of learning about how tramp handles remote connections, as well as how gdb links shared librarys.</description>
    </item>
    <item>
      <title>Balancing the Inverted pendulum</title>
      <link>/kiwi/balancing_with_pid/</link>
      <pubDate>Sat, 21 Oct 2023 00:00:00 +0000</pubDate>
      <guid>/kiwi/balancing_with_pid/</guid>
      <description>I have (finally) gotten around to getting KIWI to balance in simulation. All in took me about an hour to write up the pid_controller and get it to stay upright. A little longer to nail down twist tracking via a /cmd_vel command. The core logic is remarkably simple, and I think serves as a great showcase of the &amp;ldquo;power of PID&amp;rdquo;. In the same way I think that people tend to overlook linear regression for their solutions as it&amp;rsquo;s not shiny enough, I really think people under-estimate how far a well-tuned PID can get you.</description>
    </item>
    <item>
      <title>Using GDB with ROS2, a reference</title>
      <link>/miscellaneous/ros2_and_gdb/</link>
      <pubDate>Thu, 17 Aug 2023 00:00:00 +0000</pubDate>
      <guid>/miscellaneous/ros2_and_gdb/</guid>
      <description>It has been around a year since I moved to working in ROS2 full-time. Much like the Post about using GDB in ROS1, I wanted to make a reference for myself, and potentially anyone else, for creating a decent debugging workflow for ROS2. Unlike my ROS1 guide, I will be covering launch files here, as information regarding debugging with ROS2 is a bit sparse.&#xA;Step 1: Compile with debug flags $ colcon build [flags] --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo You don&amp;rsquo;t need to build your whole workspace with debug flags, just the package you want to debug.</description>
    </item>
    <item>
      <title>ROS.el is really nice</title>
      <link>/miscellaneous/emacs_ros/</link>
      <pubDate>Tue, 15 Aug 2023 00:00:00 +0000</pubDate>
      <guid>/miscellaneous/emacs_ros/</guid>
      <description>In the last post, I mentioned that the ros.el emacs package had been on my radar. I finally got around to giving it a try a few days ago, and it has quickly become a staple of my workflow (Highest praise possible!).&#xA;I had to add some dependencies in my packages.el:&#xA;;; `ros.el&amp;#39; depends on `with-shell-interpreter&amp;#39; among other packages ;; See: https://github.com/DerBeutlin/ros.el/blob/master/Cask (package! with-shell-interpreter) (package! string-inflection) (package! ros :recipe (:host github :repo &amp;#34;DerBeutlin/ros.</description>
    </item>
    <item>
      <title>Tips for remote development</title>
      <link>/miscellaneous/tips_on_remote_development/</link>
      <pubDate>Sun, 30 Jul 2023 00:00:00 +0000</pubDate>
      <guid>/miscellaneous/tips_on_remote_development/</guid>
      <description>I&amp;rsquo;ve been developing on robots with Emacs for a few years now, and I thought it may be beneficial for me to do a write-up of some of the tricks I&amp;rsquo;ve learned. The usefulness of the following won&amp;rsquo;t be limited to robotics, nor only to those who use Emacs, as I&amp;rsquo;m sure the frustrations of developing on a remote machine, inside a container are transcendent. Given that I have wound up revisiting the ROS and GDB page a good number of times to jog my memory, I suspect that this topic will be as useful.</description>
    </item>
    <item>
      <title>Playing with Build123d</title>
      <link>/kiwi/playing_with_build123d/</link>
      <pubDate>Sat, 08 Apr 2023 00:00:00 +0000</pubDate>
      <guid>/kiwi/playing_with_build123d/</guid>
      <description>Alright, third post in a row where I switch to a new build system. I know it&amp;rsquo;s not a great look, but I swear this is the last time.&#xA;With this new model in Build123d, I&amp;rsquo;m finally settled on a library that seems to scale gracefully (roughly linearly) as assemblies accumulate complexity.&#xA;Why the switch?: Assemblies become unwieldy Previously I touched on the fluent programming style, and how it felt like a substantial change from the OOP style I&amp;rsquo;m used to.</description>
    </item>
    <item>
      <title>Topic Selection</title>
      <link>/ornis/topic_selection/</link>
      <pubDate>Sat, 17 Dec 2022 00:00:00 +0000</pubDate>
      <guid>/ornis/topic_selection/</guid>
      <description>In this latest update, ORNIS now supports element selection! This required a bit of re-thinking of how messages are handled in the front-end, but I&amp;rsquo;m quite happy with how it turned out. One of the downsides to working intermittently on a project is that one tends to run into a lot of &amp;ldquo;Wait, I&amp;rsquo;ve already solved this!&amp;rdquo;, and this update has a few of these instances. The big one was almost re-inventing &amp;ldquo;msg_tree&amp;rdquo;, essentially a nested tree data structure I created for the service interactions.</description>
    </item>
    <item>
      <title>Playing with CadQuery</title>
      <link>/kiwi/playing_with_cadquery/</link>
      <pubDate>Wed, 23 Nov 2022 00:00:00 +0000</pubDate>
      <guid>/kiwi/playing_with_cadquery/</guid>
      <description>In the last post, I mentioned I was having reservations about OpenScad, and its suitability as CAD software for KIWI. The primary source of these reservations was simply that after making only minor headway, each operation had become so tedious. Simple things like a bracket for a servo was becoming far too much trial and error for my liking. Initially, I thought I&amp;rsquo;d be able to simply take some measurements of my part before I begin modelling, save them as variables &amp;ldquo;servo_width, servo_height&amp;rdquo; or something similar, then use these dimensions to define our extrusions/cuts for the servo mounts.</description>
    </item>
    <item>
      <title>Interaction Improvements</title>
      <link>/ornis/interaction_improvements/</link>
      <pubDate>Wed, 27 Jul 2022 00:00:00 +0000</pubDate>
      <guid>/ornis/interaction_improvements/</guid>
      <description>One of the earliest requirements I laid out for ORNIS was the ability to send/recieve service calls. While the &amp;lsquo;ros2 service&amp;rsquo; interface may be convenient, it is cumbersome to say the least. I have had countless issues with attempting to fill out larger service requests via the CLI, only to accidently mess up the indentation. The resulting failure to request always strikes a nerve.&#xA;Ironically, my initial implementation of the service interaction had the exact same issue.</description>
    </item>
    <item>
      <title>Bringing Kiwi to Sim</title>
      <link>/kiwi/bringing_kiwi_to_sim/</link>
      <pubDate>Sat, 25 Jun 2022 00:00:00 +0000</pubDate>
      <guid>/kiwi/bringing_kiwi_to_sim/</guid>
      <description>In our last post, we blocked out a primitive 3d model of our inverted pendulum. From here, the next step is to get the basic mesh into Gazebo, to allow us to begin testing in simulation.&#xA;From Zero to Gazebo I suspect that everyone who has ever used ROS has had to deal with the horror of building/installing ROS. It can become a serious pain, and you wouldn&amp;rsquo;t believe the number of hours I&amp;rsquo;ve had to spend in the past dealing with missing/incorrect dependencies, or the source code refusing to compile.</description>
    </item>
    <item>
      <title>Topic Plotting</title>
      <link>/ornis/topic_plotting/</link>
      <pubDate>Mon, 13 Jun 2022 00:00:00 +0000</pubDate>
      <guid>/ornis/topic_plotting/</guid>
      <description>TUI&amp;rsquo;s have been around for years (Understatement). There is a strong precedent for them, with plenty of examples showcasing what makes for a great piece of software. I&amp;rsquo;ve always admired how much `prettiness&amp;rsquo; a developer can achieve using simple symbols and glyphs. I really do feel that the limitations and constraints really force one to be creative and mindful of the medium in order to get something that is enjoyable to look at.</description>
    </item>
    <item>
      <title>Playing with OpenScad</title>
      <link>/kiwi/playing_with_openscad/</link>
      <pubDate>Mon, 06 Jun 2022 00:00:00 +0000</pubDate>
      <guid>/kiwi/playing_with_openscad/</guid>
      <description>I&amp;rsquo;ve been wanting to get better about writing updates more frequently than I am currently. One of the big reasons for taking so long between posts is that I&amp;rsquo;m absolutely horrible at judging where exactly I should &amp;lsquo;plant the flag&amp;rsquo; in a project, and get to writing about it. This is most evident in ORNIS, where I literally spent six months writing code, and didn&amp;rsquo;t write a single word about it until it was essentially a mvp.</description>
    </item>
    <item>
      <title>Introducing ORNIS</title>
      <link>/ornis/introducing_ornis/</link>
      <pubDate>Sat, 28 May 2022 00:00:00 +0000</pubDate>
      <guid>/ornis/introducing_ornis/</guid>
      <description>Presenting ANOTHER entry in the &amp;ldquo;Definitely not a Backronym&amp;rdquo; series! This one is a bit different, being a project that is entirely software based.&#xA;TL:DR I made a Terminal User Interface for ROS2. Is it good? No. Should you use it? No. Go use Foxglove Studio, it&amp;rsquo;s an open source WebApp, made by people mature enough to know that Terminal User Interfaces are limiting and dumb. If you&amp;rsquo;re still interested, you can check out the GitLab here.</description>
    </item>
    <item>
      <title>Introducing KIWI</title>
      <link>/kiwi/introducing_kiwi/</link>
      <pubDate>Sat, 14 Aug 2021 00:00:00 +0000</pubDate>
      <guid>/kiwi/introducing_kiwi/</guid>
      <description>K.I.W.I, aka &amp;lsquo;Kinetic Inverted Wheeled Invention&amp;rsquo; is the next project on our journey forwards. You may have noticed a trend in naming: I really like bacronyms, no matter how forced. This project will be a little more involved than QUAIL, as an inverted pendulum is inherently unstable, requiring us to do some analysis before getting into the design. This is one of my favorite parts of working on robots, there is something really satisfying about being able to do a bit of math to predict how the robot will behave.</description>
    </item>
    <item>
      <title>Lessons learned from QUAIL</title>
      <link>/quail/lessons_learned/</link>
      <pubDate>Wed, 02 Jun 2021 00:00:00 +0000</pubDate>
      <guid>/quail/lessons_learned/</guid>
      <description>QUAIL is completed! Well, it took WAY longer than expected. Life got very busy for me over the last few months, and I struggled to find the time and motivation to get this thing over the line. The last requirement for the project was to &amp;lsquo;close the loop&amp;rsquo;, and figure out a nice way to feedback the state of the sensor bar. Thankfully, it was all pretty simple once I got going again.</description>
    </item>
    <item>
      <title>Dealing with the encoders, theoretically</title>
      <link>/quail/encoders/</link>
      <pubDate>Sun, 24 Jan 2021 00:00:00 +0000</pubDate>
      <guid>/quail/encoders/</guid>
      <description>Failure to encode Tragically, we have hit a speed-bump with the project, the phototransistor on one of the encoders is dead. Obviously this calls for a moment of silence.&#xA;The rest of the circuit appears to be working fine, however. While I did want to implement the code to utilise the encoders, it was never actually needed in order to get the robot to follow a line. I could probably replace the part and get it working again, but I do not feel it is worth the effort given the scope of the project.</description>
    </item>
    <item>
      <title>Using GDB with ROS 1, a reference</title>
      <link>/miscellaneous/ros_and_gdb/</link>
      <pubDate>Wed, 18 Nov 2020 00:00:00 +0000</pubDate>
      <guid>/miscellaneous/ros_and_gdb/</guid>
      <description>I wanted to write this to act as a quick lookup for anyone who needs it (Mostly me). Almost all of the guides I found mention inserting a launch-prefix into a launch file to launch gdb with the node, but I don&amp;rsquo;t like doing that. I don&amp;rsquo;t want to have start gdb from scratch and manually insert the break-points each time I want to debug. That&amp;rsquo;s goofy. Also, I&amp;rsquo;d like to use my editor&amp;rsquo;s built-in debugging tools.</description>
    </item>
    <item>
      <title>Controlling the motors</title>
      <link>/quail/motor_driver/</link>
      <pubDate>Mon, 09 Nov 2020 00:00:00 +0000</pubDate>
      <guid>/quail/motor_driver/</guid>
      <description>The Motor Driver Node Getting an output from the PI If we&amp;rsquo;re going to drive the motors, we&amp;rsquo;re going to need some method of interfacing with the GPIO output pins on the Pi. After doing some reading and researching, I think that pigpio (Probably pronounced pi-gpio, and not pig-pio like my mind keeps reading it as) perfectly fits the bill for what we are looking for.&#xA;There is a small potential caveat about using pigpio, which is that under normal operation, it requires sudo access.</description>
    </item>
    <item>
      <title>The hardware of QUAIL</title>
      <link>/quail/quail_hardware/</link>
      <pubDate>Sat, 31 Oct 2020 00:00:00 +0000</pubDate>
      <guid>/quail/quail_hardware/</guid>
      <description>The chassis This is an Arexx RP6 robot platform. I have spent a lot of time messing with this thing over the years, and I have learned a lot from it. The website for it can be found here: RP6 Robot system (I highly recommend doing some browsing around their website, it&amp;rsquo;s a reminder of a time when websites had character). A run down of the specs lists an 8-bit ATMEGA32, a pair of optical encoders, motors, light sensors, touch sensors, the whole shebang.</description>
    </item>
    <item>
      <title>Installing ROS2 on a Raspberry Pi 3 B</title>
      <link>/quail/ros2_on_raspi/</link>
      <pubDate>Fri, 16 Oct 2020 00:00:00 +0000</pubDate>
      <guid>/quail/ros2_on_raspi/</guid>
      <description>Great, yet another &amp;ldquo;How to install $x$ on $y$&amp;rdquo; blog post. Exactly what the internet was missing. Just be grateful I&amp;rsquo;m not serving ads on this website.&#xA;I wanted to do my best to ensure this build log was as close to self-contained as reasonable, which means that sometimes we&amp;rsquo;re going to get low hanging fruit. I found two different sources already covering this, one Youtube Video by Ubuntu-robotics, and a Blog post on Medium.</description>
    </item>
    <item>
      <title>Q.U.A.I.L: Quick Unmanned Autonomous Inspector of Lines</title>
      <link>/quail/intro/</link>
      <pubDate>Fri, 09 Oct 2020 00:00:00 +0000</pubDate>
      <guid>/quail/intro/</guid>
      <description>The What: QUAIL will be a line following robot. That is as much as I want it to do. Sounds simple enough, but there is a little more going on than that.&#xA;The Why: Over the last few months, I&amp;rsquo;ve been working on a completely different project. I don&amp;rsquo;t want to spoil what the project was just yet, as it&amp;rsquo;s still ongoing. it was an attempt to push my own boundaries in terms of what I know and understand about robotics.</description>
    </item>
    <item>
      <title>About</title>
      <link>/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/about/</guid>
      <description>The Name The giraffe&amp;rsquo;s chief distinguishing characteristics are its extremely long neck and legs, its horn-like ossicones, and its distinctive coat patterns. It is classified under the family Giraffidae, along with its closest extant relative, the okapi. Its scattered range extends from Chad in the north to South Africa in the south, and from Niger in the west to Somalia in the east. Giraffes usually inhabit savannahs and woodlands. Their</description>
    </item>
    <item>
      <title>About</title>
      <link>/diana/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/diana/</guid>
      <description></description>
    </item>
  </channel>
</rss>
