Off-topic. I'm thinking about building a game where players are controlling real robots. The players compete for resources which are randomly distributed in the land. In the first version of the game it will be on the Earth. This game can be later used to help colonize Moon and Mars.
Do you know any robots which can be used in such game?
I'm greatly inspired by his work. It seems magical for game design.
Game engines like Unity also let you tweak a lot of things interactively, but more by making those things be assets rather than code. But I never really liked that style. (For that matter, I don't like CSS being separate from the page content either.)
> The compiler extracts anything marked as a parameter into a separate data structure, with a link to the location in the source code they came from. When the IDE renders the Yoga code, it shows the parameters as sliders.
Turning code into data that can be represented in another way. I guess the idea is from projectional editors, where the code is projected onto different representations depending on the context and what the user wants to accomplish.
Does anyone know of other work along similar lines? Programming the robot is also cool and I'm curious if this idea can be applied to other types of programming where a simplified projection of the program can make code more accessible to non-programmers.
Yoga is purely functional, so it's possible to use backpropagation to compute it efficiently.
It actually compiles 2 versions of each function: call them foo and foo.grad. foo.grad takes the same arguments as foo, and also a gradient for each output argument. It then computes gradients for each input argument.
The algorithm is simple: traverse the expression tree in the usual order you'd use for emitting code, and remember the order. Then traverse in reverse order, propagating gradients as you go.
The tedious bit is writing the gradients for every built-in op. For an operation like + it's simple: each argument gets the same gradient as the result:
Have you considered using an off the shelf differentiable programming implementation? Or are the requirements for real-time applications too demanding for existing software?
This is amazing. I love the concept of remote programmable robotics and the real-time feedback of the controls is a great idea. I think this is the way forward, I wasted countless hours trying to fiddle with code only to see the robot failing on the edge of breaking apart.
Any indications on how to build my own Greppy and the whole infrastructure behind it? :)
Curious about your use case! Do you want to setup your own warehouse for you and your own friends? Or use the existing Yoga warehouse and get your own personal Greppy on it that only a subset of people can share? Or something else?
I would love to understand how the whole thing works actually and how it can be configured/updated. Surely this approach can be adapted to smaller robots? It's more of a curiosity question since I love to tinker with robots and am looking for a good way to make them better. Apart from didactic purposes I don't have a really specific use case yet. :)
Do you know any robots which can be used in such game?