From 2482ff5bf6d4def24d1494cf1090150821185de5 Mon Sep 17 00:00:00 2001 From: TinyO Date: Fri, 30 Aug 2019 11:23:05 +0800 Subject: [PATCH 01/13] doc(*): remove tools things. --- docs/src/sdk/contents.rst | 1 - docs/src/sdk/tools/analytics_dataset.rst | 58 ----- docs/src/sdk/tools/analytics_imu.rst | 38 ---- docs/src/sdk/tools/analytics_stamp.rst | 55 ----- docs/src/sdk/tools/contents.rst | 9 - docs/src/tools/calibration_tool.rst | 269 ----------------------- docs/src/tools/contents.rst | 8 - 7 files changed, 438 deletions(-) delete mode 100644 docs/src/sdk/tools/analytics_dataset.rst delete mode 100644 docs/src/sdk/tools/analytics_imu.rst delete mode 100644 docs/src/sdk/tools/analytics_stamp.rst delete mode 100644 docs/src/sdk/tools/contents.rst delete mode 100644 docs/src/tools/calibration_tool.rst delete mode 100644 docs/src/tools/contents.rst diff --git a/docs/src/sdk/contents.rst b/docs/src/sdk/contents.rst index ddf1d1b..f8a819a 100644 --- a/docs/src/sdk/contents.rst +++ b/docs/src/sdk/contents.rst @@ -8,6 +8,5 @@ SDK sdk_install data/contents control/contents - tools/contents project/contents sdk_changelog diff --git a/docs/src/sdk/tools/analytics_dataset.rst b/docs/src/sdk/tools/analytics_dataset.rst deleted file mode 100644 index 6efbf0d..0000000 --- a/docs/src/sdk/tools/analytics_dataset.rst +++ /dev/null @@ -1,58 +0,0 @@ -.. _analytics_dataset: - -Recording Data Sets -==================== - -The SDK provides the tool ``record`` for recording data sets. Tool details can be seen in `tools/README.md `_ . - -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 ``/dataset`` by default. You can also add parameter, select other directory to save. - -Record contents: - -.. code-block:: none - - / - └─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 diff --git a/docs/src/sdk/tools/analytics_imu.rst b/docs/src/sdk/tools/analytics_imu.rst deleted file mode 100644 index 834c42b..0000000 --- a/docs/src/sdk/tools/analytics_imu.rst +++ /dev/null @@ -1,38 +0,0 @@ -.. _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 `_ . -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/sdk/tools/imu_analytics.png - -In addition, the script specific options can be executed ``-h``: - -.. code-block:: bash - - $ python tools/analytics/imu_analytics.py -h diff --git a/docs/src/sdk/tools/analytics_stamp.rst b/docs/src/sdk/tools/analytics_stamp.rst deleted file mode 100644 index db155b6..0000000 --- a/docs/src/sdk/tools/analytics_stamp.rst +++ /dev/null @@ -1,55 +0,0 @@ -.. _analytics_stamp: - -Analyze Time Stamps -==================== - -SDK provides a script for timestamp analysis ``stamp_analytics.py`` . Tool details are visible in `tools/README.md `_ . - -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/sdk/tools/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. diff --git a/docs/src/sdk/tools/contents.rst b/docs/src/sdk/tools/contents.rst deleted file mode 100644 index 9c0c922..0000000 --- a/docs/src/sdk/tools/contents.rst +++ /dev/null @@ -1,9 +0,0 @@ -SDK Tools -================== - -.. toctree:: - :maxdepth: 2 - - analytics_dataset - analytics_imu - analytics_stamp diff --git a/docs/src/tools/calibration_tool.rst b/docs/src/tools/calibration_tool.rst deleted file mode 100644 index fd29d68..0000000 --- a/docs/src/tools/calibration_tool.rst +++ /dev/null @@ -1,269 +0,0 @@ -.. _calibration_tool: - -Calibration Tool Manual -======================= - -Introduction --------- - -1.1 Support Platform --------- - -Currently the calibration tool only supports Ubuntu 16.04 LTS, but support the official, ROS multiple version of OpenCV dependencies. - -==================== ==================== ====================== -Platform Architecture Different dependence -==================== ==================== ====================== -Ubuntu 16.04 LTS x64(amd64) libopencv-dev -Ubuntu 16.04 LTS x64(amd64) ros-kinetic-opencv3 -==================== ==================== ====================== - - - -1.2 Tools description --------- - -Deb/ppa installation package is available on Ubuntu. The architecture, dependencies, and versions will be distinguished from the name: - -* mynteye-s-calibrator-opencv-official-1.0.0_amd64.deb -* mynteye-s-calibrator-opencv-ros-kinetic-1.0.0_amd64.deb - -======================= ==================== ============================================================ -Dependency identifier Dependency package Detailed description -======================= ==================== ============================================================ -opencv-official libopencv-dev https://packages.ubuntu.com/xenial/libopencv-dev -opencv-ros-kinetic ros-kinetic-opencv3 http://wiki.ros.org/opencv3 -======================= ==================== ============================================================ - - -1.3 Deb Toolkit Get --------- - -==================== ======================================================================== -Method of Obtaining Get address -==================== ======================================================================== -Baidu Cloud https://pan.baidu.com/s/19rW0fPKUlQj6eldZpZFoAA Extraction code: a6ps -Google Drive https://drive.google.com/open?id=1RsV2WEKAsfxbn-Z5nGjk5g3ml1UDEsDc -==================== ======================================================================== - - -Installation --------- - -2.1 Installation Preparation --------- -* Ubuntu 16.04 LTS environment, x64 architecture -* Deb package for the calibration tool, select OpenCV dependencies as needed - (this step is not required for PPA installation) - -2.2 Install ppa Package --------- -.. code-block:: bash - - $ sudo add-apt-repository ppa:slightech/mynt-eye-s-sdk - $ sudo apt-get update - $ sudo apt-get install mynteye-s-calibrator - $ sudo ln -sf /opt/myntai/mynteye-s-calibrator/mynteye-s-calibrator /usr/local/bin/ mynteye-s-calibrator - - -2.3 Install deb Package --------- -Install the deb package with udo dpkg -i: - -.. code-block:: bash - - $ sudo dpkg -i mynteye-s-calibrator-opencv-official-1.0.0_amd64.deb - ... - (Reading database ... 359020 files and directories currently installed.) - Preparing to unpack mynteye-s-calibrator-opencv-official-1.0.0_amd64.deb ... - Unpacking mynteye-s-calibrator (1.0.0) over (1.0.0) ... - Setting up mynteye-s-calibrator (1.0.0) ... - -If you encounter an error that the dependency package is not installed, for example: - -.. code-block:: bash - - $ sudo dpkg -i mynteye-s-calibrator-opencv-official-1.0.0_amd64.deb - Selecting previously unselected package mynteye-s-calibrator. - (Reading database ... 358987 files and directories currently installed.) - Preparing to unpack mynteye-s-calibrator-opencv-official-1.0.0_amd64.deb ... - Unpacking mynteye-s-calibrator (1.0.0) ... - dpkg: dependency problems prevent configuration of mynteye-s-calibrator: - mynteye-s-calibrator depends on libatlas-base-dev; however: - Package libatlas-base-dev is not installed. - dpkg: error processing package mynteye-s-calibrator (--install): - dependency problems - leaving unconfigured - Errors were encountered while processing: - mynteye-s-calibrator - -You can continue use sudo apt-get -f install to finished install - -.. code-block:: bash - - $ sudo apt-get -f install - Reading package lists... Done - Building dependency tree - Reading state information... Done - Correcting dependencies... Done - The following additional packages will be installed: - libatlas-base-dev - Suggested packages: - libblas-doc liblapack-doc - The following NEW packages will be installed: - libatlas-base-dev - 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. - 1 not fully installed or removed. - Need to get 3,596 kB of archives. - After this operation, 30.8 MB of additional disk space will be used. - Do you want to continue? [Y/n] - Get:1 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 libatlas-base-dev amd64 3.10.2-9 [3,596 kB] - Fetched 3,596 kB in 3s (1,013 kB/s) - Selecting previously unselected package libatlas-base-dev. - (Reading database ... 358993 files and directories currently installed.) - Preparing to unpack .../libatlas-base-dev_3.10.2-9_amd64.deb ... - Unpacking libatlas-base-dev (3.10.2-9) ... - Setting up libatlas-base-dev (3.10.2-9) ... - update-alternatives: using /usr/lib/atlas-base/atlas/libblas.so to provide /usr/lib/libblas.so (libblas.so) in auto mode - update-alternatives: using /usr/lib/atlas-base/atlas/liblapack.so to provide /usr/lib/liblapack.so (liblapack.so) in auto mode - Setting up mynteye-s-calibrator (1.0.0) ... - - -How To Use --------- - -3.1 Preparation For Use --------- -* MYNT EYE S Camera -* Checkerboard -* Evenly illuminated scene - -3.2 Use Command --------- - -* After installing the calibration tool, you can run the `mynteye-s-calibrator` command directly on the terminal to calibrate. -h can see its options: - -.. code-block:: bash - - $ mynteye-s-calibrator -h - Usage: mynteye-s-calibrator [options] - help: mynteye-s-calibrator -h - calibrate: mynteye-s-calibrator -x 11 -y 7 -s 0.036 - Calibrate MYNT EYE S device. - -Options: - --h, --help show this help message and exit --x WIDTH, --width=WIDTH The chessboard width, default: 11 --y HEIGHT, --height=HEIGHT The chessboard height, default: 7 --s METERS, --square=METERS The chessboard square size in meters, default: 0.036 --n NUMBER, --number=NUMBER The number of imagestools to use for calibration, default: 11 --p PATH, --path=PATH The path to save the result, default: folder name using device's SN - -* -x -y -s Used to set the width, height, and grid size of the calibration plate. Width and height refer to the number of black and white intersections in the horizontal and vertical directions of the checkerboard. Square size in meters. - - -3.3 Steps For Usage --------- - -* First, connect the MYNT EYE S camera. - -* Then, run the mynteye-s-calibrator command in the terminal. - -.. image:: ../../images/tools/calibration001.png - :width: 60% - -* Follow the prompts to select an index for the camera's resolution, perform image calibration at this resolution - -* The S1030 camera only need calibrate 752*480 resolution. The S2100 camera need calibrate 2560*800 and 1280*400 resolutions. - -* As far as possible, let the calibration plate cover the left and right eye images of the camera, -and take care of the surroundings (maximum distortion). The calibration tool will automatically -evaluate the qualified image for the calibration calculation and will indicate on the terminal how many have been selected. - -Reference acquisition image, as follows: - -.. image:: ../../images/tools/calibration002.png - :width: 60% - -.. image:: ../../images/tools/calibration003.png - :width: 60% - -.. image:: ../../images/tools/calibration004.png - :width: 60% - -.. image:: ../../images/tools/calibration005.png - :width: 60% - -.. image:: ../../images/tools/calibration006.png - :width: 60% - - -* Note: p_x, p_y, size, skew respectively indicate the scale of the calibration plate on the x-axis, y-axis, - zoom, and tilt when the image is acquired. Make a point for reference. - -* Once the number of images acquired by the calibration needs is reached, - the calibration calculation will be performed. The output is as follows: - - -.. image:: ../../images/tools/calibration007.png - :width: 60% - - -* 1. The terminal will print out the left and right purpose calibration results. - -* 2. The calibration results will be written into the files in directory. - - a) camera_left.yaml: Left eye parameter - b) camera_right.yaml: Right eye parameter - c) extrinsics.yaml: Binocular external parameter - d) img.params.equidistant: Camera parameters, which can be used for S SDK writing - e) stereo_reprojection_error.yaml: Reprojection error - -* Finally, you will also be asked if you want to write to the camera device. Enter or `y` to confirm - -.. image:: ../../images/tools/calibration008.png - :width: 60% - -* After writing to the device, you will be prompted with "Write to device done". - - - -3.4 Calibration result --------- -Calibration result, It is desirable to have a reprojection error of 0.2 or less. If exceeds 1, it needs to be recalibrated. - -Reprojection error, visible output after calibration completion "Final reprojection error: 0.201 - -Pixels", or see the calibration result file "stereo_reprojection_error.yaml". - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/src/tools/contents.rst b/docs/src/tools/contents.rst deleted file mode 100644 index 8d8df5f..0000000 --- a/docs/src/tools/contents.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _tools: - -TOOLS SUPPORT -============== - -.. toctree:: - - calibration_tool From 3d29e62ccfaf4b676bf0025f4c686beb89ef6412 Mon Sep 17 00:00:00 2001 From: TinyO Date: Fri, 30 Aug 2019 12:01:24 +0800 Subject: [PATCH 02/13] chore(*): update readme. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 38efe91..2527eb2 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Init project, build samples and run someone. ```bash make init make samples -./samples/_output/bin/device/camera_d +./samples/_output/bin/camera_with_junior_device_api ``` ## Mirrors From 5e105b424ab86cbe2261d38d2a8ce921e545d4b5 Mon Sep 17 00:00:00 2001 From: wangruixue Date: Fri, 30 Aug 2019 15:38:24 +0800 Subject: [PATCH 03/13] ci(*): modify jenkinsfile --- Jenkinsfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 21737e9..e7489c2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -80,20 +80,22 @@ pipeline { post { always { echo 'This will always run' + /* dingTalk accessToken: '7dca6ae9b1b159b8b4b375e858b71f2e6cec8f73fa20d07552d09791261b2344', imageUrl: 'http://icon-park.com/imagefiles/loading7_gray.gif', message: '开始构建', jenkinsUrl: "${JENKINS_URL}" - + */ } success { echo 'This will run only if successful' + /* dingTalk accessToken: '7dca6ae9b1b159b8b4b375e858b71f2e6cec8f73fa20d07552d09791261b2344', imageUrl: 'http://icons.iconarchive.com/icons/paomedia/small-n-flat/1024/sign-check-icon.png', message: '构建成功', jenkinsUrl: "${JENKINS_URL}" - +*/ } failure { echo 'This will run only if failed' From ed2398fedc8c06c60a8b22e38b3028e639d333bc Mon Sep 17 00:00:00 2001 From: TinyO Date: Fri, 30 Aug 2019 15:03:36 +0800 Subject: [PATCH 04/13] refactor(*): doc and samples update tools contents. --- docs/src/sdk/control/auto_exposure.rst | 6 +- docs/src/sdk/control/framerate.rst | 6 +- docs/src/sdk/control/iic_address.rst | 4 +- docs/src/sdk/control/imu_low_pass_filter.rst | 4 +- docs/src/sdk/control/imu_range.rst | 6 +- docs/src/sdk/control/infrared.rst | 4 +- docs/src/sdk/control/manual_exposure.rst | 6 +- docs/src/sdk/data/contents.rst | 1 - docs/src/sdk/data/get_depth.rst | 4 +- docs/src/sdk/data/get_device_info.rst | 4 +- docs/src/sdk/data/get_disparity.rst | 2 +- docs/src/sdk/data/get_from_callbacks.rst | 2 +- docs/src/sdk/data/get_img_params.rst | 4 +- docs/src/sdk/data/get_imu.rst | 11 +- docs/src/sdk/data/get_imu_correspondence.rst | 4 +- docs/src/sdk/data/get_imu_params.rst | 2 +- docs/src/sdk/data/get_points.rst | 57 -- docs/src/sdk/data/get_stereo.rst | 2 +- docs/src/sdk/data/get_stereo_rectified.rst | 2 +- docs/src/sdk/data/get_with_plugin.rst | 2 +- docs/src/sdk/data/save_params.rst | 8 +- docs/src/sdk/data/save_single_image.rst | 2 +- docs/src/sdk/data/write_img_params.rst | 12 +- docs/src/sdk/data/write_imu_params.rst | 8 +- docs/src/sdk/project/cmake.rst | 2 +- docs/src/sdk/project/vs2017.rst | 2 +- samples/CMakeLists.txt | 36 ++ .../config/S1030/deprecated/img.params.old | 41 ++ .../config/S1030/deprecated/img.params.old2 | 30 + .../config/S1030/deprecated/img.params.old3 | 33 + .../config/S1030/deprecated/imu.params.old | 24 + samples/config/S1030/device.info | 10 + samples/config/S1030/img.params.equidistant | 28 + samples/config/S1030/img.params.pinhole | 38 ++ samples/config/S1030/imu.params | 33 + .../config/S210A/deprecated/img.params.old | 62 ++ .../config/S210A/deprecated/imu.params.old | 15 + samples/config/S210A/device.info | 12 + samples/config/S210A/img.params.equidistant | 51 ++ samples/config/S210A/img.params.pinhole | 62 ++ samples/config/S210A/imu.params | 33 + samples/device_writer.cc | 590 ++++++++++++++++++ samples/device_writer.h | 69 ++ samples/save_all_infos.cc | 43 ++ samples/write_device_info.cc | 41 ++ samples/write_img_params.cc | 41 ++ samples/write_imu_params.cc | 41 ++ 47 files changed, 1390 insertions(+), 110 deletions(-) delete mode 100644 docs/src/sdk/data/get_points.rst create mode 100644 samples/config/S1030/deprecated/img.params.old create mode 100644 samples/config/S1030/deprecated/img.params.old2 create mode 100644 samples/config/S1030/deprecated/img.params.old3 create mode 100644 samples/config/S1030/deprecated/imu.params.old create mode 100644 samples/config/S1030/device.info create mode 100644 samples/config/S1030/img.params.equidistant create mode 100644 samples/config/S1030/img.params.pinhole create mode 100644 samples/config/S1030/imu.params create mode 100644 samples/config/S210A/deprecated/img.params.old create mode 100644 samples/config/S210A/deprecated/imu.params.old create mode 100644 samples/config/S210A/device.info create mode 100644 samples/config/S210A/img.params.equidistant create mode 100644 samples/config/S210A/img.params.pinhole create mode 100644 samples/config/S210A/imu.params create mode 100644 samples/device_writer.cc create mode 100644 samples/device_writer.h create mode 100644 samples/save_all_infos.cc create mode 100644 samples/write_device_info.cc create mode 100644 samples/write_img_params.cc create mode 100644 samples/write_imu_params.cc diff --git a/docs/src/sdk/control/auto_exposure.rst b/docs/src/sdk/control/auto_exposure.rst index e117140..935699a 100644 --- a/docs/src/sdk/control/auto_exposure.rst +++ b/docs/src/sdk/control/auto_exposure.rst @@ -86,7 +86,7 @@ s1030: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_auto_exposure + $ ./samples/_output/bin/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 @@ -101,7 +101,7 @@ s2100/s210a: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_auto_exposure + $ ./samples/_output/bin/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 @@ -126,4 +126,4 @@ s2100/s210a: 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 `_ . +Complete code examples, see `ctrl_auto_exposure.cc `_ . diff --git a/docs/src/sdk/control/framerate.rst b/docs/src/sdk/control/framerate.rst index 37af436..a14e617 100644 --- a/docs/src/sdk/control/framerate.rst +++ b/docs/src/sdk/control/framerate.rst @@ -67,7 +67,7 @@ s1030: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_framerate + $ ./samples/_output/bin/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 @@ -82,7 +82,7 @@ s2100/s210a: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_framerate + $ ./samples/_output/bin/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 @@ -105,4 +105,4 @@ s2100/s210a: 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 `_ . +Complete code samples,please see `ctrl_framerate.cc `_ . diff --git a/docs/src/sdk/control/iic_address.rst b/docs/src/sdk/control/iic_address.rst index 25587f2..352e22c 100644 --- a/docs/src/sdk/control/iic_address.rst +++ b/docs/src/sdk/control/iic_address.rst @@ -37,7 +37,7 @@ s210a/s2100: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_iic_adress + $ ./samples/_output/bin/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 @@ -55,4 +55,4 @@ s210a/s2100: 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 `_ . +Complete code samples,please see `ctrl_iic_address.cc `_ . diff --git a/docs/src/sdk/control/imu_low_pass_filter.rst b/docs/src/sdk/control/imu_low_pass_filter.rst index 096f3df..4590e91 100644 --- a/docs/src/sdk/control/imu_low_pass_filter.rst +++ b/docs/src/sdk/control/imu_low_pass_filter.rst @@ -37,7 +37,7 @@ Reference running results on Linux: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_imu_low_pass_filter + $ ./samples/_output/bin/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 @@ -60,4 +60,4 @@ Reference running results on Linux: 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 `_ 。 +Complete code samples,please see `ctrl_imu_low_pass_filter.cc `_ 。 diff --git a/docs/src/sdk/control/imu_range.rst b/docs/src/sdk/control/imu_range.rst index 9e63271..4248fcf 100644 --- a/docs/src/sdk/control/imu_range.rst +++ b/docs/src/sdk/control/imu_range.rst @@ -67,7 +67,7 @@ s1030: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_imu_range + $ ./samples/_output/bin/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 @@ -82,7 +82,7 @@ s2100/s210a: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_imu_range + $ ./samples/_output/bin/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 @@ -105,4 +105,4 @@ s2100/s210a: 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 `_. +Complete code samples,please see `ctrl_imu_range.cc `_. diff --git a/docs/src/sdk/control/infrared.rst b/docs/src/sdk/control/infrared.rst index 6d01e29..83bf925 100644 --- a/docs/src/sdk/control/infrared.rst +++ b/docs/src/sdk/control/infrared.rst @@ -33,7 +33,7 @@ Reference running results on Linux: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_infrared + $ ./samples/_output/bin/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 @@ -51,4 +51,4 @@ At this point, if the image is displayed, you can see IR speckle on the image, a 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 `_ . +Complete code samples,see `ctrl_infrared.cc `_ . diff --git a/docs/src/sdk/control/manual_exposure.rst b/docs/src/sdk/control/manual_exposure.rst index c95f9ee..da944f0 100644 --- a/docs/src/sdk/control/manual_exposure.rst +++ b/docs/src/sdk/control/manual_exposure.rst @@ -71,7 +71,7 @@ s1030: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_manual_exposure + $ ./samples/_output/bin/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 @@ -85,7 +85,7 @@ s2100/s210a: .. code-block:: bash - $ ./samples/_output/bin/tutorials/ctrl_manual_exposure + $ ./samples/_output/bin/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 @@ -107,4 +107,4 @@ s2100/s210a: 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 `_ . +Complete code samples,see `ctrl_manual_exposure.cc `_ . diff --git a/docs/src/sdk/data/contents.rst b/docs/src/sdk/data/contents.rst index 7f5de77..a381091 100644 --- a/docs/src/sdk/data/contents.rst +++ b/docs/src/sdk/data/contents.rst @@ -12,7 +12,6 @@ SDK Data Samples get_stereo_rectified get_disparity get_depth - get_points get_imu get_imu_correspondence get_from_callbacks diff --git a/docs/src/sdk/data/get_depth.rst b/docs/src/sdk/data/get_depth.rst index 0e178a2..13f41c2 100644 --- a/docs/src/sdk/data/get_depth.rst +++ b/docs/src/sdk/data/get_depth.rst @@ -47,8 +47,8 @@ Reference code snippet: 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 `_ . +Complete code examples, see `get_depth.cc `_ . .. tip:: -Preview the value of a region of the depth image, see `get_depth_with_region.cc `_ . +Preview the value of a region of the depth image, see `get_depth_with_region.cc `_ . diff --git a/docs/src/sdk/data/get_device_info.rst b/docs/src/sdk/data/get_device_info.rst index 33ffdcf..afa5e95 100644 --- a/docs/src/sdk/data/get_device_info.rst +++ b/docs/src/sdk/data/get_device_info.rst @@ -24,7 +24,7 @@ Reference result on Linux: .. code-block:: bash - $ ./samples/_output/bin/tutorials/get_device_info + $ ./samples/_output/bin/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 @@ -38,4 +38,4 @@ Reference result on Linux: 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 `_ . +Complete code examples, see `get_device_info.cc `_ . diff --git a/docs/src/sdk/data/get_disparity.rst b/docs/src/sdk/data/get_disparity.rst index f2acb0b..59799bf 100644 --- a/docs/src/sdk/data/get_disparity.rst +++ b/docs/src/sdk/data/get_disparity.rst @@ -59,4 +59,4 @@ Reference code snippet: 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 `_ . +Complete code examples, see `get_disparity.cc `_ . diff --git a/docs/src/sdk/data/get_from_callbacks.rst b/docs/src/sdk/data/get_from_callbacks.rst index d9ae0a6..b6df3c0 100644 --- a/docs/src/sdk/data/get_from_callbacks.rst +++ b/docs/src/sdk/data/get_from_callbacks.rst @@ -116,4 +116,4 @@ Reference code snippet: 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 `_ . +Complete code examples, see `get_from_callbacks.cc `_ . diff --git a/docs/src/sdk/data/get_img_params.rst b/docs/src/sdk/data/get_img_params.rst index b2e05f1..bd68bfb 100644 --- a/docs/src/sdk/data/get_img_params.rst +++ b/docs/src/sdk/data/get_img_params.rst @@ -27,7 +27,7 @@ Reference result on Linux: .. code-block:: bash - $ ./samples/_output/bin/tutorials/get_img_params + $ ./samples/_output/bin/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 @@ -36,4 +36,4 @@ Reference result on Linux: 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 `_ . +Complete code examples, see `get_img_params.cc `_ . diff --git a/docs/src/sdk/data/get_imu.rst b/docs/src/sdk/data/get_imu.rst index 99b961f..5039a85 100644 --- a/docs/src/sdk/data/get_imu.rst +++ b/docs/src/sdk/data/get_imu.rst @@ -47,8 +47,13 @@ Sample code snippet: */ painter.DrawImgData(img, *left_data.img); - if (!motion_datas.empty()) { - painter.DrawImuData(img, *motion_datas[0].imu); + static std::vector motion_datas_s = motion_datas; + + if (!motion_datas.empty() && motion_datas.size() > 0) { + motion_datas_s = motion_datas; + } + if (!motion_datas_s.empty() && motion_datas_s.size() > 0) { + painter.DrawImuData(img, *motion_datas_s[0].imu); } cv::imshow("frame", img); @@ -63,4 +68,4 @@ Sample code snippet: 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 `_ . +Complete code examples, see `get_imu.cc `_ . diff --git a/docs/src/sdk/data/get_imu_correspondence.rst b/docs/src/sdk/data/get_imu_correspondence.rst index 0266bb2..b496a50 100644 --- a/docs/src/sdk/data/get_imu_correspondence.rst +++ b/docs/src/sdk/data/get_imu_correspondence.rst @@ -58,7 +58,7 @@ Reference result on Linux: .. code-block:: bash - $ ./samples/_output/bin/tutorials/get_imu_correspondence + $ ./samples/_output/bin/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 @@ -106,4 +106,4 @@ Reference result on Linux: 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 `_ . +Complete code examples, see `get_imu_correspondence.cc `_ . diff --git a/docs/src/sdk/data/get_imu_params.rst b/docs/src/sdk/data/get_imu_params.rst index c7c5043..9bd44f7 100644 --- a/docs/src/sdk/data/get_imu_params.rst +++ b/docs/src/sdk/data/get_imu_params.rst @@ -15,4 +15,4 @@ Reference commands: LOG(INFO) << "Motion extrinsics left to imu: {" << api->GetMotionExtrinsics(Stream::LEFT) << "}"; -Complete code examples, see `get_imu_params.cc `_ . +Complete code examples, see `get_imu_params.cc `_ . diff --git a/docs/src/sdk/data/get_points.rst b/docs/src/sdk/data/get_points.rst deleted file mode 100644 index 767b4e6..0000000 --- a/docs/src/sdk/data/get_points.rst +++ /dev/null @@ -1,57 +0,0 @@ -.. _data_get_points: - -Get Point Image -================ - -Point images belongs to upper layer of synthetic data. To get this kind of data through ``GetStreamData()``, you need to start the ``EnableStreamData()`` beforehand. It should be check not empty before use. - -For detail 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` for detail. - -Sample code snippet: - -.. code-block:: c++ - - auto &&api = API::Create(argc, argv); - - api->EnableStreamData(Stream::POINTS); - - api->Start(Source::VIDEO_STREAMING); - - cv::namedWindow("frame"); - PCViewer pcviewer; - - 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 &&points_data = api->GetStreamData(Stream::POINTS); - if (!points_data.frame.empty()) { - pcviewer.Update(points_data.frame); - } - - char key = static_cast(cv::waitKey(1)); - if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q - break; - } - if (pcviewer.WasStopped()) { - break; - } - } - - api->Stop(Source::VIDEO_STREAMING); - -`PCL `_ is used to display point images above. Program will close when point image window is closed. - -Complete code examples, see `get_points.cc `_ . - -.. attention:: - - Sample code only compiles when `PCL `_ is ready. If your PCL was installed in a different directory, please set ``CMAKE_PREFIX_PATH`` in `tutorials/CMakeLists.txt `_ to the path of ``PCLConfig.cmake`` . You can find ``CMAKE_PREFIX_PATH`` near ``find_package(PCL)`` . diff --git a/docs/src/sdk/data/get_stereo.rst b/docs/src/sdk/data/get_stereo.rst index 8e1f8ab..f746d6b 100644 --- a/docs/src/sdk/data/get_stereo.rst +++ b/docs/src/sdk/data/get_stereo.rst @@ -37,4 +37,4 @@ Reference commands: 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_stereo.cc `_ . +Complete code examples, see `get_stereo.cc `_ . diff --git a/docs/src/sdk/data/get_stereo_rectified.rst b/docs/src/sdk/data/get_stereo_rectified.rst index 8875a55..28ebd61 100644 --- a/docs/src/sdk/data/get_stereo_rectified.rst +++ b/docs/src/sdk/data/get_stereo_rectified.rst @@ -48,4 +48,4 @@ Reference code snippet: OpenCV is used to display the image above. Select the display window, press ``ESC/Q`` to exit the program. -Complete code examples, see `get_stereo_rectified.cc `_ . +Complete code examples, see `get_stereo_rectified.cc `_ . diff --git a/docs/src/sdk/data/get_with_plugin.rst b/docs/src/sdk/data/get_with_plugin.rst index 1f7c91a..072461b 100644 --- a/docs/src/sdk/data/get_with_plugin.rst +++ b/docs/src/sdk/data/get_with_plugin.rst @@ -83,7 +83,7 @@ In addition, the following command can be executed to check whether the dependen If the plugin's dependent library is not found, it will report an error \"Open plugin failed\" when loading. -Complete code sample, see `get_with_plugin.cc `_ . +Complete code sample, see `get_with_plugin.cc `_ . .. tip:: diff --git a/docs/src/sdk/data/save_params.rst b/docs/src/sdk/data/save_params.rst index ec36086..45cd55e 100644 --- a/docs/src/sdk/data/save_params.rst +++ b/docs/src/sdk/data/save_params.rst @@ -3,22 +3,22 @@ Save Device Infomation And Parameters ===================================== -The SDK provides a tool ``save_all_infos`` for save information and parameters. For more information, please read `tools/README.md `_ . +The SDK provides a tool ``save_all_infos`` for save information and parameters. Reference commands: .. code-block:: bash - ./tools/_output/bin/writer/save_all_infos + ./samples/_output/bin/save_all_infos # Windows - .\tools\_output\bin\writer\save_all_infos.bat + .\samples\_output\bin\save_all_infos.bat Reference result on Linux: .. code-block:: bash - $ ./tools/_output/bin/writer/save_all_infos + $ ./samples/_output/bin/save_all_infos I0512 21:40:08.687088 4092 utils.cc:26] Detecting MYNT EYE devices I0512 21:40:09.366693 4092 utils.cc:33] MYNT EYE devices: I0512 21:40:09.366734 4092 utils.cc:37] index: 0, name: MYNT-EYE-S1000 diff --git a/docs/src/sdk/data/save_single_image.rst b/docs/src/sdk/data/save_single_image.rst index b8ab965..8cbe818 100644 --- a/docs/src/sdk/data/save_single_image.rst +++ b/docs/src/sdk/data/save_single_image.rst @@ -49,4 +49,4 @@ Reference commands: 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 `save_single_image.cc `_ . +Complete code examples, see `save_single_image.cc `_ . diff --git a/docs/src/sdk/data/write_img_params.rst b/docs/src/sdk/data/write_img_params.rst index 06b3f57..9911b9c 100644 --- a/docs/src/sdk/data/write_img_params.rst +++ b/docs/src/sdk/data/write_img_params.rst @@ -3,7 +3,7 @@ Write Image Parameters ======================= -The SDK provides a tool ``img_params_writer`` for writing image parameters. For details, read `tools/README.md `_ . +The SDK provides a tool ``write_img_params`` for writing image parameters. For getting image parameters, please read :ref:`get_img_params`. This is used to calculate the deviation. @@ -11,21 +11,21 @@ Reference commands: .. code-block:: bash - ./tools/_output/bin/writer/img_params_writer tools/writer/config/img.params + ./samples/_output/bin/write_img_params samples/config/img.params # Windows - .\tools\_output\bin\writer\img_params_writer.bat tools\writer\config\img.params + .\samples\_output\bin\write_img_params.bat samples\config\img.params .. warning:: Please don't override parameters, you can use ``save_all_infos`` to backup parameters. -And, `tools/writer/config/S1030/img.params.pinhole `_ is the path of S1030 pihole parameters file. If you calibrated parameters yourself, you can edit it and run previous commands to write them into the devices. +And, `samples/config/S1030/img.params.pinhole `_ is the path of S1030 pihole parameters file. If you calibrated parameters yourself, you can edit it and run previous commands to write them into the devices. .. tip:: - 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`` + The image calibration parameters of S2100/S210A are in ``samples/config/S210A`` + The image calibration parameters of S1030 are in ``samples/config/S1030`` .. tip:: diff --git a/docs/src/sdk/data/write_imu_params.rst b/docs/src/sdk/data/write_imu_params.rst index b91f50a..88864cb 100644 --- a/docs/src/sdk/data/write_imu_params.rst +++ b/docs/src/sdk/data/write_imu_params.rst @@ -3,7 +3,7 @@ Write IMU Parameters ===================== -SDK provides the tool ``imu_params_writer`` to write IMU parameters. For deltail, please read `tools/README.md `_ . +SDK provides the tool ``write_imu_params`` to write IMU parameters. Information about how to get IMU parameters, please read :ref:`get_imu_params` . @@ -11,12 +11,12 @@ Reference commands: .. code-block:: bash - ./tools/_output/bin/writer/imu_params_writer tools/writer/config/imu.params + ./samples/_output/bin/write_imu_params samples/config/imu.params # Windows - .\tools\_output\bin\writer\imu_params_writer.bat tools\writer\config\imu.params + .\samples\_output\bin\write_imu_params.bat samples\config\imu.params -The path of parameters file can be found in `tools/writer/config/img.params `_ . If you calibrated the parameters yourself, you can edit the file and run above commands to write them into the device. +The path of parameters file can be found in `samples/config/img.params `_ . If you calibrated the parameters yourself, you can edit the file and run above commands to write them into the device. .. warning:: diff --git a/docs/src/sdk/project/cmake.rst b/docs/src/sdk/project/cmake.rst index a15c5de..1f96361 100644 --- a/docs/src/sdk/project/cmake.rst +++ b/docs/src/sdk/project/cmake.rst @@ -5,7 +5,7 @@ How to use SDK with CMake This tutorial will create a project with CMake to start using SDK. - You could find the project demo in ``/platforms/projects/cmake directory`` . + You could find the project demo in ``/samples/simple_demo/project_cmake directory`` . Preparation ----------- diff --git a/docs/src/sdk/project/vs2017.rst b/docs/src/sdk/project/vs2017.rst index 605a999..31f4aa6 100644 --- a/docs/src/sdk/project/vs2017.rst +++ b/docs/src/sdk/project/vs2017.rst @@ -5,7 +5,7 @@ How to use SDK with Visual Studio 2017 This tutorial will create a project with Visual Studio 2017 to start using SDK. - You could find the project demo in ``/platforms/projects/vs2017`` directory. + You could find the project demo in ``/samples/simple_demo/project_vs2017`` directory. Preparation ------------ diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 2e7b8db..74212b8 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -242,4 +242,40 @@ if(WITH_API) endif() endif() +## device_writer + +add_library(device_writer STATIC device_writer.cc) +target_link_libraries(device_writer mynteye ${OpenCV_LIBS}) + +## device_info_writer + +make_executable(write_device_info + SRCS write_device_info.cc + LINK_LIBS device_writer + DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} +) + +## img_params_writer + +make_executable(write_img_params + SRCS write_img_params.cc + LINK_LIBS device_writer + DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} +) + +## imu_params_writer + +make_executable(write_imu_params + SRCS write_imu_params.cc + LINK_LIBS device_writer + DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} +) + +## save_all_infos + +make_executable(save_all_infos + SRCS save_all_infos.cc + LINK_LIBS device_writer + DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} +) diff --git a/samples/config/S1030/deprecated/img.params.old b/samples/config/S1030/deprecated/img.params.old new file mode 100644 index 0000000..54f6f39 --- /dev/null +++ b/samples/config/S1030/deprecated/img.params.old @@ -0,0 +1,41 @@ +%YAML:1.0 +--- +M1: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 7.3638305001095546e+02, 0., 3.5691961817119693e+02, 0., + 7.2350066150722432e+02, 2.1727271340923883e+02, 0., 0., 1. ] +D1: !!opencv-matrix + rows: 1 + cols: 14 + dt: d + data: [ -5.4898645145016478e-01, 5.2837141203888638e-01, 0., 0., 0., + 0., 0., 4.3563985766435476e-01, 0., 0., 0., 0., 0., 0. ] +M2: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 7.3638305001095546e+02, 0., 4.5668367112303980e+02, 0., + 7.2350066150722432e+02, 2.5070083335536796e+02, 0., 0., 1. ] +D2: !!opencv-matrix + rows: 1 + cols: 14 + dt: d + data: [ -5.1012886039889305e-01, 3.8764476500996770e-01, 0., 0., 0., + 0., 0., 2.5629798245273044e-01, 0., 0., 0., 0., 0., 0. ] +R: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 9.9701893306553813e-01, -9.5378124886236681e-04, + -7.7151392794850615e-02, 1.4493996762830500e-03, + 9.9997867219985104e-01, 6.3682325649414354e-03, + 7.7143673424555026e-02, -6.4610716411527686e-03, + 9.9699905125522237e-01 ] +T: !!opencv-matrix + rows: 3 + cols: 1 + dt: d + data: [ -1.1888991734400047e+02, -4.5605803870530912e-02, + -3.9531373691193386e+00 ] diff --git a/samples/config/S1030/deprecated/img.params.old2 b/samples/config/S1030/deprecated/img.params.old2 new file mode 100644 index 0000000..350a171 --- /dev/null +++ b/samples/config/S1030/deprecated/img.params.old2 @@ -0,0 +1,30 @@ +%YAML:1.0 +--- +in_left: + width: 752 + height: 480 + fx: 3.6220059643202876e+02 + fy: 3.6350065250745848e+02 + cx: 4.0658699068023441e+02 + cy: 2.3435161110061483e+02 + model: 0 + coeffs: [ -2.5034765682756088e-01, 5.0579399202897619e-02, + -7.0536676161976066e-04, -8.5255451307033846e-03, 0. ] +in_right: + width: 752 + height: 480 + fx: 3.6514014888558478e+02 + fy: 3.6513385298966961e+02 + cx: 3.8932395100630907e+02 + cy: 2.3495160212312547e+02 + model: 0 + coeffs: [ -3.0377346762098512e-01, 7.9929693673999838e-02, + 5.1547517530716883e-05, -6.7345903740579250e-04, 0. ] +ex_right_to_left: + rotation: [ 9.9867908939669447e-01, -6.3445566137485428e-03, + 5.0988459509619687e-02, 5.9890316389333252e-03, + 9.9995670037792639e-01, 7.1224201868366971e-03, + -5.1031440326695092e-02, -6.8076406092671274e-03, + 9.9867384471984544e-01 ] + translation: [ -1.2002489764113250e+02, -1.1782637409050747e+00, + -5.2058205159996538e+00 ] diff --git a/samples/config/S1030/deprecated/img.params.old3 b/samples/config/S1030/deprecated/img.params.old3 new file mode 100644 index 0000000..28d2f6a --- /dev/null +++ b/samples/config/S1030/deprecated/img.params.old3 @@ -0,0 +1,33 @@ +%YAML:1.0 +--- +version: "1.0" +img_params_map: + - + in_left: + width: 752 + height: 480 + fx: 3.6220059643202876e+02 + fy: 3.6350065250745848e+02 + cx: 4.0658699068023441e+02 + cy: 2.3435161110061483e+02 + model: 0 + coeffs: [ -2.5034765682756088e-01, 5.0579399202897619e-02, + -7.0536676161976066e-04, -8.5255451307033846e-03, 0. ] + in_right: + width: 752 + height: 480 + fx: 3.6514014888558478e+02 + fy: 3.6513385298966961e+02 + cx: 3.8932395100630907e+02 + cy: 2.3495160212312547e+02 + model: 0 + coeffs: [ -3.0377346762098512e-01, 7.9929693673999838e-02, + 5.1547517530716883e-05, -6.7345903740579250e-04, 0. ] + ex_right_to_left: + rotation: [ 9.9867908939669447e-01, -6.3445566137485428e-03, + 5.0988459509619687e-02, 5.9890316389333252e-03, + 9.9995670037792639e-01, 7.1224201868366971e-03, + -5.1031440326695092e-02, -6.8076406092671274e-03, + 9.9867384471984544e-01 ] + translation: [ -1.2002489764113250e+02, -1.1782637409050747e+00, + -5.2058205159996538e+00 ] diff --git a/samples/config/S1030/deprecated/imu.params.old b/samples/config/S1030/deprecated/imu.params.old new file mode 100644 index 0000000..4500d4e --- /dev/null +++ b/samples/config/S1030/deprecated/imu.params.old @@ -0,0 +1,24 @@ +%YAML:1.0 +--- +in_accel: + scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] + drift: [ 0., 0., 0. ] + noise: [ 1.6925432397973516e-02, 1.6735310195561025e-02, + 1.7452487504590969e-02 ] + bias: [ 1.9031356589714596e-04, 1.6996777864587261e-04, + 5.4490537096493644e-04 ] +in_gyro: + scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] + drift: [ 0., 0., 0. ] + noise: [ 1.0848026158819934e-03, 1.2466367883501759e-03, + 1.1003229919806443e-03 ] + bias: [ 2.3404834136742844e-05, 2.3596771567764949e-05, + 1.4970418056326829e-05 ] +ex_left_to_imu: + rotation: [ -6.4662000000000001e-03, -9.9994994000000004e-01, + -7.6356499999999999e-03, 9.9997908999999996e-01, + -6.4656599999999998e-03, -9.5580000000000003e-05, + 4.6199999999999998e-05, -7.6361099999999998e-03, + 9.9997084000000003e-01 ] + translation: [ 5.3364600000000003e-03, -4.3029220000000000e-02, + 2.3031240000000001e-02 ] diff --git a/samples/config/S1030/device.info b/samples/config/S1030/device.info new file mode 100644 index 0000000..0c9e26b --- /dev/null +++ b/samples/config/S1030/device.info @@ -0,0 +1,10 @@ +%YAML:1.0 +--- +device_name: MYNT-EYE-S1030 +serial_number: "02811F3B00090807" +firmware_version: "2.2" +hardware_version: "2.0" +spec_version: "1.0" +lens_type: "0000" +imu_type: "0000" +nominal_baseline: 120 diff --git a/samples/config/S1030/img.params.equidistant b/samples/config/S1030/img.params.equidistant new file mode 100644 index 0000000..06600b5 --- /dev/null +++ b/samples/config/S1030/img.params.equidistant @@ -0,0 +1,28 @@ +%YAML:1.0 +--- +version: "1.2" +img_params: + - + model: 1 + width: 752 + height: 480 + in_left: + # coeffs: k2,k3,k4,k5,mu,mv,u0,v0 + coeffs: [ -1.3549950401924169e-02, -3.2306077263853893e-02, + 5.3814579203036512e-02, -3.6663721418756977e-02, + 3.6797709792391299e+02, 3.6808712539453859e+02, + 3.7414963027144353e+02, 2.3125000326472903e+02 ] + in_right: + # coeffs: k2,k3,k4,k5,mu,mv,u0,v0 + coeffs: [ -1.8964880945048872e-02, -2.6172447729615463e-02, + 4.0863326732708288e-02, -2.1522718578606163e-02, + 3.6807315003638877e+02, 3.6806204885853174e+02, + 3.8499216569965887e+02, 2.3183027347834383e+02 ] + ex_right_to_left: + rotation: [ 9.9867908939669447e-01, -6.3445566137485428e-03, + 5.0988459509619687e-02, 5.9890316389333252e-03, + 9.9995670037792639e-01, 7.1224201868366971e-03, + -5.1031440326695092e-02, -6.8076406092671274e-03, + 9.9867384471984544e-01 ] + translation: [ -1.2002489764113250e+02, -1.1782637409050747e+00, + -5.2058205159996538e+00 ] diff --git a/samples/config/S1030/img.params.pinhole b/samples/config/S1030/img.params.pinhole new file mode 100644 index 0000000..a375acc --- /dev/null +++ b/samples/config/S1030/img.params.pinhole @@ -0,0 +1,38 @@ +%YAML:1.0 +--- +version: "1.2" +img_params: + - + model: 0 + width: 752 + height: 480 + in_left: + # [fx 0 cx] + # [ 0 fy cy] + # [ 0 0 1] + fx: 3.6220059643202876e+02 + fy: 3.6350065250745848e+02 + cx: 4.0658699068023441e+02 + cy: 2.3435161110061483e+02 + # coeffs: k1,k2,p1,p2,k3 + coeffs: [ -2.5034765682756088e-01, 5.0579399202897619e-02, + -7.0536676161976066e-04, -8.5255451307033846e-03, 0. ] + in_right: + # [fx 0 cx] + # [ 0 fy cy] + # [ 0 0 1] + fx: 3.6514014888558478e+02 + fy: 3.6513385298966961e+02 + cx: 3.8932395100630907e+02 + cy: 2.3495160212312547e+02 + # coeffs: k1,k2,p1,p2,k3 + coeffs: [ -3.0377346762098512e-01, 7.9929693673999838e-02, + 5.1547517530716883e-05, -6.7345903740579250e-04, 0. ] + ex_right_to_left: + rotation: [ 9.9867908939669447e-01, -6.3445566137485428e-03, + 5.0988459509619687e-02, 5.9890316389333252e-03, + 9.9995670037792639e-01, 7.1224201868366971e-03, + -5.1031440326695092e-02, -6.8076406092671274e-03, + 9.9867384471984544e-01 ] + translation: [ -1.2002489764113250e+02, -1.1782637409050747e+00, + -5.2058205159996538e+00 ] diff --git a/samples/config/S1030/imu.params b/samples/config/S1030/imu.params new file mode 100644 index 0000000..93ad7e8 --- /dev/null +++ b/samples/config/S1030/imu.params @@ -0,0 +1,33 @@ +%YAML:1.0 +--- +version: "1.2" +in_accel: + scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] + assembly: [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] + drift: [ 0., 0., 0. ] + noise: [ 1.6925432397973516e-02, 1.6735310195561025e-02, + 1.7452487504590969e-02 ] + bias: [ 1.9031356589714596e-04, 1.6996777864587261e-04, + 5.4490537096493644e-04 ] + x: [ 0.0, 0.0 ] + y: [ 0.0, 0.0 ] + z: [ 0.0, 0.0 ] +in_gyro: + scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] + assembly: [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] + drift: [ 0., 0., 0. ] + noise: [ 1.0848026158819934e-03, 1.2466367883501759e-03, + 1.1003229919806443e-03 ] + bias: [ 2.3404834136742844e-05, 2.3596771567764949e-05, + 1.4970418056326829e-05 ] + x: [ 0.0, 0.0 ] + y: [ 0.0, 0.0 ] + z: [ 0.0, 0.0 ] +ex_left_to_imu: + rotation: [ -6.4662000000000001e-03, -9.9994994000000004e-01, + -7.6356499999999999e-03, 9.9997908999999996e-01, + -6.4656599999999998e-03, -9.5580000000000003e-05, + 4.6199999999999998e-05, -7.6361099999999998e-03, + 9.9997084000000003e-01 ] + translation: [ 5.3364600000000003e-03, -4.3029220000000000e-02, + 2.3031240000000001e-02 ] diff --git a/samples/config/S210A/deprecated/img.params.old b/samples/config/S210A/deprecated/img.params.old new file mode 100644 index 0000000..a368dbb --- /dev/null +++ b/samples/config/S210A/deprecated/img.params.old @@ -0,0 +1,62 @@ +%YAML:1.0 +--- +version: "1.1" +img_params_map: + - + in_left: + width: 640 + height: 400 + fx: 1.9739641213416058e+02 + fy: 1.9772337597617189e+02 + cx: 3.2611983633916327e+02 + cy: 1.9986969132833946e+02 + model: 0 + coeffs: [ 1.2135236310725651e-01, -8.5442776049177036e-02, + 2.4914898631983504e-03, -3.7752063658256863e-03, 0. ] + in_right: + width: 640 + height: 400 + fx: 2.0335498653655989e+02 + fy: 2.0453858622699008e+02 + cx: 3.1589962248180814e+02 + cy: 2.1871688038954812e+02 + model: 0 + coeffs: [ 2.2904330559241560e-02, -2.9561990079971841e-02, + 3.9725942760981507e-03, -3.9689073214945591e-03, 0. ] + ex_right_to_left: + rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, + -4.3917309443490191e-03, 1.8166060642710027e-03, + 9.9968925981619028e-01, -2.4861290203142431e-02, + 4.4382582477776426e-03, 2.4853026274046636e-02, + 9.9968126367795229e-01 ] + translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, + 2.2588034344482368e+00 ] + - + in_left: + width: 1280 + height: 800 + fx: 1.9739641213416058e+02 + fy: 1.9772337597617189e+02 + cx: 3.2611983633916327e+02 + cy: 1.9986969132833946e+02 + model: 0 + coeffs: [ 1.2135236310725651e-01, -8.5442776049177036e-02, + 2.4914898631983504e-03, -3.7752063658256863e-03, 0. ] + in_right: + width: 1280 + height: 800 + fx: 2.0335498653655989e+02 + fy: 2.0453858622699008e+02 + cx: 3.1589962248180814e+02 + cy: 2.1871688038954812e+02 + model: 0 + coeffs: [ 2.2904330559241560e-02, -2.9561990079971841e-02, + 3.9725942760981507e-03, -3.9689073214945591e-03, 0. ] + ex_right_to_left: + rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, + -4.3917309443490191e-03, 1.8166060642710027e-03, + 9.9968925981619028e-01, -2.4861290203142431e-02, + 4.4382582477776426e-03, 2.4853026274046636e-02, + 9.9968126367795229e-01 ] + translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, + 2.2588034344482368e+00 ] diff --git a/samples/config/S210A/deprecated/imu.params.old b/samples/config/S210A/deprecated/imu.params.old new file mode 100644 index 0000000..070f13a --- /dev/null +++ b/samples/config/S210A/deprecated/imu.params.old @@ -0,0 +1,15 @@ +%YAML:1.0 +--- +in_accel: + scale: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] + drift: [ 0., 0., 0. ] + noise: [ 0., 0., 0. ] + bias: [ 0., 0., 0. ] +in_gyro: + scale: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] + drift: [ 0., 0., 0. ] + noise: [ 0., 0., 0. ] + bias: [ 0., 0., 0. ] +ex_left_to_imu: + rotation: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] + translation: [ 0., 0., 0. ] diff --git a/samples/config/S210A/device.info b/samples/config/S210A/device.info new file mode 100644 index 0000000..d7f4e16 --- /dev/null +++ b/samples/config/S210A/device.info @@ -0,0 +1,12 @@ +%YAML:1.0 +--- +device_name: MYNT-EYE-S210A +serial_number: "07C40D1C0009071F" +firmware_version: "1.1" +hardware_version: "1.0" +spec_version: "1.2" +lens_type: "0001" +imu_type: "0001" +nominal_baseline: 80 +auxiliary_chip_version: "1.0" +isp_version: "1.0" diff --git a/samples/config/S210A/img.params.equidistant b/samples/config/S210A/img.params.equidistant new file mode 100644 index 0000000..8949748 --- /dev/null +++ b/samples/config/S210A/img.params.equidistant @@ -0,0 +1,51 @@ +%YAML:1.0 +--- +version: "1.2" +img_params: + # There are two params of resolution [640x400], [1280x800]. + # If you only set one of them, write will keep another params if it exists. + - + model: 1 + width: 640 + height: 400 + in_left: + # coeffs: k2,k3,k4,k5,mu,mv,u0,v0 + coeffs: [ -1.3549950401924169e-02, -3.2306077263853893e-02, + 5.3814579203036512e-02, -3.6663721418756977e-02, + 3.6797709792391299e+02, 3.6808712539453859e+02, + 3.7414963027144353e+02, 2.3125000326472903e+02 ] + in_right: + coeffs: [ -1.8964880945048872e-02, -2.6172447729615463e-02, + 4.0863326732708288e-02, -2.1522718578606163e-02, + 3.6807315003638877e+02, 3.6806204885853174e+02, + 3.8499216569965887e+02, 2.3183027347834383e+02 ] + ex_right_to_left: + rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, + -4.3917309443490191e-03, 1.8166060642710027e-03, + 9.9968925981619028e-01, -2.4861290203142431e-02, + 4.4382582477776426e-03, 2.4853026274046636e-02, + 9.9968126367795229e-01 ] + translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, + 2.2588034344482368e+00 ] + - + model: 1 + width: 1280 + height: 800 + in_left: + coeffs: [ -1.3549950401924169e-02, -3.2306077263853893e-02, + 5.3814579203036512e-02, -3.6663721418756977e-02, + 3.6797709792391299e+02, 3.6808712539453859e+02, + 3.7414963027144353e+02, 2.3125000326472903e+02 ] + in_right: + coeffs: [ -1.3549950401924169e-02, -3.2306077263853893e-02, + 5.3814579203036512e-02, -3.6663721418756977e-02, + 3.6797709792391299e+02, 3.6808712539453859e+02, + 3.7414963027144353e+02, 2.3125000326472903e+02 ] + ex_right_to_left: + rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, + -4.3917309443490191e-03, 1.8166060642710027e-03, + 9.9968925981619028e-01, -2.4861290203142431e-02, + 4.4382582477776426e-03, 2.4853026274046636e-02, + 9.9968126367795229e-01 ] + translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, + 2.2588034344482368e+00 ] diff --git a/samples/config/S210A/img.params.pinhole b/samples/config/S210A/img.params.pinhole new file mode 100644 index 0000000..eb1b2a7 --- /dev/null +++ b/samples/config/S210A/img.params.pinhole @@ -0,0 +1,62 @@ +%YAML:1.0 +--- +version: "1.2" +img_params: + # There are two params of resolution [640x400], [1280x800]. + # If you only set one of them, write will keep another params if it exists. + - + model: 0 + width: 640 + height: 400 + in_left: + # [fx 0 cx] + # [ 0 fy cy] + # [ 0 0 1] + fx: 1.9739641213416058e+02 + fy: 1.9772337597617189e+02 + cx: 3.2611983633916327e+02 + cy: 1.9986969132833946e+02 + # coeffs: k1,k2,p1,p2,k3 + coeffs: [ 1.2135236310725651e-01, -8.5442776049177036e-02, + 2.4914898631983504e-03, -3.7752063658256863e-03, 0. ] + in_right: + fx: 2.0335498653655989e+02 + fy: 2.0453858622699008e+02 + cx: 3.1589962248180814e+02 + cy: 2.1871688038954812e+02 + coeffs: [ 2.2904330559241560e-02, -2.9561990079971841e-02, + 3.9725942760981507e-03, -3.9689073214945591e-03, 0. ] + ex_right_to_left: + rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, + -4.3917309443490191e-03, 1.8166060642710027e-03, + 9.9968925981619028e-01, -2.4861290203142431e-02, + 4.4382582477776426e-03, 2.4853026274046636e-02, + 9.9968126367795229e-01 ] + translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, + 2.2588034344482368e+00 ] + - + model: 0 + width: 1280 + height: 800 + in_left: + fx: 1.9739641213416058e+02 + fy: 1.9772337597617189e+02 + cx: 3.2611983633916327e+02 + cy: 1.9986969132833946e+02 + coeffs: [ 1.2135236310725651e-01, -8.5442776049177036e-02, + 2.4914898631983504e-03, -3.7752063658256863e-03, 0. ] + in_right: + fx: 2.0335498653655989e+02 + fy: 2.0453858622699008e+02 + cx: 3.1589962248180814e+02 + cy: 2.1871688038954812e+02 + coeffs: [ 2.2904330559241560e-02, -2.9561990079971841e-02, + 3.9725942760981507e-03, -3.9689073214945591e-03, 0. ] + ex_right_to_left: + rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, + -4.3917309443490191e-03, 1.8166060642710027e-03, + 9.9968925981619028e-01, -2.4861290203142431e-02, + 4.4382582477776426e-03, 2.4853026274046636e-02, + 9.9968126367795229e-01 ] + translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, + 2.2588034344482368e+00 ] diff --git a/samples/config/S210A/imu.params b/samples/config/S210A/imu.params new file mode 100644 index 0000000..93ad7e8 --- /dev/null +++ b/samples/config/S210A/imu.params @@ -0,0 +1,33 @@ +%YAML:1.0 +--- +version: "1.2" +in_accel: + scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] + assembly: [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] + drift: [ 0., 0., 0. ] + noise: [ 1.6925432397973516e-02, 1.6735310195561025e-02, + 1.7452487504590969e-02 ] + bias: [ 1.9031356589714596e-04, 1.6996777864587261e-04, + 5.4490537096493644e-04 ] + x: [ 0.0, 0.0 ] + y: [ 0.0, 0.0 ] + z: [ 0.0, 0.0 ] +in_gyro: + scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] + assembly: [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] + drift: [ 0., 0., 0. ] + noise: [ 1.0848026158819934e-03, 1.2466367883501759e-03, + 1.1003229919806443e-03 ] + bias: [ 2.3404834136742844e-05, 2.3596771567764949e-05, + 1.4970418056326829e-05 ] + x: [ 0.0, 0.0 ] + y: [ 0.0, 0.0 ] + z: [ 0.0, 0.0 ] +ex_left_to_imu: + rotation: [ -6.4662000000000001e-03, -9.9994994000000004e-01, + -7.6356499999999999e-03, 9.9997908999999996e-01, + -6.4656599999999998e-03, -9.5580000000000003e-05, + 4.6199999999999998e-05, -7.6361099999999998e-03, + 9.9997084000000003e-01 ] + translation: [ 5.3364600000000003e-03, -4.3029220000000000e-02, + 2.3031240000000001e-02 ] diff --git a/samples/device_writer.cc b/samples/device_writer.cc new file mode 100644 index 0000000..722a716 --- /dev/null +++ b/samples/device_writer.cc @@ -0,0 +1,590 @@ +// 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. +#include "device_writer.h" + +#include + +#include + +#include "mynteye/logger.h" +#include "mynteye/util/files.h" + +#define SAVE_LATEST_VERSION Version(1, 2) + +MYNTEYE_BEGIN_NAMESPACE + +namespace tools { + +DeviceWriter::DeviceWriter(std::shared_ptr device) : device_(device) { + VLOG(2) << __func__; +} + +DeviceWriter::~DeviceWriter() { + VLOG(2) << __func__; +} + +bool DeviceWriter::WriteDeviceInfo(const dev_info_t &info) { + // Update device info + auto &&dev_info = device_->GetInfo(); + dev_info->lens_type = Type(info.lens_type); + dev_info->imu_type = Type(info.imu_type); + dev_info->nominal_baseline = info.nominal_baseline; + + if (device_->SetFiles(dev_info.get(), nullptr, nullptr)) { + LOG(INFO) << "Write device info success"; + LOG(INFO) << "Device info: {name: " << dev_info->name + << ", serial_number: " << dev_info->serial_number + << ", firmware_version: " + << dev_info->firmware_version.to_string() + << ", hardware_version: " + << dev_info->hardware_version.to_string() + << ", spec_version: " << dev_info->spec_version.to_string() + << ", lens_type: " << dev_info->lens_type.to_string() + << ", imu_type: " << dev_info->imu_type.to_string() + << ", nominal_baseline: " << dev_info->nominal_baseline + << ", auxiliary_chip_version: " + << dev_info->auxiliary_chip_version.to_string() + << ", isp_version: " + << dev_info->isp_version.to_string()<< "}"; + return true; + } else { + LOG(ERROR) << "Write device info failed"; + return false; + } +} + +bool DeviceWriter::WriteDeviceInfo(const std::string &filepath) { + return WriteDeviceInfo(LoadDeviceInfo(filepath)); +} + +bool DeviceWriter::WriteImgParams(const img_params_map_t &img_params_map) { + img_params_map_t *img_params_new = + const_cast(&img_params_map); + // Update image params with raw + auto &&img_params_raw = device_->GetImgParams(); + for (auto entry_raw : img_params_raw) { + // Add raw params if not load this resolution + if (img_params_new->find(entry_raw.first) == img_params_new->end()) { + (*img_params_new)[entry_raw.first] = entry_raw.second; + } + } + + if (device_->SetFiles(nullptr, img_params_new, nullptr)) { + LOG(INFO) << "Write img params success"; + for (auto it = img_params_new->begin(); it != img_params_new->end(); it++) { + LOG(INFO) << "Resolution: {width: " << (*it).first.width + << ", height: " << (*it).first.height << "}"; + LOG(INFO) << "Intrinsics left: {" << *(*it).second.in_left << "}"; + LOG(INFO) << "Intrinsics right: {" << *(*it).second.in_right << "}"; + LOG(INFO) << "Extrinsics right to left: {" + << (*it).second.ex_right_to_left << "}"; + } + return true; + } else { + LOG(ERROR) << "Write img params failed"; + return false; + } +} + +bool DeviceWriter::WriteImgParams(const std::string &filepath) { + return WriteImgParams(LoadImgParams(filepath)); +} + +bool DeviceWriter::WriteImuParams(const imu_params_t ¶ms) { + if (device_->SetFiles( + nullptr, nullptr, const_cast(¶ms))) { + LOG(INFO) << "Write imu params success"; + LOG(INFO) << "Imu intrinsics accel: {" << params.in_accel << "}"; + LOG(INFO) << "Imu intrinsics gyro: {" << params.in_gyro << "}"; + LOG(INFO) << "Imu extrinsics left to imu: {" << params.ex_left_to_imu + << "}"; + return true; + } else { + LOG(ERROR) << "Write imu params failed"; + return false; + } +} + +bool DeviceWriter::WriteImuParams(const std::string &filepath) { + return WriteImuParams(LoadImuParams(filepath)); +} + +namespace { + +cv::FileStorage &operator<<(cv::FileStorage &fs, const IntrinsicsPinhole &in) { + fs << "{" + << "fx" << in.fx << "fy" << in.fy + << "cx" << in.cx << "cy" << in.cy + << "coeffs" << std::vector(in.coeffs, in.coeffs + 5) << "}"; + return fs; +} + +cv::FileStorage &operator<<(cv::FileStorage &fs, + const IntrinsicsEquidistant &in) { + fs << "{" + << "coeffs" << std::vector(in.coeffs, in.coeffs + 8) << "}"; + return fs; +} + +cv::FileStorage &operator<<(cv::FileStorage &fs, + const std::shared_ptr &in) { + switch (in->calib_model()) { + case CalibrationModel::PINHOLE: + return fs << *std::dynamic_pointer_cast(in); + case CalibrationModel::KANNALA_BRANDT: + return fs << *std::dynamic_pointer_cast(in); + default: + LOG(FATAL) << "Unknown calib model: " << in->calib_model(); + return fs; + } +} + +cv::FileStorage &operator<<(cv::FileStorage &fs, const ImuIntrinsics &in) { + std::vector scales; + for (std::size_t i = 0; i < 3; i++) { + for (std::size_t j = 0; j < 3; j++) { + scales.push_back(in.scale[i][j]); + } + } + std::vector assembly; + for (std::size_t i = 0; i < 3; i++) { + for (std::size_t j = 0; j < 3; j++) { + assembly.push_back(in.assembly[i][j]); + } + } + fs << "{" + << "scale" << scales << "assembly" << assembly << "drift" + << std::vector(in.drift, in.drift + 3) << "noise" + << std::vector(in.noise, in.noise + 3) << "bias" + << std::vector(in.bias, in.bias + 3) << "x" + << std::vector(in.x, in.x + 2) << "y" + << std::vector(in.y, in.y + 2) << "z" + << std::vector(in.z, in.z + 2) << "}"; + return fs; +} + +cv::FileStorage &operator<<(cv::FileStorage &fs, const Extrinsics &ex) { + std::vector rotations; + for (std::size_t i = 0; i < 3; i++) { + for (std::size_t j = 0; j < 3; j++) { + rotations.push_back(ex.rotation[i][j]); + } + } + fs << "{" + << "rotation" << rotations << "translation" + << std::vector(ex.translation, ex.translation + 3) << "}"; + return fs; +} + +cv::FileStorage &operator<<( + cv::FileStorage &fs, const device::img_params_t ¶ms) { + fs << "{" + << "model" << static_cast(params.in_left->calib_model()) + << "width" << params.in_left->width + << "height" << params.in_left->height + << "in_left" << params.in_left + << "in_right" << params.in_right + << "ex_right_to_left" << params.ex_right_to_left << "}"; + return fs; +} + +cv::FileStorage &operator<<( + cv::FileStorage &fs, const DeviceWriter::img_params_map_t &img_params_map) { + fs << "["; + std::map::const_iterator it; + for (it = img_params_map.begin(); it != img_params_map.end(); it++) { + fs << (*it).second; + } + fs << "]"; + return fs; +} + +} // namespace + +bool DeviceWriter::SaveDeviceInfo( + const dev_info_t &info, const std::string &filepath) { + using FileStorage = cv::FileStorage; + FileStorage fs(filepath, FileStorage::WRITE); + if (!fs.isOpened()) { + LOG(ERROR) << "Failed to save file: " << filepath; + return false; + } + fs << "device_name" << info.name; + fs << "serial_number" << info.serial_number; + fs << "firmware_version" << info.firmware_version.to_string(); + fs << "hardware_version" << info.hardware_version.to_string(); + fs << "spec_version" << info.spec_version.to_string(); + fs << "lens_type" << info.lens_type.to_string(); + fs << "imu_type" << info.imu_type.to_string(); + fs << "nominal_baseline" << info.nominal_baseline; + fs << "auxiliary_chip_version" << info.auxiliary_chip_version.to_string(); + fs << "isp_version" << info.isp_version.to_string(); + // save other infos according to spec_version + fs.release(); + return true; +} + +bool DeviceWriter::SaveImgParams( + const img_params_map_t &img_params_map, + const std::string &filepath) { + if (img_params_map.empty()) { + return false; + } + std::string version = img_params_map.begin()->second.version; + if (Version(version) > SAVE_LATEST_VERSION) { + LOG(ERROR) << "Failed to save img params of version " << version + << ", please use latest SDK."; + return false; + } + + // always save img params with latest version format + using FileStorage = cv::FileStorage; + FileStorage fs(filepath, FileStorage::WRITE); + if (!fs.isOpened()) { + LOG(ERROR) << "Failed to save file: " << filepath; + return false; + } + fs << "version" << SAVE_LATEST_VERSION.to_string() + << "img_params" << img_params_map; + fs.release(); + return true; +} + +bool DeviceWriter::SaveImuParams( + const imu_params_t ¶ms, const std::string &filepath) { + if (!params.ok) return false; + std::string version = params.version; + if (Version(version) > SAVE_LATEST_VERSION) { + LOG(ERROR) << "Failed to save imu params of version " << version + << ", please use latest SDK."; + return false; + } + + // always save imu params with latest version format + using FileStorage = cv::FileStorage; + FileStorage fs(filepath, FileStorage::WRITE); + if (!fs.isOpened()) { + LOG(ERROR) << "Failed to save file: " << filepath; + return false; + } + fs << "version" << SAVE_LATEST_VERSION.to_string() + << "in_accel" << params.in_accel + << "in_gyro" << params.in_gyro + << "ex_left_to_imu" << params.ex_left_to_imu; + fs.release(); + return true; +} + +void DeviceWriter::SaveAllInfos(const std::string &dir) { + if (!files::mkdir(dir)) { + LOG(FATAL) << "Create directory failed: " << dir; + } + SaveDeviceInfo(*device_->GetInfo(), dir + MYNTEYE_OS_SEP "device.info"); + SaveImgParams(device_->GetImgParams(), dir + MYNTEYE_OS_SEP "img.params"); + SaveImuParams(device_->GetImuParams(), dir + MYNTEYE_OS_SEP "imu.params"); +} + +namespace { + +// old +void to_intrinsics( + const std::uint16_t &width, const std::uint16_t &height, + const std::uint8_t &model, const cv::Mat &M, const cv::Mat &D, + IntrinsicsPinhole *in) { + in->width = width; + in->height = height; + /* + fx, 0, cx, + 0, fy, cy, + 0, 0, 1 + */ + in->fx = M.at(0, 0); + in->fy = M.at(1, 1); + in->cx = M.at(0, 2); + in->cy = M.at(1, 2); + /* k1, k2, p1, p2, k3 */ + in->model = model; + LOG_IF(FATAL, D.cols < 5) << "Distortion coefficients must >= 5 columns"; + for (std::size_t i = 0; i < 5; i++) { + in->coeffs[i] = D.at(i); + } +} + +// old +void to_extrinsics(const cv::Mat &R, const cv::Mat &T, Extrinsics *ex) { + for (std::size_t i = 0; i < 3; i++) { + for (std::size_t j = 0; j < 3; j++) { + ex->rotation[i][j] = R.at(i, j); + } + } + for (std::size_t i = 0; i < 3; i++) { + ex->translation[i] = T.at(i); + } +} +// old +void operator>>(const cv::FileNode &n, IntrinsicsPinhole &in) { + n["width"] >> in.width; + n["height"] >> in.height; + n["fx"] >> in.fx; + n["fy"] >> in.fy; + n["cx"] >> in.cx; + n["cy"] >> in.cy; + n["model"] >> in.model; + for (std::size_t i = 0; i < 5; i++) { + in.coeffs[i] = n["coeffs"][i]; + } +} + +void operator>>(const cv::FileNode &n, ImuIntrinsics &in) { + for (std::size_t i = 0; i < 3; i++) { + for (std::size_t j = 0; j < 3; j++) { + in.scale[i][j] = n["scale"][3 * i + j]; + } + } + for (std::size_t i = 0; i < 3; i++) { + for (std::size_t j = 0; j < 3; j++) { + in.assembly[i][j] = n["assembly"][3 * i + j]; + } + } + for (std::size_t i = 0; i < 3; i++) { + in.drift[i] = n["drift"][i]; + } + for (std::size_t i = 0; i < 3; i++) { + in.noise[i] = n["noise"][i]; + } + for (std::size_t i = 0; i < 3; i++) { + in.bias[i] = n["bias"][i]; + } + for (std::size_t i = 0; i < 2; i++) { + in.x[i] = n["x"][i]; + } + for (std::size_t i = 0; i < 2; i++) { + in.y[i] = n["y"][i]; + } + for (std::size_t i = 0; i < 2; i++) { + in.z[i] = n["z"][i]; + } +} + +void operator>>(const cv::FileNode &n, Extrinsics &ex) { + for (std::size_t i = 0; i < 3; i++) { + for (std::size_t j = 0; j < 3; j++) { + ex.rotation[i][j] = n["rotation"][3 * i + j]; + } + } + for (std::size_t i = 0; i < 3; i++) { + ex.translation[i] = n["translation"][i]; + } +} + +// old +void operator>>(const cv::FileNode &n, DeviceWriter::img_params_t ¶ms) { + auto in_left = std::make_shared(); + auto in_right = std::make_shared(); + params.in_left = in_left; + params.in_right = in_right; + n["in_left"] >> *in_left; + n["in_right"] >> *in_right; + n["ex_right_to_left"] >> params.ex_right_to_left; +} + +std::shared_ptr to_intrinsics_pinhole( + const cv::FileNode &n, const std::uint8_t &model, + const std::uint16_t &width, const std::uint16_t &height) { + auto in = std::make_shared(); + in->width = width; + in->height = height; + in->model = model; + n["fx"] >> in->fx; + n["fy"] >> in->fy; + n["cx"] >> in->cx; + n["cy"] >> in->cy; + for (std::size_t i = 0; i < 5; i++) { + in->coeffs[i] = n["coeffs"][i]; + } + return in; +} + +std::shared_ptr to_intrinsics_equidistant( + const cv::FileNode &n, const std::uint8_t &model, + const std::uint16_t &width, const std::uint16_t &height) { + auto in = std::make_shared(); + in->width = width; + in->height = height; + for (std::size_t i = 0; i < 8; i++) { + in->coeffs[i] = n["coeffs"][i]; + } + MYNTEYE_UNUSED(model) + return in; +} + +DeviceWriter::img_params_t to_img_params( + const cv::FileNode &n, const std::uint8_t &model, + const std::uint16_t &width, const std::uint16_t &height) { + DeviceWriter::img_params_t params; + params.ok = false; + + CalibrationModel calib_model = static_cast(model); + switch (calib_model) { + case CalibrationModel::PINHOLE: { + params.ok = true; + params.in_left = to_intrinsics_pinhole( + n["in_left"], model, width, height); + params.in_right = to_intrinsics_pinhole( + n["in_right"], model, width, height); + n["ex_right_to_left"] >> params.ex_right_to_left; + } break; + case CalibrationModel::KANNALA_BRANDT: { + params.ok = true; + params.in_left = to_intrinsics_equidistant( + n["in_left"], model, width, height); + params.in_right = to_intrinsics_equidistant( + n["in_right"], model, width, height); + n["ex_right_to_left"] >> params.ex_right_to_left; + } break; + default: + LOG(FATAL) << "Could not load img params as unknown calib model" + ", please use latest SDK."; + } + return params; +} + +} // namespace + +DeviceWriter::dev_info_t DeviceWriter::LoadDeviceInfo( + const std::string &filepath) { + using FileStorage = cv::FileStorage; + FileStorage fs(filepath, FileStorage::READ); + if (!fs.isOpened()) { + LOG(FATAL) << "Failed to load file: " << filepath; + } + DeviceInfo info; + info.lens_type = Type(std::string(fs["lens_type"])); + info.imu_type = Type(std::string(fs["imu_type"])); + fs["nominal_baseline"] >> info.nominal_baseline; + fs.release(); + return info; +} + +DeviceWriter::img_params_map_t DeviceWriter::LoadImgParams( + const std::string &filepath) { + using FileStorage = cv::FileStorage; + FileStorage fs(filepath, FileStorage::READ); + if (!fs.isOpened()) { + LOG(FATAL) << "Failed to load file: " << filepath; + } + + img_params_map_t img_params_map; + if (!fs["version"].isNone()) { + std::string version = std::string(fs["version"]); + // load params according to verison + if (version == "1.0") { + fs["img_params_map"][0] >> img_params_map[{752, 480}]; + } else if (version == "1.1") { + fs["img_params_map"][0] >> img_params_map[{1280, 400}]; + fs["img_params_map"][1] >> img_params_map[{2560, 800}]; + } else if (version == "1.2") { + auto node = fs["img_params"]; + for (auto it = node.begin(); it < node.end(); it++) { + std::uint8_t model; + std::uint16_t width, height; + (*it)["model"] >> model; + (*it)["width"] >> width; + (*it)["height"] >> height; + auto params = to_img_params(*it, model, width, height); + if (params.ok) { + params.version = version; + img_params_map[{width, height}] = params; + } + } + } else { + LOG(ERROR) << "Failed to load img params of version " << version + << ", please use latest SDK."; + } + } else { + // load old params s1030 + auto in_left = std::make_shared(); + auto in_right = std::make_shared(); + Extrinsics ex_right_to_left; + if (fs["in_left"].isNone()) { + std::uint16_t w = 752; + std::uint16_t h = 480; + std::uint8_t m = 0; + if (!fs["width"].isNone()) + w = static_cast(fs["width"]); + if (!fs["height"].isNone()) + h = static_cast(fs["height"]); + if (!fs["model"].isNone()) + m = static_cast(fs["model"]); + + cv::Mat M1, D1, M2, D2, R, T; + fs["M1"] >> M1; + fs["D1"] >> D1; + fs["M2"] >> M2; + fs["D2"] >> D2; + fs["R"] >> R; + fs["T"] >> T; + + to_intrinsics(w, h, m, M1, D1, in_left.get()); + to_intrinsics(w, h, m, M2, D2, in_right.get()); + to_extrinsics(R, T, &ex_right_to_left); + } else { + fs["in_left"] >> *in_left; + fs["in_right"] >> *in_right; + fs["ex_right_to_left"] >> ex_right_to_left; + } + img_params_map[{752, 480}] = { + true, "1.0", in_left, in_right, ex_right_to_left + }; + } + + fs.release(); + return img_params_map; +} + +DeviceWriter::imu_params_t DeviceWriter::LoadImuParams( + const std::string &filepath) { + using FileStorage = cv::FileStorage; + FileStorage fs(filepath, FileStorage::READ); + if (!fs.isOpened()) { + LOG(FATAL) << "Failed to load file: " << filepath; + } + + imu_params_t params; + if (!fs["version"].isNone()) { + std::string version = std::string(fs["version"]); + // load params according to verison + if (version == "1.2") { + params.version = version; + fs["in_accel"] >> params.in_accel; + fs["in_gyro"] >> params.in_gyro; + fs["ex_left_to_imu"] >> params.ex_left_to_imu; + } else { + LOG(ERROR) << "Failed to load imu params of version " << version + << ", please use latest SDK."; + } + } else { + // load old params + fs["in_accel"] >> params.in_accel; + fs["in_gyro"] >> params.in_gyro; + fs["ex_left_to_imu"] >> params.ex_left_to_imu; + } + + fs.release(); + return params; +} + +} // namespace tools + +MYNTEYE_END_NAMESPACE diff --git a/samples/device_writer.h b/samples/device_writer.h new file mode 100644 index 0000000..1e36ed5 --- /dev/null +++ b/samples/device_writer.h @@ -0,0 +1,69 @@ +// 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. +#ifndef MYNTEYE_TOOLS_DEVICE_WRITER_H_ // NOLINT +#define MYNTEYE_TOOLS_DEVICE_WRITER_H_ +#pragma once + +#include +#include +#include + +#include "mynteye/device/device.h" + +MYNTEYE_BEGIN_NAMESPACE + +class Device; + +namespace tools { + +class DeviceWriter { + public: + using dev_info_t = DeviceInfo; + using imu_params_t = device::imu_params_t; + using img_params_t = device::img_params_t; + using img_params_map_t = std::map; + + explicit DeviceWriter(std::shared_ptr device); + ~DeviceWriter(); + + bool WriteDeviceInfo(const dev_info_t &info); + bool WriteDeviceInfo(const std::string &filepath); + + bool WriteImgParams(const img_params_map_t &img_params_map); + bool WriteImgParams(const std::string &filepath); + + bool WriteImuParams(const imu_params_t ¶ms); + bool WriteImuParams(const std::string &filepath); + + bool SaveDeviceInfo(const dev_info_t &info, const std::string &filepath); + bool SaveImgParams(const img_params_map_t &img_params_map, + const std::string &filepath); + bool SaveImuParams(const imu_params_t ¶ms, const std::string &filepath); + + /** Save all infos of this device */ + void SaveAllInfos(const std::string &dir); + + private: + dev_info_t LoadDeviceInfo(const std::string &filepath); + img_params_map_t LoadImgParams(const std::string &filepath); + imu_params_t LoadImuParams(const std::string &filepath); + + std::shared_ptr device_; +}; + +} // namespace tools + +MYNTEYE_END_NAMESPACE + +#endif // MYNTEYE_TOOLS_DEVICE_WRITER_H_ NOLINT diff --git a/samples/save_all_infos.cc b/samples/save_all_infos.cc new file mode 100644 index 0000000..0186107 --- /dev/null +++ b/samples/save_all_infos.cc @@ -0,0 +1,43 @@ +// 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. +#include "mynteye/logger.h" +#include "mynteye/device/device.h" +#include "mynteye/device/utils.h" + +#include "device_writer.h" + +MYNTEYE_USE_NAMESPACE + +int main(int argc, char *argv[]) { + glog_init _(argc, argv); + + std::string dir{"config"}; + if (argc >= 2) { + dir = argv[1]; + } + + auto &&device = device::select(); + if (!device) + return 1; + + dir.append(MYNTEYE_OS_SEP).append(device->GetInfo()->name); + dir.append(MYNTEYE_OS_SEP "SN").append(device->GetInfo()->serial_number); + + tools::DeviceWriter writer(device); + writer.SaveAllInfos(dir); + + LOG(INFO) << "Save all infos to \"" << dir << "\""; + + return 0; +} diff --git a/samples/write_device_info.cc b/samples/write_device_info.cc new file mode 100644 index 0000000..428c8a1 --- /dev/null +++ b/samples/write_device_info.cc @@ -0,0 +1,41 @@ +// 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. +#include "mynteye/logger.h" +#include "mynteye/device/device.h" +#include "mynteye/device/utils.h" + +#include "device_writer.h" + +MYNTEYE_USE_NAMESPACE + +int main(int argc, char *argv[]) { + glog_init _(argc, argv); + + const char *filepath; + if (argc >= 2) { + filepath = argv[1]; + } else { + LOG(ERROR) << "Usage: ./device_info_writer "; + return 2; + } + + auto &&device = device::select(); + if (!device) + return 1; + + tools::DeviceWriter writer(device); + writer.WriteDeviceInfo(filepath); + + return 0; +} diff --git a/samples/write_img_params.cc b/samples/write_img_params.cc new file mode 100644 index 0000000..5c7c1d7 --- /dev/null +++ b/samples/write_img_params.cc @@ -0,0 +1,41 @@ +// 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. +#include "mynteye/logger.h" +#include "mynteye/device/device.h" +#include "mynteye/device/utils.h" + +#include "device_writer.h" + +MYNTEYE_USE_NAMESPACE + +int main(int argc, char *argv[]) { + glog_init _(argc, argv); + + const char *filepath; + if (argc >= 2) { + filepath = argv[1]; + } else { + LOG(ERROR) << "Usage: ./img_params_writer "; + return 2; + } + + auto &&device = device::select(); + if (!device) + return 1; + + tools::DeviceWriter writer(device); + writer.WriteImgParams(filepath); + + return 0; +} diff --git a/samples/write_imu_params.cc b/samples/write_imu_params.cc new file mode 100644 index 0000000..29ae057 --- /dev/null +++ b/samples/write_imu_params.cc @@ -0,0 +1,41 @@ +// 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. +#include "mynteye/logger.h" +#include "mynteye/device/device.h" +#include "mynteye/device/utils.h" + +#include "device_writer.h" + +MYNTEYE_USE_NAMESPACE + +int main(int argc, char *argv[]) { + glog_init _(argc, argv); + + const char *filepath; + if (argc >= 2) { + filepath = argv[1]; + } else { + LOG(ERROR) << "Usage: ./imu_params_writer "; + return 2; + } + + auto &&device = device::select(); + if (!device) + return 1; + + tools::DeviceWriter writer(device); + writer.WriteImuParams(filepath); + + return 0; +} From 32adc34451ab5e3fc3b94bf4ce8d6146572a2e7e Mon Sep 17 00:00:00 2001 From: TinyO Date: Fri, 30 Aug 2019 16:52:45 +0800 Subject: [PATCH 05/13] doc(*): product things update. --- .../product/mynteye_s2110_imu_coord.jpg | Bin 0 -> 735588 bytes docs/src/product/imu_coord.rst | 1 + docs/src/product/imu_coord_s2110.rst | 8 ++ docs/src/product/product_spec.rst | 1 + docs/src/product/product_surface.rst | 1 + docs/src/product/spec_s2110.rst | 105 ++++++++++++++++++ docs/src/product/surface_s2110.rst | 15 +++ docs/src/sdk/data/get_img_params.rst | 4 + 8 files changed, 135 insertions(+) create mode 100644 docs/images/product/mynteye_s2110_imu_coord.jpg create mode 100644 docs/src/product/imu_coord_s2110.rst create mode 100644 docs/src/product/spec_s2110.rst create mode 100644 docs/src/product/surface_s2110.rst diff --git a/docs/images/product/mynteye_s2110_imu_coord.jpg b/docs/images/product/mynteye_s2110_imu_coord.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49c661bea566a74ff7b17e6b212e2bac632f6155 GIT binary patch literal 735588 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௛} zG%3C?n4?HsowpNLpWvNy>vLQD)12jlj=EmNc<)@3iS4Lw_%?k(%ZA*|si+2z=zYnN zHAsa=(x8e0_Thxxr7^gv@r}i~pO1`Z7VH_6?(&YA)LoNtX6Jwg&$QiJAvr N#o1 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

$xRf%ymn;l+#S1to`O1dD`Yq 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

YYr?K+8lXf3Rs>Zrq^HL+>OQTcI&y8 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 Qa6;gOz`r#C&f}r~0VBKgr2qf` literal 0 HcmV?d00001 diff --git a/docs/src/product/imu_coord.rst b/docs/src/product/imu_coord.rst index 4d987ff..eb8e377 100644 --- a/docs/src/product/imu_coord.rst +++ b/docs/src/product/imu_coord.rst @@ -8,3 +8,4 @@ IMU Coordinate System imu_coord_s1030 imu_coord_s2100 + imu_coord_s2110 diff --git a/docs/src/product/imu_coord_s2110.rst b/docs/src/product/imu_coord_s2110.rst new file mode 100644 index 0000000..ff13a6a --- /dev/null +++ b/docs/src/product/imu_coord_s2110.rst @@ -0,0 +1,8 @@ +.. _product_imu_coord_s2110: + +S2110 Coordinate System +==================================== + +IMU coordinate system is right-handed,the axis directions are as follows: + +.. image:: ../../images/product/mynteye_s2110_imu_coord.jpg diff --git a/docs/src/product/product_spec.rst b/docs/src/product/product_spec.rst index 00db9b8..34703d3 100644 --- a/docs/src/product/product_spec.rst +++ b/docs/src/product/product_spec.rst @@ -9,3 +9,4 @@ Product Specification spec_s1030 spec_s1030_ir spec_s2100 + spec_s2110 diff --git a/docs/src/product/product_surface.rst b/docs/src/product/product_surface.rst index 6451216..447d14a 100644 --- a/docs/src/product/product_surface.rst +++ b/docs/src/product/product_surface.rst @@ -8,3 +8,4 @@ Product Surface surface_s1030 surface_s2100 + surface_s2110 diff --git a/docs/src/product/spec_s2110.rst b/docs/src/product/spec_s2110.rst new file mode 100644 index 0000000..9445bcc --- /dev/null +++ b/docs/src/product/spec_s2110.rst @@ -0,0 +1,105 @@ +.. _mynteye_spec_s2110: + + +S2110-146/Color Product Specification +======================================== + +Product Specification +----------------------- + + +========================== ===================================================== + Model S2110-146/Color +-------------------------- ----------------------------------------------------- + Size PCB dimension:15x100mm + Total dimension:125x47x26.6mm +-------------------------- ----------------------------------------------------- + Frame Rate 1280x400\@10/20/30/60fps 2560x800\@10/20/30fps +-------------------------- ----------------------------------------------------- + Resolution 1280x400; 2560x800 +-------------------------- ----------------------------------------------------- + Depth Resolution Based on CPU/GPU Up to 1280*400\@60FPS +-------------------------- ----------------------------------------------------- + Pixel Size 3.0*3.0μm +-------------------------- ----------------------------------------------------- + Baseline 80.0mm +-------------------------- ----------------------------------------------------- + Visual Angle D:141° H:124° V:87° +-------------------------- ----------------------------------------------------- + Focal Length 0.95mm +-------------------------- ----------------------------------------------------- + IR Support No +-------------------------- ----------------------------------------------------- + Color Mode Color +-------------------------- ----------------------------------------------------- + Depth Working Distance 0.26-3m+ +-------------------------- ----------------------------------------------------- + Scanning Mode Global Shutter +-------------------------- ----------------------------------------------------- + Power 1.1W\@5V DC from USB +-------------------------- ----------------------------------------------------- +Synchronization Precision <1ms (up to 0.02ms) +-------------------------- ----------------------------------------------------- + IMU Frequency 200Hz +-------------------------- --------------------------------------- + Output data format YUYV +-------------------------- ----------------------------------------------------- + Data transfer Interface USB3.0 +-------------------------- ----------------------------------------------------- + Time Sync interface DF50A +-------------------------- ----------------------------------------------------- + Weight 62g +-------------------------- ----------------------------------------------------- + UVC MODE Yes +========================== ===================================================== + + +Software +-------- + + +================ ================================================================================= + Support system Windows 10、Ubuntu 14.04/16.04/18.04、ROS indigo/kinetic/melodic、Android 7.0+ +---------------- --------------------------------------------------------------------------------- + SDK http://www.myntai.com/dev/mynteye +---------------- --------------------------------------------------------------------------------- + Support ORB_SLAM2、OKVIS、Vins-Mono、Vins-Fusion、VIORB +================ ================================================================================== + + + +Work Environment +----------------- + + +========================= ============================== + Operating Temperature -15°C~55°C +------------------------- ------------------------------ + Storage Temperature -20°C~75°C +------------------------- ------------------------------ + Humidity 0% to 95% non-condensing +========================= ============================== + + +Package +--------- + +=================== ======================================= + Package Contents MYNT EYE x1 USB Micro-B Cable x1 +=================== ======================================= + +Warranty +---------- + +==================== ============================================ + Product Warranty 12 Months Limited Manufacturer's Warranty +==================== ============================================ + +Accuracy +--------- + +============================ ============================================ + Depth Distance Deviation Less than 4% +============================ ============================================ + + diff --git a/docs/src/product/surface_s2110.rst b/docs/src/product/surface_s2110.rst new file mode 100644 index 0000000..50b1be0 --- /dev/null +++ b/docs/src/product/surface_s2110.rst @@ -0,0 +1,15 @@ +.. _mynteye_surface_s2110: + +S2110 Size and Structure +================================ + +============= ============== +Shell(mm) PCBA board(mm) +============= ============== +125x47x40 100x15 +============= ============== + +.. image:: ../../images/product/mynteye_s2_surface_zh-Hans.jpg + +A. Camera:please pay attention to protect the camera sensor lenses, to avoid imaging quality degradation. +B. USB Micro-B interface and set screw holes: during usage, plug in the USB Micro-B cable and secure it by fastening the set screws to avoid damage to the interface and to ensure stability in connection. diff --git a/docs/src/sdk/data/get_img_params.rst b/docs/src/sdk/data/get_img_params.rst index bd68bfb..5511918 100644 --- a/docs/src/sdk/data/get_img_params.rst +++ b/docs/src/sdk/data/get_img_params.rst @@ -10,6 +10,10 @@ Use ``GetIntrinsics()`` & ``GetExtrinsics()`` to get image calibration parameter 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`` +Note + +Camera Intrinsics/Extrinsics, please ref to: ros `CameraInfo `_. + Reference code snippet: .. code-block:: c++ From a30b4e285bac026d6f73f1fe642ac66dd89c84b8 Mon Sep 17 00:00:00 2001 From: TinyO Date: Fri, 30 Aug 2019 17:06:34 +0800 Subject: [PATCH 06/13] refactor(*): remove tools. --- Makefile | 19 +- tools/CMakeLists.txt | 72 -- tools/README.md | 135 ---- tools/analytics/imu_analytics.py | 671 ------------------ tools/analytics/stamp_analytics.py | 370 ---------- tools/checksum/md5sum.sh | 78 -- tools/config/mynteye/mynteye_config.yaml | 9 - tools/dataset/CMakeLists.txt | 39 - tools/dataset/dataset.cc | 203 ------ tools/dataset/dataset.h | 69 -- tools/dataset/record.cc | 134 ---- tools/dataset/record2.cc | 137 ---- tools/internal/data/__init__.py | 442 ------------ tools/linter | 1 - tools/requirements.txt | 4 - tools/writer/CMakeLists.txt | 58 -- .../config/S1030/deprecated/img.params.old | 41 -- .../config/S1030/deprecated/img.params.old2 | 30 - .../config/S1030/deprecated/img.params.old3 | 33 - .../config/S1030/deprecated/imu.params.old | 24 - tools/writer/config/S1030/device.info | 10 - .../config/S1030/img.params.equidistant | 28 - tools/writer/config/S1030/img.params.pinhole | 38 - tools/writer/config/S1030/imu.params | 33 - .../config/S210A/deprecated/img.params.old | 62 -- .../config/S210A/deprecated/imu.params.old | 15 - tools/writer/config/S210A/device.info | 12 - .../config/S210A/img.params.equidistant | 51 -- tools/writer/config/S210A/img.params.pinhole | 62 -- tools/writer/config/S210A/imu.params | 33 - tools/writer/device_info_writer.cc | 41 -- tools/writer/device_writer.cc | 590 --------------- tools/writer/device_writer.h | 69 -- tools/writer/img_params_writer.cc | 41 -- tools/writer/imu_params_writer.cc | 41 -- tools/writer/save_all_infos.cc | 43 -- 36 files changed, 1 insertion(+), 3737 deletions(-) delete mode 100644 tools/CMakeLists.txt delete mode 100644 tools/README.md delete mode 100644 tools/analytics/imu_analytics.py delete mode 100644 tools/analytics/stamp_analytics.py delete mode 100755 tools/checksum/md5sum.sh delete mode 100644 tools/config/mynteye/mynteye_config.yaml delete mode 100644 tools/dataset/CMakeLists.txt delete mode 100644 tools/dataset/dataset.cc delete mode 100644 tools/dataset/dataset.h delete mode 100644 tools/dataset/record.cc delete mode 100644 tools/dataset/record2.cc delete mode 100644 tools/internal/data/__init__.py delete mode 160000 tools/linter delete mode 100644 tools/requirements.txt delete mode 100644 tools/writer/CMakeLists.txt delete mode 100644 tools/writer/config/S1030/deprecated/img.params.old delete mode 100644 tools/writer/config/S1030/deprecated/img.params.old2 delete mode 100644 tools/writer/config/S1030/deprecated/img.params.old3 delete mode 100644 tools/writer/config/S1030/deprecated/imu.params.old delete mode 100644 tools/writer/config/S1030/device.info delete mode 100644 tools/writer/config/S1030/img.params.equidistant delete mode 100644 tools/writer/config/S1030/img.params.pinhole delete mode 100644 tools/writer/config/S1030/imu.params delete mode 100644 tools/writer/config/S210A/deprecated/img.params.old delete mode 100644 tools/writer/config/S210A/deprecated/imu.params.old delete mode 100644 tools/writer/config/S210A/device.info delete mode 100644 tools/writer/config/S210A/img.params.equidistant delete mode 100644 tools/writer/config/S210A/img.params.pinhole delete mode 100644 tools/writer/config/S210A/imu.params delete mode 100644 tools/writer/device_info_writer.cc delete mode 100644 tools/writer/device_writer.cc delete mode 100644 tools/writer/device_writer.h delete mode 100644 tools/writer/img_params_writer.cc delete mode 100644 tools/writer/imu_params_writer.cc delete mode 100644 tools/writer/save_all_infos.cc diff --git a/Makefile b/Makefile index 2e28fa6..25dec92 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,6 @@ help: @echo " make install install project" @echo " make test build test and run" @echo " make samples build samples" - @echo " make tools build tools" @echo " make pkg package sdk" @echo " make ros build ros wrapper" @echo " make py build python wrapper" @@ -51,7 +50,7 @@ help: .PHONY: help -all: init samples tools ros +all: init samples ros .PHONY: all @@ -159,20 +158,6 @@ samples: install .PHONY: samples -# tools - -tools: install - @$(call echo,Make $@) -ifeq ($(HOST_OS),Mac) - $(error "Can't make tools on $(HOST_OS)") -else - @$(call cmake_build,./tools/_build) -endif - - - -.PHONY: tools - # pkg pkg: clean @@ -262,8 +247,6 @@ clean: @$(call rm,./_install/) @$(call rm,./samples/_build/) @$(call rm,./samples/_output/) - @$(call rm,./tools/_build/) - @$(call rm,./tools/_output/) @$(call rm,./test/_build/) @$(call rm,./test/_output/) @$(MAKE) cleanlog diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt deleted file mode 100644 index 4d57c04..0000000 --- a/tools/CMakeLists.txt +++ /dev/null @@ -1,72 +0,0 @@ -# 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. - -cmake_minimum_required(VERSION 3.0) - -project(mynteye_tools VERSION 2.0.0 LANGUAGES C CXX) - -get_filename_component(PRO_DIR ${PROJECT_SOURCE_DIR} DIRECTORY) - -include(${PRO_DIR}/cmake/Common.cmake) -include(${PRO_DIR}/cmake/Utils.cmake) - -# flags - -if(OS_WIN) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") -else() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") -endif() - -include(${PRO_DIR}/cmake/DetectCXX11.cmake) - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") - -string(STRIP "${CMAKE_C_FLAGS}" CMAKE_C_FLAGS) -string(STRIP "${CMAKE_CXX_FLAGS}" CMAKE_CXX_FLAGS) -message(STATUS "C_FLAGS: ${CMAKE_C_FLAGS}") -message(STATUS "CXX_FLAGS: ${CMAKE_CXX_FLAGS}") - -# packages - -LIST(APPEND CMAKE_PREFIX_PATH ${PRO_DIR}/_install/lib/cmake) -find_package(mynteye REQUIRED) -message(STATUS "Found mynteye: ${mynteye_VERSION}") - -include(${PRO_DIR}/cmake/DetectOpenCV.cmake) - -if(mynteye_WITH_GLOG) - include(${PRO_DIR}/cmake/DetectGLog.cmake) -endif() - -#LIST(APPEND CMAKE_MODULE_PATH ${PRO_DIR}/cmake) - -# targets - -set(OUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/_output") - -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR} -) - -# dataset - -add_subdirectory(dataset) - -# writer - -add_subdirectory(writer) diff --git a/tools/README.md b/tools/README.md deleted file mode 100644 index 16b7436..0000000 --- a/tools/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# Tools for MYNT® EYE cameras - -## Prerequisites - -[OpenCV](https://opencv.org/), - -```bash -# Linux, macOS -export OpenCV_DIR=~/opencv - -# Windows -set OpenCV_DIR=C:\opencv -``` - -Python packages, - -```bash -cd /tools/ -sudo pip install -r requirements.txt -``` - -[ROS](http://www.ros.org/) if using rosbag. - -## Build - -```bash -cd -make tools -``` - ---- - -## Record data (mynteye dataset) - -```bash -./tools/_output/bin/dataset/record - -# Windows -.\tools\_output\bin\dataset\record.bat -``` - -## Analytics data (mynteye dataset) - -### imu_analytics.py - -```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= -``` - -### stamp_analytics.py - -```bash -python tools/analytics/stamp_analytics.py -i dataset -c tools/config/mynteye/mynteye_config.yaml -``` - ---- - -## Record data (rosbag) - -```bash -cd -make ros -``` - -```bash -source wrappers/ros/devel/setup.bash -roslaunch mynt_eye_ros_wrapper mynteye.launch -``` - -```bash -rosbag record -O mynteye.bag /mynteye/left/image_raw /mynteye/imu/data_raw /mynteye/temperature/data_raw -``` - -## Analytics data (rosbag) - -### imu_analytics.py - -```bash -python tools/analytics/imu_analytics.py -i mynteye.bag -``` - -### stamp_analytics.py - -```bash -python tools/analytics/stamp_analytics.py -i mynteye.bag -``` - ---- - -## Writer - -### device_info_writer.cc - -```bash -./tools/_output/bin/writer/device_info_writer tools/writer/config/device.info - -# Windows -.\tools\_output\bin\writer\device_info_writer.bat tools\writer\config\device.info -``` - -### img_params_writer.cc - -```bash -./tools/_output/bin/writer/img_params_writer tools/writer/config/img.params - -# Windows -.\tools\_output\bin\writer\img_params_writer.bat tools\writer\config\img.params -``` - -### imu_params_writer.cc - -```bash -./tools/_output/bin/writer/imu_params_writer tools/writer/config/imu.params - -# Windows -.\tools\_output\bin\writer\imu_params_writer.bat tools\writer\config\imu.params -``` - -### save_all_infos.cc - -```bash -./tools/_output/bin/writer/save_all_infos - -# Windows -.\tools\_output\bin\writer\save_all_infos.bat -``` - ---- - -## Checksum - -```bash -./tools/checksum/md5sum.sh -``` diff --git a/tools/analytics/imu_analytics.py b/tools/analytics/imu_analytics.py deleted file mode 100644 index d3afe8a..0000000 --- a/tools/analytics/imu_analytics.py +++ /dev/null @@ -1,671 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# 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. - -# pylint: disable=missing-docstring - -from __future__ import print_function - -import os -import sys - -TOOLBOX_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -sys.path.append(os.path.join(TOOLBOX_DIR, 'internal')) - -# pylint: disable=import-error,wrong-import-position -from data import DataError, Dataset, ROSBag, MYNTEYE, What - - -TIME_SCALE_FACTORS = { - 's': 1., - 'm': 1. / 60, - 'h': 1. / 3600 -} - - -ANGLE_DEGREES = 'd' -ANGLE_RADIANS = 'r' -ANGLE_UNITS = (ANGLE_DEGREES, ANGLE_RADIANS) - - -BIN_CONFIG_NAME = 'imu_analytics_bin.cfg' -BIN_IMU_NAME = 'imu_analytics_imu.bin' -BIN_TEMP_NAME = 'imu_analytics_temp.bin' - - -class RawDataset(Dataset): - - def __init__(self, path, dataset_creator): - super(RawDataset, self).__init__(path) - self.dataset_creator = dataset_creator - self._digest() - - def _digest(self): - dataset = self.dataset_creator(self.path) - results = dataset.collect(What.imu, What.temp) - self._dataset = dataset - self._results = results - self._has_imu = What.imu in results.keys() - self._has_temp = What.temp in results.keys() - print(' ' + ', '.join('{}: {}'.format(k, len(v)) - for k, v in results.items())) - - @staticmethod - def _hypot(*args): - from math import sqrt - return sqrt(sum(x ** 2 for x in args)) - - def plot(self, t_scale_factor, gryo_converter, - ax_accel_x, ax_accel_y, ax_accel_z, ax_accel, - ax_gyro_x, ax_gyro_y, ax_gyro_z, ax_temp): - results = self._results - - if self._has_imu: - imu_t_beg = results[What.imu][0].timestamp - imu_ts = [(imu.timestamp - imu_t_beg) * t_scale_factor - for imu in results[What.imu]] - - ax_accel_x.plot(imu_ts, [imu.accel_x for imu in results[What.imu]]) - ax_accel_y.plot(imu_ts, [imu.accel_y for imu in results[What.imu]]) - ax_accel_z.plot(imu_ts, [imu.accel_z for imu in results[What.imu]]) - import math - my_gryo_converter = \ - lambda x: gryo_converter(x, math.degrees, math.radians) - ax_gyro_x.plot(imu_ts, [my_gryo_converter(imu.gyro_x) - for imu in results[What.imu]]) - ax_gyro_y.plot(imu_ts, [my_gryo_converter(imu.gyro_y) - for imu in results[What.imu]]) - ax_gyro_z.plot(imu_ts, [my_gryo_converter(imu.gyro_z) - for imu in results[What.imu]]) - - ax_accel.plot(imu_ts, [self._hypot(imu.accel_x, imu.accel_y, imu.accel_z) - for imu in results[What.imu]]) - - if self._has_temp: - temp_t_beg = results[What.temp][0].timestamp - temp_ts = [(temp.timestamp - temp_t_beg) * t_scale_factor - for temp in results[What.temp]] - ax_temp.plot(temp_ts, [temp.value for temp in results[What.temp]]) - - def generate(self, *what): # pylint: disable=unused-argument - raise DataError('DataError: method not implemented') - - def iterate(self, action, *what): # pylint: disable=unused-argument - raise DataError('DataError: method not implemented') - - def collect(self, *what): # pylint: disable=unused-argument - raise DataError('DataError: method not implemented') - - @property - def timebeg(self): - return self._dataset.timebeg - - @property - def timeend(self): - return self._dataset.timeend - - @property - def duration(self): - return self._dataset.duration - - @property - def has_imu(self): - return self._has_imu - - @property - def has_temp(self): - return self._has_temp - - -class BinDataset(RawDataset): - """ - Binary memory-mapped files of large dataset. - - References: - https://stackoverflow.com/questions/5854515/large-plot-20-million-samples-gigabytes-of-data - https://stackoverflow.com/questions/1053928/very-large-matrices-using-python-and-numpy - """ - - # def __init__(self, path, dataset_creator): - # super(BinDataset, self).__init__(path, dataset_creator) - - def _digest(self): - bindir = os.path.splitext(self.path)[0] - bincfg = os.path.join(bindir, BIN_CONFIG_NAME) - if os.path.isfile(bincfg): - with open(bincfg, 'r') as f_cfg: - import yaml - cfg = yaml.load(f_cfg) - self._info = cfg['info'] - self._binimu = os.path.join(bindir, cfg['bins']['imu']) - self._bintemp = os.path.join(bindir, cfg['bins']['temp']) - print('find binary files ...') - print(' binimu: {}'.format(self._binimu)) - print(' bintemp: {}'.format(self._bintemp)) - print(' bincfg: {}'.format(bincfg)) - if self._exists(): - while True: - sys.stdout.write('Do you want to use it directly? [Y/n] ') - choice = raw_input().lower() - if choice == '' or choice == 'y': - return - elif choice == 'n': - break - else: - print('Please respond with \'y\' or \'n\'.') - self._convert() - - def _exists(self): - return os.path.isfile(self._binimu) or os.path.isfile(self._bintemp) - - def _convert(self): - import numpy as np - - dataset = self.dataset_creator(self.path) - bindir = os.path.splitext(self.path)[0] - if not os.path.exists(bindir): - os.makedirs(bindir) - binimu = os.path.join(bindir, BIN_IMU_NAME) - bintemp = os.path.join(bindir, BIN_TEMP_NAME) - bincfg = os.path.join(bindir, BIN_CONFIG_NAME) - print('save to binary files ...') - print(' binimu: {}'.format(binimu)) - print(' bintemp: {}'.format(bintemp)) - print(' bincfg: {}'.format(bincfg)) - - has_imu = False - has_temp = False - with open(binimu, 'wb') as f_imu, open(bintemp, 'wb') as f_temp: - imu_t_beg = -1 - imu_count = 0 - temp_t_beg = -1 - temp_count = 0 - for result in dataset.generate(What.imu, What.temp): - if What.imu in result: - imu = result[What.imu] - if imu_t_beg == -1: - imu_t_beg = imu.timestamp - np.array([( - (imu.timestamp - imu_t_beg), - imu.accel_x, imu.accel_y, imu.accel_z, - self._hypot(imu.accel_x, imu.accel_y, imu.accel_z), - imu.gyro_x, imu.gyro_y, imu.gyro_z - )], dtype="f8, f8, f8, f8, f8, f8, f8, f8").tofile(f_imu) - imu_count = imu_count + 1 - has_imu = True - if What.temp in result: - temp = result[What.temp] - if temp_t_beg == -1: - temp_t_beg = temp.timestamp - np.array([( - (temp.timestamp - temp_t_beg), - temp.value - )], dtype="f8, f8").tofile(f_temp) - temp_count = temp_count + 1 - has_temp = True - sys.stdout.write('\r imu: {}, temp: {}'.format(imu_count, temp_count)) - sys.stdout.write('\n') - - # pylint: disable=attribute-defined-outside-init - self._info = { - 'timebeg': dataset.timebeg, - 'timeend': dataset.timeend, - 'duration': dataset.duration, - 'has_imu': has_imu, - 'has_temp': has_temp - } - self._binimu = binimu - self._bintemp = bintemp - - with open(bincfg, 'w') as f_cfg: - import yaml - yaml.dump({'info': self._info, 'bins': { - 'imu': BIN_IMU_NAME, - 'temp': BIN_TEMP_NAME - }}, f_cfg, default_flow_style=False) - - def plot(self, t_scale_factor, gryo_converter, - ax_accel_x, ax_accel_y, ax_accel_z, ax_accel, - ax_gyro_x, ax_gyro_y, ax_gyro_z, ax_temp): - import numpy as np - if self.has_imu: - imus = np.memmap(self._binimu, dtype=[ - ('t', 'f8'), - ('accel_x', 'f8'), ('accel_y', 'f8'), ('accel_z', 'f8'), - ('accel', 'f8'), - ('gyro_x', 'f8'), ('gyro_y', 'f8'), ('gyro_z', 'f8'), - ], mode='r') - imus_t = imus['t'] * t_scale_factor - ax_accel_x.plot(imus_t, imus['accel_x']) - ax_accel_y.plot(imus_t, imus['accel_y']) - ax_accel_z.plot(imus_t, imus['accel_z']) - ax_accel.plot(imus_t, imus['accel']) - - my_gryo_converter = \ - lambda x: gryo_converter(x, np.degrees, np.radians) - ax_gyro_x.plot(imus_t, my_gryo_converter(imus['gyro_x'])) - ax_gyro_y.plot(imus_t, my_gryo_converter(imus['gyro_y'])) - ax_gyro_z.plot(imus_t, my_gryo_converter(imus['gyro_z'])) - if self.has_temp: - temps = np.memmap(self._bintemp, dtype=[ - ('t', 'f8'), ('value', 'f8') - ], mode='r') - temps_t = temps['t'] * t_scale_factor - ax_temp.plot(temps_t, temps['value']) - - @property - def timebeg(self): - return self._info['timebeg'] - - @property - def timeend(self): - return self._info['timeend'] - - @property - def duration(self): - return self._info['duration'] - - @property - def has_imu(self): - return self._info['has_imu'] - - @property - def has_temp(self): - return self._info['has_temp'] - - -def analyze(dataset, profile): - if not profile.time_unit: - if dataset.duration > 3600: - time_unit = 'h' - elif dataset.duration > 60: - time_unit = 'm' - else: - time_unit = 's' - else: - time_unit = profile.time_unit - - t_name = 'time ({})'.format(time_unit) - t_scale_factor = TIME_SCALE_FACTORS[time_unit] - - time_limits = profile.time_limits - if not time_limits: - time_limits = [0, dataset.duration * t_scale_factor] - accel_limits = profile.accel_limits - gyro_limits = profile.gyro_limits - temp_limits = profile.temp_limits - auto = profile.auto - - import matplotlib.pyplot as plt - - fig_1 = plt.figure(1, [16, 12]) - fig_1.suptitle('IMU Analytics') - fig_1.subplots_adjust(wspace=0.4, hspace=0.2) - - ax_accel_x = fig_1.add_subplot(241) - ax_accel_x.set_title('accel_x') - ax_accel_x.set_xlabel(t_name) - ax_accel_x.set_ylabel('accel_x (m/s^2)') - ax_accel_x.axis('auto') - ax_accel_x.set_xlim(time_limits) - if not auto and accel_limits and accel_limits[0]: - ax_accel_x.set_ylim(accel_limits[0]) - - ax_accel_y = fig_1.add_subplot(242) - ax_accel_y.set_title('accel_y') - ax_accel_y.set_xlabel(t_name) - ax_accel_y.set_ylabel('accel_y (m/s^2)') - ax_accel_y.axis('auto') - ax_accel_y.set_xlim(time_limits) - if not auto and accel_limits and accel_limits[1]: - ax_accel_y.set_ylim(accel_limits[1]) - - ax_accel_z = fig_1.add_subplot(243) - ax_accel_z.set_title('accel_z') - ax_accel_z.set_xlabel(t_name) - ax_accel_z.set_ylabel('accel_z (m/s^2)') - ax_accel_z.axis('auto') - ax_accel_z.set_xlim(time_limits) - if not auto and accel_limits and accel_limits[2]: - ax_accel_z.set_ylim(accel_limits[2]) - - ax_accel = fig_1.add_subplot(244) - ax_accel.set_title('accel hypot(x,y,z)') - ax_accel.set_xlabel(t_name) - ax_accel.set_ylabel('accel (m/s^2)') - ax_accel.axis('auto') - ax_accel.set_xlim(time_limits) - if not auto and accel_limits and accel_limits[3]: - ax_accel.set_ylim(accel_limits[3]) - - ax_gyro_ylabels = { - ANGLE_DEGREES: 'deg/sec', - ANGLE_RADIANS: 'rad/sec' - } - ax_gyro_ylabel = ax_gyro_ylabels[profile.gyro_show_unit] - - ax_gyro_x = fig_1.add_subplot(245) - ax_gyro_x.set_title('gyro_x') - ax_gyro_x.set_xlabel(t_name) - ax_gyro_x.set_ylabel('gyro_x ({})'.format(ax_gyro_ylabel)) - ax_gyro_x.axis('auto') - ax_gyro_x.set_xlim(time_limits) - if not auto and gyro_limits and gyro_limits[0]: - ax_gyro_x.set_ylim(gyro_limits[0]) - - ax_gyro_y = fig_1.add_subplot(246) - ax_gyro_y.set_title('gyro_y') - ax_gyro_y.set_xlabel(t_name) - ax_gyro_y.set_ylabel('gyro_y ({})'.format(ax_gyro_ylabel)) - ax_gyro_y.axis('auto') - ax_gyro_y.set_xlim(time_limits) - if not auto and gyro_limits and gyro_limits[1]: - ax_gyro_y.set_ylim(gyro_limits[1]) - - ax_gyro_z = fig_1.add_subplot(247) - ax_gyro_z.set_title('gyro_z') - ax_gyro_z.set_xlabel(t_name) - ax_gyro_z.set_ylabel('gyro_z ({})'.format(ax_gyro_ylabel)) - ax_gyro_z.axis('auto') - ax_gyro_z.set_xlim(time_limits) - if not auto and gyro_limits and gyro_limits[2]: - ax_gyro_z.set_ylim(gyro_limits[2]) - - ax_temp = None - if dataset.has_temp: - ax_temp = fig_1.add_subplot(248) - ax_temp.set_title('temperature') - ax_temp.set_xlabel(t_name) - ax_temp.set_ylabel('temperature (degree Celsius)') - ax_temp.axis('auto') - ax_temp.set_xlim(time_limits) - if not auto and temp_limits: - ax_temp.set_ylim(temp_limits) - - def gryo_converter(x, degrees, radians): - if profile.gyro_show_unit == profile.gyro_data_unit: - return x - if profile.gyro_show_unit == ANGLE_DEGREES and \ - profile.gyro_data_unit == ANGLE_RADIANS: - return degrees(x) - if profile.gyro_show_unit == ANGLE_RADIANS and \ - profile.gyro_data_unit == ANGLE_DEGREES: - return radians(x) - sys.exit('Error: gryo_converter wrong logic') - - dataset.plot(t_scale_factor, gryo_converter, - ax_accel_x, ax_accel_y, ax_accel_z, ax_accel, - ax_gyro_x, ax_gyro_y, ax_gyro_z, ax_temp) - - outdir = profile.outdir - if outdir: - figpath = os.path.join(outdir, 'imu_analytics.png') - print('save figure to:\n {}'.format(figpath)) - if not os.path.exists(outdir): - os.makedirs(outdir) - fig_1.savefig(figpath, dpi=100) - - plt.show() - - -def _parse_args(): - def limits_type(string, num=1): - if not string: - return None - if num < 1: - sys.exit('Error: limits_type must be greater than one pair') - pairs = string.split(':') - pairs_len = len(pairs) - if pairs_len == 1: - values = pairs[0].split(',') - if len(values) != 2: - sys.exit('Error: limits_type must be two values' - ' as \'min,max\' for each pair') - results = (float(values[0]), float(values[1])) - if num > 1: - return [results for i in xrange(num)] - else: - return results - elif pairs_len == num: - results = [] - for i in xrange(num): - if pairs[i]: - values = pairs[i].split(',') - if len(values) != 2: - sys.exit('Error: limits_type must be two values' - ' as \'min,max\' for each pair') - results.append((float(values[0]), float(values[1]))) - else: - results.append(None) - return results - else: - sys.exit('Error: limits_type must one or {:d} pairs'.format(num)) - - from functools import partial - - import argparse - parser = argparse.ArgumentParser( - prog=os.path.basename(__file__), - formatter_class=argparse.RawTextHelpFormatter, - description='usage examples:' - '\n python %(prog)s -i DATASET' - '\n python %(prog)s -i DATASET -al=-10,10' - '\n python %(prog)s -i DATASET -al=-5,5::5,15: -gl=-0.1,0.1:: -kl=') - parser.add_argument( - '-i', - '--input', - dest='input', - metavar='DATASET', - required=True, - help='the input dataset path') - parser.add_argument( - '-o', - '--outdir', - dest='outdir', - metavar='OUTDIR', - help='the output directory') - parser.add_argument( - '-c', - '--config', - dest='config', - metavar='CONFIG', - help='yaml config file about input dataset') - parser.add_argument( - '-tu', - '--time-unit', - dest='time_unit', - metavar='s|m|h', - help='the time unit (seconds, minutes or hours)') - parser.add_argument( - '-gdu', - '--gyro-data-unit', - dest='gyro_data_unit', - metavar='r|d', - default='r', - help='the gyro data unit (radians or degrees, default: %(default)s)') - parser.add_argument( - '-gsu', - '--gyro-show-unit', - dest='gyro_show_unit', - metavar='r|d', - help='the gyro show unit (radians or degrees, ' - 'default: same as gyro data unit)') - parser.add_argument( - '-tl', - '--time-limits', - dest='time_limits', - metavar='min,max', - type=limits_type, - help='the time limits, in time unit') - parser.add_argument( - '-al', - '--accel-limits', - dest='accel_limits', - metavar='min,max [min,max:...]', - default='-10,10', - type=partial(limits_type, num=4), - help='the accel limits (default: %(default)s)' - '\n or 4 limits of accel_x,y,z,accel like \'min,max:...\'') - parser.add_argument( - '-gl', - '--gyro-limits', - dest='gyro_limits', - metavar='min,max [min,max:...]', - default='-0.02,0.02', - type=partial(limits_type, num=3), - help='the gyro limits (default: %(default)s)' - '\n or 3 limits of gyro_x,y,z like \'min,max:...\'') - parser.add_argument( - '-kl', - '--temp-limits', - dest='temp_limits', - metavar='min,max', - default='-20,80', - type=limits_type, - help='the temperature limits (default: %(default)s)') - parser.add_argument( - '-l', - '--limits', - dest='all_limits', - metavar='min,max [min,max:...]', - # nargs='+', - type=partial(limits_type, num=8), - help='the all limits, absent one will auto scale' - '\n accel_x,y,z,accel,gyro_x,y,z,temp like \'min,max:...\'') - parser.add_argument( - '-a', - '--auto', - dest='auto', - action='store_true', - help='make all limits auto scale to data limits, except the time') - parser.add_argument( - '-b', - '--binary', - dest='binary', - action='store_true', - help='save large dataset to binary files' - ', and plot them with numpy.memmap()') - return parser.parse_args() - - -def _dict2obj(d): - from collections import namedtuple - return namedtuple('X', d.keys())(*d.values()) - - -def _main(): - args = _parse_args() - # print(args) - - dataset_path = args.input - if not dataset_path or not os.path.exists(dataset_path): - sys.exit('Error: the dataset path not exists, %s' % dataset_path) - dataset_path = os.path.normpath(dataset_path) - - outdir = args.outdir - if not outdir: - outdir = os.path.splitext(dataset_path)[0] - else: - outdir = os.path.abspath(outdir) - - print('imu analytics ...') - print(' input: %s' % dataset_path) - print(' outdir: %s' % outdir) - - profile = { - 'auto': False, - 'time_unit': None, - 'gyro_data_unit': None, - 'gyro_show_unit': None, - 'time_limits': None, - 'accel_limits': None, - 'gyro_limits': None, - 'temp_limits': None - } - profile['auto'] = args.auto - - if args.time_unit: - if args.time_unit not in TIME_SCALE_FACTORS.keys(): - sys.exit('Error: the time unit must be \'s|m|h\'') - else: - profile['time_unit'] = args.time_unit - - if args.gyro_data_unit: - if args.gyro_data_unit not in ANGLE_UNITS: - sys.exit('Error: the gyro unit must be \'r|d\'') - else: - profile['gyro_data_unit'] = args.gyro_data_unit - else: - profile['gyro_data_unit'] = ANGLE_RADIANS - - if args.gyro_show_unit: - if args.gyro_show_unit not in ANGLE_UNITS: - sys.exit('Error: the gyro unit must be \'r|d\'') - else: - profile['gyro_show_unit'] = args.gyro_show_unit - else: - profile['gyro_show_unit'] = profile['gyro_data_unit'] - - if args.time_limits: - if not args.time_unit: - sys.exit('Error: the time unit must be set') - profile['time_limits'] = args.time_limits - - if args.all_limits: - profile['accel_limits'] = args.all_limits[:4] - profile['gyro_limits'] = args.all_limits[4:7] - profile['temp_limits'] = args.all_limits[7] - else: - profile['accel_limits'] = args.accel_limits - profile['gyro_limits'] = args.gyro_limits - profile['temp_limits'] = args.temp_limits - - for k, v in profile.items(): - print(' {}: {}'.format(k, v)) - - def dataset_creator(path): - print('open dataset ...') - if args.config: - import yaml - config = yaml.load(file(args.config, 'r')) - model = config['dataset'] - if model == 'rosbag': - dataset = ROSBag(path, **config['rosbag']) - elif model == 'mynteye': - dataset = MYNTEYE(path) - else: - sys.exit('Error: dataset model not supported {}'.format(model)) - else: - dataset = ROSBag( - path, - topic_imu='/mynteye/imu/data_raw', - topic_temp='/mynteye/temp/data_raw') - return dataset - - if args.binary: - dataset = BinDataset(dataset_path, dataset_creator) - else: - dataset = RawDataset(dataset_path, dataset_creator) - print(' timebeg: {:f}, timeend: {:f}, duration: {:f}'.format( - dataset.timebeg, dataset.timeend, dataset.duration)) - - profile['outdir'] = outdir - analyze(dataset, _dict2obj(profile)) - - print('imu analytics done') - - -if __name__ == '__main__': - _main() diff --git a/tools/analytics/stamp_analytics.py b/tools/analytics/stamp_analytics.py deleted file mode 100644 index b36d3fb..0000000 --- a/tools/analytics/stamp_analytics.py +++ /dev/null @@ -1,370 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# 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. - -# pylint: disable=missing-docstring -from __future__ import print_function - -import os -import sys - -TOOLBOX_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -sys.path.append(os.path.join(TOOLBOX_DIR, 'internal')) - -# pylint: disable=import-error,wrong-import-position -from data import ROSBag, MYNTEYE, What - -ANGLE_DEGREES = 'd' -ANGLE_RADIANS = 'r' -ANGLE_UNITS = (ANGLE_DEGREES, ANGLE_RADIANS) - -BIN_IMG_NAME = 'stamp_analytics_img.bin' -BIN_IMU_NAME = 'stamp_analytics_imu.bin' - -RESULT_FIGURE = 'stamp_analytics.png' - - -IMU_ALL = 0 -IMU_ACCEL = 1 -IMU_GYRO = 2 - - -class BinDataset(object): - - def __init__(self, path, dataset_creator): - self.path = path - self.dataset_creator = dataset_creator - self._digest() - - def _digest(self): - bindir = os.path.splitext(self.path)[0] - binimg = os.path.join(bindir, BIN_IMG_NAME) - binimu = os.path.join(bindir, BIN_IMU_NAME) - if os.path.isfile(binimg) and os.path.isfile(binimu): - print('find binary files ...') - print(' binimg: {}'.format(binimg)) - print(' binimu: {}'.format(binimu)) - while True: - sys.stdout.write('Do you want to use it directly? [Y/n] ') - choice = raw_input().lower() - if choice == '' or choice == 'y': - self._binimg = binimg - self._binimu = binimu - self._has_img = True - self._has_imu = True - return - elif choice == 'n': - break - else: - print('Please respond with \'y\' or \'n\'.') - self._convert() - - def _convert(self): - import numpy as np - - dataset = self.dataset_creator(self.path) - bindir = os.path.splitext(self.path)[0] - if not os.path.exists(bindir): - os.makedirs(bindir) - binimg = os.path.join(bindir, BIN_IMG_NAME) - binimu = os.path.join(bindir, BIN_IMU_NAME) - print('save to binary files ...') - print(' binimg: {}'.format(binimg)) - print(' binimu: {}'.format(binimu)) - - has_img = False - has_imu = False - with open(binimg, 'wb') as f_img, open(binimu, 'wb') as f_imu: - img_count = 0 - imu_count = 0 - for result in dataset.generate(What.img_left, What.imu): - if What.img_left in result: - img = result[What.img_left] - np.array([( - img.timestamp - )], dtype="f8").tofile(f_img) - img_count = img_count + 1 - has_img = True - if What.imu in result: - imu = result[What.imu] - np.array([( - imu.timestamp, imu.flag, - imu.accel_x, imu.accel_y, imu.accel_z, - imu.gyro_x, imu.gyro_y, imu.gyro_z - )], dtype="f8, i4, f8, f8, f8, f8, f8, f8").tofile(f_imu) - imu_count = imu_count + 1 - has_imu = True - sys.stdout.write('\r img: {}, imu: {}'.format(img_count, imu_count)) - sys.stdout.write('\n') - - # pylint: disable=attribute-defined-outside-init - self._binimg = binimg - self._binimu = binimu - self._has_img = has_img - self._has_imu = has_imu - - def stamp_analytics(self, args): - outdir = args.outdir - - import numpy as np - if self.has_img: - # pd.cut fails on readonly arrays - # https://github.com/pandas-dev/pandas/issues/18773 - # imgs = np.memmap(self._binimg, dtype=[ - # ('t', 'f8') - # ], mode='r') - imgs = np.fromfile(self._binimg, dtype=[ - ('t', 'f8') - ]) - else: - sys.exit("Error: there are no imgs.") - - if self.has_imu: - imus = np.memmap(self._binimu, dtype=[ - ('t', 'f8'), ('flag', 'i4'), - ('accel_x', 'f8'), ('accel_y', 'f8'), ('accel_z', 'f8'), - ('gyro_x', 'f8'), ('gyro_y', 'f8'), ('gyro_z', 'f8'), - ], mode='r') - else: - sys.exit("Error: there are no imus.") - - period_img = 1. / args.rate_img - period_imu = 1. / args.rate_imu - print('\nrate (Hz)') - print(' img: {}, imu: {}'.format(args.rate_img, args.rate_imu)) - print('sample period (s)') - print(' img: {}, imu: {}'.format(period_img, period_imu)) - - imgs_t_diff = np.diff(imgs['t']) - # imus_t_diff = np.diff(imus['t']) - - accel = imus[(imus['flag'] == IMU_ALL) | (imus['flag'] == IMU_ACCEL)] - accel_t_diff = np.diff(accel['t']) - gyro = imus[(imus['flag'] == IMU_ALL) | (imus['flag'] == IMU_GYRO)] - gyro_t_diff = np.diff(gyro['t']) - - print('\ncount') - print(' imgs: {}, imus: {}, accel: {}, gyro: {}'.format( - imgs.size, imus.size, accel.size, gyro.size)) - print('\ndiff count') - print(' imgs_t_diff: {}, accel_t_diff: {}, gyro_t_diff: {}'.format( - imgs_t_diff.size, accel_t_diff.size, gyro_t_diff.size)) - - print('\ndiff where (factor={})'.format(args.factor)) - self._print_t_diff_where('imgs', imgs_t_diff, period_img, args.factor) - # self._print_t_diff_where('imus', imus_t_diff, period_imu, args.factor) - self._print_t_diff_where('accel', accel_t_diff, period_imu, args.factor) - self._print_t_diff_where('gyro', gyro_t_diff, period_imu, args.factor) - - import pandas as pd - bins = imgs['t'] - bins_n = imgs['t'].size - bins = pd.Series(data=bins).drop_duplicates(keep='first') - - print('\nimage timestamp duplicates: {}'.format(bins_n - bins.size)) - - def _cut_by_imgs_t(imus_t): - cats = pd.cut(imus_t, bins) - return cats.value_counts() - - self._plot( - outdir, - imgs_t_diff, - accel_t_diff, - _cut_by_imgs_t( - accel['t']), - gyro_t_diff, - _cut_by_imgs_t( - gyro['t'])) - - def _print_t_diff_where(self, name, t_diff, period, factor): - import numpy as np - - where = np.argwhere(t_diff > period * (1 + factor)) - print(' {} where diff > {}*{} ({})'.format( - name, period, 1 + factor, where.size)) - for x in where: - print(' {:8d}: {:.16f}'.format(x[0], t_diff[x][0])) - - where = np.argwhere(t_diff < period * (1 - factor)) - print(' {} where diff < {}*{} ({})'.format( - name, period, 1 - factor, where.size)) - for x in where: - print(' {:8d}: {:.16f}'.format(x[0], t_diff[x][0])) - - def _plot(self, outdir, imgs_t_diff, - accel_t_diff, accel_counts, gyro_t_diff, gyro_counts): - import matplotlib.pyplot as plt - import numpy as np - - fig_1 = plt.figure(1, [16, 12]) - fig_1.suptitle('Stamp Analytics') - fig_1.subplots_adjust( - left=0.1, - right=0.95, - top=0.85, - bottom=0.15, - wspace=0.4, - hspace=0.4) - - ax_imgs_t_diff = fig_1.add_subplot(231) - ax_imgs_t_diff.set_title('Image Timestamp Diff') - ax_imgs_t_diff.set_xlabel('diff index') - ax_imgs_t_diff.set_ylabel('diff (s)') - ax_imgs_t_diff.axis('auto') - - ax_imgs_t_diff.set_xlim([0, imgs_t_diff.size]) - ax_imgs_t_diff.plot(imgs_t_diff) - - def _plot_imus(name, t_diff, counts, pos_offset=0): - ax_imus_t_diff = fig_1.add_subplot(232 + pos_offset) - ax_imus_t_diff.set_title('{} Timestamp Diff'.format(name)) - ax_imus_t_diff.set_xlabel('diff index') - ax_imus_t_diff.set_ylabel('diff (s)') - ax_imus_t_diff.axis('auto') - - ax_imus_t_diff.set_xlim([0, t_diff.size - 1]) - ax_imus_t_diff.plot(t_diff) - - ax_imus_counts = fig_1.add_subplot(233 + pos_offset) - ax_imus_counts.set_title('{} Count Per Image Intervel'.format(name)) - ax_imus_counts.set_xlabel('intervel index') - ax_imus_counts.set_ylabel('imu count') - ax_imus_counts.axis('auto') - - # print(counts.values) - # counts.plot(kind='line', ax=ax_imus_counts) - data = counts.values - ax_imus_counts.set_xlim([0, data.size]) - ax_imus_counts.set_ylim([np.min(data) - 1, np.max(data) + 1]) - ax_imus_counts.plot(data) - - _plot_imus('Accel', accel_t_diff, accel_counts) - _plot_imus('Gyro', gyro_t_diff, gyro_counts, 3) - - if outdir: - figpath = os.path.join(outdir, RESULT_FIGURE) - print('\nsave figure to:\n {}'.format(figpath)) - if not os.path.exists(outdir): - os.makedirs(outdir) - fig_1.savefig(figpath, dpi=100) - - plt.show() - - @property - def has_img(self): - return self._has_img - - @property - def has_imu(self): - return self._has_imu - - -def _parse_args(): - import argparse - parser = argparse.ArgumentParser( - prog=os.path.basename(__file__), - formatter_class=argparse.RawTextHelpFormatter, - description='usage examples:' - '\n python %(prog)s -i DATASET') - parser.add_argument( - '-i', - '--input', - dest='input', - metavar='DATASET', - required=True, - help='the input dataset path') - parser.add_argument( - '-o', - '--outdir', - dest='outdir', - metavar='OUTDIR', - help='the output directory') - parser.add_argument( - '-c', - '--config', - dest='config', - metavar='CONFIG', - help='yaml config file about input dataset') - parser.add_argument( - '-f', - '--factor', - dest='factor', - metavar='FACTOR', - default=0.1, - type=float, - help='the wave factor (default: %(default)s)') - parser.add_argument( - '--rate-img', - dest='rate_img', - metavar='RATE', - default=60, - type=int, - help='the img rate (default: %(default)s)') - parser.add_argument( - '--rate-imu', - dest='rate_imu', - metavar='RATE', - default=200, - type=int, - help='the imu rate (default: %(default)s)') - return parser.parse_args() - - -def _main(): - args = _parse_args() - - dataset_path = args.input - if not dataset_path or not os.path.exists(dataset_path): - sys.exit('Error: the dataset path not exists, %s' % dataset_path) - dataset_path = os.path.normpath(dataset_path) - - outdir = args.outdir - if not args.outdir: - outdir = os.path.splitext(dataset_path)[0] - else: - outdir = os.path.abspath(outdir) - args.outdir = outdir - - print('stamp analytics ...') - print(' input: %s' % dataset_path) - print(' outdir: %s' % outdir) - - def dataset_creator(path): - print('open dataset ...') - if args.config: - import yaml - config = yaml.load(file(args.config, 'r')) - model = config['dataset'] - if model == 'rosbag': - dataset = ROSBag(path, **config['rosbag']) - elif model == 'mynteye': - dataset = MYNTEYE(path) - else: - sys.exit('Error: dataset model not supported {}'.format(model)) - else: - dataset = ROSBag(path, - topic_img_left='/mynteye/left/image_raw', - topic_imu='/mynteye/imu/data_raw') - return dataset - - dataset = BinDataset(dataset_path, dataset_creator) - dataset.stamp_analytics(args) - - print('stamp analytics done') - - -if __name__ == '__main__': - _main() diff --git a/tools/checksum/md5sum.sh b/tools/checksum/md5sum.sh deleted file mode 100755 index 99ec4e4..0000000 --- a/tools/checksum/md5sum.sh +++ /dev/null @@ -1,78 +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. - -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/host.sh" - -if [ "$HOST_OS" = "Linux" ]; then - _md5sum() { md5sum "$1"; } -elif [ "$HOST_OS" = "Mac" ]; then - _md5sum() { md5 -q "$1"; } -elif [ "$HOST_OS" = "Win" ]; then - _md5sum() { certutil -hashfile "$1" MD5; } -else # unexpected - _echo_e "Unknown host os :(" - exit 1 -fi - -PYTHON="python" -if [ "$HOST_OS" = "Win" ]; then - # default python on MSYS - PYTHON="python2" -fi - -_get_size() { -PYTHON_ARG="$1" $PYTHON - <" - exit 1 -fi - -if [ -d "$1" ]; then - find "$1" -type f | while read -r f; do - _print_info "$f" - done -else - _print_info "$1" -fi diff --git a/tools/config/mynteye/mynteye_config.yaml b/tools/config/mynteye/mynteye_config.yaml deleted file mode 100644 index a915a17..0000000 --- a/tools/config/mynteye/mynteye_config.yaml +++ /dev/null @@ -1,9 +0,0 @@ -# dataset model: rosbag, mynteye -dataset: "mynteye" - -# rosbag config -rosbag: - topic_img_left: "/mynteye/left/image_raw" - topic_img_right: "/mynteye/right/image_raw" - topic_imu: "/mynteye/imu/data_raw" - topic_temp: "/mynteye/temp/data_raw" diff --git a/tools/dataset/CMakeLists.txt b/tools/dataset/CMakeLists.txt deleted file mode 100644 index 54399da..0000000 --- a/tools/dataset/CMakeLists.txt +++ /dev/null @@ -1,39 +0,0 @@ -# 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. - -get_filename_component(DIR_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) - -set_outdir( - "${OUT_DIR}/lib/${DIR_NAME}" - "${OUT_DIR}/lib/${DIR_NAME}" - "${OUT_DIR}/bin/${DIR_NAME}" -) - -include_directories( - ${PRO_DIR}/src -) - -## record - -# make_executable(record -# SRCS record.cc dataset.cc -# LINK_LIBS mynteye ${OpenCV_LIBS} -# DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} -#) - -make_executable(record2 - SRCS record2.cc dataset.cc - LINK_LIBS mynteye ${OpenCV_LIBS} - DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} -) diff --git a/tools/dataset/dataset.cc b/tools/dataset/dataset.cc deleted file mode 100644 index eab794f..0000000 --- a/tools/dataset/dataset.cc +++ /dev/null @@ -1,203 +0,0 @@ -// 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. -#include "dataset/dataset.h" - -#include -#include - -#include -#include -#include -#include - -#include "mynteye/logger.h" -#include "mynteye/util/files.h" - -#define FULL_PRECISION \ - std::fixed << std::setprecision(std::numeric_limits::max_digits10) - -#define IMAGE_FILENAME_WIDTH 6 - -MYNTEYE_BEGIN_NAMESPACE - -namespace tools { - -Dataset::Dataset(std::string outdir) : outdir_(std::move(outdir)) { - VLOG(2) << __func__; - if (!files::mkdir(outdir_)) { - LOG(FATAL) << "Create directory failed: " << outdir_; - } -} - -Dataset::~Dataset() { - VLOG(2) << __func__; - for (auto &&it = stream_writers_.begin(); it != stream_writers_.end(); it++) { - if (it->second) { - it->second->ofs.flush(); - it->second->ofs.close(); - } - } - if (motion_writer_) { - motion_writer_->ofs.flush(); - motion_writer_->ofs.close(); - } -} - -void Dataset::SaveStreamData( - const Stream &stream, const device::StreamData &data) { - auto &&writer = GetStreamWriter(stream); - auto seq = stream_counts_[stream]; - writer->ofs << seq << ", " << data.img->frame_id << ", " - << data.img->timestamp << ", " << data.img->exposure_time - << std::endl; - if (data.frame) { - std::stringstream ss; - ss << writer->outdir << MYNTEYE_OS_SEP << std::dec - << std::setw(IMAGE_FILENAME_WIDTH) << std::setfill('0') << seq << ".png"; - if (data.frame->format() == Format::GREY) { - cv::Mat img( - data.frame->height(), data.frame->width(), CV_8UC1, - data.frame->data()); - cv::imwrite(ss.str(), img); - } else if (data.frame->format() == Format::YUYV) { - cv::Mat img( - data.frame->height(), data.frame->width(), CV_8UC2, - data.frame->data()); - cv::cvtColor(img, img, cv::COLOR_YUV2BGR_YUY2); - cv::imwrite(ss.str(), img); - } else if (data.frame->format() == Format::BGR888) { - cv::Mat img( - data.frame->height(), data.frame->width(), CV_8UC3, - data.frame->data()); - cv::imwrite(ss.str(), img); - } else { - cv::Mat img( - data.frame->height(), data.frame->width(), CV_8UC1, - data.frame->data()); - cv::imwrite(ss.str(), img); - } - } - ++stream_counts_[stream]; -} - -void Dataset::SaveMotionData(const device::MotionData &data) { - auto &&writer = GetMotionWriter(); - // auto seq = data.imu->serial_number; - auto seq = motion_count_; - writer->ofs << seq << ", " << static_cast(data.imu->flag) << ", " - << data.imu->timestamp << ", " << data.imu->accel[0] << ", " - << data.imu->accel[1] << ", " << data.imu->accel[2] << ", " - << data.imu->gyro[0] << ", " << data.imu->gyro[1] << ", " - << data.imu->gyro[2] << ", " << data.imu->temperature - << std::endl; - ++motion_count_; - /* - if(motion_count_ != seq) { - LOG(INFO) << "motion_count_ != seq !" << " motion_count_: " << motion_count_ - << " seq: " << seq; - motion_count_ = seq; - } - */ -} - -void Dataset::SaveStreamData( - const Stream &stream, const api::StreamData &data) { - auto &&writer = GetStreamWriter(stream); - auto seq = stream_counts_[stream]; - writer->ofs << seq << ", " << data.img->frame_id << ", " - << data.img->timestamp << ", " << data.img->exposure_time - << std::endl; - if (!data.frame.empty()) { - std::stringstream ss; - ss << writer->outdir << MYNTEYE_OS_SEP << std::dec - << std::setw(IMAGE_FILENAME_WIDTH) << std::setfill('0') << seq << ".png"; - cv::imwrite(ss.str(), data.frame); - } - ++stream_counts_[stream]; -} - -void Dataset::SaveMotionData(const api::MotionData &data) { - auto &&writer = GetMotionWriter(); - // auto seq = data.imu->serial_number; - auto seq = motion_count_; - if (data.imu->flag == 1 || data.imu->flag == 2) { - writer->ofs << seq << ", " << static_cast(data.imu->flag) << ", " - << data.imu->timestamp << ", " << data.imu->accel[0] << ", " - << data.imu->accel[1] << ", " << data.imu->accel[2] << ", " - << data.imu->gyro[0] << ", " << data.imu->gyro[1] << ", " - << data.imu->gyro[2] << ", " << data.imu->temperature - << std::endl; - ++motion_count_; - } - /* - if(motion_count_ != seq) { - LOG(INFO) << "motion_count_ != seq !" << " motion_count_: " << motion_count_ - << " seq: " << seq; - motion_count_ = seq; - } - */ -} - -Dataset::writer_t Dataset::GetStreamWriter(const Stream &stream) { - try { - return stream_writers_.at(stream); - } catch (const std::out_of_range &e) { - writer_t writer = std::make_shared(); - switch (stream) { - case Stream::LEFT: { - writer->outdir = outdir_ + MYNTEYE_OS_SEP "left"; - } break; - case Stream::RIGHT: { - writer->outdir = outdir_ + MYNTEYE_OS_SEP "right"; - } break; - default: - LOG(FATAL) << "Unsupported stream: " << stream; - } - writer->outfile = writer->outdir + MYNTEYE_OS_SEP "stream.txt"; - - files::mkdir(writer->outdir); - writer->ofs.open(writer->outfile, std::ofstream::out); - writer->ofs << "seq, frame_id, timestamp, exposure_time" << std::endl; - writer->ofs << FULL_PRECISION; - - stream_writers_[stream] = writer; - stream_counts_[stream] = 0; - return writer; - } -} - -Dataset::writer_t Dataset::GetMotionWriter() { - if (motion_writer_ == nullptr) { - writer_t writer = std::make_shared(); - writer->outdir = outdir_; - writer->outfile = writer->outdir + MYNTEYE_OS_SEP "motion.txt"; - - files::mkdir(writer->outdir); - writer->ofs.open(writer->outfile, std::ofstream::out); - writer->ofs << "seq, flag, timestamp, accel_x, accel_y, accel_z, " - "gyro_x, gyro_y, gyro_z, temperature" - << std::endl; - writer->ofs << FULL_PRECISION; - - motion_writer_ = writer; - motion_count_ = 0; - accel_count_ = 0; - gyro_count_ = 0; - } - return motion_writer_; -} - -} // namespace tools - -MYNTEYE_END_NAMESPACE diff --git a/tools/dataset/dataset.h b/tools/dataset/dataset.h deleted file mode 100644 index 2a44203..0000000 --- a/tools/dataset/dataset.h +++ /dev/null @@ -1,69 +0,0 @@ -// 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. -#ifndef MYNTEYE_TOOLS_DATASET_H_ // NOLINT -#define MYNTEYE_TOOLS_DATASET_H_ -#pragma once - -#include -#include -#include -#include - -#include "mynteye/mynteye.h" -#include "mynteye/api/api.h" -#include "mynteye/device/callbacks.h" - -MYNTEYE_BEGIN_NAMESPACE - -namespace tools { - -class Dataset { - public: - struct Writer { - std::ofstream ofs; - std::string outdir; - std::string outfile; - }; - - using writer_t = std::shared_ptr; - - explicit Dataset(std::string outdir); - ~Dataset(); - - void SaveStreamData(const Stream &stream, const device::StreamData &data); - void SaveMotionData(const device::MotionData &data); - - void SaveStreamData(const Stream &stream, const api::StreamData &data); - void SaveMotionData(const api::MotionData &data); - - private: - writer_t GetStreamWriter(const Stream &stream); - writer_t GetMotionWriter(); - - std::string outdir_; - - std::map stream_writers_; - writer_t motion_writer_; - - std::map stream_counts_; - std::size_t motion_count_; - std::size_t accel_count_; - std::size_t gyro_count_; -}; - -} // namespace tools - -MYNTEYE_END_NAMESPACE - -#endif // MYNTEYE_TOOLS_DATASET_H_ NOLINT diff --git a/tools/dataset/record.cc b/tools/dataset/record.cc deleted file mode 100644 index a771a54..0000000 --- a/tools/dataset/record.cc +++ /dev/null @@ -1,134 +0,0 @@ -// 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. -#include -#include - -#include "mynteye/logger.h" -#include "mynteye/api/api.h" -#include "mynteye/util/times.h" - -#include "dataset/dataset.h" - -MYNTEYE_USE_NAMESPACE - -int main(int argc, char *argv[]) { - auto &&api = API::Create(argc, argv); - if (!api) return 1; - - bool ok; - auto &&request = api->SelectStreamRequest(&ok); - if (!ok) return 1; - api->ConfigStreamRequest(request); - - api->LogOptionInfos(); - - // Enable this will cache the motion datas until you get them. - api->EnableMotionDatas(); - api->Start(Source::ALL); - - const char *outdir; - if (argc >= 2) { - outdir = argv[1]; - } else { - outdir = "./dataset"; - } - tools::Dataset dataset(outdir); - - cv::namedWindow("frame"); - - std::size_t img_count = 0; - std::size_t imu_count = 0; - auto &&time_beg = times::now(); - while (true) { - api->WaitForStreams(); - - auto &&left_datas = api->GetStreamDatas(Stream::LEFT); - auto &&right_datas = api->GetStreamDatas(Stream::RIGHT); - img_count += left_datas.size(); - - auto &&motion_datas = api->GetMotionDatas(); - imu_count += motion_datas.size(); - - auto &&left_frame = left_datas.back().frame; - auto &&right_frame = right_datas.back().frame; - - cv::Mat img; - - if (left_frame->format() == Format::GREY) { - cv::Mat left_img( - left_frame->height(), left_frame->width(), CV_8UC1, - left_frame->data()); - cv::Mat right_img( - right_frame->height(), right_frame->width(), CV_8UC1, - right_frame->data()); - cv::hconcat(left_img, right_img, img); - } else if (left_frame->format() == Format::YUYV) { - cv::Mat left_img( - left_frame->height(), left_frame->width(), CV_8UC2, - left_frame->data()); - cv::Mat right_img( - right_frame->height(), right_frame->width(), CV_8UC2, - right_frame->data()); - cv::cvtColor(left_img, left_img, cv::COLOR_YUV2BGR_YUY2); - cv::cvtColor(right_img, right_img, cv::COLOR_YUV2BGR_YUY2); - cv::hconcat(left_img, right_img, img); - } else if (left_frame->format() == Format::BGR888) { - cv::Mat left_img( - left_frame->height(), left_frame->width(), CV_8UC3, - left_frame->data()); - cv::Mat right_img( - right_frame->height(), right_frame->width(), CV_8UC3, - right_frame->data()); - cv::hconcat(left_img, right_img, img); - } else { - return -1; - } - cv::imshow("frame", img); - if (img_count > 10 && imu_count > 50) { // save - for (auto &&left : left_datas) { - dataset.SaveStreamData(Stream::LEFT, left); - } - for (auto &&right : right_datas) { - dataset.SaveStreamData(Stream::RIGHT, right); - } - - for (auto &&motion : motion_datas) { - dataset.SaveMotionData(motion); - } - - std::cout << "\rSaved " << img_count << " imgs" - << ", " << imu_count << " imus" << std::flush; - } - - char key = static_cast(cv::waitKey(1)); - if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q - break; - } - } - std::cout << " to " << outdir << std::endl; - auto &&time_end = times::now(); - - api->Stop(Source::ALL); - - float elapsed_ms = - times::count(time_end - time_beg) * 0.001f; - LOG(INFO) << "Time beg: " << times::to_local_string(time_beg) - << ", end: " << times::to_local_string(time_end) - << ", cost: " << elapsed_ms << "ms"; - LOG(INFO) << "Img count: " << img_count - << ", fps: " << (1000.f * img_count / elapsed_ms); - LOG(INFO) << "Imu count: " << imu_count - << ", hz: " << (1000.f * imu_count / elapsed_ms); - return 0; -} diff --git a/tools/dataset/record2.cc b/tools/dataset/record2.cc deleted file mode 100644 index 99580ea..0000000 --- a/tools/dataset/record2.cc +++ /dev/null @@ -1,137 +0,0 @@ -// 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. -#include -#include - -#include "mynteye/logger.h" -#include "mynteye/device/device.h" -#include "mynteye/device/utils.h" -#include "mynteye/util/times.h" - -#include "dataset/dataset.h" - -MYNTEYE_USE_NAMESPACE - -int main(int argc, char *argv[]) { - glog_init _(argc, argv); - - auto &&device = device::select(); - if (!device) return 1; - - bool ok; - auto &&request = device::select_request(device, &ok); - if (!ok) return 1; - device->ConfigStreamRequest(request); - - device->LogOptionInfos(); - - // Enable this will cache the motion datas until you get them. - device->EnableMotionDatas(); - device->Start(Source::ALL); - - const char *outdir; - if (argc >= 2) { - outdir = argv[1]; - } else { - outdir = "./dataset"; - } - tools::Dataset dataset(outdir); - - cv::namedWindow("frame"); - - std::size_t img_count = 0; - std::size_t imu_count = 0; - auto &&time_beg = times::now(); - while (true) { - device->WaitForStreams(); - - auto &&left_datas = device->GetStreamDatas(Stream::LEFT); - auto &&right_datas = device->GetStreamDatas(Stream::RIGHT); - img_count += left_datas.size(); - - auto &&motion_datas = device->GetMotionDatas(); - imu_count += motion_datas.size(); - - auto &&left_frame = left_datas.back().frame; - auto &&right_frame = right_datas.back().frame; - - cv::Mat img; - - if (left_frame->format() == Format::GREY) { - cv::Mat left_img( - left_frame->height(), left_frame->width(), CV_8UC1, - left_frame->data()); - cv::Mat right_img( - right_frame->height(), right_frame->width(), CV_8UC1, - right_frame->data()); - cv::hconcat(left_img, right_img, img); - } else if (left_frame->format() == Format::YUYV) { - cv::Mat left_img( - left_frame->height(), left_frame->width(), CV_8UC2, - left_frame->data()); - cv::Mat right_img( - right_frame->height(), right_frame->width(), CV_8UC2, - right_frame->data()); - cv::cvtColor(left_img, left_img, cv::COLOR_YUV2BGR_YUY2); - cv::cvtColor(right_img, right_img, cv::COLOR_YUV2BGR_YUY2); - cv::hconcat(left_img, right_img, img); - } else if (left_frame->format() == Format::BGR888) { - cv::Mat left_img( - left_frame->height(), left_frame->width(), CV_8UC3, - left_frame->data()); - cv::Mat right_img( - right_frame->height(), right_frame->width(), CV_8UC3, - right_frame->data()); - cv::hconcat(left_img, right_img, img); - } else { - return -1; - } - cv::imshow("frame", img); - if (img_count > 10 && imu_count > 50) { // save - for (auto &&left : left_datas) { - dataset.SaveStreamData(Stream::LEFT, left); - } - for (auto &&right : right_datas) { - dataset.SaveStreamData(Stream::RIGHT, right); - } - - for (auto &&motion : motion_datas) { - dataset.SaveMotionData(motion); - } - - std::cout << "\rSaved " << img_count << " imgs" - << ", " << imu_count << " imus" << std::flush; - } - - char key = static_cast(cv::waitKey(1)); - if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q - break; - } - } - std::cout << " to " << outdir << std::endl; - auto &&time_end = times::now(); - - device->Stop(Source::ALL); - - float elapsed_ms = - times::count(time_end - time_beg) * 0.001f; - LOG(INFO) << "Time beg: " << times::to_local_string(time_beg) - << ", end: " << times::to_local_string(time_end) - << ", cost: " << elapsed_ms << "ms"; - LOG(INFO) << "Img count: " << img_count - << ", fps: " << (1000.f * img_count / elapsed_ms); - LOG(INFO) << "Imu count: " << imu_count - << ", hz: " << (1000.f * imu_count / elapsed_ms); - return 0; -} \ No newline at end of file diff --git a/tools/internal/data/__init__.py b/tools/internal/data/__init__.py deleted file mode 100644 index 2e1ce73..0000000 --- a/tools/internal/data/__init__.py +++ /dev/null @@ -1,442 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# 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. - -# pylint: disable=missing-docstring - -from __future__ import print_function - - -def isiter_not_str(obj): - return hasattr(obj, '__iter__') and not isinstance(obj, basestring) - - -class What(object): - img_left = "img_left" - img_right = "img_right" - imu = "imu" - temp = "temp" - - -class DataError(Exception): - - def __init__(self, message): - super(DataError, self).__init__() - self.message = message - - -class Data(object): - - def __init__(self): - self._timestamp = 0 - - @property - def timestamp(self): - return self._timestamp - - @timestamp.setter - def timestamp(self, value): - self._timestamp = value - - def __str__(self): - return "timestamp: {:f}".format(self.timestamp) - - -class Image(Data): - - def __init__(self): - super(Image, self).__init__() - self._data = None - - @property - def data(self): - return self._data - - @data.setter - def data(self, data): - self._data = data - - @property - def width(self): - return 0 - - @property - def height(self): - return 0 - - -class IMU(Data): - - def __init__(self): - super(IMU, self).__init__() - self._flag = 0 - self._accel_x = 0 - self._accel_y = 0 - self._accel_z = 0 - self._gyro_x = 0 - self._gyro_y = 0 - self._gyro_z = 0 - - @property - def flag(self): - return self._flag - - @flag.setter - def flag(self, flag): - self._flag = flag - - @property - def accel(self): - return self._accel_x, self._accel_y, self._accel_z - - @property - def accel_x(self): - return self._accel_x - - @accel_x.setter - def accel_x(self, accel_x): - self._accel_x = accel_x - - @property - def accel_y(self): - return self._accel_y - - @accel_y.setter - def accel_y(self, accel_y): - self._accel_y = accel_y - - @property - def accel_z(self): - return self._accel_z - - @accel_z.setter - def accel_z(self, accel_z): - self._accel_z = accel_z - - @property - def gyro(self): - return self._gyro_x, self._gyro_y, self._gyro_z - - @property - def gyro_x(self): - return self._gyro_x - - @gyro_x.setter - def gyro_x(self, gyro_x): - self._gyro_x = gyro_x - - @property - def gyro_y(self): - return self._gyro_y - - @gyro_y.setter - def gyro_y(self, gyro_y): - self._gyro_y = gyro_y - - @property - def gyro_z(self): - return self._gyro_z - - @gyro_z.setter - def gyro_z(self, gyro_z): - self._gyro_z = gyro_z - - def __str__(self): - return super(IMU, self).__str__() + \ - "\naccel: {:f}, {:f}, {:f}".format(*self.accel) + \ - "\ngyro: {:f}, {:f}, {:f}".format(*self.gyro) - - -class Temp(Data): - - def __init__(self): - super(Temp, self).__init__() - self._value = 0 - - @property - def value(self): - return self._value - - @value.setter - def value(self, value): - self._value = value - - def __str__(self): - return super(Temp, self).__str__() + \ - "\ntemp: {:f}".format(self.value) - - -class Dataset(object): - - def __init__(self, path): - self.path = path - - def generate(self, *what): # pylint: disable=unused-argument - raise DataError('DataError: method not implemented') - - def iterate(self, action, *what): - for result in self.generate(*what): - if isinstance(result, dict): # dict > **kwds - action(**result) - elif isiter_not_str(result): # iterable > *args - action(*result) - else: - action(result) - - def collect(self, *what): - results = {} - for result in self.generate(*what): - for key in result.keys(): - if key not in what: - continue - if key not in results: - results[key] = [] - results[key].append(result[key]) - return results - - @property - def timebeg(self): - raise DataError('DataError: method not implemented') - - @property - def timeend(self): - raise DataError('DataError: method not implemented') - - @property - def duration(self): - raise DataError('DataError: method not implemented') - - -class ROSBag(Dataset): - - def __init__(self, path, **config): - super(ROSBag, self).__init__(path) - self.topic_img_left = config['topic_img_left'] \ - if 'topic_img_left' in config else None - self.topic_img_right = config['topic_img_right'] \ - if 'topic_img_right' in config else None - self.topic_imu = config['topic_imu'] \ - if 'topic_imu' in config else None - self.topic_temp = config['topic_temp'] \ - if 'topic_temp' in config else None - - import yaml - from rosbag.bag import Bag - # pylint: disable=protected-access - self._info = yaml.load(Bag(self.path, 'r')._get_yaml_info()) - - def generate(self, *what): - import rosbag - hit_img_left = What.img_left in what - hit_img_right = What.img_right in what - hit_imu = What.imu in what - hit_temp = What.temp in what - try: - # pylint: disable=unused-variable - for topic, msg, t in rosbag.Bag(self.path).read_messages(): - result = {} - stamp = msg.header.stamp.to_sec() - if hit_img_left and topic == self.topic_img_left: - img = Image() - img.timestamp = stamp - # pylint: disable=fixme - # TODO: data with cv_bridge - result[What.img_left] = img - elif hit_img_right and topic == self.topic_img_right: - img = Image() - img.timestamp = stamp - # TODO: data with cv_bridge - result[What.img_right] = img - elif hit_imu and topic == self.topic_imu: - imu = IMU() - imu.timestamp = stamp - imu.accel_x = msg.linear_acceleration.x - imu.accel_y = msg.linear_acceleration.y - imu.accel_z = msg.linear_acceleration.z - imu.gyro_x = msg.angular_velocity.x - imu.gyro_y = msg.angular_velocity.y - imu.gyro_z = msg.angular_velocity.z - result[What.imu] = imu - elif hit_temp and topic == self.topic_temp: - temp = Temp() - temp.timestamp = stamp - temp.value = msg.data - result[What.temp] = temp - else: - # raise DataError('DataError: not proper topics in the rosbag') - continue - yield result - finally: - pass - - @property - def info(self): - return self._info - - @property - def timebeg(self): - return self._info['start'] - - @property - def timeend(self): - return self._info['end'] - - @property - def duration(self): - return self._info['duration'] - - -class MYNTEYE(Dataset): - # pylint: disable=no-member - - def __init__(self, path): - super(MYNTEYE, self).__init__(path) - self._info = self._get_info() - - def _get_info(self): - import os - import sys - from os import path - - info = type('', (), {})() - - info.img_left_dir = path.join(self.path, 'left') - info.img_left_txt = path.join(info.img_left_dir, 'stream.txt') - info.has_img_left = path.isfile(info.img_left_txt) - - info.img_right_dir = path.join(self.path, 'right') - info.img_right_txt = path.join(info.img_right_dir, 'stream.txt') - info.has_img_right = path.isfile(info.img_right_txt) - - info.imu_txt = path.join(self.path, 'motion.txt') - info.has_imu = path.isfile(info.imu_txt) - - if info.has_img_left: - info_txt = info.img_left_txt - elif info.has_img_right: - info_txt = info.img_right_txt - elif info.has_imu: - info_txt = info.img_left_txt - else: - sys.exit('Error: Dataset is empty or unexpected format') - with open(info_txt, 'rb') as f: - fields = [_.strip() for _ in f.readline().split(',')] - - first = f.readline() - f.seek(-2, os.SEEK_END) - while f.read(1) != b'\n': - f.seek(-2, os.SEEK_CUR) - last = f.readline() - - index = -1 - for i, field in enumerate(fields): - if field == 'timestamp': - index = i - break - if index == -1: - sys.exit('Error: Dataset is unexpected format, timestamp not found') - - # unit from 1us to 1s - info.timebeg = float(first.split(',')[index].strip()) * 0.000001 - info.timeend = float(last.split(',')[index].strip()) * 0.000001 - # print('time: [{}, {}]'.format(info.timebeg, info.timeend)) - - return info - - def generate(self, *what): - hit_img_left = What.img_left in what - hit_img_right = What.img_right in what - hit_imu = What.imu in what - hit_temp = What.temp in what - - def get_fields(f): - fields = {} - for i, field in enumerate(_.strip() for _ in f.readline().split(',')): - fields[field] = i - return fields - - if hit_img_left and self._info.has_img_left: - with open(self._info.img_left_txt) as f: - fields = get_fields(f) - for line in f: - values = [_.strip() for _ in line.split(',')] - img = Image() - img.timestamp = float(values[fields['timestamp']]) * 0.000001 - yield {What.img_left: img} - if hit_img_right and self._info.has_img_right: - with open(self._info.img_right_txt) as f: - fields = get_fields(f) - for line in f: - values = [_.strip() for _ in line.split(',')] - img = Image() - img.timestamp = float(values[fields['timestamp']]) * 0.000001 - yield {What.img_right: img} - if (hit_imu or hit_temp) and self._info.has_imu: - with open(self._info.imu_txt) as f: - fields = get_fields(f) - for line in f: - values = [_.strip() for _ in line.split(',')] - imu = IMU() - imu.timestamp = float(values[fields['timestamp']]) * 0.000001 - imu.flag = values[fields['flag']] - imu.accel_x = float(values[fields['accel_x']]) - imu.accel_y = float(values[fields['accel_y']]) - imu.accel_z = float(values[fields['accel_z']]) - imu.gyro_x = float(values[fields['gyro_x']]) - imu.gyro_y = float(values[fields['gyro_y']]) - imu.gyro_z = float(values[fields['gyro_z']]) - temp = Temp() - temp.timestamp = imu.timestamp - temp.value = float(values[fields['temperature']]) - yield {What.imu: imu, What.temp: temp} - - @property - def timebeg(self): - return self._info.timebeg - - @property - def timeend(self): - return self._info.timeend - - @property - def duration(self): - return self.timeend - self.timebeg - - -if __name__ == '__main__': - - class DataA(Dataset): - - def generate(self, *what): - yield 'a' - yield 'b' - - class DataB(Dataset): - - def generate(self, *what): - yield 'a1', 'a2', 'a3' - yield 'b1', 'b2', 'b3' - - print('DataA, generate') - for x in DataA('path').generate("what"): - print(x) - print('\nDataA, iterate') - DataA('path').iterate(print, "what") - - print('\nDataB, generate') - for x in DataB('path').generate("what"): - print(', '.join(x)) - print('\nDataB, iterate') - DataB('path').iterate(lambda *x: print(', '.join(x)), "what") diff --git a/tools/linter b/tools/linter deleted file mode 160000 index 1c7828b..0000000 --- a/tools/linter +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1c7828bedb786c9f4fcf6f31f619bfb71d7b1cd3 diff --git a/tools/requirements.txt b/tools/requirements.txt deleted file mode 100644 index 5bb6f4f..0000000 --- a/tools/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -matplotlib>=1.5.1 -numpy>=1.11.0 -pandas>=0.22.0 -PyYAML>=3.11 diff --git a/tools/writer/CMakeLists.txt b/tools/writer/CMakeLists.txt deleted file mode 100644 index 93b2a10..0000000 --- a/tools/writer/CMakeLists.txt +++ /dev/null @@ -1,58 +0,0 @@ -# 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. - -get_filename_component(DIR_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) - -set_outdir( - "${OUT_DIR}/lib/${DIR_NAME}" - "${OUT_DIR}/lib/${DIR_NAME}" - "${OUT_DIR}/bin/${DIR_NAME}" -) - -## device_writer - -add_library(device_writer STATIC device_writer.cc) -target_link_libraries(device_writer mynteye ${OpenCV_LIBS}) - -## device_info_writer - -make_executable(device_info_writer - SRCS device_info_writer.cc - LINK_LIBS device_writer - DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} -) - -## img_params_writer - -make_executable(img_params_writer - SRCS img_params_writer.cc - LINK_LIBS device_writer - DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} -) - -## imu_params_writer - -make_executable(imu_params_writer - SRCS imu_params_writer.cc - LINK_LIBS device_writer - DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} -) - -## save_all_infos - -make_executable(save_all_infos - SRCS save_all_infos.cc - LINK_LIBS device_writer - DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} -) diff --git a/tools/writer/config/S1030/deprecated/img.params.old b/tools/writer/config/S1030/deprecated/img.params.old deleted file mode 100644 index 54f6f39..0000000 --- a/tools/writer/config/S1030/deprecated/img.params.old +++ /dev/null @@ -1,41 +0,0 @@ -%YAML:1.0 ---- -M1: !!opencv-matrix - rows: 3 - cols: 3 - dt: d - data: [ 7.3638305001095546e+02, 0., 3.5691961817119693e+02, 0., - 7.2350066150722432e+02, 2.1727271340923883e+02, 0., 0., 1. ] -D1: !!opencv-matrix - rows: 1 - cols: 14 - dt: d - data: [ -5.4898645145016478e-01, 5.2837141203888638e-01, 0., 0., 0., - 0., 0., 4.3563985766435476e-01, 0., 0., 0., 0., 0., 0. ] -M2: !!opencv-matrix - rows: 3 - cols: 3 - dt: d - data: [ 7.3638305001095546e+02, 0., 4.5668367112303980e+02, 0., - 7.2350066150722432e+02, 2.5070083335536796e+02, 0., 0., 1. ] -D2: !!opencv-matrix - rows: 1 - cols: 14 - dt: d - data: [ -5.1012886039889305e-01, 3.8764476500996770e-01, 0., 0., 0., - 0., 0., 2.5629798245273044e-01, 0., 0., 0., 0., 0., 0. ] -R: !!opencv-matrix - rows: 3 - cols: 3 - dt: d - data: [ 9.9701893306553813e-01, -9.5378124886236681e-04, - -7.7151392794850615e-02, 1.4493996762830500e-03, - 9.9997867219985104e-01, 6.3682325649414354e-03, - 7.7143673424555026e-02, -6.4610716411527686e-03, - 9.9699905125522237e-01 ] -T: !!opencv-matrix - rows: 3 - cols: 1 - dt: d - data: [ -1.1888991734400047e+02, -4.5605803870530912e-02, - -3.9531373691193386e+00 ] diff --git a/tools/writer/config/S1030/deprecated/img.params.old2 b/tools/writer/config/S1030/deprecated/img.params.old2 deleted file mode 100644 index 350a171..0000000 --- a/tools/writer/config/S1030/deprecated/img.params.old2 +++ /dev/null @@ -1,30 +0,0 @@ -%YAML:1.0 ---- -in_left: - width: 752 - height: 480 - fx: 3.6220059643202876e+02 - fy: 3.6350065250745848e+02 - cx: 4.0658699068023441e+02 - cy: 2.3435161110061483e+02 - model: 0 - coeffs: [ -2.5034765682756088e-01, 5.0579399202897619e-02, - -7.0536676161976066e-04, -8.5255451307033846e-03, 0. ] -in_right: - width: 752 - height: 480 - fx: 3.6514014888558478e+02 - fy: 3.6513385298966961e+02 - cx: 3.8932395100630907e+02 - cy: 2.3495160212312547e+02 - model: 0 - coeffs: [ -3.0377346762098512e-01, 7.9929693673999838e-02, - 5.1547517530716883e-05, -6.7345903740579250e-04, 0. ] -ex_right_to_left: - rotation: [ 9.9867908939669447e-01, -6.3445566137485428e-03, - 5.0988459509619687e-02, 5.9890316389333252e-03, - 9.9995670037792639e-01, 7.1224201868366971e-03, - -5.1031440326695092e-02, -6.8076406092671274e-03, - 9.9867384471984544e-01 ] - translation: [ -1.2002489764113250e+02, -1.1782637409050747e+00, - -5.2058205159996538e+00 ] diff --git a/tools/writer/config/S1030/deprecated/img.params.old3 b/tools/writer/config/S1030/deprecated/img.params.old3 deleted file mode 100644 index 28d2f6a..0000000 --- a/tools/writer/config/S1030/deprecated/img.params.old3 +++ /dev/null @@ -1,33 +0,0 @@ -%YAML:1.0 ---- -version: "1.0" -img_params_map: - - - in_left: - width: 752 - height: 480 - fx: 3.6220059643202876e+02 - fy: 3.6350065250745848e+02 - cx: 4.0658699068023441e+02 - cy: 2.3435161110061483e+02 - model: 0 - coeffs: [ -2.5034765682756088e-01, 5.0579399202897619e-02, - -7.0536676161976066e-04, -8.5255451307033846e-03, 0. ] - in_right: - width: 752 - height: 480 - fx: 3.6514014888558478e+02 - fy: 3.6513385298966961e+02 - cx: 3.8932395100630907e+02 - cy: 2.3495160212312547e+02 - model: 0 - coeffs: [ -3.0377346762098512e-01, 7.9929693673999838e-02, - 5.1547517530716883e-05, -6.7345903740579250e-04, 0. ] - ex_right_to_left: - rotation: [ 9.9867908939669447e-01, -6.3445566137485428e-03, - 5.0988459509619687e-02, 5.9890316389333252e-03, - 9.9995670037792639e-01, 7.1224201868366971e-03, - -5.1031440326695092e-02, -6.8076406092671274e-03, - 9.9867384471984544e-01 ] - translation: [ -1.2002489764113250e+02, -1.1782637409050747e+00, - -5.2058205159996538e+00 ] diff --git a/tools/writer/config/S1030/deprecated/imu.params.old b/tools/writer/config/S1030/deprecated/imu.params.old deleted file mode 100644 index 4500d4e..0000000 --- a/tools/writer/config/S1030/deprecated/imu.params.old +++ /dev/null @@ -1,24 +0,0 @@ -%YAML:1.0 ---- -in_accel: - scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] - drift: [ 0., 0., 0. ] - noise: [ 1.6925432397973516e-02, 1.6735310195561025e-02, - 1.7452487504590969e-02 ] - bias: [ 1.9031356589714596e-04, 1.6996777864587261e-04, - 5.4490537096493644e-04 ] -in_gyro: - scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] - drift: [ 0., 0., 0. ] - noise: [ 1.0848026158819934e-03, 1.2466367883501759e-03, - 1.1003229919806443e-03 ] - bias: [ 2.3404834136742844e-05, 2.3596771567764949e-05, - 1.4970418056326829e-05 ] -ex_left_to_imu: - rotation: [ -6.4662000000000001e-03, -9.9994994000000004e-01, - -7.6356499999999999e-03, 9.9997908999999996e-01, - -6.4656599999999998e-03, -9.5580000000000003e-05, - 4.6199999999999998e-05, -7.6361099999999998e-03, - 9.9997084000000003e-01 ] - translation: [ 5.3364600000000003e-03, -4.3029220000000000e-02, - 2.3031240000000001e-02 ] diff --git a/tools/writer/config/S1030/device.info b/tools/writer/config/S1030/device.info deleted file mode 100644 index 0c9e26b..0000000 --- a/tools/writer/config/S1030/device.info +++ /dev/null @@ -1,10 +0,0 @@ -%YAML:1.0 ---- -device_name: MYNT-EYE-S1030 -serial_number: "02811F3B00090807" -firmware_version: "2.2" -hardware_version: "2.0" -spec_version: "1.0" -lens_type: "0000" -imu_type: "0000" -nominal_baseline: 120 diff --git a/tools/writer/config/S1030/img.params.equidistant b/tools/writer/config/S1030/img.params.equidistant deleted file mode 100644 index 06600b5..0000000 --- a/tools/writer/config/S1030/img.params.equidistant +++ /dev/null @@ -1,28 +0,0 @@ -%YAML:1.0 ---- -version: "1.2" -img_params: - - - model: 1 - width: 752 - height: 480 - in_left: - # coeffs: k2,k3,k4,k5,mu,mv,u0,v0 - coeffs: [ -1.3549950401924169e-02, -3.2306077263853893e-02, - 5.3814579203036512e-02, -3.6663721418756977e-02, - 3.6797709792391299e+02, 3.6808712539453859e+02, - 3.7414963027144353e+02, 2.3125000326472903e+02 ] - in_right: - # coeffs: k2,k3,k4,k5,mu,mv,u0,v0 - coeffs: [ -1.8964880945048872e-02, -2.6172447729615463e-02, - 4.0863326732708288e-02, -2.1522718578606163e-02, - 3.6807315003638877e+02, 3.6806204885853174e+02, - 3.8499216569965887e+02, 2.3183027347834383e+02 ] - ex_right_to_left: - rotation: [ 9.9867908939669447e-01, -6.3445566137485428e-03, - 5.0988459509619687e-02, 5.9890316389333252e-03, - 9.9995670037792639e-01, 7.1224201868366971e-03, - -5.1031440326695092e-02, -6.8076406092671274e-03, - 9.9867384471984544e-01 ] - translation: [ -1.2002489764113250e+02, -1.1782637409050747e+00, - -5.2058205159996538e+00 ] diff --git a/tools/writer/config/S1030/img.params.pinhole b/tools/writer/config/S1030/img.params.pinhole deleted file mode 100644 index a375acc..0000000 --- a/tools/writer/config/S1030/img.params.pinhole +++ /dev/null @@ -1,38 +0,0 @@ -%YAML:1.0 ---- -version: "1.2" -img_params: - - - model: 0 - width: 752 - height: 480 - in_left: - # [fx 0 cx] - # [ 0 fy cy] - # [ 0 0 1] - fx: 3.6220059643202876e+02 - fy: 3.6350065250745848e+02 - cx: 4.0658699068023441e+02 - cy: 2.3435161110061483e+02 - # coeffs: k1,k2,p1,p2,k3 - coeffs: [ -2.5034765682756088e-01, 5.0579399202897619e-02, - -7.0536676161976066e-04, -8.5255451307033846e-03, 0. ] - in_right: - # [fx 0 cx] - # [ 0 fy cy] - # [ 0 0 1] - fx: 3.6514014888558478e+02 - fy: 3.6513385298966961e+02 - cx: 3.8932395100630907e+02 - cy: 2.3495160212312547e+02 - # coeffs: k1,k2,p1,p2,k3 - coeffs: [ -3.0377346762098512e-01, 7.9929693673999838e-02, - 5.1547517530716883e-05, -6.7345903740579250e-04, 0. ] - ex_right_to_left: - rotation: [ 9.9867908939669447e-01, -6.3445566137485428e-03, - 5.0988459509619687e-02, 5.9890316389333252e-03, - 9.9995670037792639e-01, 7.1224201868366971e-03, - -5.1031440326695092e-02, -6.8076406092671274e-03, - 9.9867384471984544e-01 ] - translation: [ -1.2002489764113250e+02, -1.1782637409050747e+00, - -5.2058205159996538e+00 ] diff --git a/tools/writer/config/S1030/imu.params b/tools/writer/config/S1030/imu.params deleted file mode 100644 index 93ad7e8..0000000 --- a/tools/writer/config/S1030/imu.params +++ /dev/null @@ -1,33 +0,0 @@ -%YAML:1.0 ---- -version: "1.2" -in_accel: - scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] - assembly: [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] - drift: [ 0., 0., 0. ] - noise: [ 1.6925432397973516e-02, 1.6735310195561025e-02, - 1.7452487504590969e-02 ] - bias: [ 1.9031356589714596e-04, 1.6996777864587261e-04, - 5.4490537096493644e-04 ] - x: [ 0.0, 0.0 ] - y: [ 0.0, 0.0 ] - z: [ 0.0, 0.0 ] -in_gyro: - scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] - assembly: [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] - drift: [ 0., 0., 0. ] - noise: [ 1.0848026158819934e-03, 1.2466367883501759e-03, - 1.1003229919806443e-03 ] - bias: [ 2.3404834136742844e-05, 2.3596771567764949e-05, - 1.4970418056326829e-05 ] - x: [ 0.0, 0.0 ] - y: [ 0.0, 0.0 ] - z: [ 0.0, 0.0 ] -ex_left_to_imu: - rotation: [ -6.4662000000000001e-03, -9.9994994000000004e-01, - -7.6356499999999999e-03, 9.9997908999999996e-01, - -6.4656599999999998e-03, -9.5580000000000003e-05, - 4.6199999999999998e-05, -7.6361099999999998e-03, - 9.9997084000000003e-01 ] - translation: [ 5.3364600000000003e-03, -4.3029220000000000e-02, - 2.3031240000000001e-02 ] diff --git a/tools/writer/config/S210A/deprecated/img.params.old b/tools/writer/config/S210A/deprecated/img.params.old deleted file mode 100644 index a368dbb..0000000 --- a/tools/writer/config/S210A/deprecated/img.params.old +++ /dev/null @@ -1,62 +0,0 @@ -%YAML:1.0 ---- -version: "1.1" -img_params_map: - - - in_left: - width: 640 - height: 400 - fx: 1.9739641213416058e+02 - fy: 1.9772337597617189e+02 - cx: 3.2611983633916327e+02 - cy: 1.9986969132833946e+02 - model: 0 - coeffs: [ 1.2135236310725651e-01, -8.5442776049177036e-02, - 2.4914898631983504e-03, -3.7752063658256863e-03, 0. ] - in_right: - width: 640 - height: 400 - fx: 2.0335498653655989e+02 - fy: 2.0453858622699008e+02 - cx: 3.1589962248180814e+02 - cy: 2.1871688038954812e+02 - model: 0 - coeffs: [ 2.2904330559241560e-02, -2.9561990079971841e-02, - 3.9725942760981507e-03, -3.9689073214945591e-03, 0. ] - ex_right_to_left: - rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, - -4.3917309443490191e-03, 1.8166060642710027e-03, - 9.9968925981619028e-01, -2.4861290203142431e-02, - 4.4382582477776426e-03, 2.4853026274046636e-02, - 9.9968126367795229e-01 ] - translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, - 2.2588034344482368e+00 ] - - - in_left: - width: 1280 - height: 800 - fx: 1.9739641213416058e+02 - fy: 1.9772337597617189e+02 - cx: 3.2611983633916327e+02 - cy: 1.9986969132833946e+02 - model: 0 - coeffs: [ 1.2135236310725651e-01, -8.5442776049177036e-02, - 2.4914898631983504e-03, -3.7752063658256863e-03, 0. ] - in_right: - width: 1280 - height: 800 - fx: 2.0335498653655989e+02 - fy: 2.0453858622699008e+02 - cx: 3.1589962248180814e+02 - cy: 2.1871688038954812e+02 - model: 0 - coeffs: [ 2.2904330559241560e-02, -2.9561990079971841e-02, - 3.9725942760981507e-03, -3.9689073214945591e-03, 0. ] - ex_right_to_left: - rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, - -4.3917309443490191e-03, 1.8166060642710027e-03, - 9.9968925981619028e-01, -2.4861290203142431e-02, - 4.4382582477776426e-03, 2.4853026274046636e-02, - 9.9968126367795229e-01 ] - translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, - 2.2588034344482368e+00 ] diff --git a/tools/writer/config/S210A/deprecated/imu.params.old b/tools/writer/config/S210A/deprecated/imu.params.old deleted file mode 100644 index 070f13a..0000000 --- a/tools/writer/config/S210A/deprecated/imu.params.old +++ /dev/null @@ -1,15 +0,0 @@ -%YAML:1.0 ---- -in_accel: - scale: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] - drift: [ 0., 0., 0. ] - noise: [ 0., 0., 0. ] - bias: [ 0., 0., 0. ] -in_gyro: - scale: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] - drift: [ 0., 0., 0. ] - noise: [ 0., 0., 0. ] - bias: [ 0., 0., 0. ] -ex_left_to_imu: - rotation: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] - translation: [ 0., 0., 0. ] diff --git a/tools/writer/config/S210A/device.info b/tools/writer/config/S210A/device.info deleted file mode 100644 index d7f4e16..0000000 --- a/tools/writer/config/S210A/device.info +++ /dev/null @@ -1,12 +0,0 @@ -%YAML:1.0 ---- -device_name: MYNT-EYE-S210A -serial_number: "07C40D1C0009071F" -firmware_version: "1.1" -hardware_version: "1.0" -spec_version: "1.2" -lens_type: "0001" -imu_type: "0001" -nominal_baseline: 80 -auxiliary_chip_version: "1.0" -isp_version: "1.0" diff --git a/tools/writer/config/S210A/img.params.equidistant b/tools/writer/config/S210A/img.params.equidistant deleted file mode 100644 index 8949748..0000000 --- a/tools/writer/config/S210A/img.params.equidistant +++ /dev/null @@ -1,51 +0,0 @@ -%YAML:1.0 ---- -version: "1.2" -img_params: - # There are two params of resolution [640x400], [1280x800]. - # If you only set one of them, write will keep another params if it exists. - - - model: 1 - width: 640 - height: 400 - in_left: - # coeffs: k2,k3,k4,k5,mu,mv,u0,v0 - coeffs: [ -1.3549950401924169e-02, -3.2306077263853893e-02, - 5.3814579203036512e-02, -3.6663721418756977e-02, - 3.6797709792391299e+02, 3.6808712539453859e+02, - 3.7414963027144353e+02, 2.3125000326472903e+02 ] - in_right: - coeffs: [ -1.8964880945048872e-02, -2.6172447729615463e-02, - 4.0863326732708288e-02, -2.1522718578606163e-02, - 3.6807315003638877e+02, 3.6806204885853174e+02, - 3.8499216569965887e+02, 2.3183027347834383e+02 ] - ex_right_to_left: - rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, - -4.3917309443490191e-03, 1.8166060642710027e-03, - 9.9968925981619028e-01, -2.4861290203142431e-02, - 4.4382582477776426e-03, 2.4853026274046636e-02, - 9.9968126367795229e-01 ] - translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, - 2.2588034344482368e+00 ] - - - model: 1 - width: 1280 - height: 800 - in_left: - coeffs: [ -1.3549950401924169e-02, -3.2306077263853893e-02, - 5.3814579203036512e-02, -3.6663721418756977e-02, - 3.6797709792391299e+02, 3.6808712539453859e+02, - 3.7414963027144353e+02, 2.3125000326472903e+02 ] - in_right: - coeffs: [ -1.3549950401924169e-02, -3.2306077263853893e-02, - 5.3814579203036512e-02, -3.6663721418756977e-02, - 3.6797709792391299e+02, 3.6808712539453859e+02, - 3.7414963027144353e+02, 2.3125000326472903e+02 ] - ex_right_to_left: - rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, - -4.3917309443490191e-03, 1.8166060642710027e-03, - 9.9968925981619028e-01, -2.4861290203142431e-02, - 4.4382582477776426e-03, 2.4853026274046636e-02, - 9.9968126367795229e-01 ] - translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, - 2.2588034344482368e+00 ] diff --git a/tools/writer/config/S210A/img.params.pinhole b/tools/writer/config/S210A/img.params.pinhole deleted file mode 100644 index eb1b2a7..0000000 --- a/tools/writer/config/S210A/img.params.pinhole +++ /dev/null @@ -1,62 +0,0 @@ -%YAML:1.0 ---- -version: "1.2" -img_params: - # There are two params of resolution [640x400], [1280x800]. - # If you only set one of them, write will keep another params if it exists. - - - model: 0 - width: 640 - height: 400 - in_left: - # [fx 0 cx] - # [ 0 fy cy] - # [ 0 0 1] - fx: 1.9739641213416058e+02 - fy: 1.9772337597617189e+02 - cx: 3.2611983633916327e+02 - cy: 1.9986969132833946e+02 - # coeffs: k1,k2,p1,p2,k3 - coeffs: [ 1.2135236310725651e-01, -8.5442776049177036e-02, - 2.4914898631983504e-03, -3.7752063658256863e-03, 0. ] - in_right: - fx: 2.0335498653655989e+02 - fy: 2.0453858622699008e+02 - cx: 3.1589962248180814e+02 - cy: 2.1871688038954812e+02 - coeffs: [ 2.2904330559241560e-02, -2.9561990079971841e-02, - 3.9725942760981507e-03, -3.9689073214945591e-03, 0. ] - ex_right_to_left: - rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, - -4.3917309443490191e-03, 1.8166060642710027e-03, - 9.9968925981619028e-01, -2.4861290203142431e-02, - 4.4382582477776426e-03, 2.4853026274046636e-02, - 9.9968126367795229e-01 ] - translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, - 2.2588034344482368e+00 ] - - - model: 0 - width: 1280 - height: 800 - in_left: - fx: 1.9739641213416058e+02 - fy: 1.9772337597617189e+02 - cx: 3.2611983633916327e+02 - cy: 1.9986969132833946e+02 - coeffs: [ 1.2135236310725651e-01, -8.5442776049177036e-02, - 2.4914898631983504e-03, -3.7752063658256863e-03, 0. ] - in_right: - fx: 2.0335498653655989e+02 - fy: 2.0453858622699008e+02 - cx: 3.1589962248180814e+02 - cy: 2.1871688038954812e+02 - coeffs: [ 2.2904330559241560e-02, -2.9561990079971841e-02, - 3.9725942760981507e-03, -3.9689073214945591e-03, 0. ] - ex_right_to_left: - rotation: [ 9.9998850083695123e-01, -1.9263678722299450e-03, - -4.3917309443490191e-03, 1.8166060642710027e-03, - 9.9968925981619028e-01, -2.4861290203142431e-02, - 4.4382582477776426e-03, 2.4853026274046636e-02, - 9.9968126367795229e-01 ] - translation: [ -8.2270200890555529e+01, -1.9535144360069059e+00, - 2.2588034344482368e+00 ] diff --git a/tools/writer/config/S210A/imu.params b/tools/writer/config/S210A/imu.params deleted file mode 100644 index 93ad7e8..0000000 --- a/tools/writer/config/S210A/imu.params +++ /dev/null @@ -1,33 +0,0 @@ -%YAML:1.0 ---- -version: "1.2" -in_accel: - scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] - assembly: [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] - drift: [ 0., 0., 0. ] - noise: [ 1.6925432397973516e-02, 1.6735310195561025e-02, - 1.7452487504590969e-02 ] - bias: [ 1.9031356589714596e-04, 1.6996777864587261e-04, - 5.4490537096493644e-04 ] - x: [ 0.0, 0.0 ] - y: [ 0.0, 0.0 ] - z: [ 0.0, 0.0 ] -in_gyro: - scale: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] - assembly: [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] - drift: [ 0., 0., 0. ] - noise: [ 1.0848026158819934e-03, 1.2466367883501759e-03, - 1.1003229919806443e-03 ] - bias: [ 2.3404834136742844e-05, 2.3596771567764949e-05, - 1.4970418056326829e-05 ] - x: [ 0.0, 0.0 ] - y: [ 0.0, 0.0 ] - z: [ 0.0, 0.0 ] -ex_left_to_imu: - rotation: [ -6.4662000000000001e-03, -9.9994994000000004e-01, - -7.6356499999999999e-03, 9.9997908999999996e-01, - -6.4656599999999998e-03, -9.5580000000000003e-05, - 4.6199999999999998e-05, -7.6361099999999998e-03, - 9.9997084000000003e-01 ] - translation: [ 5.3364600000000003e-03, -4.3029220000000000e-02, - 2.3031240000000001e-02 ] diff --git a/tools/writer/device_info_writer.cc b/tools/writer/device_info_writer.cc deleted file mode 100644 index 5dc3112..0000000 --- a/tools/writer/device_info_writer.cc +++ /dev/null @@ -1,41 +0,0 @@ -// 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. -#include "mynteye/logger.h" -#include "mynteye/device/device.h" -#include "mynteye/device/utils.h" - -#include "writer/device_writer.h" - -MYNTEYE_USE_NAMESPACE - -int main(int argc, char *argv[]) { - glog_init _(argc, argv); - - const char *filepath; - if (argc >= 2) { - filepath = argv[1]; - } else { - LOG(ERROR) << "Usage: ./device_info_writer "; - return 2; - } - - auto &&device = device::select(); - if (!device) - return 1; - - tools::DeviceWriter writer(device); - writer.WriteDeviceInfo(filepath); - - return 0; -} diff --git a/tools/writer/device_writer.cc b/tools/writer/device_writer.cc deleted file mode 100644 index ddd9207..0000000 --- a/tools/writer/device_writer.cc +++ /dev/null @@ -1,590 +0,0 @@ -// 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. -#include "writer/device_writer.h" - -#include - -#include - -#include "mynteye/logger.h" -#include "mynteye/util/files.h" - -#define SAVE_LATEST_VERSION Version(1, 2) - -MYNTEYE_BEGIN_NAMESPACE - -namespace tools { - -DeviceWriter::DeviceWriter(std::shared_ptr device) : device_(device) { - VLOG(2) << __func__; -} - -DeviceWriter::~DeviceWriter() { - VLOG(2) << __func__; -} - -bool DeviceWriter::WriteDeviceInfo(const dev_info_t &info) { - // Update device info - auto &&dev_info = device_->GetInfo(); - dev_info->lens_type = Type(info.lens_type); - dev_info->imu_type = Type(info.imu_type); - dev_info->nominal_baseline = info.nominal_baseline; - - if (device_->SetFiles(dev_info.get(), nullptr, nullptr)) { - LOG(INFO) << "Write device info success"; - LOG(INFO) << "Device info: {name: " << dev_info->name - << ", serial_number: " << dev_info->serial_number - << ", firmware_version: " - << dev_info->firmware_version.to_string() - << ", hardware_version: " - << dev_info->hardware_version.to_string() - << ", spec_version: " << dev_info->spec_version.to_string() - << ", lens_type: " << dev_info->lens_type.to_string() - << ", imu_type: " << dev_info->imu_type.to_string() - << ", nominal_baseline: " << dev_info->nominal_baseline - << ", auxiliary_chip_version: " - << dev_info->auxiliary_chip_version.to_string() - << ", isp_version: " - << dev_info->isp_version.to_string()<< "}"; - return true; - } else { - LOG(ERROR) << "Write device info failed"; - return false; - } -} - -bool DeviceWriter::WriteDeviceInfo(const std::string &filepath) { - return WriteDeviceInfo(LoadDeviceInfo(filepath)); -} - -bool DeviceWriter::WriteImgParams(const img_params_map_t &img_params_map) { - img_params_map_t *img_params_new = - const_cast(&img_params_map); - // Update image params with raw - auto &&img_params_raw = device_->GetImgParams(); - for (auto entry_raw : img_params_raw) { - // Add raw params if not load this resolution - if (img_params_new->find(entry_raw.first) == img_params_new->end()) { - (*img_params_new)[entry_raw.first] = entry_raw.second; - } - } - - if (device_->SetFiles(nullptr, img_params_new, nullptr)) { - LOG(INFO) << "Write img params success"; - for (auto it = img_params_new->begin(); it != img_params_new->end(); it++) { - LOG(INFO) << "Resolution: {width: " << (*it).first.width - << ", height: " << (*it).first.height << "}"; - LOG(INFO) << "Intrinsics left: {" << *(*it).second.in_left << "}"; - LOG(INFO) << "Intrinsics right: {" << *(*it).second.in_right << "}"; - LOG(INFO) << "Extrinsics right to left: {" - << (*it).second.ex_right_to_left << "}"; - } - return true; - } else { - LOG(ERROR) << "Write img params failed"; - return false; - } -} - -bool DeviceWriter::WriteImgParams(const std::string &filepath) { - return WriteImgParams(LoadImgParams(filepath)); -} - -bool DeviceWriter::WriteImuParams(const imu_params_t ¶ms) { - if (device_->SetFiles( - nullptr, nullptr, const_cast(¶ms))) { - LOG(INFO) << "Write imu params success"; - LOG(INFO) << "Imu intrinsics accel: {" << params.in_accel << "}"; - LOG(INFO) << "Imu intrinsics gyro: {" << params.in_gyro << "}"; - LOG(INFO) << "Imu extrinsics left to imu: {" << params.ex_left_to_imu - << "}"; - return true; - } else { - LOG(ERROR) << "Write imu params failed"; - return false; - } -} - -bool DeviceWriter::WriteImuParams(const std::string &filepath) { - return WriteImuParams(LoadImuParams(filepath)); -} - -namespace { - -cv::FileStorage &operator<<(cv::FileStorage &fs, const IntrinsicsPinhole &in) { - fs << "{" - << "fx" << in.fx << "fy" << in.fy - << "cx" << in.cx << "cy" << in.cy - << "coeffs" << std::vector(in.coeffs, in.coeffs + 5) << "}"; - return fs; -} - -cv::FileStorage &operator<<(cv::FileStorage &fs, - const IntrinsicsEquidistant &in) { - fs << "{" - << "coeffs" << std::vector(in.coeffs, in.coeffs + 8) << "}"; - return fs; -} - -cv::FileStorage &operator<<(cv::FileStorage &fs, - const std::shared_ptr &in) { - switch (in->calib_model()) { - case CalibrationModel::PINHOLE: - return fs << *std::dynamic_pointer_cast(in); - case CalibrationModel::KANNALA_BRANDT: - return fs << *std::dynamic_pointer_cast(in); - default: - LOG(FATAL) << "Unknown calib model: " << in->calib_model(); - return fs; - } -} - -cv::FileStorage &operator<<(cv::FileStorage &fs, const ImuIntrinsics &in) { - std::vector scales; - for (std::size_t i = 0; i < 3; i++) { - for (std::size_t j = 0; j < 3; j++) { - scales.push_back(in.scale[i][j]); - } - } - std::vector assembly; - for (std::size_t i = 0; i < 3; i++) { - for (std::size_t j = 0; j < 3; j++) { - assembly.push_back(in.assembly[i][j]); - } - } - fs << "{" - << "scale" << scales << "assembly" << assembly << "drift" - << std::vector(in.drift, in.drift + 3) << "noise" - << std::vector(in.noise, in.noise + 3) << "bias" - << std::vector(in.bias, in.bias + 3) << "x" - << std::vector(in.x, in.x + 2) << "y" - << std::vector(in.y, in.y + 2) << "z" - << std::vector(in.z, in.z + 2) << "}"; - return fs; -} - -cv::FileStorage &operator<<(cv::FileStorage &fs, const Extrinsics &ex) { - std::vector rotations; - for (std::size_t i = 0; i < 3; i++) { - for (std::size_t j = 0; j < 3; j++) { - rotations.push_back(ex.rotation[i][j]); - } - } - fs << "{" - << "rotation" << rotations << "translation" - << std::vector(ex.translation, ex.translation + 3) << "}"; - return fs; -} - -cv::FileStorage &operator<<( - cv::FileStorage &fs, const device::img_params_t ¶ms) { - fs << "{" - << "model" << static_cast(params.in_left->calib_model()) - << "width" << params.in_left->width - << "height" << params.in_left->height - << "in_left" << params.in_left - << "in_right" << params.in_right - << "ex_right_to_left" << params.ex_right_to_left << "}"; - return fs; -} - -cv::FileStorage &operator<<( - cv::FileStorage &fs, const DeviceWriter::img_params_map_t &img_params_map) { - fs << "["; - std::map::const_iterator it; - for (it = img_params_map.begin(); it != img_params_map.end(); it++) { - fs << (*it).second; - } - fs << "]"; - return fs; -} - -} // namespace - -bool DeviceWriter::SaveDeviceInfo( - const dev_info_t &info, const std::string &filepath) { - using FileStorage = cv::FileStorage; - FileStorage fs(filepath, FileStorage::WRITE); - if (!fs.isOpened()) { - LOG(ERROR) << "Failed to save file: " << filepath; - return false; - } - fs << "device_name" << info.name; - fs << "serial_number" << info.serial_number; - fs << "firmware_version" << info.firmware_version.to_string(); - fs << "hardware_version" << info.hardware_version.to_string(); - fs << "spec_version" << info.spec_version.to_string(); - fs << "lens_type" << info.lens_type.to_string(); - fs << "imu_type" << info.imu_type.to_string(); - fs << "nominal_baseline" << info.nominal_baseline; - fs << "auxiliary_chip_version" << info.auxiliary_chip_version.to_string(); - fs << "isp_version" << info.isp_version.to_string(); - // save other infos according to spec_version - fs.release(); - return true; -} - -bool DeviceWriter::SaveImgParams( - const img_params_map_t &img_params_map, - const std::string &filepath) { - if (img_params_map.empty()) { - return false; - } - std::string version = img_params_map.begin()->second.version; - if (Version(version) > SAVE_LATEST_VERSION) { - LOG(ERROR) << "Failed to save img params of version " << version - << ", please use latest SDK."; - return false; - } - - // always save img params with latest version format - using FileStorage = cv::FileStorage; - FileStorage fs(filepath, FileStorage::WRITE); - if (!fs.isOpened()) { - LOG(ERROR) << "Failed to save file: " << filepath; - return false; - } - fs << "version" << SAVE_LATEST_VERSION.to_string() - << "img_params" << img_params_map; - fs.release(); - return true; -} - -bool DeviceWriter::SaveImuParams( - const imu_params_t ¶ms, const std::string &filepath) { - if (!params.ok) return false; - std::string version = params.version; - if (Version(version) > SAVE_LATEST_VERSION) { - LOG(ERROR) << "Failed to save imu params of version " << version - << ", please use latest SDK."; - return false; - } - - // always save imu params with latest version format - using FileStorage = cv::FileStorage; - FileStorage fs(filepath, FileStorage::WRITE); - if (!fs.isOpened()) { - LOG(ERROR) << "Failed to save file: " << filepath; - return false; - } - fs << "version" << SAVE_LATEST_VERSION.to_string() - << "in_accel" << params.in_accel - << "in_gyro" << params.in_gyro - << "ex_left_to_imu" << params.ex_left_to_imu; - fs.release(); - return true; -} - -void DeviceWriter::SaveAllInfos(const std::string &dir) { - if (!files::mkdir(dir)) { - LOG(FATAL) << "Create directory failed: " << dir; - } - SaveDeviceInfo(*device_->GetInfo(), dir + MYNTEYE_OS_SEP "device.info"); - SaveImgParams(device_->GetImgParams(), dir + MYNTEYE_OS_SEP "img.params"); - SaveImuParams(device_->GetImuParams(), dir + MYNTEYE_OS_SEP "imu.params"); -} - -namespace { - -// old -void to_intrinsics( - const std::uint16_t &width, const std::uint16_t &height, - const std::uint8_t &model, const cv::Mat &M, const cv::Mat &D, - IntrinsicsPinhole *in) { - in->width = width; - in->height = height; - /* - fx, 0, cx, - 0, fy, cy, - 0, 0, 1 - */ - in->fx = M.at(0, 0); - in->fy = M.at(1, 1); - in->cx = M.at(0, 2); - in->cy = M.at(1, 2); - /* k1, k2, p1, p2, k3 */ - in->model = model; - LOG_IF(FATAL, D.cols < 5) << "Distortion coefficients must >= 5 columns"; - for (std::size_t i = 0; i < 5; i++) { - in->coeffs[i] = D.at(i); - } -} - -// old -void to_extrinsics(const cv::Mat &R, const cv::Mat &T, Extrinsics *ex) { - for (std::size_t i = 0; i < 3; i++) { - for (std::size_t j = 0; j < 3; j++) { - ex->rotation[i][j] = R.at(i, j); - } - } - for (std::size_t i = 0; i < 3; i++) { - ex->translation[i] = T.at(i); - } -} -// old -void operator>>(const cv::FileNode &n, IntrinsicsPinhole &in) { - n["width"] >> in.width; - n["height"] >> in.height; - n["fx"] >> in.fx; - n["fy"] >> in.fy; - n["cx"] >> in.cx; - n["cy"] >> in.cy; - n["model"] >> in.model; - for (std::size_t i = 0; i < 5; i++) { - in.coeffs[i] = n["coeffs"][i]; - } -} - -void operator>>(const cv::FileNode &n, ImuIntrinsics &in) { - for (std::size_t i = 0; i < 3; i++) { - for (std::size_t j = 0; j < 3; j++) { - in.scale[i][j] = n["scale"][3 * i + j]; - } - } - for (std::size_t i = 0; i < 3; i++) { - for (std::size_t j = 0; j < 3; j++) { - in.assembly[i][j] = n["assembly"][3 * i + j]; - } - } - for (std::size_t i = 0; i < 3; i++) { - in.drift[i] = n["drift"][i]; - } - for (std::size_t i = 0; i < 3; i++) { - in.noise[i] = n["noise"][i]; - } - for (std::size_t i = 0; i < 3; i++) { - in.bias[i] = n["bias"][i]; - } - for (std::size_t i = 0; i < 2; i++) { - in.x[i] = n["x"][i]; - } - for (std::size_t i = 0; i < 2; i++) { - in.y[i] = n["y"][i]; - } - for (std::size_t i = 0; i < 2; i++) { - in.z[i] = n["z"][i]; - } -} - -void operator>>(const cv::FileNode &n, Extrinsics &ex) { - for (std::size_t i = 0; i < 3; i++) { - for (std::size_t j = 0; j < 3; j++) { - ex.rotation[i][j] = n["rotation"][3 * i + j]; - } - } - for (std::size_t i = 0; i < 3; i++) { - ex.translation[i] = n["translation"][i]; - } -} - -// old -void operator>>(const cv::FileNode &n, DeviceWriter::img_params_t ¶ms) { - auto in_left = std::make_shared(); - auto in_right = std::make_shared(); - params.in_left = in_left; - params.in_right = in_right; - n["in_left"] >> *in_left; - n["in_right"] >> *in_right; - n["ex_right_to_left"] >> params.ex_right_to_left; -} - -std::shared_ptr to_intrinsics_pinhole( - const cv::FileNode &n, const std::uint8_t &model, - const std::uint16_t &width, const std::uint16_t &height) { - auto in = std::make_shared(); - in->width = width; - in->height = height; - in->model = model; - n["fx"] >> in->fx; - n["fy"] >> in->fy; - n["cx"] >> in->cx; - n["cy"] >> in->cy; - for (std::size_t i = 0; i < 5; i++) { - in->coeffs[i] = n["coeffs"][i]; - } - return in; -} - -std::shared_ptr to_intrinsics_equidistant( - const cv::FileNode &n, const std::uint8_t &model, - const std::uint16_t &width, const std::uint16_t &height) { - auto in = std::make_shared(); - in->width = width; - in->height = height; - for (std::size_t i = 0; i < 8; i++) { - in->coeffs[i] = n["coeffs"][i]; - } - MYNTEYE_UNUSED(model) - return in; -} - -DeviceWriter::img_params_t to_img_params( - const cv::FileNode &n, const std::uint8_t &model, - const std::uint16_t &width, const std::uint16_t &height) { - DeviceWriter::img_params_t params; - params.ok = false; - - CalibrationModel calib_model = static_cast(model); - switch (calib_model) { - case CalibrationModel::PINHOLE: { - params.ok = true; - params.in_left = to_intrinsics_pinhole( - n["in_left"], model, width, height); - params.in_right = to_intrinsics_pinhole( - n["in_right"], model, width, height); - n["ex_right_to_left"] >> params.ex_right_to_left; - } break; - case CalibrationModel::KANNALA_BRANDT: { - params.ok = true; - params.in_left = to_intrinsics_equidistant( - n["in_left"], model, width, height); - params.in_right = to_intrinsics_equidistant( - n["in_right"], model, width, height); - n["ex_right_to_left"] >> params.ex_right_to_left; - } break; - default: - LOG(FATAL) << "Could not load img params as unknown calib model" - ", please use latest SDK."; - } - return params; -} - -} // namespace - -DeviceWriter::dev_info_t DeviceWriter::LoadDeviceInfo( - const std::string &filepath) { - using FileStorage = cv::FileStorage; - FileStorage fs(filepath, FileStorage::READ); - if (!fs.isOpened()) { - LOG(FATAL) << "Failed to load file: " << filepath; - } - DeviceInfo info; - info.lens_type = Type(std::string(fs["lens_type"])); - info.imu_type = Type(std::string(fs["imu_type"])); - fs["nominal_baseline"] >> info.nominal_baseline; - fs.release(); - return info; -} - -DeviceWriter::img_params_map_t DeviceWriter::LoadImgParams( - const std::string &filepath) { - using FileStorage = cv::FileStorage; - FileStorage fs(filepath, FileStorage::READ); - if (!fs.isOpened()) { - LOG(FATAL) << "Failed to load file: " << filepath; - } - - img_params_map_t img_params_map; - if (!fs["version"].isNone()) { - std::string version = std::string(fs["version"]); - // load params according to verison - if (version == "1.0") { - fs["img_params_map"][0] >> img_params_map[{752, 480}]; - } else if (version == "1.1") { - fs["img_params_map"][0] >> img_params_map[{1280, 400}]; - fs["img_params_map"][1] >> img_params_map[{2560, 800}]; - } else if (version == "1.2") { - auto node = fs["img_params"]; - for (auto it = node.begin(); it < node.end(); it++) { - std::uint8_t model; - std::uint16_t width, height; - (*it)["model"] >> model; - (*it)["width"] >> width; - (*it)["height"] >> height; - auto params = to_img_params(*it, model, width, height); - if (params.ok) { - params.version = version; - img_params_map[{width, height}] = params; - } - } - } else { - LOG(ERROR) << "Failed to load img params of version " << version - << ", please use latest SDK."; - } - } else { - // load old params s1030 - auto in_left = std::make_shared(); - auto in_right = std::make_shared(); - Extrinsics ex_right_to_left; - if (fs["in_left"].isNone()) { - std::uint16_t w = 752; - std::uint16_t h = 480; - std::uint8_t m = 0; - if (!fs["width"].isNone()) - w = static_cast(fs["width"]); - if (!fs["height"].isNone()) - h = static_cast(fs["height"]); - if (!fs["model"].isNone()) - m = static_cast(fs["model"]); - - cv::Mat M1, D1, M2, D2, R, T; - fs["M1"] >> M1; - fs["D1"] >> D1; - fs["M2"] >> M2; - fs["D2"] >> D2; - fs["R"] >> R; - fs["T"] >> T; - - to_intrinsics(w, h, m, M1, D1, in_left.get()); - to_intrinsics(w, h, m, M2, D2, in_right.get()); - to_extrinsics(R, T, &ex_right_to_left); - } else { - fs["in_left"] >> *in_left; - fs["in_right"] >> *in_right; - fs["ex_right_to_left"] >> ex_right_to_left; - } - img_params_map[{752, 480}] = { - true, "1.0", in_left, in_right, ex_right_to_left - }; - } - - fs.release(); - return img_params_map; -} - -DeviceWriter::imu_params_t DeviceWriter::LoadImuParams( - const std::string &filepath) { - using FileStorage = cv::FileStorage; - FileStorage fs(filepath, FileStorage::READ); - if (!fs.isOpened()) { - LOG(FATAL) << "Failed to load file: " << filepath; - } - - imu_params_t params; - if (!fs["version"].isNone()) { - std::string version = std::string(fs["version"]); - // load params according to verison - if (version == "1.2") { - params.version = version; - fs["in_accel"] >> params.in_accel; - fs["in_gyro"] >> params.in_gyro; - fs["ex_left_to_imu"] >> params.ex_left_to_imu; - } else { - LOG(ERROR) << "Failed to load imu params of version " << version - << ", please use latest SDK."; - } - } else { - // load old params - fs["in_accel"] >> params.in_accel; - fs["in_gyro"] >> params.in_gyro; - fs["ex_left_to_imu"] >> params.ex_left_to_imu; - } - - fs.release(); - return params; -} - -} // namespace tools - -MYNTEYE_END_NAMESPACE diff --git a/tools/writer/device_writer.h b/tools/writer/device_writer.h deleted file mode 100644 index 1e36ed5..0000000 --- a/tools/writer/device_writer.h +++ /dev/null @@ -1,69 +0,0 @@ -// 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. -#ifndef MYNTEYE_TOOLS_DEVICE_WRITER_H_ // NOLINT -#define MYNTEYE_TOOLS_DEVICE_WRITER_H_ -#pragma once - -#include -#include -#include - -#include "mynteye/device/device.h" - -MYNTEYE_BEGIN_NAMESPACE - -class Device; - -namespace tools { - -class DeviceWriter { - public: - using dev_info_t = DeviceInfo; - using imu_params_t = device::imu_params_t; - using img_params_t = device::img_params_t; - using img_params_map_t = std::map; - - explicit DeviceWriter(std::shared_ptr device); - ~DeviceWriter(); - - bool WriteDeviceInfo(const dev_info_t &info); - bool WriteDeviceInfo(const std::string &filepath); - - bool WriteImgParams(const img_params_map_t &img_params_map); - bool WriteImgParams(const std::string &filepath); - - bool WriteImuParams(const imu_params_t ¶ms); - bool WriteImuParams(const std::string &filepath); - - bool SaveDeviceInfo(const dev_info_t &info, const std::string &filepath); - bool SaveImgParams(const img_params_map_t &img_params_map, - const std::string &filepath); - bool SaveImuParams(const imu_params_t ¶ms, const std::string &filepath); - - /** Save all infos of this device */ - void SaveAllInfos(const std::string &dir); - - private: - dev_info_t LoadDeviceInfo(const std::string &filepath); - img_params_map_t LoadImgParams(const std::string &filepath); - imu_params_t LoadImuParams(const std::string &filepath); - - std::shared_ptr device_; -}; - -} // namespace tools - -MYNTEYE_END_NAMESPACE - -#endif // MYNTEYE_TOOLS_DEVICE_WRITER_H_ NOLINT diff --git a/tools/writer/img_params_writer.cc b/tools/writer/img_params_writer.cc deleted file mode 100644 index fa0325d..0000000 --- a/tools/writer/img_params_writer.cc +++ /dev/null @@ -1,41 +0,0 @@ -// 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. -#include "mynteye/logger.h" -#include "mynteye/device/device.h" -#include "mynteye/device/utils.h" - -#include "writer/device_writer.h" - -MYNTEYE_USE_NAMESPACE - -int main(int argc, char *argv[]) { - glog_init _(argc, argv); - - const char *filepath; - if (argc >= 2) { - filepath = argv[1]; - } else { - LOG(ERROR) << "Usage: ./img_params_writer "; - return 2; - } - - auto &&device = device::select(); - if (!device) - return 1; - - tools::DeviceWriter writer(device); - writer.WriteImgParams(filepath); - - return 0; -} diff --git a/tools/writer/imu_params_writer.cc b/tools/writer/imu_params_writer.cc deleted file mode 100644 index 3b48917..0000000 --- a/tools/writer/imu_params_writer.cc +++ /dev/null @@ -1,41 +0,0 @@ -// 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. -#include "mynteye/logger.h" -#include "mynteye/device/device.h" -#include "mynteye/device/utils.h" - -#include "writer/device_writer.h" - -MYNTEYE_USE_NAMESPACE - -int main(int argc, char *argv[]) { - glog_init _(argc, argv); - - const char *filepath; - if (argc >= 2) { - filepath = argv[1]; - } else { - LOG(ERROR) << "Usage: ./imu_params_writer "; - return 2; - } - - auto &&device = device::select(); - if (!device) - return 1; - - tools::DeviceWriter writer(device); - writer.WriteImuParams(filepath); - - return 0; -} diff --git a/tools/writer/save_all_infos.cc b/tools/writer/save_all_infos.cc deleted file mode 100644 index 45b3934..0000000 --- a/tools/writer/save_all_infos.cc +++ /dev/null @@ -1,43 +0,0 @@ -// 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. -#include "mynteye/logger.h" -#include "mynteye/device/device.h" -#include "mynteye/device/utils.h" - -#include "writer/device_writer.h" - -MYNTEYE_USE_NAMESPACE - -int main(int argc, char *argv[]) { - glog_init _(argc, argv); - - std::string dir{"config"}; - if (argc >= 2) { - dir = argv[1]; - } - - auto &&device = device::select(); - if (!device) - return 1; - - dir.append(MYNTEYE_OS_SEP).append(device->GetInfo()->name); - dir.append(MYNTEYE_OS_SEP "SN").append(device->GetInfo()->serial_number); - - tools::DeviceWriter writer(device); - writer.SaveAllInfos(dir); - - LOG(INFO) << "Save all infos to \"" << dir << "\""; - - return 0; -} From 7f1926ef293ad10099098fb232bf187c560a1eb8 Mon Sep 17 00:00:00 2001 From: TinyO Date: Fri, 30 Aug 2019 17:40:06 +0800 Subject: [PATCH 07/13] doc(*): fix 2110 product content. --- docs/src/product/spec_s2110.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/product/spec_s2110.rst b/docs/src/product/spec_s2110.rst index 9445bcc..71d844a 100644 --- a/docs/src/product/spec_s2110.rst +++ b/docs/src/product/spec_s2110.rst @@ -1,7 +1,7 @@ .. _mynteye_spec_s2110: -S2110-146/Color Product Specification +S2110-95/Color Product Specification ======================================== Product Specification From df7cb0a26c6a20eb5c8cf2fad34a598cff55a3b9 Mon Sep 17 00:00:00 2001 From: TinyO Date: Fri, 30 Aug 2019 17:47:43 +0800 Subject: [PATCH 08/13] doc(*): version num change to 2.4.2. --- docs/Doxyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Doxyfile b/docs/Doxyfile index 396aec7..324cdde 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "MYNT EYE S SDK" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 2.4.1 +PROJECT_NUMBER = 2.4.2 # 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 From 80b6bc599b6e6013730722a2d7eb8c0a48177348 Mon Sep 17 00:00:00 2001 From: harjeb Date: Sat, 31 Aug 2019 13:57:10 +0800 Subject: [PATCH 09/13] docs(*): update docs --- docs/src/firmware/update_auxiliary_chip.rst | 2 +- docs/src/product/spec_s2110.rst | 2 +- docs/src/sdk/control/auto_exposure.rst | 6 +-- docs/src/sdk/control/framerate.rst | 6 +-- docs/src/sdk/control/iic_address.rst | 6 +-- docs/src/sdk/control/imu_range.rst | 6 +-- docs/src/sdk/control/infrared.rst | 4 +- docs/src/sdk/control/manual_exposure.rst | 6 +-- docs/src/sdk/data/contents.rst | 4 ++ docs/src/sdk/data/get_img_params.rst | 2 +- docs/src/sdk/data/get_points.rst | 56 +++++++++++++++++++++ docs/src/sdk/data/write_img_params.rst | 2 +- docs/src/sdk/data/write_imu_params.rst | 2 +- docs/src/wrapper/ros.rst | 6 +-- 14 files changed, 85 insertions(+), 25 deletions(-) create mode 100644 docs/src/sdk/data/get_points.rst diff --git a/docs/src/firmware/update_auxiliary_chip.rst b/docs/src/firmware/update_auxiliary_chip.rst index a46a373..5d555c1 100644 --- a/docs/src/firmware/update_auxiliary_chip.rst +++ b/docs/src/firmware/update_auxiliary_chip.rst @@ -3,7 +3,7 @@ Update Auxiliary Chip Firmware ================================== -Update auxiliary chip (Only Support S2100/S210A) +Update auxiliary chip (Only Support S21XX) ------------------------------------------------ * Plug in the MYNT® EYE camera into a USB3.0 port diff --git a/docs/src/product/spec_s2110.rst b/docs/src/product/spec_s2110.rst index 71d844a..8f65c5c 100644 --- a/docs/src/product/spec_s2110.rst +++ b/docs/src/product/spec_s2110.rst @@ -9,7 +9,7 @@ Product Specification ========================== ===================================================== - Model S2110-146/Color + Model S2110-95/Color -------------------------- ----------------------------------------------------- Size PCB dimension:15x100mm Total dimension:125x47x26.6mm diff --git a/docs/src/sdk/control/auto_exposure.rst b/docs/src/sdk/control/auto_exposure.rst index 935699a..aa7fd6f 100644 --- a/docs/src/sdk/control/auto_exposure.rst +++ b/docs/src/sdk/control/auto_exposure.rst @@ -13,7 +13,7 @@ For mynteye s1030, the settings available for adjustment during auto exposure ar * ``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: +For mynteye s21XX, the settings available for adjustment during auto exposure are: * ``Option::MAX_GAIN`` Maximum gain. * ``Option::MAX_EXPOSURE_TIME`` Maximum exposure time. @@ -45,7 +45,7 @@ s1030: LOG(INFO) << "Set DESIRED_BRIGHTNESS to " << api->GetOptionValue(Option::DESIRED_BRIGHTNESS); -s2100/s210a: +s21XX: .. code-block:: c++ @@ -97,7 +97,7 @@ s1030: I0513 14:07:58.521375 31845 auto_exposure.cc:41] Set DESIRED_BRIGHTNESS to 192 -s2100/s210a: +s21XX: .. code-block:: bash diff --git a/docs/src/sdk/control/framerate.rst b/docs/src/sdk/control/framerate.rst index a14e617..d89146b 100644 --- a/docs/src/sdk/control/framerate.rst +++ b/docs/src/sdk/control/framerate.rst @@ -12,7 +12,7 @@ For mynteye s1030, to set the image frame rate and IMU frequency, set ``Option:: * 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: +For mynteye s21XX, the image frame rate should be selected when running the sample, and the frame rate and resolution are combined as follows: .. code-block:: bash @@ -45,7 +45,7 @@ s1030: LOG(INFO) << "Set IMU_FREQUENCY to " << api->GetOptionValue(Option::IMU_FREQUENCY); -s2100/s210a: +s21XX: .. code-block:: c++ @@ -78,7 +78,7 @@ s1030: 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: +s21XX: .. code-block:: bash diff --git a/docs/src/sdk/control/iic_address.rst b/docs/src/sdk/control/iic_address.rst index 352e22c..ab64d0f 100644 --- a/docs/src/sdk/control/iic_address.rst +++ b/docs/src/sdk/control/iic_address.rst @@ -9,11 +9,11 @@ To set the IIC address, set ``Option::IIC_ADDRESS_SETTING``. .. Attention:: - Only support S210A/2100 + Only support S21XX Reference Code: -s210a/s2100: +s2XX: .. code-block:: c++ @@ -33,7 +33,7 @@ s210a/s2100: Reference running results on Linux: -s210a/s2100: +s21XX: .. code-block:: bash diff --git a/docs/src/sdk/control/imu_range.rst b/docs/src/sdk/control/imu_range.rst index 4248fcf..074b6c8 100644 --- a/docs/src/sdk/control/imu_range.rst +++ b/docs/src/sdk/control/imu_range.rst @@ -13,7 +13,7 @@ To set the range of accelerometer and gyroscope, set ``Option::ACCELEROMETER_RAN * 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: + For mynteye s21XX, the available settings are: * The effective range of accelerometer(unit:g): 6, 12, 24, 48. * The effective range of gyroscope(unit:deg/s): 250, 500, 1000, 2000, 4000. @@ -38,7 +38,7 @@ s1030: LOG(INFO) << "Set GYROSCOPE_RANGE to " << api->GetOptionValue(Option::GYROSCOPE_RANGE); -s2100/s210a: +s21XX: .. code-block:: c++ @@ -78,7 +78,7 @@ s1030: I/imu_range.cc:84 Img count: 363, fps: 25.0967 I/imu_range.cc:86 Imu count: 2825, hz: 195.312 -s2100/s210a: +s21XX: .. code-block:: bash diff --git a/docs/src/sdk/control/infrared.rst b/docs/src/sdk/control/infrared.rst index 83bf925..0b8802e 100644 --- a/docs/src/sdk/control/infrared.rst +++ b/docs/src/sdk/control/infrared.rst @@ -8,7 +8,7 @@ Using the ``SetOptionValue()`` function of the API, you can set various control 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. + * mynteye s21XX doesn't support this feature. Reference Code: @@ -49,6 +49,6 @@ At this point, if the image is displayed, you can see IR speckle on the image, a .. 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. + The hardware will not record the IR value after being turned off and will reset to 0. In order to keep IR enabled, you must set the IR value after turning on the device. Complete code samples,see `ctrl_infrared.cc `_ . diff --git a/docs/src/sdk/control/manual_exposure.rst b/docs/src/sdk/control/manual_exposure.rst index da944f0..0eee65c 100644 --- a/docs/src/sdk/control/manual_exposure.rst +++ b/docs/src/sdk/control/manual_exposure.rst @@ -13,7 +13,7 @@ For mynteye s1030, during manual exposure, the settings available for adjustment * ``Option::BRIGHTNESS`` Brightness (Exposure time). * ``Option::CONTRAST`` Contrast (Black level calibration). -For mynteye s2100/s210a, during manual exposure, the settings available for adjustment are: +For mynteye s21XX, during manual exposure, the settings available for adjustment are: * ``Option::BRIGHTNESS`` Brightness (Exposure time). @@ -41,7 +41,7 @@ s1030: LOG(INFO) << "Set BRIGHTNESS to " << api->GetOptionValue(Option::BRIGHTNESS); LOG(INFO) << "Set CONTRAST to " << api->GetOptionValue(Option::CONTRAST); -s2100/s210a: +s21XX: .. code-block:: c++ @@ -81,7 +81,7 @@ s1030: 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 116 -s2100/s210a: +s21XX: .. code-block:: bash diff --git a/docs/src/sdk/data/contents.rst b/docs/src/sdk/data/contents.rst index a381091..74e12f7 100644 --- a/docs/src/sdk/data/contents.rst +++ b/docs/src/sdk/data/contents.rst @@ -12,8 +12,12 @@ SDK Data Samples get_stereo_rectified get_disparity get_depth + get_points get_imu get_imu_correspondence get_from_callbacks get_with_plugin + save_params save_single_image + write_img_params + write_imu_params \ No newline at end of file diff --git a/docs/src/sdk/data/get_img_params.rst b/docs/src/sdk/data/get_img_params.rst index 5511918..139f00e 100644 --- a/docs/src/sdk/data/get_img_params.rst +++ b/docs/src/sdk/data/get_img_params.rst @@ -7,7 +7,7 @@ Use ``GetIntrinsics()`` & ``GetExtrinsics()`` to get image calibration parameter .. 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 S21XX are in ``tools/writer/config/S21XX`` the image calibration parameters of S1030 are in ``tools/writer/config/S1030`` Note diff --git a/docs/src/sdk/data/get_points.rst b/docs/src/sdk/data/get_points.rst new file mode 100644 index 0000000..e7cd256 --- /dev/null +++ b/docs/src/sdk/data/get_points.rst @@ -0,0 +1,56 @@ +.. _data_get_points: + +Get Point Image +================ + +Point images belongs to upper layer of synthetic data. To get this kind of data through ``GetStreamData()``, you need to start the ``EnableStreamData()`` beforehand. It should be check not empty before use. + +For detail process description, please see :ref:`get_stereo` :ref:`get_stereo_rectified` . + + +Sample code snippet: + +.. code-block:: c++ + + auto &&api = API::Create(argc, argv); + + api->EnableStreamData(Stream::POINTS); + + api->Start(Source::VIDEO_STREAMING); + + cv::namedWindow("frame"); + PCViewer pcviewer; + + 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 &&points_data = api->GetStreamData(Stream::POINTS); + if (!points_data.frame.empty()) { + pcviewer.Update(points_data.frame); + } + + char key = static_cast(cv::waitKey(1)); + if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q + break; + } + if (pcviewer.WasStopped()) { + break; + } + } + + api->Stop(Source::VIDEO_STREAMING); + +`PCL `_ is used to display point images above. Program will close when point image window is closed. + +Complete code examples, see `get_depth_and_points.cc `_ . + +.. attention:: + + Sample code only compiles when `PCL `_ is ready. If your PCL was installed in a different directory, please set ``CMAKE_PREFIX_PATH`` in `tutorials/CMakeLists.txt `_ to the path of ``PCLConfig.cmake`` . You can find ``CMAKE_PREFIX_PATH`` near ``find_package(PCL)`` . diff --git a/docs/src/sdk/data/write_img_params.rst b/docs/src/sdk/data/write_img_params.rst index 9911b9c..95821c2 100644 --- a/docs/src/sdk/data/write_img_params.rst +++ b/docs/src/sdk/data/write_img_params.rst @@ -24,7 +24,7 @@ And, `samples/config/S1030/img.params.pinhole `_ . If you calibrated the parameters yourself, you can edit the file and run above commands to write them into the device. +The path of parameters folder can be found in `samples/config/imu.params `_ . If you calibrated the parameters yourself, you can edit the file and run above commands to write them into the device. .. warning:: diff --git a/docs/src/wrapper/ros.rst b/docs/src/wrapper/ros.rst index d8523f5..5d0f6af 100644 --- a/docs/src/wrapper/ros.rst +++ b/docs/src/wrapper/ros.rst @@ -54,7 +54,7 @@ The ROS file is structured like follows: │ ├─config/ │ │ ├─device/ │ │ ├─standard.yaml # S1030 - │ │ └─standard2.yaml # S2100/S210A + │ │ └─standard2.yaml # S21XX │ │ ├─laserscan/ │ │ ├─process/ │ │ └─... @@ -72,14 +72,14 @@ The ROS file is structured like follows: │ └─package.xml └─README.md -In ``mynteye.launch``, you can configure the topics and frame_ids, decide which data to enable, ``standard.yaml`` (standard2.yaml is S2100/S210A config file) can set parameters for device. Please set ``gravity`` to the local gravity acceleration. +In ``mynteye.launch``, you can configure the topics and frame_ids, decide which data to enable, ``standard.yaml`` (standard2.yaml is S21XX config file) can set parameters for device. Please set ``gravity`` to the local gravity acceleration. standard.yaml/standard2.yaml: .. code-block:: xml - # s2100/s210a modify frame/resolution + # s21XX modify frame/resolution standard2/request_index: 2 # s1030 modify frame/imu hz From 0f546e55fb08a3d40c5dd627a4a39d8461e1fbf5 Mon Sep 17 00:00:00 2001 From: TinyO Date: Mon, 2 Sep 2019 10:17:06 +0800 Subject: [PATCH 10/13] feat(*): add record samples.. --- samples/CMakeLists.txt | 8 ++ samples/dataset.cc | 203 +++++++++++++++++++++++++++++++++++++++++ samples/dataset.h | 69 ++++++++++++++ samples/record.cc | 137 +++++++++++++++++++++++++++ 4 files changed, 417 insertions(+) create mode 100644 samples/dataset.cc create mode 100644 samples/dataset.h create mode 100644 samples/record.cc diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 74212b8..807c203 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -279,3 +279,11 @@ make_executable(save_all_infos DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} ) +## record + +make_executable(record + SRCS record.cc dataset.cc + LINK_LIBS mynteye ${OpenCV_LIBS} + DLL_SEARCH_PATHS ${PRO_DIR}/_install/bin ${OpenCV_LIB_SEARCH_PATH} +) + diff --git a/samples/dataset.cc b/samples/dataset.cc new file mode 100644 index 0000000..cf4a4d7 --- /dev/null +++ b/samples/dataset.cc @@ -0,0 +1,203 @@ +// 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. +#include "dataset.h" + +#include +#include + +#include +#include +#include +#include + +#include "mynteye/logger.h" +#include "mynteye/util/files.h" + +#define FULL_PRECISION \ + std::fixed << std::setprecision(std::numeric_limits::max_digits10) + +#define IMAGE_FILENAME_WIDTH 6 + +MYNTEYE_BEGIN_NAMESPACE + +namespace tools { + +Dataset::Dataset(std::string outdir) : outdir_(std::move(outdir)) { + VLOG(2) << __func__; + if (!files::mkdir(outdir_)) { + LOG(FATAL) << "Create directory failed: " << outdir_; + } +} + +Dataset::~Dataset() { + VLOG(2) << __func__; + for (auto &&it = stream_writers_.begin(); it != stream_writers_.end(); it++) { + if (it->second) { + it->second->ofs.flush(); + it->second->ofs.close(); + } + } + if (motion_writer_) { + motion_writer_->ofs.flush(); + motion_writer_->ofs.close(); + } +} + +void Dataset::SaveStreamData( + const Stream &stream, const device::StreamData &data) { + auto &&writer = GetStreamWriter(stream); + auto seq = stream_counts_[stream]; + writer->ofs << seq << ", " << data.img->frame_id << ", " + << data.img->timestamp << ", " << data.img->exposure_time + << std::endl; + if (data.frame) { + std::stringstream ss; + ss << writer->outdir << MYNTEYE_OS_SEP << std::dec + << std::setw(IMAGE_FILENAME_WIDTH) << std::setfill('0') << seq << ".png"; + if (data.frame->format() == Format::GREY) { + cv::Mat img( + data.frame->height(), data.frame->width(), CV_8UC1, + data.frame->data()); + cv::imwrite(ss.str(), img); + } else if (data.frame->format() == Format::YUYV) { + cv::Mat img( + data.frame->height(), data.frame->width(), CV_8UC2, + data.frame->data()); + cv::cvtColor(img, img, cv::COLOR_YUV2BGR_YUY2); + cv::imwrite(ss.str(), img); + } else if (data.frame->format() == Format::BGR888) { + cv::Mat img( + data.frame->height(), data.frame->width(), CV_8UC3, + data.frame->data()); + cv::imwrite(ss.str(), img); + } else { + cv::Mat img( + data.frame->height(), data.frame->width(), CV_8UC1, + data.frame->data()); + cv::imwrite(ss.str(), img); + } + } + ++stream_counts_[stream]; +} + +void Dataset::SaveMotionData(const device::MotionData &data) { + auto &&writer = GetMotionWriter(); + // auto seq = data.imu->serial_number; + auto seq = motion_count_; + writer->ofs << seq << ", " << static_cast(data.imu->flag) << ", " + << data.imu->timestamp << ", " << data.imu->accel[0] << ", " + << data.imu->accel[1] << ", " << data.imu->accel[2] << ", " + << data.imu->gyro[0] << ", " << data.imu->gyro[1] << ", " + << data.imu->gyro[2] << ", " << data.imu->temperature + << std::endl; + ++motion_count_; + /* + if(motion_count_ != seq) { + LOG(INFO) << "motion_count_ != seq !" << " motion_count_: " << motion_count_ + << " seq: " << seq; + motion_count_ = seq; + } + */ +} + +void Dataset::SaveStreamData( + const Stream &stream, const api::StreamData &data) { + auto &&writer = GetStreamWriter(stream); + auto seq = stream_counts_[stream]; + writer->ofs << seq << ", " << data.img->frame_id << ", " + << data.img->timestamp << ", " << data.img->exposure_time + << std::endl; + if (!data.frame.empty()) { + std::stringstream ss; + ss << writer->outdir << MYNTEYE_OS_SEP << std::dec + << std::setw(IMAGE_FILENAME_WIDTH) << std::setfill('0') << seq << ".png"; + cv::imwrite(ss.str(), data.frame); + } + ++stream_counts_[stream]; +} + +void Dataset::SaveMotionData(const api::MotionData &data) { + auto &&writer = GetMotionWriter(); + // auto seq = data.imu->serial_number; + auto seq = motion_count_; + if (data.imu->flag == 1 || data.imu->flag == 2) { + writer->ofs << seq << ", " << static_cast(data.imu->flag) << ", " + << data.imu->timestamp << ", " << data.imu->accel[0] << ", " + << data.imu->accel[1] << ", " << data.imu->accel[2] << ", " + << data.imu->gyro[0] << ", " << data.imu->gyro[1] << ", " + << data.imu->gyro[2] << ", " << data.imu->temperature + << std::endl; + ++motion_count_; + } + /* + if(motion_count_ != seq) { + LOG(INFO) << "motion_count_ != seq !" << " motion_count_: " << motion_count_ + << " seq: " << seq; + motion_count_ = seq; + } + */ +} + +Dataset::writer_t Dataset::GetStreamWriter(const Stream &stream) { + try { + return stream_writers_.at(stream); + } catch (const std::out_of_range &e) { + writer_t writer = std::make_shared(); + switch (stream) { + case Stream::LEFT: { + writer->outdir = outdir_ + MYNTEYE_OS_SEP "left"; + } break; + case Stream::RIGHT: { + writer->outdir = outdir_ + MYNTEYE_OS_SEP "right"; + } break; + default: + LOG(FATAL) << "Unsupported stream: " << stream; + } + writer->outfile = writer->outdir + MYNTEYE_OS_SEP "stream.txt"; + + files::mkdir(writer->outdir); + writer->ofs.open(writer->outfile, std::ofstream::out); + writer->ofs << "seq, frame_id, timestamp, exposure_time" << std::endl; + writer->ofs << FULL_PRECISION; + + stream_writers_[stream] = writer; + stream_counts_[stream] = 0; + return writer; + } +} + +Dataset::writer_t Dataset::GetMotionWriter() { + if (motion_writer_ == nullptr) { + writer_t writer = std::make_shared(); + writer->outdir = outdir_; + writer->outfile = writer->outdir + MYNTEYE_OS_SEP "motion.txt"; + + files::mkdir(writer->outdir); + writer->ofs.open(writer->outfile, std::ofstream::out); + writer->ofs << "seq, flag, timestamp, accel_x, accel_y, accel_z, " + "gyro_x, gyro_y, gyro_z, temperature" + << std::endl; + writer->ofs << FULL_PRECISION; + + motion_writer_ = writer; + motion_count_ = 0; + accel_count_ = 0; + gyro_count_ = 0; + } + return motion_writer_; +} + +} // namespace tools + +MYNTEYE_END_NAMESPACE diff --git a/samples/dataset.h b/samples/dataset.h new file mode 100644 index 0000000..2a44203 --- /dev/null +++ b/samples/dataset.h @@ -0,0 +1,69 @@ +// 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. +#ifndef MYNTEYE_TOOLS_DATASET_H_ // NOLINT +#define MYNTEYE_TOOLS_DATASET_H_ +#pragma once + +#include +#include +#include +#include + +#include "mynteye/mynteye.h" +#include "mynteye/api/api.h" +#include "mynteye/device/callbacks.h" + +MYNTEYE_BEGIN_NAMESPACE + +namespace tools { + +class Dataset { + public: + struct Writer { + std::ofstream ofs; + std::string outdir; + std::string outfile; + }; + + using writer_t = std::shared_ptr; + + explicit Dataset(std::string outdir); + ~Dataset(); + + void SaveStreamData(const Stream &stream, const device::StreamData &data); + void SaveMotionData(const device::MotionData &data); + + void SaveStreamData(const Stream &stream, const api::StreamData &data); + void SaveMotionData(const api::MotionData &data); + + private: + writer_t GetStreamWriter(const Stream &stream); + writer_t GetMotionWriter(); + + std::string outdir_; + + std::map stream_writers_; + writer_t motion_writer_; + + std::map stream_counts_; + std::size_t motion_count_; + std::size_t accel_count_; + std::size_t gyro_count_; +}; + +} // namespace tools + +MYNTEYE_END_NAMESPACE + +#endif // MYNTEYE_TOOLS_DATASET_H_ NOLINT diff --git a/samples/record.cc b/samples/record.cc new file mode 100644 index 0000000..b29a9f6 --- /dev/null +++ b/samples/record.cc @@ -0,0 +1,137 @@ +// 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. +#include +#include + +#include "mynteye/logger.h" +#include "mynteye/device/device.h" +#include "mynteye/device/utils.h" +#include "mynteye/util/times.h" + +#include "dataset.h" + +MYNTEYE_USE_NAMESPACE + +int main(int argc, char *argv[]) { + glog_init _(argc, argv); + + auto &&device = device::select(); + if (!device) return 1; + + bool ok; + auto &&request = device::select_request(device, &ok); + if (!ok) return 1; + device->ConfigStreamRequest(request); + + device->LogOptionInfos(); + + // Enable this will cache the motion datas until you get them. + device->EnableMotionDatas(); + device->Start(Source::ALL); + + const char *outdir; + if (argc >= 2) { + outdir = argv[1]; + } else { + outdir = "./dataset"; + } + tools::Dataset dataset(outdir); + + cv::namedWindow("frame"); + + std::size_t img_count = 0; + std::size_t imu_count = 0; + auto &&time_beg = times::now(); + while (true) { + device->WaitForStreams(); + + auto &&left_datas = device->GetStreamDatas(Stream::LEFT); + auto &&right_datas = device->GetStreamDatas(Stream::RIGHT); + img_count += left_datas.size(); + + auto &&motion_datas = device->GetMotionDatas(); + imu_count += motion_datas.size(); + + auto &&left_frame = left_datas.back().frame; + auto &&right_frame = right_datas.back().frame; + + cv::Mat img; + + if (left_frame->format() == Format::GREY) { + cv::Mat left_img( + left_frame->height(), left_frame->width(), CV_8UC1, + left_frame->data()); + cv::Mat right_img( + right_frame->height(), right_frame->width(), CV_8UC1, + right_frame->data()); + cv::hconcat(left_img, right_img, img); + } else if (left_frame->format() == Format::YUYV) { + cv::Mat left_img( + left_frame->height(), left_frame->width(), CV_8UC2, + left_frame->data()); + cv::Mat right_img( + right_frame->height(), right_frame->width(), CV_8UC2, + right_frame->data()); + cv::cvtColor(left_img, left_img, cv::COLOR_YUV2BGR_YUY2); + cv::cvtColor(right_img, right_img, cv::COLOR_YUV2BGR_YUY2); + cv::hconcat(left_img, right_img, img); + } else if (left_frame->format() == Format::BGR888) { + cv::Mat left_img( + left_frame->height(), left_frame->width(), CV_8UC3, + left_frame->data()); + cv::Mat right_img( + right_frame->height(), right_frame->width(), CV_8UC3, + right_frame->data()); + cv::hconcat(left_img, right_img, img); + } else { + return -1; + } + cv::imshow("frame", img); + if (img_count > 10 && imu_count > 50) { // save + for (auto &&left : left_datas) { + dataset.SaveStreamData(Stream::LEFT, left); + } + for (auto &&right : right_datas) { + dataset.SaveStreamData(Stream::RIGHT, right); + } + + for (auto &&motion : motion_datas) { + dataset.SaveMotionData(motion); + } + + std::cout << "\rSaved " << img_count << " imgs" + << ", " << imu_count << " imus" << std::flush; + } + + char key = static_cast(cv::waitKey(1)); + if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q + break; + } + } + std::cout << " to " << outdir << std::endl; + auto &&time_end = times::now(); + + device->Stop(Source::ALL); + + float elapsed_ms = + times::count(time_end - time_beg) * 0.001f; + LOG(INFO) << "Time beg: " << times::to_local_string(time_beg) + << ", end: " << times::to_local_string(time_end) + << ", cost: " << elapsed_ms << "ms"; + LOG(INFO) << "Img count: " << img_count + << ", fps: " << (1000.f * img_count / elapsed_ms); + LOG(INFO) << "Imu count: " << imu_count + << ", hz: " << (1000.f * imu_count / elapsed_ms); + return 0; +} \ No newline at end of file From da23dce1c994d4060e3544b1f2165dbe714d8542 Mon Sep 17 00:00:00 2001 From: TinyO Date: Mon, 2 Sep 2019 17:17:35 +0800 Subject: [PATCH 11/13] feat(*): change doc of 2100 info. --- docs/src/product/spec_s2110.rst | 10 +++++----- .../api/processor/disparity_processor.cc | 6 ++++-- .../api/processor/disparity_processor.h | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/docs/src/product/spec_s2110.rst b/docs/src/product/spec_s2110.rst index 8f65c5c..e43dd41 100644 --- a/docs/src/product/spec_s2110.rst +++ b/docs/src/product/spec_s2110.rst @@ -11,7 +11,7 @@ Product Specification ========================== ===================================================== Model S2110-95/Color -------------------------- ----------------------------------------------------- - Size PCB dimension:15x100mm + Size PCB dimension:17.74x100mm Total dimension:125x47x26.6mm -------------------------- ----------------------------------------------------- Frame Rate 1280x400\@10/20/30/60fps 2560x800\@10/20/30fps @@ -24,15 +24,15 @@ Product Specification -------------------------- ----------------------------------------------------- Baseline 80.0mm -------------------------- ----------------------------------------------------- - Visual Angle D:141° H:124° V:87° + Visual Angle D:112° H:95° V:50° -------------------------- ----------------------------------------------------- - Focal Length 0.95mm + Focal Length 2.63mm -------------------------- ----------------------------------------------------- IR Support No -------------------------- ----------------------------------------------------- Color Mode Color -------------------------- ----------------------------------------------------- - Depth Working Distance 0.26-3m+ + Depth Working Distance 0.60-7m+ -------------------------- ----------------------------------------------------- Scanning Mode Global Shutter -------------------------- ----------------------------------------------------- @@ -48,7 +48,7 @@ Synchronization Precision <1ms (up to 0.02ms) -------------------------- ----------------------------------------------------- Time Sync interface DF50A -------------------------- ----------------------------------------------------- - Weight 62g + Weight 100.8g -------------------------- ----------------------------------------------------- UVC MODE Yes ========================== ===================================================== diff --git a/src/mynteye/api/processor/disparity_processor.cc b/src/mynteye/api/processor/disparity_processor.cc index 00e8d16..3436cd9 100644 --- a/src/mynteye/api/processor/disparity_processor.cc +++ b/src/mynteye/api/processor/disparity_processor.cc @@ -81,6 +81,8 @@ DisparityProcessor::DisparityProcessor(DisparityComputingMethod type, sgbm_matcher->setSpeckleWindowSize(100); sgbm_matcher->setSpeckleRange(32); sgbm_matcher->setDisp12MaxDiff(1); + disparity_min_sgbm = sgbm_matcher->getMinDisparity(); + disparity_max_sgbm = sgbm_matcher->getNumDisparities(); bm_matcher = cv::StereoBM::create(0, 3); bm_matcher->setPreFilterSize(9); @@ -93,8 +95,8 @@ DisparityProcessor::DisparityProcessor(DisparityComputingMethod type, bm_matcher->setSpeckleWindowSize(100); bm_matcher->setSpeckleRange(4); bm_matcher->setPreFilterType(cv::StereoBM::PREFILTER_XSOBEL); - // DISPARITY_MIN = bm_matcher->getMinDisparity(); - // DISPARITY_MAX = bm_matcher->getMinDisparity(); + disparity_min_bm = bm_matcher->getMinDisparity(); + disparity_max_bm = bm_matcher->getNumDisparities(); #endif NotifyComputingTypeChanged(type_); } diff --git a/src/mynteye/api/processor/disparity_processor.h b/src/mynteye/api/processor/disparity_processor.h index 3f3a6d9..4075d9f 100644 --- a/src/mynteye/api/processor/disparity_processor.h +++ b/src/mynteye/api/processor/disparity_processor.h @@ -41,6 +41,20 @@ class DisparityProcessor : public Processor { const DisparityComputingMethod &MethodType); void NotifyComputingTypeChanged(const DisparityComputingMethod &MethodType); bool ConfigFromFile(const std::string& config); + double GetMinDisparity() { + if (type_ == DisparityComputingMethod::BM) { + return disparity_min_bm; + } else { + return disparity_min_sgbm; + } + } + double GetMaxDisparity() { + if (type_ == DisparityComputingMethod::BM) { + return disparity_max_bm; + } else { + return disparity_max_sgbm; + } + } protected: // inline Processor::process_type ProcessOutputConnection() override { @@ -56,6 +70,10 @@ class DisparityProcessor : public Processor { cv::Ptr bm_matcher; DisparityComputingMethod type_; double cx1_minus_cx2_; + double disparity_min_bm; + double disparity_max_bm; + double disparity_min_sgbm; + double disparity_max_sgbm; }; MYNTEYE_END_NAMESPACE From 6ecbe85ae45b1ef6b78a34ea31900b29c5517f3b Mon Sep 17 00:00:00 2001 From: TinyO Date: Mon, 2 Sep 2019 17:25:00 +0800 Subject: [PATCH 12/13] fix(*): change 2100 doc format error. --- docs/src/product/spec_s2100.rst | 4 ++-- docs/src/product/spec_s2110.rst | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/src/product/spec_s2100.rst b/docs/src/product/spec_s2100.rst index 05ad5ff..90b8b41 100644 --- a/docs/src/product/spec_s2100.rst +++ b/docs/src/product/spec_s2100.rst @@ -41,7 +41,7 @@ Product Specification Synchronization Precision <1ms (up to 0.02ms) -------------------------- ----------------------------------------------------- IMU Frequency 200Hz --------------------------- --------------------------------------- +-------------------------- ----------------------------------------------------- Output data format YUYV -------------------------- ----------------------------------------------------- Data transfer Interface USB3.0 @@ -64,7 +64,7 @@ Software SDK http://www.myntai.com/dev/mynteye ---------------- --------------------------------------------------------------------------------- Support ORB_SLAM2、OKVIS、Vins-Mono、Vins-Fusion、VIORB -================ ================================================================================== +================ ================================================================================= diff --git a/docs/src/product/spec_s2110.rst b/docs/src/product/spec_s2110.rst index e43dd41..1ba09d4 100644 --- a/docs/src/product/spec_s2110.rst +++ b/docs/src/product/spec_s2110.rst @@ -41,7 +41,7 @@ Product Specification Synchronization Precision <1ms (up to 0.02ms) -------------------------- ----------------------------------------------------- IMU Frequency 200Hz --------------------------- --------------------------------------- +-------------------------- ----------------------------------------------------- Output data format YUYV -------------------------- ----------------------------------------------------- Data transfer Interface USB3.0 @@ -64,7 +64,7 @@ Software SDK http://www.myntai.com/dev/mynteye ---------------- --------------------------------------------------------------------------------- Support ORB_SLAM2、OKVIS、Vins-Mono、Vins-Fusion、VIORB -================ ================================================================================== +================ ================================================================================= From 1adb715b5160e4964ee9c094d75553ea5ad34ad3 Mon Sep 17 00:00:00 2001 From: TinyO Date: Mon, 2 Sep 2019 18:03:30 +0800 Subject: [PATCH 13/13] fix(*): use auto min_dis/max_dis instead of static one. --- src/mynteye/api/processor/depth_processor.cc | 10 +++++++-- src/mynteye/api/processor/depth_processor.h | 5 +++++ .../api/processor/disparity_processor.cc | 17 ++++++++++----- .../api/processor/disparity_processor.h | 21 ++++++++++--------- src/mynteye/api/synthetic.cc | 13 +++++++----- 5 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/mynteye/api/processor/depth_processor.cc b/src/mynteye/api/processor/depth_processor.cc index 8754540..e1ca22d 100644 --- a/src/mynteye/api/processor/depth_processor.cc +++ b/src/mynteye/api/processor/depth_processor.cc @@ -26,9 +26,13 @@ int DISPARITY_MAX = 64; DepthProcessor::DepthProcessor( std::shared_ptr calib_infos, + std::shared_ptr min_disp, + std::shared_ptr max_disp, std::int32_t proc_period) : Processor(std::move(proc_period)), - calib_infos_(calib_infos) { + calib_infos_(calib_infos), + min_disp_(min_disp), + max_disp_(max_disp) { VLOG(2) << __func__; } @@ -54,11 +58,13 @@ bool DepthProcessor::OnProcess( int cols = input->value.cols; // std::cout << calib_infos_->T_mul_f << std::endl; // 0.0793434 + cv::Mat depth_mat = cv::Mat::zeros(rows, cols, CV_16U); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { float disparity_value = input->value.at(i, j); - if (disparity_value < DISPARITY_MAX && disparity_value > DISPARITY_MIN) { + if (disparity_value < (max_disp_ ? *max_disp_ : DISPARITY_MAX) && + disparity_value > (min_disp_ ? *min_disp_ : DISPARITY_MIN)) { float depth = calib_infos_->T_mul_f / disparity_value; depth_mat.at(i, j) = depth; } diff --git a/src/mynteye/api/processor/depth_processor.h b/src/mynteye/api/processor/depth_processor.h index c9b152f..f247386 100644 --- a/src/mynteye/api/processor/depth_processor.h +++ b/src/mynteye/api/processor/depth_processor.h @@ -16,6 +16,7 @@ #pragma once #include +#include #include "mynteye/api/processor.h" #include "mynteye/api/processor/rectify_processor.h" @@ -29,6 +30,8 @@ class DepthProcessor : public Processor { explicit DepthProcessor( std::shared_ptr calib_infos, + std::shared_ptr min_disp = nullptr, + std::shared_ptr max_disp = nullptr, std::int32_t proc_period = 0); virtual ~DepthProcessor(); @@ -44,6 +47,8 @@ class DepthProcessor : public Processor { std::shared_ptr const parent) override; private: std::shared_ptr calib_infos_; + std::shared_ptr min_disp_; + std::shared_ptr max_disp_; }; MYNTEYE_END_NAMESPACE diff --git a/src/mynteye/api/processor/disparity_processor.cc b/src/mynteye/api/processor/disparity_processor.cc index 3436cd9..002040d 100644 --- a/src/mynteye/api/processor/disparity_processor.cc +++ b/src/mynteye/api/processor/disparity_processor.cc @@ -81,9 +81,10 @@ DisparityProcessor::DisparityProcessor(DisparityComputingMethod type, sgbm_matcher->setSpeckleWindowSize(100); sgbm_matcher->setSpeckleRange(32); sgbm_matcher->setDisp12MaxDiff(1); - disparity_min_sgbm = sgbm_matcher->getMinDisparity(); - disparity_max_sgbm = sgbm_matcher->getNumDisparities(); - + disparity_min_sgbm_ptr = + std::make_shared(sgbm_matcher->getMinDisparity()); + disparity_max_sgbm_ptr = + std::make_shared(sgbm_matcher->getNumDisparities()); bm_matcher = cv::StereoBM::create(0, 3); bm_matcher->setPreFilterSize(9); bm_matcher->setPreFilterCap(31); @@ -95,8 +96,10 @@ DisparityProcessor::DisparityProcessor(DisparityComputingMethod type, bm_matcher->setSpeckleWindowSize(100); bm_matcher->setSpeckleRange(4); bm_matcher->setPreFilterType(cv::StereoBM::PREFILTER_XSOBEL); - disparity_min_bm = bm_matcher->getMinDisparity(); - disparity_max_bm = bm_matcher->getNumDisparities(); + disparity_min_bm_ptr = + std::make_shared(bm_matcher->getMinDisparity()); + disparity_max_bm_ptr = + std::make_shared(bm_matcher->getNumDisparities()); #endif NotifyComputingTypeChanged(type_); } @@ -125,11 +128,15 @@ bool DisparityProcessor::ConfigFromFile(const std::string& config_file) { cv::FileNode node_sgbm = fsSettings["SGBM"]; if (node_sgbm.type() == cv::FileNode::MAP) { sgbm_matcher->read(node_sgbm); + *disparity_min_sgbm_ptr = sgbm_matcher->getMinDisparity(); + *disparity_max_sgbm_ptr = sgbm_matcher->getNumDisparities(); } cv::FileNode node_bm = fsSettings["BM"]; if (node_bm.type() == cv::FileNode::MAP) { bm_matcher->read(node_bm); + *disparity_min_bm_ptr = bm_matcher->getMinDisparity(); + *disparity_max_bm_ptr = bm_matcher->getNumDisparities(); } return true; #else diff --git a/src/mynteye/api/processor/disparity_processor.h b/src/mynteye/api/processor/disparity_processor.h index 4075d9f..b66b54b 100644 --- a/src/mynteye/api/processor/disparity_processor.h +++ b/src/mynteye/api/processor/disparity_processor.h @@ -16,6 +16,7 @@ #pragma once #include +#include #include "mynteye/api/processor.h" #include "mynteye/types.h" @@ -41,18 +42,18 @@ class DisparityProcessor : public Processor { const DisparityComputingMethod &MethodType); void NotifyComputingTypeChanged(const DisparityComputingMethod &MethodType); bool ConfigFromFile(const std::string& config); - double GetMinDisparity() { + std::shared_ptr GetMinDisparity() { if (type_ == DisparityComputingMethod::BM) { - return disparity_min_bm; + return disparity_min_bm_ptr; } else { - return disparity_min_sgbm; + return disparity_min_sgbm_ptr; } } - double GetMaxDisparity() { + std::shared_ptr GetMaxDisparity() { if (type_ == DisparityComputingMethod::BM) { - return disparity_max_bm; + return disparity_max_bm_ptr; } else { - return disparity_max_sgbm; + return disparity_max_sgbm_ptr; } } @@ -70,10 +71,10 @@ class DisparityProcessor : public Processor { cv::Ptr bm_matcher; DisparityComputingMethod type_; double cx1_minus_cx2_; - double disparity_min_bm; - double disparity_max_bm; - double disparity_min_sgbm; - double disparity_max_sgbm; + std::shared_ptr disparity_min_bm_ptr; + std::shared_ptr disparity_max_bm_ptr; + std::shared_ptr disparity_min_sgbm_ptr; + std::shared_ptr disparity_max_sgbm_ptr; }; MYNTEYE_END_NAMESPACE diff --git a/src/mynteye/api/synthetic.cc b/src/mynteye/api/synthetic.cc index 23ea307..168be88 100644 --- a/src/mynteye/api/synthetic.cc +++ b/src/mynteye/api/synthetic.cc @@ -330,11 +330,11 @@ void Synthetic::InitProcessors() { rectify_processor = rectify_processor_ocv; points_processor = std::make_shared( rectify_processor_ocv->Q, POINTS_PROC_PERIOD); - depth_processor = std::make_shared(DEPTH_PROC_PERIOD); disparity_processor = std::make_shared(DisparityComputingMethod::BM, nullptr, DISPARITY_PROC_PERIOD); + depth_processor = std::make_shared(DEPTH_PROC_PERIOD); root_processor->AddChild(rectify_processor); rectify_processor->AddChild(disparity_processor); @@ -351,13 +351,16 @@ void Synthetic::InitProcessors() { points_processor = std::make_shared( rectify_processor_imp -> getCameraROSMsgInfoPair(), POINTS_PROC_PERIOD); - depth_processor = std::make_shared( - rectify_processor_imp -> getCameraROSMsgInfoPair(), - DEPTH_PROC_PERIOD); - disparity_processor = + auto disparity_processor_imp = std::make_shared(DisparityComputingMethod::BM, rectify_processor_imp -> getCameraROSMsgInfoPair(), DISPARITY_PROC_PERIOD); + depth_processor = std::make_shared( + rectify_processor_imp -> getCameraROSMsgInfoPair(), + disparity_processor_imp->GetMinDisparity(), + disparity_processor_imp->GetMaxDisparity(), + DEPTH_PROC_PERIOD); + disparity_processor = disparity_processor_imp; root_processor->AddChild(rectify_processor); rectify_processor->AddChild(disparity_processor);