Compare commits
208 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
06e8e28b71 | ||
|
|
bdfe88ef32 | ||
|
|
9cbd066550 | ||
|
|
da49e0a707 | ||
|
|
43e356e617 | ||
|
|
52fdc13014 | ||
|
|
fff99af775 | ||
|
|
a38d16fcf0 | ||
|
|
48eadfafda | ||
|
|
5a80e5ea33 | ||
|
|
069246614e | ||
|
|
8c80969d18 | ||
|
|
44976e33cf | ||
|
|
5b51b999c0 | ||
|
|
46903bb10f | ||
|
|
efec41a809 | ||
|
|
e59683acff | ||
|
|
c809b99bdf | ||
|
|
78b62fb2df | ||
|
|
95b234a25a | ||
|
|
9716c20bca | ||
|
|
c3982efb76 | ||
|
|
b2f6120fa5 | ||
|
|
f8c56986a9 | ||
|
|
bab2e23e39 | ||
|
|
5017d5c901 | ||
|
|
3ac3c7c8ee | ||
|
|
b71818062e | ||
|
|
95f028426a | ||
|
|
719c0b32ae | ||
|
|
ff11fc0940 | ||
|
|
bea6183613 | ||
|
|
8968f19819 | ||
|
|
31edf1c30f | ||
|
|
45b6adf976 | ||
|
|
84da2abf90 | ||
|
|
c5c795feb0 | ||
|
|
550d4d7cfd | ||
|
|
092b98ca42 | ||
|
|
799561962f | ||
|
|
5e9ce133bb | ||
|
|
c5d15c9000 | ||
|
|
d36a288336 | ||
|
|
2e66f4677e | ||
|
|
de24292cca | ||
|
|
a9f0e49a5a | ||
|
|
8537e82963 | ||
|
|
ed42efc5cb | ||
|
|
d1ebc6cad5 | ||
|
|
8811036be0 | ||
|
|
c4233137e0 | ||
|
|
f25685153b | ||
|
|
415cf31a36 | ||
|
|
042293fb3b | ||
|
|
0038e8c026 | ||
|
|
5ab553e04f | ||
|
|
0f041e59f7 | ||
|
|
195da375f1 | ||
|
|
239c855c18 | ||
|
|
06ff521d43 | ||
|
|
e616d72e40 | ||
|
|
588781028f | ||
|
|
4f08db1826 | ||
|
|
fee2e140c2 | ||
|
|
abd2a3eb67 | ||
|
|
d4771f5090 | ||
|
|
6ed0e209fd | ||
|
|
0c4f9ca494 | ||
|
|
1f945d2bae | ||
|
|
a9643816d5 | ||
|
|
98589a5753 | ||
|
|
f9fa5f8823 | ||
|
|
15464160f6 | ||
|
|
3b8f2d7706 | ||
|
|
8b07e18c23 | ||
|
|
8400966a5c | ||
|
|
2462c1b37a | ||
|
|
d1e856a749 | ||
|
|
633a9c6a6d | ||
|
|
f1720ba090 | ||
|
|
a75d064a2a | ||
|
|
c37bbfb0bd | ||
|
|
56a92df24f | ||
|
|
957b460671 | ||
|
|
21c72ce3b7 | ||
|
|
0061061130 | ||
|
|
b9a8eea7be | ||
|
|
3bef119492 | ||
|
|
e0d61a9c48 | ||
|
|
5f63df740d | ||
|
|
2d1989fc2b | ||
|
|
fd551de04b | ||
|
|
5deefc3af4 | ||
|
|
cdbe614072 | ||
|
|
ccf7e7cb08 | ||
|
|
272ba40b68 | ||
|
|
ceb98aa2d2 | ||
|
|
e1c6ad86ec | ||
|
|
620b834b6c | ||
|
|
a6f7112f82 | ||
|
|
b3e41de62c | ||
|
|
edb18a90b8 | ||
|
|
e91a2663e2 | ||
|
|
dacad9483e | ||
|
|
3f80c8bbff | ||
|
|
189a2bd6b7 | ||
|
|
e325706c9d | ||
|
|
3abb4dc153 | ||
|
|
dfc0b5eaab | ||
|
|
8f50f8d214 | ||
|
|
b4639a72f8 | ||
|
|
cda6024a3e | ||
|
|
6b561733c0 | ||
|
|
5a6eabcc5f | ||
|
|
0025a555ba | ||
|
|
3c4f8b986b | ||
|
|
ecb8cd640a | ||
|
|
f4007aa78c | ||
|
|
8f255ec291 | ||
|
|
d453f98b6d | ||
|
|
af8e188ae1 | ||
|
|
dfea14aba3 | ||
|
|
fd2e6c4708 | ||
|
|
f08dda33b5 | ||
|
|
3038aaace0 | ||
|
|
9dcf3acf2a | ||
|
|
849e8c80dd | ||
|
|
ff2598120a | ||
|
|
e85321130e | ||
|
|
dc0a259007 | ||
|
|
ea5d40ff20 | ||
|
|
d261bad291 | ||
|
|
4d29d18035 | ||
|
|
6075cd61eb | ||
|
|
7322ade75b | ||
|
|
1d81ea4ac6 | ||
|
|
ce7071db2c | ||
|
|
b48cc6d98e | ||
|
|
3490f0ca44 | ||
|
|
1f51ab8fa2 | ||
|
|
3cc158231a | ||
|
|
c2173f9f8e | ||
|
|
ad64476ee6 | ||
|
|
3c687d43ca | ||
|
|
be15d6a6d9 | ||
|
|
dfb2be71a6 | ||
|
|
4ac353c8c1 | ||
|
|
764ccba041 | ||
|
|
1bc0e47cd1 | ||
|
|
8b8e9bd5fd | ||
|
|
e3de24dca1 | ||
|
|
34b079f9ad | ||
|
|
d69263a2c7 | ||
|
|
70e1e9e32f | ||
|
|
f7df7db10b | ||
|
|
a5b337b50f | ||
|
|
f744fa06d5 | ||
|
|
c9bfdbb4d6 | ||
|
|
469ffe5075 | ||
|
|
95d733b2b4 | ||
|
|
22bd0fab3a | ||
|
|
96a1b2a62d | ||
|
|
b93026bdcf | ||
|
|
3b22fa3abc | ||
|
|
2896e00acf | ||
|
|
71e3286014 | ||
|
|
dc4a21d635 | ||
|
|
d1cd7fadc5 | ||
|
|
da9417852a | ||
|
|
f525c2063e | ||
|
|
8f096612a3 | ||
|
|
6a0ce86594 | ||
|
|
559a812c65 | ||
|
|
c24e2806b3 | ||
|
|
c35d338248 | ||
|
|
455bfc72b2 | ||
|
|
852d8d8faf | ||
|
|
d09f037aee | ||
|
|
b2bd90192d | ||
|
|
6953758101 | ||
|
|
262f64715d | ||
|
|
b6d4037357 | ||
|
|
30ed3ed5e2 | ||
|
|
5b5ded25c9 | ||
|
|
01abf3d346 | ||
|
|
05d46111b7 | ||
|
|
44bff1992a | ||
|
|
34f3e08b20 | ||
|
|
c5bf93dfbd | ||
|
|
4b8b7f707c | ||
|
|
b35d55309d | ||
|
|
9068b0dd53 | ||
|
|
5322fc38f4 | ||
|
|
6988ae803b | ||
|
|
74b71dc161 | ||
|
|
cabaeb4794 | ||
|
|
1f7621debd | ||
|
|
f98fe1b4ec | ||
|
|
5eb3174edb | ||
|
|
d6ff3470f1 | ||
|
|
d673a151c9 | ||
|
|
d531112075 | ||
|
|
5105b5ea82 | ||
|
|
a8796478e6 | ||
|
|
d41f4cbcbc | ||
|
|
5d5b5cf476 | ||
|
|
9aefabf76b | ||
|
|
829d37f620 |
2
.gitignore
vendored
@@ -7,6 +7,8 @@ _build/
|
|||||||
_install/
|
_install/
|
||||||
_output/
|
_output/
|
||||||
|
|
||||||
|
/docs/_doxygen/
|
||||||
|
|
||||||
/get-pip.py
|
/get-pip.py
|
||||||
|
|
||||||
/*INFO*
|
/*INFO*
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
|
||||||
project(mynteye VERSION 2.3.1 LANGUAGES C CXX)
|
project(mynteye VERSION 2.3.5 LANGUAGES C CXX)
|
||||||
|
|
||||||
include(cmake/Common.cmake)
|
include(cmake/Common.cmake)
|
||||||
|
|
||||||
@@ -199,9 +199,6 @@ set(MYNTEYE_SRCS
|
|||||||
src/mynteye/device/standard2/channels_adapter_s2.cc
|
src/mynteye/device/standard2/channels_adapter_s2.cc
|
||||||
src/mynteye/device/standard2/device_s2.cc
|
src/mynteye/device/standard2/device_s2.cc
|
||||||
src/mynteye/device/standard2/streams_adapter_s2.cc
|
src/mynteye/device/standard2/streams_adapter_s2.cc
|
||||||
src/mynteye/device/standard2/channels_adapter_s210a.cc
|
|
||||||
src/mynteye/device/standard2/device_s210a.cc
|
|
||||||
src/mynteye/device/standard2/streams_adapter_s210a.cc
|
|
||||||
src/mynteye/device/streams.cc
|
src/mynteye/device/streams.cc
|
||||||
src/mynteye/device/types.cc
|
src/mynteye/device/types.cc
|
||||||
src/mynteye/device/utils.cc
|
src/mynteye/device/utils.cc
|
||||||
@@ -220,6 +217,8 @@ if(WITH_API)
|
|||||||
src/mynteye/api/processor/rectify_processor_ocv.cc
|
src/mynteye/api/processor/rectify_processor_ocv.cc
|
||||||
src/mynteye/api/config.cc
|
src/mynteye/api/config.cc
|
||||||
src/mynteye/api/correspondence.cc
|
src/mynteye/api/correspondence.cc
|
||||||
|
src/mynteye/api/version_checker.cc
|
||||||
|
src/mynteye/api/data_tools.cc
|
||||||
)
|
)
|
||||||
if(WITH_CAM_MODELS)
|
if(WITH_CAM_MODELS)
|
||||||
list(APPEND MYNTEYE_SRCS
|
list(APPEND MYNTEYE_SRCS
|
||||||
|
|||||||
21
Makefile
@@ -62,24 +62,21 @@ all: init samples tools ros
|
|||||||
|
|
||||||
# doc
|
# doc
|
||||||
|
|
||||||
apidoc:
|
doc: apidoc
|
||||||
|
|
||||||
|
apidoc: cleandoc
|
||||||
@$(call echo,Make $@)
|
@$(call echo,Make $@)
|
||||||
@# @[ -e ./_install/include ] || $(MAKE) install
|
@cd docs; make html
|
||||||
@[ -e /usr/local/include/mynteye ] || $(MAKE) install
|
|
||||||
@$(SH) ./doc/build.sh
|
|
||||||
|
|
||||||
opendoc: apidoc
|
opendoc: apidoc
|
||||||
@$(call echo,Make $@)
|
@$(call echo,Make $@)
|
||||||
@$(shell $(SH) ./doc/langs.sh 1); \
|
@$(SH) ./scripts/open.sh docs/_build/html/index.html
|
||||||
for lang in "$${LANGS[@]}"; do \
|
|
||||||
html=./doc/_output/$$lang/html/index.html; \
|
|
||||||
[ -f "$$html" ] && $(SH) ./scripts/open.sh $$html; \
|
|
||||||
done
|
|
||||||
|
|
||||||
cleandoc:
|
cleandoc:
|
||||||
@$(call rm,./doc/_output/)
|
@$(call rm,./docs/_build/)
|
||||||
|
@$(call rm,./docs/_doxygen/)
|
||||||
|
|
||||||
.PHONY: apidoc opendoc cleandoc
|
.PHONY: doc apidoc opendoc cleandoc
|
||||||
|
|
||||||
# deps
|
# deps
|
||||||
|
|
||||||
@@ -130,7 +127,7 @@ endif
|
|||||||
|
|
||||||
# install
|
# install
|
||||||
|
|
||||||
install: build
|
install: uninstall build
|
||||||
@$(call echo,Make $@)
|
@$(call echo,Make $@)
|
||||||
ifeq ($(HOST_OS),Win)
|
ifeq ($(HOST_OS),Win)
|
||||||
ifneq ($(HOST_NAME),MinGW)
|
ifneq ($(HOST_NAME),MinGW)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# MYNT® EYE S SDK
|
# MYNT® EYE S SDK
|
||||||
|
|
||||||
[](https://github.com/slightech/MYNT-EYE-S-SDK)
|
[](https://github.com/slightech/MYNT-EYE-S-SDK)
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
@@ -17,11 +17,8 @@ Please follow the guide doc to install the SDK on different platforms.
|
|||||||
## Documentations
|
## Documentations
|
||||||
|
|
||||||
* [API Doc](https://github.com/slightech/MYNT-EYE-S-SDK/releases): API reference, some guides and data spec.
|
* [API Doc](https://github.com/slightech/MYNT-EYE-S-SDK/releases): API reference, some guides and data spec.
|
||||||
* en: [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2893965/mynt-eye-s-sdk-apidoc-2.3.1-en.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2893979/mynt-eye-s-sdk-apidoc-2.3.1-en.zip) [](https://slightech.github.io/MYNT-EYE-S-SDK/)
|
* en: [](https://readthedocs.org/projects/mynt-eye-s-sdk/downloads/pdf/latest/) [](https://readthedocs.org/projects/mynt-eye-s-sdk/downloads/htmlzip/latest/) [](https://mynt-eye-s-sdk.readthedocs.io/en/latest/)
|
||||||
* zh-Hans: [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2893985/mynt-eye-s-sdk-apidoc-2.3.1-zh-Hans.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2893986/mynt-eye-s-sdk-apidoc-2.3.1-zh-Hans.zip) [](http://doc.myntai.com/resource/api/mynt-eye-s-sdk-apidoc-2.3.1-zh-Hans/mynt-eye-s-sdk-apidoc-2.3.1-zh-Hans/index.html)
|
* zh-Hans: []() [](https://readthedocs.org/projects/mynt-eye-s-sdk-docs-zh-cn/downloads/htmlzip/latest/) [](https://mynt-eye-s-sdk-docs-zh-cn.readthedocs.io/zh_CN/latest/)
|
||||||
* [Guide Doc](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/releases): How to install and start using the SDK.
|
|
||||||
* en: [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2893975/mynt-eye-s-sdk-guide-2.3.1-en.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2893996/mynt-eye-s-sdk-guide-2.3.1-en.zip) [](https://slightech.github.io/MYNT-EYE-S-SDK-Guide/)
|
|
||||||
* zh-Hans: [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2893997/mynt-eye-s-sdk-guide-2.3.1-zh-Hans.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2893997/mynt-eye-s-sdk-guide-2.3.1-zh-Hans.pdf) [](http://doc.myntai.com/resource/sdk/mynt-eye-s-sdk-guide-2.3.1-zh-Hans/mynt-eye-s-sdk-guide-2.3.1-zh-Hans/index.html)
|
|
||||||
|
|
||||||
> Supported languages: `en`, `zh-Hans`.
|
> Supported languages: `en`, `zh-Hans`.
|
||||||
|
|
||||||
|
|||||||
75
config/disparity_config.yaml
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
%YAML:1.0
|
||||||
|
---
|
||||||
|
SGBM:
|
||||||
|
# must define for opencv check
|
||||||
|
name: StereoMatcher.SGBM
|
||||||
|
|
||||||
|
# Margin in percentage by which the best (minimum) computed cost function value should "win" the second best value to consider the found match correct.
|
||||||
|
# Normally, a value within the 5-15 range is good enough.
|
||||||
|
uniquenessRatio: 10
|
||||||
|
|
||||||
|
# Maximum size of smooth disparity regions to consider their noise speckles and invalidate.
|
||||||
|
# Set it to 0 to disable speckle filtering.
|
||||||
|
# Otherwise, set it somewhere in the 50-200 range.
|
||||||
|
speckleWindowSize: 100
|
||||||
|
|
||||||
|
# Maximum disparity variation within each connected component.
|
||||||
|
# If you do speckle filtering, set the parameter to a positive value, it will be implicitly multiplied by 16.
|
||||||
|
# Normally, 1 or 2 is good enough.
|
||||||
|
speckleRange: 32
|
||||||
|
|
||||||
|
# Minimum possible disparity value.
|
||||||
|
# Normally, it is zero but sometimes rectification algorithms
|
||||||
|
# can shift images, so this parameter needs to be adjusted accordingly.
|
||||||
|
minDisparity: 0
|
||||||
|
|
||||||
|
# Maximum allowed difference (in integer pixel units) in the left-right disparity check.
|
||||||
|
# Set it to a non-positive value to disable the check.
|
||||||
|
disp12MaxDiff: 1
|
||||||
|
|
||||||
|
# Truncation value for the prefiltered image pixels.
|
||||||
|
# The algorithm first computes x-derivative at each pixel and clips its value by [-preFilterCap, preFilterCap] interval.
|
||||||
|
# The result values are passed to the Birchfield-Tomasi pixel cost function.
|
||||||
|
preFilterCap: 63
|
||||||
|
|
||||||
|
# Maximum disparity minus minimum disparity.
|
||||||
|
# The value is always greater than zero.
|
||||||
|
# In the current implementation, this parameter must be divisible by 16.
|
||||||
|
numDisparities: 64
|
||||||
|
|
||||||
|
# Matched block size. It must be an odd number >=1 .
|
||||||
|
# Normally, it should be somewhere in the 3..11 range.
|
||||||
|
blockSize: 3
|
||||||
|
|
||||||
|
# The first parameter controlling the disparity smoothness. See below.
|
||||||
|
P1: 72
|
||||||
|
|
||||||
|
# The second parameter controlling the disparity smoothness.
|
||||||
|
# The larger the values are, the smoother the disparity is.
|
||||||
|
# P1 is the penalty on the disparity change by plus or minus 1 between neighbor pixels.
|
||||||
|
# P2 is the penalty on the disparity change by more than 1 between neighbor pixels.
|
||||||
|
# The algorithm requires P2 > P1 .
|
||||||
|
P2: 188
|
||||||
|
|
||||||
|
BM:
|
||||||
|
# must define for opencv check
|
||||||
|
name: StereoMatcher.BM
|
||||||
|
uniquenessRatio: 60
|
||||||
|
speckleWindowSize: 100
|
||||||
|
speckleRange: 4
|
||||||
|
minDisparity: 0
|
||||||
|
disp12MaxDiff: 1
|
||||||
|
preFilterCap: 31
|
||||||
|
# the disparity search range.
|
||||||
|
# For each pixel algorithm will find the best disparity from 0 (default minimum disparity) to numDisparities.
|
||||||
|
# The search range can then be shifted by changing the minimum disparity.
|
||||||
|
numDisparities: 64
|
||||||
|
|
||||||
|
# the linear size of the blocks compared by the algorithm.
|
||||||
|
# The size should be odd (as the block is centered at the current pixel).
|
||||||
|
# Larger block size implies smoother, though less accurate disparity map.
|
||||||
|
# Smaller block size gives more detailed disparity map,
|
||||||
|
# but there is higher chance for algorithm to find a wrong correspondence.
|
||||||
|
blockSize: 15
|
||||||
|
preFilterSize: 9
|
||||||
|
textureThreshold: 10
|
||||||
83
doc/build.sh
@@ -1,83 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Copyright 2018 Slightech Co., Ltd. All rights reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
# _VERBOSE_=1
|
|
||||||
# _TEST_=1
|
|
||||||
|
|
||||||
BASE_DIR=$(cd "$(dirname "$0")" && pwd)
|
|
||||||
ROOT_DIR=$(realpath "$BASE_DIR/..")
|
|
||||||
SCRIPTS_DIR="$ROOT_DIR/scripts"
|
|
||||||
|
|
||||||
source "$SCRIPTS_DIR/common/echo.sh"
|
|
||||||
source "$SCRIPTS_DIR/common/mkdir.sh"
|
|
||||||
source "$SCRIPTS_DIR/common/detect.sh"
|
|
||||||
|
|
||||||
_detect "doxygen"
|
|
||||||
_detect "pdflatex" 1
|
|
||||||
|
|
||||||
source "$BASE_DIR/langs.sh"
|
|
||||||
DOXYFILE="api.doxyfile"
|
|
||||||
OUTPUT="$BASE_DIR/_output"
|
|
||||||
|
|
||||||
# \usepackage{CJKutf8}
|
|
||||||
# \begin{document}
|
|
||||||
# \begin{CJK}{UTF8}{gbsn}
|
|
||||||
# ...
|
|
||||||
# \end{CJK}
|
|
||||||
# \end{document}
|
|
||||||
_texcjk() {
|
|
||||||
tex="$1"; shift;
|
|
||||||
_echo_in "add cjk to $tex"
|
|
||||||
sed -i "" -E $'s/^\\\\begin{document}$/\\\\usepackage{CJKutf8}\\\n\\\\begin{document}\\\n\\\\begin{CJK}{UTF8}{gbsn}/g' $tex
|
|
||||||
sed -i "" -E $'s/^\\\\end{document}$/\\\\end{CJK}\\\n\\\\end{document}/g' $tex
|
|
||||||
}
|
|
||||||
|
|
||||||
for lang in "${LANGS[@]}"; do
|
|
||||||
_echo_s "Build doc $lang"
|
|
||||||
[ -d "$BASE_DIR/$lang" ] || continue
|
|
||||||
cd "$BASE_DIR/$lang"
|
|
||||||
if [ -f "$DOXYFILE" ]; then
|
|
||||||
_mkdir "$OUTPUT/$lang"
|
|
||||||
_echo_i "doxygen $DOXYFILE"
|
|
||||||
doxygen $DOXYFILE
|
|
||||||
|
|
||||||
version=`cat $DOXYFILE | grep -m1 "^PROJECT_NUMBER\s*=" | \
|
|
||||||
sed -E "s/^.*=[[:space:]]*(.*)[[:space:]]*$/\1/g"`
|
|
||||||
|
|
||||||
# html
|
|
||||||
if [ -d "$OUTPUT/$lang/html" ]; then
|
|
||||||
dirname="mynt-eye-s-sdk-apidoc"; \
|
|
||||||
[ -n "$version" ] && dirname="$dirname-$version"; \
|
|
||||||
dirname="$dirname-$lang"
|
|
||||||
cd "$OUTPUT/$lang"
|
|
||||||
[ -d "$dirname" ] && rm -rf "$dirname"
|
|
||||||
mv "html" "$dirname" && zip -r "$dirname.zip" "$dirname"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# latex
|
|
||||||
if [ $pdflatex_FOUND ] && [ -f "$OUTPUT/$lang/latex/Makefile" ]; then
|
|
||||||
_echo_in "doxygen make latex"
|
|
||||||
filename="mynt-eye-s-sdk-apidoc"; \
|
|
||||||
[ -n "$version" ] && filename="$filename-$version"; \
|
|
||||||
filename="$filename-$lang.pdf"
|
|
||||||
cd "$OUTPUT/$lang/latex" && _texcjk refman.tex && make
|
|
||||||
[ -f "refman.pdf" ] && mv "refman.pdf" "../$filename"
|
|
||||||
fi
|
|
||||||
|
|
||||||
_echo_d "doxygen completed"
|
|
||||||
else
|
|
||||||
_echo_e "$DOXYFILE not found"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# MYNT EYE S SDK {#mainpage}
|
|
||||||
|
|
||||||
* <a class="el" href="annotated.html">API Classes</a>
|
|
||||||
* <a class="el" href="modules.html">API Modules</a>
|
|
||||||
* \link enumerations Enumerations\endlink
|
|
||||||
* \link datatypes Datatypes\endlink
|
|
||||||
* \link utils Utiliities\endlink
|
|
||||||
* \link calibration Intrinsics & Extrinsics\endlink
|
|
||||||
* <span style="font-weight:bold">Device Specifications</span>
|
|
||||||
* @subpage specs_data
|
|
||||||
* @subpage specs_ctrl
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# Control Protocols {#spec_control_api}
|
|
||||||
|
|
||||||
There are two control modes, one is through UVC standard protocol, the other is through UVC custom protocol with extension unit.
|
|
||||||
|
|
||||||
## Standard Protocol
|
|
||||||
|
|
||||||
| Name | Field | Bytes | Default | Min | Max | Stored | Flash Address | Note |
|
|
||||||
| :--- | :---- | :---- | :------ | :-- | :-- | :----- | :------------ | :--- |
|
|
||||||
| Gain | gain | 2 | 24 | 0 | 48 | √ | 0x12 | valid if manual-exposure |
|
|
||||||
| Brightness | brightness/exposure_time | 2 | 120 | 0 | 240 | √ | 0x14 | valid if manual-exposure |
|
|
||||||
| Contrast | contrast/black_level_calibration | 2 | 127 | 0 | 255 | √ | 0x10 | valid if manual-exposure |
|
|
||||||
|
|
||||||
## Custom Protocol
|
|
||||||
|
|
||||||
| Name | Field | Bytes | Default | Min | Max | Stored | Flash Address | Channel | Note |
|
|
||||||
| :--- | :---- | :---- | :------ | :-- | :-- | :----- | :------------ | :------ | :----- |
|
|
||||||
| Frame rate | frame_rate | 2 | 25 | 10 | 60 | √ | 0x21 | XU_CAM_CTRL | values: {10,15,20,25,30,35,40,45,50,55,60} |
|
|
||||||
| IMU frequency | imu_frequency | 2 | 200 | 100 | 500 | √ | 0x23 | XU_CAM_CTRL | values: {100,200,250,333,500} |
|
|
||||||
| Exposure mode | exposure_mode | 1 | 0 | 0 | 1 | √ | 0x0F | XU_CAM_CTRL | 0: enable auto-exposure; 1: manual-exposure |
|
|
||||||
| Max gain | max_gain | 2 | 48 | 0 | 48 | √ | 0x1D | XU_CAM_CTRL | valid if auto-exposure |
|
|
||||||
| Max exposure time | max_exposure_time | 2 | 240 | 0 | 240 | √ | 0x1B | XU_CAM_CTRL | valid if auto-exposure |
|
|
||||||
| Desired brightness | desired_brightness | 2 | 192 | 0 | 255 | √ | 0x19 | XU_CAM_CTRL | valid if auto-exposure |
|
|
||||||
| IR control | ir_control | 1 | 0 | 0 | 160 | × | - | XU_CAM_CTRL | |
|
|
||||||
| HDR mode | hdr_mode | 1 | 0 | 0 | 1 | √ | 0x1F | XU_CAM_CTRL | 0: 10-bit; 1: 12-bit |
|
|
||||||
| Zero drift calibration | zero_drift_calibration | | - | - | - | × | - | XU_HALF_DUPLEX | |
|
|
||||||
| Erase chip | erase_chip | | - | - | - | × | - | XU_HALF_DUPLEX | |
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
# Control Channels {#spec_control_channel}
|
|
||||||
|
|
||||||
| Name | Field | Address | Bandwidth | Node |
|
|
||||||
| :----- | :----- | :----- | :----- | :----- |
|
|
||||||
| Camera control channel | XU_CAM_CTRL_CHANNEL | 1 | 3 | |
|
|
||||||
| Half-Duplex channel | XU_HALF_DUPLEX_CHANNEL | 2 | 20 | |
|
|
||||||
| IMU write channel | XU_IMUDATA_WRITE_CHANNEL | 3 | 5 | |
|
|
||||||
| IMU read channel | XU_IMUDATA_READ_CHANNEL | 4 | 2000 | |
|
|
||||||
| File channel | XU_FILE_CHANNEL | 5 | 2000 | |
|
|
||||||
|
|
||||||
## Camera Control Channel
|
|
||||||
|
|
||||||
The channel provides get, set and query (min, max, default).
|
|
||||||
|
|
||||||
## Half-Duplex Channel
|
|
||||||
|
|
||||||
The channel only provides set, such as zero drift correction.
|
|
||||||
|
|
||||||
## IMU Channel
|
|
||||||
|
|
||||||
The channel is used to request and response IMU data, see @ref spec_imu_data.
|
|
||||||
|
|
||||||
## File Channel
|
|
||||||
|
|
||||||
The channel is used to read and write device information, image params, and IMU params.
|
|
||||||
|
|
||||||
| Name | Header | Size | File | Checksum |
|
|
||||||
| :--- | :- | :--- | :--- | :-------- |
|
|
||||||
| Bytes | 1 | 2 | - | 1 |
|
|
||||||
| Type | uint8_t | uint16_t | - | uint8_t |
|
|
||||||
| Description | Flags | Content size | Content data | Checksum, XOR of all content bytes |
|
|
||||||
|
|
||||||
| Header Bit Subscript | Description |
|
|
||||||
| :------------------- | :---------- |
|
|
||||||
| 0 | Device information |
|
|
||||||
| 1 | Image params |
|
|
||||||
| 2 | IMU params |
|
|
||||||
| 3~6 | Undefined |
|
|
||||||
| 7 | 0: Get; 1: Set |
|
|
||||||
|
|
||||||
### File Content Packet
|
|
||||||
|
|
||||||
| Name | ID | Size | Content |
|
|
||||||
| :--- | :- | :--- | :------ |
|
|
||||||
| Bytes | 1 | 2 | - |
|
|
||||||
| Type | uint8_t | uint16_t | - |
|
|
||||||
| Description | Content ID | Content size | Content data |
|
|
||||||
|
|
||||||
| File | ID | Max Size |
|
|
||||||
| :--- | :- | :------- |
|
|
||||||
| Device information | 1 | 250 |
|
|
||||||
| Image params | 2 | 250 |
|
|
||||||
| IMU params | 4 | 500 |
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
# Device Information {#spec_hardware_info}
|
|
||||||
|
|
||||||
| Name | Field | Fixed Value | USB Descriptor | UVC Extension Unit | Bytes | Note |
|
|
||||||
| :----- | :----- | :-------- | :-------------- | :----------------- | :-------- | :----- |
|
|
||||||
| VID | vid | 0x04B4 | √ | × | 2 | |
|
|
||||||
| PID | pid | 0x00F9 | √ | × | 2 | |
|
|
||||||
| Device name | name | MYNT-EYE-? | √ | √ Get | 16 | MYNT-EYE-S1000 |
|
|
||||||
| Serial number | serial_number | - | √ | √ Get | 16 | |
|
|
||||||
| Firmware version | firmware_version | - | √ | √ Get | 2 | major,minor |
|
|
||||||
| Hardware version | hardware_version | - | × | √ Get | 3 | major,minor,flag |
|
|
||||||
| Spec version | spec_version | - | × | √ Get | 2 | major,minor |
|
|
||||||
| Lens type | lens_type | - | × | √ Get/Set | 4 | vendor(2),product(2); default: 0 |
|
|
||||||
| IMU type | imu_type | - | × | √ Get/Set | 4 | vendor(2),product(2); default: 0 |
|
|
||||||
| Nominal baseline | nominal_baseline | - | × | √ Get/Set | 2 | unit: mm; default: 0 |
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
# Image Data {#spec_image_data}
|
|
||||||
|
|
||||||
| Name | Field | Unit | Bytes | Note |
|
|
||||||
| :----- | :----- | :----- | :-------- | :----- |
|
|
||||||
| Frame ID | frame_id | - | 2 | uint16_t; [0,65535] |
|
|
||||||
| Timestamp | timestamp | 10 us | 4 | uint32_t |
|
|
||||||
| Exposure Time | exposure_time | 10 us | 2 | uint16_t |
|
|
||||||
|
|
||||||
## Image Packet
|
|
||||||
|
|
||||||
| Name | Header | Size | Frame ID | Timestamp | Exposure Time | Checksum |
|
|
||||||
| :--- | :----- | :--- | :------- | :-------- | :------------ | :------- |
|
|
||||||
| Bytes | 1 | 1 | 2 | 4 | 2 | 1 |
|
|
||||||
| Type | uint8_t | uint8_t | uint16_t | uint32_t | uint16_t | uint8_t |
|
|
||||||
| Description | 0x3B | 0x08, content size | Frame ID | Timestamp | Exposure time | Checksum, XOR of all content bytes |
|
|
||||||
|
|
||||||
* The image packet will be dropped, if checksum is incorrect.
|
|
||||||
* The accuracy of the time unit: 0.01 ms / 10 us.
|
|
||||||
* The timestamp could indicate 11.9 hours, it will accumulate again after overflow.
|
|
||||||
* The timestamp accumulation starts from the time of power-on, instead of opening.
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# Image Params {#spec_image_params}
|
|
||||||
|
|
||||||
## Image Intrinsics
|
|
||||||
|
|
||||||
| Name | Field | Unit | Bytes | Note |
|
|
||||||
| :----- | :----- | :----- | :-------- | :----- |
|
|
||||||
| Image width | width | px | 2 | uint16_t; [0,65535] |
|
|
||||||
| Image height | height | px | 2 | uint16_t; [0,65535] |
|
|
||||||
| Focal length | fx | - | 8 | double |
|
|
||||||
| ^ | fy | - | 8 | double |
|
|
||||||
| Principal point | cx | - | 8 | double |
|
|
||||||
| ^ | cy | - | 8 | double |
|
|
||||||
| Distortion model | model | - | 1 | uint8_t; pinhole,... |
|
|
||||||
| Distortion coefficients | coeffs[5] | - | 40 | double; k1,k2,p1,p2,k3 |
|
|
||||||
|
|
||||||
## Image Extrinsics
|
|
||||||
|
|
||||||
Transformation matrix from left image to right image.
|
|
||||||
|
|
||||||
| Name | Field | Unit | Bytes | Note |
|
|
||||||
| :----- | :----- | :----- | :-------- | :----- |
|
|
||||||
| Rotation matrix | rotation[3][3] | - | 72 | double |
|
|
||||||
| Translation vector | translation[3] | - | 24 | double |
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
# IMU Data {#spec_imu_data}
|
|
||||||
|
|
||||||
## IMU Request Packet
|
|
||||||
|
|
||||||
| Name | Header | Serial Number |
|
|
||||||
| :--- | :----- | :------------ |
|
|
||||||
| Bytes | 1 | 4 |
|
|
||||||
| Type | uint8_t | uint32_t |
|
|
||||||
| Description | 0x5A | First request should be 0, otherwise the last one |
|
|
||||||
|
|
||||||
## IMU Response Packet
|
|
||||||
|
|
||||||
The IMU response packet contains multiple IMU packets, and each IMU packet contains multiple IMU segments.
|
|
||||||
|
|
||||||
| Name | Header | State | Size | IMU Packets | Checksum |
|
|
||||||
| :--- | :----- | :---- | :--- | :---------- | :------- |
|
|
||||||
| Bytes | 1 | 1 | 2 | ... | 1 |
|
|
||||||
| Type | uint8_t | uint8_t | uint16_t | - | uint8_t |
|
|
||||||
| Description | 0x5B | 0 is success, others are failed | Content size | IMU packets | Checksum, XOR of all content bytes |
|
|
||||||
|
|
||||||
### IMU Packet
|
|
||||||
|
|
||||||
The IMU packet is an array of IMU datas.
|
|
||||||
|
|
||||||
| Name | Serial Number | Timestamp | Count | IMU Datas |
|
|
||||||
| :--- | :------------ | :-------- | :---- | :-------- |
|
|
||||||
| Bytes | 4 | 4 | 1 | ... |
|
|
||||||
| Type | uint32_t | uint32_t | uint8_t | - |
|
|
||||||
| Description | Serial number | IMU basic timestamp | The number of IMU datas | IMU datas |
|
|
||||||
|
|
||||||
### IMU Segment
|
|
||||||
|
|
||||||
| Name | Offset | Frame ID | Accelerometer | Temperature | Gyroscope |
|
|
||||||
| :--- | :----- | :------- | :------------ | :---------- | :-------- |
|
|
||||||
| Bytes | 2 | 2 | 6 | 2 | 6 |
|
|
||||||
| Type | int16_t | uint16_t | int16_t * 3 | int16_t | int16_t * 3 |
|
|
||||||
| Description | The timestamp offset | Image frame ID | Accel x,y,z values | IMU temperature | Gyro x,y,z values |
|
|
||||||
|
|
||||||
* Formula for converting the accel & gyro values to real ones: **real = data * range / 0x10000** .
|
|
||||||
* ``accel`` default ``range`` is **8 g**, ``gyro`` default ``range`` is **1000 deg/s**.
|
|
||||||
* Formula for converting the temperature to real value: **real = data / ratio + offset** .
|
|
||||||
* default ``ratio`` is **326.8**, default ``offset`` is **25℃**.
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# IMU Params {#spec_imu_params}
|
|
||||||
|
|
||||||
## IMU Intrinsics
|
|
||||||
|
|
||||||
| Name | Field | Unit | Bytes | Note |
|
|
||||||
| :----- | :----- | :----- | :-------- | :----- |
|
|
||||||
| Scale matrix | acc_scale[3][3] | - | 72 | double |
|
|
||||||
| ^ | gyro_scale[3][3] | - | 72 | double |
|
|
||||||
| Zero-drift | acc_drift[3] | - | 24 | double |
|
|
||||||
| ^ | gyro_drift[3] | - | 24 | double |
|
|
||||||
| Noise density | acc_noise[3] | - | 24 | double |
|
|
||||||
| ^ | gyro_noise[3] | - | 24 | double |
|
|
||||||
| Random walk | acc_bias[3] | - | 24 | double |
|
|
||||||
| ^ | gyro_bias[3] | - | 24 | double |
|
|
||||||
|
|
||||||
## IMU Extrinsics
|
|
||||||
|
|
||||||
Transformation matrix from left image to IMU.
|
|
||||||
|
|
||||||
| Name | Field | Unit | Bytes | Note |
|
|
||||||
| :----- | :----- | :----- | :-------- | :----- |
|
|
||||||
| Rotation matrix | rotation[3][3] | - | 72 | double |
|
|
||||||
| Translation vector | translation[3] | - | 24 | double |
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
# Device Control Specification {#specs_ctrl}
|
|
||||||
|
|
||||||
* @subpage spec_control_api
|
|
||||||
* @subpage spec_control_channel
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
# Device Data Specification {#specs_data}
|
|
||||||
|
|
||||||
* @subpage spec_hardware_info
|
|
||||||
* @subpage spec_image_params
|
|
||||||
* @subpage spec_imu_params
|
|
||||||
* @subpage spec_image_data
|
|
||||||
* @subpage spec_imu_data
|
|
||||||
20
doc/langs.sh
@@ -1,20 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Copyright 2018 Slightech Co., Ltd. All rights reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
LANGS=(
|
|
||||||
en
|
|
||||||
zh-Hans
|
|
||||||
)
|
|
||||||
[ $# -gt 0 ] && echo "LANGS=(${LANGS[@]})"
|
|
||||||
3
doc/static/custom.css
vendored
@@ -1,3 +0,0 @@
|
|||||||
#projectlogo img {
|
|
||||||
margin: 1em 0.5em 1em 1em;
|
|
||||||
}
|
|
||||||
BIN
doc/static/images/icon.png
vendored
|
Before Width: | Height: | Size: 18 KiB |
BIN
doc/static/images/imu_analytics.png
vendored
|
Before Width: | Height: | Size: 56 KiB |
BIN
doc/static/images/make_install.png
vendored
|
Before Width: | Height: | Size: 32 KiB |
BIN
doc/static/images/stamp_analytics.png
vendored
|
Before Width: | Height: | Size: 127 KiB |
@@ -1,44 +0,0 @@
|
|||||||
# 编译 on Linux {#guide_build_linux}
|
|
||||||
|
|
||||||
> Ubuntu 16.04, Ubuntu 14.04
|
|
||||||
|
|
||||||
## 获取代码
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/slightech/MYNT-EYE-S-SDK.git
|
|
||||||
```
|
|
||||||
|
|
||||||
## 准备依赖
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd mynt-eye-s-sdk/
|
|
||||||
make init
|
|
||||||
```
|
|
||||||
|
|
||||||
### [OpenCV](https://opencv.org/)
|
|
||||||
|
|
||||||
编译前,可在系统终端(Windows 命令提示符)里如下指定 OpenCV 路径,其为 `OpenCVConfig.cmake` 目录:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Linux, macOS
|
|
||||||
export OpenCV_DIR=~/opencv
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
set OpenCV_DIR=C:\opencv
|
|
||||||
```
|
|
||||||
|
|
||||||
## 编译代码
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make install
|
|
||||||
```
|
|
||||||
|
|
||||||
结果:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
\latexonly
|
|
||||||
\includegraphics[width=0.6\textwidth,keepaspectratio]{make_install.png}
|
|
||||||
\endlatexonly
|
|
||||||
|
|
||||||
> CMake 如何引入编译好的库,可参考 `samples/CMakeLists.txt` 里的配置。
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
# 编译 on Windows {#guide_build_win}
|
|
||||||
|
|
||||||
> Windows 10
|
|
||||||
|
|
||||||
## 前提条件
|
|
||||||
|
|
||||||
* [Git](https://git-scm.com/downloads),用于获取代码。
|
|
||||||
* [CMake](https://cmake.org/download/),用于构建编译。
|
|
||||||
* [Doxygen](http://www.stack.nl/~dimitri/doxygen/download.html),用于生成文档。
|
|
||||||
|
|
||||||
最终,命令提示符(Command Prompt, cmd)里可找到如下命令:
|
|
||||||
|
|
||||||
```cmd
|
|
||||||
>cmake --version
|
|
||||||
cmake version 3.10.1
|
|
||||||
|
|
||||||
>git --version
|
|
||||||
git version 2.11.1.windows.1
|
|
||||||
|
|
||||||
>doxygen --version
|
|
||||||
1.8.13
|
|
||||||
```
|
|
||||||
|
|
||||||
* [Visual Studio](https://www.visualstudio.com/)
|
|
||||||
* [Visual Studio 2015](https://my.visualstudio.com/Downloads?q=Visual Studio 2015)
|
|
||||||
* [Visual Studio 2017](https://my.visualstudio.com/Downloads?q=Visual Studio 2017)
|
|
||||||
* [Windows 10 SDK](https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk)
|
|
||||||
|
|
||||||
以 Visual Studio 2015 举例,请在系统环境变量 `PATH` 里添加上如下路径:
|
|
||||||
|
|
||||||
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
|
|
||||||
C:\Program Files (x86)\MSBuild\14.0\Bin
|
|
||||||
|
|
||||||
最终,命令提示符(Command Prompt, cmd)里可找到如下命令:
|
|
||||||
|
|
||||||
```cmd
|
|
||||||
>cl
|
|
||||||
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x86
|
|
||||||
|
|
||||||
>link
|
|
||||||
Microsoft (R) Incremental Linker Version 14.00.24215.1
|
|
||||||
|
|
||||||
>lib
|
|
||||||
Microsoft (R) Library Manager Version 14.00.24215.1
|
|
||||||
|
|
||||||
>msbuild
|
|
||||||
Microsoft (R) 生成引擎版本 14.0.25420.1
|
|
||||||
```
|
|
||||||
|
|
||||||
* [MSYS2](http://www.msys2.org/)
|
|
||||||
* [国内镜像](https://lug.ustc.edu.cn/wiki/mirrors/help/msys2)
|
|
||||||
* [pacman](https://wiki.archlinux.org/index.php/pacman)
|
|
||||||
|
|
||||||
打开 MSYS2 MSYS ,然后执行:
|
|
||||||
|
|
||||||
```msys
|
|
||||||
$ pacman -Syu
|
|
||||||
$ pacman -S make
|
|
||||||
```
|
|
||||||
|
|
||||||
并在系统环境变量 `PATH` 里添加上如下路径:
|
|
||||||
|
|
||||||
C:\msys64\usr\bin
|
|
||||||
|
|
||||||
最终,命令提示符(Command Prompt, cmd)里可找到如下命令:
|
|
||||||
|
|
||||||
```cmd
|
|
||||||
>make --version
|
|
||||||
GNU Make 4.2.1
|
|
||||||
```
|
|
||||||
|
|
||||||
## 获取代码
|
|
||||||
|
|
||||||
```cmd
|
|
||||||
>git clone https://github.com/slightech/MYNT-EYE-S-SDK.git
|
|
||||||
```
|
|
||||||
|
|
||||||
## 准备依赖
|
|
||||||
|
|
||||||
```cmd
|
|
||||||
>cd mynt-eye-s-sdk
|
|
||||||
>make init
|
|
||||||
Make init
|
|
||||||
Init deps
|
|
||||||
Install cmd: pacman -S
|
|
||||||
Install deps: git clang-format
|
|
||||||
pacman -S clang-format (not exists)
|
|
||||||
error: target not found: clang-format
|
|
||||||
pip install --upgrade autopep8 cpplint pylint requests
|
|
||||||
...
|
|
||||||
Init git hooks
|
|
||||||
ERROR: clang-format-diff is not installed!
|
|
||||||
Expect cmake version >= 3.0
|
|
||||||
cmake version 3.10.1
|
|
||||||
```
|
|
||||||
|
|
||||||
### [OpenCV](https://opencv.org/)
|
|
||||||
|
|
||||||
编译前,可在系统终端(Windows 命令提示符)里如下指定 OpenCV 路径,其为 `OpenCVConfig.cmake` 目录:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Linux, macOS
|
|
||||||
export OpenCV_DIR=~/opencv
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
set OpenCV_DIR=C:\opencv
|
|
||||||
```
|
|
||||||
|
|
||||||
## 编译代码
|
|
||||||
|
|
||||||
```cmd
|
|
||||||
>make install
|
|
||||||
```
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
# 日志 {#guide_log}
|
|
||||||
|
|
||||||
日志系统用的 `glog` ,通用配置在头文件 `logger.h` 里。
|
|
||||||
|
|
||||||
* 日志文件会存储在当前工作目录, `make cleanlog` 可以清理。
|
|
||||||
* 如果需要打开详细日志,请取消 `logger.h` 里注释的 `FLAGS_v = 2;` ,重新编译。
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
# OpenCV 依赖 {#guide_opencv}
|
|
||||||
|
|
||||||
SDK 提供了三层接口,其 OpenCV 依赖情况如下:
|
|
||||||
|
|
||||||
* `api`, 上层接口,依赖 OpenCV 。
|
|
||||||
* `device`,中间层接口,不依赖 OpenCV 。
|
|
||||||
* `uvc`,底层接口,不依赖 OpenCV 。
|
|
||||||
|
|
||||||
如果不想使用 OpenCV ,你可编辑 `<sdk>/cmake/Option.cmake` 里的 `WITH_API` 选项,设为 `OFF` 就能关闭 `api` 层代码编译:
|
|
||||||
|
|
||||||
```cmake
|
|
||||||
option(WITH_API "Build with API layer, need OpenCV" ON)
|
|
||||||
```
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
# ROS 封装 {#guide_ros}
|
|
||||||
|
|
||||||
ROS 封装实现在 ``<sdk>/wrappers/ros`` 目录。
|
|
||||||
|
|
||||||
## 依赖
|
|
||||||
|
|
||||||
* [ROS](http://www.ros.org/) 环境。
|
|
||||||
|
|
||||||
## 编译
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd <sdk>
|
|
||||||
make ros
|
|
||||||
```
|
|
||||||
|
|
||||||
## 运行
|
|
||||||
|
|
||||||
运行发布节点,
|
|
||||||
|
|
||||||
```bash
|
|
||||||
source wrappers/ros/devel/setup.bash
|
|
||||||
roslaunch mynt_eye_ros_wrapper mynteye.launch
|
|
||||||
```
|
|
||||||
|
|
||||||
运行发布节点,同时打开 RViz 预览图像,
|
|
||||||
|
|
||||||
```bash
|
|
||||||
source wrappers/ros/devel/setup.bash
|
|
||||||
roslaunch mynt_eye_ros_wrapper display.launch
|
|
||||||
```
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
# 样例 {#guide_samples}
|
|
||||||
|
|
||||||
样例在 `<sdk>/samples` 目录,其提供了不同接口层的使用范例。
|
|
||||||
|
|
||||||
## 依赖
|
|
||||||
|
|
||||||
* [OpenCV](https://opencv.org/),用于显示图像。
|
|
||||||
* 编译前,可在系统终端(Windows 命令提示符)里如下指定 OpenCV 路径,其为 `OpenCVConfig.cmake` 目录:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Linux, macOS
|
|
||||||
export OpenCV_DIR=~/opencv
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
set OpenCV_DIR=C:\opencv
|
|
||||||
```
|
|
||||||
|
|
||||||
## 编译
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make samples
|
|
||||||
```
|
|
||||||
|
|
||||||
## 运行
|
|
||||||
|
|
||||||
运行 `api` 层接口样例,显示图像并输出 IMU 。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./samples/_output/bin/api/camera_a
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
.\samples\_output\bin\api\camera_a.bat
|
|
||||||
```
|
|
||||||
|
|
||||||
运行 `device` 层接口样例,显示图像并输出 IMU 。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./samples/_output/bin/device/camera_d
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
.\samples\_output\bin\device\camera_d.bat
|
|
||||||
```
|
|
||||||
|
|
||||||
## 结语
|
|
||||||
|
|
||||||
更多样例的说明,请见 `samples/README.md` 。
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
# 工具 {#guide_tools}
|
|
||||||
|
|
||||||
工具在 `<sdk>/tools` 目录,其提供一些有用的脚本和程序。
|
|
||||||
|
|
||||||
## 依赖
|
|
||||||
|
|
||||||
* [OpenCV](https://opencv.org/),部分工具需要。
|
|
||||||
* 编译前,可在系统终端(Windows 命令提示符)里如下指定 OpenCV 路径,其为 `OpenCVConfig.cmake` 目录:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Linux, macOS
|
|
||||||
export OpenCV_DIR=~/opencv
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
set OpenCV_DIR=C:\opencv
|
|
||||||
```
|
|
||||||
|
|
||||||
* Python 第三方库,脚本需要。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd tools/
|
|
||||||
sudo pip install -r requirements.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
## 编译
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make tools
|
|
||||||
```
|
|
||||||
|
|
||||||
## 录制数据集
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./tools/_output/bin/dataset/record
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
.\tools\_output\bin\dataset\record.bat
|
|
||||||
```
|
|
||||||
|
|
||||||
默认录制进 `dataset` 目录,加参数可指定该目录。
|
|
||||||
|
|
||||||
## 分析数据集
|
|
||||||
|
|
||||||
分析 IMU 数据,
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python tools/analytics/imu_analytics.py -i dataset -c tools/config/mynteye/mynteye_config.yaml \
|
|
||||||
-al=-1.2,1.2 -gl= -gdu=d -gsu=d -kl=
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
\latexonly
|
|
||||||
\includegraphics[width=0.6\textwidth,keepaspectratio]{imu_analytics.png}
|
|
||||||
\endlatexonly
|
|
||||||
|
|
||||||
分析图像 & IMU 时间戳,
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python tools/analytics/stamp_analytics.py -i dataset -c tools/config/mynteye/mynteye_config.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
\latexonly
|
|
||||||
\includegraphics[width=0.6\textwidth,keepaspectratio]{stamp_analytics.png}
|
|
||||||
\endlatexonly
|
|
||||||
|
|
||||||
> 如果用 ROS ,分析脚本也支持 ROS Bag 格式。
|
|
||||||
|
|
||||||
## 结语
|
|
||||||
|
|
||||||
设备信息读写、校验码等更多工具的说明,请见 `tools/README.md` 。
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
# SDK 指导 {#guides}
|
|
||||||
|
|
||||||
* @subpage guide_build_linux
|
|
||||||
* @subpage guide_build_win
|
|
||||||
* @subpage guide_samples
|
|
||||||
* @subpage guide_tools
|
|
||||||
* @subpage guide_log
|
|
||||||
* @subpage guide_opencv
|
|
||||||
* @subpage guide_ros
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# MYNT EYE S SDK {#mainpage}
|
|
||||||
|
|
||||||
* <a class="el" href="annotated.html">API 类</a>
|
|
||||||
* <a class="el" href="modules.html">API 模块</a>
|
|
||||||
* \link enumerations 枚举类型\endlink
|
|
||||||
* \link datatypes 数据类型\endlink
|
|
||||||
* \link utils 工具函数\endlink
|
|
||||||
* \link calibration 内参与外参\endlink
|
|
||||||
* <span style="font-weight:bold">设备说明</span>
|
|
||||||
* @subpage specs_data
|
|
||||||
* @subpage specs_ctrl
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
# 控制 API 说明 {#spec_control_api}
|
|
||||||
|
|
||||||
控制有两种实现方式,一是通过 UVC 标准协议,二是通过 UVC 拓展通道自定义协议。
|
|
||||||
|
|
||||||
## 标准协议
|
|
||||||
|
|
||||||
| 名称 | 字段 | 字节数 | 默认值 | 最小值 | 最大值 | 是否储存 | Flash 地址 | 说明 |
|
|
||||||
| :----- | :----- | :-------- | :-------- | :-------- | :-------- | :----------- | :----------- | :----- |
|
|
||||||
| 亮度 | brightness | 2 | 192 | 0 | 255 | √ | 0x14 | 关闭自动曝光,手动设定的参数 |
|
|
||||||
|
|
||||||
> UVC 标准协议实现的控制,有现成的 API 进行 Get & Set ,包括 Min, Max, Default 。
|
|
||||||
|
|
||||||
## 自定义协议
|
|
||||||
|
|
||||||
| 名称 | 字段 | 字节数 | 默认值 | 最小值 | 最大值 | 是否储存 | Flash 地址 | 所属通道 | 通道地址 | 说明 |
|
|
||||||
| :----- | :----- | :-------- | :-------- | :-------- | :-------- | :----------- | :----------- | :----------- | :----------- | :----- |
|
|
||||||
| 曝光模式 | exposure_mode | 1 | 0 | 0 | 1 | √ | 0x0F | XU_CAM_CTRL | 0x0100 | 0:开启自动曝光; 1:关闭 |
|
|
||||||
| 最大增益 | max_gain | 2 | 8 | 0 | 255 | √ | 0x1D | XU_CAM_CTRL | 0x0100 | 开始自动曝光,可设定的阈值 |
|
|
||||||
| 最大曝光时间 | max_exposure_time | 2 | 333 | 0 | 1000 | √ | 0x1B | XU_CAM_CTRL | 0x0100 | 开始自动曝光,可设定的阈值 |
|
|
||||||
| 期望亮度 | desired_brightness | 2 | 122 | 1 | 255 | √ | 0x19 | XU_CAM_CTRL | 0x0100 | |
|
|
||||||
| 擦除芯片 | erase_chip | | - | - | - | × | - | XU_HALF_DUPLEX | 0x0200 | |
|
|
||||||
| 最小曝光时间 | min_exposure_time | 2 | 0 | 0 | 1000 | √ | - | XU_CAM_CTRL | 0x0100 | 开始自动曝光,可设定的阈值 |
|
|
||||||
| 加速度计量程 | accelerometer_range | 2 | 12 | 6 | 48 | √ | - | XU_CAM_CTRL | 0x0100 | |
|
|
||||||
| 陀螺仪量程 | gyroscope_range | 2 | 1000 | 250 | 4000 | √ | - | XU_CAM_CTRL | 0x0100 | |
|
|
||||||
| 加速度计低通滤波 | accelerometer_low_pass_filter | 2 | 2 | 0 | 2 | √ | - | XU_CAM_CTRL | 0x0100 | |
|
|
||||||
| 陀螺仪低通滤波 | gyroscope__low_pass_filter | 2 | 64 | 23 | 64 | √ | - | XU_CAM_CTRL | 0x0100 | |
|
|
||||||
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
# 拓展通道说明 {#spec_control_channel}
|
|
||||||
|
|
||||||
| 名称 | 字段 | 地址 | 带宽 | 说明 |
|
|
||||||
| :----- | :----- | :----- | :----- | :----- |
|
|
||||||
| 相机控制通道 | XU_CAM_CTRL_CHANNEL | 1 | 3 | |
|
|
||||||
| 半双工通道 | XU_HALF_DUPLEX_CHANNEL | 2 | 20 | |
|
|
||||||
| IMU 请求通道 | XU_IMUDATA_WRITE_CHANNEL | 3 | 5 | |
|
|
||||||
| IMU 响应通道 | XU_IMUDATA_READ_CHANNEL | 4 | 2000 | |
|
|
||||||
| 文件通道 | XU_FILE_CHANNEL | 5 | 2000 | |
|
|
||||||
|
|
||||||
## 相机控制通道
|
|
||||||
|
|
||||||
相机控制通道是那些需要 Get & Set & Query 的控制通道,其中 Query 细分为 Min, Max, Default 。
|
|
||||||
|
|
||||||
## 半双工通道
|
|
||||||
|
|
||||||
半双工通道是那些仅需 Set 的控制通道,如请求零漂矫正。
|
|
||||||
|
|
||||||
## IMU 通道
|
|
||||||
|
|
||||||
用来请求和响应 IMU 数据的通道,可参见 @ref spec_imu_data 。
|
|
||||||
|
|
||||||
## 文件通道
|
|
||||||
|
|
||||||
用来读写硬件信息、图像参数、 IMU 参数的通道。
|
|
||||||
|
|
||||||
| Name | Header | Size | File | Checksum |
|
|
||||||
| :--- | :----- | :--- | :--- | :-------- |
|
|
||||||
| 字节数 | 1 | 2 | - | 1 |
|
|
||||||
| 类型 | uint8_t | uint16_t | - | uint8_t |
|
|
||||||
| 描述 | 标识 | 文件内容大小 | 文件内容 | 校验码(文件内容所有字节异或) |
|
|
||||||
|
|
||||||
| Header Bit Subscript | Description |
|
|
||||||
| :------------------- | :---------- |
|
|
||||||
| 0 | 硬件信息 |
|
|
||||||
| 1 | 图像参数 |
|
|
||||||
| 2 | IMU 参数 |
|
|
||||||
| 3~6 | 未定义 |
|
|
||||||
| 7 | 0: Get; 1: Set |
|
|
||||||
|
|
||||||
### 文件内容包
|
|
||||||
|
|
||||||
| Name | ID | Size | Content |
|
|
||||||
| :--- | :- | :--- | :------ |
|
|
||||||
| 字节数 | 1 | 2 | - |
|
|
||||||
| 类型 | uint8_t | uint16_t | - |
|
|
||||||
| 描述 | 内容 ID | 内容大小 | 内容 |
|
|
||||||
|
|
||||||
| File | ID | Max Size |
|
|
||||||
| :--- | :- | :------- |
|
|
||||||
| 硬件信息 | 1 | 250 |
|
|
||||||
| 图像参数 | 2 | 404 |
|
|
||||||
| IMU 参数 | 4 | 500 |
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
# 硬件信息说明 {#spec_hardware_info}
|
|
||||||
|
|
||||||
| 名称 | 字段 | 固定值 | 描述符获取 | 拓展通道获取 | 字节数 | 说明 |
|
|
||||||
| :----- | :----- | :-------- | :-------------- | :----------------- | :-------- | :----- |
|
|
||||||
| VID | vid | 0x04B4 | √ | × | 2 | |
|
|
||||||
| PID | pid | 0x00F9 | √ | × | 2 | |
|
|
||||||
| 设备名称 | name | MYNT-EYE-? | √ | √ Get | 16 | MYNT-EYE-S1000 |
|
|
||||||
| 序列号 | serial_number | - | √ | √ Get | 16 | |
|
|
||||||
| 固件版本 | firmware_version | - | √ | √ Get | 2 | major,minor |
|
|
||||||
| 硬件版本 | hardware_version | - | × | √ Get | 3 | major,minor,flag |
|
|
||||||
| 协议版本 | spec_version | - | × | √ Get | 2 | major,minor |
|
|
||||||
| 镜头类型 | lens_type | - | × | √ Get/Set | 4 | vendor(2),product(2) ,未 Set 默认 0 |
|
|
||||||
| IMU 类型 | imu_type | - | × | √ Get/Set | 4 | vendor(2),product(2) ,未 Set 默认 0 |
|
|
||||||
| 基线长度 | nominal_baseline | - | × | √ Get/Set | 2 | 单位 mm ,未 set 默认 0 |
|
|
||||||
|
|
||||||
* 描述符获取:指通用 USB 设备信息,可用工具查看。
|
|
||||||
* 拓展通道获取:指通过拓展通道(UVC Extension Unit)问硬件获取到的信息,需要读取。
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
# 图像数据说明 {#spec_image_data}
|
|
||||||
|
|
||||||
| 名称 | 字段 | 单位 | 字节数 | 说明 |
|
|
||||||
| :----- | :----- | :----- | :-------- | :----- |
|
|
||||||
| 帧 ID | frame_id | - | 2 | uint16_t; [0,65535] |
|
|
||||||
| 时间戳 | timestamp | 1 us | 8 | uint64_t |
|
|
||||||
| 曝光时间 | exposure_time | 1 us | 2 | uint16_t |
|
|
||||||
|
|
||||||
> 图像数据传输方式:倒序排在图像尾部。
|
|
||||||
|
|
||||||
## 图像数据包
|
|
||||||
|
|
||||||
| Name | Header | Size | FrameID | Timestamp | ExposureTime | Checksum |
|
|
||||||
| :--- | :----- | :--- | :------ | :-------- | :----------- | :------- |
|
|
||||||
| 字节数 | 1 | 1 | 2 | 8 | 2 | 1 |
|
|
||||||
| 类型 | uint8_t | uint8_t | uint16_t | uint64_t | uint16_t | uint8_t |
|
|
||||||
| 描述 | 0x3B | 0x10 (数据内容大小) | 帧 ID | 时间戳 | 曝光时间 | 校验码(数据内容所有字节异或) |
|
|
||||||
|
|
||||||
* 数据包校验不过,会丢弃该帧。
|
|
||||||
* 时间的单位精度为: 1 us 。
|
|
||||||
* 时间累计是从上电时从开始,而不是从打开时开始。
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
# 图像参数说明 {#spec_image_params}
|
|
||||||
|
|
||||||
## 图像内参
|
|
||||||
|
|
||||||
| 名称 | 字段 | 单位 | 字节数 | 说明 |
|
|
||||||
| :----- | :----- | :----- | :-------- | :----- |
|
|
||||||
| 宽度 | width | px | 2 | uint16_t; [0,65535] |
|
|
||||||
| 高度 | height | px | 2 | uint16_t; [0,65535] |
|
|
||||||
| 焦距 | fx | - | 8 | double |
|
|
||||||
| ^ | fy | - | 8 | double |
|
|
||||||
| 图像中心 | cx | - | 8 | double |
|
|
||||||
| ^ | cy | - | 8 | double |
|
|
||||||
| 畸变模型 | model | - | 1 | uint8_t; pinhole,... |
|
|
||||||
| 畸变参数 | coeffs[5] | - | 40 | double; k1,k2,p1,p2,k3 |
|
|
||||||
|
|
||||||
> 图像分辨率不同,内参不同。多分辨率的话,需有多个内参。
|
|
||||||
|
|
||||||
## 图像外参
|
|
||||||
|
|
||||||
Left Image 到 Right Image 的变换矩阵。
|
|
||||||
|
|
||||||
| 名称 | 字段 | 单位 | 字节数 | 说明 |
|
|
||||||
| :----- | :----- | :----- | :-------- | :----- |
|
|
||||||
| 旋转矩阵 | rotation[3][3] | - | 72 | double |
|
|
||||||
| 平移矩阵 | translation[3] | - | 24 | double |
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
# IMU 数据说明 {#spec_imu_data}
|
|
||||||
|
|
||||||
## IMU 请求数据包
|
|
||||||
|
|
||||||
| Name | Header | Serial Number |
|
|
||||||
| :--- | :----- | :------------ |
|
|
||||||
| 字节数 | 1 | 4 |
|
|
||||||
| 类型 | uint8_t | uint32_t |
|
|
||||||
| 描述 | 0x5A | 首次请求写 0 ,不然写上次响应数据包最后一个 IMU 包的序列号 |
|
|
||||||
|
|
||||||
## IMU 响应数据包
|
|
||||||
|
|
||||||
IMU 响应数据包里会包含1个 IMU 包,而每个 IMU 包又带有多个 IMU 段。
|
|
||||||
|
|
||||||
| Name | Header | State | Size | IMU Packets | Checksum |
|
|
||||||
| :--- | :----- | :---- | :--- | :---------- | :------- |
|
|
||||||
| 字节数 | 1 | 1 | 2 | ... | 1 |
|
|
||||||
| 类型 | uint8_t | uint8_t | uint16_t | - | uint8_t |
|
|
||||||
| 描述 | 0x5B | 正常状态为 0 ,否则错误 | 数据内容大小 | 所包含的 IMU 包 | 校验码(数据内容所有字节异或) |
|
|
||||||
|
|
||||||
### IMU 包
|
|
||||||
|
|
||||||
IMU 包/小包,是一组 IMU 数据。
|
|
||||||
|
|
||||||
| Name | Count | IMU Datas |
|
|
||||||
| :--- | :-----| :-------- |
|
|
||||||
| 字节数 | 2 | ... |
|
|
||||||
| 类型 | uint16_t | - |
|
|
||||||
| 描述 | IMU 段数量 | 所包含的 IMU 段 |
|
|
||||||
|
|
||||||
### IMU 段
|
|
||||||
|
|
||||||
| Name | Serial Number | Timestamp | flag | Temperature | Accelerometer or Gyroscope |
|
|
||||||
| :--- | :------------ | :-------- | :----| :----------- | :------------------------- |
|
|
||||||
| 字节数 | 4 | 8 | 1 | 2 | 6 |
|
|
||||||
| 类型 | uint32_t | uint64_t | int8_t | int16_t | int16_t * 3 |
|
|
||||||
| Description | 序列号 | 时间戳 | 指定传感器类型 | IMU 的温度 | 陀螺仪或陀螺仪 x y z 三轴的值 |
|
|
||||||
|
|
||||||
* 加速度计和陀螺仪的计量值换算成物理值公式: **real = data * range / 0x10000** 。
|
|
||||||
* 加速度计量程默认值为 **12 g** ,陀螺仪量程默认值为 **1000 deg/s** 。
|
|
||||||
* 温度计量值换算成物理值公式: **real = data / ratio + offset** 。
|
|
||||||
* ``ratio`` 默认值为 **326.8** , ``offset`` 默认值为 **25℃** 。
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# IMU 参数说明 {#spec_imu_params}
|
|
||||||
|
|
||||||
## IMU 内参
|
|
||||||
|
|
||||||
| 名称 | 字段 | 单位 | 字节数 | 说明 |
|
|
||||||
| :----- | :----- | :----- | :-------- | :----- |
|
|
||||||
| 比例因子 | acc_scale[3][3] | - | 72 | double |
|
|
||||||
| ^ | gyro_scale[3][3] | - | 72 | double |
|
|
||||||
| 零漂 | acc_drift[3] | - | 24 | double |
|
|
||||||
| ^ | gyro_drift[3] | - | 24 | double |
|
|
||||||
| 噪声密度 | acc_noise[3] | - | 24 | double |
|
|
||||||
| ^ | gyro_noise[3] | - | 24 | double |
|
|
||||||
| 随机游走 | acc_bias[3] | - | 24 | double |
|
|
||||||
| ^ | gyro_bias[3] | - | 24 | double |
|
|
||||||
|
|
||||||
## IMU 外参
|
|
||||||
|
|
||||||
Left Image 到 IMU 的变换矩阵。
|
|
||||||
|
|
||||||
| 名称 | 字段 | 单位 | 字节数 | 说明 |
|
|
||||||
| :----- | :----- | :----- | :-------- | :----- |
|
|
||||||
| 旋转矩阵 | rotation[3][3] | - | 72 | double |
|
|
||||||
| 平移矩阵 | translation[3] | - | 24 | double |
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
# 设备控制说明 {#specs_ctrl}
|
|
||||||
|
|
||||||
* @subpage spec_control_api
|
|
||||||
* @subpage spec_control_channel
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
# 设备数据说明 {#specs_data}
|
|
||||||
|
|
||||||
* @subpage spec_hardware_info
|
|
||||||
* @subpage spec_image_params
|
|
||||||
* @subpage spec_imu_params
|
|
||||||
* @subpage spec_image_data
|
|
||||||
* @subpage spec_imu_data
|
|
||||||
@@ -38,27 +38,27 @@ PROJECT_NAME = "MYNT EYE S SDK"
|
|||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
# control system is used.
|
# control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = 2.3.1
|
PROJECT_NUMBER = 2.3.5
|
||||||
|
|
||||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||||
# for a project that appears at the top of each page and should give viewer a
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
# quick idea about the purpose of the project. Keep the description short.
|
# quick idea about the purpose of the project. Keep the description short.
|
||||||
|
|
||||||
PROJECT_BRIEF = http://www.myntai.com/mynteye/standard
|
PROJECT_BRIEF = https://www.myntai.com/mynteye/standard
|
||||||
|
|
||||||
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
|
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
|
||||||
# in the documentation. The maximum height of the logo should not exceed 55
|
# in the documentation. The maximum height of the logo should not exceed 55
|
||||||
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
|
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
|
||||||
# the logo to the output directory.
|
# the logo to the output directory.
|
||||||
|
|
||||||
PROJECT_LOGO = ../static/images/icon.png
|
PROJECT_LOGO =
|
||||||
|
|
||||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
|
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
|
||||||
# into which the generated documentation will be written. If a relative path is
|
# into which the generated documentation will be written. If a relative path is
|
||||||
# entered, it will be relative to the location where doxygen was started. If
|
# entered, it will be relative to the location where doxygen was started. If
|
||||||
# left blank the current directory will be used.
|
# left blank the current directory will be used.
|
||||||
|
|
||||||
OUTPUT_DIRECTORY = ../_output/en
|
OUTPUT_DIRECTORY = _doxygen
|
||||||
|
|
||||||
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
|
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
|
||||||
# directories (in 2 levels) under the output directory of each output format and
|
# directories (in 2 levels) under the output directory of each output format and
|
||||||
@@ -791,17 +791,7 @@ WARN_LOGFILE =
|
|||||||
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
|
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
|
||||||
# Note: If this tag is empty the current directory is searched.
|
# Note: If this tag is empty the current directory is searched.
|
||||||
|
|
||||||
INPUT = mainpage.md \
|
INPUT = ../include/mynteye
|
||||||
specs_data.md \
|
|
||||||
spec_hardware_info.md \
|
|
||||||
spec_image_params.md \
|
|
||||||
spec_imu_params.md \
|
|
||||||
spec_image_data.md \
|
|
||||||
spec_imu_data.md \
|
|
||||||
specs_ctrl.md \
|
|
||||||
spec_control_api.md \
|
|
||||||
spec_control_channel.md \
|
|
||||||
/usr/local/include/mynteye
|
|
||||||
|
|
||||||
# This tag can be used to specify the character encoding of the source files
|
# This tag can be used to specify the character encoding of the source files
|
||||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||||
@@ -938,7 +928,7 @@ EXAMPLE_RECURSIVE = NO
|
|||||||
# that contain images that are to be included in the documentation (see the
|
# that contain images that are to be included in the documentation (see the
|
||||||
# \image command).
|
# \image command).
|
||||||
|
|
||||||
IMAGE_PATH = ../static/images
|
IMAGE_PATH =
|
||||||
|
|
||||||
# The INPUT_FILTER tag can be used to specify a program that doxygen should
|
# The INPUT_FILTER tag can be used to specify a program that doxygen should
|
||||||
# invoke to filter for each input file. Doxygen will invoke the filter program
|
# invoke to filter for each input file. Doxygen will invoke the filter program
|
||||||
@@ -1115,7 +1105,7 @@ IGNORE_PREFIX =
|
|||||||
# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
|
# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
|
||||||
# The default value is: YES.
|
# The default value is: YES.
|
||||||
|
|
||||||
GENERATE_HTML = YES
|
GENERATE_HTML = NO
|
||||||
|
|
||||||
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
|
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
|
||||||
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
|
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
|
||||||
@@ -1185,7 +1175,7 @@ HTML_STYLESHEET =
|
|||||||
# list). For an example see the documentation.
|
# list). For an example see the documentation.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
HTML_EXTRA_STYLESHEET = ../static/custom.css
|
HTML_EXTRA_STYLESHEET =
|
||||||
|
|
||||||
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
||||||
# other source files which should be copied to the HTML output directory. Note
|
# other source files which should be copied to the HTML output directory. Note
|
||||||
@@ -1667,7 +1657,7 @@ EXTRA_SEARCH_MAPPINGS =
|
|||||||
# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
|
# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
|
||||||
# The default value is: YES.
|
# The default value is: YES.
|
||||||
|
|
||||||
GENERATE_LATEX = YES
|
GENERATE_LATEX = NO
|
||||||
|
|
||||||
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
|
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
|
||||||
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
|
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
|
||||||
@@ -1947,7 +1937,7 @@ MAN_LINKS = NO
|
|||||||
# captures the structure of the code including all documentation.
|
# captures the structure of the code including all documentation.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
GENERATE_XML = NO
|
GENERATE_XML = YES
|
||||||
|
|
||||||
# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
|
# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
|
||||||
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
|
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
|
||||||
@@ -2102,7 +2092,8 @@ INCLUDE_FILE_PATTERNS =
|
|||||||
|
|
||||||
PREDEFINED = DOXYGEN_WORKING \
|
PREDEFINED = DOXYGEN_WORKING \
|
||||||
"MYNTEYE_BEGIN_NAMESPACE=namespace mynteye {" \
|
"MYNTEYE_BEGIN_NAMESPACE=namespace mynteye {" \
|
||||||
"MYNTEYE_END_NAMESPACE=}"
|
"MYNTEYE_END_NAMESPACE=}" \
|
||||||
|
"MYNTEYE_API=" "LAST="
|
||||||
|
|
||||||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
|
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
|
||||||
# tag can be used to specify a list of macro names that should be expanded. The
|
# tag can be used to specify a list of macro names that should be expanded. The
|
||||||
19
docs/Makefile
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Minimal makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line.
|
||||||
|
SPHINXOPTS =
|
||||||
|
SPHINXBUILD = sphinx-build
|
||||||
|
SOURCEDIR = .
|
||||||
|
BUILDDIR = _build
|
||||||
|
|
||||||
|
# Put it first so that "make" without argument is like "make help".
|
||||||
|
help:
|
||||||
|
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
|
|
||||||
|
.PHONY: help Makefile
|
||||||
|
|
||||||
|
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||||
|
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||||
|
%: Makefile
|
||||||
|
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
23
docs/api/api.rst
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
API
|
||||||
|
===
|
||||||
|
|
||||||
|
API
|
||||||
|
---
|
||||||
|
|
||||||
|
.. doxygenclass:: mynteye::API
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
api::StreamData
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::api::StreamData
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
api::MotionData
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::api::MotionData
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
12
docs/api/contents.rst
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
.. _api:
|
||||||
|
|
||||||
|
API DOC
|
||||||
|
=========
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
api
|
||||||
|
device
|
||||||
|
enums
|
||||||
|
types
|
||||||
|
utils
|
||||||
30
docs/api/device.rst
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
Device
|
||||||
|
======
|
||||||
|
|
||||||
|
Device
|
||||||
|
------
|
||||||
|
|
||||||
|
.. doxygenclass:: mynteye::Device
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
device::Frame
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. doxygenclass:: mynteye::device::Frame
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
device::StreamData
|
||||||
|
------------------
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::device::StreamData
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
device::MotionData
|
||||||
|
------------------
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::device::MotionData
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
67
docs/api/enums.rst
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
Enums
|
||||||
|
=====
|
||||||
|
|
||||||
|
..
|
||||||
|
.. doxygengroup:: enumerations
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
Model
|
||||||
|
-----
|
||||||
|
|
||||||
|
.. doxygenenum:: mynteye::Model
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
Stream
|
||||||
|
------
|
||||||
|
|
||||||
|
.. doxygenenum:: mynteye::Stream
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
|
||||||
|
Capabilities
|
||||||
|
------------
|
||||||
|
|
||||||
|
.. doxygenenum:: mynteye::Capabilities
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
Info
|
||||||
|
----
|
||||||
|
|
||||||
|
.. doxygenenum:: mynteye::Info
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
Option
|
||||||
|
------
|
||||||
|
|
||||||
|
.. doxygenenum:: mynteye::Option
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
Source
|
||||||
|
------
|
||||||
|
|
||||||
|
.. doxygenenum:: mynteye::Source
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
AddOns
|
||||||
|
------
|
||||||
|
|
||||||
|
.. doxygenenum:: mynteye::AddOns
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
Format
|
||||||
|
------
|
||||||
|
|
||||||
|
.. doxygenenum:: mynteye::Format
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
CalibrationModel
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. doxygenenum:: mynteye::CalibrationModel
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
DisparityComputingMethod
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
.. doxygenenum:: mynteye::DisparityComputingMethod
|
||||||
|
:project: mynteyes
|
||||||
75
docs/api/types.rst
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
Types
|
||||||
|
=====
|
||||||
|
|
||||||
|
OptionInfo
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::OptionInfo
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
Resolution
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::Resolution
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
StreamRequest
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::StreamRequest
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
Intrinsics
|
||||||
|
----------
|
||||||
|
|
||||||
|
IntrinsicsPinhole
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::IntrinsicsPinhole
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
IntrinsicsEquidistant
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::IntrinsicsEquidistant
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
ImuIntrinsics
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::ImuIntrinsics
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
MotionIntrinsics
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::MotionIntrinsics
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
Extrinsics
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::Extrinsics
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
ImgData
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::ImgData
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
|
|
||||||
|
ImuData
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. doxygenstruct:: mynteye::ImuData
|
||||||
|
:project: mynteyes
|
||||||
|
:members:
|
||||||
32
docs/api/utils.rst
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
Utils
|
||||||
|
=====
|
||||||
|
|
||||||
|
select
|
||||||
|
------
|
||||||
|
|
||||||
|
.. doxygenfunction:: select
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
select_request
|
||||||
|
--------------
|
||||||
|
|
||||||
|
.. doxygenfunction:: select_request
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
get_real_exposure_time
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
.. doxygenfunction:: get_real_exposure_time
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
get_sdk_root_dir
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. doxygenfunction:: get_sdk_root_dir
|
||||||
|
:project: mynteyes
|
||||||
|
|
||||||
|
get_sdk_install_dir
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. doxygenfunction:: get_sdk_install_dir
|
||||||
|
:project: mynteyes
|
||||||
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
194
docs/conf.py
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Configuration file for the Sphinx documentation builder.
|
||||||
|
#
|
||||||
|
# This file does only contain a selection of the most common options. For a
|
||||||
|
# full list see the documentation:
|
||||||
|
# http://www.sphinx-doc.org/en/master/config
|
||||||
|
|
||||||
|
# -- Path setup --------------------------------------------------------------
|
||||||
|
|
||||||
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
|
#
|
||||||
|
# import os
|
||||||
|
# import sys
|
||||||
|
# sys.path.insert(0, os.path.abspath('.'))
|
||||||
|
|
||||||
|
|
||||||
|
# -- Project information -----------------------------------------------------
|
||||||
|
|
||||||
|
project = 'MYNT® EYE S SDK'
|
||||||
|
copyright = '2018, MYNTAI'
|
||||||
|
author = 'MYNTAI'
|
||||||
|
|
||||||
|
# The short X.Y version
|
||||||
|
version = '2.3.5'
|
||||||
|
# The full version, including alpha/beta/rc tags
|
||||||
|
release = version
|
||||||
|
|
||||||
|
|
||||||
|
# -- General configuration ---------------------------------------------------
|
||||||
|
|
||||||
|
# If your documentation needs a minimal Sphinx version, state it here.
|
||||||
|
#
|
||||||
|
# needs_sphinx = '1.0'
|
||||||
|
|
||||||
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
|
# ones.
|
||||||
|
extensions = [
|
||||||
|
'breathe',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
templates_path = ['_templates']
|
||||||
|
|
||||||
|
# The suffix(es) of source filenames.
|
||||||
|
# You can specify multiple suffix as a list of string:
|
||||||
|
#
|
||||||
|
# source_suffix = ['.rst', '.md']
|
||||||
|
source_suffix = '.rst'
|
||||||
|
|
||||||
|
# The master toctree document.
|
||||||
|
master_doc = 'index'
|
||||||
|
|
||||||
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
|
# for a list of supported languages.
|
||||||
|
#
|
||||||
|
# This is also used if you do content translation via gettext catalogs.
|
||||||
|
# Usually you set "language" from the command line for these cases.
|
||||||
|
language = 'en'
|
||||||
|
|
||||||
|
# List of patterns, relative to source directory, that match files and
|
||||||
|
# directories to ignore when looking for source files.
|
||||||
|
# This pattern also affects html_static_path and html_extra_path.
|
||||||
|
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
||||||
|
|
||||||
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
|
pygments_style = None
|
||||||
|
|
||||||
|
|
||||||
|
# on_rtd is whether we are on readthedocs.org
|
||||||
|
import os
|
||||||
|
on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
subprocess.call('doxygen', shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTML output -------------------------------------------------
|
||||||
|
|
||||||
|
if not on_rtd: # only import and set the theme if we're building docs locally
|
||||||
|
import sphinx_rtd_theme
|
||||||
|
|
||||||
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
|
# a list of builtin themes.
|
||||||
|
#
|
||||||
|
# html_theme = 'alabaster'
|
||||||
|
html_theme = 'sphinx_rtd_theme'
|
||||||
|
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
||||||
|
|
||||||
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
|
# further. For a list of options available for each theme, see the
|
||||||
|
# documentation.
|
||||||
|
#
|
||||||
|
# html_theme_options = {}
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
# html_static_path = ['_static']
|
||||||
|
|
||||||
|
# Custom sidebar templates, must be a dictionary that maps document names
|
||||||
|
# to template names.
|
||||||
|
#
|
||||||
|
# The default sidebars (for documents that don't match any pattern) are
|
||||||
|
# defined by theme itself. Builtin themes are using these templates by
|
||||||
|
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
|
||||||
|
# 'searchbox.html']``.
|
||||||
|
#
|
||||||
|
# html_sidebars = {}
|
||||||
|
|
||||||
|
# otherwise, readthedocs.org uses their theme by default, so no need to specify it
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTMLHelp output ---------------------------------------------
|
||||||
|
|
||||||
|
# Output file base name for HTML help builder.
|
||||||
|
htmlhelp_basename = 'MYNTEYESSDKdoc'
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for LaTeX output ------------------------------------------------
|
||||||
|
|
||||||
|
latex_elements = {
|
||||||
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
|
#
|
||||||
|
# 'papersize': 'letterpaper',
|
||||||
|
|
||||||
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
|
#
|
||||||
|
# 'pointsize': '10pt',
|
||||||
|
|
||||||
|
# Additional stuff for the LaTeX preamble.
|
||||||
|
#
|
||||||
|
# 'preamble': '',
|
||||||
|
|
||||||
|
# Latex figure (float) alignment
|
||||||
|
#
|
||||||
|
# 'figure_align': 'htbp',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
|
# (source start file, target name, title,
|
||||||
|
# author, documentclass [howto, manual, or own class]).
|
||||||
|
latex_documents = [
|
||||||
|
(master_doc, 'MYNTEYESSDK.tex', 'MYNT® EYE S SDK Documentation',
|
||||||
|
'MYNTAI', 'manual'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for manual page output ------------------------------------------
|
||||||
|
|
||||||
|
# One entry per manual page. List of tuples
|
||||||
|
# (source start file, name, description, authors, manual section).
|
||||||
|
man_pages = [
|
||||||
|
(master_doc, 'mynteyessdk', 'MYNT® EYE S SDK Documentation',
|
||||||
|
[author], 1)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for Texinfo output ----------------------------------------------
|
||||||
|
|
||||||
|
# Grouping the document tree into Texinfo files. List of tuples
|
||||||
|
# (source start file, target name, title, author,
|
||||||
|
# dir menu entry, description, category)
|
||||||
|
texinfo_documents = [
|
||||||
|
(master_doc, 'MYNTEYESSDK', 'MYNT® EYE S SDK Documentation',
|
||||||
|
author, 'MYNTEYESSDK', 'One line description of project.',
|
||||||
|
'Miscellaneous'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for Epub output -------------------------------------------------
|
||||||
|
|
||||||
|
# Bibliographic Dublin Core info.
|
||||||
|
epub_title = project
|
||||||
|
|
||||||
|
# The unique identifier of the text. This can be a ISBN number
|
||||||
|
# or the project homepage.
|
||||||
|
#
|
||||||
|
# epub_identifier = ''
|
||||||
|
|
||||||
|
# A unique identification for the text.
|
||||||
|
#
|
||||||
|
# epub_uid = ''
|
||||||
|
|
||||||
|
# A list of files that should not be packed into the epub file.
|
||||||
|
epub_exclude_files = ['search.html']
|
||||||
|
|
||||||
|
|
||||||
|
# -- Extension configuration -------------------------------------------------
|
||||||
|
|
||||||
|
breathe_projects = { 'mynteyes': '_doxygen/xml' }
|
||||||
7
docs/files/libmynteye.conf
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# libmynteye configuration
|
||||||
|
#
|
||||||
|
# 1) Copy this file to: /etc/ld.so.conf.d/libmynteye.conf
|
||||||
|
# 2) Run this cmd in Terminal: sudo /sbin/ldconfig
|
||||||
|
|
||||||
|
/usr/local/cuda/lib64
|
||||||
|
$HOME/opencv-3.4.1/lib
|
||||||
BIN
docs/images/boardupdate.png
Normal file
|
After Width: | Height: | Size: 295 KiB |
BIN
docs/images/firmware_update.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/images/firmware_update_cypressUSB.png
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
docs/images/firmware_update_dir.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
docs/images/firmware_update_driver.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
docs/images/firmware_update_driver_install.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
docs/images/firmware_update_option.png
Normal file
|
After Width: | Height: | Size: 470 KiB |
BIN
docs/images/firmware_update_select.png
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
docs/images/firmware_update_success.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
docs/images/firmware_update_warning.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
docs/images/firmware_update_westbridge.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
docs/images/imu_analytics.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
docs/images/ir.png
Normal file
|
After Width: | Height: | Size: 403 KiB |
BIN
docs/images/mynteye_avatar_imu_coord.jpg
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
docs/images/mynteye_avatar_surface_zh-Hans.jpg
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
docs/images/mynteye_imu_coord.jpg
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
docs/images/mynteye_surface_zh-Hans.jpg
Normal file
|
After Width: | Height: | Size: 193 KiB |
BIN
docs/images/stamp_analytics.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
docs/images/stmsuccess.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/images/stmupdate.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/images/vs_cmd.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/images/vs_cmd_menu.png
Normal file
|
After Width: | Height: | Size: 142 KiB |
BIN
docs/images/vs_cmd_test.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
30
docs/index.rst
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
.. MYNT® EYE S SDK documentation master file, created by
|
||||||
|
sphinx-quickstart on Mon Mar 11 08:59:35 2019.
|
||||||
|
You can adapt this file completely to your liking, but it should at least
|
||||||
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
|
MYNT® EYE S SDK
|
||||||
|
===============
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:titlesonly:
|
||||||
|
|
||||||
|
src/mynteye/contents
|
||||||
|
src/sdk/contents
|
||||||
|
src/firmware/contents
|
||||||
|
src/data/contents
|
||||||
|
src/control/contents
|
||||||
|
src/log/contents
|
||||||
|
src/wrapper/contents
|
||||||
|
src/analytics/contents
|
||||||
|
src/slam/contents
|
||||||
|
api/contents
|
||||||
|
|
||||||
|
..
|
||||||
|
Indices and tables
|
||||||
|
==================
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
||||||
|
* :ref:`modindex`
|
||||||
|
* :ref:`search`
|
||||||
35
docs/make.bat
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
|
||||||
|
pushd %~dp0
|
||||||
|
|
||||||
|
REM Command file for Sphinx documentation
|
||||||
|
|
||||||
|
if "%SPHINXBUILD%" == "" (
|
||||||
|
set SPHINXBUILD=sphinx-build
|
||||||
|
)
|
||||||
|
set SOURCEDIR=.
|
||||||
|
set BUILDDIR=_build
|
||||||
|
|
||||||
|
if "%1" == "" goto help
|
||||||
|
|
||||||
|
%SPHINXBUILD% >NUL 2>NUL
|
||||||
|
if errorlevel 9009 (
|
||||||
|
echo.
|
||||||
|
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||||
|
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||||
|
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||||
|
echo.may add the Sphinx directory to PATH.
|
||||||
|
echo.
|
||||||
|
echo.If you don't have Sphinx installed, grab it from
|
||||||
|
echo.http://sphinx-doc.org/
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:help
|
||||||
|
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
|
||||||
|
|
||||||
|
:end
|
||||||
|
popd
|
||||||
5
docs/requirements.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
breathe>=4.11.1
|
||||||
|
restructuredtext-lint>=1.1.3
|
||||||
|
Sphinx>=1.8.1
|
||||||
|
sphinx-intl>=0.9.11
|
||||||
|
sphinx-rtd-theme>=0.4.2
|
||||||
38
docs/src/analytics/analytics_imu.rst
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
.. _analytics_imu:
|
||||||
|
|
||||||
|
Analyzing IMU
|
||||||
|
==============
|
||||||
|
|
||||||
|
The SDK provides the script ``imu_analytics.py`` for IMU analysis. The tool details can be seen in `tools/README.md <https://github.com/slightech/MYNT-EYE-S-SDK/tree/master/tools>`_ .
|
||||||
|
Refer to run commands and results on Linux:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ python tools/analytics/imu_analytics.py -i dataset -c tools/config/mynteye/mynteye_config.yaml -al=-1.2,1.2 -gl= -gdu=d -gsu=d -kl=
|
||||||
|
imu analytics ...
|
||||||
|
input: dataset
|
||||||
|
outdir: dataset
|
||||||
|
gyro_limits: None
|
||||||
|
accel_limits: [(-1.2, 1.2), (-1.2, 1.2), (-1.2, 1.2), (-1.2, 1.2)]
|
||||||
|
time_unit: None
|
||||||
|
time_limits: None
|
||||||
|
auto: False
|
||||||
|
gyro_show_unit: d
|
||||||
|
gyro_data_unit: d
|
||||||
|
temp_limits: None
|
||||||
|
open dataset ...
|
||||||
|
imu: 20040, temp: 20040
|
||||||
|
timebeg: 4.384450, timeend: 44.615550, duration: 40.231100
|
||||||
|
save figure to:
|
||||||
|
dataset/imu_analytics.png
|
||||||
|
imu analytics done
|
||||||
|
|
||||||
|
The analysis result graph will be saved in the data set directory, as follows:
|
||||||
|
|
||||||
|
.. image:: ../../images/imu_analytics.png
|
||||||
|
|
||||||
|
In addition, the script specific options can be executed ``-h``:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ python tools/analytics/imu_analytics.py -h
|
||||||
55
docs/src/analytics/analytics_stamp.rst
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
.. _analytics_stamp:
|
||||||
|
|
||||||
|
Analyze time stamps
|
||||||
|
====================
|
||||||
|
|
||||||
|
SDK provides a script for timestamp analysis ``stamp_analytics.py`` . Tool details are visible in `tools/README.md <https://github.com/slightech/MYNT-EYE-S-SDK/tree/master/tools>`_ .
|
||||||
|
|
||||||
|
Reference run commands and results on Linux:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ python tools/analytics/stamp_analytics.py -i dataset -c tools/config/mynteye/mynteye_config.yaml
|
||||||
|
stamp analytics ...
|
||||||
|
input: dataset
|
||||||
|
outdir: dataset
|
||||||
|
open dataset ...
|
||||||
|
save to binary files ...
|
||||||
|
binimg: dataset/stamp_analytics_img.bin
|
||||||
|
binimu: dataset/stamp_analytics_imu.bin
|
||||||
|
img: 1007, imu: 20040
|
||||||
|
|
||||||
|
rate (Hz)
|
||||||
|
img: 25, imu: 500
|
||||||
|
sample period (s)
|
||||||
|
img: 0.04, imu: 0.002
|
||||||
|
|
||||||
|
diff count
|
||||||
|
imgs: 1007, imus: 20040
|
||||||
|
imgs_t_diff: 1006, imus_t_diff: 20039
|
||||||
|
|
||||||
|
diff where (factor=0.1)
|
||||||
|
imgs where diff > 0.04*1.1 (0)
|
||||||
|
imgs where diff < 0.04*0.9 (0)
|
||||||
|
imus where diff > 0.002*1.1 (0)
|
||||||
|
imus where diff < 0.002*0.9 (0)
|
||||||
|
|
||||||
|
image timestamp duplicates: 0
|
||||||
|
|
||||||
|
save figure to:
|
||||||
|
dataset/stamp_analytics.png
|
||||||
|
stamp analytics done
|
||||||
|
|
||||||
|
The analysis result graph will be saved in the dataset directory, as follows:
|
||||||
|
|
||||||
|
.. image:: ../../images/stamp_analytics.png
|
||||||
|
|
||||||
|
In addition, the script specific options can be executed ``-h`` to understand:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ python tools/analytics/stamp_analytics.py -h
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
|
||||||
|
Suggestions when recording data sets ``record.cc`` annotation display image inside ``cv::imshow()``, ``dataset.cc`` annotation display image inside ``cv::imwrite()`` . Because these operations are time-consuming, they can cause images to be discarded. In other words, consumption can't keep up with production, so some images are discarded. ``GetStreamDatas()`` used in ``record.cc`` only caches the latest 4 images.
|
||||||
10
docs/src/analytics/contents.rst
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
.. _analytics:
|
||||||
|
|
||||||
|
Data Analytics
|
||||||
|
===============
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
dataset
|
||||||
|
analytics_imu
|
||||||
|
analytics_stamp
|
||||||
58
docs/src/analytics/dataset.rst
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
.. _dataset:
|
||||||
|
|
||||||
|
Recording data sets
|
||||||
|
====================
|
||||||
|
|
||||||
|
The SDK provides the tool ``record`` for recording data sets. Tool details can be seen in `tools/README.md <https://github.com/slightech/MYNT-EYE-S-SDK/tree/master/tools>`_ .
|
||||||
|
|
||||||
|
Reference run command:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
./tools/_output/bin/dataset/record2
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
.\tools\_output\bin\dataset\record2.bat
|
||||||
|
|
||||||
|
Reference run results on Linux:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./tools/_output/bin/dataset/record
|
||||||
|
I0513 21:28:57.128947 11487 utils.cc:26] Detecting MYNT EYE devices
|
||||||
|
I0513 21:28:57.807116 11487 utils.cc:33] MYNT EYE devices:
|
||||||
|
I0513 21:28:57.807155 11487 utils.cc:37] index: 0, name: MYNT-EYE-S1000
|
||||||
|
I0513 21:28:57.807163 11487 utils.cc:43] Only one MYNT EYE device, select index: 0
|
||||||
|
I0513 21:28:57.808437 11487 channels.cc:114] Option::GAIN: min=0, max=48, def=24, cur=24
|
||||||
|
I0513 21:28:57.809999 11487 channels.cc:114] Option::BRIGHTNESS: min=0, max=240, def=120, cur=120
|
||||||
|
I0513 21:28:57.818678 11487 channels.cc:114] Option::CONTRAST: min=0, max=255, def=127, cur=127
|
||||||
|
I0513 21:28:57.831529 11487 channels.cc:114] Option::FRAME_RATE: min=10, max=60, def=25, cur=25
|
||||||
|
I0513 21:28:57.848914 11487 channels.cc:114] Option::IMU_FREQUENCY: min=100, max=500, def=200, cur=500
|
||||||
|
I0513 21:28:57.865185 11487 channels.cc:114] Option::EXPOSURE_MODE: min=0, max=1, def=0, cur=0
|
||||||
|
I0513 21:28:57.881434 11487 channels.cc:114] Option::MAX_GAIN: min=0, max=48, def=48, cur=48
|
||||||
|
I0513 21:28:57.897598 11487 channels.cc:114] Option::MAX_EXPOSURE_TIME: min=0, max=240, def=240, cur=240
|
||||||
|
I0513 21:28:57.913918 11487 channels.cc:114] Option::DESIRED_BRIGHTNESS: min=0, max=255, def=192, cur=192
|
||||||
|
I0513 21:28:57.930177 11487 channels.cc:114] Option::IR_CONTROL: min=0, max=160, def=0, cur=0
|
||||||
|
I0513 21:28:57.946341 11487 channels.cc:114] Option::HDR_MODE: min=0, max=1, def=0, cur=0
|
||||||
|
Saved 1007 imgs, 20040 imus to ./dataset
|
||||||
|
I0513 21:29:38.608772 11487 record.cc:118] Time beg: 2018-05-13 21:28:58.255395, end: 2018-05-13 21:29:38.578696, cost: 40323.3ms
|
||||||
|
I0513 21:29:38.608853 11487 record.cc:121] Img count: 1007, fps: 24.9732
|
||||||
|
I0513 21:29:38.608873 11487 record.cc:123] Imu count: 20040, hz: 496.983
|
||||||
|
|
||||||
|
Results save into ``<workdir>/dataset`` by default. You can also add parameter, select other directory to save.
|
||||||
|
|
||||||
|
Record contents:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
<workdir>/
|
||||||
|
└─dataset/
|
||||||
|
├─left/
|
||||||
|
│ ├─stream.txt # Image infomation
|
||||||
|
│ ├─000000.png # Image,index 0
|
||||||
|
│ └─...
|
||||||
|
├─right/
|
||||||
|
│ ├─stream.txt # Image information
|
||||||
|
│ ├─000000.png # Image,index 0
|
||||||
|
│ └─...
|
||||||
|
└─motion.txt # IMU information
|
||||||
129
docs/src/control/auto_exposure.rst
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
.. _auto_exposure:
|
||||||
|
|
||||||
|
Enable auto exposure and its adjustment function
|
||||||
|
=================================================
|
||||||
|
|
||||||
|
Using the ``SetOptionValue()`` function of the API, you can set various control values of the current open device.
|
||||||
|
|
||||||
|
To enable auto exposure, set ``Option::EXPOSURE_MODE`` to ``0`` .
|
||||||
|
|
||||||
|
For mynteye s1030, the settings available for adjustment during auto exposure are:
|
||||||
|
|
||||||
|
* ``Option::MAX_GAIN`` Maximum gain.
|
||||||
|
* ``Option::MAX_EXPOSURE_TIME`` Maximum exposure time.
|
||||||
|
* ``Option::DESIRED_BRIGHTNESS`` Expected brightness.
|
||||||
|
|
||||||
|
For mynteye s2100/s210a, the settings available for adjustment during auto exposure are:
|
||||||
|
|
||||||
|
* ``Option::MAX_GAIN`` Maximum gain.
|
||||||
|
* ``Option::MAX_EXPOSURE_TIME`` Maximum exposure time.
|
||||||
|
* ``Option::DESIRED_BRIGHTNESS`` Expected brightness.
|
||||||
|
* ``Option::MIN_EXPOSURE_TIME`` Minimum exposure time.
|
||||||
|
|
||||||
|
Reference Code:
|
||||||
|
|
||||||
|
s1030:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
// auto-exposure: 0
|
||||||
|
api->SetOptionValue(Option::EXPOSURE_MODE, 0);
|
||||||
|
|
||||||
|
// max_gain: range [0,48], default 48
|
||||||
|
api->SetOptionValue(Option::MAX_GAIN, 48);
|
||||||
|
// max_exposure_time: range [0,240], default 240
|
||||||
|
api->SetOptionValue(Option::MAX_EXPOSURE_TIME, 240);
|
||||||
|
// desired_brightness: range [0,255], default 192
|
||||||
|
api->SetOptionValue(Option::DESIRED_BRIGHTNESS, 192);
|
||||||
|
|
||||||
|
LOG(INFO) << "Enable auto-exposure";
|
||||||
|
LOG(INFO) << "Set MAX_GAIN to " << api->GetOptionValue(Option::MAX_GAIN);
|
||||||
|
LOG(INFO) << "Set MAX_EXPOSURE_TIME to "
|
||||||
|
<< api->GetOptionValue(Option::MAX_EXPOSURE_TIME);
|
||||||
|
LOG(INFO) << "Set DESIRED_BRIGHTNESS to "
|
||||||
|
<< api->GetOptionValue(Option::DESIRED_BRIGHTNESS);
|
||||||
|
|
||||||
|
s2100/s210a:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
auto &&request = api->SelectStreamRequest(&ok);
|
||||||
|
if (!ok) return 1;
|
||||||
|
api->ConfigStreamRequest(request);
|
||||||
|
|
||||||
|
// auto-exposure: 0
|
||||||
|
api->SetOptionValue(Option::EXPOSURE_MODE, 0);
|
||||||
|
|
||||||
|
// max_gain: range [0,255], default 8
|
||||||
|
api->SetOptionValue(Option::MAX_GAIN, 8);
|
||||||
|
// max_exposure_time: range [0,1000], default 333
|
||||||
|
api->SetOptionValue(Option::MAX_EXPOSURE_TIME, 333);
|
||||||
|
// desired_brightness: range [1,255], default 122
|
||||||
|
api->SetOptionValue(Option::DESIRED_BRIGHTNESS, 122);
|
||||||
|
// min_exposure_time: range [0,1000], default 0
|
||||||
|
api->SetOptionValue(Option::MIN_EXPOSURE_TIME, 0);
|
||||||
|
|
||||||
|
LOG(INFO) << "Enable auto-exposure";
|
||||||
|
LOG(INFO) << "Set EXPOSURE_MODE to "
|
||||||
|
<< api->GetOptionValue(Option::EXPOSURE_MODE);
|
||||||
|
LOG(INFO) << "Set MAX_GAIN to " << api->GetOptionValue(Option::MAX_GAIN);
|
||||||
|
LOG(INFO) << "Set MAX_EXPOSURE_TIME to "
|
||||||
|
<< api->GetOptionValue(Option::MAX_EXPOSURE_TIME);
|
||||||
|
LOG(INFO) << "Set DESIRED_BRIGHTNESS to "
|
||||||
|
<< api->GetOptionValue(Option::DESIRED_BRIGHTNESS);
|
||||||
|
LOG(INFO) << "Set MIN_EXPOSURE_TIME to "
|
||||||
|
<< api->GetOptionValue(Option::MIN_EXPOSURE_TIME);
|
||||||
|
|
||||||
|
|
||||||
|
Reference running results on Linux:
|
||||||
|
|
||||||
|
s1030:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_auto_exposure
|
||||||
|
I0513 14:07:57.963943 31845 utils.cc:26] Detecting MYNT EYE devices
|
||||||
|
I0513 14:07:58.457536 31845 utils.cc:33] MYNT EYE devices:
|
||||||
|
I0513 14:07:58.457563 31845 utils.cc:37] index: 0, name: MYNT-EYE-S1000
|
||||||
|
I0513 14:07:58.457567 31845 utils.cc:43] Only one MYNT EYE device, select index: 0
|
||||||
|
I0513 14:07:58.474916 31845 auto_exposure.cc:37] Enable auto-exposure
|
||||||
|
I0513 14:07:58.491058 31845 auto_exposure.cc:38] Set MAX_GAIN to 48
|
||||||
|
I0513 14:07:58.505131 31845 auto_exposure.cc:39] Set MAX_EXPOSURE_TIME to 240
|
||||||
|
I0513 14:07:58.521375 31845 auto_exposure.cc:41] Set DESIRED_BRIGHTNESS to 192
|
||||||
|
|
||||||
|
|
||||||
|
s2100/s210a:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_auto_exposure
|
||||||
|
I/utils.cc:30 Detecting MYNT EYE devices
|
||||||
|
I/utils.cc:40 MYNT EYE devices:
|
||||||
|
I/utils.cc:43 index: 0, name: MYNT-EYE-S210A, sn: 07C41A190009071F
|
||||||
|
I/utils.cc:51 Only one MYNT EYE device, select index: 0
|
||||||
|
I/utils.cc:79 MYNT EYE devices:
|
||||||
|
I/utils.cc:82 index: 0, request: width: 1280, height: 400, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 1, request: width: 1280, height: 400, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 2, request: width: 1280, height: 400, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:82 index: 3, request: width: 1280, height: 400, format: Format::BGR888, fps: 60
|
||||||
|
I/utils.cc:82 index: 4, request: width: 2560, height: 800, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 5, request: width: 2560, height: 800, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 6, request: width: 2560, height: 800, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:93 There are 7 stream requests, select index:
|
||||||
|
3
|
||||||
|
I/auto_exposure.cc:72 Enable auto-exposure
|
||||||
|
I/auto_exposure.cc:73 Set EXPOSURE_MODE to 0
|
||||||
|
I/auto_exposure.cc:75 Set MAX_GAIN to 8
|
||||||
|
I/auto_exposure.cc:76 Set MAX_EXPOSURE_TIME to 333
|
||||||
|
I/auto_exposure.cc:78 Set DESIRED_BRIGHTNESS to 122
|
||||||
|
I/auto_exposure.cc:80 Set MIN_EXPOSURE_TIME to 0
|
||||||
|
|
||||||
|
|
||||||
|
The sample program displays an image with a real exposure time in the upper left corner, in milliseconds.
|
||||||
|
|
||||||
|
Complete code examples, see `auto_exposure.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/control/auto_exposure.cc>`_ .
|
||||||
14
docs/src/control/contents.rst
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
.. _ctrl:
|
||||||
|
|
||||||
|
MYNT® EYE Control
|
||||||
|
=================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
framerate
|
||||||
|
imu_range
|
||||||
|
auto_exposure
|
||||||
|
manual_exposure
|
||||||
|
infrared
|
||||||
|
imu_low_pass_filter
|
||||||
|
iic_address
|
||||||
108
docs/src/control/framerate.rst
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
.. _framerate:
|
||||||
|
|
||||||
|
Set the frame rate of image & IMU frequency
|
||||||
|
============================================
|
||||||
|
|
||||||
|
Using the ``SetOptionValue()`` function in the API, you can set various control valuesfor the current device.
|
||||||
|
|
||||||
|
For mynteye s1030, to set the image frame rate and IMU frequency, set ``Option::FRAME_RATE`` and ``Option::IMU_FREQUENCY``.
|
||||||
|
|
||||||
|
.. Attention::
|
||||||
|
|
||||||
|
* The effective fps of the image: 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60.
|
||||||
|
* The effective frequency of IMU: 100, 200, 250, 333, 500.
|
||||||
|
|
||||||
|
For mynteye s2100/s210a, the image frame rate should be selected when running the sample, and the frame rate and resolution are combined as follows:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
index: 0, request: width: 1280, height: 400, format: Format::BGR888, fps: 10
|
||||||
|
index: 1, request: width: 1280, height: 400, format: Format::BGR888, fps: 20
|
||||||
|
index: 2, request: width: 1280, height: 400, format: Format::BGR888, fps: 30
|
||||||
|
index: 3, request: width: 1280, height: 400, format: Format::BGR888, fps: 60
|
||||||
|
index: 4, request: width: 2560, height: 800, format: Format::BGR888, fps: 10
|
||||||
|
index: 5, request: width: 2560, height: 800, format: Format::BGR888, fps: 20
|
||||||
|
index: 6, request: width: 2560, height: 800, format: Format::BGR888, fps: 30
|
||||||
|
|
||||||
|
|
||||||
|
Reference Code:
|
||||||
|
|
||||||
|
s1030:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
// Attention: must set FRAME_RATE and IMU_FREQUENCY together, otherwise won't
|
||||||
|
// succeed.
|
||||||
|
|
||||||
|
// FRAME_RATE values: 10, 15, 20, 25, 30, 35, 40, 45, 50, 55
|
||||||
|
api->SetOptionValue(Option::FRAME_RATE, 25);
|
||||||
|
// IMU_FREQUENCY values: 100, 200, 250, 333, 500
|
||||||
|
api->SetOptionValue(Option::IMU_FREQUENCY, 500);
|
||||||
|
|
||||||
|
LOG(INFO) << "Set FRAME_RATE to " << api->GetOptionValue(Option::FRAME_RATE);
|
||||||
|
LOG(INFO) << "Set IMU_FREQUENCY to "
|
||||||
|
<< api->GetOptionValue(Option::IMU_FREQUENCY);
|
||||||
|
|
||||||
|
s2100/s210a:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
if (!api) return 1;
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
auto &&request = api->SelectStreamRequest(&ok);
|
||||||
|
if (!ok) return 1;
|
||||||
|
api->ConfigStreamRequest(request);
|
||||||
|
|
||||||
|
LOG(INFO) << "Please set frame rate by 'SelectStreamRequest()'";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference running results on Linux:
|
||||||
|
|
||||||
|
s1030:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_framerate
|
||||||
|
I0513 14:05:57.218222 31813 utils.cc:26] Detecting MYNT EYE devices
|
||||||
|
I0513 14:05:57.899404 31813 utils.cc:33] MYNT EYE devices:
|
||||||
|
I0513 14:05:57.899430 31813 utils.cc:37] index: 0, name: MYNT-EYE-S1000
|
||||||
|
I0513 14:05:57.899435 31813 utils.cc:43] Only one MYNT EYE device, select index: 0
|
||||||
|
I0513 14:05:58.076257 31813 framerate.cc:36] Set FRAME_RATE to 25
|
||||||
|
I0513 14:05:58.076836 31813 framerate.cc:37] Set IMU_FREQUENCY to 500
|
||||||
|
I0513 14:06:21.702361 31813 framerate.cc:82] Time beg: 2018-05-13 14:05:58.384967, end: 2018-05-13 14:06:21.666115, cost: 23281.1ms
|
||||||
|
I0513 14:06:21.702388 31813 framerate.cc:85] Img count: 573, fps: 24.6122
|
||||||
|
I0513 14:06:21.702404 31813 framerate.cc:87] Imu count: 11509, hz: 494.348
|
||||||
|
|
||||||
|
s2100/s210a:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_framerate
|
||||||
|
I/utils.cc:30 Detecting MYNT EYE devices
|
||||||
|
I/utils.cc:40 MYNT EYE devices:
|
||||||
|
I/utils.cc:43 index: 0, name: MYNT-EYE-S210A, sn: 07C41A190009071F
|
||||||
|
I/utils.cc:51 Only one MYNT EYE device, select index: 0
|
||||||
|
I/utils.cc:79 MYNT EYE devices:
|
||||||
|
I/utils.cc:82 index: 0, request: width: 1280, height: 400, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 1, request: width: 1280, height: 400, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 2, request: width: 1280, height: 400, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:82 index: 3, request: width: 1280, height: 400, format: Format::BGR888, fps: 60
|
||||||
|
I/utils.cc:82 index: 4, request: width: 2560, height: 800, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 5, request: width: 2560, height: 800, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 6, request: width: 2560, height: 800, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:93 There are 7 stream requests, select index:
|
||||||
|
2
|
||||||
|
I/framerate.cc:54 Please set frame rate by 'SelectStreamRequest()'
|
||||||
|
I/framerate.cc:99 Time beg: 2018-12-29 10:05:08.203095, end: 2018-12-29 10:08:20.074969, cost: 191872ms
|
||||||
|
I/framerate.cc:102 Img count: 5759, fps: 30.0148
|
||||||
|
I/framerate.cc:104 Imu count: 77163, hz: 402.159
|
||||||
|
|
||||||
|
|
||||||
|
After the sample program finishes running with ``ESC/Q``, it will output the calculated value of the frame rate of image & IMU frequency.
|
||||||
|
|
||||||
|
Complete code samples,please see `framerate.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/control/framerate.cc>`_ .
|
||||||
58
docs/src/control/iic_address.rst
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
.. _iic_address:
|
||||||
|
|
||||||
|
Set IIC Address
|
||||||
|
================
|
||||||
|
|
||||||
|
Using the ``SetOptionValue()`` function in the API, you can set various control values for the current device.
|
||||||
|
|
||||||
|
To set the IIC address, set ``Option::IIC_ADDRESS_SETTING``.
|
||||||
|
|
||||||
|
|
||||||
|
.. Attention::
|
||||||
|
Only support S210A
|
||||||
|
|
||||||
|
Reference Code:
|
||||||
|
|
||||||
|
s210a:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
if (!api) return 1;
|
||||||
|
bool ok;
|
||||||
|
auto &&request = api->SelectStreamRequest(&ok);
|
||||||
|
if (!ok) return 1;
|
||||||
|
api->ConfigStreamRequest(request);
|
||||||
|
Model model = api->GetModel();
|
||||||
|
if (model == Model::STANDARD210A) {
|
||||||
|
api->SetOptionValue(Option::IIC_ADDRESS_SETTING, 0x31);
|
||||||
|
LOG(INFO) << "Set iic address to " << std::hex << "0x"
|
||||||
|
<< api->GetOptionValue(Option::IIC_ADDRESS_SETTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference running results on Linux:
|
||||||
|
|
||||||
|
s210a:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_iic_adress
|
||||||
|
I/utils.cc:30 Detecting MYNT EYE devices
|
||||||
|
I/utils.cc:40 MYNT EYE devices:
|
||||||
|
I/utils.cc:43 index: 0, name: MYNT-EYE-S210A, sn: 07C41A190009071F
|
||||||
|
I/utils.cc:51 Only one MYNT EYE device, select index: 0
|
||||||
|
I/utils.cc:79 MYNT EYE devices:
|
||||||
|
I/utils.cc:82 index: 0, request: width: 1280, height: 400, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 1, request: width: 1280, height: 400, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 2, request: width: 1280, height: 400, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:82 index: 3, request: width: 1280, height: 400, format: Format::BGR888, fps: 60
|
||||||
|
I/utils.cc:82 index: 4, request: width: 2560, height: 800, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 5, request: width: 2560, height: 800, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 6, request: width: 2560, height: 800, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:93 There are 7 stream requests, select index:
|
||||||
|
3
|
||||||
|
I/imu_range.cc:51 Set iic address to 0x31
|
||||||
|
|
||||||
|
After the sample program finishes running with ``ESC/Q``.
|
||||||
|
Complete code samples,please see `iic_address.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/control/iic_address.cc>`_.
|
||||||
63
docs/src/control/imu_low_pass_filter.rst
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
.. _imu_low_pass_filter:
|
||||||
|
|
||||||
|
Low-pass Filter
|
||||||
|
===============
|
||||||
|
|
||||||
|
Using the ``SetOptionValue()`` function in the API, you can set various control values for the current device.
|
||||||
|
|
||||||
|
To set the value of accelerometer low-pass filter and gyroscope low-pass filter, set ``Option::ACCELEROMETER_LOW_PASS_FILTER`` and ``Option::GYROSCOPE_LOW_PASS_FILTER``.
|
||||||
|
|
||||||
|
.. Attention::
|
||||||
|
* s1030 doesn't support this feature
|
||||||
|
|
||||||
|
Reference Code:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
if (!api) return 1;
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
auto &&request = api->SelectStreamRequest(&ok);
|
||||||
|
if (!ok) return 1;
|
||||||
|
api->ConfigStreamRequest(request);
|
||||||
|
|
||||||
|
// ACCELEROMETER_RANGE values: 0, 1, 2
|
||||||
|
api->SetOptionValue(Option::ACCELEROMETER_LOW_PASS_FILTER, 2);
|
||||||
|
// GYROSCOPE_RANGE values: 23, 64
|
||||||
|
api->SetOptionValue(Option::GYROSCOPE_LOW_PASS_FILTER, 64);
|
||||||
|
|
||||||
|
LOG(INFO) << "Set ACCELEROMETER_LOW_PASS_FILTER to "
|
||||||
|
<< api->GetOptionValue(Option::ACCELEROMETER_LOW_PASS_FILTER);
|
||||||
|
LOG(INFO) << "Set GYROSCOPE_LOW_PASS_FILTER to "
|
||||||
|
<< api->GetOptionValue(Option::GYROSCOPE_LOW_PASS_FILTER);
|
||||||
|
|
||||||
|
|
||||||
|
Reference running results on Linux:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_imu_low_pass_filter
|
||||||
|
I/utils.cc:30 Detecting MYNT EYE devices
|
||||||
|
I/utils.cc:40 MYNT EYE devices:
|
||||||
|
I/utils.cc:43 index: 0, name: MYNT-EYE-S210A, sn: 07C41A190009071F
|
||||||
|
I/utils.cc:51 Only one MYNT EYE device, select index: 0
|
||||||
|
I/utils.cc:79 MYNT EYE devices:
|
||||||
|
I/utils.cc:82 index: 0, request: width: 1280, height: 400, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 1, request: width: 1280, height: 400, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 2, request: width: 1280, height: 400, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:82 index: 3, request: width: 1280, height: 400, format: Format::BGR888, fps: 60
|
||||||
|
I/utils.cc:82 index: 4, request: width: 2560, height: 800, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 5, request: width: 2560, height: 800, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 6, request: width: 2560, height: 800, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:93 There are 7 stream requests, select index:
|
||||||
|
1
|
||||||
|
I/imu_low_pass_filter.cc:48 Set ACCELEROMETER_LOW_PASS_FILTER to 2
|
||||||
|
I/imu_low_pass_filter.cc:50 Set GYROSCOPE_LOW_PASS_FILTER to 64
|
||||||
|
I/imu_low_pass_filter.cc:96 Time beg: 2018-12-29 13:53:42.296299, end: 2018-12-29 14:06:33.295960, cost: 771000ms
|
||||||
|
I/imu_low_pass_filter.cc:99 Img count: 15412, fps: 19.9896
|
||||||
|
I/imu_low_pass_filter.cc:101 Imu count: 309891, hz: 401.934
|
||||||
|
|
||||||
|
After the sample program finishes running with ``ESC/Q``, the low-pass filter of imu setting is complete. The ranges will be kept inside the hardware and not affected by power off.
|
||||||
|
|
||||||
|
Complete code samples,please see `imu_low_pass_filter.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/control/imu_low_pass_filter.cc>`_ 。
|
||||||
108
docs/src/control/imu_range.rst
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
.. _imu_range:
|
||||||
|
|
||||||
|
Set the range of accelerometer & gyroscope
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Using the ``SetOptionValue()`` function in the API, you can set various control values for the current device.
|
||||||
|
|
||||||
|
To set the range of accelerometer and gyroscope, set ``Option::ACCELEROMETER_RANGE`` and ``Option::GYROSCOPE_RANGE``.
|
||||||
|
|
||||||
|
.. Attention::
|
||||||
|
For mynteye s1030, the available settings are:
|
||||||
|
|
||||||
|
* The effective range of accelerometer(unit:g): 4, 8, 16, 32.
|
||||||
|
* Gyroscope Range Valid value (unit: DEG/S): 500, 1000, 2000, 4000.
|
||||||
|
|
||||||
|
For mynteye s2100/s210a, the available settings are:
|
||||||
|
|
||||||
|
* The effective range of accelerometer(unit:g): 6, 12, 24, 32.
|
||||||
|
* The effective range of gyroscope(unit:deg/s): 250, 500, 1000, 2000, 4000.
|
||||||
|
|
||||||
|
Reference Code:
|
||||||
|
|
||||||
|
s1030:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
if (!api)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
// ACCELEROMETER_RANGE values: 4, 8, 16, 32
|
||||||
|
api->SetOptionValue(Option::ACCELEROMETER_RANGE, 8);
|
||||||
|
// GYROSCOPE_RANGE values: 500, 1000, 2000, 4000
|
||||||
|
api->SetOptionValue(Option::GYROSCOPE_RANGE, 1000);
|
||||||
|
|
||||||
|
LOG(INFO) << "Set ACCELEROMETER_RANGE to "
|
||||||
|
<< api->GetOptionValue(Option::ACCELEROMETER_RANGE);
|
||||||
|
LOG(INFO) << "Set GYROSCOPE_RANGE to "
|
||||||
|
<< api->GetOptionValue(Option::GYROSCOPE_RANGE);
|
||||||
|
|
||||||
|
s2100/s210a:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
if (!api) return 1;
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
auto &&request = api->SelectStreamRequest(&ok);
|
||||||
|
if (!ok) return 1;
|
||||||
|
api->ConfigStreamRequest(request);
|
||||||
|
|
||||||
|
// ACCELEROMETER_RANGE values: 6, 12, 24, 32
|
||||||
|
api->SetOptionValue(Option::ACCELEROMETER_RANGE, 6);
|
||||||
|
// GYROSCOPE_RANGE values: 250, 500, 1000, 2000, 4000
|
||||||
|
api->SetOptionValue(Option::GYROSCOPE_RANGE, 1000);
|
||||||
|
|
||||||
|
LOG(INFO) << "Set ACCELEROMETER_RANGE to "
|
||||||
|
<< api->GetOptionValue(Option::ACCELEROMETER_RANGE);
|
||||||
|
LOG(INFO) << "Set GYROSCOPE_RANGE to "
|
||||||
|
<< api->GetOptionValue(Option::GYROSCOPE_RANGE);
|
||||||
|
|
||||||
|
|
||||||
|
Reference running results on Linux:
|
||||||
|
|
||||||
|
s1030:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_imu_range
|
||||||
|
I/utils.cc:28 Detecting MYNT EYE devices
|
||||||
|
I/utils.cc:38 MYNT EYE devices:
|
||||||
|
I/utils.cc:41 index: 0, name: MYNT-EYE-S1030, sn: 4B4C1F1100090712
|
||||||
|
I/utils.cc:49 Only one MYNT EYE device, select index: 0
|
||||||
|
I/imu_range.cc:34 Set ACCELEROMETER_RANGE to 8
|
||||||
|
I/imu_range.cc:36 Set GYROSCOPE_RANGE to 1000
|
||||||
|
I/imu_range.cc:81 Time beg: 2018-11-21 15:34:57.726428, end: 2018-11-21 15:35:12.190478, cost: 14464ms
|
||||||
|
I/imu_range.cc:84 Img count: 363, fps: 25.0967
|
||||||
|
I/imu_range.cc:86 Imu count: 2825, hz: 195.312
|
||||||
|
|
||||||
|
s2100/s210a:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_imu_range
|
||||||
|
I/utils.cc:30 Detecting MYNT EYE devices
|
||||||
|
I/utils.cc:40 MYNT EYE devices:
|
||||||
|
I/utils.cc:43 index: 0, name: MYNT-EYE-S210A, sn: 07C41A190009071F
|
||||||
|
I/utils.cc:51 Only one MYNT EYE device, select index: 0
|
||||||
|
I/utils.cc:79 MYNT EYE devices:
|
||||||
|
I/utils.cc:82 index: 0, request: width: 1280, height: 400, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 1, request: width: 1280, height: 400, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 2, request: width: 1280, height: 400, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:82 index: 3, request: width: 1280, height: 400, format: Format::BGR888, fps: 60
|
||||||
|
I/utils.cc:82 index: 4, request: width: 2560, height: 800, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 5, request: width: 2560, height: 800, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 6, request: width: 2560, height: 800, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:93 There are 7 stream requests, select index:
|
||||||
|
3
|
||||||
|
I/imu_range.cc:51 Set ACCELEROMETER_RANGE to 6
|
||||||
|
I/imu_range.cc:53 Set GYROSCOPE_RANGE to 1000
|
||||||
|
I/imu_range.cc:98 Time beg: 2018-12-29 10:03:10.706211, end: 2018-12-29 10:04:12.497427, cost: 61791.2ms
|
||||||
|
I/imu_range.cc:101 Img count: 3706, fps: 59.9762
|
||||||
|
I/imu_range.cc:103 Imu count: 24873, hz: 402.533
|
||||||
|
|
||||||
|
After the sample program finishes running with ``ESC/Q``, the ranges of imu setting is complete. The ranges will be kept inside the hardware and not affected by power off.
|
||||||
|
|
||||||
|
Complete code samples,please see `imu_range.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/control/imu_range.cc>`_.
|
||||||
54
docs/src/control/infrared.rst
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
.. _infrared:
|
||||||
|
|
||||||
|
Enable IR and its adjustments function
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
Using the ``SetOptionValue()`` function of the API, you can set various control values for the current open device.
|
||||||
|
|
||||||
|
Enabling IR is setting ``Option::IR_CONTROL`` greater than 0. The greater the value, the greater the IR's intensity.
|
||||||
|
|
||||||
|
.. Attention::
|
||||||
|
* mynteye s2100/s210a doesn't support this feature.
|
||||||
|
|
||||||
|
Reference Code:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
// Detect infrared add-ons
|
||||||
|
LOG(INFO) << "Support infrared: " << std::boolalpha
|
||||||
|
<< api->Supports(AddOns::INFRARED);
|
||||||
|
LOG(INFO) << "Support infrared2: " << std::boolalpha
|
||||||
|
<< api->Supports(AddOns::INFRARED2);
|
||||||
|
|
||||||
|
// Get infrared intensity range
|
||||||
|
auto &&info = api->GetOptionInfo(Option::IR_CONTROL);
|
||||||
|
LOG(INFO) << Option::IR_CONTROL << ": {" << info << "}";
|
||||||
|
|
||||||
|
// Set infrared intensity value
|
||||||
|
api->SetOptionValue(Option::IR_CONTROL, 80);
|
||||||
|
|
||||||
|
Reference running results on Linux:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_infrared
|
||||||
|
I0504 16:16:28.016624 25848 utils.cc:13] Detecting MYNT EYE devices
|
||||||
|
I0504 16:16:28.512462 25848 utils.cc:20] MYNT EYE devices:
|
||||||
|
I0504 16:16:28.512473 25848 utils.cc:24] index: 0, name: MYNT-EYE-S1000
|
||||||
|
I0504 16:16:28.512477 25848 utils.cc:30] Only one MYNT EYE device, select index: 0
|
||||||
|
I0504 16:16:28.520848 25848 infrared.cc:13] Support infrared: true
|
||||||
|
I0504 16:16:28.520869 25848 infrared.cc:15] Support infrared2: true
|
||||||
|
I0504 16:16:28.520889 25848 infrared.cc:20] Option::IR_CONTROL: {min: 0, max: 160, def: 0}
|
||||||
|
|
||||||
|
At this point, if the image is displayed, you can see IR speckle on the image, as below:
|
||||||
|
|
||||||
|
.. image:: ../../images/ir.png
|
||||||
|
|
||||||
|
|
||||||
|
.. attention::
|
||||||
|
|
||||||
|
The hardware will not record the IR value after being turned off. In order to keep IR enabled, you must set the IR value after turning on the device.
|
||||||
|
|
||||||
|
Complete code samples,see `infrared.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/control/infrared.cc>`_ .
|
||||||
110
docs/src/control/manual_exposure.rst
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
.. _manual_exposure:
|
||||||
|
|
||||||
|
Enable manual exposure and its adjustment function
|
||||||
|
===================================================
|
||||||
|
|
||||||
|
Using the ``SetOptionValue()`` function of the API, you can set various control values for the current open device.
|
||||||
|
|
||||||
|
To enabling manual exposure, set ``Option::EXPOSURE_MODE`` to ``1``.
|
||||||
|
|
||||||
|
For mynteye s1030, during manual exposure, the settings available for adjustment are:
|
||||||
|
|
||||||
|
* ``Option::GAIN`` Gain.
|
||||||
|
* ``Option::BRIGHTNESS`` Brightness (Exposure time).
|
||||||
|
* ``Option::CONTRAST`` Contrast (Black level calibration).
|
||||||
|
|
||||||
|
For mynteye s2100/s210a, during manual exposure, the settings available for adjustment are:
|
||||||
|
|
||||||
|
* ``Option::BRIGHTNESS`` Brightness (Exposure time).
|
||||||
|
|
||||||
|
|
||||||
|
Reference Code:
|
||||||
|
|
||||||
|
s1030:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
// manual-exposure: 1
|
||||||
|
api->SetOptionValue(Option::EXPOSURE_MODE, 1);
|
||||||
|
|
||||||
|
// gain: range [0,48], default 24
|
||||||
|
api->SetOptionValue(Option::GAIN, 24);
|
||||||
|
// brightness/exposure_time: range [0,240], default 120
|
||||||
|
api->SetOptionValue(Option::BRIGHTNESS, 120);
|
||||||
|
// contrast/black_level_calibration: range [0,255], default 127
|
||||||
|
api->SetOptionValue(Option::CONTRAST, 127);
|
||||||
|
|
||||||
|
LOG(INFO) << "Enable manual-exposure";
|
||||||
|
LOG(INFO) << "Set GAIN to " << api->GetOptionValue(Option::GAIN);
|
||||||
|
LOG(INFO) << "Set BRIGHTNESS to " << api->GetOptionValue(Option::BRIGHTNESS);
|
||||||
|
LOG(INFO) << "Set CONTRAST to " << api->GetOptionValue(Option::CONTRAST);
|
||||||
|
|
||||||
|
s2100/s210a:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
auto &&request = api->SelectStreamRequest(&ok);
|
||||||
|
if (!ok) return 1;
|
||||||
|
api->ConfigStreamRequest(request);
|
||||||
|
|
||||||
|
// manual-exposure: 1
|
||||||
|
api->SetOptionValue(Option::EXPOSURE_MODE, 1);
|
||||||
|
|
||||||
|
// brightness/exposure_time: range [0,240], default 120
|
||||||
|
api->SetOptionValue(Option::BRIGHTNESS, 120);
|
||||||
|
|
||||||
|
LOG(INFO) << "Enable manual-exposure";
|
||||||
|
LOG(INFO) << "Set EXPOSURE_MODE to "
|
||||||
|
<< api->GetOptionValue(Option::EXPOSURE_MODE);
|
||||||
|
LOG(INFO) << "Set BRIGHTNESS to "
|
||||||
|
<< api->GetOptionValue(Option::BRIGHTNESS);
|
||||||
|
|
||||||
|
|
||||||
|
Reference running results on Linux:
|
||||||
|
|
||||||
|
s1030:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_manual_exposure
|
||||||
|
I0513 14:09:17.104431 31908 utils.cc:26] Detecting MYNT EYE devices
|
||||||
|
I0513 14:09:17.501519 31908 utils.cc:33] MYNT EYE devices:
|
||||||
|
I0513 14:09:17.501551 31908 utils.cc:37] index: 0, name: MYNT-EYE-S1000
|
||||||
|
I0513 14:09:17.501562 31908 utils.cc:43] Only one MYNT EYE device, select index: 0
|
||||||
|
I0513 14:09:17.552918 31908 manual_exposure.cc:37] Enable manual-exposure
|
||||||
|
I0513 14:09:17.552953 31908 manual_exposure.cc:38] Set GAIN to 24
|
||||||
|
I0513 14:09:17.552958 31908 manual_exposure.cc:39] Set BRIGHTNESS to 120
|
||||||
|
I0513 14:09:17.552963 31908 manual_exposure.cc:40] Set CONTRAST to 127
|
||||||
|
|
||||||
|
s2100/s210a:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/ctrl_manual_exposure
|
||||||
|
I/utils.cc:30 Detecting MYNT EYE devices
|
||||||
|
I/utils.cc:40 MYNT EYE devices:
|
||||||
|
I/utils.cc:43 index: 0, name: MYNT-EYE-S210A, sn: 07C41A190009071F
|
||||||
|
I/utils.cc:51 Only one MYNT EYE device, select index: 0
|
||||||
|
I/utils.cc:79 MYNT EYE devices:
|
||||||
|
I/utils.cc:82 index: 0, request: width: 1280, height: 400, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 1, request: width: 1280, height: 400, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 2, request: width: 1280, height: 400, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:82 index: 3, request: width: 1280, height: 400, format: Format::BGR888, fps: 60
|
||||||
|
I/utils.cc:82 index: 4, request: width: 2560, height: 800, format: Format::BGR888, fps: 10
|
||||||
|
I/utils.cc:82 index: 5, request: width: 2560, height: 800, format: Format::BGR888, fps: 20
|
||||||
|
I/utils.cc:82 index: 6, request: width: 2560, height: 800, format: Format::BGR888, fps: 30
|
||||||
|
I/utils.cc:93 There are 7 stream requests, select index:
|
||||||
|
3
|
||||||
|
I/manual_exposure.cc:62 Enable manual-exposure
|
||||||
|
I/manual_exposure.cc:63 Set EXPOSURE_MODE to 1
|
||||||
|
I/manual_exposure.cc:65 Set BRIGHTNESS to 120
|
||||||
|
|
||||||
|
|
||||||
|
The sample program displays an image with a real exposure time in the upper left corner, in milliseconds.
|
||||||
|
|
||||||
|
Complete code samples,see `manual_exposure.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/control/manual_exposure.cc>`_ .
|
||||||
22
docs/src/data/contents.rst
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
.. _data:
|
||||||
|
|
||||||
|
MYNT® EYE Data
|
||||||
|
==============
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
get_device_info
|
||||||
|
get_img_params
|
||||||
|
get_imu_params
|
||||||
|
get_stereo
|
||||||
|
get_stereo_rectified
|
||||||
|
get_disparity
|
||||||
|
get_depth
|
||||||
|
get_points
|
||||||
|
get_imu
|
||||||
|
get_imu_correspondence
|
||||||
|
get_from_callbacks
|
||||||
|
get_with_plugin
|
||||||
|
save_params
|
||||||
|
write_img_params
|
||||||
|
write_imu_params
|
||||||
54
docs/src/data/get_depth.rst
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
.. _get_depth:
|
||||||
|
|
||||||
|
Get depth image
|
||||||
|
===============
|
||||||
|
|
||||||
|
Depth images belongs to the upper layer of synthetic data. You need to start the ``EnableStreamData()`` beforehand, to get it through ``GetStreamData()``. The depth image type is CV_16UC1. In addition, it should be check not be empty before use.
|
||||||
|
|
||||||
|
For detailed process description, please see :ref:`get_stereo` :ref:`get_stereo_rectified`.
|
||||||
|
|
||||||
|
In addition, it is recommended to use plugins to calculate depth: Depth images work better and operate faster. Please refer to :ref:`get_with_plugin`.
|
||||||
|
|
||||||
|
Reference code snippet:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
api->EnableStreamData(Stream::DEPTH);
|
||||||
|
|
||||||
|
api->Start(Source::VIDEO_STREAMING);
|
||||||
|
|
||||||
|
cv::namedWindow("frame");
|
||||||
|
cv::namedWindow("depth");
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
api->WaitForStreams();
|
||||||
|
|
||||||
|
auto &&left_data = api->GetStreamData(Stream::LEFT);
|
||||||
|
auto &&right_data = api->GetStreamData(Stream::RIGHT);
|
||||||
|
|
||||||
|
cv::Mat img;
|
||||||
|
cv::hconcat(left_data.frame, right_data.frame, img);
|
||||||
|
cv::imshow("frame", img);
|
||||||
|
|
||||||
|
auto &&depth_data = api->GetStreamData(Stream::DEPTH);
|
||||||
|
if (!depth_data.frame.empty()) {
|
||||||
|
cv::imshow("depth", depth_data.frame); // CV_16UC1
|
||||||
|
}
|
||||||
|
|
||||||
|
char key = static_cast<char>(cv::waitKey(1));
|
||||||
|
if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
api->Stop(Source::VIDEO_STREAMING);
|
||||||
|
|
||||||
|
The above code uses OpenCV to display the image. When the display window is selected, pressing ``ESC/Q`` will end the program.
|
||||||
|
|
||||||
|
Complete code examples, see `get_depth.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/data/get_depth.cc>`_ .
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
|
||||||
|
Preview the value of a region of the depth image, see `get_depth_with_region.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/api/get_depth_with_region.cc>`_ .
|
||||||
41
docs/src/data/get_device_info.rst
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
.. _get_device_info:
|
||||||
|
|
||||||
|
Get device information
|
||||||
|
======================
|
||||||
|
|
||||||
|
Use ``GetInfo()`` function to get various current information values.
|
||||||
|
|
||||||
|
Reference code snippet:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
LOG(INFO) << "Device name: " << api->GetInfo(Info::DEVICE_NAME);
|
||||||
|
LOG(INFO) << "Serial number: " << api->GetInfo(Info::SERIAL_NUMBER);
|
||||||
|
LOG(INFO) << "Firmware version: " << api->GetInfo(Info::FIRMWARE_VERSION);
|
||||||
|
LOG(INFO) << "Hardware version: " << api->GetInfo(Info::HARDWARE_VERSION);
|
||||||
|
LOG(INFO) << "Spec version: " << api->GetInfo(Info::SPEC_VERSION);
|
||||||
|
LOG(INFO) << "Lens type: " << api->GetInfo(Info::LENS_TYPE);
|
||||||
|
LOG(INFO) << "IMU type: " << api->GetInfo(Info::IMU_TYPE);
|
||||||
|
LOG(INFO) << "Nominal baseline: " << api->GetInfo(Info::NOMINAL_BASELINE);
|
||||||
|
|
||||||
|
Reference result on Linux:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/get_device_info
|
||||||
|
I0503 16:40:21.109391 32106 utils.cc:13] Detecting MYNT EYE devices
|
||||||
|
I0503 16:40:21.604116 32106 utils.cc:20] MYNT EYE devices:
|
||||||
|
I0503 16:40:21.604127 32106 utils.cc:24] index: 0, name: MYNT-EYE-S1000
|
||||||
|
I0503 16:40:21.604142 32106 utils.cc:30] Only one MYNT EYE device, select index: 0
|
||||||
|
I0503 16:40:21.615054 32106 get_device_info.cc:10] Device name: MYNT-EYE-S1000
|
||||||
|
I0503 16:40:21.615113 32106 get_device_info.cc:11] Serial number: 0610243700090720
|
||||||
|
I0503 16:40:21.615129 32106 get_device_info.cc:12] Firmware version: 2.0
|
||||||
|
I0503 16:40:21.615139 32106 get_device_info.cc:13] Hardware version: 2.0
|
||||||
|
I0503 16:40:21.615146 32106 get_device_info.cc:14] Spec version: 1.0
|
||||||
|
I0503 16:40:21.615155 32106 get_device_info.cc:15] Lens type: 0000
|
||||||
|
I0503 16:40:21.615164 32106 get_device_info.cc:16] IMU type: 0000
|
||||||
|
I0503 16:40:21.615171 32106 get_device_info.cc:17] Nominal baseline: 120
|
||||||
|
|
||||||
|
Complete code examples, see `get_device_info.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/data/get_device_info.cc>`_ .
|
||||||
62
docs/src/data/get_disparity.rst
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
.. _get_disparity:
|
||||||
|
|
||||||
|
Get disparity image
|
||||||
|
===================
|
||||||
|
|
||||||
|
Disparity image belongs to the upper layer of synthetic data. You need to start the ``EnableStreamData()`` beforehand, to get it through ``GetStreamData()``. In addition, it should be check not be empty before use.
|
||||||
|
|
||||||
|
For detailed process description, please see :ref:`get_stereo` :ref:`get_stereo_rectified` .
|
||||||
|
|
||||||
|
It is recommended to use plugin to calculate depth: the depth map will be better with a higher frame rate. Please see :ref:`get_with_plugin` .
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
The SetDisparityComputingMethodType method is used to change disparity computing method. Currently, BM and SGBM are available.
|
||||||
|
|
||||||
|
Reference code snippet:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
// api->EnableStreamData(Stream::DISPARITY);
|
||||||
|
api->EnableStreamData(Stream::DISPARITY_NORMALIZED);
|
||||||
|
|
||||||
|
api->SetDisparityComputingMethodType(DisparityComputingMethod::BM);
|
||||||
|
|
||||||
|
api->Start(Source::VIDEO_STREAMING);
|
||||||
|
|
||||||
|
cv::namedWindow("frame");
|
||||||
|
// cv::namedWindow("disparity");
|
||||||
|
cv::namedWindow("disparity_normalized");
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
api->WaitForStreams();
|
||||||
|
|
||||||
|
auto &&left_data = api->GetStreamData(Stream::LEFT);
|
||||||
|
auto &&right_data = api->GetStreamData(Stream::RIGHT);
|
||||||
|
|
||||||
|
cv::Mat img;
|
||||||
|
cv::hconcat(left_data.frame, right_data.frame, img);
|
||||||
|
cv::imshow("frame", img);
|
||||||
|
|
||||||
|
// auto &&disp_data = api->GetStreamData(Stream::DISPARITY);
|
||||||
|
// if (!disp_data.frame.empty()) {
|
||||||
|
// cv::imshow("disparity", disp_data.frame);
|
||||||
|
// }
|
||||||
|
|
||||||
|
auto &&disp_norm_data = api->GetStreamData(Stream::DISPARITY_NORMALIZED);
|
||||||
|
if (!disp_norm_data.frame.empty()) {
|
||||||
|
cv::imshow("disparity_normalized", disp_norm_data.frame); // CV_8UC1
|
||||||
|
}
|
||||||
|
|
||||||
|
char key = static_cast<char>(cv::waitKey(1));
|
||||||
|
if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
api->Stop(Source::VIDEO_STREAMING);
|
||||||
|
|
||||||
|
The above code uses OpenCV to display the image. Select the display window, press ``ESC/Q`` to exit in the program.
|
||||||
|
|
||||||
|
Complete code examples, see `get_disparity.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/data/get_disparity.cc>`_ .
|
||||||
119
docs/src/data/get_from_callbacks.rst
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
.. _get_from_callbacks:
|
||||||
|
|
||||||
|
Get data from callbacks
|
||||||
|
========================
|
||||||
|
|
||||||
|
API offers function ``SetStreamCallback()`` and ``SetMotionCallback()`` to set callbacks for various data.
|
||||||
|
|
||||||
|
.. attention::
|
||||||
|
|
||||||
|
Make sure to not block callback. If the data processing time is too long, use the callback as a data producer.
|
||||||
|
|
||||||
|
Reference code snippet:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
// Attention: must not block the callbacks.
|
||||||
|
|
||||||
|
// Get left image from callback
|
||||||
|
std::atomic_uint left_count(0);
|
||||||
|
api->SetStreamCallback(
|
||||||
|
Stream::LEFT, [&left_count](const api::StreamData &data) {
|
||||||
|
CHECK_NOTNULL(data.img);
|
||||||
|
++left_count;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get depth image from callback
|
||||||
|
api->EnableStreamData(Stream::DEPTH);
|
||||||
|
std::atomic_uint depth_count(0);
|
||||||
|
cv::Mat depth;
|
||||||
|
std::mutex depth_mtx;
|
||||||
|
api->SetStreamCallback(
|
||||||
|
Stream::DEPTH,
|
||||||
|
[&depth_count, &depth, &depth_mtx](const api::StreamData &data) {
|
||||||
|
UNUSED(data)
|
||||||
|
++depth_count;
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> _(depth_mtx);
|
||||||
|
depth = data.frame;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get motion data from callback
|
||||||
|
std::atomic_uint imu_count(0);
|
||||||
|
std::shared_ptr<mynteye::ImuData> imu;
|
||||||
|
std::mutex imu_mtx;
|
||||||
|
api->SetMotionCallback(
|
||||||
|
[&imu_count, &imu, &imu_mtx](const api::MotionData &data) {
|
||||||
|
CHECK_NOTNULL(data.imu);
|
||||||
|
++imu_count;
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> _(imu_mtx);
|
||||||
|
imu = data.imu;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
api->Start(Source::ALL);
|
||||||
|
|
||||||
|
CVPainter painter;
|
||||||
|
|
||||||
|
cv::namedWindow("frame");
|
||||||
|
cv::namedWindow("depth");
|
||||||
|
|
||||||
|
unsigned int depth_num = 0;
|
||||||
|
while (true) {
|
||||||
|
api->WaitForStreams();
|
||||||
|
|
||||||
|
auto &&left_data = api->GetStreamData(Stream::LEFT);
|
||||||
|
auto &&right_data = api->GetStreamData(Stream::RIGHT);
|
||||||
|
|
||||||
|
// Concat left and right as img
|
||||||
|
cv::Mat img;
|
||||||
|
cv::hconcat(left_data.frame, right_data.frame, img);
|
||||||
|
|
||||||
|
// Draw img data and size
|
||||||
|
painter.DrawImgData(img, *left_data.img);
|
||||||
|
|
||||||
|
// Draw imu data
|
||||||
|
if (imu) {
|
||||||
|
std::lock_guard<std::mutex> _(imu_mtx);
|
||||||
|
painter.DrawImuData(img, *imu);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw counts
|
||||||
|
std::ostringstream ss;
|
||||||
|
ss << "left: " << left_count << ", depth: " << depth_count
|
||||||
|
<< ", imu: " << imu_count;
|
||||||
|
painter.DrawText(img, ss.str(), CVPainter::BOTTOM_RIGHT);
|
||||||
|
|
||||||
|
// Show img
|
||||||
|
cv::imshow("frame", img);
|
||||||
|
|
||||||
|
// Show depth
|
||||||
|
if (!depth.empty()) {
|
||||||
|
// Is the depth a new one?
|
||||||
|
if (depth_num != depth_count || depth_num == 0) {
|
||||||
|
std::lock_guard<std::mutex> _(depth_mtx);
|
||||||
|
depth_num = depth_count;
|
||||||
|
// LOG(INFO) << "depth_num: " << depth_num;
|
||||||
|
ss.str("");
|
||||||
|
ss.clear();
|
||||||
|
ss << "depth: " << depth_count;
|
||||||
|
painter.DrawText(depth, ss.str());
|
||||||
|
cv::imshow("depth", depth); // CV_16UC1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char key = static_cast<char>(cv::waitKey(1));
|
||||||
|
if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
api->Stop(Source::ALL);
|
||||||
|
|
||||||
|
OpenCV is used to display images and data above. When the window is selected, pressing ``ESC/Q`` will exit program.
|
||||||
|
|
||||||
|
Complete code examples, see `get_from_callbacks.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/data/get_from_callbacks.cc>`_ .
|
||||||
39
docs/src/data/get_img_params.rst
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
.. _get_img_params:
|
||||||
|
|
||||||
|
Get image calibration parameters
|
||||||
|
================================
|
||||||
|
|
||||||
|
Use ``GetIntrinsics()`` & ``GetExtrinsics()`` to get image calibration parameters.
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
The detailed meaning of parameters can reference the files in ``tools/writer/config`` , of these
|
||||||
|
the image calibration parameters of S2100/S210A are in ``tools/writer/config/S210A``
|
||||||
|
the image calibration parameters of S1030 are in ``tools/writer/config/S1030``
|
||||||
|
|
||||||
|
Reference code snippet:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
LOG(INFO) << "Intrinsics left: {" << *api->GetIntrinsicsBase(Stream::LEFT)
|
||||||
|
<< "}";
|
||||||
|
LOG(INFO) << "Intrinsics right: {" << *api->GetIntrinsicsBase(Stream::RIGHT)
|
||||||
|
<< "}";
|
||||||
|
LOG(INFO) << "Extrinsics right to left: {"
|
||||||
|
<< api->GetExtrinsics(Stream::RIGHT, Stream::LEFT) << "}";
|
||||||
|
|
||||||
|
Reference result on Linux:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/get_img_params
|
||||||
|
I0510 15:00:22.643263 6980 utils.cc:26] Detecting MYNT EYE devices
|
||||||
|
I0510 15:00:23.138811 6980 utils.cc:33] MYNT EYE devices:
|
||||||
|
I0510 15:00:23.138849 6980 utils.cc:37] index: 0, name: MYNT-EYE-S1000
|
||||||
|
I0510 15:00:23.138855 6980 utils.cc:43] Only one MYNT EYE device, select index: 0
|
||||||
|
I0510 15:00:23.210491 6980 get_img_params.cc:23] Intrinsics left: {width: 752, height: 480, fx: 736.38305001095545776, fy: 723.50066150722432212, cx: 356.91961817119693023, cy: 217.27271340923883258, model: 0, coeffs: [-0.54898645145016478, 0.52837141203888638, 0.00000000000000000, 0.00000000000000000, 0.00000000000000000]}
|
||||||
|
I0510 15:00:23.210551 6980 get_img_params.cc:24] Intrinsics right: {width: 752, height: 480, fx: 736.38305001095545776, fy: 723.50066150722432212, cx: 456.68367112303980093, cy: 250.70083335536796199, model: 0, coeffs: [-0.51012886039889305, 0.38764476500996770, 0.00000000000000000, 0.00000000000000000, 0.00000000000000000]}
|
||||||
|
I0510 15:00:23.210577 6980 get_img_params.cc:26] Extrinsics left to right: {rotation: [0.99701893306553813, -0.00095378124886237, -0.07715139279485062, 0.00144939967628305, 0.99997867219985104, 0.00636823256494144, 0.07714367342455503, -0.00646107164115277, 0.99699905125522237], translation: [-118.88991734400046596, -0.04560580387053091, -3.95313736911933855]}
|
||||||
|
|
||||||
|
Complete code examples, see `get_img_params.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/data/get_img_params.cc>`_ .
|
||||||
66
docs/src/data/get_imu.rst
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
.. _get_imu_data:
|
||||||
|
|
||||||
|
Get IMU data
|
||||||
|
=============
|
||||||
|
|
||||||
|
The API offers ``Start()`` / ``Stop()`` function to start/stop capturing data. You can set the argument to``Source::MOTION_TRACKING`` to capture IMU data only, or set it to ``Source::ALL`` to capture both image and IMU data.
|
||||||
|
|
||||||
|
During capturing data, you need ``EnableMotionDatas()`` to enable caching in order to get IMU data from ``GetMotionDatas()`` . Otherwise, IMU data is only available through the callback interface, see :ref:`get_from_callbacks` .
|
||||||
|
|
||||||
|
Sample code snippet:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
// Enable this will cache the motion datas until you get them.
|
||||||
|
api->EnableMotionDatas();
|
||||||
|
|
||||||
|
api->Start(Source::ALL);
|
||||||
|
|
||||||
|
CVPainter painter;
|
||||||
|
|
||||||
|
cv::namedWindow("frame");
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
api->WaitForStreams();
|
||||||
|
|
||||||
|
auto &&left_data = api->GetStreamData(Stream::LEFT);
|
||||||
|
auto &&right_data = api->GetStreamData(Stream::RIGHT);
|
||||||
|
|
||||||
|
cv::Mat img;
|
||||||
|
cv::hconcat(left_data.frame, right_data.frame, img);
|
||||||
|
|
||||||
|
auto &&motion_datas = api->GetMotionDatas();
|
||||||
|
/*
|
||||||
|
for (auto &&data : motion_datas) {
|
||||||
|
LOG(INFO) << "Imu frame_id: " << data.imu->frame_id
|
||||||
|
<< ", timestamp: " << data.imu->timestamp
|
||||||
|
<< ", accel_x: " << data.imu->accel[0]
|
||||||
|
<< ", accel_y: " << data.imu->accel[1]
|
||||||
|
<< ", accel_z: " << data.imu->accel[2]
|
||||||
|
<< ", gyro_x: " << data.imu->gyro[0]
|
||||||
|
<< ", gyro_y: " << data.imu->gyro[1]
|
||||||
|
<< ", gyro_z: " << data.imu->gyro[2]
|
||||||
|
<< ", temperature: " << data.imu->temperature;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
painter.DrawImgData(img, *left_data.img);
|
||||||
|
if (!motion_datas.empty()) {
|
||||||
|
painter.DrawImuData(img, *motion_datas[0].imu);
|
||||||
|
}
|
||||||
|
|
||||||
|
cv::imshow("frame", img);
|
||||||
|
|
||||||
|
char key = static_cast<char>(cv::waitKey(1));
|
||||||
|
if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
api->Stop(Source::ALL);
|
||||||
|
|
||||||
|
OpenCV is used to display image and data. When window is selected, press ``ESC/Q`` to exit program.
|
||||||
|
|
||||||
|
Complete code examples, see `get_imu.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/data/get_imu.cc>`_ .
|
||||||
109
docs/src/data/get_imu_correspondence.rst
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
.. _get_imu_correspondence:
|
||||||
|
|
||||||
|
Get IMU data with timestamp correspondence
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
If wanna get image with timestamp in the middle of IMU datas, you could call `EnableTimestampCorrespondence()`` to enable this feature.
|
||||||
|
|
||||||
|
Reference code snippet:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
// Enable motion datas with timestamp correspondence of some stream
|
||||||
|
api->EnableTimestampCorrespondence(Stream::LEFT);
|
||||||
|
|
||||||
|
api->Start(Source::ALL);
|
||||||
|
|
||||||
|
cv::namedWindow("frame");
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
api->WaitForStreams();
|
||||||
|
|
||||||
|
auto &&left_data = api->GetStreamData(Stream::LEFT);
|
||||||
|
auto &&right_data = api->GetStreamData(Stream::RIGHT);
|
||||||
|
|
||||||
|
auto img_stamp = left_data.img->timestamp;
|
||||||
|
LOG(INFO) << "Img timestamp: " << img_stamp
|
||||||
|
<< ", diff_prev=" << (img_stamp - prev_img_stamp);
|
||||||
|
prev_img_stamp = img_stamp;
|
||||||
|
|
||||||
|
cv::Mat img;
|
||||||
|
cv::hconcat(left_data.frame, right_data.frame, img);
|
||||||
|
|
||||||
|
auto &&motion_datas = api->GetMotionDatas();
|
||||||
|
LOG(INFO) << "Imu count: " << motion_datas.size();
|
||||||
|
for (auto &&data : motion_datas) {
|
||||||
|
auto imu_stamp = data.imu->timestamp;
|
||||||
|
LOG(INFO) << "Imu timestamp: " << imu_stamp
|
||||||
|
<< ", diff_prev=" << (imu_stamp - prev_imu_stamp)
|
||||||
|
<< ", diff_img=" << (1.f + imu_stamp - img_stamp);
|
||||||
|
prev_imu_stamp = imu_stamp;
|
||||||
|
}
|
||||||
|
LOG(INFO);
|
||||||
|
|
||||||
|
cv::imshow("frame", img);
|
||||||
|
|
||||||
|
char key = static_cast<char>(cv::waitKey(1));
|
||||||
|
if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
api->Stop(Source::ALL);
|
||||||
|
|
||||||
|
Reference result on Linux:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ./samples/_output/bin/tutorials/get_imu_correspondence
|
||||||
|
I/utils.cc:30 Detecting MYNT EYE devices
|
||||||
|
I/utils.cc:40 MYNT EYE devices:
|
||||||
|
I/utils.cc:43 index: 0, name: MYNT-EYE-S1030, sn: 0281351000090807
|
||||||
|
I/utils.cc:51 Only one MYNT EYE device, select index: 0
|
||||||
|
I/synthetic.cc:126 camera calib model: kannala_brandt
|
||||||
|
I/utils.cc:79 MYNT EYE devices:
|
||||||
|
I/utils.cc:82 index: 0, request: width: 752, height: 480, format: Format::YUYV, fps: 60
|
||||||
|
I/utils.cc:87 Only one stream request, select index: 0
|
||||||
|
I/get_imu_correspondence.cc:50 Img timestamp: 171323050, diff_prev=39990
|
||||||
|
I/get_imu_correspondence.cc:58 Imu count: 13
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171318710, diff_prev=171318710, diff_img=-4352
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171320730, diff_prev=2020, diff_img=-2320
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171322750, diff_prev=2020, diff_img=-304
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171324770, diff_prev=2020, diff_img=1712
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171326790, diff_prev=2020, diff_img=3728
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171328800, diff_prev=2010, diff_img=5744
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171330810, diff_prev=2010, diff_img=7760
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171332840, diff_prev=2030, diff_img=9776
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171334860, diff_prev=2020, diff_img=11808
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171336880, diff_prev=2020, diff_img=13824
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171338900, diff_prev=2020, diff_img=15840
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171340920, diff_prev=2020, diff_img=17872
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171342930, diff_prev=2010, diff_img=19872
|
||||||
|
I/get_imu_correspondence.cc:66
|
||||||
|
I/get_imu_correspondence.cc:50 Img timestamp: 171403040, diff_prev=79990
|
||||||
|
I/get_imu_correspondence.cc:58 Imu count: 20
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171383310, diff_prev=40380, diff_img=-19728
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171385330, diff_prev=2020, diff_img=-17712
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171387350, diff_prev=2020, diff_img=-15696
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171389370, diff_prev=2020, diff_img=-13664
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171391380, diff_prev=2010, diff_img=-11664
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171393390, diff_prev=2010, diff_img=-9648
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171395420, diff_prev=2030, diff_img=-7616
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171397440, diff_prev=2020, diff_img=-5600
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171399460, diff_prev=2020, diff_img=-3584
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171401480, diff_prev=2020, diff_img=-1568
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171403500, diff_prev=2020, diff_img=464
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171405510, diff_prev=2010, diff_img=2464
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171407520, diff_prev=2010, diff_img=4480
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171409540, diff_prev=2020, diff_img=6496
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171411570, diff_prev=2030, diff_img=8528
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171413590, diff_prev=2020, diff_img=10544
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171415610, diff_prev=2020, diff_img=12576
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171417630, diff_prev=2020, diff_img=14592
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171419650, diff_prev=2020, diff_img=16608
|
||||||
|
I/get_imu_correspondence.cc:61 Imu timestamp: 171421660, diff_prev=2010, diff_img=18624
|
||||||
|
|
||||||
|
Complete code examples, see `get_imu_correspondence.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/data/get_imu_correspondence.cc>`_ .
|
||||||
18
docs/src/data/get_imu_params.rst
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
.. _get_imu_params:
|
||||||
|
|
||||||
|
Get IMU calibration parameters
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Use ``GetMotionIntrinsics()`` & ``GetMotionExtrinsics()`` to get current IMU calibration parameters.
|
||||||
|
|
||||||
|
Reference commands:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
auto &&api = API::Create(argc, argv);
|
||||||
|
|
||||||
|
LOG(INFO) << "Motion intrinsics: {" << api->GetMotionIntrinsics() << "}";
|
||||||
|
LOG(INFO) << "Motion extrinsics left to imu: {"
|
||||||
|
<< api->GetMotionExtrinsics(Stream::LEFT) << "}";
|
||||||
|
|
||||||
|
Complete code examples, see `get_imu_params.cc <https://github.com/slightech/MYNT-EYE-S-SDK/blob/master/samples/tutorials/data/get_imu_params.cc>`_ .
|
||||||