├── .gitignore ├── LICENSE ├── README.md ├── keypoint_camera_calibration ├── CMakeLists.txt ├── examples │ ├── bagfiles │ │ └── bagfiles.desktop │ ├── camera_extrinsics_reference.yaml │ ├── camera_intrinsics.yaml │ ├── keypoint_correspondences.txt │ ├── map │ │ ├── map.pgm │ │ └── map.yaml │ └── presets │ │ ├── 20cams_pose2D.perspective │ │ └── BagSetup20Cams.rviz ├── launch │ └── calibration.launch ├── msg │ └── Person2DWithID.msg ├── package.xml └── scripts │ └── calibration.py └── person_msgs ├── CMakeLists.txt ├── launch └── pose2D_plot.launch ├── msg ├── .directory ├── Keypoint2D.msg ├── KeypointWithCovariance.msg ├── Person2DOcclusion.msg ├── Person2DOcclusionList.msg ├── PersonCov.msg └── PersonCovList.msg ├── package.xml └── scripts └── pose2D_plot_node.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.bag 2 | logs/ 3 | 4 | # Byte-compiled / optimized / DLL files 5 | __pycache__/ 6 | *.py[cod] 7 | *$py.class 8 | 9 | # C extensions 10 | *.so 11 | 12 | # Distribution / packaging 13 | .Python 14 | build/ 15 | develop-eggs/ 16 | dist/ 17 | downloads/ 18 | eggs/ 19 | .eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | wheels/ 26 | pip-wheel-metadata/ 27 | share/python-wheels/ 28 | *.egg-info/ 29 | .installed.cfg 30 | *.egg 31 | MANIFEST 32 | 33 | # PyInstaller 34 | # Usually these files are written by a python script from a template 35 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 36 | *.manifest 37 | *.spec 38 | 39 | # Installer logs 40 | pip-log.txt 41 | pip-delete-this-directory.txt 42 | 43 | # Unit test / coverage reports 44 | htmlcov/ 45 | .tox/ 46 | .nox/ 47 | .coverage 48 | .coverage.* 49 | .cache 50 | nosetests.xml 51 | coverage.xml 52 | *.cover 53 | *.py,cover 54 | .hypothesis/ 55 | .pytest_cache/ 56 | 57 | # Translations 58 | *.mo 59 | *.pot 60 | 61 | # Django stuff: 62 | *.log 63 | local_settings.py 64 | db.sqlite3 65 | db.sqlite3-journal 66 | 67 | # Flask stuff: 68 | instance/ 69 | .webassets-cache 70 | 71 | # Scrapy stuff: 72 | .scrapy 73 | 74 | # Sphinx documentation 75 | docs/_build/ 76 | 77 | # PyBuilder 78 | target/ 79 | 80 | # Jupyter Notebook 81 | .ipynb_checkpoints 82 | 83 | # IPython 84 | profile_default/ 85 | ipython_config.py 86 | 87 | # pyenv 88 | .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 98 | __pypackages__/ 99 | 100 | # Celery stuff 101 | celerybeat-schedule 102 | celerybeat.pid 103 | 104 | # SageMath parsed files 105 | *.sage.py 106 | 107 | # Environments 108 | .env 109 | .venv 110 | env/ 111 | venv/ 112 | ENV/ 113 | env.bak/ 114 | venv.bak/ 115 | 116 | # Spyder project settings 117 | .spyderproject 118 | .spyproject 119 | 120 | # Rope project settings 121 | .ropeproject 122 | 123 | # mkdocs documentation 124 | /site 125 | 126 | # mypy 127 | .mypy_cache/ 128 | .dmypy.json 129 | dmypy.json 130 | 131 | # Pyre type checker 132 | .pyre/ 133 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2022, AIS Bonn 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | *Online Marker-free Extrinsic Camera Calibration using Person Keypoint Detections* 2 | 3 | https://user-images.githubusercontent.com/109513136/188647343-c289a007-dbff-44d4-a7c9-b5b39c992892.mp4 4 | 5 | This ROS-package provides extrinsic calibration for a static [camera network](https://github.com/AIS-Bonn/SmartEdgeSensor3DHumanPose) providing person keypoint detections.
6 | We assume the intrinsic calibration and a rough estimate of the extrinsic calibration to be available. 7 | 8 | ## Installation 9 | 10 | ### Dependencies 11 | 12 | The package was tested with ROS melodic and Ubuntu 18.04, as well as ROS noetic and Ubuntu 20.04. 13 | 14 | The former requires the [geometry2](https://github.com/ros/geometry2) and [cv_bridge](https://github.com/ros-perception/vision_opencv) packages to be placed in the `catkin_ws/src` folder.
15 | Both packages must be built with Python3 support, e.g. using 16 | ```bash 17 | catkin_make -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so 18 | ``` 19 | 20 | The received person keypoint detections must be encoded using the [person_msgs](person_msgs/msg) package with the default joint order being defined [here](keypoint_camera_calibration/examples/keypoint_correspondences.txt). 21 | Place the `person_msgs` package it in your `catkin_ws/src` folder and build it via `catkin_make` or `catkin_build person_msgs`. 22 | 23 | The factor graph optimization is implemented using the [GTSAM library](https://github.com/borglab/gtsam),
24 | which can be installed by `pip install gtsam==4.1.1`. 25 | 26 | For additional standard-dependencies, see [calibration.py](keypoint_camera_calibration/scripts/calibration.py). 27 | 28 | ### Build 29 | 30 | Place the `keypoint_camera_calibration` package in your `catkin_ws/src` folder.
31 | Navigate to your `catkin_ws` and run `catkin_make` or `catkin_build keypoint_camera_calibration`,
32 | depending on your build system. 33 | 34 | ### Demo 35 | 36 | The [examples](keypoint_camera_calibration/examples) folder contains calibration files for the presented camera network.
37 | The initial estimate of the extrinsic calibration gets generated automatically by retracting the reference calibration.
38 | The corresponding calibration and evaluation bagfiles can be found [here](https://cloud.vi.cs.uni-bonn.de/index.php/s/F8DqX7sFCHaodBN).
39 | All parameters are preset for this scenario.
40 | 41 | Simply start the calibration pipeline by 42 | ```bash 43 | rosrun keypoint_camera_calibration calibration.py 44 | ``` 45 | Play one of the provided bagfiles to start calibration 46 | ```bash 47 | rosbag play $(rospack find keypoint_camera_calibration)/examples/bagfiles/2022-05-26_calib_2persons_3min.bag 48 | ``` 49 | 50 | Results will be placed in the `logs` folder.
51 | Visualization presets for `rqt` and `rviz` are [provided](keypoint_camera_calibration/examples/presets). 52 | 53 | ### General Usage 54 | 55 | Provide `.yaml` files following the syntax established in the [example files](keypoint_camera_calibration/examples): 56 | * Intrinsic calibration 57 | * Estimated extrinsic calibration 58 | * Reference extrinsic calibration (optional) 59 | 60 | Edit the required parameters in the `__init__` function of [calibration.py](keypoint_camera_calibration/scripts/calibration.py) to match your scenario: 61 | * File locations 62 | * Message properties 63 | * Method parameters 64 | 65 | Start calibration by 66 | ```bash 67 | rosrun keypoint_camera_calibration calibration.py 68 | ``` 69 | Provide `person_msgs` by playing a bagfile or accessing a sensor network. 70 | 71 | ## Citation 72 | 73 | Bastian Pätzold, Simon Bultmann, and Sven Behnke:
74 | *Online Marker-free Extrinsic Camera Calibration using Person Keypoint Detections*.
75 | DAGM German Conference on Pattern Recognition (GCPR), Konstanz, September 2022. 76 | 77 | ## License 78 | 79 | This package is licensed under BSD-3. 80 | -------------------------------------------------------------------------------- /keypoint_camera_calibration/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(keypoint_camera_calibration) 3 | 4 | find_package(catkin REQUIRED COMPONENTS 5 | rospy 6 | std_msgs 7 | geometry_msgs 8 | message_generation 9 | person_msgs 10 | ) 11 | 12 | add_message_files( 13 | FILES 14 | Person2DWithID.msg 15 | ) 16 | 17 | generate_messages( 18 | DEPENDENCIES 19 | person_msgs 20 | ) 21 | 22 | include_directories( 23 | ${catkin_INCLUDE_DIRS} 24 | ) -------------------------------------------------------------------------------- /keypoint_camera_calibration/examples/bagfiles/bagfiles.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Icon=text-html 3 | Type=Link 4 | URL[$e]=https://cloud.vi.cs.uni-bonn.de/index.php/s/F8DqX7sFCHaodBN 5 | -------------------------------------------------------------------------------- /keypoint_camera_calibration/examples/camera_extrinsics_reference.yaml: -------------------------------------------------------------------------------- 1 | cam_0: 2 | topic: /d455_1/human_joints 3 | origin: /d455_1/human_joints 4 | resolution: [848, 480] 5 | name: cam_0 6 | translation: [0.0, 0.0, 0.0] 7 | rotation: [0.0, 0.0, 0.0, 1.0] 8 | cam_1: 9 | topic: /d455_2/human_joints 10 | origin: /d455_1/human_joints 11 | resolution: [848, 480] 12 | name: cam_1 13 | translation: [0.2834353073328207, -0.1222786838223135, -0.2264765244232289] 14 | rotation: [-0.03353058004897913, 0.5528055214209624, -0.3660065050570075, 0.7478776597439118] 15 | cam_2: 16 | topic: /d455_3/human_joints 17 | origin: /d455_1/human_joints 18 | resolution: [848, 480] 19 | name: cam_2 20 | translation: [3.509796864476866, 1.914727259815507, 2.927066384549645] 21 | rotation: [-0.04401799340671386, 0.8428211519650275, -0.5348387261199297, -0.04077326451489263] 22 | cam_3: 23 | topic: /d455_4/human_joints 24 | origin: /d455_1/human_joints 25 | resolution: [848, 480] 26 | name: cam_3 27 | translation: [3.215131209946884, 2.06477541626072, 3.157328136437355] 28 | rotation: [-0.002772574902698409, -0.6534891842037062, 0.4208135305246867, 0.6291741980441892] 29 | cam_4: 30 | topic: /cam_1/human_joints 31 | origin: /d455_1/human_joints 32 | resolution: [640, 480] 33 | name: cam_4 34 | translation: [5.515870782008931, 1.376893199239597, 1.956195456568226] 35 | rotation: [0.03850233618903726, 0.03941817476193987, 0.9964175039670421, 0.06415555622493883] 36 | cam_5: 37 | topic: /cam_2/human_joints 38 | origin: /d455_1/human_joints 39 | resolution: [640, 480] 40 | name: cam_5 41 | translation: [10.66947291976801, 4.620534330825857, 6.990074170079641] 42 | rotation: [-0.6224520067975408, 0.0201916480737846, 0.6766799117013393, -0.3927468569978336] 43 | cam_6: 44 | topic: /cam_3/human_joints 45 | origin: /d455_1/human_joints 46 | resolution: [640, 480] 47 | name: cam_6 48 | translation: [7.420962299914716, 6.195373041083011, 9.470273443637305] 49 | rotation: [0.8344478480184523, 0.03481339507257931, -0.06120114162181546, 0.5465704316235408] 50 | cam_7: 51 | topic: /cam_4/human_joints 52 | origin: /d455_1/human_joints 53 | resolution: [640, 480] 54 | name: cam_7 55 | translation: [3.572269527708912, 2.283826925976245, 3.464409571707976] 56 | rotation: [0.2504756946550003, 0.03041487215338267, 0.9577263002883232, 0.1381926035469009] 57 | cam_8: 58 | topic: /cam_13/human_joints 59 | origin: /d455_1/human_joints 60 | resolution: [640, 480] 61 | name: cam_8 62 | translation: [3.568768665565281, 3.932046214166141, 6.140430908707023] 63 | rotation: [0.7791515996262636, -0.01952783108005969, -0.418823875993503, 0.4659699663186271] 64 | cam_9: 65 | topic: /cam_16/human_joints 66 | origin: /d455_1/human_joints 67 | resolution: [640, 480] 68 | name: cam_9 69 | translation: [-0.5424966590138318, 5.890452613853372, 9.069821406535251] 70 | rotation: [0.8575514008234536, 0.01488800646059329, 0.01013745658906229, 0.5140828475872182] 71 | cam_10: 72 | topic: /cam_15/human_joints 73 | origin: /d455_1/human_joints 74 | resolution: [640, 480] 75 | name: cam_10 76 | translation: [-5.545151713023641, 2.416155223405553, 3.835782549417103] 77 | rotation: [0.6680502848054739, 0.001440087130305829, 0.6309802760453599, 0.3944244342864943] 78 | cam_11: 79 | topic: /cam_14/human_joints 80 | origin: /d455_1/human_joints 81 | resolution: [640, 480] 82 | name: cam_11 83 | translation: [-5.800897184827538, 2.239885219036906, 3.666698867185609] 84 | rotation: [0.8644821014925915, 0.001163587740254094, 0.05947471128768775, 0.499131346420835] 85 | cam_12: 86 | topic: /cam_12/human_joints 87 | origin: /d455_1/human_joints 88 | resolution: [640, 480] 89 | name: cam_12 90 | translation: [-0.1904568914944194, -0.06107104247437647, -0.1563855106502606] 91 | rotation: [-0.5585098467599422, -0.008635446637547053, 0.765194743966941, -0.3201080816521823] 92 | cam_13: 93 | topic: /cam_11/human_joints 94 | origin: /d455_1/human_joints 95 | resolution: [640, 480] 96 | name: cam_13 97 | translation: [-10.97147101772297, -0.7294752783872021, -0.8409540569036373] 98 | rotation: [0.6173976763358368, 0.05007395432354361, 0.6998945121652428, 0.3556126828371446] 99 | cam_14: 100 | topic: /cam_9/human_joints 101 | origin: /d455_1/human_joints 102 | resolution: [640, 480] 103 | name: cam_14 104 | translation: [-7.03414088592396, -2.696717811392612, -4.36842969467999] 105 | rotation: [0.2658480039032022, 0.01288602171306599, 0.9520290893847161, 0.1509947092798572] 106 | cam_15: 107 | topic: /cam_10/human_joints 108 | origin: /d455_1/human_joints 109 | resolution: [640, 480] 110 | name: cam_15 111 | translation: [-0.7743764821029826, -5.33950527425691, -8.383713183119808] 112 | rotation: [-0.08193355800642659, 0.07133808375266747, 0.9908936883493191, -0.07954538496037848] 113 | cam_16: 114 | topic: /cam_6/human_joints 115 | origin: /d455_1/human_joints 116 | resolution: [640, 480] 117 | name: cam_16 118 | translation: [3.849533289553271, -2.132170275539655, -3.385211309621047] 119 | rotation: [0.7149407437878599, -0.04701698603935511, -0.5673125493207297, 0.4059625688153903] 120 | cam_17: 121 | topic: /cam_7/human_joints 122 | origin: /d455_1/human_joints 123 | resolution: [640, 480] 124 | name: cam_17 125 | translation: [-0.244037941895484, -0.2321992172368586, -0.432501134846506] 126 | rotation: [0.8742608972026913, 0.01120249691814401, -0.05781106944082863, 0.4818716301416529] 127 | cam_18: 128 | topic: /cam_5/human_joints 129 | origin: /d455_1/human_joints 130 | resolution: [640, 480] 131 | name: cam_18 132 | translation: [3.900875434983535, -2.023985373902256, -3.217603055742007] 133 | rotation: [-0.1520269130698463, 0.05642612422734052, 0.9814823425966183, -0.1019623527500138] 134 | cam_19: 135 | topic: /cam_8/human_joints 136 | origin: /d455_1/human_joints 137 | resolution: [640, 480] 138 | name: cam_19 139 | translation: [7.631903954161081, 0.08165394227928502, -0.1888938983895231] 140 | rotation: [-0.6006688624013831, 0.02684004680772444, 0.7107783279378288, -0.3650625948558064] 141 | -------------------------------------------------------------------------------- /keypoint_camera_calibration/examples/camera_intrinsics.yaml: -------------------------------------------------------------------------------- 1 | cam_0: 2 | distortion_coeffs: [-0.05392450839281082, 0.06310062110424042, 0.0002057167439488694, -0.0007234407821670175, -0.020201271399855614] 3 | intrinsics: [641.5533007570958, 642.4289784895032, 640.0826340113257, 368.7049540693508] 4 | resolution: [1280, 720] 5 | rostopic: /d455_1/color/image_raw/compressed 6 | cam_1: 7 | distortion_coeffs: [-0.054798975586891174, 0.06263770908117294, -0.00035302224569022655, 0.00017488158482592553, -0.020048318430781364] 8 | intrinsics: [641.8893407403434, 641.754063724333, 633.9684316297931, 373.71203740786024] 9 | resolution: [1280, 720] 10 | rostopic: /d455_2/color/image_raw/compressed 11 | cam_2: 12 | distortion_coeffs: [-0.057706087827682495, 0.06731850653886795, 0.00017845994443632662, -0.0014218294527381659, -0.021553505212068558] 13 | intrinsics: [630.0452604462978, 631.8355047720516, 642.2639645688105, 365.6648782834226] 14 | resolution: [1280, 720] 15 | rostopic: /d455_3/color/image_raw/compressed 16 | cam_3: 17 | distortion_coeffs: [-0.058109402656555176, 0.06850837916135788, -0.0002961070858873427, -0.00036302904481999576, -0.021831490099430084] 18 | intrinsics: [633.9383936032439, 634.7992612130865, 643.9801028139017, 348.10140684609945] 19 | resolution: [1280, 720] 20 | rostopic: /d455_4/color/image_raw/compressed 21 | cam_4: 22 | distortion_coeffs: [0.06175448858183619, -0.11269346266503855, 0.0009746068116778726, 0.0010371047525683783] 23 | intrinsics: [1799.5837070970213, 1801.6304257132629, 1300.803178124163, 993.2320055250149] 24 | resolution: [2592, 1944] 25 | rostopic: /cam__1/color/image_orig/compressed 26 | cam_5: 27 | distortion_coeffs: [0.04728159554484199, -0.08160646003250392, 0.00014726347280366242, -0.001553107892908748] 28 | intrinsics: [1794.6400993521859, 1798.3656974236367, 1294.4538024797882, 970.9338456323148] 29 | resolution: [2592, 1944] 30 | rostopic: /cam__2/color/image_orig/compressed 31 | cam_6: 32 | distortion_coeffs: [0.029516840559454322, -0.042807483790423755, 2.3148169476912148e-05, -0.0013285650901364127] 33 | intrinsics: [1806.9274342145104, 1806.9598753401642, 1295.6664410670908, 973.0613044198233] 34 | resolution: [2592, 1944] 35 | rostopic: /cam__3/color/image_orig/compressed 36 | cam_7: 37 | distortion_coeffs: [0.03910839839763055, -0.06158033638928008, -0.000989436754836309, 0.0007722332571330718] 38 | intrinsics: [1804.8559480111203, 1802.6952812862467, 1289.0490466769406, 982.616461623233] 39 | resolution: [2592, 1944] 40 | rostopic: /cam__4/color/image_orig/compressed 41 | cam_8: 42 | distortion_coeffs: [0.05001379886307333, -0.08130418931991229, -0.00038383153518212925, 0.002759175573823184] 43 | intrinsics: [1797.499564172287, 1799.8033041270996, 1231.6744668338288, 960.0781326574426] 44 | resolution: [2592, 1944] 45 | rostopic: /cam__13/color/image_orig/compressed 46 | cam_9: 47 | distortion_coeffs: [0.06658597038868587, -0.10701758995836971, 0.0031614258003222575, -0.00231217277791811] 48 | intrinsics: [1785.771795785239, 1792.946881316118, 1271.5873065475232, 979.1157062154439] 49 | resolution: [2592, 1944] 50 | rostopic: /cam__16/color/image_orig/compressed 51 | cam_10: 52 | distortion_coeffs: [0.03670715561656947, -0.05208425123425506, 0.00041215421871556625, -0.00044922660477431174] 53 | intrinsics: [1798.202758114688, 1798.148812536189, 1260.8367333280776, 983.1729921561991] 54 | resolution: [2592, 1944] 55 | rostopic: /cam__15/color/image_orig/compressed 56 | cam_11: 57 | distortion_coeffs: [0.01855225697212685, -0.03011163348244672, -0.00012329977151926617, -0.0031237956441876906] 58 | intrinsics: [1812.2958681274022, 1814.6710409835898, 1300.969574642763, 981.2698719675451] 59 | resolution: [2592, 1944] 60 | rostopic: /cam__14/color/image_orig/compressed 61 | cam_12: 62 | distortion_coeffs: [-0.0007743812759219125, -0.005863446377499414, 0.002510345113354754, 0.0007515263493680567] 63 | intrinsics: [1803.3605840826165, 1812.2726425203148, 1237.3702966002077, 1020.5984625395898] 64 | resolution: [2592, 1944] 65 | rostopic: /cam__12/color/image_orig/compressed 66 | cam_13: 67 | distortion_coeffs: [0.1311924799941435, -0.18084253138663445, 0.007038988759330809, 0.0008969146990800767] 68 | intrinsics: [1781.8110866936797, 1792.3388528847854, 1286.232138659741, 957.3516420927826] 69 | resolution: [2592, 1944] 70 | rostopic: /cam__11/color/image_orig/compressed 71 | cam_14: 72 | distortion_coeffs: [0.039165132270106574, -0.05126874962219761, 0.0005098066391227203, -0.0017441342780304594] 73 | intrinsics: [1802.586231679387, 1805.330630875443, 1302.3430538774471, 980.2853471879642] 74 | resolution: [2592, 1944] 75 | rostopic: /cam__9/color/image_orig/compressed 76 | cam_15: 77 | distortion_coeffs: [0.03414446320633648, -0.05722480260850316, -0.0010523459808167246, 0.00015346165872181256] 78 | intrinsics: [1801.2616354661166, 1802.3725498699532, 1286.4976910559615, 989.3410246068854] 79 | resolution: [2592, 1944] 80 | rostopic: /cam__10/color/image_orig/compressed 81 | cam_16: 82 | distortion_coeffs: [0.02132224677000724, -0.04023133055760639, 0.0007285661329296166, -0.0005738865549391795] 83 | intrinsics: [1795.3307584460265, 1799.3277608544104, 1259.7146001558126, 984.1020274793246] 84 | resolution: [2592, 1944] 85 | rostopic: /cam__6/color/image_orig/compressed 86 | cam_17: 87 | distortion_coeffs: [0.04765135019473293, -0.07316233721793754, 0.0012061603099629101, -0.0013870323665664415] 88 | intrinsics: [1802.5292433798118, 1804.5306913882841, 1301.404349872036, 964.407526241498] 89 | resolution: [2592, 1944] 90 | rostopic: /cam__7/color/image_orig/compressed 91 | cam_18: 92 | distortion_coeffs: [0.036702078843599745, -0.05994202916439742, 1.99249423424272e-05, 0.0029037908189998535] 93 | intrinsics: [1797.7744239727363, 1800.3949269734387, 1227.10142643681, 1000.1243198694712] 94 | resolution: [2592, 1944] 95 | rostopic: /cam__5/color/image_orig/compressed 96 | cam_19: 97 | distortion_coeffs: [0.028358244851158978, -0.05346218478552621, -0.0009725588311608304, -0.000975235481995784] 98 | intrinsics: [1805.6228947004188, 1805.7281041302278, 1244.2691024837545, 994.7404909648284] 99 | resolution: [2592, 1944] 100 | rostopic: /cam__8/color/image_orig/compressed -------------------------------------------------------------------------------- /keypoint_camera_calibration/examples/keypoint_correspondences.txt: -------------------------------------------------------------------------------- 1 | 2D: #COCO #Mapping 2 | 0: nose 0 3 | 1: l_eye 16 4 | 2: r_eye 15 5 | 3: l_ear 18 6 | 4: r_ear 17 7 | 5: l_shoulder 5 8 | 6: r_shoulder 2 9 | 7: l_elbow 6 10 | 8: r_elbow 3 11 | 9: l_wrist 7 12 | 10: r_wrist 4 13 | 11: l_hip 12 14 | 12: r_hip 9 15 | 13: l_knee 13 16 | 14: r_knee 10 17 | 15: l_ankle 14 18 | 16: r_ankle 11 19 | 20 | 21 | 3D: # COCO / H3.6M 22 | 0: nose 23 | 1: neck # avg. between shoulders 24 | 2: r_Shoulder 25 | 3: r_elbow 26 | 4: r_wrist 27 | 5: l_shoulder 28 | 6: l_elbow 29 | 7: l_wrist 30 | 8: midHip # avg. between hips 31 | 9: r_hip 32 | 10: r_knee 33 | 11: r_ankle 34 | 12: l_hip 35 | 13: l_knee 36 | 14: l_ankle 37 | 15: r_eye 38 | 16: l_eye 39 | 17: r_ear 40 | 18: l_ear 41 | 19: head # not used 42 | 20: belly # not used -------------------------------------------------------------------------------- /keypoint_camera_calibration/examples/map/map.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AIS-Bonn/ExtrCamCalib_PersonKeypoints/babd00cb7f45e9366391d4fb8261294a67663a55/keypoint_camera_calibration/examples/map/map.pgm -------------------------------------------------------------------------------- /keypoint_camera_calibration/examples/map/map.yaml: -------------------------------------------------------------------------------- 1 | image: map.pgm 2 | resolution: 0.050000 3 | origin: [0.000000, 0.000000, 0.000000] 4 | negate: 0 5 | occupied_thresh: 0.65 6 | free_thresh: 0.196 7 | 8 | -------------------------------------------------------------------------------- /keypoint_camera_calibration/examples/presets/20cams_pose2D.perspective: -------------------------------------------------------------------------------- 1 | { 2 | "keys": {}, 3 | "groups": { 4 | "mainwindow": { 5 | "keys": { 6 | "geometry": { 7 | "repr(QByteArray.hex)": "QtCore.QByteArray(b'01d9d0cb000300000000000000000000000009ff0000057b0000000000000018000009ff0000057b00000000000000000a000000000000000018000009ff0000057b')", 8 | "type": "repr(QByteArray.hex)", 9 | "pretty-print": " { { {" 10 | }, 11 | "state": { 12 | "repr(QByteArray.hex)": "QtCore.QByteArray(b'000000ff00000000fd000000010000000300000a000000052ffc0100000006fb000000460072006f0073006a00610063006b005f00750069005f005f004d007900200050006c007500670069006e005f005f0031005f005f0041007500640069006f005f0047005500490100000000000002ab0000000000000000fc00000000000001a4000000dd00fffffffc0200000004fb0000005a007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f0031005f005f0049006d0061006700650056006900650077005700690064006700650074010000001e0000014c0000005601000003fb0000005a007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f0036005f005f0049006d0061006700650056006900650077005700690064006700650074010000016b0000014b0000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00310031005f005f0049006d006100670065005600690065007700570069006400670065007401000002b7000001490000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00310036005f005f0049006d006100670065005600690065007700570069006400670065007401000004010000014c0000005601000003fc000001a50000019d000000dd00fffffffc0200000004fb0000005a007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f0032005f005f0049006d0061006700650056006900650077005700690064006700650074010000001e0000014c0000005601000003fb0000005a007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f0037005f005f0049006d0061006700650056006900650077005700690064006700650074010000016b0000014c0000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00310032005f005f0049006d006100670065005600690065007700570069006400670065007401000002b8000001480000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00310037005f005f0049006d006100670065005600690065007700570069006400670065007401000004010000014c0000005601000003fc00000343000001a0000000dd00fffffffc0200000004fb0000005a007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f0033005f005f0049006d0061006700650056006900650077005700690064006700650074010000001e0000014c0000005601000003fb0000005a007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f0038005f005f0049006d0061006700650056006900650077005700690064006700650074010000016b0000014c0000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00310033005f005f0049006d006100670065005600690065007700570069006400670065007401000002b8000001480000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00310038005f005f0049006d006100670065005600690065007700570069006400670065007401000004010000014c0000005601000003fc000004e4000001a0000000dd00fffffffc0200000004fb0000005a007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f0034005f005f0049006d0061006700650056006900650077005700690064006700650074010000001e0000014d0000005601000003fb0000005a007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f0039005f005f0049006d0061006700650056006900650077005700690064006700650074010000016c0000014b0000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00310034005f005f0049006d006100670065005600690065007700570069006400670065007401000002b8000001480000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00310039005f005f0049006d006100670065005600690065007700570069006400670065007401000004010000014c0000005601000003fc000006850000037b000000dd00fffffffc0200000004fb0000005a007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f0035005f005f0049006d0061006700650056006900650077005700690064006700650074010000001e0000014e0000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00310030005f005f0049006d0061006700650056006900650077005700690064006700650074010000016d0000014b0000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00310035005f005f0049006d006100670065005600690065007700570069006400670065007401000002b9000001470000005601000003fb0000005c007200710074005f0069006d006100670065005f0076006900650077005f005f0049006d0061006700650056006900650077005f005f00320030005f005f0049006d006100670065005600690065007700570069006400670065007401000004010000014c000000560100000300000a000000000000000004000000040000000800000008fc00000001000000030000000100000036004d0069006e0069006d0069007a006500640044006f0063006b00570069006400670065007400730054006f006f006c0062006100720000000000ffffffff0000000000000000')", 13 | "type": "repr(QByteArray.hex)", 14 | "pretty-print": " Frosjack_ui__My Plugin__1__Audio_GUI L V k K V I V L V Zrqt_image_view__ImageView__2__ImageViewWidget Zrqt_image_view__ImageView__7__ImageViewWidget \\rqt_image_view__ImageView__12__ImageViewWidget \\rqt_image_view__ImageView__17__ImageViewWidget C L V k L V H V L V Zrqt_image_view__ImageView__4__ImageViewWidget Zrqt_image_view__ImageView__9__ImageViewWidget \\rqt_image_view__ImageView__14__ImageViewWidget \\rqt_image_view__ImageView__19__ImageViewWidget { N V m K V G V L V " 15 | } 16 | }, 17 | "groups": { 18 | "toolbar_areas": { 19 | "keys": { 20 | "MinimizedDockWidgetsToolbar": { 21 | "repr": "8", 22 | "type": "repr" 23 | } 24 | }, 25 | "groups": {} 26 | } 27 | } 28 | }, 29 | "pluginmanager": { 30 | "keys": { 31 | "running-plugins": { 32 | "repr": "{'rqt_image_view/ImageView': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]}", 33 | "type": "repr" 34 | } 35 | }, 36 | "groups": { 37 | "plugin__rosjack_ui__My Plugin__1": { 38 | "keys": {}, 39 | "groups": { 40 | "dock_widget__Audio_GUI": { 41 | "keys": { 42 | "dock_widget_title": { 43 | "repr": "' Avatar Audio'", 44 | "type": "repr" 45 | }, 46 | "dockable": { 47 | "repr": "'true'", 48 | "type": "repr" 49 | }, 50 | "parent": { 51 | "repr": "None", 52 | "type": "repr" 53 | } 54 | }, 55 | "groups": {} 56 | } 57 | } 58 | }, 59 | "plugin__rqt_image_view__ImageView__1": { 60 | "keys": {}, 61 | "groups": { 62 | "dock_widget__ImageViewWidget": { 63 | "keys": { 64 | "dock_widget_title": { 65 | "repr": "'Image View'", 66 | "type": "repr" 67 | }, 68 | "dockable": { 69 | "repr": "True", 70 | "type": "repr" 71 | }, 72 | "parent": { 73 | "repr": "None", 74 | "type": "repr" 75 | } 76 | }, 77 | "groups": {} 78 | }, 79 | "plugin": { 80 | "keys": { 81 | "dynamic_range": { 82 | "repr": "False", 83 | "type": "repr" 84 | }, 85 | "max_range": { 86 | "repr": "10.0", 87 | "type": "repr" 88 | }, 89 | "mouse_pub_topic": { 90 | "repr": "'/cam_1/color/image_overlay_mouse_left'", 91 | "type": "repr" 92 | }, 93 | "num_gridlines": { 94 | "repr": "0", 95 | "type": "repr" 96 | }, 97 | "publish_click_location": { 98 | "repr": "False", 99 | "type": "repr" 100 | }, 101 | "rotate": { 102 | "repr": "0", 103 | "type": "repr" 104 | }, 105 | "smooth_image": { 106 | "repr": "False", 107 | "type": "repr" 108 | }, 109 | "toolbar_hidden": { 110 | "repr": "True", 111 | "type": "repr" 112 | }, 113 | "topic": { 114 | "repr": "'/cam_1/color/image_overlay'", 115 | "type": "repr" 116 | }, 117 | "zoom1": { 118 | "repr": "False", 119 | "type": "repr" 120 | } 121 | }, 122 | "groups": {} 123 | } 124 | } 125 | }, 126 | "plugin__rqt_image_view__ImageView__10": { 127 | "keys": {}, 128 | "groups": { 129 | "dock_widget__ImageViewWidget": { 130 | "keys": { 131 | "dock_widget_title": { 132 | "repr": "'Image View (10)'", 133 | "type": "repr" 134 | }, 135 | "dockable": { 136 | "repr": "True", 137 | "type": "repr" 138 | }, 139 | "parent": { 140 | "repr": "None", 141 | "type": "repr" 142 | } 143 | }, 144 | "groups": {} 145 | }, 146 | "plugin": { 147 | "keys": { 148 | "dynamic_range": { 149 | "repr": "False", 150 | "type": "repr" 151 | }, 152 | "max_range": { 153 | "repr": "10.0", 154 | "type": "repr" 155 | }, 156 | "mouse_pub_topic": { 157 | "repr": "'/d455_2/color/image_overlay_mouse_left'", 158 | "type": "repr" 159 | }, 160 | "num_gridlines": { 161 | "repr": "0", 162 | "type": "repr" 163 | }, 164 | "publish_click_location": { 165 | "repr": "False", 166 | "type": "repr" 167 | }, 168 | "rotate": { 169 | "repr": "0", 170 | "type": "repr" 171 | }, 172 | "smooth_image": { 173 | "repr": "False", 174 | "type": "repr" 175 | }, 176 | "toolbar_hidden": { 177 | "repr": "True", 178 | "type": "repr" 179 | }, 180 | "topic": { 181 | "repr": "'/d455_2/color/image_overlay'", 182 | "type": "repr" 183 | }, 184 | "zoom1": { 185 | "repr": "False", 186 | "type": "repr" 187 | } 188 | }, 189 | "groups": {} 190 | } 191 | } 192 | }, 193 | "plugin__rqt_image_view__ImageView__11": { 194 | "keys": {}, 195 | "groups": { 196 | "dock_widget__ImageViewWidget": { 197 | "keys": { 198 | "dock_widget_title": { 199 | "repr": "'Image View (11)'", 200 | "type": "repr" 201 | }, 202 | "dockable": { 203 | "repr": "True", 204 | "type": "repr" 205 | }, 206 | "parent": { 207 | "repr": "None", 208 | "type": "repr" 209 | } 210 | }, 211 | "groups": {} 212 | }, 213 | "plugin": { 214 | "keys": { 215 | "dynamic_range": { 216 | "repr": "False", 217 | "type": "repr" 218 | }, 219 | "max_range": { 220 | "repr": "10.0", 221 | "type": "repr" 222 | }, 223 | "mouse_pub_topic": { 224 | "repr": "'/cam_9/color/image_overlay_mouse_left'", 225 | "type": "repr" 226 | }, 227 | "num_gridlines": { 228 | "repr": "0", 229 | "type": "repr" 230 | }, 231 | "publish_click_location": { 232 | "repr": "False", 233 | "type": "repr" 234 | }, 235 | "rotate": { 236 | "repr": "0", 237 | "type": "repr" 238 | }, 239 | "smooth_image": { 240 | "repr": "False", 241 | "type": "repr" 242 | }, 243 | "toolbar_hidden": { 244 | "repr": "True", 245 | "type": "repr" 246 | }, 247 | "topic": { 248 | "repr": "'/cam_9/color/image_overlay'", 249 | "type": "repr" 250 | }, 251 | "zoom1": { 252 | "repr": "False", 253 | "type": "repr" 254 | } 255 | }, 256 | "groups": {} 257 | } 258 | } 259 | }, 260 | "plugin__rqt_image_view__ImageView__12": { 261 | "keys": {}, 262 | "groups": { 263 | "dock_widget__ImageViewWidget": { 264 | "keys": { 265 | "dock_widget_title": { 266 | "repr": "'Image View (12)'", 267 | "type": "repr" 268 | }, 269 | "dockable": { 270 | "repr": "True", 271 | "type": "repr" 272 | }, 273 | "parent": { 274 | "repr": "None", 275 | "type": "repr" 276 | } 277 | }, 278 | "groups": {} 279 | }, 280 | "plugin": { 281 | "keys": { 282 | "dynamic_range": { 283 | "repr": "False", 284 | "type": "repr" 285 | }, 286 | "max_range": { 287 | "repr": "10.0", 288 | "type": "repr" 289 | }, 290 | "mouse_pub_topic": { 291 | "repr": "'/cam_10/color/image_overlay_mouse_left'", 292 | "type": "repr" 293 | }, 294 | "num_gridlines": { 295 | "repr": "0", 296 | "type": "repr" 297 | }, 298 | "publish_click_location": { 299 | "repr": "False", 300 | "type": "repr" 301 | }, 302 | "rotate": { 303 | "repr": "0", 304 | "type": "repr" 305 | }, 306 | "smooth_image": { 307 | "repr": "False", 308 | "type": "repr" 309 | }, 310 | "toolbar_hidden": { 311 | "repr": "True", 312 | "type": "repr" 313 | }, 314 | "topic": { 315 | "repr": "'/cam_10/color/image_overlay'", 316 | "type": "repr" 317 | }, 318 | "zoom1": { 319 | "repr": "False", 320 | "type": "repr" 321 | } 322 | }, 323 | "groups": {} 324 | } 325 | } 326 | }, 327 | "plugin__rqt_image_view__ImageView__13": { 328 | "keys": {}, 329 | "groups": { 330 | "dock_widget__ImageViewWidget": { 331 | "keys": { 332 | "dock_widget_title": { 333 | "repr": "'Image View (13)'", 334 | "type": "repr" 335 | }, 336 | "dockable": { 337 | "repr": "True", 338 | "type": "repr" 339 | }, 340 | "parent": { 341 | "repr": "None", 342 | "type": "repr" 343 | } 344 | }, 345 | "groups": {} 346 | }, 347 | "plugin": { 348 | "keys": { 349 | "dynamic_range": { 350 | "repr": "False", 351 | "type": "repr" 352 | }, 353 | "max_range": { 354 | "repr": "10.0", 355 | "type": "repr" 356 | }, 357 | "mouse_pub_topic": { 358 | "repr": "'/cam_11/color/image_overlay_mouse_left'", 359 | "type": "repr" 360 | }, 361 | "num_gridlines": { 362 | "repr": "0", 363 | "type": "repr" 364 | }, 365 | "publish_click_location": { 366 | "repr": "False", 367 | "type": "repr" 368 | }, 369 | "rotate": { 370 | "repr": "0", 371 | "type": "repr" 372 | }, 373 | "smooth_image": { 374 | "repr": "False", 375 | "type": "repr" 376 | }, 377 | "toolbar_hidden": { 378 | "repr": "True", 379 | "type": "repr" 380 | }, 381 | "topic": { 382 | "repr": "'/cam_11/color/image_overlay'", 383 | "type": "repr" 384 | }, 385 | "zoom1": { 386 | "repr": "False", 387 | "type": "repr" 388 | } 389 | }, 390 | "groups": {} 391 | } 392 | } 393 | }, 394 | "plugin__rqt_image_view__ImageView__14": { 395 | "keys": {}, 396 | "groups": { 397 | "dock_widget__ImageViewWidget": { 398 | "keys": { 399 | "dock_widget_title": { 400 | "repr": "'Image View (14)'", 401 | "type": "repr" 402 | }, 403 | "dockable": { 404 | "repr": "True", 405 | "type": "repr" 406 | }, 407 | "parent": { 408 | "repr": "None", 409 | "type": "repr" 410 | } 411 | }, 412 | "groups": {} 413 | }, 414 | "plugin": { 415 | "keys": { 416 | "dynamic_range": { 417 | "repr": "False", 418 | "type": "repr" 419 | }, 420 | "max_range": { 421 | "repr": "10.0", 422 | "type": "repr" 423 | }, 424 | "mouse_pub_topic": { 425 | "repr": "'/cam_12/color/image_overlay_mouse_left'", 426 | "type": "repr" 427 | }, 428 | "num_gridlines": { 429 | "repr": "0", 430 | "type": "repr" 431 | }, 432 | "publish_click_location": { 433 | "repr": "False", 434 | "type": "repr" 435 | }, 436 | "rotate": { 437 | "repr": "0", 438 | "type": "repr" 439 | }, 440 | "smooth_image": { 441 | "repr": "False", 442 | "type": "repr" 443 | }, 444 | "toolbar_hidden": { 445 | "repr": "True", 446 | "type": "repr" 447 | }, 448 | "topic": { 449 | "repr": "'/cam_12/color/image_overlay'", 450 | "type": "repr" 451 | }, 452 | "zoom1": { 453 | "repr": "False", 454 | "type": "repr" 455 | } 456 | }, 457 | "groups": {} 458 | } 459 | } 460 | }, 461 | "plugin__rqt_image_view__ImageView__15": { 462 | "keys": {}, 463 | "groups": { 464 | "dock_widget__ImageViewWidget": { 465 | "keys": { 466 | "dock_widget_title": { 467 | "repr": "'Image View (15)'", 468 | "type": "repr" 469 | }, 470 | "dockable": { 471 | "repr": "True", 472 | "type": "repr" 473 | }, 474 | "parent": { 475 | "repr": "None", 476 | "type": "repr" 477 | } 478 | }, 479 | "groups": {} 480 | }, 481 | "plugin": { 482 | "keys": { 483 | "dynamic_range": { 484 | "repr": "False", 485 | "type": "repr" 486 | }, 487 | "max_range": { 488 | "repr": "10.0", 489 | "type": "repr" 490 | }, 491 | "mouse_pub_topic": { 492 | "repr": "'/d455_3/color/image_overlay_mouse_left'", 493 | "type": "repr" 494 | }, 495 | "num_gridlines": { 496 | "repr": "0", 497 | "type": "repr" 498 | }, 499 | "publish_click_location": { 500 | "repr": "False", 501 | "type": "repr" 502 | }, 503 | "rotate": { 504 | "repr": "0", 505 | "type": "repr" 506 | }, 507 | "smooth_image": { 508 | "repr": "False", 509 | "type": "repr" 510 | }, 511 | "toolbar_hidden": { 512 | "repr": "True", 513 | "type": "repr" 514 | }, 515 | "topic": { 516 | "repr": "'/d455_3/color/image_overlay'", 517 | "type": "repr" 518 | }, 519 | "zoom1": { 520 | "repr": "False", 521 | "type": "repr" 522 | } 523 | }, 524 | "groups": {} 525 | } 526 | } 527 | }, 528 | "plugin__rqt_image_view__ImageView__16": { 529 | "keys": {}, 530 | "groups": { 531 | "dock_widget__ImageViewWidget": { 532 | "keys": { 533 | "dock_widget_title": { 534 | "repr": "'Image View (16)'", 535 | "type": "repr" 536 | }, 537 | "dockable": { 538 | "repr": "True", 539 | "type": "repr" 540 | }, 541 | "parent": { 542 | "repr": "None", 543 | "type": "repr" 544 | } 545 | }, 546 | "groups": {} 547 | }, 548 | "plugin": { 549 | "keys": { 550 | "dynamic_range": { 551 | "repr": "False", 552 | "type": "repr" 553 | }, 554 | "max_range": { 555 | "repr": "10.0", 556 | "type": "repr" 557 | }, 558 | "mouse_pub_topic": { 559 | "repr": "'/cam_13/color/image_overlay_mouse_left'", 560 | "type": "repr" 561 | }, 562 | "num_gridlines": { 563 | "repr": "0", 564 | "type": "repr" 565 | }, 566 | "publish_click_location": { 567 | "repr": "False", 568 | "type": "repr" 569 | }, 570 | "rotate": { 571 | "repr": "0", 572 | "type": "repr" 573 | }, 574 | "smooth_image": { 575 | "repr": "False", 576 | "type": "repr" 577 | }, 578 | "toolbar_hidden": { 579 | "repr": "True", 580 | "type": "repr" 581 | }, 582 | "topic": { 583 | "repr": "'/cam_13/color/image_overlay'", 584 | "type": "repr" 585 | }, 586 | "zoom1": { 587 | "repr": "False", 588 | "type": "repr" 589 | } 590 | }, 591 | "groups": {} 592 | } 593 | } 594 | }, 595 | "plugin__rqt_image_view__ImageView__17": { 596 | "keys": {}, 597 | "groups": { 598 | "dock_widget__ImageViewWidget": { 599 | "keys": { 600 | "dock_widget_title": { 601 | "repr": "'Image View (17)'", 602 | "type": "repr" 603 | }, 604 | "dockable": { 605 | "repr": "True", 606 | "type": "repr" 607 | }, 608 | "parent": { 609 | "repr": "None", 610 | "type": "repr" 611 | } 612 | }, 613 | "groups": {} 614 | }, 615 | "plugin": { 616 | "keys": { 617 | "dynamic_range": { 618 | "repr": "False", 619 | "type": "repr" 620 | }, 621 | "max_range": { 622 | "repr": "10.0", 623 | "type": "repr" 624 | }, 625 | "mouse_pub_topic": { 626 | "repr": "'/cam_14/color/image_overlay_mouse_left'", 627 | "type": "repr" 628 | }, 629 | "num_gridlines": { 630 | "repr": "0", 631 | "type": "repr" 632 | }, 633 | "publish_click_location": { 634 | "repr": "False", 635 | "type": "repr" 636 | }, 637 | "rotate": { 638 | "repr": "0", 639 | "type": "repr" 640 | }, 641 | "smooth_image": { 642 | "repr": "False", 643 | "type": "repr" 644 | }, 645 | "toolbar_hidden": { 646 | "repr": "True", 647 | "type": "repr" 648 | }, 649 | "topic": { 650 | "repr": "'/cam_14/color/image_overlay'", 651 | "type": "repr" 652 | }, 653 | "zoom1": { 654 | "repr": "False", 655 | "type": "repr" 656 | } 657 | }, 658 | "groups": {} 659 | } 660 | } 661 | }, 662 | "plugin__rqt_image_view__ImageView__18": { 663 | "keys": {}, 664 | "groups": { 665 | "dock_widget__ImageViewWidget": { 666 | "keys": { 667 | "dock_widget_title": { 668 | "repr": "'Image View (18)'", 669 | "type": "repr" 670 | }, 671 | "dockable": { 672 | "repr": "True", 673 | "type": "repr" 674 | }, 675 | "parent": { 676 | "repr": "None", 677 | "type": "repr" 678 | } 679 | }, 680 | "groups": {} 681 | }, 682 | "plugin": { 683 | "keys": { 684 | "dynamic_range": { 685 | "repr": "False", 686 | "type": "repr" 687 | }, 688 | "max_range": { 689 | "repr": "10.0", 690 | "type": "repr" 691 | }, 692 | "mouse_pub_topic": { 693 | "repr": "'/cam_15/color/image_overlay_mouse_left'", 694 | "type": "repr" 695 | }, 696 | "num_gridlines": { 697 | "repr": "0", 698 | "type": "repr" 699 | }, 700 | "publish_click_location": { 701 | "repr": "False", 702 | "type": "repr" 703 | }, 704 | "rotate": { 705 | "repr": "0", 706 | "type": "repr" 707 | }, 708 | "smooth_image": { 709 | "repr": "False", 710 | "type": "repr" 711 | }, 712 | "toolbar_hidden": { 713 | "repr": "True", 714 | "type": "repr" 715 | }, 716 | "topic": { 717 | "repr": "'/cam_15/color/image_overlay'", 718 | "type": "repr" 719 | }, 720 | "zoom1": { 721 | "repr": "False", 722 | "type": "repr" 723 | } 724 | }, 725 | "groups": {} 726 | } 727 | } 728 | }, 729 | "plugin__rqt_image_view__ImageView__19": { 730 | "keys": {}, 731 | "groups": { 732 | "dock_widget__ImageViewWidget": { 733 | "keys": { 734 | "dock_widget_title": { 735 | "repr": "'Image View (19)'", 736 | "type": "repr" 737 | }, 738 | "dockable": { 739 | "repr": "True", 740 | "type": "repr" 741 | }, 742 | "parent": { 743 | "repr": "None", 744 | "type": "repr" 745 | } 746 | }, 747 | "groups": {} 748 | }, 749 | "plugin": { 750 | "keys": { 751 | "dynamic_range": { 752 | "repr": "False", 753 | "type": "repr" 754 | }, 755 | "max_range": { 756 | "repr": "10.0", 757 | "type": "repr" 758 | }, 759 | "mouse_pub_topic": { 760 | "repr": "'/cam_16/color/image_overlay_mouse_left'", 761 | "type": "repr" 762 | }, 763 | "num_gridlines": { 764 | "repr": "0", 765 | "type": "repr" 766 | }, 767 | "publish_click_location": { 768 | "repr": "False", 769 | "type": "repr" 770 | }, 771 | "rotate": { 772 | "repr": "0", 773 | "type": "repr" 774 | }, 775 | "smooth_image": { 776 | "repr": "False", 777 | "type": "repr" 778 | }, 779 | "toolbar_hidden": { 780 | "repr": "True", 781 | "type": "repr" 782 | }, 783 | "topic": { 784 | "repr": "'/cam_16/color/image_overlay'", 785 | "type": "repr" 786 | }, 787 | "zoom1": { 788 | "repr": "False", 789 | "type": "repr" 790 | } 791 | }, 792 | "groups": {} 793 | } 794 | } 795 | }, 796 | "plugin__rqt_image_view__ImageView__2": { 797 | "keys": {}, 798 | "groups": { 799 | "dock_widget__ImageViewWidget": { 800 | "keys": { 801 | "dock_widget_title": { 802 | "repr": "'Image View (2)'", 803 | "type": "repr" 804 | }, 805 | "dockable": { 806 | "repr": "True", 807 | "type": "repr" 808 | }, 809 | "parent": { 810 | "repr": "None", 811 | "type": "repr" 812 | } 813 | }, 814 | "groups": {} 815 | }, 816 | "plugin": { 817 | "keys": { 818 | "dynamic_range": { 819 | "repr": "False", 820 | "type": "repr" 821 | }, 822 | "max_range": { 823 | "repr": "10.0", 824 | "type": "repr" 825 | }, 826 | "mouse_pub_topic": { 827 | "repr": "'/cam_2/color/image_overlay_mouse_left'", 828 | "type": "repr" 829 | }, 830 | "num_gridlines": { 831 | "repr": "0", 832 | "type": "repr" 833 | }, 834 | "publish_click_location": { 835 | "repr": "False", 836 | "type": "repr" 837 | }, 838 | "rotate": { 839 | "repr": "0", 840 | "type": "repr" 841 | }, 842 | "smooth_image": { 843 | "repr": "False", 844 | "type": "repr" 845 | }, 846 | "toolbar_hidden": { 847 | "repr": "True", 848 | "type": "repr" 849 | }, 850 | "topic": { 851 | "repr": "'/cam_2/color/image_overlay'", 852 | "type": "repr" 853 | }, 854 | "zoom1": { 855 | "repr": "False", 856 | "type": "repr" 857 | } 858 | }, 859 | "groups": {} 860 | } 861 | } 862 | }, 863 | "plugin__rqt_image_view__ImageView__20": { 864 | "keys": {}, 865 | "groups": { 866 | "dock_widget__ImageViewWidget": { 867 | "keys": { 868 | "dock_widget_title": { 869 | "repr": "'Image View (20)'", 870 | "type": "repr" 871 | }, 872 | "dockable": { 873 | "repr": "True", 874 | "type": "repr" 875 | }, 876 | "parent": { 877 | "repr": "None", 878 | "type": "repr" 879 | } 880 | }, 881 | "groups": {} 882 | }, 883 | "plugin": { 884 | "keys": { 885 | "dynamic_range": { 886 | "repr": "False", 887 | "type": "repr" 888 | }, 889 | "max_range": { 890 | "repr": "10.0", 891 | "type": "repr" 892 | }, 893 | "mouse_pub_topic": { 894 | "repr": "'/d455_4/color/image_overlay_mouse_left'", 895 | "type": "repr" 896 | }, 897 | "num_gridlines": { 898 | "repr": "0", 899 | "type": "repr" 900 | }, 901 | "publish_click_location": { 902 | "repr": "False", 903 | "type": "repr" 904 | }, 905 | "rotate": { 906 | "repr": "0", 907 | "type": "repr" 908 | }, 909 | "smooth_image": { 910 | "repr": "False", 911 | "type": "repr" 912 | }, 913 | "toolbar_hidden": { 914 | "repr": "True", 915 | "type": "repr" 916 | }, 917 | "topic": { 918 | "repr": "'/d455_4/color/image_overlay'", 919 | "type": "repr" 920 | }, 921 | "zoom1": { 922 | "repr": "False", 923 | "type": "repr" 924 | } 925 | }, 926 | "groups": {} 927 | } 928 | } 929 | }, 930 | "plugin__rqt_image_view__ImageView__3": { 931 | "keys": {}, 932 | "groups": { 933 | "dock_widget__ImageViewWidget": { 934 | "keys": { 935 | "dock_widget_title": { 936 | "repr": "'Image View (3)'", 937 | "type": "repr" 938 | }, 939 | "dockable": { 940 | "repr": "True", 941 | "type": "repr" 942 | }, 943 | "parent": { 944 | "repr": "None", 945 | "type": "repr" 946 | } 947 | }, 948 | "groups": {} 949 | }, 950 | "plugin": { 951 | "keys": { 952 | "dynamic_range": { 953 | "repr": "False", 954 | "type": "repr" 955 | }, 956 | "max_range": { 957 | "repr": "10.0", 958 | "type": "repr" 959 | }, 960 | "mouse_pub_topic": { 961 | "repr": "'/cam_3/color/image_overlay_mouse_left'", 962 | "type": "repr" 963 | }, 964 | "num_gridlines": { 965 | "repr": "0", 966 | "type": "repr" 967 | }, 968 | "publish_click_location": { 969 | "repr": "False", 970 | "type": "repr" 971 | }, 972 | "rotate": { 973 | "repr": "0", 974 | "type": "repr" 975 | }, 976 | "smooth_image": { 977 | "repr": "False", 978 | "type": "repr" 979 | }, 980 | "toolbar_hidden": { 981 | "repr": "True", 982 | "type": "repr" 983 | }, 984 | "topic": { 985 | "repr": "'/cam_3/color/image_overlay'", 986 | "type": "repr" 987 | }, 988 | "zoom1": { 989 | "repr": "False", 990 | "type": "repr" 991 | } 992 | }, 993 | "groups": {} 994 | } 995 | } 996 | }, 997 | "plugin__rqt_image_view__ImageView__4": { 998 | "keys": {}, 999 | "groups": { 1000 | "dock_widget__ImageViewWidget": { 1001 | "keys": { 1002 | "dock_widget_title": { 1003 | "repr": "'Image View (4)'", 1004 | "type": "repr" 1005 | }, 1006 | "dockable": { 1007 | "repr": "True", 1008 | "type": "repr" 1009 | }, 1010 | "parent": { 1011 | "repr": "None", 1012 | "type": "repr" 1013 | } 1014 | }, 1015 | "groups": {} 1016 | }, 1017 | "plugin": { 1018 | "keys": { 1019 | "dynamic_range": { 1020 | "repr": "False", 1021 | "type": "repr" 1022 | }, 1023 | "max_range": { 1024 | "repr": "10.0", 1025 | "type": "repr" 1026 | }, 1027 | "mouse_pub_topic": { 1028 | "repr": "'/cam_4/color/image_overlay_mouse_left'", 1029 | "type": "repr" 1030 | }, 1031 | "num_gridlines": { 1032 | "repr": "0", 1033 | "type": "repr" 1034 | }, 1035 | "publish_click_location": { 1036 | "repr": "False", 1037 | "type": "repr" 1038 | }, 1039 | "rotate": { 1040 | "repr": "0", 1041 | "type": "repr" 1042 | }, 1043 | "smooth_image": { 1044 | "repr": "False", 1045 | "type": "repr" 1046 | }, 1047 | "toolbar_hidden": { 1048 | "repr": "True", 1049 | "type": "repr" 1050 | }, 1051 | "topic": { 1052 | "repr": "'/cam_4/color/image_overlay'", 1053 | "type": "repr" 1054 | }, 1055 | "zoom1": { 1056 | "repr": "False", 1057 | "type": "repr" 1058 | } 1059 | }, 1060 | "groups": {} 1061 | } 1062 | } 1063 | }, 1064 | "plugin__rqt_image_view__ImageView__5": { 1065 | "keys": {}, 1066 | "groups": { 1067 | "dock_widget__ImageViewWidget": { 1068 | "keys": { 1069 | "dock_widget_title": { 1070 | "repr": "'Image View (5)'", 1071 | "type": "repr" 1072 | }, 1073 | "dockable": { 1074 | "repr": "True", 1075 | "type": "repr" 1076 | }, 1077 | "parent": { 1078 | "repr": "None", 1079 | "type": "repr" 1080 | } 1081 | }, 1082 | "groups": {} 1083 | }, 1084 | "plugin": { 1085 | "keys": { 1086 | "dynamic_range": { 1087 | "repr": "False", 1088 | "type": "repr" 1089 | }, 1090 | "max_range": { 1091 | "repr": "10.0", 1092 | "type": "repr" 1093 | }, 1094 | "mouse_pub_topic": { 1095 | "repr": "'/d455_1/color/image_overlay_mouse_left'", 1096 | "type": "repr" 1097 | }, 1098 | "num_gridlines": { 1099 | "repr": "0", 1100 | "type": "repr" 1101 | }, 1102 | "publish_click_location": { 1103 | "repr": "False", 1104 | "type": "repr" 1105 | }, 1106 | "rotate": { 1107 | "repr": "0", 1108 | "type": "repr" 1109 | }, 1110 | "smooth_image": { 1111 | "repr": "False", 1112 | "type": "repr" 1113 | }, 1114 | "toolbar_hidden": { 1115 | "repr": "True", 1116 | "type": "repr" 1117 | }, 1118 | "topic": { 1119 | "repr": "'/d455_1/color/image_overlay'", 1120 | "type": "repr" 1121 | }, 1122 | "zoom1": { 1123 | "repr": "False", 1124 | "type": "repr" 1125 | } 1126 | }, 1127 | "groups": {} 1128 | } 1129 | } 1130 | }, 1131 | "plugin__rqt_image_view__ImageView__6": { 1132 | "keys": {}, 1133 | "groups": { 1134 | "dock_widget__ImageViewWidget": { 1135 | "keys": { 1136 | "dock_widget_title": { 1137 | "repr": "'Image View (6)'", 1138 | "type": "repr" 1139 | }, 1140 | "dockable": { 1141 | "repr": "True", 1142 | "type": "repr" 1143 | }, 1144 | "parent": { 1145 | "repr": "None", 1146 | "type": "repr" 1147 | } 1148 | }, 1149 | "groups": {} 1150 | }, 1151 | "plugin": { 1152 | "keys": { 1153 | "dynamic_range": { 1154 | "repr": "False", 1155 | "type": "repr" 1156 | }, 1157 | "max_range": { 1158 | "repr": "10.0", 1159 | "type": "repr" 1160 | }, 1161 | "mouse_pub_topic": { 1162 | "repr": "'/cam_5/color/image_overlay_mouse_left'", 1163 | "type": "repr" 1164 | }, 1165 | "num_gridlines": { 1166 | "repr": "0", 1167 | "type": "repr" 1168 | }, 1169 | "publish_click_location": { 1170 | "repr": "False", 1171 | "type": "repr" 1172 | }, 1173 | "rotate": { 1174 | "repr": "0", 1175 | "type": "repr" 1176 | }, 1177 | "smooth_image": { 1178 | "repr": "False", 1179 | "type": "repr" 1180 | }, 1181 | "toolbar_hidden": { 1182 | "repr": "True", 1183 | "type": "repr" 1184 | }, 1185 | "topic": { 1186 | "repr": "'/cam_5/color/image_overlay'", 1187 | "type": "repr" 1188 | }, 1189 | "zoom1": { 1190 | "repr": "False", 1191 | "type": "repr" 1192 | } 1193 | }, 1194 | "groups": {} 1195 | } 1196 | } 1197 | }, 1198 | "plugin__rqt_image_view__ImageView__7": { 1199 | "keys": {}, 1200 | "groups": { 1201 | "dock_widget__ImageViewWidget": { 1202 | "keys": { 1203 | "dock_widget_title": { 1204 | "repr": "'Image View (7)'", 1205 | "type": "repr" 1206 | }, 1207 | "dockable": { 1208 | "repr": "True", 1209 | "type": "repr" 1210 | }, 1211 | "parent": { 1212 | "repr": "None", 1213 | "type": "repr" 1214 | } 1215 | }, 1216 | "groups": {} 1217 | }, 1218 | "plugin": { 1219 | "keys": { 1220 | "dynamic_range": { 1221 | "repr": "False", 1222 | "type": "repr" 1223 | }, 1224 | "max_range": { 1225 | "repr": "10.0", 1226 | "type": "repr" 1227 | }, 1228 | "mouse_pub_topic": { 1229 | "repr": "'/cam_6/color/image_overlay_mouse_left'", 1230 | "type": "repr" 1231 | }, 1232 | "num_gridlines": { 1233 | "repr": "0", 1234 | "type": "repr" 1235 | }, 1236 | "publish_click_location": { 1237 | "repr": "False", 1238 | "type": "repr" 1239 | }, 1240 | "rotate": { 1241 | "repr": "0", 1242 | "type": "repr" 1243 | }, 1244 | "smooth_image": { 1245 | "repr": "False", 1246 | "type": "repr" 1247 | }, 1248 | "toolbar_hidden": { 1249 | "repr": "True", 1250 | "type": "repr" 1251 | }, 1252 | "topic": { 1253 | "repr": "'/cam_6/color/image_overlay'", 1254 | "type": "repr" 1255 | }, 1256 | "zoom1": { 1257 | "repr": "False", 1258 | "type": "repr" 1259 | } 1260 | }, 1261 | "groups": {} 1262 | } 1263 | } 1264 | }, 1265 | "plugin__rqt_image_view__ImageView__8": { 1266 | "keys": {}, 1267 | "groups": { 1268 | "dock_widget__ImageViewWidget": { 1269 | "keys": { 1270 | "dock_widget_title": { 1271 | "repr": "'Image View (8)'", 1272 | "type": "repr" 1273 | }, 1274 | "dockable": { 1275 | "repr": "True", 1276 | "type": "repr" 1277 | }, 1278 | "parent": { 1279 | "repr": "None", 1280 | "type": "repr" 1281 | } 1282 | }, 1283 | "groups": {} 1284 | }, 1285 | "plugin": { 1286 | "keys": { 1287 | "dynamic_range": { 1288 | "repr": "False", 1289 | "type": "repr" 1290 | }, 1291 | "max_range": { 1292 | "repr": "10.0", 1293 | "type": "repr" 1294 | }, 1295 | "mouse_pub_topic": { 1296 | "repr": "'/cam_7/color/image_overlay_mouse_left'", 1297 | "type": "repr" 1298 | }, 1299 | "num_gridlines": { 1300 | "repr": "0", 1301 | "type": "repr" 1302 | }, 1303 | "publish_click_location": { 1304 | "repr": "False", 1305 | "type": "repr" 1306 | }, 1307 | "rotate": { 1308 | "repr": "0", 1309 | "type": "repr" 1310 | }, 1311 | "smooth_image": { 1312 | "repr": "False", 1313 | "type": "repr" 1314 | }, 1315 | "toolbar_hidden": { 1316 | "repr": "True", 1317 | "type": "repr" 1318 | }, 1319 | "topic": { 1320 | "repr": "'/cam_7/color/image_overlay'", 1321 | "type": "repr" 1322 | }, 1323 | "zoom1": { 1324 | "repr": "False", 1325 | "type": "repr" 1326 | } 1327 | }, 1328 | "groups": {} 1329 | } 1330 | } 1331 | }, 1332 | "plugin__rqt_image_view__ImageView__9": { 1333 | "keys": {}, 1334 | "groups": { 1335 | "dock_widget__ImageViewWidget": { 1336 | "keys": { 1337 | "dock_widget_title": { 1338 | "repr": "'Image View (9)'", 1339 | "type": "repr" 1340 | }, 1341 | "dockable": { 1342 | "repr": "True", 1343 | "type": "repr" 1344 | }, 1345 | "parent": { 1346 | "repr": "None", 1347 | "type": "repr" 1348 | } 1349 | }, 1350 | "groups": {} 1351 | }, 1352 | "plugin": { 1353 | "keys": { 1354 | "dynamic_range": { 1355 | "repr": "False", 1356 | "type": "repr" 1357 | }, 1358 | "max_range": { 1359 | "repr": "10.0", 1360 | "type": "repr" 1361 | }, 1362 | "mouse_pub_topic": { 1363 | "repr": "'/cam_8/color/image_overlay_mouse_left'", 1364 | "type": "repr" 1365 | }, 1366 | "num_gridlines": { 1367 | "repr": "0", 1368 | "type": "repr" 1369 | }, 1370 | "publish_click_location": { 1371 | "repr": "False", 1372 | "type": "repr" 1373 | }, 1374 | "rotate": { 1375 | "repr": "0", 1376 | "type": "repr" 1377 | }, 1378 | "smooth_image": { 1379 | "repr": "False", 1380 | "type": "repr" 1381 | }, 1382 | "toolbar_hidden": { 1383 | "repr": "True", 1384 | "type": "repr" 1385 | }, 1386 | "topic": { 1387 | "repr": "'/cam_8/color/image_overlay'", 1388 | "type": "repr" 1389 | }, 1390 | "zoom1": { 1391 | "repr": "False", 1392 | "type": "repr" 1393 | } 1394 | }, 1395 | "groups": {} 1396 | } 1397 | } 1398 | } 1399 | } 1400 | } 1401 | } 1402 | } -------------------------------------------------------------------------------- /keypoint_camera_calibration/examples/presets/BagSetup20Cams.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 84 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /Results1/Frames1 9 | - /Estimate1/Frames1 10 | - /3D-Projection1 11 | - /3D-Projection1/Namespaces1 12 | Splitter Ratio: 0.4926624596118927 13 | Tree Height: 1773 14 | - Class: rviz/Selection 15 | Name: Selection 16 | - Class: rviz/Tool Properties 17 | Expanded: 18 | - /2D Pose Estimate1 19 | - /2D Nav Goal1 20 | - /Publish Point1 21 | Name: Tool Properties 22 | Splitter Ratio: 0.5886790156364441 23 | - Class: rviz/Views 24 | Expanded: 25 | - /Current View1 26 | Name: Views 27 | Splitter Ratio: 0.5 28 | - Class: rviz/Time 29 | Experimental: false 30 | Name: Time 31 | SyncMode: 0 32 | SyncSource: "" 33 | Preferences: 34 | PromptSaveOnExit: true 35 | Toolbars: 36 | toolButtonStyle: 2 37 | Visualization Manager: 38 | Class: "" 39 | Displays: 40 | - Alpha: 0.5 41 | Cell Size: 0.800000011920929 42 | Class: rviz/Grid 43 | Color: 160; 160; 164 44 | Enabled: true 45 | Line Style: 46 | Line Width: 0.029999999329447746 47 | Value: Lines 48 | Name: Grid 49 | Normal Cell Count: 0 50 | Offset: 51 | X: 0 52 | Y: 0 53 | Z: 0 54 | Plane: XY 55 | Plane Cell Count: 40 56 | Reference Frame: base 57 | Value: true 58 | - Alpha: 0.699999988079071 59 | Class: rviz/Map 60 | Color Scheme: map 61 | Draw Behind: true 62 | Enabled: true 63 | Name: Map 64 | Topic: /map 65 | Unreliable: false 66 | Use Timestamp: false 67 | Value: true 68 | - Class: rviz/TF 69 | Enabled: true 70 | Frame Timeout: 999999 71 | Frames: 72 | All Enabled: false 73 | base: 74 | Value: false 75 | cam_0: 76 | Value: false 77 | cam_0_ini: 78 | Value: false 79 | cam_0_ref: 80 | Value: true 81 | cam_1: 82 | Value: false 83 | cam_10: 84 | Value: false 85 | cam_10_ini: 86 | Value: false 87 | cam_10_ref: 88 | Value: true 89 | cam_11: 90 | Value: false 91 | cam_11_ini: 92 | Value: false 93 | cam_11_ref: 94 | Value: true 95 | cam_12: 96 | Value: false 97 | cam_12_ini: 98 | Value: false 99 | cam_12_ref: 100 | Value: true 101 | cam_13: 102 | Value: false 103 | cam_13_ini: 104 | Value: false 105 | cam_13_ref: 106 | Value: true 107 | cam_14: 108 | Value: false 109 | cam_14_ini: 110 | Value: false 111 | cam_14_ref: 112 | Value: true 113 | cam_15: 114 | Value: false 115 | cam_15_ini: 116 | Value: false 117 | cam_15_ref: 118 | Value: true 119 | cam_16: 120 | Value: false 121 | cam_16_ini: 122 | Value: false 123 | cam_16_ref: 124 | Value: true 125 | cam_17: 126 | Value: false 127 | cam_17_ini: 128 | Value: false 129 | cam_17_ref: 130 | Value: true 131 | cam_18: 132 | Value: false 133 | cam_18_ini: 134 | Value: false 135 | cam_18_ref: 136 | Value: true 137 | cam_19: 138 | Value: false 139 | cam_19_ini: 140 | Value: false 141 | cam_19_ref: 142 | Value: true 143 | cam_1_ini: 144 | Value: false 145 | cam_1_ref: 146 | Value: true 147 | cam_2: 148 | Value: false 149 | cam_2_ini: 150 | Value: false 151 | cam_2_ref: 152 | Value: true 153 | cam_3: 154 | Value: false 155 | cam_3_ini: 156 | Value: false 157 | cam_3_ref: 158 | Value: true 159 | cam_4: 160 | Value: false 161 | cam_4_ini: 162 | Value: false 163 | cam_4_ref: 164 | Value: true 165 | cam_5: 166 | Value: false 167 | cam_5_ini: 168 | Value: false 169 | cam_5_ref: 170 | Value: true 171 | cam_6: 172 | Value: false 173 | cam_6_ini: 174 | Value: false 175 | cam_6_ref: 176 | Value: true 177 | cam_7: 178 | Value: false 179 | cam_7_ini: 180 | Value: false 181 | cam_7_ref: 182 | Value: true 183 | cam_8: 184 | Value: false 185 | cam_8_ini: 186 | Value: false 187 | cam_8_ref: 188 | Value: true 189 | cam_9: 190 | Value: false 191 | cam_9_ini: 192 | Value: false 193 | cam_9_ref: 194 | Value: true 195 | map: 196 | Value: false 197 | Marker Scale: 3 198 | Name: Groundtruth 199 | Show Arrows: false 200 | Show Axes: true 201 | Show Names: false 202 | Tree: 203 | base: 204 | cam_0: 205 | cam_1: 206 | {} 207 | cam_10: 208 | {} 209 | cam_11: 210 | {} 211 | cam_12: 212 | {} 213 | cam_13: 214 | {} 215 | cam_14: 216 | {} 217 | cam_15: 218 | {} 219 | cam_16: 220 | {} 221 | cam_17: 222 | {} 223 | cam_18: 224 | {} 225 | cam_19: 226 | {} 227 | cam_2: 228 | {} 229 | cam_3: 230 | {} 231 | cam_4: 232 | {} 233 | cam_5: 234 | {} 235 | cam_6: 236 | {} 237 | cam_7: 238 | {} 239 | cam_8: 240 | {} 241 | cam_9: 242 | {} 243 | cam_0_ini: 244 | cam_10_ini: 245 | {} 246 | cam_11_ini: 247 | {} 248 | cam_12_ini: 249 | {} 250 | cam_13_ini: 251 | {} 252 | cam_14_ini: 253 | {} 254 | cam_15_ini: 255 | {} 256 | cam_16_ini: 257 | {} 258 | cam_17_ini: 259 | {} 260 | cam_18_ini: 261 | {} 262 | cam_19_ini: 263 | {} 264 | cam_1_ini: 265 | {} 266 | cam_2_ini: 267 | {} 268 | cam_3_ini: 269 | {} 270 | cam_4_ini: 271 | {} 272 | cam_5_ini: 273 | {} 274 | cam_6_ini: 275 | {} 276 | cam_7_ini: 277 | {} 278 | cam_8_ini: 279 | {} 280 | cam_9_ini: 281 | {} 282 | cam_0_ref: 283 | cam_10_ref: 284 | {} 285 | cam_11_ref: 286 | {} 287 | cam_12_ref: 288 | {} 289 | cam_13_ref: 290 | {} 291 | cam_14_ref: 292 | {} 293 | cam_15_ref: 294 | {} 295 | cam_16_ref: 296 | {} 297 | cam_17_ref: 298 | {} 299 | cam_18_ref: 300 | {} 301 | cam_19_ref: 302 | {} 303 | cam_1_ref: 304 | {} 305 | cam_2_ref: 306 | {} 307 | cam_3_ref: 308 | {} 309 | cam_4_ref: 310 | {} 311 | cam_5_ref: 312 | {} 313 | cam_6_ref: 314 | {} 315 | cam_7_ref: 316 | {} 317 | cam_8_ref: 318 | {} 319 | cam_9_ref: 320 | {} 321 | map: 322 | {} 323 | Update Interval: 1 324 | Value: true 325 | - Class: rviz/TF 326 | Enabled: true 327 | Frame Timeout: 1e+9 328 | Frames: 329 | All Enabled: false 330 | base: 331 | Value: false 332 | cam_0: 333 | Value: true 334 | cam_0_ini: 335 | Value: false 336 | cam_0_ref: 337 | Value: false 338 | cam_1: 339 | Value: true 340 | cam_10: 341 | Value: true 342 | cam_10_ini: 343 | Value: false 344 | cam_10_ref: 345 | Value: false 346 | cam_11: 347 | Value: true 348 | cam_11_ini: 349 | Value: false 350 | cam_11_ref: 351 | Value: false 352 | cam_12: 353 | Value: true 354 | cam_12_ini: 355 | Value: false 356 | cam_12_ref: 357 | Value: false 358 | cam_13: 359 | Value: true 360 | cam_13_ini: 361 | Value: false 362 | cam_13_ref: 363 | Value: false 364 | cam_14: 365 | Value: true 366 | cam_14_ini: 367 | Value: false 368 | cam_14_ref: 369 | Value: false 370 | cam_15: 371 | Value: true 372 | cam_15_ini: 373 | Value: false 374 | cam_15_ref: 375 | Value: false 376 | cam_16: 377 | Value: true 378 | cam_16_ini: 379 | Value: false 380 | cam_16_ref: 381 | Value: false 382 | cam_17: 383 | Value: true 384 | cam_17_ini: 385 | Value: false 386 | cam_17_ref: 387 | Value: false 388 | cam_18: 389 | Value: true 390 | cam_18_ini: 391 | Value: false 392 | cam_18_ref: 393 | Value: false 394 | cam_19: 395 | Value: true 396 | cam_19_ini: 397 | Value: false 398 | cam_19_ref: 399 | Value: false 400 | cam_1_ini: 401 | Value: false 402 | cam_1_ref: 403 | Value: false 404 | cam_2: 405 | Value: true 406 | cam_2_ini: 407 | Value: false 408 | cam_2_ref: 409 | Value: false 410 | cam_3: 411 | Value: true 412 | cam_3_ini: 413 | Value: false 414 | cam_3_ref: 415 | Value: false 416 | cam_4: 417 | Value: true 418 | cam_4_ini: 419 | Value: false 420 | cam_4_ref: 421 | Value: false 422 | cam_5: 423 | Value: true 424 | cam_5_ini: 425 | Value: false 426 | cam_5_ref: 427 | Value: false 428 | cam_6: 429 | Value: true 430 | cam_6_ini: 431 | Value: false 432 | cam_6_ref: 433 | Value: false 434 | cam_7: 435 | Value: true 436 | cam_7_ini: 437 | Value: false 438 | cam_7_ref: 439 | Value: false 440 | cam_8: 441 | Value: true 442 | cam_8_ini: 443 | Value: false 444 | cam_8_ref: 445 | Value: false 446 | cam_9: 447 | Value: true 448 | cam_9_ini: 449 | Value: false 450 | cam_9_ref: 451 | Value: false 452 | map: 453 | Value: false 454 | Marker Scale: 4 455 | Name: Results 456 | Show Arrows: false 457 | Show Axes: true 458 | Show Names: true 459 | Tree: 460 | base: 461 | cam_0: 462 | cam_1: 463 | {} 464 | cam_10: 465 | {} 466 | cam_11: 467 | {} 468 | cam_12: 469 | {} 470 | cam_13: 471 | {} 472 | cam_14: 473 | {} 474 | cam_15: 475 | {} 476 | cam_16: 477 | {} 478 | cam_17: 479 | {} 480 | cam_18: 481 | {} 482 | cam_19: 483 | {} 484 | cam_2: 485 | {} 486 | cam_3: 487 | {} 488 | cam_4: 489 | {} 490 | cam_5: 491 | {} 492 | cam_6: 493 | {} 494 | cam_7: 495 | {} 496 | cam_8: 497 | {} 498 | cam_9: 499 | {} 500 | cam_0_ini: 501 | cam_10_ini: 502 | {} 503 | cam_11_ini: 504 | {} 505 | cam_12_ini: 506 | {} 507 | cam_13_ini: 508 | {} 509 | cam_14_ini: 510 | {} 511 | cam_15_ini: 512 | {} 513 | cam_16_ini: 514 | {} 515 | cam_17_ini: 516 | {} 517 | cam_18_ini: 518 | {} 519 | cam_19_ini: 520 | {} 521 | cam_1_ini: 522 | {} 523 | cam_2_ini: 524 | {} 525 | cam_3_ini: 526 | {} 527 | cam_4_ini: 528 | {} 529 | cam_5_ini: 530 | {} 531 | cam_6_ini: 532 | {} 533 | cam_7_ini: 534 | {} 535 | cam_8_ini: 536 | {} 537 | cam_9_ini: 538 | {} 539 | cam_0_ref: 540 | cam_10_ref: 541 | {} 542 | cam_11_ref: 543 | {} 544 | cam_12_ref: 545 | {} 546 | cam_13_ref: 547 | {} 548 | cam_14_ref: 549 | {} 550 | cam_15_ref: 551 | {} 552 | cam_16_ref: 553 | {} 554 | cam_17_ref: 555 | {} 556 | cam_18_ref: 557 | {} 558 | cam_19_ref: 559 | {} 560 | cam_1_ref: 561 | {} 562 | cam_2_ref: 563 | {} 564 | cam_3_ref: 565 | {} 566 | cam_4_ref: 567 | {} 568 | cam_5_ref: 569 | {} 570 | cam_6_ref: 571 | {} 572 | cam_7_ref: 573 | {} 574 | cam_8_ref: 575 | {} 576 | cam_9_ref: 577 | {} 578 | map: 579 | {} 580 | Update Interval: 0 581 | Value: true 582 | - Class: rviz/TF 583 | Enabled: true 584 | Frame Timeout: 1e+9 585 | Frames: 586 | All Enabled: false 587 | base: 588 | Value: true 589 | cam_0: 590 | Value: true 591 | cam_0_ini: 592 | Value: true 593 | cam_0_ref: 594 | Value: true 595 | cam_1: 596 | Value: true 597 | cam_10: 598 | Value: true 599 | cam_10_ini: 600 | Value: true 601 | cam_10_ref: 602 | Value: true 603 | cam_11: 604 | Value: true 605 | cam_11_ini: 606 | Value: true 607 | cam_11_ref: 608 | Value: true 609 | cam_12: 610 | Value: true 611 | cam_12_ini: 612 | Value: true 613 | cam_12_ref: 614 | Value: true 615 | cam_13: 616 | Value: true 617 | cam_13_ini: 618 | Value: true 619 | cam_13_ref: 620 | Value: true 621 | cam_14: 622 | Value: true 623 | cam_14_ini: 624 | Value: true 625 | cam_14_ref: 626 | Value: true 627 | cam_15: 628 | Value: true 629 | cam_15_ini: 630 | Value: true 631 | cam_15_ref: 632 | Value: true 633 | cam_16: 634 | Value: true 635 | cam_16_ini: 636 | Value: true 637 | cam_16_ref: 638 | Value: true 639 | cam_17: 640 | Value: true 641 | cam_17_ini: 642 | Value: true 643 | cam_17_ref: 644 | Value: true 645 | cam_18: 646 | Value: true 647 | cam_18_ini: 648 | Value: true 649 | cam_18_ref: 650 | Value: true 651 | cam_19: 652 | Value: true 653 | cam_19_ini: 654 | Value: true 655 | cam_19_ref: 656 | Value: true 657 | cam_1_ini: 658 | Value: true 659 | cam_1_ref: 660 | Value: true 661 | cam_2: 662 | Value: true 663 | cam_2_ini: 664 | Value: true 665 | cam_2_ref: 666 | Value: true 667 | cam_3: 668 | Value: true 669 | cam_3_ini: 670 | Value: true 671 | cam_3_ref: 672 | Value: true 673 | cam_4: 674 | Value: true 675 | cam_4_ini: 676 | Value: true 677 | cam_4_ref: 678 | Value: true 679 | cam_5: 680 | Value: true 681 | cam_5_ini: 682 | Value: true 683 | cam_5_ref: 684 | Value: true 685 | cam_6: 686 | Value: true 687 | cam_6_ini: 688 | Value: true 689 | cam_6_ref: 690 | Value: true 691 | cam_7: 692 | Value: true 693 | cam_7_ini: 694 | Value: true 695 | cam_7_ref: 696 | Value: true 697 | cam_8: 698 | Value: true 699 | cam_8_ini: 700 | Value: true 701 | cam_8_ref: 702 | Value: true 703 | cam_9: 704 | Value: true 705 | cam_9_ini: 706 | Value: true 707 | cam_9_ref: 708 | Value: true 709 | map: 710 | Value: true 711 | Marker Scale: 1 712 | Name: Estimate 713 | Show Arrows: false 714 | Show Axes: true 715 | Show Names: false 716 | Tree: 717 | base: 718 | cam_0: 719 | cam_1: 720 | {} 721 | cam_10: 722 | {} 723 | cam_11: 724 | {} 725 | cam_12: 726 | {} 727 | cam_13: 728 | {} 729 | cam_14: 730 | {} 731 | cam_15: 732 | {} 733 | cam_16: 734 | {} 735 | cam_17: 736 | {} 737 | cam_18: 738 | {} 739 | cam_19: 740 | {} 741 | cam_2: 742 | {} 743 | cam_3: 744 | {} 745 | cam_4: 746 | {} 747 | cam_5: 748 | {} 749 | cam_6: 750 | {} 751 | cam_7: 752 | {} 753 | cam_8: 754 | {} 755 | cam_9: 756 | {} 757 | cam_0_ini: 758 | cam_10_ini: 759 | {} 760 | cam_11_ini: 761 | {} 762 | cam_12_ini: 763 | {} 764 | cam_13_ini: 765 | {} 766 | cam_14_ini: 767 | {} 768 | cam_15_ini: 769 | {} 770 | cam_16_ini: 771 | {} 772 | cam_17_ini: 773 | {} 774 | cam_18_ini: 775 | {} 776 | cam_19_ini: 777 | {} 778 | cam_1_ini: 779 | {} 780 | cam_2_ini: 781 | {} 782 | cam_3_ini: 783 | {} 784 | cam_4_ini: 785 | {} 786 | cam_5_ini: 787 | {} 788 | cam_6_ini: 789 | {} 790 | cam_7_ini: 791 | {} 792 | cam_8_ini: 793 | {} 794 | cam_9_ini: 795 | {} 796 | cam_0_ref: 797 | cam_10_ref: 798 | {} 799 | cam_11_ref: 800 | {} 801 | cam_12_ref: 802 | {} 803 | cam_13_ref: 804 | {} 805 | cam_14_ref: 806 | {} 807 | cam_15_ref: 808 | {} 809 | cam_16_ref: 810 | {} 811 | cam_17_ref: 812 | {} 813 | cam_18_ref: 814 | {} 815 | cam_19_ref: 816 | {} 817 | cam_1_ref: 818 | {} 819 | cam_2_ref: 820 | {} 821 | cam_3_ref: 822 | {} 823 | cam_4_ref: 824 | {} 825 | cam_5_ref: 826 | {} 827 | cam_6_ref: 828 | {} 829 | cam_7_ref: 830 | {} 831 | cam_8_ref: 832 | {} 833 | cam_9_ref: 834 | {} 835 | map: 836 | {} 837 | Update Interval: 0 838 | Value: true 839 | - Class: rviz/MarkerArray 840 | Enabled: true 841 | Marker Topic: /keypoint_projections 842 | Name: 3D-Projection 843 | Namespaces: 844 | Center of mass: false 845 | Depth Estimation: false 846 | Optimization: true 847 | Triangulation: true 848 | Queue Size: 100 849 | Value: true 850 | - Class: rviz/MarkerArray 851 | Enabled: true 852 | Marker Topic: /human_pose_estimation/skeleton3d_fused 853 | Name: Persons 854 | Namespaces: 855 | joints_fused: true 856 | skeleton_fused: true 857 | Queue Size: 100 858 | Value: true 859 | Enabled: true 860 | Global Options: 861 | Background Color: 0; 0; 0 862 | Default Light: true 863 | Fixed Frame: base 864 | Frame Rate: 30 865 | Name: root 866 | Tools: 867 | - Class: rviz/Interact 868 | Hide Inactive Objects: true 869 | - Class: rviz/MoveCamera 870 | - Class: rviz/Select 871 | - Class: rviz/FocusCamera 872 | - Class: rviz/Measure 873 | - Class: rviz/SetInitialPose 874 | Theta std deviation: 0.2617993950843811 875 | Topic: /initialpose 876 | X std deviation: 0.5 877 | Y std deviation: 0.5 878 | - Class: rviz/SetGoal 879 | Topic: /move_base_simple/goal 880 | - Class: rviz/PublishPoint 881 | Single click: true 882 | Topic: /clicked_point 883 | Value: true 884 | Views: 885 | Current: 886 | Class: rviz/Orbit 887 | Distance: 24.430191040039062 888 | Enable Stereo Rendering: 889 | Stereo Eye Separation: 0.05999999865889549 890 | Stereo Focal Distance: 1 891 | Swap Stereo Eyes: false 892 | Value: false 893 | Focal Point: 894 | X: -0.1370115429162979 895 | Y: 0.875519335269928 896 | Z: 0.0732044205069542 897 | Focal Shape Fixed Size: false 898 | Focal Shape Size: 0.05000000074505806 899 | Invert Z Axis: false 900 | Name: Current View 901 | Near Clip Distance: 0.009999999776482582 902 | Pitch: 0.5397975444793701 903 | Target Frame: base 904 | Value: Orbit (rviz) 905 | Yaw: 1.165120005607605 906 | Saved: ~ 907 | Window Geometry: 908 | "&Displays": 909 | collapsed: false 910 | Height: 2047 911 | Hide Left Dock: false 912 | Hide Right Dock: false 913 | QMainWindow State: 000000ff00000000fd0000000400000000000001e5000007a0fc0200000008fb000000100044006900730070006c006100790073010000002b000007a00000010901000003fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000007b01000003fb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f00000355fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d00000355000000ef01000003fb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007780000004afc0100000002fb0000000800540069006d00650000000000000007780000041001000003fb0000000800540069006d0065010000000000000450000000000000000000000d1a000007a000000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730000000000ffffffff0000000000000000 914 | Selection: 915 | collapsed: false 916 | Time: 917 | collapsed: false 918 | Tool Properties: 919 | collapsed: false 920 | Views: 921 | collapsed: false 922 | Width: 3840 923 | X: 0 924 | Y: 0 925 | -------------------------------------------------------------------------------- /keypoint_camera_calibration/launch/calibration.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /keypoint_camera_calibration/msg/Person2DWithID.msg: -------------------------------------------------------------------------------- 1 | uint32 id # Person ID 2 | float32 depth # distance towards camera 3 | float32 score # average keypoint score 4 | person_msgs/Keypoint2D[] keypoints # Array of keypoints 5 | float32[4] bbox # Bounding box (x0, y0, x1, y1) -------------------------------------------------------------------------------- /keypoint_camera_calibration/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | keypoint_camera_calibration 4 | Online Marker-free Extrinsic Camera Calibration using Person Keypoint Detections 5 | 0.0.1 6 | BSD 7 | Bastian Pätzold 8 | 9 | catkin 10 | 11 | rospy> 12 | message_generation 13 | geometry_msgs 14 | std_msgs 15 | person_msgs 16 | 17 | 18 | -------------------------------------------------------------------------------- /person_msgs/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(person_msgs) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | # add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED COMPONENTS 11 | roscpp 12 | rospy 13 | std_msgs 14 | geometry_msgs 15 | message_generation 16 | ) 17 | ## System dependencies are found with CMake's conventions 18 | # find_package(Boost REQUIRED COMPONENTS system) 19 | 20 | ## Uncomment this if the package has a setup.py. This macro ensures 21 | ## modules and global scripts declared therein get installed 22 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 23 | # catkin_python_setup() 24 | 25 | ################################################ 26 | ## Declare ROS messages, services and actions ## 27 | ################################################ 28 | 29 | ## To declare and build messages, services or actions from within this 30 | ## package, follow these steps: 31 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 32 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 33 | ## * In the file package.xml: 34 | ## * add a build_depend tag for "message_generation" 35 | ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET 36 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 37 | ## but can be declared for certainty nonetheless: 38 | ## * add a exec_depend tag for "message_runtime" 39 | ## * In this file (CMakeLists.txt): 40 | ## * add "message_generation" and every package in MSG_DEP_SET to 41 | ## find_package(catkin REQUIRED COMPONENTS ...) 42 | ## * add "message_runtime" and every package in MSG_DEP_SET to 43 | ## catkin_package(CATKIN_DEPENDS ...) 44 | ## * uncomment the add_*_files sections below as needed 45 | ## and list every .msg/.srv/.action file to be processed 46 | ## * uncomment the generate_messages entry below 47 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 48 | 49 | ## Generate messages in the 'msg' folder 50 | add_message_files( 51 | FILES 52 | Keypoint2D.msg 53 | Person2DOcclusion.msg 54 | Person2DOcclusionList.msg 55 | KeypointWithCovariance.msg 56 | PersonCov.msg 57 | PersonCovList.msg 58 | ) 59 | 60 | ## Generate services in the 'srv' folder 61 | # add_service_files( 62 | # FILES 63 | # Service1.srv 64 | # Service2.srv 65 | # ) 66 | 67 | ## Generate actions in the 'action' folder 68 | # add_action_files( 69 | # FILES 70 | # Action1.action 71 | # Action2.action 72 | # ) 73 | 74 | ## Generate added messages and services with any dependencies listed here 75 | generate_messages( 76 | DEPENDENCIES 77 | std_msgs 78 | geometry_msgs 79 | ) 80 | 81 | ################################################ 82 | ## Declare ROS dynamic reconfigure parameters ## 83 | ################################################ 84 | 85 | ## To declare and build dynamic reconfigure parameters within this 86 | ## package, follow these steps: 87 | ## * In the file package.xml: 88 | ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" 89 | ## * In this file (CMakeLists.txt): 90 | ## * add "dynamic_reconfigure" to 91 | ## find_package(catkin REQUIRED COMPONENTS ...) 92 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 93 | ## and list every .cfg file to be processed 94 | 95 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 96 | # generate_dynamic_reconfigure_options( 97 | # cfg/DynReconf1.cfg 98 | # cfg/DynReconf2.cfg 99 | # ) 100 | 101 | ################################### 102 | ## catkin specific configuration ## 103 | ################################### 104 | ## The catkin_package macro generates cmake config files for your package 105 | ## Declare things to be passed to dependent projects 106 | ## INCLUDE_DIRS: uncomment this if your package contains header files 107 | ## LIBRARIES: libraries you create in this project that dependent projects also need 108 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 109 | ## DEPENDS: system dependencies of this project that dependent projects also need 110 | catkin_package( 111 | # INCLUDE_DIRS include 112 | # LIBRARIES camera_calib_icp 113 | # CATKIN_DEPENDS cv_bridge pcl_conversions pcl_ros roscpp sensor_msgs tf 114 | # DEPENDS system_lib 115 | CATKIN_DEPENDS message_runtime 116 | ) 117 | 118 | ########### 119 | ## Build ## 120 | ########### 121 | 122 | ## Specify additional locations of header files 123 | ## Your package locations should be listed before other locations 124 | include_directories( 125 | ${catkin_INCLUDE_DIRS} 126 | ) 127 | 128 | ## Declare a C++ library 129 | # add_library(${PROJECT_NAME} 130 | # src/${PROJECT_NAME}/camera_calib_icp.cpp 131 | # ) 132 | 133 | ## Add cmake target dependencies of the library 134 | ## as an example, code may need to be generated before libraries 135 | ## either from message generation or dynamic reconfigure 136 | #add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 137 | 138 | ## Declare a C++ executable 139 | ## With catkin_make all packages are built within a single CMake context 140 | ## The recommended prefix ensures that target names across packages don't collide 141 | 142 | ## Rename C++ executable without prefix 143 | ## The above recommended prefix causes long target names, the following renames the 144 | ## target back to the shorter version for ease of user use 145 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 146 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 147 | 148 | ## Add cmake target dependencies of the executable 149 | ## same as for the library above 150 | #add_dependencies(${PROJECT_NAME}_node config_server_gencpp) 151 | 152 | ## Specify libraries to link a library or executable target against 153 | 154 | ############# 155 | ## Install ## 156 | ############# 157 | 158 | # all install targets should use catkin DESTINATION variables 159 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 160 | 161 | ## Mark executable scripts (Python etc.) for installation 162 | ## in contrast to setup.py, you can choose the destination 163 | # install(PROGRAMS 164 | # scripts/my_python_script 165 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 166 | # ) 167 | 168 | ## Mark executables and/or libraries for installation 169 | # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node 170 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 171 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 172 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 173 | # ) 174 | 175 | # Mark cpp header files for installation 176 | # install(DIRECTORY include/${PROJECT_NAME}/ 177 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 178 | # FILES_MATCHING PATTERN "*.h" 179 | # PATTERN ".svn" EXCLUDE 180 | # ) 181 | 182 | ## Mark other files for installation (e.g. launch and bag files, etc.) 183 | # install(FILES 184 | # # myfile1 185 | # # myfile2 186 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 187 | # ) 188 | 189 | ############# 190 | ## Testing ## 191 | ############# 192 | 193 | ## Add gtest based cpp test target and link libraries 194 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_camera_calib_icp.cpp) 195 | # if(TARGET ${PROJECT_NAME}-test) 196 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 197 | # endif() 198 | 199 | ## Add folders to be run by python nosetests 200 | # catkin_add_nosetests(test) 201 | -------------------------------------------------------------------------------- /person_msgs/launch/pose2D_plot.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /person_msgs/msg/.directory: -------------------------------------------------------------------------------- 1 | [Dolphin] 2 | Timestamp=2020,6,29,16,7,54 3 | Version=4 4 | ViewMode=1 5 | -------------------------------------------------------------------------------- /person_msgs/msg/Keypoint2D.msg: -------------------------------------------------------------------------------- 1 | float32 x 2 | float32 y 3 | float32 score 4 | float32[3] cov # xx, xy, yy 5 | -------------------------------------------------------------------------------- /person_msgs/msg/KeypointWithCovariance.msg: -------------------------------------------------------------------------------- 1 | geometry_msgs/Point joint 2 | float32 score 3 | float64[6] cov # xx, xy, xz, yy, yz, zz 4 | #float64[3] sigmas 5 | -------------------------------------------------------------------------------- /person_msgs/msg/Person2DOcclusion.msg: -------------------------------------------------------------------------------- 1 | float32 score # avg score / confidence value from detector 2 | uint32 id # ID 3 | 4 | Keypoint2D[] keypoints # Array of keypoints 5 | Keypoint2D[] debug_occ_kps_orig 6 | float32[] depth_est 7 | float32[] depth_sigma 8 | uint8[] occluded 9 | uint8 n_occluded 10 | uint8 n_valid 11 | 12 | float32[4] bbox # Bounding box (x0, y0, x1, y1) 13 | float32[] reid_descr 14 | -------------------------------------------------------------------------------- /person_msgs/msg/Person2DOcclusionList.msg: -------------------------------------------------------------------------------- 1 | std_msgs/Header header 2 | float32 fb_delay 3 | Person2DOcclusion[] persons 4 | -------------------------------------------------------------------------------- /person_msgs/msg/PersonCov.msg: -------------------------------------------------------------------------------- 1 | uint32 id # ID 2 | 3 | float32 score # score / confidence value from detector 4 | 5 | KeypointWithCovariance[] keypoints # Array of keypoints 6 | 7 | geometry_msgs/Pose bbox_center # Bounding Box center. 8 | geometry_msgs/Vector3 bbox_size # Bounding Box size. 9 | -------------------------------------------------------------------------------- /person_msgs/msg/PersonCovList.msg: -------------------------------------------------------------------------------- 1 | std_msgs/Header header 2 | time[] ts_per_cam 3 | float32[] fb_delay_per_cam 4 | PersonCov[] persons 5 | -------------------------------------------------------------------------------- /person_msgs/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | person_msgs 4 | 0.0.0 5 | The person_msgs package 6 | 7 | 8 | 9 | 10 | sbultmann 11 | 12 | 13 | 14 | 15 | 16 | BSD 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | catkin 52 | roscpp 53 | rospy> 54 | std_msgs 55 | geometry_msgs 56 | message_generation 57 | std_msgs 58 | geometry_msgs 59 | message_generation 60 | message_runtime 61 | roscpp 62 | rospy 63 | std_msgs 64 | geometry_msgs 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /person_msgs/scripts/pose2D_plot_node.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from cv_bridge import CvBridge, CvBridgeError 3 | import cv2 4 | import numpy as np 5 | import argparse 6 | 7 | import rospy 8 | import tf 9 | from sensor_msgs.msg import Image as ROS_Image 10 | from sensor_msgs.msg import CameraInfo 11 | from visualization_msgs.msg import MarkerArray, Marker 12 | from geometry_msgs.msg import Point 13 | from std_msgs.msg import ColorRGBA, Header 14 | from person_msgs.msg import Person2DOcclusionList 15 | 16 | CocoColors = [(255, 0, 0), (255, 85, 0), (255, 170, 0), (255, 255, 0), (170, 255, 0), (85, 255, 0), (0, 255, 0), 17 | (0, 255, 85), (0, 255, 170), (0, 255, 255), (0, 170, 255), (0, 85, 255), (0, 0, 255), (50, 0, 255), (100, 0, 255), 18 | (170, 0, 255), (255, 0, 255), (255, 150, 0), (85, 170, 0), (42, 128, 85), (0, 85, 170), 19 | (255, 0, 170), (255, 0, 85), (242, 165, 65)] 20 | ADE20KIndoorColors = [(0,0,0), (217, 83, 25), (158, 158, 158), (0, 114, 189), (128, 64, 0), (255, 255, 64), (217, 83, 25), (162, 20, 47), (222,184,135), (126, 47, 142), (126, 47, 142), (222,184,135), (222,184,135), (77, 190, 238), (128, 128, 0), (230,230,250), (230,230,250), (196,64,128), (230,230,250), (127,255,0), (230,230,250), (230,230,250), (230,230,250), (230,230,250), (230,230,250), (0, 128, 128), (255,0,255), (255,0,255), (255,0,255), (230,230,250), (230,230,250), (230,230,250)] 21 | 22 | CocoColors_inv = [(255 - color[0], 255 - color[1] , 255 - color[2]) for color in CocoColors] 23 | CocoPairs = [(0, 1), (0, 2), (1, 3), (2, 4), (3, 5), (4, 6), (5, 7), (6, 8), (7, 9), (8, 10), 24 | (5, 11), (6, 12), (11, 13), (12, 14), (13, 15), (14, 16)] 25 | 26 | def draw_humans_3d(humans, stamp, frame_id, caminfo, pairs=CocoPairs): 27 | skel3d_msg = MarkerArray() 28 | 29 | fx = caminfo.K[0] 30 | fy = caminfo.K[4] 31 | cx = caminfo.K[2] 32 | cy = caminfo.K[5] 33 | color_idx = int(frame_id[4]) if frame_id[5] == '_' else int(frame_id[5]) 34 | 35 | for h_idx, human in enumerate(humans): 36 | if human.score > 0.and len(human.depth_est) == len(human.keypoints): 37 | skel3d = Marker() 38 | skel3d.header.frame_id = frame_id 39 | skel3d.header.stamp = stamp 40 | skel3d.lifetime = rospy.Duration(0.5) 41 | skel3d.pose.orientation.w = 1. 42 | skel3d.type = Marker.LINE_LIST 43 | skel3d.scale.x = 0.05 44 | skel3d.ns = 'skeleton_local' 45 | skel3d.id = h_idx 46 | skel3d.color.a = 1.0 47 | 48 | skel3d_joints = Marker() 49 | skel3d_joints.header.frame_id = frame_id 50 | skel3d_joints.header.stamp = stamp 51 | skel3d_joints.lifetime = rospy.Duration(0.5) 52 | skel3d_joints.pose.orientation.w = 1. 53 | skel3d_joints.type = Marker.SPHERE_LIST 54 | skel3d_joints.scale.x = 0.07 55 | skel3d_joints.scale.y = 0.07 56 | skel3d_joints.scale.z = 0.07 # w.r.t depth sigma 57 | skel3d_joints.ns = 'joints_local' 58 | skel3d_joints.id = h_idx 59 | skel3d_joints.color.a = 1.0 60 | 61 | skel3d_depth = Marker() 62 | skel3d_depth.header.frame_id = frame_id 63 | skel3d_depth.header.stamp = stamp 64 | skel3d_depth.lifetime = rospy.Duration(0.5) 65 | skel3d_depth.pose.orientation.w = 1. 66 | skel3d_depth.type = Marker.LINE_LIST 67 | skel3d_depth.scale.x = 0.03 68 | skel3d_depth.ns = 'depth_local_interval' 69 | skel3d_depth.id = h_idx 70 | skel3d_depth.color.a = 1.0 71 | 72 | centers = [] 73 | for i, kp in enumerate(human.keypoints): 74 | if kp.score <= 0. or (human.n_occluded > 0 and human.occluded[i]) or human.depth_est[i] == 0: 75 | centers.append([]) 76 | continue 77 | 78 | c = ColorRGBA() 79 | c.a = 1.0 80 | c.r = CocoColors[color_idx][0] / 255. 81 | c.g = CocoColors[color_idx][1] / 255. 82 | c.b = CocoColors[color_idx][2] / 255. 83 | 84 | z = human.depth_est[i] 85 | x = (kp.x - cx) * z / fx 86 | y = (kp.y - cy) * z / fy 87 | 88 | z_min = max(0, z - human.depth_sigma[i]) 89 | x_min = (kp.x - cx) * z_min / fx 90 | y_min = (kp.y - cy) * z_min / fy 91 | p_min = Point() 92 | p_min.x = x_min 93 | p_min.y = y_min 94 | p_min.z = z_min 95 | z_max = z + human.depth_sigma[i] 96 | x_max = (kp.x - cx) * z_max / fx 97 | y_max = (kp.y - cy) * z_max / fy 98 | p_max = Point() 99 | p_max.x = x_max 100 | p_max.y = y_max 101 | p_max.z = z_max 102 | skel3d_depth.points.append(p_min) 103 | skel3d_depth.points.append(p_max) 104 | skel3d_depth.colors.append(c) 105 | skel3d_depth.colors.append(c) 106 | 107 | center = [x, y, z] 108 | centers.append(center) 109 | 110 | p = Point() 111 | p.x = center[0] 112 | p.y = center[1] 113 | p.z = center[2] 114 | 115 | skel3d_joints.points.append(p) 116 | skel3d_joints.colors.append(c) 117 | 118 | for pair in pairs: 119 | if len(centers[pair[0]]) == 3 and len(centers[pair[1]]) == 3: 120 | p1 = Point() 121 | p1.x = centers[pair[0]][0] 122 | p1.y = centers[pair[0]][1] 123 | p1.z = centers[pair[0]][2] 124 | 125 | p2 = Point() 126 | p2.x = centers[pair[1]][0] 127 | p2.y = centers[pair[1]][1] 128 | p2.z = centers[pair[1]][2] 129 | 130 | c1 = ColorRGBA() 131 | c1.a = 1.0 132 | c1.r = CocoColors[color_idx][0] / 255. 133 | c1.g = CocoColors[color_idx][1] / 255. 134 | c1.b = CocoColors[color_idx][2] / 255. 135 | 136 | c2 = ColorRGBA() 137 | c2.a = 1.0 138 | c2.r = CocoColors[color_idx][0] / 255. 139 | c2.g = CocoColors[color_idx][1] / 255. 140 | c2.b = CocoColors[color_idx][2] / 255. 141 | 142 | skel3d.points.append(p1) 143 | skel3d.colors.append(c1) 144 | skel3d.points.append(p2) 145 | skel3d.colors.append(c2) 146 | 147 | skel3d_msg.markers.append(skel3d) 148 | skel3d_msg.markers.append(skel3d_joints) 149 | skel3d_msg.markers.append(skel3d_depth) 150 | 151 | return skel3d_msg 152 | 153 | def draw_humans(img, humans): 154 | _CONF_THRESHOLD_DRAW = 0.25 155 | _OCCLUDED_COLOR = [255, 165, 0] 156 | 157 | image_w = img.shape[1] 158 | image_h = img.shape[0] 159 | 160 | num_joints = 17 161 | colors = CocoColors 162 | pairs = CocoPairs 163 | 164 | for human in humans: 165 | centers = {} 166 | body_parts = {} 167 | joints_occluded = {} 168 | occluded_idx = human['occluded_idx'] 169 | n_occluded = human['n_occluded'] 170 | n_valid = 0 171 | 172 | # draw point 173 | for i in range(num_joints): 174 | joint_occluded = ord(occluded_idx[i]) if n_occluded > 0 else 0 175 | if isinstance(human['keypoints'], dict): 176 | if str(i) not in human['keypoints'].keys() or (human['keypoints'][str(i)][2] < _CONF_THRESHOLD_DRAW and joint_occluded == 0): 177 | continue 178 | body_part = human['keypoints'][str(i)] 179 | 180 | elif isinstance(human['keypoints'], list): 181 | if human['keypoints'][i] is None or (human['keypoints'][i][2] < _CONF_THRESHOLD_DRAW and joint_occluded == 0): 182 | continue 183 | body_part = human['keypoints'][i] 184 | 185 | center = (int(body_part[0] + 0.5), int(body_part[1] + 0.5)) 186 | 187 | centers[i] = center 188 | body_parts[i] = body_part 189 | joints_occluded[i] = joint_occluded 190 | n_valid += 1 191 | 192 | if joint_occluded > 0: 193 | img = cv2.circle(img, center, max(1, int(img.shape[0] / 360)) * 5, _OCCLUDED_COLOR, thickness=-1, lineType=8, shift=0) 194 | else: 195 | img = cv2.circle(img, center, max(1, int(img.shape[0] / 360)) * 5, colors[i], thickness=-1, lineType=8, shift=0) 196 | 197 | # draw line 198 | for pair_order, pair in enumerate(pairs): 199 | if pair[0] not in centers.keys() or pair[1] not in centers.keys(): 200 | continue 201 | 202 | if joints_occluded[pair[0]] and joints_occluded[pair[1]]: 203 | img = cv2.line(img, centers[pair[0]], centers[pair[1]], _OCCLUDED_COLOR, max(1, int(img.shape[0] / 360)) * 4) 204 | else: 205 | img = cv2.line(img, centers[pair[0]], centers[pair[1]], colors[pair[1]], max(1, int(img.shape[0] / 360)) * 4) 206 | 207 | # draw bounding box 208 | if n_valid > 0: 209 | x1, y1, x2, y2 = human['bbox'] 210 | x1 = int(x1 + 0.5)-6 211 | y1 = int(y1 + 0.5)-6 212 | x2 = int(x2 + 0.5)+6 213 | y2 = int(y2 + 0.5)+6 214 | 215 | if float(n_occluded) / n_valid > 0.8: 216 | cv2.rectangle(img, (x1, y1), (x2, y2), color = _OCCLUDED_COLOR, thickness = max(1, int(img.shape[0] / 360)) * 2) 217 | else: 218 | cv2.rectangle(img, (x1, y1), (x2, y2), color = colors[0], thickness = max(1, int(img.shape[0] / 360)) * 2) 219 | 220 | #cv2.putText(img, 'ID: {} - {:.1f}%'.format(max(0,human['id']) , human['score'] * 100), (x1, y1 - 5), cv2.FONT_HERSHEY_PLAIN, 1.5, colors[human['id'] % len(colors)], 2) 221 | #cv2.putText(img, '{:.1f}%'.format(human['score'] * 100), (x1, y1 - 5), cv2.FONT_HERSHEY_PLAIN, 1.5, colors[human['id'] % len(colors)], 2) 222 | 223 | return img 224 | 225 | class pose_analyzer: 226 | 227 | def __init__(self, args): 228 | 229 | self.jetson = args.jetson 230 | self.last_obj_dets = None 231 | self.det2segm_class = [0, 14, 17, 16, 15, 9, 10, 8, 27, 26, 24, 24, 22, 20] 232 | self.flip = args.flip 233 | 234 | self.bridge = CvBridge() 235 | 236 | self.num_joints = 17 237 | 238 | self.caminfo = None 239 | self.last_obj_dets = None 240 | 241 | self.publisher_image_overlay = rospy.Publisher('image_overlay_from_json', ROS_Image, queue_size=1) 242 | if self.jetson: 243 | self.publisher_skeleton = rospy.Publisher('skel_3d_local', MarkerArray, queue_size=1) 244 | 245 | self.json_pose_sub = rospy.Subscriber('/human_joints', Person2DOcclusionList, self.callback_pose, queue_size = 3) 246 | if self.jetson: 247 | from edgetpu_segmentation_msgs.msg import DetectionList 248 | #self.obj_labels = ["NONE", "person", "cycle", "vehicle", "animal", "chair", "couch", "table", "tv", "laptop", "microwave", "oven", "fridge", "book"] 249 | self.obj_labels = ["NONE", "person", "cycle", "other", "other", "chair", "chair", "table", "computer/tv", "computer/tv", "other", "other", "other", "other"] 250 | print('Object classes: {}'.format(self.obj_labels)) 251 | self.obj_det_sub = rospy.Subscriber('/dets_obj', DetectionList, self.callback_obj_det, queue_size = 3) 252 | self.caminfo_sub = rospy.Subscriber('/camera_info', CameraInfo, self.callback_caminfo, queue_size = 1) 253 | 254 | def callback_caminfo(self, msg): 255 | self.caminfo = msg 256 | def callback_obj_det(self, msg): 257 | self.last_obj_dets = msg.detections 258 | 259 | def callback_pose(self, msg): 260 | if self.jetson: 261 | bg_image = 255 * np.ones((480,848,3), dtype=np.uint8) 262 | else: 263 | bg_image = 255 * np.ones((480,640,3), dtype=np.uint8) 264 | 265 | if self.jetson and self.last_obj_dets is not None: 266 | for det in self.last_obj_dets: 267 | if det.label > 1: # don't display None and person (persons will be displayed as skeletons and bbox below..) 268 | x0 = bg_image.shape[1] - det.bbox.xmax if self.flip else det.bbox.xmin 269 | x1 = bg_image.shape[1] - det.bbox.xmin if self.flip else det.bbox.xmax 270 | y0 = bg_image.shape[0] - det.bbox.ymax if self.flip else det.bbox.ymin 271 | y1 = bg_image.shape[0] - det.bbox.ymin if self.flip else det.bbox.ymax 272 | det_color = ADE20KIndoorColors[self.det2segm_class[det.label]] 273 | cv2.rectangle(bg_image, (int(round(x0)), int(round(y0))), (int(round(x1)), int(round(y1))), color = det_color, thickness = max(1, int(bg_image.shape[0] / 360)) * 2) 274 | 275 | if self.jetson and self.caminfo is not None: 276 | msg_skel = draw_humans_3d(msg.persons, msg.header.stamp, msg.header.frame_id, self.caminfo) 277 | if len(msg_skel.markers) > 0: 278 | if not rospy.is_shutdown(): 279 | self.publisher_skeleton.publish(msg_skel) 280 | 281 | #humans = [{'id': 0, 'score': p.score, 'bbox': p.bbox, 'keypoints': [[kp.x, kp.y, kp.score] for kp in p.keypoints]} for p in msg.persons] 282 | if self.jetson and self.flip: 283 | humans = [{'id': p.id, 'score': p.score, 'bbox': [bg_image.shape[1] - p.bbox[2], bg_image.shape[0] - p.bbox[3], bg_image.shape[1] - p.bbox[0], bg_image.shape[0] - p.bbox[1]], 284 | 'keypoints': [[bg_image.shape[1] - kp.x, bg_image.shape[0] - kp.y, kp.score] for kp in p.keypoints], 285 | 'debug_occ_kps_orig': [[bg_image.shape[1] - kp.x, bg_image.shape[0] - kp.y, kp.score] for kp in p.debug_occ_kps_orig], 286 | 'occluded_idx': p.occluded, 'n_occluded': p.n_occluded} for p in msg.persons] 287 | else: 288 | humans = [{'id': p.id, 'score': p.score, 'bbox': p.bbox, 'keypoints': [[kp.x, kp.y, kp.score] for kp in p.keypoints], 289 | 'debug_occ_kps_orig': [[kp.x, kp.y, kp.score] for kp in p.debug_occ_kps_orig], 290 | 'occluded_idx': p.occluded, 'n_occluded': p.n_occluded} for p in msg.persons] 291 | 292 | img = draw_humans(bg_image, humans) 293 | 294 | img_msg = self.bridge.cv2_to_imgmsg(img, "rgb8") 295 | img_msg.header = msg.header 296 | 297 | self.publisher_image_overlay.publish(img_msg) 298 | 299 | def main(): 300 | 301 | parser = argparse.ArgumentParser() 302 | parser.add_argument('--jetson', default=False, action='store_true', 303 | help='Pose and object detection running on jetson nx') 304 | parser.add_argument('--flip', default=False, action='store_true', 305 | help='flip original image before drawing onto it') 306 | 307 | rospy.init_node('pose2D_plot_node') 308 | args = parser.parse_args(rospy.myargv()[1:]) 309 | 310 | panalyzer = pose_analyzer(args) 311 | 312 | rospy.spin() 313 | 314 | if __name__ == '__main__': 315 | main() 316 | --------------------------------------------------------------------------------