$ telnet mqnc.dev
Mirko Kunze's Project Portfolio
Welcome! Below you will find the finest selection of my personal
engineering confections — a curated assortment of projects that are dearest
to my heart. Some were built for work, some for fun. All were handcrafted
with care and offer a rich taste of my interests, skills, and the joy I find
in building things that matter — at least to me.
WoVi2
Dynamic Collision-Aware Workspace Visualization
for Robotic Manipulators — 2026
https://github.com/mqnc/wovi2
Aim of this project is to explore interactive workspace
⎞ visualization as a tool for robot cell design as well as
o────⊂ ⎟ robot and tool design. It is the successor of my dissertation
╱ ___⎠ project (see below).
╱ ⎛☒
‾‾‾‾
WoVi
On-the-fly Workspace Visualization for Redundant Manipulators — 2016
https://github.com/mqnc/wovi
This is what my dissertation is about. It is a
⎞ force-field-like visualization of different workspaces of a
o────⊂ ⎟ robotic arm:
╱ ⎠ - Where can the TCP go in a straight line from its current
╱ position while maintaining its current orientation ?
‾‾‾‾ - How far can the TCP twist while maintaining its current
position without hitting a joint limit?
- What points are reachable in general (not just in a straight line) in a
configurable set of orientations?
All this is computed on-the-fly on the GPU and changes as the robot moves.
It can be used for designing robots, tools and the environment around
robots. It does not consider collisions yet because that would have been too
tough to implement on GPU but with today's CPU power it is probably
feasible.
UPDATE: See above.
trafo
Python Transformation Library — 2024
https://github.com/mqnc/trafo
Λ z When working with Python on robotics projects, I often felt it
│ Λ y lacked a good and lean tool for handling transformations. I had
│╱ issues with all the tools out there, so I decided to create my own.
0─────> I also wanted to demonstrate the advantages of open source to my
x employer and since we were not allowed to open source our work, I
wrote it in my free time. As there were no deadlines, I took the
opportunity to do everything properly: an idiomatic API, proper testing,
proper documentation, proper code checks.
It took a lot of work but I learned a ton and I hope it catches on. Tell
your colleagues, friends and family about it ;)
Gestalt Planner
Collision-free Trajectory Planner for Robotic Manipulators — 2021-2025
At Gestalt, we've quickly reached the limits of what
▽ GΞSTΛLT MoveIt can do and I found it extremely difficult to extend it
│ Planner with new functionality. So instead I built a custom
╰──────>× trajectory planner. It has some features which sets it apart
from the competition, including a very efficient way to
handle orientation constraints and an also very efficient way
to verify the collision-freedom of large joint motions. Unless I am allowed
to open source it, which I am trying, I can't disclose much more.
UPDATE: I was allowed to open source it!
https://github.com/mqnc/kite-motion-planner
RLSK Studio Plugin
Trajectory Generation for a Remote Laser Welding Robot — 2018
https://www.youtube.com/watch?v=kYvSfckVm3A
┌──┐ II-VI Highyag wanted to mount their laser welding head which
│ │└──, can cover a small volume with high speed via mirrors to a robot
│ └───┐╲ arm to increase the workspace. The robot should automatically
└────╤‿═' sweep the welding head workspace over all seams while the laser
√ │ welds them.
This is essentially a TSP but with some exciting twists: Some
seams are very long but need to be welded in one go, which kind of maps to a
portal from one town to another in TSP space. Another is that the traveling
salesman is not a point but has a large volume (laser head workspace) and
can cover multiple towns at the same time. This was one of the most
interesting challenges I've ever worked on.
json5cpp
C++ Library for Parsing JSON5 — 2024
https://github.com/mqnc/json5cpp
JSON is a very elegant and intuitive file format for
{JSON:5,} representing data. However, it does not support NaN,
±infinity, or comments. I've been trying to work around these
limitations (using "//":"my comment" for comments, null for
NaN, and 1.79769E+308 for inf) but all of that is very inconvenient and
feels wrong. The desire for these features is strong, several parsers
support some of them. Python's json optionally supports NaN, Infinity,
-Infinity. nlohmann/json optionally supports comments. But there is no
interoperability.
I've looked at other file formats. XML is overly verbose and does not
really match the object structure in programming. YAML is not an option
because of these points https://en.wikipedia.org/wiki/YAML#Criticism and
because it very annoyingly has significant indentation. The situation with
TOML is almost the same: https://dev.to/siddharthshyniben/why-not-toml-1fj9.
Then I came across Hjson and JSON5, they both solve everything. I like
JSON5 more because of its compatibility to JavaScript and because it has an
official spec. However, there was no C++ implementation for it, so I created
one. I directly translated the reference JS implementation and all the
tests.
Cinnamon
Usable Programming Language that Wraps C++ — 2019
https://gitlab.com/mqnc/cinnamon
I have a constant love-hate relationship with C++. It's
❨Cinnamon designed in a way that the compiler has to read everything
only once, so I have to write everything twice. Its strong
focus on backwards compatibility means that every new feature
must have been a syntax error before and that's what C++ looks like today.
Lzz3 brought some relief but is outdated now.
I went through several insufficient iterations to make my life "easier",
from tons of preprocessor macros to a custom regex-based preprocessor to
proper languages that transpile to C++, of which Cinnamon is the latest
iteration.
Then I learned that Herb Sutter went down the same road and created Cpp2.
I was expecting that his project will probably be more popular than mine and
got both discouraged and excited because I'm also happy if he solves all my
issues. However, it doesn't look like Cpp2 will be production-ready anytime
soon so I might go back to Cinnamon.
ometa-cpp
Compiler compiler for C++, inspired by OMeta — 2022
https://github.com/mqnc/ometa-cpp
identStart := {'A'}..{'Z'} While working on Cinnamon (see above), at
| {'a'}..{'z'} some point I got unhappy with the transpiler
| "_" being based on Lua and decided that I need to
| "::"; write an appropriate transpiler tool first. I
stumbled upon Ometa and was very pleased with
it. However, there is no C++ implementation, so I decided to create one.
I was also intrigued by the idea that the to-be-transpiled source could
configure the transpiler to understand custom syntax, something I only know
from Felix (https://felix-lang.github.io/felix/) (apart from the somewhat
inconvenient C preprocessor macros). This would also allow for custom infix
operators with custom precedence and custom associativity. So I built
Ometa-C++ in a way that facilitates that idea.
It is in a state where it is almost feature-complete and usable, however
I lost interest in it as I lost interest in Cinnamon with Cpp2 on the
horizon.
Noah
Animal Poster Puzzler — 2023
https://raw.githubusercontent.com/mqnc/shed/refs/heads/master/noah.png
.────.-. For my little daughter I wanted to have an animal poster
╭⎛ ( o ⎞ that contains ALL 240 different animals there are, so like
⎜ ____ ╰│⎟ any good father I searched the whole wide world wide web for
⎜││ │││ ╯ animal photos and created a custom kind-of-physics engine in
order to puzzle all these concave shapes together into a nice
poster (the link above is just a debugging screenshot, not the poster).
I was very pleased with the result and several friends and our
kindergarten also wanted one. I wanted to turn animal posters into a
business before AI can create something like that in 10 seconds but I got
discouraged by how much bureaucracy it is to do a business tax declaration
in Germany. One day I will still give this a shot.
UPDATE: I am now giving this a shot! https://www.kidposter.de
AceChase
Massive Multiplayer Couch Vehicular Combat Game — 2003?-Now
https://www.youtube.com/watch?v=JUjWb0njmTI
╏ ╏ Let's be honest! We all started programming because we wanted
⎛⎜ ∩ ⎟⎞ to make video games when we were kids!
⎜⎜⎟O⎜⎟⎟ I've been working on this game together with my cousin since
⎝`╱W╲´⎠ we've both been going to school. We both love the
shopping-cart-like vehicle control from Asteroids, so we wanted
to build a multiplayer game around that. We went from C++ to Blitz3D back to
C++ to Java to JavaScript to TypeScript. I've learned about all these
languages, a ton about computer graphics, physics engines and software
architecture in general from that. It's not done yet — but one day, it will
be!
Let’s create the next entry together!
$