Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/simon-lc/glvisualizer.jl
Robot visualization tools using OpenGL backend.
https://github.com/simon-lc/glvisualizer.jl
depth point-cloud visualization
Last synced: about 2 months ago
JSON representation
Robot visualization tools using OpenGL backend.
- Host: GitHub
- URL: https://github.com/simon-lc/glvisualizer.jl
- Owner: simon-lc
- License: mit
- Created: 2022-08-02T01:06:13.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-12-04T00:40:21.000Z (about 2 years ago)
- Last Synced: 2023-09-25T08:15:13.619Z (over 1 year ago)
- Topics: depth, point-cloud, visualization
- Language: Julia
- Homepage:
- Size: 167 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![CI](https://github.com/simon-lc/GLVisualizer.jl/actions/workflows/CI.yml/badge.svg)](https://github.com/simon-lc/GLVisualizer.jl/actions/workflows/CI.yml)
[![codecov](https://codecov.io/gh/simon-lc/GLVisualizer.jl/branch/main/graph/badge.svg?token=VGKaalaVHb)](https://codecov.io/gh/simon-lc/GLVisualizer.jl)# GLVisualizer.jl
Robot visualization tool using OpenGL backend. The API proposed in this package is heavily inspired from [MeshCat.jl](https://github.com/rdeits/MeshCat.jl). The reason for developing this package was to access depth information from a camera view. A tutorial on doing just this is provided below.## Quick start
#### create and open a visualizer```
resolution = (600, 400)
vis = GLVisualizer(resolution=resolution)
open(vis)
```
#### set a floor object
```
set_floor!(vis, color=RGBA(0.4, 0.4, 0.4, 0.2))
```
#### create two objects
```
object1 = HyperRectangle(Vec(0,0,0), Vec(0.2, 0.9, 1))
object2 = HyperRectangle(Vec(0,0,0), Vec(0.6, 0.2, 2.0))
```#### add both objects to the scene, this defines a tree representation: root -> object1 -> object2. Moving the frame of object1 will move object2 accordingly.
```
setobject!(vis, :root, :object1, object1, color=RGBA(0,0,1,0.4))
setobject!(vis, :object1, :object2, object2, color=RGBA(1,0,0,0.4))
```#### set the camera position, the point we are looking at and the upward direction of the camera.
```
eyeposition = [0,2,5.0]
lookat = [1,0,0.0]
up = [0,0,1.0]set_camera!(vis;
eyeposition=eyeposition,
lookat=lookat,
up=up,
far=100.0,
near=0.1,
zoom=1.0,
)
```#### set the pose of both objects
```
settransform!(vis, :object1, [0,0,0.50], Makie.Quaternion(0,0,0,1.0))
settransform!(vis, :object2, [0,0,0.25], Makie.Quaternion(0,0,0,1.0))
```#### compute depth for each pixel in the image generated by the camera
```
depth = depth_buffer(vis)
maximum(depth)
minimum(depth)
```#### in-place version of the depth query, this still allocates memory though
```
depth = depth_buffer!(depth, vis)
maximum(depth)
minimum(depth)
```#### convert depth pixels to 3D coordinates in the world frame and sotre them in wolrd_coordinates
```
p1 = Vector(range(200, step=32, length=10))
p2 = Vector(range(100, step=32, length=10))
n1 = length(p1)
n2 = length(p2)
world_coordinates = zeros(3, n1 * n2)
depthpixel_to_world!(world_coordinates, depth, p1, p2, vis)
```#### create a pixel object to visualize where it is positioned in 3D space, then position all the pixels
```
pixel_object = HyperSphere(Point{3}(0,0,0.0), 0.05)
for i = 1:size(world_coordinates, 2)
setobject!(vis, :root, Symbol(:pixel, i), pixel_object, color=RGBA(0.0,0.0,0.0,1.0))
settransform!(vis, Symbol(:pixel, i), world_coordinates[:,i], Makie.Quaternion(0,0,0,1.0))
end
```#### camera view from the front
#### camera view from the side
#### plot the depth image and visualize the pixels that have been extracted from it
```
linear_depth = (depth .- minimum(depth)) ./ (maximum(depth) - minimum(depth))
point_depth = deepcopy(linear_depth)
for i in p1
for j in p2
point_depth[i .+ (-4:4), j .+ (-4:4)] .= 1.0
end
end
```#### depth image
```
Plots.plot(Gray.(1 .- rotl90(linear_depth)))
```#### depth image with pixel highlighted
```
Plots.plot(Gray.(1 .- rotl90(point_depth)))
```