An attempt at fiddling together a distributed infrastructure similar to ROS
Update to Axiom 0.1
Make publishers notified when subscribers change.

heads

default
browse log

clone

read-only
https://hg.sr.ht/~icefox/goatherd
read/write
ssh://hg@hg.sr.ht/~icefox/goatherd

What is this

...For sheep are stupid, and have to be driven. But goats are intelligent, and need to be led.

-- Terry Pratchett

ROS is basically a distributed actor system. This code is just me playing with making something like that in Rust. Though ROS is a library, a set of tools, all sorts of stuff, and right now I'm just messing with a program.

Going to be using the axiom crate, 'cause what's the point using actix like a smart person when you can use something experimental?

Also because Axiom's docs are sexy.

Goals:

  • Pubsub-based actor system
  • Ability to easily record and replay message logs, with timing information
  • Resiliant to failures -- within bounded limits. Axiom assumes actors don't panic, because panics are more or less designed to be fatal and have some tough limitations -- they cannot cross FFI calls, they may abort the program, they bring down the entire process if encountered on the main thread, etc.
  • Supervisor/monitor structure to automatically restart things that fail
  • Sequencing and dependecies for startup?

Non-goals:

  • Distributed real-time
  • Multiple independent binaries that work together -- Axiom's use of TypeId makes this tricky (though not impossible; see https://github.com/rsimmonsjr/axiom/issues/57 )
  • Lots of pre-made messages and stuff like ROS