Skip to content

Commit 4c29e94

Browse files
authored
fix(docs): Update a bunch of docs (#77)
1 parent 96e0832 commit 4c29e94

12 files changed

Lines changed: 36 additions & 32 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ evalio can be used both as a python library and as a CLI for both datasets and p
2828
Once evalio is installed, datasets can be listed and downloaded via the CLI interface. For example, to list all datasets and then download a sequence from the hilti-2022 dataset,
2929
```bash
3030
evalio ls datasets
31-
evalio download hilti_2022/basement_2
31+
evalio dl hilti_2022/basement_2
3232
```
3333

3434
Once downloaded, a trajectory can then be easily used in python,
@@ -108,4 +108,4 @@ If you use evalio in your research, please cite the following paper,
108108
primaryClass={cs.RO},
109109
url={https://arxiv.org/abs/2507.16000},
110110
}
111-
```
111+
```

docs/examples/data_loading.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,12 @@ from evalio.rerun import convert
8181

8282
# Initialize rerun
8383
rr.init("evalio")
84-
rr.connect_tcp()
84+
rr.connect_grpc()
8585

8686
# Stream lidar scans to rerun
8787
for scan in Hilti2022.basement_2.lidar():
8888
rr.set_time("timeline", timestamp=scan.stamp.to_sec())
8989
rr.log("lidar", convert(scan, color="z"))
9090
```
9191

92-
If anything is unclear, please open an issue on the evalio repository. We are always looking to improve the documentation and make it easier to use.
92+
If anything is unclear, please open an issue on the evalio repository. We are always looking to improve the documentation and make it easier to use.

docs/examples/dataset.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ Additionally, there is a number of optional methods that you can implement to ad
7070

7171
def vehicle(self) -> str: ...
7272

73-
def download(self) -> str: ...
73+
def download(self) -> None: ...
7474

7575
def quick_len(self) -> Optional[int]: ...
7676
```
@@ -82,4 +82,4 @@ The next three are again self-explanatory, all of which provide information for
8282

8383
`quick_len` returns a hardcoded number of scans in a dataset, used for `evalio ls` and for computing time estimates in `evalio run`. If not set, evalio will load the data to compute the length.
8484

85-
That's all there is to it! Datasets are fairly simple - mostly just parameter setting and easy-to-use iterator wrappers. If you have an dataset implementation of an open-source dataset, feel free to make a PR to add it to evalio so others can use it as well.
85+
That's all there is to it! Datasets are fairly simple - mostly just parameter setting and easy-to-use iterator wrappers. If you have an dataset implementation of an open-source dataset, feel free to make a PR to add it to evalio so others can use it as well.

docs/examples/evaluation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,6 @@ Results will be saved to the `output_dir` specified in the config file, with nes
6363

6464
Once trajectories have been run, statistics can be calculated,
6565
```bash
66-
evalio stats -d results -m mean -w 200 -s RTEt
66+
evalio stats results --metric mean --w-meters 200 --sort RTEt_200.0m
6767
```
68-
With `-m/--metric` specifying the metric to calculate with options including mean, median, and sse and `-w/--window` specifying the window size for RTE, with a default of 100 scans. Only first part of all trajectories can also be done using the `-l/--length` option. Sorting of the results can be done with the `-s/--sort` option, with any column heading being an allowed option.
68+
With `--metric` specifying the metric to calculate with options including mean, median, and sse, and `--w-meters` / `--w-seconds` specifying RTE windows (defaults to `--w-meters 30` and can be repeated). Only first part of all trajectories can also be done using the `-l/--length` option. Sorting of the results can be done with `-S/--sort`, with any column heading being an allowed option.

docs/examples/odometry.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ from evalio.types import Trajectory
4444
from evalio.datasets import NewerCollege2020
4545
from evalio import stats
4646

47-
traj = Trajectory.from_experiment("odometry.csv")
47+
traj = Trajectory.from_file("odometry.csv")
4848
gt = NewerCollege2020.short_experiment.ground_truth()
4949

5050
# Align the odometry to the ground truth
5151
traj_aligned, gt_aligned = stats.align(traj, gt)
5252

5353
# Compute metrics as desired (will align if not already aligned)
5454
error = stats.rte(traj, gt).mean()
55-
```
55+
```

docs/examples/pipeline.md

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ To create a pipeline, simply inherit from the `Pipeline` class,
3333

3434
# Getters
3535
def pose(self) -> SE3: ...
36-
def map(self) -> list[Point]: ...
36+
def map(self) -> dict[str, list[Point]]: ...
3737

3838
# Setters
3939
def set_imu_params(self, params: ImuParams): ...
@@ -44,7 +44,7 @@ To create a pipeline, simply inherit from the `Pipeline` class,
4444
# Doers
4545
def initialize(self): ...
4646
def add_imu(self, mm: ImuMeasurement): ...
47-
def add_lidar(self, mm: LidarMeasurement) -> list[Point]: ...
47+
def add_lidar(self, mm: LidarMeasurement) -> None: ...
4848
```
4949

5050
=== "C++"
@@ -72,7 +72,7 @@ To create a pipeline, simply inherit from the `Pipeline` class,
7272
7373
// Getters
7474
const SE3 pose() { ... };
75-
const std::vector<Point> map() { ... };
75+
const evalio::Map<> map() { ... };
7676

7777
// Setters
7878
void set_imu_params(ImuParams params) { ... };
@@ -83,7 +83,7 @@ To create a pipeline, simply inherit from the `Pipeline` class,
8383
// Doers
8484
void initialize() { ... };
8585
void add_imu(ImuMeasurement mm) { ... };
86-
std::vector<Point> add_lidar(LidarMeasurement mm) { ... };
86+
void add_lidar(LidarMeasurement mm) { ... };
8787
}
8888
```
8989

@@ -93,6 +93,8 @@ We'll cover each section of methods in turn.
9393

9494
The first four methods are all static methods that provide information about the pipeline. `version`, `url`, and `name` are all self-explanatory. `default_params` is a static method that returns a dictionary of the default parameters for the pipeline. This is used to verify parameters before they are passed in, as well as ensure a consistent output for each run.
9595

96+
In C++ there is additionally a number of helper type conversion functions that can make converting between iterators, point types, and geometry types simpler. A good example of this can be found in the `lio_sam.h` binding where it is used to convert pose and point types. These converters can additionally be leveraged by the `save` methods described below.
97+
9698
## Getters
9799

98100
The next two methods are getters for the pose and map. The pose is the most up-to-date estimate for the IMU and is polled after each lidar measurement is passed in.
@@ -112,7 +114,11 @@ Arguably the most important part.
112114

113115
`add_imu` is called for each IMU measurement. This is where the IMU data is processed and used to update the pose.
114116

115-
`add_lidar` is called for each lidar measurement. This is where the lidar data is processed and used to update the map. It returns a list of features were extracted from the scan and are used for visualization.
117+
`add_lidar` is called for each lidar measurement. This is where the lidar data is processed and used to update the map.
118+
119+
Saving poses can be done asynchronously, using `save(stamp, pose)`. In C++, the type of `pose` can be anything that has the method `evalio::convert<evalio::SE3>(const MyPose& pose)` implemented.
120+
121+
For visualization, features can be save similarly with either `save(stamp, {"key": features})` in python, or `save(stamp, "key1", feat1, "key2", feat2)` in C++. Again, `feat1` and `feat2` can be any type that are iterators with their internal point types convertible to `evalio::Point`.
116122

117123
## C++ Building
118124

@@ -125,11 +131,11 @@ NB_MODULE(_core, m) {
125131

126132
// Only have to override the static methods here
127133
// All the others will be automatically inherited from the base class
128-
nb::class_<MyCppPipeline, evalio::Pipeline>(m, "MyCppPipeline")
134+
nb::class_<MyPipeline, evalio::Pipeline>(m, "MyPipeline")
129135
.def(nb::init<>())
130-
.def_static("name", &MyCppPipeline::name)
131-
.def_static("url", &MyCppPipeline::url)
132-
.def_static("default_params", &MyCppPipeline::default_params);
136+
.def_static("name", &MyPipeline::name)
137+
.def_static("url", &MyPipeline::url)
138+
.def_static("default_params", &MyPipeline::default_params);
133139
}
134140
```
135141
@@ -145,4 +151,4 @@ We recommend then setting everything up to be built with [`scikit-build-core`](h
145151
m.def("abi_tag", []() { return nb::detail::abi_tag(); });
146152
```
147153
148-
That's all there is to it! Pipelines should be fairly easy to implement and are usually just a simple wrapper around your existing code to provide a common interface. Once your pipeline is open-source/published/etc, feel free to make a PR to add it to evalio. This both improves the visibility of your work and of evalio.
154+
That's all there is to it! Pipelines should be fairly easy to implement and are usually just a simple wrapper around your existing code to provide a common interface. Once your pipeline is open-source/published/etc, feel free to make a PR to add it to evalio. This both improves the visibility of your work and of evalio.

docs/install.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ make
2323
```
2424

2525
### Pipelines
26-
By default, pipelines are not included due to their large dependencies. We use vpckg to handle a reliable build of these dependencies and pipelines. vcpkg and the pipelines can be setup via running
26+
By default, pipelines are not included due to their large dependencies. We use vcpkg to handle a reliable build of these dependencies and pipelines. vcpkg and the pipelines can be setup via running
2727
```bash
2828
./cpp/setup_pipelines.sh
2929
```

docs/quickstart.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ evalio can be used both as a python library and as a [CLI](ref/cli.md) for both
1212
Once evalio is installed, datasets can be listed and downloaded via the [CLI](ref/cli.md) interface. For example, to list all datasets and then download a sequence from the hilti-2022 dataset,
1313
```bash
1414
evalio ls datasets
15-
evalio download hilti_2022/basement_2
15+
evalio dl hilti_2022/basement_2
1616
```
1717
evalio downloads data to the path given by `-D`, `EVALIO_DATA` environment variable, or if both are unset to the local folder `./evalio_data`. All the trajectories in a dataset can also be downloaded by using the wildcard `hilti_2022/*`, making sure to escape the asterisk as needed.
1818

@@ -67,10 +67,10 @@ import rerun as rr
6767
from evalio.rerun import convert
6868

6969
rr.init("evalio")
70-
rr.connect_tcp()
70+
rr.connect_grpc()
7171
for scan in ds.Hilti2022.basement_2.lidar():
7272
rr.set_time("timeline", timestamp=scan.stamp.to_sec())
73-
rr.log("lidar", convert(scan, color=[255, 0, 255]))
73+
rr.log("lidar", convert(scan, color=(255, 0, 255)))
7474
```
7575

7676
!!! note
@@ -143,4 +143,4 @@ where m -> map, s -> scan, i -> intensity image, and f -> extracted features can
143143

144144
That's about the gist of it! Try playing around the [CLI](ref/cli.md) interface to see what else is possible. Feel free to open an issue if you have any questions, suggestions, or problems.
145145

146-
Additionally, we recommend checking out the examples section for specific use cases for evalio.
146+
Additionally, we recommend checking out the examples section for specific use cases for evalio.

docs/ref/pipelines.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ For more information about the pipelines included in evalio, see the [included p
55
members:
66
- Pipeline
77
- CTICP
8-
- KissICP
8+
- DLIO
9+
- FORM
910
- GenZICP
11+
- KissICP
1012
- LOAM
1113
- LioSAM
1214
- MadICP
13-
- FORM
1415
- PipelineNotFound
1516
- UnusedPipelineParam
1617
- InvalidPipelineParamType

python/evalio/cli/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,6 @@ def module_callback(value: Optional[list[str]]) -> list[Any]:
5555

5656
@app.callback()
5757
def global_options(
58-
# Marking this as a str for now to get autocomplete to work,
59-
# Once this fix is released (hasn't been as of 0.15.2), we can change it to a Path
60-
# https://github.com/fastapi/typer/pull/1138
6158
data_dir: Annotated[
6259
Optional[Path],
6360
typer.Option(

0 commit comments

Comments
 (0)