Skip to content

Commit ae85447

Browse files
authored
Merge pull request #1015 from JuliaRobotics/master
v0.16.3-rc
2 parents ec76b5a + f919c20 commit ae85447

File tree

14 files changed

+557
-82
lines changed

14 files changed

+557
-82
lines changed

CITATION.bib

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
@online{Caesarjl2022,
2-
author = {{C}ontributors, {E}cosystem, and {N}av{A}bility},
3-
title = {Caesar.jl Solver, v0.13.5},
4-
year = {2022Q4},
5-
doi= {Solver DOI: 10.5281/zenodo.7498643},
1+
@online{Caesarjl2024,
2+
author = {{C}ontributors, {E}cosystem, and {N}av{A}bility(TM)},
3+
title = {Caesar.jl Solver, v0.16.2},
4+
year = {2024},
5+
doi= {Solver DOI: 10.5281/zenodo.5146221},
66
note = {\url{https://github.com/JuliaRobotics/Caesar.jl}}
77
}

NEWS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ Major changes and news in Caesar.jl.
1010
- Updates for IncrementalInference upgrades relating to StaticArray variable values.
1111
- Manifold updates to factors.
1212
- Downstreamed std ROS handlers to PyCaesar.
13+
- Fix `saveLAS` to use `Int32`.
14+
- Several compat updates for dependencies.
15+
- Restore Docs build, and update links for NavAbility at WhereWhen.ai Technologies Inc.
16+
- Introduce `FolderDict` as data structure for lower memory consumption, also as potential BlobStore.
1317

1418
## Changes in v0.13
1519

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
<img src="https://user-images.githubusercontent.com/6412556/134777705-acda768e-884b-4de6-b307-aac6d09b9c81.png" width="240" border="0" />
33
</p>
44

5-
A multimodal/non-Gaussian robotic toolkit for localization and mapping -- reducing the barrier of entry for sensor/data fusion tasks, including Simultaneous Localization and Mapping (SLAM).
5+
A multimodal/non-Gaussian robotic toolkit for localization and mapping -- reducing the barrier of entry for sensor/data fusion tasks, including Simultaneous Localization and Mapping (SLAM). Focus areas are mapping, localization, calibration, synthesis, planning, and digital twins.
66

7-
[NavAbility.io](http://www.navability.io) is administrating and supporting the ongoing development of Caesar.jl with and to help grow the community, please reach out for any additional information at info@navability.io or via the Slack badge-link below.
7+
[NavAbility(TM) by WhereWhen.ai Technologies Inc.](https://www.wherewhen.ai) is administrating and supporting the ongoing development of Caesar.jl with and to help grow the community, please reach out for any additional information at info@wherewhen.ai or via the Slack badge-link below.
88

99
# Weblink Info
1010

@@ -53,8 +53,10 @@ This project adheres to the [JuliaRobotics code of conduct](https://github.com/J
5353

5454
[![Stargazers over time](https://starchart.cc/JuliaRobotics/Caesar.jl.svg)](https://starchart.cc/JuliaRobotics/Caesar.jl)
5555

56-
[doi-img]: https://zenodo.org/badge/55802838.svg
57-
[doi-url]: https://zenodo.org/badge/latestdoi/55802838
56+
[doi-img]: https://zenodo.org/badge/DOI/10.5281/zenodo.5146221.svg
57+
[doi-url]: https://doi.org/10.5281/zenodo.5146221
58+
59+
5146221
5860

5961
[colp-badge]: https://img.shields.io/badge/ColPrac-Contributor's%20Guide-blueviolet
6062
[colprac]: https://github.com/SciML/ColPrac

docs/src/concepts/arena_visualizations.md

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,62 @@
22

33
## Introduction
44

5-
Over time, Caesar.jl/Arena.jl has used at various different 3D visualization technologies. Currently work is underway to better standardize within the Julia ecosystem, with the 4th generation of Arena.jl -- note that this is work in progress. Information about legacy generations is included below.
5+
Over time, Caesar.jl/Arena.jl has used at various different 3D visualization technologies.
6+
7+
### Arena.jl Visualization
8+
9+
#### [Plotting a PointCloud](@id viz_pointcloud)
10+
11+
Visualization support for point clouds is available through Arena and Caesar. The follow example shows some of the basics:
12+
13+
```julia
14+
using Arena
15+
using Caesar
16+
using Downloads
17+
using DelimitedFiles
18+
using LasIO
19+
using Test
20+
21+
##
22+
23+
function downloadTestData(datafile, url)
24+
if 0 === Base.filesize(datafile)
25+
Base.mkpath(dirname(datafile))
26+
@info "Downloading $url"
27+
Downloads.download(url, datafile)
28+
end
29+
return datafile
30+
end
31+
32+
testdatafolder = joinpath(tempdir(), "caesar", "testdata") # "/tmp/caesar/testdata/"
33+
34+
lidar_terr1_file = joinpath(testdatafolder,"lidar","simpleICP","terrestrial_lidar1.xyz")
35+
if !isfile(lidar_terr1_file)
36+
lidar_terr1_url = "https://github.com/JuliaRobotics/CaesarTestData.jl/raw/main/data/lidar/simpleICP/terrestrial_lidar1.xyz"
37+
downloadTestData(lidar_terr1_file,lidar_terr1_url)
38+
end
39+
40+
# load the data to memory
41+
X_fix = readdlm(lidar_terr1_file, Float32)
42+
# convert data to PCL types
43+
pc_fix = Caesar._PCL.PointCloud(X_fix);
44+
45+
46+
pl = Arena.plotPointCloud(pc_fix)
47+
48+
```
49+
50+
This should result in a plot similar to:
51+
52+
```@raw html
53+
<p align="center">
54+
<img src="https://github.com/JuliaRobotics/Arena.jl/assets/6412556/7679c346-fbeb-4d84-b20d-13bd589f3338" width="800" border="0" />
55+
</p>
56+
```
57+
58+
59+
!!! note
60+
24Q1: Currently work is underway to better standardize within the Julia ecosystem, with the 4th generation of Arena.jl -- note that this is work in progress. Information about legacy generations is included below.
661

762
For more formal visualization support, contact [www.NavAbility.io](http://www.navability.io) via email or slack.
863
## 4th Generation Dev Scripts using Makie.jl

docs/src/install_viz.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
# Install Visualization Tools
22

3+
## 2D/3D Plotting, Arena.jl
4+
5+
```julia
6+
pkg> add Arena
7+
```
38

49
## 2D Plotting, RoMEPlotting.jl
510

6-
RoMEPlotting.jl (2D) and Arena.jl (3D) as optional visualization packages:
11+
!!! note
12+
24Q1: Plotting is being consolidated into Arena.jl and RoMEPlotting.jl will become obsolete.
13+
14+
RoMEPlotting.jl (2D) and Arena.jl (3D) are optional visualization packages:
715
```julia
8-
(v1.6) pkg> add RoMEPlotting
16+
pkg> add RoMEPlotting
917
```
1018

1119

docs/src/installation_environment.md

Lines changed: 47 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2,88 +2,82 @@
22

33
Caesar.jl is one of the packages within the [JuliaRobotics](http://www.juliarobotics.org) community, and adheres to the [code-of-conduct](https://github.com/JuliaRobotics/administration/blob/master/code_of_conduct.md).
44

5-
## Possible System Dependencies
5+
## New to Julia
6+
7+
### Installing the Julia Binary
8+
9+
Although [Julia](https://julialang.org/) (or [JuliaPro](https://juliacomputing.com/)) can be installed on a Linux/Mac/Windows via a package manager, we prefer a highly reproducible and self contained (local environment) install.
10+
11+
The easiest method is---via the terminal---[as described on the JuliaLang.org downloads page](https://julialang.org/downloads/).
12+
!!! note
13+
Feel free to modify this setup as you see fit.
14+
15+
## VSCode IDE Environment
16+
17+
[VSCode IDE](https://www.julia-vscode.org/) allows for interactive development of Julia code using the Julia Extension. After installing and running VSCode, install the Julia Language Support Extension:
618

7-
The following (Linux) system packages are used by Caesar.jl:
19+
```@raw html
20+
<p align="center">
21+
<img src="https://user-images.githubusercontent.com/6412556/97769200-444fdf80-1aff-11eb-8ca4-dc6d7a3830fd.png" width="800" border="0" />
22+
</p>
823
```
9-
# Likely dependencies
10-
sudo apt-get install hdf5-tools imagemagick
1124

12-
# optional packages
13-
sudo apt-get install graphviz xdot
25+
In VSCode, open the command pallette by pressing `Ctrl + Shift + p`. There are a wealth of tips and tricks on how to use VSCode. See [this JuliaCon presentation for as a general introduction into 'piece-by-piece' code execution and much much more](https://www.youtube.com/watch?v=IdhnP00Y1Ks). Working in one of the Julia IDEs like VS Code or Juno should feel something like this (Gif borrowed from [DiffEqFlux.jl](https://github.com/SciML/DiffEqFlux.jl)):
26+
```@raw html
27+
<p align="center">
28+
<img src="https://user-images.githubusercontent.com/1814174/88589293-e8207f80-d026-11ea-86e2-8a3feb8252ca.gif" width="800" border="0" />
29+
</p>
1430
```
1531

16-
For [ROS.org](https://www.ros.org/) users, see at least one usage example at [the ROS Direct page](@ref ros_direct).
32+
There are a variety of useful packages in VSCode, such as `GitLens`, `LiveShare`, and `Todo Browser` as just a few highlights. These *VSCode Extensions* are independent of the already vast JuliaLang Package Ecosystem (see [JuliaObserver.com](https://juliaobserver.com/)).
33+
34+
!!! note
35+
For [ROS.org](https://www.ros.org/) users, see at least one usage example at [the ROS Direct page](@ref ros_direct).
1736

1837
## Installing Julia Packages
1938

39+
### Vanilla Install
40+
2041
The philosophy around Julia packages are discussed at length in the [Julia core documentation](https://docs.julialang.org/en/stable/manual/packages/), where each Julia package relates to a git repository likely found on [Github.com](http://www.github.com). Also see [JuliaHub.com](https://juliahub.com/ui/Packages/Caesar/BNbRm) for dashboard-style representation of the broader Julia package ecosystem.
21-
To install a Julia package, simply open a `julia` REPL (equally the Julia REPL in VSCode) and type:
42+
To install a Julia package, simply start a `julia` REPL (equally the Julia REPL in VSCode) and then type:
2243

2344
```julia
24-
] # activate Pkg manager
25-
(v1.6) pkg> add Caesar
45+
julia> ] # activate Pkg manager
46+
(v___) pkg> add Caesar
2647
```
2748

49+
### Version Control, Branches
50+
2851
These are [registered packages](https://pkg.julialang.org/) maintained by [JuliaRegistries/General](http://github.com/JuliaRegistries/General).
2952
Unregistered latest packages can also be installed with using only the `Pkg.develop` function:
3053

3154
```julia
3255
# Caesar is registered on JuliaRegistries/General
3356
julia> ]
34-
(v1.6) pkg> add Caesar
35-
(v1.6) pkg> add Caesar#janes-awesome-fix-branch
36-
(v1.6) pkg> add Caesar@v0.10.0
57+
(v___) pkg> add Caesar
58+
(v___) pkg> add Caesar#janes-awesome-fix-branch
59+
(v___) pkg> add Caesar@v0.16
3760

3861
# or alternatively your own local fork (just using old link as example)
39-
(v1.6) pkg> add https://github.com/dehann/Caesar.jl
62+
(v___) pkg> add https://github.com/dehann/Caesar.jl
4063
```
4164

42-
See [Pkg.jl](https://github.com/JuliaLang/Pkg.jl) for details and features regarding package management, development, version control, virtual environments and much more.
43-
44-
## Next Steps
65+
### Virtual Environments
4566

46-
The sections hereafter describe [Building](@ref building_graphs), [Interacting], and [Solving](@ref solving_graphs) factor graphs. We also recommend reviewing the various examples available in the [Examples section](@ref examples_section).
47-
48-
## New to Julia
49-
50-
### Installing the Julia Binary
51-
52-
Although [Julia](https://julialang.org/) (or [JuliaPro](https://juliacomputing.com/)) can be installed on a Linux computer using the `apt` package manager, we are striving for a fully local installation environment which is highly reproducible on a variety of platforms.
53-
54-
The easiest method is---via the terminal---to [download the desired](https://julialang.org/downloads/) version of Julia as a binary, extract, setup a symbolic link, and run:
55-
56-
```bash
57-
cd ~
58-
mkdir -p .julia
59-
cd .julia
60-
wget https://julialang-s3.julialang.org/bin/linux/x64/1.6/julia-1.6.7-linux-x86_64.tar.gz
61-
tar -xvf julia-1.6.7-linux-x86_64.tar.gz
62-
rm julia-1.6.7-linux-x86_64.tar.gz
63-
cd /usr/local/bin
64-
sudo ln -s ~/.julia/julia-1.6.7/bin/julia julia
65-
```
6667
!!! note
67-
Feel free to modify this setup as you see fit.
68+
Julia has native support for virtual environments and exact package manifests. See [Pkg.jl Docs](https://pkgdocs.julialang.org/v1/environments/) for more info. More details and features regarding package management, development, version control, virtual environments are available there.
6869

69-
This should allow any terminal or process on the computer to run the Julia REPL by type `julia` and testing with:
70+
## Next Steps
7071

71-
## VSCode IDE Environment
72+
The sections hereafter describe [Building](@ref building_graphs), [Interacting], and [Solving](@ref solving_graphs) factor graphs. We also recommend reviewing the various examples available in the [Examples section](@ref examples_section).
7273

73-
[VSCode IDE](https://www.julia-vscode.org/) allows for interactive development of Julia code using the Julia Extension. After installing and running VSCode, install the Julia Language Support Extension:
74+
### Possible System Dependencies
7475

75-
```@raw html
76-
<p align="center">
77-
<img src="https://user-images.githubusercontent.com/6412556/97769200-444fdf80-1aff-11eb-8ca4-dc6d7a3830fd.png" width="800" border="0" />
78-
</p>
76+
The following (Linux) system packages have been required on some systems in the past, but likely does not have to be installed system wide on newer versions of Julia:
7977
```
78+
# Likely dependencies
79+
sudo apt-get install hdf5-tools imagemagick
8080
81-
In VSCode, open the command pallette by pressing `Ctrl + Shift + p`. There are a wealth of tips and tricks on how to use VSCode. See [this JuliaCon presentation for as a general introduction into 'piece-by-piece' code execution and much much more](https://www.youtube.com/watch?v=IdhnP00Y1Ks). Working in one of the Julia IDEs like VS Code or Juno should feel something like this (Gif borrowed from [DiffEqFlux.jl](https://github.com/SciML/DiffEqFlux.jl)):
82-
```@raw html
83-
<p align="center">
84-
<img src="https://user-images.githubusercontent.com/1814174/88589293-e8207f80-d026-11ea-86e2-8a3feb8252ca.gif" width="800" border="0" />
85-
</p>
81+
# optional packages
82+
sudo apt-get install graphviz xdot
8683
```
87-
88-
There are a variety of useful packages in VSCode, such as `GitLens`, `LiveShare`, and `Todo Browser` as just a few highlights. These *VSCode Extensions* are independent of the already vast JuliaLang Package Ecosystem (see [JuliaObserver.com](https://juliaobserver.com/)).
89-

ext/CaesarImagesExt.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import Caesar: PackedScatterAlignPose2, PackedScatterAlignPose3
3838
import Caesar: ImageTracks, FEATURE_VIA, FeatTrackValue, FeaturesDict, FeatureTracks, FeatureMountain, PIXELTRACK, MANYTRACKS
3939
import Caesar: addFeatureTracks_Frame1_Q!, addFeatureTracks_Frame2_PfwdQ!, addFeatureTracks_Frame2_QbckR!
4040
import Caesar: addFeatureTracks, consolidateFeatureTracks!, summarizeFeatureTracks!, buildFeatureMountain, buildFeatureMountainDistributed
41-
import Caesar: unionFeatureMountain, sortKeysMinSighting
41+
import Caesar: unionFeatureMountain, unionFeatureMountain!, sortKeysMinSighting
4242

4343
# NOTE usage requires ImageFeatures.jl
4444
import Caesar: curateFeatureTracks

ext/Images/FeatureMountain.jl

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33

44

5+
"""
6+
$SIGNATURES
57
8+
Add image features to FeatureMountain dict, using an image stored in a blob of a DFG object.
9+
"""
610
function addFeatureTracks_Frame1_Q!(
711
# mountain::FeatureMountain,
812
featToMany,
@@ -280,7 +284,14 @@ end
280284
# addFeatureTracks_Frame2_QbckR!(featToMany_, fg, pair)
281285

282286

287+
"""
288+
$SIGNATURES
289+
290+
Starting from basic short tracks between neighboring images, explore to find longer
291+
tracks between many images.
283292
293+
See also: [`summarizeFeatureTracks!`](@ref)
294+
"""
284295
function consolidateFeatureTracks!(
285296
featToMany_::Dict{Tuple{Symbol,Int},MANYTRACKS},
286297
)
@@ -334,7 +345,14 @@ function consolidateFeatureTracks!(
334345
end
335346

336347

348+
"""
349+
$SIGNATURES
350+
351+
Consolidate many short tracks into longer tracks. A track is the
352+
attempt to follow the same real world feature through a sequence of images.
337353
354+
See also: [`consolidateFeatureTracks`](@ref)
355+
"""
338356
function summarizeFeatureTracks!(
339357
featToMany_::Dict{Tuple{Symbol,Int},MANYTRACKS},
340358
)
@@ -393,8 +411,6 @@ end
393411

394412
## union features
395413

396-
397-
398414
function unionFeatureMountain(
399415
fMa::Dict{Tuple{Symbol,Int},MANYTRACKS},
400416
fMb::Dict{Tuple{Symbol,Int},MANYTRACKS},
@@ -419,7 +435,27 @@ function unionFeatureMountain(
419435
return rM
420436
end
421437

422-
438+
function unionFeatureMountain!(
439+
fMa::Dict{Tuple{Symbol,Int},MANYTRACKS},
440+
fMb::Dict{Tuple{Symbol,Int},MANYTRACKS},
441+
)
442+
# Modify fMa by adding everything from fMb
443+
for (ka,va) in fMb
444+
# @info ka
445+
# union if already exists
446+
if haskey(fMa, ka)
447+
# @info "CHECK TYPES" typeof(fMb[ka]) typeof(fMa[ka])
448+
for (kr,vr) in va
449+
if !haskey(fMa[ka], kr)
450+
fMa[ka][kr] = vr # union(fMb[ka], fMa[ka])
451+
end
452+
end
453+
else
454+
fMa[ka] = va
455+
end
456+
end
457+
return fMa
458+
end
423459

424460
function sortKeysMinSighting(
425461
featM::Dict{Tuple{Symbol,Int},<:Any};
@@ -474,10 +510,10 @@ function buildFeatureMountainDistributed(
474510
featM = deepcopy(featM_1[1])
475511
# union other tracks into featM
476512
for fM in featM_1[2:end]
477-
featM = Caesar.unionFeatureMountain(featM, fM)
513+
featM = Caesar.unionFeatureMountain!(featM, fM)
478514
end
479515
for fM in featM_2
480-
featM = Caesar.unionFeatureMountain(featM, fM)
516+
featM = Caesar.unionFeatureMountain!(featM, fM)
481517
end
482518

483519
return featM

ext/WeakdepsPrototypes.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ function buildFeatureMountain end
9696
function buildFeatureMountainDistributed end
9797

9898
function unionFeatureMountain end
99+
function unionFeatureMountain! end
99100
function sortKeysMinSighting end
100101

101102
## ==============================================

src/Caesar.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ include("objects/ObjectAffordanceSubcloud.jl")
9191
# ImageDraw functionality, used by many extensions and therefore a regular (but minimum able) dependency
9292
include("images/imagedraw.jl")
9393

94+
# experimentals
95+
include("dev/FolderDict.jl")
96+
9497
# weakdeps
9598
include("../ext/factors/Pose2AprilTag4Corners.jl")
9699
include("../ext/factors/ScanMatcherPose2.jl")
@@ -103,7 +106,7 @@ include("Deprecated.jl")
103106

104107
@compile_workload begin
105108
# In here put "toy workloads" that exercise the code you want to precompile
106-
warmUpSolverJIT()
109+
# warmUpSolverJIT()
107110
end
108111

109112
end

0 commit comments

Comments
 (0)