switched to using initializers, requiring clients to allocate publishers and subscribers instead of keeping the structs in a internal buffers (untested on a real board)