Skip to main content

graph_viz/
graph_viz.rs

1use factrs::{
2    core::{BetweenResidual, Graph, PriorResidual, SE2, assign_symbols, fac},
3    traits::Variable,
4};
5
6assign_symbols!(X: SE2);
7
8#[cfg(not(feature = "rerun"))]
9fn rerun_viz(_graph: &Graph) {}
10
11#[cfg(feature = "rerun")]
12fn rerun_viz(graph: &Graph) {
13    // Setup the rerun
14    let rec = rerun::RecordingStreamBuilder::new("factrs-graph-viz")
15        .connect_grpc()
16        .unwrap();
17
18    // Send the graph
19    let (nodes, edges) = graph.into();
20    rec.log_static("graph", &[&nodes as &dyn rerun::AsComponents, &edges])
21        .expect("log failed");
22}
23
24fn main() {
25    let mut graph = Graph::new();
26    let id = SE2::identity();
27
28    graph.add_factor(fac![PriorResidual::new(id.clone()), X(1)]);
29    graph.add_factor(fac![BetweenResidual::new(id.clone()), (X(1), X(2))]);
30    graph.add_factor(fac![BetweenResidual::new(id.clone()), (X(2), X(3))]);
31
32    graph.add_factor(fac![BetweenResidual::new(id.clone()), (X(1), X(4))]);
33    graph.add_factor(fac![BetweenResidual::new(id.clone()), (X(2), X(4))]);
34    graph.add_factor(fac![BetweenResidual::new(id.clone()), (X(3), X(5))]);
35
36    rerun_viz(&graph);
37}