Shipped this project!
Through this project, I am working to improve various parts of Micro-ROS and to add Zenoh support to it.
I also became an official Micro-ROS maintainer through this project!
Through this project, I am working to improve various parts of Micro-ROS and to add Zenoh support to it.
I also became an official Micro-ROS maintainer through this project!
VarioBot is meant to be a robotic platform for research and education, featuring various modular mobility systems, two versatile robot arms, and advanced sensors.
I couldn’t fully complete the project, but I am still really happy with the progress I made. Current features include:
I am now going to work on getting full navigation working in simulation. There sadly isn’t enough time left to get it working on the real robot, also.
Description of the image below: The left shows the simulation world (Gazebo) while the right is essentially what the robot thinks is around it.
Log in to leave a comment
Since the last devlog, a bunch of stuff has happened:
Log in to leave a comment
While RFDF is not even 1% complete, I am really happy with the current feedback I have received on it. I will continue working on this and hopefully get it to a point where every robot’s code has an rfdf.kdl.
I showed the project at the ROSGraph Working Group meeting, and the feedback was incredible!
Emerson Knapp said that this is a problem that Polymath Robotics is facing with its autonomous tractors and needs to be solved.
Natesh Narain said that the project is a good idea and needs more use-case examples to get it evaluated properly.
Tony Baltovski from Clearpath Robotics starred my repo, but I haven’t received any personal feedback from him.
I have worked on adding a Rust-based ROS 2 node for publishing RFDF descriptions, alongside an example ROS 2 package. They work well.
A special feature of the publisher is that it uses the TRANSIENT_LOCAL QOS policy, similar to the robot_state_publisher. This makes it so that the publisher only publishes messages to a particular node when it is added to the ROS 2 network, and doesn’t continuously publish messages.
I also worked more on CI and stuff.
Log in to leave a comment
I am just gonna go ahead and explain the current hardware situation of the project with this devlog.
connect-debounce failed and not detect the ESP32. I had to then forego the built-in USB port of the PCB and instead attach a USB to UART converter to the UART pins of the ESP32.
Log in to leave a comment
Should have devlogged this before, but I kinda forgot.
I have now split up the single big patch I had made to depthai-core into multiple different patches.
I also updated the version of the package from 3.4.0 to 3.5.0.
Darwin builds have started failing now. I will need to look into it.
Log in to leave a comment
Some random CI-related stuff, check the individual commits.
Log in to leave a comment
I haven’t even added a single feature to the project yet, and this is like my 3rd or 4th time re-initializing the repository / changing frameworks.
I have decided to make it an Electron app with a Rust backend through napi-rs.
All the previous work has been scrapped, and block-coding won’t be a thing.
Log in to leave a comment
I have completed the code to make the real robot work properly.
I had to fix many issues with memory allocation on the MCU, which prevented it from receiving joint commands from the ros2_control topic-based hardware interface.
I haven’t tuned the PID constants yet and will do so later.
The main problem I am facing is that I soldered the absolute worst of screw terminals onto my PCB; the screws in them don’t even turn, half the time electricity doesn’t conduct at all, and wires keep coming out.
This has cost me multiple hours. This is also the reason for only 2 wheels moving in the video below.
I am now going to desolder the screw terminals and solder the wires directly. This will be done later on though, for now I am going to focus on getting autonomous navigation with a lidar working on the robot in simulation.
Log in to leave a comment
I have started working on the documentation of the format and have completed documenting how a robot’s movement features should be described.
I am going to present this project in the ROSGraph Working Group meeting next week, let’s hope the response is good.
Log in to leave a comment
I cleaned up the MCU code generated by Gemini quite a lot. There were a lot of small bugs and improvements that could be made here and there.
I designed a top plate for the robot where the Lidar will go. I am also temporarily putting the other 2 pcbs and wiring on this only rn.
I then got the PID controllers working with the simulation properly. The main thing I needed to figure out was how to disable them in the simulation without having to create an entirely separate parameters file for the controllers specifically for the simulation.
They need to be disabled for simulation, as the Gazebo hardware interface doesn’t simulate actual motors and just transfers whatever is sent to it as angular velocity for the wheels.
I then spent multiple hours wiring and screwing everything on the physical robot to get it working. I have the encoders giving accurate angular velocity and position data now.
Now I have to tune the motor PIDs and after that we should have the robot moving!
Log in to leave a comment
After a whole lot of debugging of the micro-ROS code, I have got it successfully working. It listens to motor commands and publishes the current wheel position (through quadrature encoders) on 2 different /joint_states ROS topics.
The work that’s left now:
Log in to leave a comment
After inhaling some plastic fumes, I have gotten the motors and mecanum wheels assembled on the robot.
I needed to edit the print slightly to make space for the screw of the coupling. I also switched the coupling’s screw from an M2 to an M3 to make it tighter.
I also guided Gemini to make the initial implementation of the microcontroller’s code. I have done this many times before and thus felt too lazy to do it myself.
Log in to leave a comment
I have started working on the microcontroller code for the real robot and, after a lot of work, finally got a single motor to move.
I am using this incredible dev-board, which I made a few months ago, as the main microcontroller: https://github.com/Amronos/ESP32-S3_6_Motor_Driver_IMU
The code is written in ESP-IDF, with Arduino as an ESP-IDF component, so that I can use this Arduino library for the DRV8912 motor driver IC.
I was facing a bunch of bugs and errors while using the library, so I forked it and got Gemini to read the datasheet and fix them for me. This worked incredibly well, and I saved a bunch of time.
I also created a new CI workflow that ensures that the ESP-IDF code builds properly.
Log in to leave a comment
I fixed a few bugs as described in the above commits and created some (more like reused previously made ones) CI workflows.
I will now do the necessary things needed in order to get this package published in the ROS 2 apt repositories for all the current ROS 2 distributions.
Log in to leave a comment
I got the xacro PR merged successfully after testing several approaches to the issue at the request of xacro’s maintainer.
RQT tools had rendering issues on my system due to qtwayland not being installed. I added it to the project’s Nix flake.
I have an odometry debug topic from the Gazebo simulation that gives me the real values of the robot’s position and velocity. It wasn’t properly getting bridged to ROS. This was due to the topic name being incorrect in the bridge’s config, which I fixed.
I then worked on making the teleoperation experience of the robot a lot better by creating an RQT Teleop Plugin and remapping the mobility_system_controller’s topics to standard ones used throughout ROS.
Log in to leave a comment
I spent a lot of time deciding on the framework I wanted to use for this tool. I initially wanted this to be a simple TUI in Rust, but it was pretty hard to get keyboard input detection working properly (it was almost impossible to find a cross-platform way to detect whether a key/multiple keys were pressed at the same time).
I then decided to just use ROS’s standard RQT framework for creating GUIs.
I have created the following features right now:
geometry_msgs/msg/TwistStamped
linear.x, linear.y, and angular.z with the keyboardTwistStamped topics from the ROS graph and also allows manual topic entry
Log in to leave a comment
I worked hard on creating ROS 2 launch files for launching Gazbebo (the simulator) and ros2_controllers for core robot control.
On the simulation side of things, I worked on defining friction parameters for a mechanum wheel and creating a simulation world with the right plugins.
For control, I worked on PID control and defined parameters for the kinematic equations used by the controllers.
In the middle of doing all this, I encountered a weird bug with Xacro, which I fixed and made a PR for.
While I was working on all of this, my previously ordered Mecanum wheels arrived, and the base finished 3D printing.
Log in to leave a comment
Yay! It finally builds now! I had to disable the tests and examples as they will require a bit of patching to get them working.
As the package has now been successfully built, I have gone ahead and opened a draft PR to nixpkgs so that other people working with depthAI can leave some initial reviews while I fully test the package out and fix the tests and examples now building.
nixpkgs-review reported that everything is successfully building on all 4 Unix platforms.
Hopefully, by next devlog, I will get a few examples built, allowing me to use my depth camera and get something “tangible” as a devlog attachment.
Log in to leave a comment
I completed writing the robot description file of the mecanum base in SDF/URDF/Xacro. I have defined all the necessary joints, links, visuals, and collisions.
The only thing left is to define friction coefficients for the mecanum wheels, I will do that when I start working on the simulation.
Log in to leave a comment
I fixed a bunch of errors in building DepthAI with GCC 15. There are still so many left!
The main issue isn’t even the code; it’s the amount of time it takes for the library to build every time I make a change.
I also cleaned up the Nix code a ton to make it PR ready.
Log in to leave a comment
I continued working on getting DepthAI packaged in nixpkgs.
I have fixed many build errors by patching the CMake and updating the dependencies of depthai-core in nixpkgs.
The main problem is that depthai-core assumes that internet access is present in the build phase, and it thus clones many dependencies from the internet. Nix doesn’t allow internet access during the build phase; due to this, I need to get the dependencies packaged directly in nixpkgs and patch the CMake accordingly.
Many errors still remain, but I am close.
Log in to leave a comment
I moved from pre-commit to prek for all linting and formatting checks. prek is way faster and feels much better to use.
I also moved from dependabot to renovatebot for dependency updates, as renovatebot supports updates for a larger number of dependencies.
Log in to leave a comment
I am finally done redoing the lost work! This time, the final result is much better than before!
I spent quite a lot of time figuring out the proper placement of screw holes for the motors. Turns out that the last time I did this, I was orienting the screw holes incorrectly, causing the design to not be completely symmetrical.
The next step is to make a top cover and add the microcontroller board, SBC, and a Lidar.
Log in to leave a comment
I created a coupling to attach DFRobot’s 48mm Mecanum Wheel to an N20 motor.
Since I have already done this once before, it was pretty easy.
The coupling also includes a screw hole to make it extra tight on the motor.
Log in to leave a comment
I shipped the new Minecraft 1.21.1 version! So many good updates to the project code! I am very excited for the future of this mod.
P.S.: I hate you tfmg.
I worked on porting the crude oil compatibility feature.
Turns out the only problem was that TFMG stores its generated recipes in recipe/ instead of the standard recipes/. I didn’t notice this for a long time and even went as far as trying to Mixin into the recipe generation code of TFMG.
I am now going to ship the new version of Create: Addon Compatibility, yay!
The next step is to backport a bunch of fixes to Minecraft 1.20.1.
Log in to leave a comment
I have been working on and off on updating this mod to Minecraft 1.21.1 for a while now.
Since my exams are over now, I have decided to speedrun this update.
I spent the past hour looking through what’s done and what is left to do, and came up with a list of stuff that’s left to be ported to Minecraft 1.21.1.
I should have added this project to Flavortown way earlier, but I completely forgot.
For the past few weeks/months, my contributions have focused on adding ROS tooling to nixpkgs.
I have been working on adding various extensions for the colcon package. colcon is a build tool for ROS packages.
ROS, btw, stands for Robot Operating System; you should be able to find plenty about it by searching for it online.
I have currently made PRs for adding 3 colcon extensions.
I have made a 4th PR for updating colcon to its latest version. You can find more details on the PR page.
I have also been working on packaging the latest versions of depthai for Nixpkgs; till now, this has mostly involved cleaning up and trying to understand this incomplete PR.
I also spend some time reviewing PRs for packages I use.
Log in to leave a comment
Since I am redoing 20 hours of my work, I decided to do things more properly now. I am now going to make multiple FreeCAD files instead of breaking FreeCAD by trying to fit all my assemblies into one file.
Instead of just downloading the motor clamp’s model from the internet, I have now gone ahead and remodelled it by myself in FreeCAD. I did this because the original model wasn’t centred properly, and by remaking it in FreeCAD, I can now modify it when needed in the future.
I probably spent more time mirroring the left motor clamp into a right motor clamp than I spent making the left motor clamp, lol. I didn’t have any prior practice in doing stuff like this. I learnt about making clones, links, and mirrors, yay!
Log in to leave a comment
I have finally started working on Zenoh support in Micro-ROS, the thing I started this project for. rmw_zenoh_pico had some patches for zenoh-pico to make it work better with Micro-ROS (rmw_zenoh_pico currently only has support for running Zenoh with Micro-ROS on Linux, not on microcontrollers). They didn’t work for the latest zenoh-pico versions and needed some cleanup. I did the necessary changes, and now zenoh-pico is building just fine with colcon for ESP-IDF.
rmw_zenoh_pico is currently failing as it was originally made to work on ROS 2 Jazzy, not Rolling. I will fix that in the next devlog.
Log in to leave a comment
I made many improvements to the GitHub Actions CI and README.md of the micro_ros_espidf_component to make it easier for me to test my changes. PR: https://github.com/micro-ROS/micro_ros_espidf_component/pull/324
I then worked on getting the component to properly work with ESP-IDF v5.5. I took most of my changes from another PR and retargeted them to rolling. My PR: https://github.com/micro-ROS/micro_ros_espidf_component/pull/325
Log in to leave a comment
I got the ROS 2 Rolling builds fixed and made a PR.
Look at the screenshot below or the PR for more details.
Log in to leave a comment
I have started by trying to build and run the micro_ros_espidf_component default examples using rmw_microxrcedds.
I first created a flake.nix for the project (something which I do for all my projects). I used nixpkgs-esp-dev for this.
When attempting to build the first example in ROS2 Rolling, I encountered an error. Turns out that right now Micro-ROS is not working for rolling due to a new package added to rcl_logging. I decided to address this issue as well.
Log in to leave a comment
I spent a lot of time improving the Nix setup, switching to a more efficient cache for the ROS packages and significantly enhancing direnv support by utilising ros-direnv.
I also accidentally rmed the robot’s CAD design, and therefore deleted like 20 hours of my work. I will have to redesign it; hopefully, it will take less time than before and be better as well.
Log in to leave a comment
Log in to leave a comment
Made the UI better and fixed the ghost scrollbar issue. It was caused by a bug in Blockly that occurs when using Tailwind CSS.
All of this is going to change a lot, this is just something basic to get started with.
Log in to leave a comment
I added Tailwind CSS and shadcn/ui to the project, then cleaned up the code a bit by deleting CSS that is no longer needed and moving CSS for specific components to their definitions, instead of having it defined globally. Some UI bugs have happened because of that, but I am working on fixing it.
Log in to leave a comment
To implement block-coding, I am going to use Blockly.
I first ported the Blockly sample app into Svelte and tried to get it functioning with Tauri.
The web version of the app looked fine and worked as intended, but for some reason, when run natively, everything was squished to a corner, causing it to appear glitched and making the app unusable.
I spent a lot of time trying to debug this issue. Turns out the problem was a bug in Tauri that caused incorrect DPI scaling with Wayland. To fix it, I temporarily got the app to use X11 by setting export GDK_BACKEND=x11.
Log in to leave a comment
Log in to leave a comment
Instead of just having a plate at the front, which could be swapped. I decided that it would be better to make the entire base of the robot that controls movement swappable. This would allow for multiple types of movement systems, both wheel-based and legged.
For this devlog, I mainly spent time creating a new base for mecanum drive, calibrating the motor’s position, and creating a coupling to attach the mecanum wheel to the motor.
During this, I learnt more about creating sub-assemblies and groups for models in FreeCAD and some of the quirks associated with those features.
Log in to leave a comment
I was so invested that I forgot to devlog :(.
I went ahead and created the GitHub repository that will contain all of the robot’s code, documentation, CAD files, and other relevant materials. Here’s a list of what I did and the difficulties I faced:
Log in to leave a comment
I decided to use the Theia platform to make this project.
I spent a large amount of time shifting the hello-world example from the documentation to use pnpm, and I also created a flake.nix for the project. I got the browser IDE working, but even after a lot of debugging, I couldn’t get the Electron one to start.
Log in to leave a comment
I have decided to put the wheels inside the robot instead of outside so that they are protected, and the robot looks more aesthetically pleasing.
To support multiple drive modes, the plan is to have a system where you can change the front plate of the robot to accommodate different types of steering at the front (will probably support only Ackermann and normal for now). One of the plates will have two circular holes for the two steerable wheels, and another will have two rectangular holes for non-steerable wheels (in differential and mecanum drive). This system will also include different motors and mounts that will steer/rotate the wheels and keep them in place.
Log in to leave a comment