{ "info": { "author": "Thore Goll", "author_email": "thoregoll@googlemail.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Localization" ], "description": "![ShutTUM](https://raw.githubusercontent.com/gollth/ShutTUM/master/Docs/images/logo.png)\n\n[![Build Status](https://travis-ci.org/gollth/ShutTUM.svg?branch=master)](https://travis-ci.org/gollth/ShutTUM) [![PyPI version](https://badge.fury.io/py/ShutTUM.svg)](https://badge.fury.io/py/ShutTUM) [![codecov](https://codecov.io/gh/gollth/ShutTUM/branch/master/graph/badge.svg)](https://codecov.io/gh/gollth/ShutTUM)\n\nA photometrically calibrated multi-shutter stereo dataset for benchmarking visual odometry algorithms.\n\n* 40 Sequences \u2265 10 km of trajectories\n* 2x stereo cameras 20 FPS using both global and rolling shutter\n* Extrinsic, intrinsic and photometric calibration\n* IMU with accelerometer and gyroscope\n* Hardware synchronized cameras and IMU\n* greyscale 1.3 MP images (JPEG)\n* Full 6D ground truth by motion capture system provided at start and end of every sequence\n\n\n## Installation\n```\npip install ShutTUM\n```\n## Examples\n### Python\nA simple example shows the following script. It will load a sequence and show all global images in an OpenCV window\n\n```python\nimport cv2\nfrom ShutTUM.sequence import Sequence\n\n# Load a dataset's sequence\nsequence = Sequence('path/to/folder/01')\n\n# Iterate over all images captured by the global shutter cameras\nfor stereo in sequence.cameras('global'):\n if stereo.L is None: continue\n if stereo.R is None: continue\n \n print(stereo.ID)\n img = stereo.L.load()\n cv2.imshow('Left Image', img)\n cv2.waitKey(int(stereo.dt() * 1000))\n```\nSee full python documentation [here](https://gollth.github.io/ShutTUM/)\n\n\n### Analzyer\n```\npython ShutTUM/Examples/python/analyze.py --help\n```\n\nUse this script to analyze a sequence. It comes with a lot of options (see help). For some aspects ROS (such as ```groundtruth```) is needed.\nYou can:\n* visualize frames\n* print/plot frame drops\n* show IMU values\n* recreate ground truth data\n* interpolate ground truth data to frames\n\n### DSO runner\n```\npython ShutTUM/Examples/python/dsorunner.py --side L --options nogui=0 --shutter global one /path/to/sequence /path/to/results \n```\n\nUse this script to run [DSO](https://github.com/JakobEngel/dso) on one or multiple sequences.\nSee the help options for more info. This script converts the files into the correct format for DSO, \n(in a .temp directory) and copies the results in the end to the desired output. Use ```--debug``` \nswitch to see the converted files.\n\n### ROS\nSource the ShutTUM as a catkin workspace\n```\ngit clone https://github.com/gollth/ShutTUM.git\ncp -r ShutTUM/Examples/ros/src/shuttum ~/catkin_ws/src\nsource ~/catkin_ws/devel/setup.bash\nroscd shuttum\n```\n\n#### Visualize a sequence in RViZ:\n```\nroslaunch shuttum play.launch sequence:=/path/to/sequences/01 \n```\nNow rviz should open and playback the images. This launch file takes the additional arguments:\n* ```loop``` (bool, false) to restart the sequence automatically when it is finsihed\n* ```start```/```end``` (float, 0, inf) from which to which time stamps to play the sequence\n* ```is_calib_seq``` (bool, false) if the sequence is a calibration sequence\n* ```rviz``` (bool, false) should rviz be started?\n\n#### Create a bag file from a sequence:\n```\nroslaunch shuttum bagcreator.launch sequence:=/path/to/sequences/01 bag:=/path/to/result.bag\n```\nThis will playback the sequence and record the data. Note, that buffer size of rosbag record \nis set to zero. When the playback node finishes, do not cancel this launch file immediately!\nWait until ```/path/to/result.bag``` does not grow anymore in size, then CTRL-C.\n* ```rviz``` (bool, false) should rviz be started?\n* ```decimating``` (bool, false) should the images be decimated? Useful for e.g. camera calibration. \n* ```decimation``` (int, 10) If decimating, by which factor should the images be throttled? Topic is ```.../image_raw/decimated```\n* ```start```/```end``` (float, 0, inf) from which to which time stamps to play the sequence\n\n### Camera Calibration\nCalibration with [Kalibr](https://github.com/ethz-asl/kalibr):\n```\nroslaunch shuttum kalibr_cameras.launch bag:=/path/to/result.bag model:=fov\n```\nLaunches camera calibration on the images ```/cam/{global|rolling}/{left|right}/image_raw/decimated```\nin the bag file you provide. The distortion model parameter can be either ```fov```(default), ```radtan```\nor ```equi``` (see [supported formate](https://github.com/ethz-asl/kalibr/wiki/supported-models)). When Kalibr \nfinishes, it will its result files into ```~/.ros/```\n\n### IMU Calibration\n```\nroslaunch stuttum kalibr_imu.launch bag:=/path/to/result.bag lens:=fisheye start:=5 end:=45\n```\nThis launches the [Camera-IMU-Calibration](https://github.com/ethz-asl/kalibr/wiki/camera-imu-calibration)\n* ```lens``` (either ```fisheye``` or ```standard```): The lens used by that sequence\n* ```start```/```end``` (float, 0, 1000): beginning and end offset for picking up of the sequence in seconds\n* ```imu``` (path, ```$(find shuttum)/params/imu.yaml```): custom [IMU configuration file](https://github.com/ethz-asl/kalibr/wiki/yaml-formats)\n* ```target``` (path ```$(find shuttum)/params/aprilA0.yaml\" />```): custom [Grid configureation](https://github.com/ethz-asl/kalibr/wiki/calibration-targets)\n\n### Matlab\nThe matlab interface is very minimalistic and just puts the files in ```data/``` into arrays.\n```\n>> addpath /path/to/ShutTUM/Examples/matlab\n>> help(shuttum)\n>> sequence = shuttum('/path/to/sequences/01')\n \nsequence = \n\n struct with fields:\n\n frames: [5335\u00d74 double]\n imu: [48031\u00d77 double]\n groundtruth: [6812\u00d78 double]\n```\n\n\n## Known Issues\nThe ground truth data and frames/IMU value are not precisely time\nsynchronized. When you run a SLAM or VO algorithm (such as [DSO](https://github.com/JakobEngel/dso))\nyou can use the trajectory to estimate the time shift.\n\nWith the help of the extrinsic calibration in ```data/params.yaml```\nof each sequence you can correlate the odometry with the motion capture\ntrajectory and optimize for a time shift. Note that the ground truth poses\nare in the **marker** frame. Then you can run\n```\npython ShutTUM/Examples/python/analyze.py /path/to/sequences/01 groundtruth extract --time-offset XXX\n```\nwhere _t_new = t_raw + time_offset_\n\nThis will recreate the ```data/ground_truth.csv``` file with the time offset applied.\nThe raw ground truth data file is in ```.logs/XXXXXXXX.bag```\n\n\nSince this API assumes that the four cameras use rolling/global shutter\nthe namespaces are the same. For calibration sequences with four times the same\nshutter, cam1/2 names are set to ```global``` and cam3/4 are set to ```rolling```\nThis is however only a naming convention and does not affect the data in any way.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/gollth/ShutTUM", "keywords": "dataset rolling shutter visual odometry slam", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "ShutTUM", "package_url": "https://pypi.org/project/ShutTUM/", "platform": "", "project_url": "https://pypi.org/project/ShutTUM/", "project_urls": { "Homepage": "https://github.com/gollth/ShutTUM" }, "release_url": "https://pypi.org/project/ShutTUM/1.1/", "requires_dist": null, "requires_python": "", "summary": "A utility API to easily interact with the ShutTUM dataset", "version": "1.1" }, "last_serial": 3608953, "releases": { "0.9": [ { "comment_text": "", "digests": { "md5": "f6f4096452959f55b8f8bb00e6142fe6", "sha256": "6be7d299263e0a08007a7638ee33419897f3be63fc3f13c35ae82fd70a74b921" }, "downloads": -1, "filename": "ShutTUM-0.9.tar.gz", "has_sig": false, "md5_digest": "f6f4096452959f55b8f8bb00e6142fe6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20118, "upload_time": "2018-02-22T13:40:40", "url": "https://files.pythonhosted.org/packages/0f/bc/2cec95723640b5e50494846c23fc17d702e4f2d6a8e860935856284b2fa5/ShutTUM-0.9.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "451ed969b56e99ed16e05b2866675111", "sha256": "4bce332ad693999a01cbe9398f9cea778e322dffd3c7ac4b4393e5f56ea14631" }, "downloads": -1, "filename": "ShutTUM-1.0.tar.gz", "has_sig": false, "md5_digest": "451ed969b56e99ed16e05b2866675111", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20123, "upload_time": "2018-02-22T13:50:58", "url": "https://files.pythonhosted.org/packages/07/70/827aaf5984263088345f8e2d7ba0c43ae3b674a98eb3e997540ae600af44/ShutTUM-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "20aa02ca064285013a0e9a80f9f0141d", "sha256": "b3c33b960a80f67226299d66f1e26f701277595db7b3b628a8556a37199894f1" }, "downloads": -1, "filename": "ShutTUM-1.1.tar.gz", "has_sig": false, "md5_digest": "20aa02ca064285013a0e9a80f9f0141d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19988, "upload_time": "2018-02-23T11:49:48", "url": "https://files.pythonhosted.org/packages/33/86/1d417000d3485d9d6b3e896ec0299fc28c259a4c008406204a5d40f03940/ShutTUM-1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "20aa02ca064285013a0e9a80f9f0141d", "sha256": "b3c33b960a80f67226299d66f1e26f701277595db7b3b628a8556a37199894f1" }, "downloads": -1, "filename": "ShutTUM-1.1.tar.gz", "has_sig": false, "md5_digest": "20aa02ca064285013a0e9a80f9f0141d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19988, "upload_time": "2018-02-23T11:49:48", "url": "https://files.pythonhosted.org/packages/33/86/1d417000d3485d9d6b3e896ec0299fc28c259a4c008406204a5d40f03940/ShutTUM-1.1.tar.gz" } ] }