├── .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 |
--------------------------------------------------------------------------------