Skip to content

Proper multi-agent message sharing with the correct frame ID #282

@andrewjong

Description

@andrewjong

Yunwoo and I discussed how to properly do multi-agent transforms. Key questions: should we assume there exists a global frame? Should we try and map everything into the same frame? Or should we assume that all robots are decentralized and they each should map other robots into their own frame?
We decided:
Let's assume all robots can make some calculation about where their origin is relative to some global frame. This global frame might come from a UTM zone, GPS, or it might be arbitrarily set. Either way, let's assume that robots will be able to initialize relative to some shared global frame
We currently already get this in Isaac, see images attached below. Currently we have it setup such that for each robot, its Action Graph publishes a TF between the "World" prim and the robot's "mavros_enu" prim
The only issue is right now every robot is publishing topics in "map" frame, which causes a name collision in the TF tree if we directly share these. Therefore, when publishing topics out to other robots, e.g. for a robot's own odom, or a robot's own pointcloud, we need to overwrite the header in that message to have the robot prefix, i.e. "robot_1/map" instead of simply "map"
Then each robot also should publish a static transform (as an odometry message) that goes from "world" --> "robot_1/map"

Tfs should not be shared between robots. Tfs create a lot of traffic and are hard to filter. Instead I suggest robots should share odometry messages and then on each robot the tf is recreated based on the received odometry

Image

Image

Image

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions