From 2e1e013de4584991bab79b32b54a1f602f1c1af4 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Mon, 3 Jul 2017 16:14:06 +0200 Subject: [PATCH] Updated documentation --- doc/html/c++/CMakeCCompilerId_8c.html | 3 +- doc/html/c++/CMakeCCompilerId_8c_source.html | 3 +- doc/html/c++/CMakeCXXCompilerId_8cpp.html | 3 +- .../c++/CMakeCXXCompilerId_8cpp_source.html | 3 +- doc/html/c++/annotated.html | 76 + doc/html/c++/classes.html | 63 + .../c++/classmini_1_1csv_1_1ifstream.html | 50 + .../classmini_1_1csv_1_1istringstream.html | 50 + .../c++/classmini_1_1csv_1_1ofstream.html | 50 + .../classmini_1_1csv_1_1ostringstream.html | 50 + .../c++/classmini_1_1csv_1_1sep-members.html | 50 + doc/html/c++/classmini_1_1csv_1_1sep.html | 204 ++ .../c++/classpfuclt_1_1Robot-members.html | 60 + doc/html/c++/classpfuclt_1_1Robot.html | 474 ++++ .../classpfuclt_1_1RobotFactory-members.html | 52 + doc/html/c++/classpfuclt_1_1RobotFactory.html | 236 ++ ...spfuclt__ptcls_1_1PFPublisher-members.html | 131 ++ .../classpfuclt__ptcls_1_1PFPublisher.html | 934 ++++++++ ...__ptcls_1_1PFPublisher__inherit__graph.map | 3 + ...__ptcls_1_1PFPublisher__inherit__graph.md5 | 1 + ...__ptcls_1_1PFPublisher__inherit__graph.png | Bin 0 -> 3506 bytes ...uclt__ptcls_1_1ParticleFilter-members.html | 110 + .../classpfuclt__ptcls_1_1ParticleFilter.html | 2078 +++++++++++++++++ ...tcls_1_1ParticleFilter__inherit__graph.map | 3 + ...tcls_1_1ParticleFilter__inherit__graph.md5 | 1 + ...tcls_1_1ParticleFilter__inherit__graph.png | Bin 0 -> 3472 bytes doc/html/c++/dir_000005_000006.html | 31 + .../dir_5302bec79b689f0f247f14453837c900.html | 3 +- .../dir_59dc6fcc83246be1771c8295efb81319.html | 3 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 13 +- ...r_68267d1309a1af8e8297ef4c3efbcdba_dep.map | 5 + ...r_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 | 1 + ...r_68267d1309a1af8e8297ef4c3efbcdba_dep.png | Bin 0 -> 2201 bytes .../dir_95e29a8b8ee7c54052c171a88bb95675.html | 3 +- .../dir_9a330298ad622ac8e7cfaf0d12710aab.html | 47 + .../dir_9b59f56a0a0080b69286196aa2bead32.html | 51 + .../dir_a7b39092111346681b5c5eeb783e7da0.html | 3 +- .../dir_d44c64559bbebec7f509842c48db8b23.html | 49 + .../dir_d8b9556c6f38787f4045366f8eeaec4e.html | 3 +- .../dir_f89abcb304c928c7d889aa5625570de5.html | 3 +- doc/html/c++/feature__tests_8c.html | 3 +- doc/html/c++/feature__tests_8c_source.html | 3 +- doc/html/c++/files.html | 17 +- doc/html/c++/functions.html | 654 ++++++ doc/html/c++/functions_func.html | 308 +++ doc/html/c++/functions_type.html | 47 + doc/html/c++/functions_vars.html | 464 ++++ doc/html/c++/globals.html | 90 +- doc/html/c++/globals_defs.html | 135 +- doc/html/c++/globals_func.html | 17 +- doc/html/c++/globals_vars.html | 3 +- doc/html/c++/graph_legend.html | 3 +- doc/html/c++/hierarchy.html | 73 + doc/html/c++/index.html | 3 +- doc/html/c++/inherit_graph_0.map | 3 + doc/html/c++/inherit_graph_0.md5 | 1 + doc/html/c++/inherit_graph_0.png | Bin 0 -> 1344 bytes doc/html/c++/inherit_graph_1.map | 3 + doc/html/c++/inherit_graph_1.md5 | 1 + doc/html/c++/inherit_graph_1.png | Bin 0 -> 1568 bytes doc/html/c++/inherit_graph_10.map | 3 + doc/html/c++/inherit_graph_10.md5 | 1 + doc/html/c++/inherit_graph_10.png | Bin 0 -> 1723 bytes doc/html/c++/inherit_graph_11.map | 4 + doc/html/c++/inherit_graph_11.md5 | 1 + doc/html/c++/inherit_graph_11.png | Bin 0 -> 2386 bytes doc/html/c++/inherit_graph_12.map | 3 + doc/html/c++/inherit_graph_12.md5 | 1 + doc/html/c++/inherit_graph_12.png | Bin 0 -> 2637 bytes doc/html/c++/inherit_graph_13.map | 3 + doc/html/c++/inherit_graph_13.md5 | 1 + doc/html/c++/inherit_graph_13.png | Bin 0 -> 2066 bytes doc/html/c++/inherit_graph_14.map | 3 + doc/html/c++/inherit_graph_14.md5 | 1 + doc/html/c++/inherit_graph_14.png | Bin 0 -> 2013 bytes doc/html/c++/inherit_graph_15.map | 3 + doc/html/c++/inherit_graph_15.md5 | 1 + doc/html/c++/inherit_graph_15.png | Bin 0 -> 2329 bytes doc/html/c++/inherit_graph_16.map | 3 + doc/html/c++/inherit_graph_16.md5 | 1 + doc/html/c++/inherit_graph_16.png | Bin 0 -> 2404 bytes doc/html/c++/inherit_graph_17.map | 3 + doc/html/c++/inherit_graph_17.md5 | 1 + doc/html/c++/inherit_graph_17.png | Bin 0 -> 2195 bytes doc/html/c++/inherit_graph_18.map | 3 + doc/html/c++/inherit_graph_18.md5 | 1 + doc/html/c++/inherit_graph_18.png | Bin 0 -> 2015 bytes doc/html/c++/inherit_graph_2.map | 3 + doc/html/c++/inherit_graph_2.md5 | 1 + doc/html/c++/inherit_graph_2.png | Bin 0 -> 1502 bytes doc/html/c++/inherit_graph_3.map | 3 + doc/html/c++/inherit_graph_3.md5 | 1 + doc/html/c++/inherit_graph_3.png | Bin 0 -> 1711 bytes doc/html/c++/inherit_graph_4.map | 3 + doc/html/c++/inherit_graph_4.md5 | 1 + doc/html/c++/inherit_graph_4.png | Bin 0 -> 1334 bytes doc/html/c++/inherit_graph_5.map | 3 + doc/html/c++/inherit_graph_5.md5 | 1 + doc/html/c++/inherit_graph_5.png | Bin 0 -> 1161 bytes doc/html/c++/inherit_graph_6.map | 3 + doc/html/c++/inherit_graph_6.md5 | 1 + doc/html/c++/inherit_graph_6.png | Bin 0 -> 1593 bytes doc/html/c++/inherit_graph_7.map | 3 + doc/html/c++/inherit_graph_7.md5 | 1 + doc/html/c++/inherit_graph_7.png | Bin 0 -> 1642 bytes doc/html/c++/inherit_graph_8.map | 3 + doc/html/c++/inherit_graph_8.md5 | 1 + doc/html/c++/inherit_graph_8.png | Bin 0 -> 1661 bytes doc/html/c++/inherit_graph_9.map | 3 + doc/html/c++/inherit_graph_9.md5 | 1 + doc/html/c++/inherit_graph_9.png | Bin 0 -> 2115 bytes doc/html/c++/inherits.html | 138 ++ doc/html/c++/minicsv_8cpp.html | 6 +- doc/html/c++/minicsv_8cpp__incl.map | 1 + doc/html/c++/minicsv_8cpp__incl.md5 | 2 +- doc/html/c++/minicsv_8cpp__incl.png | Bin 2562 -> 11678 bytes doc/html/c++/minicsv_8cpp_source.html | 6 +- doc/html/c++/minicsv_8h.html | 812 +++++++ doc/html/c++/minicsv_8h__dep__incl.map | 4 + doc/html/c++/minicsv_8h__dep__incl.md5 | 1 + doc/html/c++/minicsv_8h__dep__incl.png | Bin 0 -> 4734 bytes doc/html/c++/minicsv_8h__incl.map | 2 + doc/html/c++/minicsv_8h__incl.md5 | 1 + doc/html/c++/minicsv_8h__incl.png | Bin 0 -> 8391 bytes doc/html/c++/minicsv_8h_source.html | 59 + doc/html/c++/namespacemembers.html | 150 +- doc/html/c++/namespacemembers_enum.html | 48 + doc/html/c++/namespacemembers_eval.html | 51 + doc/html/c++/namespacemembers_func.html | 29 +- doc/html/c++/namespacemembers_type.html | 78 + doc/html/c++/namespacemembers_vars.html | 6 +- doc/html/c++/namespacemini.html | 45 + doc/html/c++/namespacemini_1_1csv.html | 220 ++ doc/html/c++/namespacepfuclt.html | 38 +- doc/html/c++/namespacepfuclt__aux.html | 282 ++- doc/html/c++/namespacepfuclt__ptcls.html | 147 +- doc/html/c++/namespaces.html | 13 +- doc/html/c++/ompver_8c.html | 5 +- doc/html/c++/ompver_8c_source.html | 3 +- doc/html/c++/ompver_8cpp.html | 5 +- doc/html/c++/ompver_8cpp_source.html | 3 +- doc/html/c++/pfuclt__aux_8cpp.html | 15 +- doc/html/c++/pfuclt__aux_8cpp__incl.map | 2 + doc/html/c++/pfuclt__aux_8cpp__incl.md5 | 2 +- doc/html/c++/pfuclt__aux_8cpp__incl.png | Bin 8493 -> 42873 bytes doc/html/c++/pfuclt__aux_8cpp_source.html | 16 +- doc/html/c++/pfuclt__aux_8h.html | 133 ++ doc/html/c++/pfuclt__aux_8h__dep__incl.map | 7 + doc/html/c++/pfuclt__aux_8h__dep__incl.md5 | 1 + doc/html/c++/pfuclt__aux_8h__dep__incl.png | Bin 0 -> 19144 bytes doc/html/c++/pfuclt__aux_8h__incl.map | 2 + doc/html/c++/pfuclt__aux_8h__incl.md5 | 1 + doc/html/c++/pfuclt__aux_8h__incl.png | Bin 0 -> 23698 bytes doc/html/c++/pfuclt__aux_8h_source.html | 64 + doc/html/c++/pfuclt__omni__dataset_8cpp.html | 14 +- .../c++/pfuclt__omni__dataset_8cpp__incl.map | 3 + .../c++/pfuclt__omni__dataset_8cpp__incl.md5 | 2 +- .../c++/pfuclt__omni__dataset_8cpp__incl.png | Bin 11832 -> 183285 bytes .../pfuclt__omni__dataset_8cpp_source.html | 78 +- doc/html/c++/pfuclt__omni__dataset_8h.html | 153 ++ .../pfuclt__omni__dataset_8h__dep__incl.map | 3 + .../pfuclt__omni__dataset_8h__dep__incl.md5 | 1 + .../pfuclt__omni__dataset_8h__dep__incl.png | Bin 0 -> 4269 bytes .../c++/pfuclt__omni__dataset_8h__incl.map | 4 + .../c++/pfuclt__omni__dataset_8h__incl.md5 | 1 + .../c++/pfuclt__omni__dataset_8h__incl.png | Bin 0 -> 161124 bytes .../c++/pfuclt__omni__dataset_8h_source.html | 60 + doc/html/c++/pfuclt__particles_8cpp.html | 7 +- doc/html/c++/pfuclt__particles_8cpp__incl.map | 2 + doc/html/c++/pfuclt__particles_8cpp__incl.md5 | 2 +- doc/html/c++/pfuclt__particles_8cpp__incl.png | Bin 59317 -> 162811 bytes .../c++/pfuclt__particles_8cpp_source.html | 133 +- doc/html/c++/pfuclt__particles_8h.html | 351 +++ .../c++/pfuclt__particles_8h__dep__incl.map | 5 + .../c++/pfuclt__particles_8h__dep__incl.md5 | 1 + .../c++/pfuclt__particles_8h__dep__incl.png | Bin 0 -> 11681 bytes doc/html/c++/pfuclt__particles_8h__incl.map | 3 + doc/html/c++/pfuclt__particles_8h__incl.md5 | 1 + doc/html/c++/pfuclt__particles_8h__incl.png | Bin 0 -> 84134 bytes doc/html/c++/pfuclt__particles_8h_source.html | 165 ++ ...uctpfuclt__aux_1_1landmark__s-members.html | 48 + .../c++/structpfuclt__aux_1_1landmark__s.html | 110 + ...uctpfuclt__aux_1_1timeEval__s-members.html | 53 + .../c++/structpfuclt__aux_1_1timeEval__s.html | 241 ++ ...1_1PFPublisher_1_1PublishData-members.html | 47 + ...__ptcls_1_1PFPublisher_1_1PublishData.html | 117 + ...1ParticleFilter_1_1PFinitData-members.html | 54 + ...ptcls_1_1ParticleFilter_1_1PFinitData.html | 286 +++ ...ls_1_1ParticleFilter_1_1State-members.html | 51 + ...clt__ptcls_1_1ParticleFilter_1_1State.html | 202 ++ ...ter_1_1State_1_1robotState__s-members.html | 48 + ...ticleFilter_1_1State_1_1robotState__s.html | 127 + ...er_1_1State_1_1targetState__s-members.html | 48 + ...icleFilter_1_1State_1_1targetState__s.html | 126 + ...Filter_1_1dynamicVariables__s-members.html | 53 + ...ParticleFilter_1_1dynamicVariables__s.html | 221 ++ ...uclt__ptcls_1_1landmarkObs__s-members.html | 55 + ...structpfuclt__ptcls_1_1landmarkObs__s.html | 234 ++ ...tpfuclt__ptcls_1_1odometry__s-members.html | 48 + .../structpfuclt__ptcls_1_1odometry__s.html | 106 + ...pfuclt__ptcls_1_1targetObs__s-members.html | 57 + .../structpfuclt__ptcls_1_1targetObs__s.html | 266 +++ doc/html/index-msg.html | 2 +- doc/html/index.html | 2 +- doc/html/msg/particle.html | 2 +- doc/html/msg/particles.html | 2 +- rosdoc.yaml | 1 - 207 files changed, 12684 insertions(+), 110 deletions(-) create mode 100644 doc/html/c++/annotated.html create mode 100644 doc/html/c++/classes.html create mode 100644 doc/html/c++/classmini_1_1csv_1_1ifstream.html create mode 100644 doc/html/c++/classmini_1_1csv_1_1istringstream.html create mode 100644 doc/html/c++/classmini_1_1csv_1_1ofstream.html create mode 100644 doc/html/c++/classmini_1_1csv_1_1ostringstream.html create mode 100644 doc/html/c++/classmini_1_1csv_1_1sep-members.html create mode 100644 doc/html/c++/classmini_1_1csv_1_1sep.html create mode 100644 doc/html/c++/classpfuclt_1_1Robot-members.html create mode 100644 doc/html/c++/classpfuclt_1_1Robot.html create mode 100644 doc/html/c++/classpfuclt_1_1RobotFactory-members.html create mode 100644 doc/html/c++/classpfuclt_1_1RobotFactory.html create mode 100644 doc/html/c++/classpfuclt__ptcls_1_1PFPublisher-members.html create mode 100644 doc/html/c++/classpfuclt__ptcls_1_1PFPublisher.html create mode 100644 doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.map create mode 100644 doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.md5 create mode 100644 doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.png create mode 100644 doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter-members.html create mode 100644 doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter.html create mode 100644 doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.map create mode 100644 doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.md5 create mode 100644 doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.png create mode 100644 doc/html/c++/dir_000005_000006.html create mode 100644 doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map create mode 100644 doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 create mode 100644 doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png create mode 100644 doc/html/c++/dir_9a330298ad622ac8e7cfaf0d12710aab.html create mode 100644 doc/html/c++/dir_9b59f56a0a0080b69286196aa2bead32.html create mode 100644 doc/html/c++/dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 doc/html/c++/functions.html create mode 100644 doc/html/c++/functions_func.html create mode 100644 doc/html/c++/functions_type.html create mode 100644 doc/html/c++/functions_vars.html create mode 100644 doc/html/c++/hierarchy.html create mode 100644 doc/html/c++/inherit_graph_0.map create mode 100644 doc/html/c++/inherit_graph_0.md5 create mode 100644 doc/html/c++/inherit_graph_0.png create mode 100644 doc/html/c++/inherit_graph_1.map create mode 100644 doc/html/c++/inherit_graph_1.md5 create mode 100644 doc/html/c++/inherit_graph_1.png create mode 100644 doc/html/c++/inherit_graph_10.map create mode 100644 doc/html/c++/inherit_graph_10.md5 create mode 100644 doc/html/c++/inherit_graph_10.png create mode 100644 doc/html/c++/inherit_graph_11.map create mode 100644 doc/html/c++/inherit_graph_11.md5 create mode 100644 doc/html/c++/inherit_graph_11.png create mode 100644 doc/html/c++/inherit_graph_12.map create mode 100644 doc/html/c++/inherit_graph_12.md5 create mode 100644 doc/html/c++/inherit_graph_12.png create mode 100644 doc/html/c++/inherit_graph_13.map create mode 100644 doc/html/c++/inherit_graph_13.md5 create mode 100644 doc/html/c++/inherit_graph_13.png create mode 100644 doc/html/c++/inherit_graph_14.map create mode 100644 doc/html/c++/inherit_graph_14.md5 create mode 100644 doc/html/c++/inherit_graph_14.png create mode 100644 doc/html/c++/inherit_graph_15.map create mode 100644 doc/html/c++/inherit_graph_15.md5 create mode 100644 doc/html/c++/inherit_graph_15.png create mode 100644 doc/html/c++/inherit_graph_16.map create mode 100644 doc/html/c++/inherit_graph_16.md5 create mode 100644 doc/html/c++/inherit_graph_16.png create mode 100644 doc/html/c++/inherit_graph_17.map create mode 100644 doc/html/c++/inherit_graph_17.md5 create mode 100644 doc/html/c++/inherit_graph_17.png create mode 100644 doc/html/c++/inherit_graph_18.map create mode 100644 doc/html/c++/inherit_graph_18.md5 create mode 100644 doc/html/c++/inherit_graph_18.png create mode 100644 doc/html/c++/inherit_graph_2.map create mode 100644 doc/html/c++/inherit_graph_2.md5 create mode 100644 doc/html/c++/inherit_graph_2.png create mode 100644 doc/html/c++/inherit_graph_3.map create mode 100644 doc/html/c++/inherit_graph_3.md5 create mode 100644 doc/html/c++/inherit_graph_3.png create mode 100644 doc/html/c++/inherit_graph_4.map create mode 100644 doc/html/c++/inherit_graph_4.md5 create mode 100644 doc/html/c++/inherit_graph_4.png create mode 100644 doc/html/c++/inherit_graph_5.map create mode 100644 doc/html/c++/inherit_graph_5.md5 create mode 100644 doc/html/c++/inherit_graph_5.png create mode 100644 doc/html/c++/inherit_graph_6.map create mode 100644 doc/html/c++/inherit_graph_6.md5 create mode 100644 doc/html/c++/inherit_graph_6.png create mode 100644 doc/html/c++/inherit_graph_7.map create mode 100644 doc/html/c++/inherit_graph_7.md5 create mode 100644 doc/html/c++/inherit_graph_7.png create mode 100644 doc/html/c++/inherit_graph_8.map create mode 100644 doc/html/c++/inherit_graph_8.md5 create mode 100644 doc/html/c++/inherit_graph_8.png create mode 100644 doc/html/c++/inherit_graph_9.map create mode 100644 doc/html/c++/inherit_graph_9.md5 create mode 100644 doc/html/c++/inherit_graph_9.png create mode 100644 doc/html/c++/inherits.html create mode 100644 doc/html/c++/minicsv_8h.html create mode 100644 doc/html/c++/minicsv_8h__dep__incl.map create mode 100644 doc/html/c++/minicsv_8h__dep__incl.md5 create mode 100644 doc/html/c++/minicsv_8h__dep__incl.png create mode 100644 doc/html/c++/minicsv_8h__incl.map create mode 100644 doc/html/c++/minicsv_8h__incl.md5 create mode 100644 doc/html/c++/minicsv_8h__incl.png create mode 100644 doc/html/c++/minicsv_8h_source.html create mode 100644 doc/html/c++/namespacemembers_enum.html create mode 100644 doc/html/c++/namespacemembers_eval.html create mode 100644 doc/html/c++/namespacemembers_type.html create mode 100644 doc/html/c++/namespacemini.html create mode 100644 doc/html/c++/namespacemini_1_1csv.html create mode 100644 doc/html/c++/pfuclt__aux_8h.html create mode 100644 doc/html/c++/pfuclt__aux_8h__dep__incl.map create mode 100644 doc/html/c++/pfuclt__aux_8h__dep__incl.md5 create mode 100644 doc/html/c++/pfuclt__aux_8h__dep__incl.png create mode 100644 doc/html/c++/pfuclt__aux_8h__incl.map create mode 100644 doc/html/c++/pfuclt__aux_8h__incl.md5 create mode 100644 doc/html/c++/pfuclt__aux_8h__incl.png create mode 100644 doc/html/c++/pfuclt__aux_8h_source.html create mode 100644 doc/html/c++/pfuclt__omni__dataset_8h.html create mode 100644 doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.map create mode 100644 doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.md5 create mode 100644 doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.png create mode 100644 doc/html/c++/pfuclt__omni__dataset_8h__incl.map create mode 100644 doc/html/c++/pfuclt__omni__dataset_8h__incl.md5 create mode 100644 doc/html/c++/pfuclt__omni__dataset_8h__incl.png create mode 100644 doc/html/c++/pfuclt__omni__dataset_8h_source.html create mode 100644 doc/html/c++/pfuclt__particles_8h.html create mode 100644 doc/html/c++/pfuclt__particles_8h__dep__incl.map create mode 100644 doc/html/c++/pfuclt__particles_8h__dep__incl.md5 create mode 100644 doc/html/c++/pfuclt__particles_8h__dep__incl.png create mode 100644 doc/html/c++/pfuclt__particles_8h__incl.map create mode 100644 doc/html/c++/pfuclt__particles_8h__incl.md5 create mode 100644 doc/html/c++/pfuclt__particles_8h__incl.png create mode 100644 doc/html/c++/pfuclt__particles_8h_source.html create mode 100644 doc/html/c++/structpfuclt__aux_1_1landmark__s-members.html create mode 100644 doc/html/c++/structpfuclt__aux_1_1landmark__s.html create mode 100644 doc/html/c++/structpfuclt__aux_1_1timeEval__s-members.html create mode 100644 doc/html/c++/structpfuclt__aux_1_1timeEval__s.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1PFPublisher_1_1PublishData-members.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1PFPublisher_1_1PublishData.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1PFinitData-members.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1PFinitData.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State-members.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1robotState__s-members.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1robotState__s.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1targetState__s-members.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1targetState__s.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1dynamicVariables__s-members.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1dynamicVariables__s.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1landmarkObs__s-members.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1landmarkObs__s.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1odometry__s-members.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1odometry__s.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1targetObs__s-members.html create mode 100644 doc/html/c++/structpfuclt__ptcls_1_1targetObs__s.html diff --git a/doc/html/c++/CMakeCCompilerId_8c.html b/doc/html/c++/CMakeCCompilerId_8c.html index 7a12f91..4ce1655 100644 --- a/doc/html/c++/CMakeCCompilerId_8c.html +++ b/doc/html/c++/CMakeCCompilerId_8c.html @@ -9,6 +9,7 @@ @@ -292,7 +293,7 @@

Variable Documentation


pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/CMakeCCompilerId_8c_source.html b/doc/html/c++/CMakeCCompilerId_8c_source.html index 1b9238c..c479734 100644 --- a/doc/html/c++/CMakeCCompilerId_8c_source.html +++ b/doc/html/c++/CMakeCCompilerId_8c_source.html @@ -9,6 +9,7 @@ @@ -43,7 +44,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:28
diff --git a/doc/html/c++/CMakeCXXCompilerId_8cpp.html b/doc/html/c++/CMakeCXXCompilerId_8cpp.html index 416e392..123c3e8 100644 --- a/doc/html/c++/CMakeCXXCompilerId_8cpp.html +++ b/doc/html/c++/CMakeCXXCompilerId_8cpp.html @@ -9,6 +9,7 @@ @@ -275,7 +276,7 @@

Variable Documentation


pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/CMakeCXXCompilerId_8cpp_source.html b/doc/html/c++/CMakeCXXCompilerId_8cpp_source.html index 53c64bb..a73cd37 100644 --- a/doc/html/c++/CMakeCXXCompilerId_8cpp_source.html +++ b/doc/html/c++/CMakeCXXCompilerId_8cpp_source.html @@ -9,6 +9,7 @@ @@ -42,7 +43,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:28
diff --git a/doc/html/c++/annotated.html b/doc/html/c++/annotated.html new file mode 100644 index 0000000..a460bbf --- /dev/null +++ b/doc/html/c++/annotated.html @@ -0,0 +1,76 @@ + +pfuclt_omni_dataset: Class List + + + + + + + + +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + +
 Nmini
 Ncsv
 Cifstream
 Cistringstream
 Cofstream
 Costringstream
 Csep
 Npfuclt
 CRobot
    +
  • Has the common variables and methods of all robots, and is the base class of any specialized robots who may derive from it. Teammates should be instances of this class
  • +
+
 CRobotFactory
    +
  • Creates and keeps information on the robot running the algorithm and its teammates. Is used as a middle-man between all robots
  • +
+
 Npfuclt_aux
 Clandmark_sThe Landmark struct - used to store a landmark, defined by its serial number, and its position {x,y}
 CtimeEval_sThe timeEval_s struct - takes care of time difference evaluation through the ros::Time methods
 Npfuclt_ptcls
 ClandmarkObs_s
 Codometry_s
 CParticleFilter
 CdynamicVariables_s
 CPFinitDataThe PFinitData struct - provides encapsulation to the initial data necessary to construct a ParticleFilter instance
 CStateThe state_s struct - defines a structure to hold state information for the particle filter class
 CrobotState_sThe robotState_s struct - saves information on the belief of a robot's state
 CtargetState_sThe targetState_s struct - saves information on the belief of the target's state
 CPFPublisher +
 CPublishData
 CtargetObs_s
+
+
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classes.html b/doc/html/c++/classes.html new file mode 100644 index 0000000..1106a22 --- /dev/null +++ b/doc/html/c++/classes.html @@ -0,0 +1,63 @@ + +pfuclt_omni_dataset: Class Index + + + + + + + + +
+
+
Class Index
+
+
+
D | I | L | O | P | R | S | T
+ + + + + + + + + + + + +
  P  
+
RobotFactory (pfuclt)   istringstream (mini::csv)   ofstream (mini::csv)   
  t  
+
  S  
+
  l  
+
ostringstream (mini::csv)   
ParticleFilter (pfuclt_ptcls)   
  r  
+
targetObs_s (pfuclt_ptcls)   
ParticleFilter::PFinitData (pfuclt_ptcls)   ParticleFilter::State (pfuclt_ptcls)   landmark_s (pfuclt_aux)   ParticleFilter::State::targetState_s (pfuclt_ptcls)   
PFPublisher (pfuclt_ptcls)   
  d  
+
landmarkObs_s (pfuclt_ptcls)   ParticleFilter::State::robotState_s (pfuclt_ptcls)   timeEval_s (pfuclt_aux)   
PFPublisher::PublishData (pfuclt_ptcls)   
  o  
+
  s  
+
  R  
+
ParticleFilter::dynamicVariables_s (pfuclt_ptcls)   
  i  
+
odometry_s (pfuclt_ptcls)   sep (mini::csv)   
Robot (pfuclt)   
ifstream (mini::csv)   
+
D | I | L | O | P | R | S | T
+
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classmini_1_1csv_1_1ifstream.html b/doc/html/c++/classmini_1_1csv_1_1ifstream.html new file mode 100644 index 0000000..433070f --- /dev/null +++ b/doc/html/c++/classmini_1_1csv_1_1ifstream.html @@ -0,0 +1,50 @@ + +pfuclt_omni_dataset: mini::csv::ifstream Class Reference + + + + + + + + + +
+
+
mini::csv::ifstream Class Reference
+
+
+ +

#include <minicsv.h>

+

Detailed Description

+
+

Definition at line 116 of file minicsv.h.

+

The documentation for this class was generated from the following file: +
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classmini_1_1csv_1_1istringstream.html b/doc/html/c++/classmini_1_1csv_1_1istringstream.html new file mode 100644 index 0000000..56f37fc --- /dev/null +++ b/doc/html/c++/classmini_1_1csv_1_1istringstream.html @@ -0,0 +1,50 @@ + +pfuclt_omni_dataset: mini::csv::istringstream Class Reference + + + + + + + + + +
+
+
mini::csv::istringstream Class Reference
+
+
+ +

#include <minicsv.h>

+

Detailed Description

+
+

Definition at line 601 of file minicsv.h.

+

The documentation for this class was generated from the following file: +
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classmini_1_1csv_1_1ofstream.html b/doc/html/c++/classmini_1_1csv_1_1ofstream.html new file mode 100644 index 0000000..6081fb8 --- /dev/null +++ b/doc/html/c++/classmini_1_1csv_1_1ofstream.html @@ -0,0 +1,50 @@ + +pfuclt_omni_dataset: mini::csv::ofstream Class Reference + + + + + + + + + +
+
+
mini::csv::ofstream Class Reference
+
+
+ +

#include <minicsv.h>

+

Detailed Description

+
+

Definition at line 361 of file minicsv.h.

+

The documentation for this class was generated from the following file: +
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classmini_1_1csv_1_1ostringstream.html b/doc/html/c++/classmini_1_1csv_1_1ostringstream.html new file mode 100644 index 0000000..f2d4c7d --- /dev/null +++ b/doc/html/c++/classmini_1_1csv_1_1ostringstream.html @@ -0,0 +1,50 @@ + +pfuclt_omni_dataset: mini::csv::ostringstream Class Reference + + + + + + + + + +
+
+
mini::csv::ostringstream Class Reference
+
+
+ +

#include <minicsv.h>

+

Detailed Description

+
+

Definition at line 777 of file minicsv.h.

+

The documentation for this class was generated from the following file: +
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classmini_1_1csv_1_1sep-members.html b/doc/html/c++/classmini_1_1csv_1_1sep-members.html new file mode 100644 index 0000000..841e942 --- /dev/null +++ b/doc/html/c++/classmini_1_1csv_1_1sep-members.html @@ -0,0 +1,50 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
+
+
mini::csv::sep Member List
+
+
+ +

This is the complete list of members for mini::csv::sep, including all inherited members.

+ + + + + + +
delimitermini::csv::sepprivate
escapemini::csv::sepprivate
get_delimiter() const mini::csv::sepinline
get_escape() const mini::csv::sepinline
sep(const char delimiter_, const std::string &escape_)mini::csv::sepinline
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classmini_1_1csv_1_1sep.html b/doc/html/c++/classmini_1_1csv_1_1sep.html new file mode 100644 index 0000000..d74ad84 --- /dev/null +++ b/doc/html/c++/classmini_1_1csv_1_1sep.html @@ -0,0 +1,204 @@ + +pfuclt_omni_dataset: mini::csv::sep Class Reference + + + + + + + + + +
+ +
+
mini::csv::sep Class Reference
+
+
+ +

#include <minicsv.h>

+ + + + + + + + +

+Public Member Functions

const char get_delimiter () const
 
const std::string & get_escape () const
 
 sep (const char delimiter_, const std::string &escape_)
 
+ + + + + +

+Private Attributes

const char delimiter
 
const std::string escape
 
+

Detailed Description

+
+

Definition at line 104 of file minicsv.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
mini::csv::sep::sep (const char delimiter_,
const std::string & escape_ 
)
+
+inline
+
+ +

Definition at line 107 of file minicsv.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
const char mini::csv::sep::get_delimiter () const
+
+inline
+
+ +

Definition at line 109 of file minicsv.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const std::string& mini::csv::sep::get_escape () const
+
+inline
+
+ +

Definition at line 110 of file minicsv.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const char mini::csv::sep::delimiter
+
+private
+
+ +

Definition at line 112 of file minicsv.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const std::string mini::csv::sep::escape
+
+private
+
+ +

Definition at line 113 of file minicsv.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classpfuclt_1_1Robot-members.html b/doc/html/c++/classpfuclt_1_1Robot-members.html new file mode 100644 index 0000000..8ab93d2 --- /dev/null +++ b/doc/html/c++/classpfuclt_1_1Robot-members.html @@ -0,0 +1,60 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
+
+
pfuclt::Robot Member List
+
+
+ +

This is the complete list of members for pfuclt::Robot, including all inherited members.

+ + + + + + + + + + + + + + + + +
hasStarted()pfuclt::Robotinline
initPose_pfuclt::Robotprotected
landmarkDataCallback(const read_omni_dataset::LRMLandmarksData::ConstPtr &)pfuclt::Robot
odometryCallback(const nav_msgs::Odometry::ConstPtr &)pfuclt::Robot
parent_pfuclt::Robotprotected
pf_pfuclt::Robotprotected
Robot(ros::NodeHandle &nh, RobotFactory *parent, ParticleFilter *pf, uint robotNumber)pfuclt::Robot
robotNumber_pfuclt::Robotprotected
sBall_pfuclt::Robotprotected
sLandmark_pfuclt::Robotprotected
sOdom_pfuclt::Robotprotected
started_pfuclt::Robotprotected
startNow()pfuclt::Robotprotected
targetCallback(const read_omni_dataset::BallData::ConstPtr &)pfuclt::Robot
timeStarted_pfuclt::Robotprotected
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classpfuclt_1_1Robot.html b/doc/html/c++/classpfuclt_1_1Robot.html new file mode 100644 index 0000000..ed7726d --- /dev/null +++ b/doc/html/c++/classpfuclt_1_1Robot.html @@ -0,0 +1,474 @@ + +pfuclt_omni_dataset: pfuclt::Robot Class Reference + + + + + + + + + +
+ +
+
pfuclt::Robot Class Reference
+
+
+ +

The Robot class - Has the common variables and methods of all robots, and is the base class of any specialized robots who may derive from it. Teammates should be instances of this class. + More...

+ +

#include <pfuclt_omni_dataset.h>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

bool hasStarted ()
 hasStarted More...
 
void landmarkDataCallback (const read_omni_dataset::LRMLandmarksData::ConstPtr &)
 landmarkDataCallback - event-driven function which should be called when new landmark data is received More...
 
void odometryCallback (const nav_msgs::Odometry::ConstPtr &)
 odometryCallback - event-driven function which should be called when new odometry data is received More...
 
 Robot (ros::NodeHandle &nh, RobotFactory *parent, ParticleFilter *pf, uint robotNumber)
 Robot - constructor, creates a new Robot instance. More...
 
void targetCallback (const read_omni_dataset::BallData::ConstPtr &)
 targetCallBack - event-driven function which should be called when new target data is received More...
 
+ + + + +

+Protected Member Functions

void startNow ()
 startNow - starts the robot More...
 
+ + + + + + + + + + + + + + + + + + + +

+Protected Attributes

Eigen::Isometry2d initPose_
 
RobotFactoryparent_
 
ParticleFilterpf_
 
uint robotNumber_
 
ros::Subscriber sBall_
 
ros::Subscriber sLandmark_
 
ros::Subscriber sOdom_
 
bool started_
 
ros::Time timeStarted_
 
+

Detailed Description

+

The Robot class - Has the common variables and methods of all robots, and is the base class of any specialized robots who may derive from it. Teammates should be instances of this class.

+ +

Definition at line 86 of file pfuclt_omni_dataset.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
pfuclt::Robot::Robot (ros::NodeHandle & nh,
RobotFactoryparent,
ParticleFilterpf,
uint robotNumber 
)
+
+ +

Robot - constructor, creates a new Robot instance.

+
Parameters
+ + + + + + +
nh- reference to the node handler object
parent- reference to the robot factory creating this object
initPose- initial (x,y) pose of the robot
pf- reference to the particle filter to be used for this robot
robotNumber- the assigned number in the team
+
+
+ +

Definition at line 139 of file pfuclt_omni_dataset.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool pfuclt::Robot::hasStarted ()
+
+inline
+
+ +

hasStarted

+
Returns
+ +

Definition at line 137 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + + + + + +
void pfuclt::Robot::landmarkDataCallback (const read_omni_dataset::LRMLandmarksData::ConstPtr & landmarkData)
+
+ +

landmarkDataCallback - event-driven function which should be called when new landmark data is received

+ +

Definition at line 247 of file pfuclt_omni_dataset.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void pfuclt::Robot::odometryCallback (const nav_msgs::Odometry::ConstPtr & odometry)
+
+ +

odometryCallback - event-driven function which should be called when new odometry data is received

+ +

Definition at line 162 of file pfuclt_omni_dataset.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt::Robot::startNow ()
+
+protected
+
+ +

startNow - starts the robot

+ +

Definition at line 131 of file pfuclt_omni_dataset.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void pfuclt::Robot::targetCallback (const read_omni_dataset::BallData::ConstPtr & target)
+
+ +

targetCallBack - event-driven function which should be called when new target data is received

+ +

Definition at line 183 of file pfuclt_omni_dataset.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Eigen::Isometry2d pfuclt::Robot::initPose_
+
+protected
+
+ +

Definition at line 95 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
RobotFactory* pfuclt::Robot::parent_
+
+protected
+
+ +

Definition at line 89 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ParticleFilter* pfuclt::Robot::pf_
+
+protected
+
+ +

Definition at line 90 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint pfuclt::Robot::robotNumber_
+
+protected
+
+ +

Definition at line 94 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Subscriber pfuclt::Robot::sBall_
+
+protected
+
+ +

Definition at line 93 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Subscriber pfuclt::Robot::sLandmark_
+
+protected
+
+ +

Definition at line 93 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Subscriber pfuclt::Robot::sOdom_
+
+protected
+
+ +

Definition at line 93 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool pfuclt::Robot::started_
+
+protected
+
+ +

Definition at line 91 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Time pfuclt::Robot::timeStarted_
+
+protected
+
+ +

Definition at line 92 of file pfuclt_omni_dataset.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classpfuclt_1_1RobotFactory-members.html b/doc/html/c++/classpfuclt_1_1RobotFactory-members.html new file mode 100644 index 0000000..bf9ee02 --- /dev/null +++ b/doc/html/c++/classpfuclt_1_1RobotFactory-members.html @@ -0,0 +1,52 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
+
+
pfuclt::RobotFactory Member List
+
+
+ +

This is the complete list of members for pfuclt::RobotFactory, including all inherited members.

+ + + + + + + + +
areAllRobotsActive()pfuclt::RobotFactoryprivate
initializeFixedLandmarks()pfuclt::RobotFactory
nh_pfuclt::RobotFactoryprivate
pfpfuclt::RobotFactory
RobotFactory(ros::NodeHandle &nh)pfuclt::RobotFactory
robots_pfuclt::RobotFactoryprivate
tryInitializeParticles()pfuclt::RobotFactory
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classpfuclt_1_1RobotFactory.html b/doc/html/c++/classpfuclt_1_1RobotFactory.html new file mode 100644 index 0000000..e01c5e1 --- /dev/null +++ b/doc/html/c++/classpfuclt_1_1RobotFactory.html @@ -0,0 +1,236 @@ + +pfuclt_omni_dataset: pfuclt::RobotFactory Class Reference + + + + + + + + + +
+ +
+
pfuclt::RobotFactory Class Reference
+
+
+ +

The RobotFactory class - Creates and keeps information on the robot running the algorithm and its teammates. Is used as a middle-man between all robots. + More...

+ +

#include <pfuclt_omni_dataset.h>

+ + + + + + + + + + +

+Public Member Functions

void initializeFixedLandmarks ()
 initializeFixedLandmarks - will get a filename from the parameter server, and use its information to store landmark positions in the landmarks vector More...
 
 RobotFactory (ros::NodeHandle &nh)
 
void tryInitializeParticles ()
 tryInitializeParticles - checks if every robot is started, and if so, will initiate the particle filter More...
 
+ + + +

+Public Attributes

boost::shared_ptr< ParticleFilterpf
 
+ + + + +

+Private Member Functions

bool areAllRobotsActive ()
 areAllTeammatesActive - uses each robot's public methods to check if they have started yet More...
 
+ + + + + +

+Private Attributes

ros::NodeHandle & nh_
 
std::vector< Robot_ptrrobots_
 
+

Detailed Description

+

The RobotFactory class - Creates and keeps information on the robot running the algorithm and its teammates. Is used as a middle-man between all robots.

+ +

Definition at line 48 of file pfuclt_omni_dataset.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
pfuclt::RobotFactory::RobotFactory (ros::NodeHandle & nh)
+
+ +

Definition at line 59 of file pfuclt_omni_dataset.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool pfuclt::RobotFactory::areAllRobotsActive ()
+
+private
+
+ +

areAllTeammatesActive - uses each robot's public methods to check if they have started yet

+
Returns
true if every robot is active, false otherwise
+ +

Definition at line 120 of file pfuclt_omni_dataset.cpp.

+ +
+
+ +
+
+ + + + + + + +
void pfuclt::RobotFactory::initializeFixedLandmarks ()
+
+ +

initializeFixedLandmarks - will get a filename from the parameter server, and use its information to store landmark positions in the landmarks vector

+ +

Definition at line 92 of file pfuclt_omni_dataset.cpp.

+ +
+
+ +
+
+ + + + + + + +
void pfuclt::RobotFactory::tryInitializeParticles ()
+
+ +

tryInitializeParticles - checks if every robot is started, and if so, will initiate the particle filter

+ +

Definition at line 84 of file pfuclt_omni_dataset.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
ros::NodeHandle& pfuclt::RobotFactory::nh_
+
+private
+
+ +

Definition at line 52 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + +
boost::shared_ptr<ParticleFilter> pfuclt::RobotFactory::pf
+
+ +

Definition at line 63 of file pfuclt_omni_dataset.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<Robot_ptr> pfuclt::RobotFactory::robots_
+
+private
+
+ +

Definition at line 53 of file pfuclt_omni_dataset.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher-members.html b/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher-members.html new file mode 100644 index 0000000..a24a739 --- /dev/null +++ b/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher-members.html @@ -0,0 +1,131 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
+
+
pfuclt_ptcls::PFPublisher Member List
+
+
+ +

This is the complete list of members for pfuclt_ptcls::PFPublisher, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
assign(const pdata_t value)pfuclt_ptcls::ParticleFilter
assign(const pdata_t value, const uint index)pfuclt_ptcls::ParticleFilter
bufLandmarkObservations_pfuclt_ptcls::ParticleFilterprotected
bufTargetObservations_pfuclt_ptcls::ParticleFilterprotected
converged_pfuclt_ptcls::ParticleFilterprotected
copyParticle(particles_t &p_To, particles_t &p_From, uint i_To, uint i_From)pfuclt_ptcls::ParticleFilterinlineprotected
copyParticle(particles_t &p_To, particles_t &p_From, uint i_To, uint i_From, uint subFirst, uint subLast)pfuclt_ptcls::ParticleFilterinlineprotected
deltaIteration_pfuclt_ptcls::ParticleFilterprotected
durationSumpfuclt_ptcls::ParticleFilterprotected
dynamicReconfigureCallback(pfuclt_omni_dataset::DynamicConfig &)pfuclt_ptcls::ParticleFilter
dynamicVariables_pfuclt_ptcls::ParticleFilterprotected
estimate()pfuclt_ptcls::ParticleFilterprotected
estimatePublisher_pfuclt_ptcls::PFPublisherprivate
fuseRobots()pfuclt_ptcls::ParticleFilterprotected
fuseTarget()pfuclt_ptcls::ParticleFilterprotected
getPFReference()pfuclt_ptcls::PFPublisherinline
GT_sub_pfuclt_ptcls::PFPublisherprivate
gtDataCallback(const read_omni_dataset::LRMGTData::ConstPtr &)pfuclt_ptcls::PFPublisher
init()pfuclt_ptcls::ParticleFilter
init(const std::vector< double > &customRandInit, const std::vector< double > &customPosInit)pfuclt_ptcls::ParticleFilter
initialized_pfuclt_ptcls::ParticleFilterprotected
isInitialized()pfuclt_ptcls::ParticleFilterinline
iteration_osspfuclt_ptcls::ParticleFilter
iterationEvalTime_pfuclt_ptcls::ParticleFilterprotected
landmarksMap_pfuclt_ptcls::ParticleFilterprotected
latestObservationTime_pfuclt_ptcls::ParticleFilterprotected
mainRobotID_pfuclt_ptcls::ParticleFilterprotected
maxDeltaIteration_pfuclt_ptcls::ParticleFilterprotected
modifiedMultinomialResampler(uint startAt)pfuclt_ptcls::ParticleFilterprotected
msg_estimate_pfuclt_ptcls::PFPublisherprivate
msg_GT_pfuclt_ptcls::PFPublisherprivate
msg_particles_pfuclt_ptcls::PFPublisherprivate
nextIteration()pfuclt_ptcls::PFPublishervirtual
nh_pfuclt_ptcls::ParticleFilterprotected
nLandmarks_pfuclt_ptcls::ParticleFilterprotected
nParticles_pfuclt_ptcls::ParticleFilterprotected
nRobots_pfuclt_ptcls::ParticleFilterprotected
nStatesPerRobot_pfuclt_ptcls::ParticleFilterprotected
nSubParticleSets_pfuclt_ptcls::ParticleFilterprotected
nTargets_pfuclt_ptcls::ParticleFilterprotected
numberIterationspfuclt_ptcls::ParticleFilterprotected
O_TARGETpfuclt_ptcls::ParticleFilter
O_WEIGHTpfuclt_ptcls::ParticleFilter
odometryTime_pfuclt_ptcls::ParticleFilterprotected
operator[](int index)pfuclt_ptcls::ParticleFilterinline
operator[](int index) const pfuclt_ptcls::ParticleFilterinline
ParticleFilter(struct PFinitData &data)pfuclt_ptcls::ParticleFilter
particlePublisher_pfuclt_ptcls::PFPublisherprivate
particles_pfuclt_ptcls::ParticleFilterprotected
particleStdPublishers_pfuclt_ptcls::PFPublisherprivate
PFPublisher(struct ParticleFilter::PFinitData &data, struct PublishData publishData)pfuclt_ptcls::PFPublisher
predict(const uint robotNumber, const Odometry odom, const ros::Time stamp)pfuclt_ptcls::ParticleFilter
predictTarget()pfuclt_ptcls::ParticleFilterprotected
printWeights(std::string pre)pfuclt_ptcls::ParticleFilter
pubDatapfuclt_ptcls::PFPublisherprivate
publishEstimate()pfuclt_ptcls::PFPublisherprivate
publishGTData()pfuclt_ptcls::PFPublisherprivate
publishParticles()pfuclt_ptcls::PFPublisherprivate
publishRobotStates()pfuclt_ptcls::PFPublisherprivate
publishTargetObservations()pfuclt_ptcls::PFPublisherprivate
publishTargetState()pfuclt_ptcls::PFPublisherprivate
resample()pfuclt_ptcls::ParticleFilterprotected
resetWeights(pdata_t val)pfuclt_ptcls::ParticleFilterinlineprotected
resize_particles(const uint n)pfuclt_ptcls::PFPublisherinlinevirtual
robotBroadcasterspfuclt_ptcls::PFPublisherprivate
robotEstimatePublishers_pfuclt_ptcls::PFPublisherprivate
robotGTPublishers_pfuclt_ptcls::PFPublisherprivate
robotsUsed_pfuclt_ptcls::ParticleFilterprotected
saveAllLandmarkMeasurementsDone(const uint robotNumber)pfuclt_ptcls::ParticleFilter
saveAllTargetMeasurementsDone(const uint robotNumber)pfuclt_ptcls::ParticleFilter
savedLatestObservationTime_pfuclt_ptcls::ParticleFilterprotected
saveLandmarkObservation(const uint robotNumber, const uint landmarkNumber, const LandmarkObservation obs, ros::Time stamp)pfuclt_ptcls::ParticleFilterinline
saveLandmarkObservation(const uint robotNumber, const uint landmarkNumber, const bool found)pfuclt_ptcls::ParticleFilterinline
saveTargetObservation(const uint robotNumber, const TargetObservation obs, ros::Time stamp)pfuclt_ptcls::ParticleFilterinline
saveTargetObservation(const uint robotNumber, const bool found)pfuclt_ptcls::ParticleFilterinline
seed_pfuclt_ptcls::ParticleFilterprotected
size()pfuclt_ptcls::ParticleFilterinline
spreadTargetParticlesSphere(float particlesRatio, pdata_t center[3], float radius)pfuclt_ptcls::ParticleFilterprotected
state_pfuclt_ptcls::ParticleFilterprotected
targetEstimatePublisher_pfuclt_ptcls::PFPublisherprivate
targetGTPublisher_pfuclt_ptcls::PFPublisherprivate
targetIterationTime_pfuclt_ptcls::ParticleFilterprotected
targetObservationsPublisher_pfuclt_ptcls::PFPublisherprivate
targetParticlePublisher_pfuclt_ptcls::PFPublisherprivate
updateTargetIterationTime(ros::Time tRos)pfuclt_ptcls::ParticleFilterinline
weightComponents_pfuclt_ptcls::ParticleFilterprotected
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher.html b/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher.html new file mode 100644 index 0000000..c18c567 --- /dev/null +++ b/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher.html @@ -0,0 +1,934 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::PFPublisher Class Reference + + + + + + + + + +
+ +
+
pfuclt_ptcls::PFPublisher Class Reference
+
+
+ +

The PFPublisher class - implements publishing for the ParticleFilter class using ROS. + More...

+ +

#include <pfuclt_particles.h>

+
+Inheritance diagram for pfuclt_ptcls::PFPublisher:
+
+
Inheritance graph
+ + + +
[legend]
+ + + + +

+Classes

struct  PublishData
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ParticleFiltergetPFReference ()
 getPFReference - retrieve a reference to the base class's members More...
 
void gtDataCallback (const read_omni_dataset::LRMGTData::ConstPtr &)
 gtDataCallback - callback of ground truth data More...
 
void nextIteration ()
 nextIteration - extends the base class method to add the ROS publishing More...
 
 PFPublisher (struct ParticleFilter::PFinitData &data, struct PublishData publishData)
 PFPublisher - constructor. More...
 
void resize_particles (const uint n)
 resize_particles - change to a different number of particles and resize the publishing message More...
 
- Public Member Functions inherited from pfuclt_ptcls::ParticleFilter
void assign (const pdata_t value)
 assign - assign a value to every particle in all subsets More...
 
void assign (const pdata_t value, const uint index)
 assign - assign a value to every particle in one subset More...
 
void dynamicReconfigureCallback (pfuclt_omni_dataset::DynamicConfig &)
 dynamicReconfigureCallback - Dynamic reconfigure callback for dynamically setting variables during runtime More...
 
ParticleFiltergetPFReference ()
 getPFReference - retrieve a reference to this object - to be overloaded by deriving classes so that the base class can be returned More...
 
void init ()
 init - initialize the particle filter set with the default randomized values More...
 
void init (const std::vector< double > &customRandInit, const std::vector< double > &customPosInit)
 init - initialize the particle filter set with custom values More...
 
bool isInitialized ()
 isInitialized - simple interface to access private member initialized_ More...
 
subparticles_toperator[] (int index)
 operator [] - array subscripting access to the private particle set More...
 
const subparticles_toperator[] (int index) const
 operator [] - const version of the array subscripting access, when using it on const intantiations of the class More...
 
 ParticleFilter (struct PFinitData &data)
 ParticleFilter - constructor. More...
 
void predict (const uint robotNumber, const Odometry odom, const ros::Time stamp)
 predict - prediction step in the particle filter set with the received odometry More...
 
void printWeights (std::string pre)
 printWeights More...
 
void saveAllLandmarkMeasurementsDone (const uint robotNumber)
 saveAllLandmarkMeasurementsDone - call this function when all landmark measurements have been performed by a certain robot More...
 
void saveAllTargetMeasurementsDone (const uint robotNumber)
 saveAllTargetMeasurementsDone - call this function when all target measurements have been performed by a certain robot More...
 
void saveLandmarkObservation (const uint robotNumber, const uint landmarkNumber, const LandmarkObservation obs, ros::Time stamp)
 saveLandmarkObservation - saves the landmark observation to a buffer of observations More...
 
void saveLandmarkObservation (const uint robotNumber, const uint landmarkNumber, const bool found)
 saveLandmarkObservation - change the measurement buffer state More...
 
void saveTargetObservation (const uint robotNumber, const TargetObservation obs, ros::Time stamp)
 saveTargetObservation - saves the target observation to a buffer of observations More...
 
void saveTargetObservation (const uint robotNumber, const bool found)
 saveTargetObservation - change the measurement buffer state More...
 
std::size_t size ()
 size - interface to the size of the particle filter More...
 
void updateTargetIterationTime (ros::Time tRos)
 updateTargetIterationTime - the main robot should call this method after the target callback More...
 
+ + + + + + + + + + + + + +

+Private Member Functions

void publishEstimate ()
 
void publishGTData ()
 
void publishParticles ()
 
void publishRobotStates ()
 
void publishTargetObservations ()
 
void publishTargetState ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

ros::Publisher estimatePublisher_
 
ros::Subscriber GT_sub_
 
read_omni_dataset::Estimate msg_estimate_
 
read_omni_dataset::LRMGTData msg_GT_
 
pfuclt_omni_dataset::particles msg_particles_
 
ros::Publisher particlePublisher_
 
std::vector< ros::Publisher > particleStdPublishers_
 
struct PublishData pubData
 
std::vector< tf2_ros::TransformBroadcaster > robotBroadcasters
 
std::vector< ros::Publisher > robotEstimatePublishers_
 
std::vector< ros::Publisher > robotGTPublishers_
 
ros::Publisher targetEstimatePublisher_
 
ros::Publisher targetGTPublisher_
 
ros::Publisher targetObservationsPublisher_
 
ros::Publisher targetParticlePublisher_
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from pfuclt_ptcls::ParticleFilter
boost::shared_ptr< std::ostringstream > iteration_oss
 
uint O_TARGET
 
uint O_WEIGHT
 
- Protected Member Functions inherited from pfuclt_ptcls::ParticleFilter
void copyParticle (particles_t &p_To, particles_t &p_From, uint i_To, uint i_From)
 copyParticle - copies a whole particle from one particle set to another More...
 
void copyParticle (particles_t &p_To, particles_t &p_From, uint i_To, uint i_From, uint subFirst, uint subLast)
 copyParticle - copies some subparticle sets of a particle from one particle set to another More...
 
void estimate ()
 estimate - state estimation through weighted means of particle weights More...
 
void fuseRobots ()
 fuseRobots - fuse robot states step More...
 
void fuseTarget ()
 fuseTarget - fuse target state step More...
 
void modifiedMultinomialResampler (uint startAt)
 modifiedMultinomialResampler - a costly resampler that keeps 50% of the particles and implements the multinomial resampler on the rest More...
 
void predictTarget ()
 predictTarget - predict target state step More...
 
void resample ()
 resample - the resampling step More...
 
void resetWeights (pdata_t val)
 resetWeights - assign the value val to all particle weights More...
 
void spreadTargetParticlesSphere (float particlesRatio, pdata_t center[3], float radius)
 spreadTargetParticlesSphere - spread a percentage of the target particle in a sphere around center More...
 
- Protected Attributes inherited from pfuclt_ptcls::ParticleFilter
std::vector< std::vector< LandmarkObservation > > bufLandmarkObservations_
 
std::vector< TargetObservationbufTargetObservations_
 
bool converged_
 
ros::WallDuration deltaIteration_
 
ros::WallDuration durationSum
 
struct pfuclt_ptcls::ParticleFilter::dynamicVariables_s dynamicVariables_
 
bool initialized_
 
ros::WallTime iterationEvalTime_
 
const std::vector< Landmark > & landmarksMap_
 
ros::Time latestObservationTime_
 
const uint mainRobotID_
 
ros::WallDuration maxDeltaIteration_
 
ros::NodeHandle & nh_
 
const uint nLandmarks_
 
uint nParticles_
 
const uint nRobots_
 
const uint nStatesPerRobot_
 
const uint nSubParticleSets_
 
const uint nTargets_
 
uint16_t numberIterations
 
TimeEval odometryTime_
 
particles_t particles_
 
const std::vector< bool > & robotsUsed_
 
ros::Time savedLatestObservationTime_
 
RNGType seed_
 
struct State state_
 
TimeEval targetIterationTime_
 
particles_t weightComponents_
 
+

Detailed Description

+

The PFPublisher class - implements publishing for the ParticleFilter class using ROS.

+ +

Definition at line 561 of file pfuclt_particles.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
pfuclt_ptcls::PFPublisher::PFPublisher (struct ParticleFilter::PFinitDatadata,
struct PublishData publishData 
)
+
+ +

PFPublisher - constructor.

+
Parameters
+ + + +
data- a structure with the necessary initializing data for the ParticleFilter class
publishData- a structure with some more data for this class
+
+
+ +

Definition at line 841 of file pfuclt_particles.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
ParticleFilter* pfuclt_ptcls::PFPublisher::getPFReference ()
+
+inline
+
+ +

getPFReference - retrieve a reference to the base class's members

+
Remarks
C++ surely is awesome
+
Returns
returns a reference to the base ParticleFilter for this object
+ +

Definition at line 636 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + + + + +
void pfuclt_ptcls::PFPublisher::gtDataCallback (const read_omni_dataset::LRMGTData::ConstPtr & gtMsgReceived)
+
+ +

gtDataCallback - callback of ground truth data

+ +

Definition at line 1175 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::PFPublisher::nextIteration ()
+
+virtual
+
+ +

nextIteration - extends the base class method to add the ROS publishing

+ +

Reimplemented from pfuclt_ptcls::ParticleFilter.

+ +

Definition at line 1181 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::PFPublisher::publishEstimate ()
+
+private
+
+ +

Definition at line 1039 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::PFPublisher::publishGTData ()
+
+private
+
+ +

Definition at line 1122 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::PFPublisher::publishParticles ()
+
+private
+
+ +

Definition at line 905 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::PFPublisher::publishRobotStates ()
+
+private
+
+ +

Definition at line 967 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::PFPublisher::publishTargetObservations ()
+
+private
+
+ +

Definition at line 1049 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::PFPublisher::publishTargetState ()
+
+private
+
+ +

Definition at line 1011 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void pfuclt_ptcls::PFPublisher::resize_particles (const uint n)
+
+inlinevirtual
+
+ +

resize_particles - change to a different number of particles and resize the publishing message

+
Parameters
+ + +
n- the desired number of particles
+
+
+ +

Reimplemented from pfuclt_ptcls::ParticleFilter.

+ +

Definition at line 582 of file pfuclt_particles.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
ros::Publisher pfuclt_ptcls::PFPublisher::estimatePublisher_
+
+private
+
+ +

Definition at line 599 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Subscriber pfuclt_ptcls::PFPublisher::GT_sub_
+
+private
+
+ +

Definition at line 598 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
read_omni_dataset::Estimate pfuclt_ptcls::PFPublisher::msg_estimate_
+
+private
+
+ +

Definition at line 608 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
read_omni_dataset::LRMGTData pfuclt_ptcls::PFPublisher::msg_GT_
+
+private
+
+ +

Definition at line 606 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
pfuclt_omni_dataset::particles pfuclt_ptcls::PFPublisher::msg_particles_
+
+private
+
+ +

Definition at line 607 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Publisher pfuclt_ptcls::PFPublisher::particlePublisher_
+
+private
+
+ +

Definition at line 599 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<ros::Publisher> pfuclt_ptcls::PFPublisher::particleStdPublishers_
+
+private
+
+ +

Definition at line 601 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
struct PublishData pfuclt_ptcls::PFPublisher::pubData
+
+private
+
+ +

Definition at line 612 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<tf2_ros::TransformBroadcaster> pfuclt_ptcls::PFPublisher::robotBroadcasters
+
+private
+
+ +

Definition at line 610 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<ros::Publisher> pfuclt_ptcls::PFPublisher::robotEstimatePublishers_
+
+private
+
+ +

Definition at line 603 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<ros::Publisher> pfuclt_ptcls::PFPublisher::robotGTPublishers_
+
+private
+
+ +

Definition at line 602 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Publisher pfuclt_ptcls::PFPublisher::targetEstimatePublisher_
+
+private
+
+ +

Definition at line 599 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Publisher pfuclt_ptcls::PFPublisher::targetGTPublisher_
+
+private
+
+ +

Definition at line 599 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Publisher pfuclt_ptcls::PFPublisher::targetObservationsPublisher_
+
+private
+
+ +

Definition at line 604 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Publisher pfuclt_ptcls::PFPublisher::targetParticlePublisher_
+
+private
+
+ +

Definition at line 599 of file pfuclt_particles.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.map b/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.map new file mode 100644 index 0000000..3407b8f --- /dev/null +++ b/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.md5 b/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.md5 new file mode 100644 index 0000000..0725f5b --- /dev/null +++ b/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.md5 @@ -0,0 +1 @@ +5c4be85265bb4a48515ff4448eb99fab \ No newline at end of file diff --git a/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.png b/doc/html/c++/classpfuclt__ptcls_1_1PFPublisher__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4c900860766ce18ee0ec86a210ad4d7a348b6bb7 GIT binary patch literal 3506 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 literal 0 HcmV?d00001 diff --git a/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter-members.html b/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter-members.html new file mode 100644 index 0000000..81fd028 --- /dev/null +++ b/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter-members.html @@ -0,0 +1,110 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
+
+
pfuclt_ptcls::ParticleFilter Member List
+
+
+ +

This is the complete list of members for pfuclt_ptcls::ParticleFilter, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
assign(const pdata_t value)pfuclt_ptcls::ParticleFilter
assign(const pdata_t value, const uint index)pfuclt_ptcls::ParticleFilter
bufLandmarkObservations_pfuclt_ptcls::ParticleFilterprotected
bufTargetObservations_pfuclt_ptcls::ParticleFilterprotected
converged_pfuclt_ptcls::ParticleFilterprotected
copyParticle(particles_t &p_To, particles_t &p_From, uint i_To, uint i_From)pfuclt_ptcls::ParticleFilterinlineprotected
copyParticle(particles_t &p_To, particles_t &p_From, uint i_To, uint i_From, uint subFirst, uint subLast)pfuclt_ptcls::ParticleFilterinlineprotected
deltaIteration_pfuclt_ptcls::ParticleFilterprotected
durationSumpfuclt_ptcls::ParticleFilterprotected
dynamicReconfigureCallback(pfuclt_omni_dataset::DynamicConfig &)pfuclt_ptcls::ParticleFilter
dynamicServer_pfuclt_ptcls::ParticleFilterprivate
dynamicVariables_pfuclt_ptcls::ParticleFilterprotected
estimate()pfuclt_ptcls::ParticleFilterprotected
fuseRobots()pfuclt_ptcls::ParticleFilterprotected
fuseTarget()pfuclt_ptcls::ParticleFilterprotected
getPFReference()pfuclt_ptcls::ParticleFilterinline
init()pfuclt_ptcls::ParticleFilter
init(const std::vector< double > &customRandInit, const std::vector< double > &customPosInit)pfuclt_ptcls::ParticleFilter
initialized_pfuclt_ptcls::ParticleFilterprotected
isInitialized()pfuclt_ptcls::ParticleFilterinline
iteration_osspfuclt_ptcls::ParticleFilter
iterationEvalTime_pfuclt_ptcls::ParticleFilterprotected
landmarksMap_pfuclt_ptcls::ParticleFilterprotected
latestObservationTime_pfuclt_ptcls::ParticleFilterprotected
mainRobotID_pfuclt_ptcls::ParticleFilterprotected
maxDeltaIteration_pfuclt_ptcls::ParticleFilterprotected
modifiedMultinomialResampler(uint startAt)pfuclt_ptcls::ParticleFilterprotected
mutex_pfuclt_ptcls::ParticleFilterprivate
nextIteration()pfuclt_ptcls::ParticleFilterinlineprotectedvirtual
nh_pfuclt_ptcls::ParticleFilterprotected
nLandmarks_pfuclt_ptcls::ParticleFilterprotected
nParticles_pfuclt_ptcls::ParticleFilterprotected
nRobots_pfuclt_ptcls::ParticleFilterprotected
nStatesPerRobot_pfuclt_ptcls::ParticleFilterprotected
nSubParticleSets_pfuclt_ptcls::ParticleFilterprotected
nTargets_pfuclt_ptcls::ParticleFilterprotected
numberIterationspfuclt_ptcls::ParticleFilterprotected
O_TARGETpfuclt_ptcls::ParticleFilter
O_WEIGHTpfuclt_ptcls::ParticleFilter
odometryTime_pfuclt_ptcls::ParticleFilterprotected
operator[](int index)pfuclt_ptcls::ParticleFilterinline
operator[](int index) const pfuclt_ptcls::ParticleFilterinline
ParticleFilter(struct PFinitData &data)pfuclt_ptcls::ParticleFilter
particles_pfuclt_ptcls::ParticleFilterprotected
predict(const uint robotNumber, const Odometry odom, const ros::Time stamp)pfuclt_ptcls::ParticleFilter
predictTarget()pfuclt_ptcls::ParticleFilterprotected
printWeights(std::string pre)pfuclt_ptcls::ParticleFilter
resample()pfuclt_ptcls::ParticleFilterprotected
resetWeights(pdata_t val)pfuclt_ptcls::ParticleFilterinlineprotected
resize_particles(const uint n)pfuclt_ptcls::ParticleFilterinlineprotectedvirtual
robotsUsed_pfuclt_ptcls::ParticleFilterprotected
saveAllLandmarkMeasurementsDone(const uint robotNumber)pfuclt_ptcls::ParticleFilter
saveAllTargetMeasurementsDone(const uint robotNumber)pfuclt_ptcls::ParticleFilter
savedLatestObservationTime_pfuclt_ptcls::ParticleFilterprotected
saveLandmarkObservation(const uint robotNumber, const uint landmarkNumber, const LandmarkObservation obs, ros::Time stamp)pfuclt_ptcls::ParticleFilterinline
saveLandmarkObservation(const uint robotNumber, const uint landmarkNumber, const bool found)pfuclt_ptcls::ParticleFilterinline
saveTargetObservation(const uint robotNumber, const TargetObservation obs, ros::Time stamp)pfuclt_ptcls::ParticleFilterinline
saveTargetObservation(const uint robotNumber, const bool found)pfuclt_ptcls::ParticleFilterinline
seed_pfuclt_ptcls::ParticleFilterprotected
size()pfuclt_ptcls::ParticleFilterinline
spreadTargetParticlesSphere(float particlesRatio, pdata_t center[3], float radius)pfuclt_ptcls::ParticleFilterprotected
state_pfuclt_ptcls::ParticleFilterprotected
targetIterationTime_pfuclt_ptcls::ParticleFilterprotected
updateTargetIterationTime(ros::Time tRos)pfuclt_ptcls::ParticleFilterinline
weightComponents_pfuclt_ptcls::ParticleFilterprotected
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter.html b/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter.html new file mode 100644 index 0000000..21b60e6 --- /dev/null +++ b/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter.html @@ -0,0 +1,2078 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::ParticleFilter Class Reference + + + + + + + + + + +
+ +

#include <pfuclt_particles.h>

+
+Inheritance diagram for pfuclt_ptcls::ParticleFilter:
+
+
Inheritance graph
+ + + +
[legend]
+ + + + + + + + + + +

+Classes

struct  dynamicVariables_s
 
struct  PFinitData
 The PFinitData struct - provides encapsulation to the initial data necessary to construct a ParticleFilter instance. More...
 
struct  State
 The state_s struct - defines a structure to hold state information for the particle filter class. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void assign (const pdata_t value)
 assign - assign a value to every particle in all subsets More...
 
void assign (const pdata_t value, const uint index)
 assign - assign a value to every particle in one subset More...
 
void dynamicReconfigureCallback (pfuclt_omni_dataset::DynamicConfig &)
 dynamicReconfigureCallback - Dynamic reconfigure callback for dynamically setting variables during runtime More...
 
ParticleFiltergetPFReference ()
 getPFReference - retrieve a reference to this object - to be overloaded by deriving classes so that the base class can be returned More...
 
void init ()
 init - initialize the particle filter set with the default randomized values More...
 
void init (const std::vector< double > &customRandInit, const std::vector< double > &customPosInit)
 init - initialize the particle filter set with custom values More...
 
bool isInitialized ()
 isInitialized - simple interface to access private member initialized_ More...
 
subparticles_toperator[] (int index)
 operator [] - array subscripting access to the private particle set More...
 
const subparticles_toperator[] (int index) const
 operator [] - const version of the array subscripting access, when using it on const intantiations of the class More...
 
 ParticleFilter (struct PFinitData &data)
 ParticleFilter - constructor. More...
 
void predict (const uint robotNumber, const Odometry odom, const ros::Time stamp)
 predict - prediction step in the particle filter set with the received odometry More...
 
void printWeights (std::string pre)
 printWeights More...
 
void saveAllLandmarkMeasurementsDone (const uint robotNumber)
 saveAllLandmarkMeasurementsDone - call this function when all landmark measurements have been performed by a certain robot More...
 
void saveAllTargetMeasurementsDone (const uint robotNumber)
 saveAllTargetMeasurementsDone - call this function when all target measurements have been performed by a certain robot More...
 
void saveLandmarkObservation (const uint robotNumber, const uint landmarkNumber, const LandmarkObservation obs, ros::Time stamp)
 saveLandmarkObservation - saves the landmark observation to a buffer of observations More...
 
void saveLandmarkObservation (const uint robotNumber, const uint landmarkNumber, const bool found)
 saveLandmarkObservation - change the measurement buffer state More...
 
void saveTargetObservation (const uint robotNumber, const TargetObservation obs, ros::Time stamp)
 saveTargetObservation - saves the target observation to a buffer of observations More...
 
void saveTargetObservation (const uint robotNumber, const bool found)
 saveTargetObservation - change the measurement buffer state More...
 
std::size_t size ()
 size - interface to the size of the particle filter More...
 
void updateTargetIterationTime (ros::Time tRos)
 updateTargetIterationTime - the main robot should call this method after the target callback More...
 
+ + + + + + + +

+Public Attributes

boost::shared_ptr< std::ostringstream > iteration_oss
 
uint O_TARGET
 
uint O_WEIGHT
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

void copyParticle (particles_t &p_To, particles_t &p_From, uint i_To, uint i_From)
 copyParticle - copies a whole particle from one particle set to another More...
 
void copyParticle (particles_t &p_To, particles_t &p_From, uint i_To, uint i_From, uint subFirst, uint subLast)
 copyParticle - copies some subparticle sets of a particle from one particle set to another More...
 
void estimate ()
 estimate - state estimation through weighted means of particle weights More...
 
void fuseRobots ()
 fuseRobots - fuse robot states step More...
 
void fuseTarget ()
 fuseTarget - fuse target state step More...
 
void modifiedMultinomialResampler (uint startAt)
 modifiedMultinomialResampler - a costly resampler that keeps 50% of the particles and implements the multinomial resampler on the rest More...
 
virtual void nextIteration ()
 nextIteration - perform final steps before next iteration More...
 
void predictTarget ()
 predictTarget - predict target state step More...
 
void resample ()
 resample - the resampling step More...
 
void resetWeights (pdata_t val)
 resetWeights - assign the value val to all particle weights More...
 
virtual void resize_particles (const uint n)
 resize_particles - change to a different number of particles More...
 
void spreadTargetParticlesSphere (float particlesRatio, pdata_t center[3], float radius)
 spreadTargetParticlesSphere - spread a percentage of the target particle in a sphere around center More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

std::vector< std::vector< LandmarkObservation > > bufLandmarkObservations_
 
std::vector< TargetObservationbufTargetObservations_
 
bool converged_
 
ros::WallDuration deltaIteration_
 
ros::WallDuration durationSum
 
struct pfuclt_ptcls::ParticleFilter::dynamicVariables_s dynamicVariables_
 
bool initialized_
 
ros::WallTime iterationEvalTime_
 
const std::vector< Landmark > & landmarksMap_
 
ros::Time latestObservationTime_
 
const uint mainRobotID_
 
ros::WallDuration maxDeltaIteration_
 
ros::NodeHandle & nh_
 
const uint nLandmarks_
 
uint nParticles_
 
const uint nRobots_
 
const uint nStatesPerRobot_
 
const uint nSubParticleSets_
 
const uint nTargets_
 
uint16_t numberIterations
 
TimeEval odometryTime_
 
particles_t particles_
 
const std::vector< bool > & robotsUsed_
 
ros::Time savedLatestObservationTime_
 
RNGType seed_
 
struct State state_
 
TimeEval targetIterationTime_
 
particles_t weightComponents_
 
+ + + + + +

+Private Attributes

dynamic_reconfigure::Server< pfuclt_omni_dataset::DynamicConfig > dynamicServer_
 
boost::mutex mutex_
 
+

Detailed Description

+
+

Definition at line 96 of file pfuclt_particles.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
pfuclt_ptcls::ParticleFilter::ParticleFilter (struct PFinitDatadata)
+
+ +

ParticleFilter - constructor.

+
Parameters
+ + +
data- reference to a struct of PFinitData containing the necessary information to construct the Particle Filter
+
+
+ +

Definition at line 29 of file pfuclt_particles.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void pfuclt_ptcls::ParticleFilter::assign (const pdata_t value)
+
+ +

assign - assign a value to every particle in all subsets

+
Parameters
+ + +
value- the value to assign
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void pfuclt_ptcls::ParticleFilter::assign (const pdata_t value,
const uint index 
)
+
+ +

assign - assign a value to every particle in one subset

+
Parameters
+ + + +
value- the value to assign
index- the subset index [0,N]
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void pfuclt_ptcls::ParticleFilter::copyParticle (particles_tp_To,
particles_tp_From,
uint i_To,
uint i_From 
)
+
+inlineprotected
+
+ +

copyParticle - copies a whole particle from one particle set to another

+
Parameters
+ + + + + +
p_To- the destination particle set
p_From- the origin particle set
i_To- the index of the particle to copy to
i_From- the index of the particle to copy from
+
+
+
Remarks
Make sure the sizes of p_To and p_From are the same
+ +

Definition at line 243 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void pfuclt_ptcls::ParticleFilter::copyParticle (particles_tp_To,
particles_tp_From,
uint i_To,
uint i_From,
uint subFirst,
uint subLast 
)
+
+inlineprotected
+
+ +

copyParticle - copies some subparticle sets of a particle from one particle set to another

+
Parameters
+ + + + + + + +
p_To- the destination particle set
p_From- the origin particle set
i_To- the index of the particle to copy to
i_From- the index of the particle to copy from
subFirst- the first subparticle set index
subLast- the last subparticle set index
+
+
+
Remarks
Make sure the sizes of p_To and p_From are the same
+ +

Definition at line 260 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + + + + +
void pfuclt_ptcls::ParticleFilter::dynamicReconfigureCallback (pfuclt_omni_dataset::DynamicConfig & config)
+
+ +

dynamicReconfigureCallback - Dynamic reconfigure callback for dynamically setting variables during runtime

+ +

Definition at line 62 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::ParticleFilter::estimate ()
+
+protected
+
+ +

estimate - state estimation through weighted means of particle weights

+ +

Definition at line 516 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::ParticleFilter::fuseRobots ()
+
+protected
+
+ +

fuseRobots - fuse robot states step

+ +

Definition at line 154 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::ParticleFilter::fuseTarget ()
+
+protected
+
+ +

fuseTarget - fuse target state step

+ +

Definition at line 287 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ParticleFilter* pfuclt_ptcls::ParticleFilter::getPFReference ()
+
+inline
+
+ +

getPFReference - retrieve a reference to this object - to be overloaded by deriving classes so that the base class can be returned

+
Returns
reference to this object
+ +

Definition at line 386 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + + + +
void pfuclt_ptcls::ParticleFilter::init ()
+
+ +

init - initialize the particle filter set with the default randomized values

+ +

Definition at line 629 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void pfuclt_ptcls::ParticleFilter::init (const std::vector< double > & customRandInit,
const std::vector< double > & customPosInit 
)
+
+ +

init - initialize the particle filter set with custom values

+
Parameters
+ + + +
customRandInit- vector of doubles with the following form: <lvalue, rvalue, lvalue, rvalue, ...> which will be used as the limits of the uniform distribution. This vector should have a size equal to twice the number of dimensions
customPosInit- vector of doubles with the following form <x,y,theta,x,y,theta,...> with size equal to nStatesPerRobot*nRobots
+
+
+ +

Definition at line 652 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool pfuclt_ptcls::ParticleFilter::isInitialized ()
+
+inline
+
+ +

isInitialized - simple interface to access private member initialized_

+
Returns
true if particle filter has been initialized, false otherwise
+ +

Definition at line 460 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void pfuclt_ptcls::ParticleFilter::modifiedMultinomialResampler (uint startAt)
+
+protected
+
+ +

modifiedMultinomialResampler - a costly resampler that keeps 50% of the particles and implements the multinomial resampler on the rest

+ +

Definition at line 413 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void pfuclt_ptcls::ParticleFilter::nextIteration ()
+
+inlineprotectedvirtual
+
+ +

nextIteration - perform final steps before next iteration

+ +

Reimplemented in pfuclt_ptcls::PFPublisher.

+ +

Definition at line 321 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
subparticles_t& pfuclt_ptcls::ParticleFilter::operator[] (int index)
+
+inline
+
+ +

operator [] - array subscripting access to the private particle set

+
Parameters
+ + +
index- the subparticle set index number to access
+
+
+
Returns
the subparticles_t object reference located at particles_[index]
+ +

Definition at line 411 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const subparticles_t& pfuclt_ptcls::ParticleFilter::operator[] (int index) const
+
+inline
+
+ +

operator [] - const version of the array subscripting access, when using it on const intantiations of the class

+
Parameters
+ + +
index- the subparticle set index number to access
+
+
+
Returns
a const subparticles_t object reference located at particles_[index]
+ +

Definition at line 420 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void pfuclt_ptcls::ParticleFilter::predict (const uint robotNumber,
const Odometry odom,
const ros::Time stamp 
)
+
+ +

predict - prediction step in the particle filter set with the received odometry

+
Parameters
+ + + + +
robotNumber- the robot number [0,N]
odometry- a structure containing the latest odometry readings
time- a ros::Time structure with the timestamp for this data
+
+
+
Warning
only for the omni dataset configuration
+ +

Definition at line 700 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::ParticleFilter::predictTarget ()
+
+protected
+
+ +

predictTarget - predict target state step

+
Parameters
+ + +
robotNumber- the robot performing, for debugging purposes
+
+
+ +

Definition at line 129 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void pfuclt_ptcls::ParticleFilter::printWeights (std::string pre)
+
+ +

printWeights

+ +

Definition at line 617 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void pfuclt_ptcls::ParticleFilter::resample ()
+
+protected
+
+ +

resample - the resampling step

+ +

Definition at line 461 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void pfuclt_ptcls::ParticleFilter::resetWeights (pdata_t val)
+
+inlineprotected
+
+ +

resetWeights - assign the value val to all particle weights

+ +

Definition at line 270 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void pfuclt_ptcls::ParticleFilter::resize_particles (const uint n)
+
+inlineprotectedvirtual
+
+ +

resize_particles - change to a different number of particles

+
Parameters
+ + +
n- the desired number of particles
+
+
+ +

Reimplemented in pfuclt_ptcls::PFPublisher.

+ +

Definition at line 327 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + + + + +
void pfuclt_ptcls::ParticleFilter::saveAllLandmarkMeasurementsDone (const uint robotNumber)
+
+ +

saveAllLandmarkMeasurementsDone - call this function when all landmark measurements have been performed by a certain robot

+
Parameters
+ + +
robotNumber- the robot number performing the measurements
+
+
+ +

Definition at line 831 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void pfuclt_ptcls::ParticleFilter::saveAllTargetMeasurementsDone (const uint robotNumber)
+
+ +

saveAllTargetMeasurementsDone - call this function when all target measurements have been performed by a certain robot

+
Parameters
+ + +
robotNumber- the robot number performing the measurements
+
+
+ +

Definition at line 836 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void pfuclt_ptcls::ParticleFilter::saveLandmarkObservation (const uint robotNumber,
const uint landmarkNumber,
const LandmarkObservation obs,
ros::Time stamp 
)
+
+inline
+
+ +

saveLandmarkObservation - saves the landmark observation to a buffer of observations

+
Parameters
+ + + + +
robotNumber- the robot number in the team
landmarkNumber- the landmark serial id
obs- the observation data as a structure defined in this file
+
+
+ +

Definition at line 476 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void pfuclt_ptcls::ParticleFilter::saveLandmarkObservation (const uint robotNumber,
const uint landmarkNumber,
const bool found 
)
+
+inline
+
+ +

saveLandmarkObservation - change the measurement buffer state

+
Parameters
+ + + +
robotNumber- the robot number in the team
found- whether this landmark has been found
+
+
+ +

Definition at line 490 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void pfuclt_ptcls::ParticleFilter::saveTargetObservation (const uint robotNumber,
const TargetObservation obs,
ros::Time stamp 
)
+
+inline
+
+ +

saveTargetObservation - saves the target observation to a buffer of observations

+
Parameters
+ + + +
robotNumber- the robot number in the team
obs- the observation data as a structure defined in this file
+
+
+ +

Definition at line 511 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void pfuclt_ptcls::ParticleFilter::saveTargetObservation (const uint robotNumber,
const bool found 
)
+
+inline
+
+ +

saveTargetObservation - change the measurement buffer state

+
Parameters
+ + + +
robotNumber- the robot number in the team
found- whether the target has been found
+
+
+ +

Definition at line 543 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::size_t pfuclt_ptcls::ParticleFilter::size ()
+
+inline
+
+ +

size - interface to the size of the particle filter

+
Returns
- the number of subparticle sets
+ +

Definition at line 466 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void pfuclt_ptcls::ParticleFilter::spreadTargetParticlesSphere (float particlesRatio,
pdata_t center[3],
float radius 
)
+
+protected
+
+ +

spreadTargetParticlesSphere - spread a percentage of the target particle in a sphere around center

+
Parameters
+ + + + +
particlesRatio- float between 0 and 1, corresponding to the percentage of particles that will be spread
center- center of the sphere [x,y,z]
radius- in meters
+
+
+ +

Definition at line 114 of file pfuclt_particles.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void pfuclt_ptcls::ParticleFilter::updateTargetIterationTime (ros::Time tRos)
+
+inline
+
+ +

updateTargetIterationTime - the main robot should call this method after the target callback

+
Parameters
+ + +
tRos- time variable to be used in calculating the target's iteration time
+
+
+ +

Definition at line 369 of file pfuclt_particles.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<LandmarkObservation> > pfuclt_ptcls::ParticleFilter::bufLandmarkObservations_
+
+protected
+
+ +

Definition at line 223 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<TargetObservation> pfuclt_ptcls::ParticleFilter::bufTargetObservations_
+
+protected
+
+ +

Definition at line 224 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool pfuclt_ptcls::ParticleFilter::converged_
+
+protected
+
+ +

Definition at line 232 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::WallDuration pfuclt_ptcls::ParticleFilter::deltaIteration_
+
+protected
+
+ +

Definition at line 227 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::WallDuration pfuclt_ptcls::ParticleFilter::durationSum
+
+protected
+
+ +

Definition at line 228 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
dynamic_reconfigure::Server<pfuclt_omni_dataset::DynamicConfig> pfuclt_ptcls::ParticleFilter::dynamicServer_
+
+private
+
+ +

Definition at line 101 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
struct pfuclt_ptcls::ParticleFilter::dynamicVariables_s pfuclt_ptcls::ParticleFilter::dynamicVariables_
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
bool pfuclt_ptcls::ParticleFilter::initialized_
+
+protected
+
+ +

Definition at line 222 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + +
boost::shared_ptr<std::ostringstream> pfuclt_ptcls::ParticleFilter::iteration_oss
+
+ +

Definition at line 347 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::WallTime pfuclt_ptcls::ParticleFilter::iterationEvalTime_
+
+protected
+
+ +

Definition at line 226 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const std::vector<Landmark>& pfuclt_ptcls::ParticleFilter::landmarksMap_
+
+protected
+
+ +

Definition at line 212 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Time pfuclt_ptcls::ParticleFilter::latestObservationTime_
+
+protected
+
+ +

Definition at line 231 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const uint pfuclt_ptcls::ParticleFilter::mainRobotID_
+
+protected
+
+ +

Definition at line 211 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::WallDuration pfuclt_ptcls::ParticleFilter::maxDeltaIteration_
+
+protected
+
+ +

Definition at line 227 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
boost::mutex pfuclt_ptcls::ParticleFilter::mutex_
+
+private
+
+ +

Definition at line 99 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::NodeHandle& pfuclt_ptcls::ParticleFilter::nh_
+
+protected
+
+ +

Definition at line 209 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const uint pfuclt_ptcls::ParticleFilter::nLandmarks_
+
+protected
+
+ +

Definition at line 218 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint pfuclt_ptcls::ParticleFilter::nParticles_
+
+protected
+
+ +

Definition at line 210 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const uint pfuclt_ptcls::ParticleFilter::nRobots_
+
+protected
+
+ +

Definition at line 215 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const uint pfuclt_ptcls::ParticleFilter::nStatesPerRobot_
+
+protected
+
+ +

Definition at line 216 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const uint pfuclt_ptcls::ParticleFilter::nSubParticleSets_
+
+protected
+
+ +

Definition at line 217 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const uint pfuclt_ptcls::ParticleFilter::nTargets_
+
+protected
+
+ +

Definition at line 214 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint16_t pfuclt_ptcls::ParticleFilter::numberIterations
+
+protected
+
+ +

Definition at line 229 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + +
uint pfuclt_ptcls::ParticleFilter::O_TARGET
+
+ +

Definition at line 348 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + +
uint pfuclt_ptcls::ParticleFilter::O_WEIGHT
+
+ +

Definition at line 348 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TimeEval pfuclt_ptcls::ParticleFilter::odometryTime_
+
+protected
+
+ +

Definition at line 225 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
particles_t pfuclt_ptcls::ParticleFilter::particles_
+
+protected
+
+ +

Definition at line 219 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const std::vector<bool>& pfuclt_ptcls::ParticleFilter::robotsUsed_
+
+protected
+
+ +

Definition at line 213 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ros::Time pfuclt_ptcls::ParticleFilter::savedLatestObservationTime_
+
+protected
+
+ +

Definition at line 231 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
RNGType pfuclt_ptcls::ParticleFilter::seed_
+
+protected
+
+ +

Definition at line 221 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
struct State pfuclt_ptcls::ParticleFilter::state_
+
+protected
+
+ +

Definition at line 230 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TimeEval pfuclt_ptcls::ParticleFilter::targetIterationTime_
+
+protected
+
+ +

Definition at line 225 of file pfuclt_particles.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
particles_t pfuclt_ptcls::ParticleFilter::weightComponents_
+
+protected
+
+ +

Definition at line 220 of file pfuclt_particles.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.map b/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.map new file mode 100644 index 0000000..9668dff --- /dev/null +++ b/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.md5 b/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.md5 new file mode 100644 index 0000000..de0e1fc --- /dev/null +++ b/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.md5 @@ -0,0 +1 @@ +16d6a0efd13ce2a003f46ac679435c98 \ No newline at end of file diff --git a/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.png b/doc/html/c++/classpfuclt__ptcls_1_1ParticleFilter__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e5efb03362e8923636e8f37e017d8f4b586516d0 GIT binary patch literal 3472 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 literal 0 HcmV?d00001 diff --git a/doc/html/c++/dir_000005_000006.html b/doc/html/c++/dir_000005_000006.html new file mode 100644 index 0000000..4bcbf3c --- /dev/null +++ b/doc/html/c++/dir_000005_000006.html @@ -0,0 +1,31 @@ + +pfuclt_omni_dataset: src -> include Relation + + + + + + + + + + +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/dir_5302bec79b689f0f247f14453837c900.html b/doc/html/c++/dir_5302bec79b689f0f247f14453837c900.html index a9645c6..e356651 100644 --- a/doc/html/c++/dir_5302bec79b689f0f247f14453837c900.html +++ b/doc/html/c++/dir_5302bec79b689f0f247f14453837c900.html @@ -9,6 +9,7 @@ @@ -40,7 +41,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/dir_59dc6fcc83246be1771c8295efb81319.html b/doc/html/c++/dir_59dc6fcc83246be1771c8295efb81319.html index 0ac7a68..0f764bb 100644 --- a/doc/html/c++/dir_59dc6fcc83246be1771c8295efb81319.html +++ b/doc/html/c++/dir_59dc6fcc83246be1771c8295efb81319.html @@ -9,6 +9,7 @@ @@ -42,7 +43,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 544953d..eeed4b4 100644 --- a/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -9,6 +9,7 @@ @@ -28,6 +29,16 @@
src Directory Reference
+
+Directory dependency graph for src:
+
+
src
+ + + + + +
@@ -46,7 +57,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map b/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map new file mode 100644 index 0000000..aba3a8b --- /dev/null +++ b/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 new file mode 100644 index 0000000..d1aaaf2 --- /dev/null +++ b/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 @@ -0,0 +1 @@ +027741ffd5635663ee38ccb9637ec198 \ No newline at end of file diff --git a/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png b/doc/html/c++/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..1a30c8408ed1bc43848b2eb9d897df9813983a75 GIT binary patch literal 2201 zcma)8cTm&W7XE=iK-%(HEYU>;37{epnluXrqk@qVL`ncDk&Y4!7y@CDD$P7VL{7&#r z0087KUVzz)qJwDXOG}APRhg0@QIPVohQomGKNh92Bntqf5f@=+k&y+9B!Z2@9JsSd zN9EaL1KA^G^tR+)D{zWX-P(p>IC_jC6Ok-Y%w(HnS*0CTn_cj_yEoBqHR<2StkYge zZJ)@FRo|Dc=kB}<&A?7cNZdBO_Y2_|rg{3YqZVtcwTJlrK-da(Zor&8eb{2oB6?%7 zq=fIk@us9ABUxG;B#*0AZm>?aIS+%VCwA>?aM%41VvIjU2H$xcS6qDfg=^jM%2-I> z;NS(oM~1dXF0pGkIoVANKKt>b7C>q8Kzw;CoZYt@%hQr`fdoU;)v}a`UCDGGm=9D9 zx>qSL?SIh!n1=Yotc{r9g%e>9nYZZOE^*(!nF7ruv%2NcDAUcQR*k_Reo@(C6w=9z zn3oq4@>1>i zyQe${=R0x-@b^>LrTXLHS6c&63V?8-RA0El$q%qnJhP&X`TRkmek8aax1uR3(YxnC z=2DOD_eA&aM_gQ7qyS09TWPdFQL?tFdx*6rUyM!w0n zw-ewo+a6oPEqnFR0Kh=Y;-aFm7fB?J!HSU+3IgCam(LGyI1_7Qgw_KD^F;Rwcu-JK zb4)@47QftnC_Ex!a+Y}r>OW>or3ujMj?!|B5qXdL2%l^WkUfO4&O5+0f7r^%He5t32nLy1LSANVhNA$49FU1OnMPIVD-= z9)I>=j^wXTLTF+?e@JOh-Cg?N(DO{jtzj z`|Wfwk&%1K%E|`+aNM$sveWHf#Cp$k=UljO!Pe}OpeM-BPx@3JaVKm`hCUPa?6Toxu=rLpkNBLE4Qg@%;&K43t0Gm|9+59=ph?@K|#_00!Sf z7Hb#1GU}hW+3Xp)75E~7w&r7?NqhQKi^qsFB`FLI4PE;q+@BsjV2Oe5)^Uk94E$5L zWjz7&^70zLc~Y$)Aixg+0R|UW@1L$nPfw>(C+S*`2gOy@>dU|5M*w?58n8Ud&s2D}`H2rvGmG1UQ1is&crd&;HWb2GMM{>@mr7qn3$hm8uoa} z&jpP@D4)`{kE&vE=r)~EdXQ$|LKj~;=q zm0fM??DSq7uC2$fS6A~z_M)I_o;*G6^Uwyu8*SXjBA+H_l*mg6s@R++o+(b&TvhS% z3oxMa>#x1d%>c>t_C26?sxxz5xI9&ZUk_X0@rpAt6kHl{hB>*ppaH#CZ&E&KA_^$$ zU*{Yg9F#30mtsY><2TWgaB01-2(EqlG+AUN&x(rfR##X1jlGEu-JZ7GxMgL74h%f1 zq|_L>90%O*oT3T@;ieIv3#vULB8&|U4J8MZ5NI6Elw^YG;4cRT2IhRJsWHF_m#FsG zi5AJ~p&$`X3q5U6QhZmcB(N#vJ@Pt&6?(Fk9gx5dhz>^SdXRGktE*n^_f%qLjPftP z8sTt2v>~3;Db#LHD;@@2d7Zs0wVe;m3FMShpC1w6XQrkyK94n31X*9cEMMP&pUl}S zf>zB0!6ejLL|l}+$ymrXb14f+*w-T&=aLktG@3FBh0@Z|S;;bcCnO?WT~jr$6pl}K zWnFUi_t#$Kk7drzqRnvv={Xj;bD}jV=gZ`z7ZQmae@8O=xUgUu5>h_4<-C4+I9^-% z1yc}dF80a2BDcGzr^~C#*3wd3MMcGqKp^y*79cd4B(vNHIUPuV z6lWUR4vRIat*zCbVHH{wHAbzykCT+8`#_1U6BH_yYD@?to)T;9k0)x6F@JIv{+}7f ze_mjB*N(WT+py3S8`|CzdjR=u&Led4pXAbN5<-aCv8*m1}HFsOr1&w}x#!FuO Q@z($@S|MQNmY#9{1u7Xc!vFvP literal 0 HcmV?d00001 diff --git a/doc/html/c++/dir_95e29a8b8ee7c54052c171a88bb95675.html b/doc/html/c++/dir_95e29a8b8ee7c54052c171a88bb95675.html index a2bd876..10534a2 100644 --- a/doc/html/c++/dir_95e29a8b8ee7c54052c171a88bb95675.html +++ b/doc/html/c++/dir_95e29a8b8ee7c54052c171a88bb95675.html @@ -9,6 +9,7 @@ @@ -40,7 +41,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/dir_9a330298ad622ac8e7cfaf0d12710aab.html b/doc/html/c++/dir_9a330298ad622ac8e7cfaf0d12710aab.html new file mode 100644 index 0000000..a791023 --- /dev/null +++ b/doc/html/c++/dir_9a330298ad622ac8e7cfaf0d12710aab.html @@ -0,0 +1,47 @@ + +pfuclt_omni_dataset: minicsv Directory Reference + + + + + + + + + +
+
+
minicsv Directory Reference
+
+
+

Files

+ + + +

+Files

file  minicsv.h [code]
 
+
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/dir_9b59f56a0a0080b69286196aa2bead32.html b/doc/html/c++/dir_9b59f56a0a0080b69286196aa2bead32.html new file mode 100644 index 0000000..3c029e7 --- /dev/null +++ b/doc/html/c++/dir_9b59f56a0a0080b69286196aa2bead32.html @@ -0,0 +1,51 @@ + +pfuclt_omni_dataset: pfuclt_omni_dataset Directory Reference + + + + + + + + + +
+
+
pfuclt_omni_dataset Directory Reference
+
+
+ + + + + + + + +

+Files

file  pfuclt_aux.h [code]
 
file  pfuclt_omni_dataset.h [code]
 
file  pfuclt_particles.h [code]
 
+
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/dir_a7b39092111346681b5c5eeb783e7da0.html b/doc/html/c++/dir_a7b39092111346681b5c5eeb783e7da0.html index 98e3b2d..ad5ea72 100644 --- a/doc/html/c++/dir_a7b39092111346681b5c5eeb783e7da0.html +++ b/doc/html/c++/dir_a7b39092111346681b5c5eeb783e7da0.html @@ -9,6 +9,7 @@ @@ -42,7 +43,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/dir_d44c64559bbebec7f509842c48db8b23.html b/doc/html/c++/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..9c194a1 --- /dev/null +++ b/doc/html/c++/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,49 @@ + +pfuclt_omni_dataset: include Directory Reference + + + + + + + + + +
+
+
include Directory Reference
+
+
+ + + + + + +

+Directories

directory  minicsv
 
directory  pfuclt_omni_dataset
 
+
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/dir_d8b9556c6f38787f4045366f8eeaec4e.html b/doc/html/c++/dir_d8b9556c6f38787f4045366f8eeaec4e.html index 5b9040b..3861094 100644 --- a/doc/html/c++/dir_d8b9556c6f38787f4045366f8eeaec4e.html +++ b/doc/html/c++/dir_d8b9556c6f38787f4045366f8eeaec4e.html @@ -9,6 +9,7 @@ @@ -40,7 +41,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/dir_f89abcb304c928c7d889aa5625570de5.html b/doc/html/c++/dir_f89abcb304c928c7d889aa5625570de5.html index 03f07bf..429e947 100644 --- a/doc/html/c++/dir_f89abcb304c928c7d889aa5625570de5.html +++ b/doc/html/c++/dir_f89abcb304c928c7d889aa5625570de5.html @@ -9,6 +9,7 @@ @@ -47,7 +48,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/feature__tests_8c.html b/doc/html/c++/feature__tests_8c.html index 2f14227..5f06d69 100644 --- a/doc/html/c++/feature__tests_8c.html +++ b/doc/html/c++/feature__tests_8c.html @@ -9,6 +9,7 @@ @@ -94,7 +95,7 @@

Variable Documentation


pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/feature__tests_8c_source.html b/doc/html/c++/feature__tests_8c_source.html index e6cc396..377a2e2 100644 --- a/doc/html/c++/feature__tests_8c_source.html +++ b/doc/html/c++/feature__tests_8c_source.html @@ -9,6 +9,7 @@ @@ -36,7 +37,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:28
diff --git a/doc/html/c++/files.html b/doc/html/c++/files.html index 8602a2c..7f6467e 100644 --- a/doc/html/c++/files.html +++ b/doc/html/c++/files.html @@ -9,6 +9,7 @@ @@ -30,11 +31,15 @@  CMakeCXXCompilerId.cpp  feature_tests.c  minicsv.cpp - ompver.c - ompver.cpp - pfuclt_aux.cpp - pfuclt_omni_dataset.cpp - pfuclt_particles.cpp + minicsv.h + ompver.c + ompver.cpp + pfuclt_aux.cpp + pfuclt_aux.h + pfuclt_omni_dataset.cpp + pfuclt_omni_dataset.h + pfuclt_particles.cpp + pfuclt_particles.h @@ -43,7 +48,7 @@
pfuclt_omni_dataset
Author(s):
-autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
diff --git a/doc/html/c++/functions.html b/doc/html/c++/functions.html new file mode 100644 index 0000000..03c42e4 --- /dev/null +++ b/doc/html/c++/functions.html @@ -0,0 +1,654 @@ + +pfuclt_omni_dataset: Class Members + + + + + + + + + + +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- x -

+ + +

- y -

+ + +

- z -

+
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/functions_func.html b/doc/html/c++/functions_func.html new file mode 100644 index 0000000..d54dcb2 --- /dev/null +++ b/doc/html/c++/functions_func.html @@ -0,0 +1,308 @@ + +pfuclt_omni_dataset: Class Members - Functions + + + + + + + + + + +
+  + +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/functions_type.html b/doc/html/c++/functions_type.html new file mode 100644 index 0000000..5765338 --- /dev/null +++ b/doc/html/c++/functions_type.html @@ -0,0 +1,47 @@ + +pfuclt_omni_dataset: Class Members - Typedefs + + + + + + + + + +
+
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/functions_vars.html b/doc/html/c++/functions_vars.html new file mode 100644 index 0000000..ead632c --- /dev/null +++ b/doc/html/c++/functions_vars.html @@ -0,0 +1,464 @@ + +pfuclt_omni_dataset: Class Members - Variables + + + + + + + + + + +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- w -

+ + +

- x -

+ + +

- y -

+ + +

- z -

+
+ +
+
+pfuclt_omni_dataset
+Author(s):
+autogenerated on Mon Jul 3 2017 16:11:29 +
+ + diff --git a/doc/html/c++/globals.html b/doc/html/c++/globals.html index d3ca4d1..55846f0 100644 --- a/doc/html/c++/globals.html +++ b/doc/html/c++/globals.html @@ -9,6 +9,7 @@ @@ -37,10 +38,12 @@
  • h
  • i
  • m
  • +
  • n
  • o
  • p
  • r
  • -
  • s
  • +
  • s
  • +
  • t
  • @@ -96,9 +99,12 @@

    - f -

      - h -

      @@ -126,19 +132,59 @@

      - i -

        - m -

        + + +

        - n -

        - o -

        @@ -162,13 +208,35 @@

        - r -

          - s -

          + + +

          - t -

          @@ -177,7 +245,7 @@

          - s -


            pfuclt_omni_dataset
            Author(s):
            -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
            diff --git a/doc/html/c++/globals_defs.html b/doc/html/c++/globals_defs.html index 4c38208..4973155 100644 --- a/doc/html/c++/globals_defs.html +++ b/doc/html/c++/globals_defs.html @@ -9,6 +9,7 @@ @@ -26,16 +27,43 @@
          • Macros
          +
          @@ -79,7 +198,7 @@
          pfuclt_omni_dataset
          Author(s):
          -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
          diff --git a/doc/html/c++/globals_func.html b/doc/html/c++/globals_func.html index 0e220d4..977f1b1 100644 --- a/doc/html/c++/globals_func.html +++ b/doc/html/c++/globals_func.html @@ -9,6 +9,7 @@ @@ -31,11 +32,17 @@   @@ -44,7 +51,7 @@
          pfuclt_omni_dataset
          Author(s):
          -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
          diff --git a/doc/html/c++/globals_vars.html b/doc/html/c++/globals_vars.html index 17ccb76..93c3af6 100644 --- a/doc/html/c++/globals_vars.html +++ b/doc/html/c++/globals_vars.html @@ -9,6 +9,7 @@ @@ -59,7 +60,7 @@
          pfuclt_omni_dataset
          Author(s):
          -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
          diff --git a/doc/html/c++/graph_legend.html b/doc/html/c++/graph_legend.html index 82d94a6..b29c414 100644 --- a/doc/html/c++/graph_legend.html +++ b/doc/html/c++/graph_legend.html @@ -9,6 +9,7 @@ @@ -53,7 +54,7 @@
          pfuclt_omni_dataset
          Author(s):
          -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
          diff --git a/doc/html/c++/hierarchy.html b/doc/html/c++/hierarchy.html new file mode 100644 index 0000000..5f9077c --- /dev/null +++ b/doc/html/c++/hierarchy.html @@ -0,0 +1,73 @@ + +pfuclt_omni_dataset: Class Hierarchy + + + + + + + + +
          +
          +
          Class Hierarchy
          +
          +
          +
          +

          Go to the graphical class hierarchy

          +This inheritance list is sorted roughly, but not completely, alphabetically:
          +
          [detail level 12]
          + + + + + + + + + + + + + + + + + + + + +
           Cpfuclt_ptcls::ParticleFilter::dynamicVariables_s
           Cmini::csv::ifstream
           Cmini::csv::istringstream
           Cpfuclt_aux::landmark_sThe Landmark struct - used to store a landmark, defined by its serial number, and its position {x,y}
           Cpfuclt_ptcls::landmarkObs_s
           Cpfuclt_ptcls::odometry_s
           Cmini::csv::ofstream
           Cmini::csv::ostringstream
           Cpfuclt_ptcls::ParticleFilter
           Cpfuclt_ptcls::PFPublisher +
           Cpfuclt_ptcls::ParticleFilter::PFinitDataThe PFinitData struct - provides encapsulation to the initial data necessary to construct a ParticleFilter instance
           Cpfuclt_ptcls::PFPublisher::PublishData
           Cpfuclt::Robot
            +
          • Has the common variables and methods of all robots, and is the base class of any specialized robots who may derive from it. Teammates should be instances of this class
          • +
          +
           Cpfuclt::RobotFactory
            +
          • Creates and keeps information on the robot running the algorithm and its teammates. Is used as a middle-man between all robots
          • +
          +
           Cpfuclt_ptcls::ParticleFilter::State::robotState_sThe robotState_s struct - saves information on the belief of a robot's state
           Cmini::csv::sep
           Cpfuclt_ptcls::ParticleFilter::StateThe state_s struct - defines a structure to hold state information for the particle filter class
           Cpfuclt_ptcls::targetObs_s
           Cpfuclt_ptcls::ParticleFilter::State::targetState_sThe targetState_s struct - saves information on the belief of the target's state
           Cpfuclt_aux::timeEval_sThe timeEval_s struct - takes care of time difference evaluation through the ros::Time methods
          +
          +
          + +
          +
          +pfuclt_omni_dataset
          +Author(s):
          +autogenerated on Mon Jul 3 2017 16:11:29 +
          + + diff --git a/doc/html/c++/index.html b/doc/html/c++/index.html index f20aef2..8811736 100644 --- a/doc/html/c++/index.html +++ b/doc/html/c++/index.html @@ -9,6 +9,7 @@ @@ -24,7 +25,7 @@
          pfuclt_omni_dataset
          Author(s):
          -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
          diff --git a/doc/html/c++/inherit_graph_0.map b/doc/html/c++/inherit_graph_0.map new file mode 100644 index 0000000..aba65f6 --- /dev/null +++ b/doc/html/c++/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/html/c++/inherit_graph_0.md5 b/doc/html/c++/inherit_graph_0.md5 new file mode 100644 index 0000000..7a9d4ae --- /dev/null +++ b/doc/html/c++/inherit_graph_0.md5 @@ -0,0 +1 @@ +c3ad74a62e4c45f5713ff0a8201c38db \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_0.png b/doc/html/c++/inherit_graph_0.png new file mode 100644 index 0000000000000000000000000000000000000000..8aef49f13ec4e93ca35323e4091d682523b7de6c GIT binary patch literal 1344 zcmV-G1;6@ZAOcHkl*vrzw-}H~$FhE9zxi=Lt26hW zIdks$&YjE5T!bV^0Qt|u`RfEAVF7hw2T&(=0Ci#qDE;92`dY14d%fPj$_C;`p-?Ck z3jg7|`D8R2^?H58Q-TCyFc_AWmgp^Lu+!q=Vx;ncFjH4o7tjLNCw2gJVh2zsb^vu^ z2S2aV<>e)UAm8i#J?Pi%>go~*1d-3--|+J~2?T=v{{HXv{vQ78+HAJ*@o|&M6w34J z>PjdSMliMTAZaWtECjUt|G2og_;`$;Iz#~KC70gvo%w_y$lTnVR4Nq;g(D*)I-O1; zkt8G}3=Iu|_fHrEK~`2)ii(Q(eE#t8a6m7k{r2{z(P%^>QBqP;b91x9;h-GW*4Cs_ zX>@e7L?W4=p9cWc)YSC!^iaKSw>vR0aeI3^R9L@JT3QMKNKH)*6_)Nmowd8Wo0*w; zaB$%9cm@Ur($mug0zpSdhuiH20IaUA78Df3#Kee1BCS>%PKmw)U9>Rg697Oimp?y0 z&&%d_So2%R4O%_%_ftn zq@+ZpQjsKy<2aYgot&J!yStm6okda9>2&J#dXY%v^Z7`U+}PN_FwEoegbM4wE-9K}kB*Mk*4EzK+?Y(JqN1YS-rlFDClp27+S+b!Z*@8y0N~-_;nNa* zV?KRTr~UnXk|bYWUjyumi;DoA_V)Hd^)ix^le4zAM%ia)XRE8LBuP3Pj;N?8tyb%F zI(#l;zoMv^2O8XDAU^#@@Ybz%$~tdq%Pq7JjOv+wTiD0^pTr?9Zl z?RKA^pHrtF9v)I-{Io=$R`_S0djJ3o!vFwWE;qpb*fSg~7E4xE7G>w<<;mr8005uQ zKR7rr8jYEmnH3ck$H&JU4ktD?wz|4{d3o98a&2vGwYIi?brg(YgWYm-b1B1WwWg(| zAqavXh)gE4SS&mq&tkDuS67#nmCer1h8p-+ixAAOzdtdK`~xryyS~1r?30s|k&zJq z06`E0LCnw3-{0T2w6w@%GHTsYDwWI2%bS~<#l^+h+1X#sEmYV5{Po2!%s(6KcKgxM zk=yN-%jMnO-3EhUVq)T}353sIzUMwYJyDNuy4}>&G&neDHk(gRPdht1{hF1Rms16` z*=!sRhsWaq0Aw+_RJAgW|1E>=_fI6`Qs1rMYI6Dh1hN5Wj z<}pa*DJv_ZA0qJU11o^*6FY!9u>+_RJAgW|gMR>L>4+v_Np8>p0000 + + diff --git a/doc/html/c++/inherit_graph_1.md5 b/doc/html/c++/inherit_graph_1.md5 new file mode 100644 index 0000000..899b7cd --- /dev/null +++ b/doc/html/c++/inherit_graph_1.md5 @@ -0,0 +1 @@ +5ad87917be5a61385247e4cd8aad64f3 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_1.png b/doc/html/c++/inherit_graph_1.png new file mode 100644 index 0000000000000000000000000000000000000000..28e9f447254daf78d3afcc84337b2a06a8e38070 GIT binary patch literal 1568 zcmV+*2H*LKP)ktDKgCxFQs*n8=My_YW7d+9>*52mN58yg!} zR#vi=4Q4|z8jVJykvm+q?mZrl)9KvwlrWpY(9qEH=g;{iWMZRd&z@~oKA6qp%$YNB zC3wG=F4%kNg1wh6*n8=+{@#E4_KhG2akU$VxPG&h?dGul-m6rq+qZ9vtKB$K_d7K; zm6w;7=~?NMOh3yY9z8uhaU~LAVq#)L2foqz>A=3&;g^V6_XI&ae*9Rc)8*ymwY0Q2 z9FD@m!ra{4yLa!x>iZ-?5HDW5C@n2jDwX%|-;b*mjQ{@qYqeU{YW42jyUk{EFc@ST zxLhusPPcXI*22QV?(S{?sI9HNdGjV)8;L}A?b`L`&6{Mh{K7=3va&J&*tc&V*K%NB zprD|jtE(%;SP(*XyZz|VqdRx*tf;7PyWMQ#^z{b^2cyyGojZ3995|p-sp{+NBasLI z^!4?Xl$31SwoR>8+ibRUrd;e$jC^Fu{?V8X#f8G zZ{NP1o11(0?%kn7hX5cWeVV3QTU$?`KK=dscdyr5T3UMR)~&_GMUo`z>gs;{_~CFk z0AOKZVa;h5vF=5B|KY<2gwUTqf8yeaiHSJx-@kvKtX7c2hY!14E;j!9^=n^WA3`V? z3~t%7#b&dGLZMhJM$`1l%1SsK-mznc$Kyc=ojrTDv9U3QEZ47~RH8RtuNSSpS0|38 zq@?7@lP6pkPoF*ofQy~^~^U%s4Cz>=Ue7)Um`tYL-rm=*Umrhyyr`%s9sOidaR|<7+*mXkjnC)f4#&sGMd(u$ z#jV;vAn@tar${7XFc@y!xG^*|)YjIP&Y;AR&38MCi;L{m#g8vuyx7##G&VNo^ZBk` zy~~KSgqE&y1LY|d<3NcfTrn;^1pWNn#E%2@9$q& zSQr=>xOeZK2>o;C&RHy$si`TS&sSYtZL`_J;V{E6BuO$1W3^gEB$h7x4Iusfp1V{N zSFoOD>r!SFR`&icl!T zl?cl63lpWH(P&v&nL?pRcDmqLVzF3zd%ISvRVWlEPo8wST)DZq8R;X07>2oi{rcX$ zdsQlx*=(k18X?r$+NxA4H5yGvM~BH|+OucRn$y0fYwPo@hhcHM-J_$U+@Z_m(rUF? z%qKPL_N<2i0I%13;lhRC;o;@w<q|ZZeY^HVzDeQFW1)A&dtqf zG@A40&vWmZ{uf~H#Y2*0b8~ZZb91&65edHMOBd|Dbiv+B7wo-s5qQ>%`-&U$Z!j}6 zbMW9ne#t8D^Yimbl1%)N8}n~aUS7^WBoO}py;Q;by>!9eOBd|Dbiv+Bm;V5YVY!sI SvH*Sn0000 + + diff --git a/doc/html/c++/inherit_graph_10.md5 b/doc/html/c++/inherit_graph_10.md5 new file mode 100644 index 0000000..2d63a7a --- /dev/null +++ b/doc/html/c++/inherit_graph_10.md5 @@ -0,0 +1 @@ +d51edecb4549a067d1aa82b219bd3d0b \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_10.png b/doc/html/c++/inherit_graph_10.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa4419dca46f2847f7fedffed25c9e0a9aafe63 GIT binary patch literal 1723 zcmV;s21NOZP)UWO6m-9ROa-Opnc@RQ?!TdwPYA*njUtmFCSYSb5SYSb5SO}Pd>FMcn z=gvi=(bZZFW`*JN`B$!7Q79Dg8P*Bma=C0a+e$AAvwGNUHkZrAoDp!H1_uXMYCV`$ zhR5S2%-}l&h6NS`h6NS`h6NS`hDFWL`^g7A91 z7K?=>$?U>C9*cLqlFDVA_3IaR17E&; zSyNN9b?esS$B(0^U@%xzRP_G+`&7G>w8xBr3NK_v7}p+s>k#I00ssISToGQ(gi`1WITi*h`$P=zP{e! zaG=RgpFY{`c9^*!(iBafpQ5NWYu5Di^aO*!SS%I@1ftPss#?E)|K{`gZnql^?RGms z5cT!-_wL<``}Fno0RWPELI?o>uU@@EsS@moi3tc{U0vP6!UBqV_Uu_xQxkX7P_vOp zq@tqY#fujZ!hQSpUA=lW)v`0{F%DM{S>7S)>gtf8R4V7@=F%KL$e5X#AqWE54Gj%i ztv0ts)8`k9#lyqHE|;sOrlz^M`Q5vB1qCS^UtC;_Mxz@xY(PVTAm--gW@l$NZ{8gD zX=-Xp<%w*WOa=fD3WW(a;>(vWm6eq|9*@W4X*8OdnHlaflu9K4fY0Y2Jb2JAxl9Z6$1dq$H!5_2}B|h0KnI;U(rw|lTA-gBm2XL58d6}xh?d|OvjfQ*4h*Mr(&gb(z9uFE$O-)r*RjpsY{^Q4waUZwaoyv15 zjmTs&bW}hHfBg6{GBU#Ti3{lP;lmDxV{mYA$BrFxxja?QjCxE%mVz)C43m?SZ{NN( znM?_?6^q3HfWE#yzu(`}(}N~;I^Fs6=SN3J$HvC=dVT!GV-g4ivM7q8{+fU9-o0qE zyk2iXK|x_*Apqd#&!6Zq&$NX?;gKUpPM<#g`SWMD+uhaGb?n$Ny&+tJUh_;^K^oGNaPxhY(t=R)s=QSXkKD*!bwtBW7Bz?eqC`I$cRgNo8eaXJ;o( z)6rRYt-n~0MnQDt*F8;+PV?mUa zmEF8~^WPUvMNYc<&#-IPE}zerFuAN-gunjAu)u=Au)u=Au)u=Aut;*LeE9I;%C7^H zFEBrp7#bQ92=FHp|04tf!O+kUQv*EwHV?xD-ytw8uplrjuplrjuplrj{s1NpiNBJ@ RD`Efu002ovPDHLkV1jHPOaK4? literal 0 HcmV?d00001 diff --git a/doc/html/c++/inherit_graph_11.map b/doc/html/c++/inherit_graph_11.map new file mode 100644 index 0000000..d30528c --- /dev/null +++ b/doc/html/c++/inherit_graph_11.map @@ -0,0 +1,4 @@ + + + + diff --git a/doc/html/c++/inherit_graph_11.md5 b/doc/html/c++/inherit_graph_11.md5 new file mode 100644 index 0000000..bc1af68 --- /dev/null +++ b/doc/html/c++/inherit_graph_11.md5 @@ -0,0 +1 @@ +e7800c85eb0ce837d7418fbde00ceb90 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_11.png b/doc/html/c++/inherit_graph_11.png new file mode 100644 index 0000000000000000000000000000000000000000..279d102872ffd328655b9029766351eb7bd707d7 GIT binary patch literal 2386 zcmZuzdpy%^8(&CsK7>4rkVQ^yB#fs#&2f^+Aw?vWIh8|FPAS8TB!}9I5Hp(du#(8B z%;AZb8Ae2!%$b?v;`zPL`_KD%-}igppYMJDcYm+@b6wx-!rR+fi3vl5K_HMA%G%rk z1Uirc+)se{0M`9=oB|wzUKgy)LHqw&ubWCTKp>$*DD(494___j`r97%htRH%7Wfs` z;dMrfUkW>&lEbe`cjECrP-!vzk+0(}xw|iheISwq6OAqYM*rni)AfiZkE+zS z!pg$%sI4#D!FHU)*w`4xUApDS&hBnF`2R8-Y{`TbDe>46{z9tMtu!f$G|Hqe^`ucinp+wI;BZxG7`J4iY$?iSsDD*CAT07VAoH}DQDqC>HXm~IsL6w+SFN649UiNP z;6M%yE9Cnz(G)3{%=(gJ*woZ?ir~LI(bQ^_ZVh#IcAoNo-QJ5JVkc!kj58T$R_N$@ z#!k4wyr6~cZ|RGNn^n$BeavX5_574Zw)j!gp=1X#QY1ew@0gNOe(oDkTGy@QBQQ&F z7b_&!uEa@GU0waKv@{<9`oadCe@;gWv8|exjt+Hf5rIH}Rs8H{UGRCg z2|dm(E+r1+TY6VfC_KZD^s@+uyPRoaihNUB>sZF<%{4JZAl_4{FH|IgJ-!OZBTEI4 zZ-_)yEiM0v#&FFSrDSr~;SoALBQvw8-)Cfc(j|w^E+>;OX}$nHx~^_;DkvzGpY~6R zV?T?_Y@(WCvCt5A@B?X%aCaT8~KQYQ&9332P=`qt( zt-~t{mirD{ffA81e z;9x_8vEPa4Lmg{br!jS|i}Vt-m|*)T)n7|Xi|xi%DUfCL2G%maPfz#dn+8&@xVpN+ zMRT&VkD~_ssB@vln*7nfsp!Mup0!Lhb@eaaoQ=h?;qt3y=|4Vw5=gjlNL)c)QSpwy zzZp0sHPzACAaLUA#Khi@t_;uATxeH9LV}`6SYrgY+Y?@X?R`yQVQgh9md?JFDt~i! zggm4vbMvW2N!HEf6JJjp@s~9~xSX(|A?*b-Uv7{42!0?Ck7f03{`N406U6XHHrz zPp_`7hKGm4JQ|fz15-hw;^GddrHQ6wNxdxF&^sy$Ca82sN{1K4zUN)wHxG)}LG~gm z-re2((XNb%?9JJF4NXl=ZCTYt&#IPCP+ z0O(&S{DRjRR6k{KA0d+nPwOglgriZM$3 zJWyUv`D5ehMYE8=@8AN@y3>7AMI=(V+BAP=h5boMBwy=rcoDp!Q~A@m+j?0wH8qk* zOJZ7jXA3LjhWy43*MANjj|8l*h~X!N-`az^+A?mX<0b5W2U>PgdruVkCn4M)YrW!Y#3}kBm?# z)WS(|<^s9y->RKGJRY$JNU2JuLxY3xyax^`obDG|fZG*$XGHx|n(DlXdCNP`7# z-@fg!zgxo$5Ruaczdb3-GTbk|m=kI|-jQ;Y*3lur_rw~C1YfkZo#pOe4@u~~j9z8a z)nk?6qN?E7Y}k5f7G~cb~Vl+QI?H z(``s%G&Ce7@I!-OrF*2l@y>zvxKji|0=HcvJL}QJ@aP;TjSmY11%9X~mIPpC#(OSk zWBJ?inXhF5RdK!+YU?>IEk8?unjZ9{I%(=?X#paFO|QGS5S~A;4q(p2-v=Fm{_Pg~+T6{ez0@X8F7llIgbWO;J(Jw8%PjBrso%sKUDAMH?U(7E%~qcm z^FBW4i~6-Qy|fe)y|*AKeDKup`f{^UE_+_%dc^Ewm1fhCpJ(;*IRYO85nW-Q&>TrzD)9#x0TI+R6~I$CeKfItt$ k|3n`EwLEzJKfEUr|Ha~B{ + + diff --git a/doc/html/c++/inherit_graph_12.md5 b/doc/html/c++/inherit_graph_12.md5 new file mode 100644 index 0000000..9b90190 --- /dev/null +++ b/doc/html/c++/inherit_graph_12.md5 @@ -0,0 +1 @@ +7c757c79610ae9d48a116383ef46af6b \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_12.png b/doc/html/c++/inherit_graph_12.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3c03563b6d080a6bae5e42427751ed3db98e99 GIT binary patch literal 2637 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 + + diff --git a/doc/html/c++/inherit_graph_13.md5 b/doc/html/c++/inherit_graph_13.md5 new file mode 100644 index 0000000..6465bfe --- /dev/null +++ b/doc/html/c++/inherit_graph_13.md5 @@ -0,0 +1 @@ +5f2817d711993b5a85683e9c801fb0c0 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_13.png b/doc/html/c++/inherit_graph_13.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2bde872e978334129527bfdbff103e502d7d43 GIT binary patch literal 2066 zcmV+t2<`WYP)rQD9AyNH#2R%d}=IHr+qtI@I0Yi^Ff6?%mF| z+h()Q=hfLc=XuWe9-p0i?s={gFbo3-geYYEX#s?^hQtQ}2Z;{?4iX;(976QN`1p8p zbMwN&!kp*4Eb6hClwYe!PAAwx_3O(IpYm1+&@w=+PszM#$}CGMN@j4;rhU`BGI7oaDaFF;Q;2`lqz>&20Fc=IJMI~fnx7!5*L9zrS(Z2wJqNsiQ_KlB^ zCwKIi+60jZTcvvH!Xzg?+-~>Hn>Q^M3qSL*u`!86vN%?8^5)GOr_=fE+qai5U(V0Z zA31U)QArdvq*AF)r}KKfs87_K-=KK^0D!)}zOu5itgNi{>(_U6 zb+P0D?25f?*)li;0HC+Gchja#D^{#1C@5%aYYQ8`c=2NG+O;Z`iaQT6wav}VwY0S4 z=jT%t)!5h=3R@8*wpm_g*KtLoCwYRrBozBkAPN7gZGc&_5 zjMwY!=;(kR&@upEcz8Gv2>AVeyWPHj|NiaUw=)dm^ZA5A;ql|g9S%o#cQ*iFYHA9O zQe9o$)6?_*{rg0(one^P*46_D4t)9Y#bU9PmzSSAcMjDMW^QhdJ7cV=ug2CX&j~}6v*RNj#0BklJs*T6BGYq3rshmzH zEI)t#eDmhbOr)2#`uqE1#s}9GYwGZD7CwEZ1f3a9RFfefA#*NFDFK^qnt+}~*_wL>Jv1~S5*kPE=%*=_23B6uFGc!|K zT8cIm6%|Eu74zD^e*G$w$xyY?G}!HSyzFSMF!J#5e13sZ2>=)!9hJ-F+z#+=JvliE zKg#9u@FU{z@bJ~ESCcy^-ak##G);GPb^ZA9@T8_rgpFe4u77B$lO&g8IXqs7-F|{2&eE9tN^J8OUBO@akjV3&4@e>~L z_g%3;Z#MDoKRP=*6$*t!BGK#hG)=Saf<~h;Cnsmah7Hf2J%jbLv$IW2O>((hEEa3E z+UeXysv$L}k8Wgp{`)3%YySrPVP-JFimXwq{dGZ8x%Pj){!rwv`t*xzM zu~?x{+_`f{tJUV^<)MbCq;P#qZ8S|A42D&!R#6nC)9K(YGNK0Vwu3cwTvsvob|~Ea zhk!x0LMD^x(4j*N_KkMC-L6up@O_fb9~tx?1m^eA7d%M*g@7aB=a-zEoRcR{ra}rN z+96d+2PH%!;rPhQ%e#I1b}FPm$W0`zAomvnjwK%-m|Q$QMIMo8t*8fuLZQ>?TrO9N zt|+Zo^6>$%x%hZeGwI_x@=1T?c`Nxu3KX~NgWBL&Y1dks-E-x<^i^W&2 zTtQp$uN(*jf>WnX!P7qwDe2EL=XO{!puv*P>qnxwcqUeg9CoO!t@U_39UUD20Jqy6 zEiVcxpLjQbpU|r>FJmqa&vQe zjJ5bInfSmEF&7`LiIpOUd0-ytO`FYDSXcCj~T9?{c}mfB!x?Ir-|$9`7-@SVW z-*m~%&24RMt*fgmEiEl9EYxbX)z#IgdBhGW6`w>B&hHccVn}|UkQgLB2slW55O9$A zAmAYJLBK)cgMfp?2LVTf^L6fz*b)8_%w}_CWhGkk%lc7KQBhY{x44oBX+&jZCHmvI wfOURKAh00&4+0Jn9|RmEJ_tBSd=PN_2e9aU8VUo_p8x;=07*qoM6N<$f|#oIY5)KL literal 0 HcmV?d00001 diff --git a/doc/html/c++/inherit_graph_14.map b/doc/html/c++/inherit_graph_14.map new file mode 100644 index 0000000..bb9e2b9 --- /dev/null +++ b/doc/html/c++/inherit_graph_14.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/html/c++/inherit_graph_14.md5 b/doc/html/c++/inherit_graph_14.md5 new file mode 100644 index 0000000..293f101 --- /dev/null +++ b/doc/html/c++/inherit_graph_14.md5 @@ -0,0 +1 @@ +14ee4206691b7608a0053167428f8dec \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_14.png b/doc/html/c++/inherit_graph_14.png new file mode 100644 index 0000000000000000000000000000000000000000..7cfcd859fb15d34ce86f20f7b9badc216854ed23 GIT binary patch literal 2013 zcmY*adpOf=AOB@ULo!s(lB{~

          XnEXp8k^IVB~BC=@FpIX^KyEVO4LS=Q+U);_0}A;0YZSLv-U9&HEDXxdJvyJ8?;D)uyOTyNe_uQ- z?@j;fY%nfFO|7?0U1pDqv%As5I%QU*S+`$E9R{<5T5Q~xw(-CMmwjM0)kE4F^|p_B zM{yK7{QCTF@~bq;%<24&m+3ovupP0H6^yAUn=|aA9qgFGi1k=T%phMs-2ii|)4*@c zUiMaR$TJ($z5m6B<(|2@U^h261K8Qe!KU)q)4xJ3K{UF)vNGdPHA3e9Z7NEp2ga>_ zQ$ODw_;L8-$HJ;;Q&A5=1@3=kc>{u%TKEV00c&sPBc+o3e4Nf3??~_Ia|hHL2a~tS zNvA65>S$}zp9;(B>OR{w_pQEVUOcX=qN37#ZR+_1cmA-hy1Fv-HuZ9jzOGIDa9IkqF;Wn;|J`{21xe_qP;p{gt@uh~( zzRuM2^70Dkg1k|W6Y*xVI$2mz&dtS#Dhoic)XI5U9GGd=e-&l8lO&08_rvzCxl{&)>if+t5t_c^RIh0_RUt$ zHmhuO;qXIxwoHoxuv1IxyI5jVG&mcs{d-iXaFJzzVGIm_8xI9BGKj?Hrlw7RAsoKX zM0TszvvbuD2!zl59g}tZ(aMjNnSg+RsMZA9U2TCt5T<~b4trqfZ+47^kV$0=#Y|u0 z8!cN$%P2~%EUX2o_aa767sLMw@_WKt7_BWRC`iLrOsnFi76dh(bzK(^%19*zBRE3w zZjxM=_PTgF>`0t&QL-Tc+m$%aO*CK2CJC3OAV5AAuH~hX0LQo*=f+v)O$%T&9%WOO@D>EQb$`XEp z0&sCr*20zU1V6LYH&n&8=@JZIblY_g@M=0Nt;heX;_wv-pM8qsYP5Zbn1;vW&(!+R zpSm?BB~!u5h{N}L3(q{N9@6(=CRP5i<3#n&tXRh=k{=0J&mHQ z3Wk?%#Kyj;tu@K~@b*8Q+;pu97_;F5q0qv@f@UptAt!vFBMq`2MTG&k$YhOnA0z^S zu(p0Wa%Dyb{zI~X$ak&I8lQUkC$gMKAP_F~-@i^h54;)}80bz_qG)~!*AEN|+LG+o zFeYucQ{gX^8O_}=)9DctVQzjmBSS$+N!KbeO{a0VJZb-o5t}gqQU0N{jB7}Le zUZfR^d^ki}$_|G+(3GB`35l3cJ_HH{BaAW~kjSQ|Jh$g^xmTLVs1D|0IQ2`o<-CVyac*^GjPrKP30xt*Gt4W34W zMaY+7(^8JRTnf1-V-xGYd}p#)tatC~BiLAyqx;#jmk;K}#>U!03B1stcl>+kDk6#+ zmt?#AsS`gxf0expo1qbre{Qs0Wxc@5 zDt&B=xyRtUQ0{{T_+ttu}^R}MKjIdxh9z}3kXP(q>R6RkIwLd_rg z)DB*kjgXFiK<*Q*>FdD=@oV3EgArG!Itu84$QWMAy7-kQiB_5UFQ>krQx^(rO~ysL zjT;&oJgRaGF#G$Frl!TC3lzydg&Z0({7afErP0&qx|2&@B&X>@&I$AZ*K}feIWZXV zgc;lsFS7Tp_k5ZlUcKEt{a|8SOgve^aF(A3a&DoDN2<<@4i7&b;eevBEMVNddv|Ru zHuLzg=2F;fnsws#L-V37Z6Ay(Bo3vM2}iU#BIjX}ntGpFrOkMQ-7buQ892R+-IksQ zhlmme^f$AGW_-y1c+LO$4ntfyfUN5_QU + + diff --git a/doc/html/c++/inherit_graph_15.md5 b/doc/html/c++/inherit_graph_15.md5 new file mode 100644 index 0000000..059e5d8 --- /dev/null +++ b/doc/html/c++/inherit_graph_15.md5 @@ -0,0 +1 @@ +e4fd1f527bc86e7941eec83a33eeffa7 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_15.png b/doc/html/c++/inherit_graph_15.png new file mode 100644 index 0000000000000000000000000000000000000000..0706f4363a367ea7fa3f84aa61ee95ead61dae71 GIT binary patch literal 2329 zcmV+!3Fh{RP)0@Pf=Lkt)ar%A#0w+FctCCh1J(e>Lo{A^NRXnKhy^sE1vx1(;ZSIG3x)1`G0A4# z?M@GGOZ$EA{H}IqpLym#it-I7Fa0Xq=-$O^^oA{WVoV;=4hQVO)uKLi>kW?yNo?33w+1WWUG4b=~&$n;i zE-o(S=jVGWi6DqGXU_b44NSN`{W=K1>HDo0n9XL2qLfOdchwyZ$JEr+^3-w@nM}53 z%^CnebaZrmeZ4}Vn46mm4-a==l2j_aa^;FoG%#WL^y?r1FXj(8vpswEEIBz@CXZ7k07Z62OAyGGIe0RZjo?I|fKVzGGL zx^<0>jVyTpIb(-}guo^M0Bvn;n>K9<3ky>!m34J>bj8=NU&qA6s8lNMIJneix7(|$ zs}%|bK@cS+CG+$1=y5;{9oH38UPngh4q@?ur_8JU^w6wH}iVEgaW)<%mMf+7Kh<~0DIr>DnavCPfQnM|g`hYxStwvD2w+1Xj4P*_}CJU%|&)YJq3 zn3|e`t?b*kucf8s^XJc=_MM`r+S=M9M~;k+jv5SxEnBu|G#aJ`8oS-j9WmC>aa}Rx zSu7UxKQ8>Z&MfgVJ`4r}T_qtQ!DW1G*s!6!y&V>Q{ra`7tqsvhFB(PrH=E5XSFWt9 ztFv0I4u`{Hu`DeuA(~_UencYCu3ftZ2L~yNnxCKl_U#*V^8WpM0D#eGWNP!G?-WI; zRH})I33&bL)vMIhRLa?*t*1|)x{MF5E7s7V;l_uT`wuvg0ss;d6UWEL`ON5kj*N^X zBqYG=q@<*zq$J-qiuNy&NIE(?u3x`?>C&aGTentKRqfol6Wx~4Xrvv|gocKWjEt0) zmRhaWjT<*IA0;Lx^0{)^_p!0D=;&ysT0RXXlL;-G&lN%*8ZX~pU{nGC1_lP?ayi!k zuGT+({D8M|xtxAQ?CI&beEG6(8%6skNs=VV#>U29zkU@J6=h{*aW?_(Fh4(k=+L24 zr%vhh`kOazG9QUVBEDKK`!1KujYcEkk`xMsBuQ$uT0YIJLYLa|^71MxD~E=L`uqD2 z95_G^n)}c#{(Dz!n2U}3`;Uf(hS=CxsZ?58T1t{6YZcULwc+96>({S;{`@&Cx7lnJ z6%}&1Tq2R==H^aMPczp}yWO6ip1x|;Dvugv)*VyPEHPmJkf44nN%tj+Q#Puq|yH%Fu%_{;DPfm7!)4A zzl4W}A3uKFA5tKEAF2G>D25M@<0CRM^7if9{*VH}i%3v`*B1AW1SHN@%>!mAU3b2J_ymF=^m;vg`|jO4rBX?`orv*=B=$V;otd# zFM&=F#NE4hXJ%&L?T#HgMn*;eCtJ-;rn^jM^EJv!bDPcPqM{^$HXF2m z@Zdpwe7sC1J8|N~pFe*909;F!2EX>jDNfHS_zPyR_(qD-a0w?Ac?t+gWCaWIBzfnQ@rrj*5y32?-e*8iIv`gM(|=u7%gkBLp!qF$l{* z^~G0b72L$X@!>RqzIyd)wOXB%lk?)m3!~B4+S;noX!7#%=vpvajYy`W)7dVw_9Bre zCnu+@tnB;u?|prJ=gyrgC@6rBG#U+kgg~uUBP^i?fA_^HPR}a%3+80v^Yw) + + diff --git a/doc/html/c++/inherit_graph_16.md5 b/doc/html/c++/inherit_graph_16.md5 new file mode 100644 index 0000000..763d378 --- /dev/null +++ b/doc/html/c++/inherit_graph_16.md5 @@ -0,0 +1 @@ +6a1f8dbff724e80eaaee5f52666e0b49 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_16.png b/doc/html/c++/inherit_graph_16.png new file mode 100644 index 0000000000000000000000000000000000000000..394414a7f589f0afddde1d5dc434d2d41438ff2a GIT binary patch literal 2404 zcmV-q37htbP)ziej{uAPKF6n-T*^X)7(Xbbk+T0t(CKYsj}+`^z<)Y8)8sdx}; zi<2i$TD73{2LcAl4+IR99|#yIKM*inmLG+Mg74oK=x9(-kY}tMq_3}UdV2cDj~}mJ zzc!oAnVFfZ4T;O;Ub=MY?_(fC)pYA10Gs<;C(vj#7>4oreCNz97R%h+oM)^YBse&D z)22-TfUvNznwpx3hzPA#%Vx734=E@p=*Ep3E{TDRm8M$<0XT90!0&8NpFS0f#lgYB zd3kw8qcJft5deU9hJ5QIj?HGXR4V23`N6@#IXO8RjfSjAHh0b`Tps`+lgVOZWBvX8 zBO@d0>+7w;1JFD6`t|E^7XW~^wzjyqI2Mb==ku$ostCjG?(QvHwg`nn>Nwbq&15o_ zmX=0DL~yy>yu7@nr6u?{K!%PgMGmjGx0g~ZEY=s z!O-jV7=~#ynwpv#T!DNH08l6tI-O3d)vDF%cu!V&M27{5Cn>#f%)zHuY z0GOMb!@V3lc(A#-`Sa(`tL;06VHFh>Cr+H0n3zy1l{Xbudna;_;`MP zzFx17iHRY9Boc|}r0n*6a&j^(EQ}m2T?}fq8Xh*C6eK)2PVQgutONjzjEwMjJn9Ab zZ2kTFcl?yc;}Kg#g+g)t`gPYjh3gv(27|#+Utj<8=g-rpPp71$P!|D?u(Y&v?AWpM z=g-UK@;i6#kUwHFnRHfm`_AL>R4Ntzd!3)3@9*z-A~v`bBs@4y=0{;+p<1mT7#Jum zEw$SF;W=AZSEto#@f92ZAUiv|tgLKsaByg7C_g{n=HmpNPUnPE+{&*0fddEd{Ft4c zUAJzXudgovU}0h5!Gj0*1>|Eoe*gY$Fc=sNhQVNvN~Lr$TQ%B^Eh8gCB9V-ajt&hC z9X@=R7&ONrJpR3uHRQ?0@%2Y-ZLL5c2nq_y&(Aj)3|6zCR4Qe&+1s{ld-m)Z-flD+ zi;IhSJRXO`Nl#Dz_3IaT?lhT9iHV5;0RgLWO16UQV;I)Z&>#>9e0_bzV)2tFPsp;= zV*mj0E3~4bqJqQW2n2$A_wJ>qr-y`ukPXQp5$$$kGZ+kog@vJ^pm}8vFiK?2?@D-_pUoa!9kPAngY!)2pFEu54~P5kw~^~ z-O6IIghJt!D_0B#gNI{q2mjW7c{)D|3JL}W23lKNCnhFpYirxv+b>?c2pp(WJ6*_j zQw7{g*7N=H5ai9SBhNqn5-yi3m&=LMH*enX`Fzab5{wfboi<#RtmpgX4qQ;5a}c^m zPXdA9%$YOzGa@p9fq?*k(9lr)w6(PrFUN1*yt%Tnl6t}N@^VQ@NqBfThr>B{?wrwR zq;qOl8Nc%7%a?pUzo)0?{{8!6u{a8QRJZ96KRXlF(7ZtiU7XA{?E!7=a)+_xQ7#PUP$_fk&Oi4+3_39O5*d52q`JvTneSCZr3I);f_U&7I z>Lm}8(P(6`SREZ57K;VnB~r&RGBT1}$Q~XZrgOR~WwBV?*w{$eHZ?WjA5qC@X8#ivu&dyFtOMCwOxk{yKZEY&qU3JMA&5=mEA*WBD(cX#*It5+fJ2y=J$%O*D8Sa3b$ zWbwfM#bh#FzI>T@Rk*CI3}2#K)v2jvbi0LYI;VD($yOGNrMkLWBoYM#1SBUX%VaV( zn{Csbm8@I)WfPlkEc_*FVtu-n>FDSnPZKhkOe7L{F&+=&x%uV)6s1y`m6i4B)2GG7 z#rN;umz9;}2}yf${?Z1LX$-hK=RXOHYCIvA}J|}{LgU#06yN`J|WgPX#IhJf${?Z1LX$-2FecvjDG-A Wup1^aJYH=80000 + + diff --git a/doc/html/c++/inherit_graph_17.md5 b/doc/html/c++/inherit_graph_17.md5 new file mode 100644 index 0000000..9a95ffa --- /dev/null +++ b/doc/html/c++/inherit_graph_17.md5 @@ -0,0 +1 @@ +b44550e60626869ae274d18243e624c0 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_17.png b/doc/html/c++/inherit_graph_17.png new file mode 100644 index 0000000000000000000000000000000000000000..2a115686f5c34184806610b0b203d81cedf3121d GIT binary patch literal 2195 zcmZWrXH-+m8Vx9jh(bV-Dm9@P4XZR`aQh+*8TI=tTXeibLMll&6=AQ0#z!V+!| ztYqNPKZ<+QB3zCa{rv7%8aLJ2 zLHD{};E>({Ce~n5dV^UKwPEoiv-iZQ5~fkvS`@68yjjOAVTS38gTZ1MeatxbMQN@? zuyR3xc+Mkip`7@kVX_kK=IzaA5IEjUr_-ZpU))|=T3ZXO{Agr87+=n9Xl#_Uv9a+J zKAkwFuArb$A9nx?dOD^=mTq$SeSLlW)*Tm@w)OS!J`RhAatkMY=>Z5-SygrY z#*Ng10x_hTDE#Wx_oJMJFEWm*XI91=W~gNp+HYI*&TxORK~NSR&kOuTr`vaRcgyMO zih$}(BK8(S)igCUObG*W8XBj3DH0F}M60+vaJgYyz|kKyb}Sx`7p*1`?tR0nTUuIP zF*7?7RL1GV_%q&N(_3yx#iU`Uw$_-ySts3k)z+GRmbLlYl@L7~X2cc;F&K=jq9Xoe z(?_?dfg$Z@MMdqLoRWc5mGi8g;PI%~*wVGhp`jEGCo()doHHJADs&2PK?_3)RrOnf zl$DfHd3kwjNTl?foE%HSK*;^tI?P;S#BclP=!rL1`>L0r`*@y|7c|;kk;O=U|?{z3>IUGEZ|h=N#JDVg~0oJJE?Vb`ihE* ze2fw5?k?svW<;(u6)V-Q2!XWznx^N&{PZM1!IG)j*|+ zb&Kj;BIJJW*^Ohoy!AaS_cF;$94@3C@ILVB*~Em)_{W%s-6)Zn1c6OGp=k>72$B??2i%=Gel@Lo?zxnh1m8yQjCRXghKCZS_qZVdlG`<*n9ISOn zV1T<71i~>VC#Mfo>}h@;(4V7ZuRoA#HALdn!oSngL)PYP*4gZePoHEwJw4C;F240@ zD4vGioUz%l$dsCL86gr?l9H3<M_ii zJu2eWQ_}LCbVJ+FFl~Q7c6M%#)g~hJp&)k^RkkxYJe=!Hg5+7515rH4qmfMN#iyC_ z3JN}(D?bJqjLz@9-QCwcJt01N686fc9g#@OPqBNUzKLnx?(UCtbaj2k>H=b0=NBye zci?aw4p;r%S4Cbv0g%0)K+M1Z{=6xzvePJtq&6(6ZS>q@m)8Uu4Q@|#4F5%k0BBo_ z445YN*0K!o0s4}8`S}AI%VP+lqdfv~93aK(+8C*uxhI<46btU%;wI0> zXJ=;{#_eNdQ7mkpsN#^Wej8(&T2NJ4x%#ue>I!XIgckcHg(c%()RHA2d9|zJiT*DM zk~7I1a0@`qd~2e{UrhT*MV`LTOC*Lq8FpzR?z%yi!(Aa z+W=G@YFbavHKZCoo+IeNs5TyYdMQHw(j`fC^+O#J!gNh!v#o>f+A1ob;~X>-RRVGZ z3$0U5oYg3&Q1UJfjgMzEJ={bs4!ufCPoHrf;?O;k{UOO`4W1=R{Jme8`#i?j*tptJ z6`SUbMyJe%UI0R5UbV0wzIl@k>RVrbciYuyG)02+o?A>+Hi-^xO^X5)>mz3C^A-Rw z& zz|#0A6w23c-;RK~dV8zN%Rzvaw51BltgcR(wS+ajIqCUNNy3LDWvwx7GjO=6AB_Xqq6zm+{vTm1HV9qgf_-z>xdP%=DebbjjX+9A|yaqV{K<- z1PKUIB^G;}5J@7D5EXV=&ZK96usOK9%K=S?^}K^0sIqjvOGlpBQL%SJ6gy|6l^`Uz z?Ge}aCF_)Rmq14|tt(65|BZxRP^nQ=sQQeX7F=6LM;^(9&I5W}0*fiyBSI9Eu{fN$ vv$H7BX!&Im!IgiUxsnq8PggxOQVx!!9CVsiJ5$AhTLuVWehpr0>Xz^q$`dj^ literal 0 HcmV?d00001 diff --git a/doc/html/c++/inherit_graph_18.map b/doc/html/c++/inherit_graph_18.map new file mode 100644 index 0000000..84a58fc --- /dev/null +++ b/doc/html/c++/inherit_graph_18.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/html/c++/inherit_graph_18.md5 b/doc/html/c++/inherit_graph_18.md5 new file mode 100644 index 0000000..ac3b2a2 --- /dev/null +++ b/doc/html/c++/inherit_graph_18.md5 @@ -0,0 +1 @@ +ed58db1b8432bc16689329e2aa6b6087 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_18.png b/doc/html/c++/inherit_graph_18.png new file mode 100644 index 0000000000000000000000000000000000000000..716afb9ff61b5790d5a8251b511a543554f12da0 GIT binary patch literal 2015 zcmV<52O#)~P)e5+6CH77#P3T35P?#wZ zL4=m!jZ|<^C`eFXgoH_uGi-qiEGQ%2lz6Kc6BC??rXix{Z0b?GJpWfaxQjaH)EvLh ztMj`(&-Xn0ay;jE<^)7UU@*2nuRXR}0fXTxn3)-F12Z$jZD3|*xD7(4KhYugx^xIsS+uGVtTU)y+q8N;|GB7ZJM~@!a9kaPIo6%@A8zzXs za2Ab5gNqk0+8tx}%nY}InVI1>Ff%jU24-f4+pytg&dSPySS(&wjGmqz2m}HbDcXMd zH-f3DDdgql;qc+Z@bU4%@#Du)T3U+v`FQ}_^PD%-%%h{Dc>MS=^m@I^V)pj-LL!m; zGjXEJRE1voPkoQ#PjFR5f>M?sXAT3y06UU zKSyuhzC~nYB&1R)GBPqSGc$wO*jNC7zrVl5TB3#C$tUAuPSzyJP2b#=AfbFyyR(_U9shv?{N?B2Z_!NI{OFE6)P z*Vx#IkdP33{`?u0m6eE!ih_@i58~qDP+woq$DW&;Lt$Ydf`Wn|7K@RQk%8ISS-Uya zYBh?Bi+LlP*}Hcy^78VaR;&5GnwlDfhK52amEy*Y8Kvz}|O{oug^QYw|y(a}MAy`ExXVkkE^*Jhq| z3|DD$G{4DYB2Q0Gs;H=-p`jtFs;VNPP)L)LlSD*hG#aV0vXYOxv~8VpVq$`XLLptf zdX)wT2T83~695_;8{_9DCMHsCZ7r3Tm(%|J`|17r_cSsxLLWbVB)MG9$15!@rR3yf z`t|D<>GgU#a^wi*<1#br^?HjKa=Cm>W{!x6Agxx*kNx=ZgX-$)Z00#*W=FI+n%`(N z($1Ybsl2?LCMPFpadDAMCKD|zEI6#k%|s(a}^>Q)3bD z<;$0Rys)q^8X6kn#~KUdjJdz z3*(O!3IzrS2UlG~Oa95FzrP=HxtwnwJa`aENlBZg&C&cKkqBSDd_h}V8$v=tkeHZ= zuV25y!(;8G^z!mTe}6yDojZpUCr+TMs>)`LLZJWv{QUV7N~O|bEHW~ZKOPtuKtMnM z1OfpB0s#^d642k@Zxc@}7Q^4)A3B}Rt|pyMhoeW2^6jOyi-?H8(9n?6HE?C^?BOyq z8w>{ixVyU>fq{X`&NXlU{Qmu$?+XkJL|ZpM=*Pi*FRdU^r?WHK2#J3B4Ly1Ke7^cxHY z5D|z7Rs zdU|@$-rkPF!a}5`rrOLAi9`T^7cXAm@87@t!wvwXrKO>$s0bY$9q8=rL}q5Dg}JOT znM^LxW{$I#{PFSe{0A~RItmXD4|sWb0RSc@Ch+XpGk&ghduh(8sVQ(A2cb|1j^m(G zsg^yrn>TMFKR+K04GkC@8$)AbBktb4%a32WbP4(S`RMKKMQ3Lx&YnGMQQxI8i;Igf zJUookr%&U3|oR8$nMUAxB5&B@8Js9joG+Nw2J31`|(yR zs;a6YnM_6!iG(sUGl}CkyZ5&$m5O|QeJMOVoZh{A$B)m<%usG_E(Hb#l1LlV$-%&c02m2h^QnN4{B{1^F`wXK!<`g+pobQXPDt(FuD#TF^r8aCwtkg>7o^?F>s zd>P-rf5-InG+J9*QB+if^z`(tmiEuE?l*wGzP`AA{kki(IK^t;AJ|H5t|UJ{AJfy* zIDh^;Mn*;;lgW^pnu_e~?5&n&!D^oeZQ#$e2*@hB`J4P3nUukBmKFTTeguZ$J}@&g z+y-W5hTFi*%y1i)-OYIY`t@e&U@#nFxmWan9Ww_61VAVh;=+Xs8!C#yaF(E;AiMoG xTXPJ?Hid1?G291cW`^6q%*=2bn3)-F!~gEvvTUvYc|8CC002ovPDHLkV1g9J(r^F( literal 0 HcmV?d00001 diff --git a/doc/html/c++/inherit_graph_2.map b/doc/html/c++/inherit_graph_2.map new file mode 100644 index 0000000..2fb6c41 --- /dev/null +++ b/doc/html/c++/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/html/c++/inherit_graph_2.md5 b/doc/html/c++/inherit_graph_2.md5 new file mode 100644 index 0000000..818b6df --- /dev/null +++ b/doc/html/c++/inherit_graph_2.md5 @@ -0,0 +1 @@ +b2d3687aec0cdc9c88db97020671729a \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_2.png b/doc/html/c++/inherit_graph_2.png new file mode 100644 index 0000000000000000000000000000000000000000..149d4e2d8c072bdffbf5f249722db8838fb494ef GIT binary patch literal 1502 zcmV<41tI#0P)c*uskQM@y6K{&U{QjLGEuv*MpFe5q8XipNlcU5#XuM* zFAaY28@RvKx%Zx&bLRY$xyK3A)9G~4;gR2&!{M;mY#A>Jk&OBI`41mHaA)vXr-_M)Ox1%(&4ULIcr$1} z6COx2;ej+09!N9car&D5{{0)nu=G|lPiJSROeQ<)Do)1fYbKM)UcGvi-fD*Ncs#?y z!z4*2a&Wm^a=AQ{B^`&;*Gw*#zj^Z}z10juQ51wwsZ=I%h(sd0yStez={TgL8HQo+ z-n~<+)pEIfU|_&%wU(5WT)K3rx3?D@z58Jp_VMG#%F0TqRNCL)&s&Xa|NZ;dXf!I7 z$}3l{w6?ZV6vaABO--rQ>htH%mz0!@kBDG(0N~!edj|&xV`F0g z0FTGBy1E(-0szqIbY8F5Y&OTPQWRx2n|b!o(2!cKb~>FTNmf-=84LypAx+a_v3PWJ zbbEW-VzJ;j?(_L;-`~e^yuH1BYirADwE_TkcXv~^ zD`mIY7gtC6pPpvlzki1i9v&X@?A6s(o@U>^eM__&m+RNBPfbm+_R7kN-EM~vQWSOW z+&PoULt*xlWoB<$hgVOCbw($W$;wA<|}m5TQT zicJx#8A+1tu&k_XdwZL;zkK;pQBe^L27mqf#eV$9k00#yrfgTrZpUht=6*&H1OPxR z7W3@np2xxMcB@n>*1mc3rdF#307#|Mxw$!q!%+9<$Cnx=W z|EEu%9zTAZB<#-4PBi^YgQ^vRp0~J6u~^yL$C1*C9~~9?@PC z1QGp}c)i|*g@s@+sMTtpKYu + + diff --git a/doc/html/c++/inherit_graph_3.md5 b/doc/html/c++/inherit_graph_3.md5 new file mode 100644 index 0000000..9b30a2a --- /dev/null +++ b/doc/html/c++/inherit_graph_3.md5 @@ -0,0 +1 @@ +cce02bb3bce0f11dfc8187838bc917f3 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_3.png b/doc/html/c++/inherit_graph_3.png new file mode 100644 index 0000000000000000000000000000000000000000..abac563be626dffa8bf8ab1e15ecd86474e5c52e GIT binary patch literal 1711 zcmV;g22lBlP){%run#a4*asK@0CIU_e0;pA zsVNePWU3m>FGDVu%jNP|bH)9@VzC$uhF@M1=2tT~IQaDG)8##6;-Du_p8TqMFqz@h zsZ()1cz=Kaz&^lGU>{%run#a48}EZ}-@Xw9kzV$9=FhEsEo{6GI2_LP>(|rE{th@C z4lb9Q*uPPgr_#?X8}9=ymwW5ht@N_L1JP*I<#HwVZ&c-}^fOC3J|GClX!knC(mX;P+dH*B`;@PujrKP28Hv8tyn{nBs@z0+>H5!dTAlS8Qmr|+p zcs$eqlgT8JNH%ZYTv%Ax)6)Y0)z#J4u3e+Dp-^bYjvcRFy`njV$K$E5ujg{P`T6-O zl`0qvCY3EKD+7Q%d-lW*@9*y~C@8pp|31yU5JEbg?%=_L+qZ8&di1E-Y^DaUU4LL; zARG?gxN##tKcBMTrTu)K}Kqiwd zEG*o;dlvvsoH((tu+Y`j1pu?NvtwgpF%bZe%jIsjTc^_{W<4H{PN$2DZ{NNxkw}Jz zhpkrYkt0V`DiuP=>-91ijLy!^si~>%?rxGKeLkPTU=Rod(P$JQ^y0+}KA#^Bhf~QS zglcMPDk>`McDvPTl}IG5t*uFAmsd!|m6eqSgW=1UFEsPIckf;B>G|N@yLSkorKP2~cx-Ge&IfPbzD<=)%KrWPO(qi+fBpK^Xfz^(JRZ-cO`Eh@ ztQ>~xPFJ)-VFYu85z6%`dtO-)g8Utiy$Lx)14(CFwWb@==D@2PXG zx&*YVhfp#fq`5!f^Z5Y4U@+oh`jKnF>2y**CIC2a;DAgf0{}LgJuom}u~-TU3Mwlr zKYjX?m6f%1>(;8Os@~pSzu#{*o6ns)MZ2&q)+bUK+#rqk)Hs;Vk4FYoT|PF28qFLEOP z`TK*UGpB*i=Z}w%Q}NKyPl}f37gF>O`?d^T}^5x;f zhl`4eXk>G9bF;Iv9S#T8wA<}@d3mX1<4Agag?!eLkNb`!&1W z?hhY6ghC;iOm_9^)xp8RJ9qBTOz>Zl$@fU}^Yhf>ZFyW*SJ&L!JUl#Xv)L|QycqMu zv17-m3pzVHo0XNtWHJFjDwVq3ZjDCM(9l3H%V020pFVy0^5yT}zmJTJw6wI;*4Czy z1pu$tyRNxhx^zjcR`>Pwxm>RP{{Gh1R+_R?>7PA&R;^Y$91fe!cKrBptyb&z`vZXh zNs@s;K%>#5QP^5p{*YMv{vc-C#5nFbN|Q|*2ZKSCO2y~%*=)8#p_rSSqXy{pdZAFr zWHO73i=RJ#9xLYj`SUCm%jfgOdQzQYZf>rwu5Rbfoje||v9U223?`Kghr?xMWh@qp zMk;Y$(P*@@vr{YMe*u8uAs!Ooy3U16k5tE47Y#tgKiZx9plUOXyU_JC~*gg>xht+DWt*!n1 z`Sar9;>V94o12@JN@b>tS_etKL&2nhTCHAOT&%9Ho|%~u3WYT_HL-VGe+1YE8v{v_ zZEbCBZEcw@Bu(&h0Rw=2fT6%XzyM$$U?`I86XU*Y$NYUvOib+EyLWld3Lo%zJdz|6 zKW@kTeUz7%FK-eE|Nj97?+-8(*asK@>;nu1_5lU};2%x!90(-rWJmx2002ovPDHLk FV1ju$P + + diff --git a/doc/html/c++/inherit_graph_4.md5 b/doc/html/c++/inherit_graph_4.md5 new file mode 100644 index 0000000..8a21661 --- /dev/null +++ b/doc/html/c++/inherit_graph_4.md5 @@ -0,0 +1 @@ +061c754ed9473eb6bf0d6671d7e9eed8 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_4.png b/doc/html/c++/inherit_graph_4.png new file mode 100644 index 0000000000000000000000000000000000000000..756aa86e4a6ebdde91c89774e5bf6a0da2357199 GIT binary patch literal 1334 zcmV-61NQesUd`z8bW`zVSRla4Gj%AK0dyU zd;}^mo6YFx=s4GY?#gsJofsY-4ogyktMl#KH*|J(20VA}$~?v4aNJlzg6rdOI8a<% z9Ppf2Gc|+|Q$q+bHG~jTLxfe#wY4=!k`yvOfj?mt(`YoJzP>(Wegc2ODyGR~LR(u~ z$ovHUghWh9k}xnZ0ISsslgWhE)>aG+4Iw2Z1u-!(Xl`x>aQ^lwNfO?@dxwmS3>XXs zw6wGY^b2PH{{0(vyB&#%iHMDjMP+3rc6N3Y-|_KrSglq>MMWVcB?W_ng8+cMyga;m z^-A$OJUqnx`}Z+3Govbpi{b*n(a{ka8yjIZn_)B>QB_ri!^1-*#`N?w($dlp8ykzN zswx~D9Q;G||AJ>285v=K=AZyzettf8cX!#>*GB++{P;0r?OOui*47r?Zns}- z04yvlq{ri7Z*T8~emgrm?CtFhXt%ew(`vPHd3l*Gmy20hS*)w8BT0I_UPeSju)DjP zo12^L@9(Exujk(09*2jAnV6W!lamvYxC-=gu8=b#-xXZ;vM@C-i!~JU%|={{BAi-n~nw z(@BynDJfw?LxZX@gT*Du)YMdNZf+|6v$L~IPfu6o<#M@{b0Z@ov{)>v#y$1FNX(F} znX)Vc03sqH0@`Z(U6qZE4OlD|#eVeY5%Tl%0RRSr0dsS6a5|kxN=iabP7W3q7opSX z5FH(jCr_SWY-|ks`}>%hn!>YZ&s2>WEH3cp{b@o%0whU-BuTK@Y}nY?Q2M8)rYgq| zA3ntQ@87RA_p{vkbLMFQu8Slp} zDbyA2$rpnE*SgE>Kx?KNzhL&k!2#>)>L|-H4F&^COG~-Ey{-5T4Gl3lIhm1>kxWZV z-U+ynnyx_fi_ms_xnlUen>+|_oQ&YqE_;?zPMpjl<((CmqG5Y)anVg(VlgY&D z>T3FYJ{48|!;No%1nRiT#_l4*vH=p@K0?ee5)%`HmoH!5SbQO77>SFELr+i7jl~yY zY6u~wh7e+E2qC71xbUx*qobqY%tN4(zh4WU<(!xa2?@~a^(ZPTy3wQr*T-x&2W*!} s@qMO75Z`BN2_dG25MpWwA*P1-4 + + diff --git a/doc/html/c++/inherit_graph_5.md5 b/doc/html/c++/inherit_graph_5.md5 new file mode 100644 index 0000000..d13769b --- /dev/null +++ b/doc/html/c++/inherit_graph_5.md5 @@ -0,0 +1 @@ +f622de46e154e282b8f185a35122a53a \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_5.png b/doc/html/c++/inherit_graph_5.png new file mode 100644 index 0000000000000000000000000000000000000000..e7039b9ce99120757d41b11e8c7e685dd99cc719 GIT binary patch literal 1161 zcmV;41a|w0P)V>AehJl zyqV~5IGUTA>lzY^#VQZ!8i-iPWU`^5A%Y-yoS!rNn3&7uwzs!&9OpJXkw~B@`kBhJ zv$JeAo6TmguC97|dQ2u0FE3C&FQ6(_9&tEOC=_U#R;g6nhJSo~+~41SrV_)jwzf6^ zKwDee#>R$1p~&TO7>03MmxF++)O{zyJ#un#GB7ZJVc7iqJVjAPqY(fAFOR*6n7CLh zy4`M-N`+zA^z?M0P+-r=9{ztbR3ep1fBg7?AP8(03I(gxilS&|XQ#{Mq9_XH4-XGD z8V!bFb8~YqFE3Rq%LLR7&BE*TmSrl5Mxy|L(b3UJByxU!uGMPYZZ}M_3(Dfn%}s;B zKoA6u0RW*;h$KmpBr}-{Ce%|sl>nIT%O_O~YL_4?!E zW0<_Tx$*n`HB79bo(+N^>2w-)y}iAO#o}-{44ZzxpHam~_4$0=-Q6`Re=C5IQD!2? zFBY9n2ZO%8zH~ZW<2HxE?d`2rtA%lYfB)Fn7`Jt!(J0jY{QNvQIXON)4)b?+ccoHE zqtU>oR;y)HF;ew3ZE6bi9eoJb^KZ#*9F=;)}F+SS!nqmnZmO>{UMu~_W#@^Wcu z$!s>WyX0~?0N~)@;PLTsYikQ8Ef&l2@-jgX*VorJn~gD)4M~zPczAf&+uN&*%TOp3 zBuPF!JplluQmM&gvfJ&+WHKBMudJ+0O-;cvr_;$uwOA}QDj5NF!`|DUKNI)&_tk1O zilR1~?e+Dw>`ZaH-3Ws8_V%8hp29puQ7)HDsZ`44@`;Iwd_GUJj>7l%ccanR)YQaY zqA~`o?M%~jsZ>G`B$-UYW5N!b(`4Q+Pbr|^Eae4F2Z)^0l`Eb5KQC& z!9*UY@;>qC=;-TpG&byq#y}t-k?`}H_8TLSNCJTX+cyy{{6F!J5za&&5KQC&!9*Sq bOyq%|x*16b(xE@v00000NkvXXu0mjfo7Eun literal 0 HcmV?d00001 diff --git a/doc/html/c++/inherit_graph_6.map b/doc/html/c++/inherit_graph_6.map new file mode 100644 index 0000000..6680f80 --- /dev/null +++ b/doc/html/c++/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/html/c++/inherit_graph_6.md5 b/doc/html/c++/inherit_graph_6.md5 new file mode 100644 index 0000000..090e838 --- /dev/null +++ b/doc/html/c++/inherit_graph_6.md5 @@ -0,0 +1 @@ +8a3e9106dcb3336dd94e39ed2585e142 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_6.png b/doc/html/c++/inherit_graph_6.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7587b81216a0979e7b428048d3d6afcb67b4ee GIT binary patch literal 1593 zcmV-92FCe`P)M`VY>mK;%}sZ7f6njXg~Mro zPV;OS9p2B?`@ZLSpXd9&-|f8TOst|P3LyS{{`=bk5S0NL$rF%~JOLTW6EJ3HWo6~g zojaLK=5MJ%l!!ne7#J8(tJU<#Z{NtdxjDPtzT2V@JI8Lf&&|y-N3i@Lhr_X3dJr6` zs;bHvL1!dSKt}QeWF${OM)HJ;8EH0~_wC!aqbWY0FaOYHp^AZ6EIxViq}%PTVE%%I zXgK8AO)6vL+S=Oi@UY9};x^sy_e-VHQX)To{1^&_LZQ&Y!otCW2Rl1EEApd%z5u!q zO*z?ifda1|9Ee7v6h*02DsI!W*=#r*E+vv62!%oc08l6tj~_pl%jIipYXm`XtIHyQ zE>w|hyTFdWk??-?=FOYKhYu43aqHGCk|bMOTLA!Y<;)uz-A<>|Hk(bQQV|4k_3G7V zG|J4$oL($LK0={z&z?Ovj>B#=8tv)nkxHetwY65Ol_W_x{^G?8jYdNd#Lb&GH#av6 zM&<}8hSTXha^#3eBvPqVLqkKw)|HbjzZ_iD`}gnb>grlrTCQEY1|t)Rgjg*8`t@rm zM&v> zWnN`Yp(rXEjXr()G`|f1n4h1I$K&yMJQxfbjmDmy9(q=HclYVjr<})u~j9qNs_9iKeEeY&Oeo0aQ3SIr-ZNvs1c}E|-g*qSb2uXkG#_H~saES*j(6pDB6-cb~F?%cUYj~@MTAE-h`ay%pJ z>+4}dr_%)jfns6wrmU{6YPDL}ZftC9Y;5FK*X#AdJe!-F7K`Q5rAu&6fBpKE$z(Jd z4Ghz2wX`Z)YC}UqC=_CeELe!i>guY|XiOv$O-)TDu8XCdPNxF^2n2!)7cMxR&Z9?< zzJ2?4baa%{#&CUVg`X(^fXCxeDwX*G>2w+Z5DW%kSE*F4tgOKH{QUgGhYz{cr4ft8 z27|%vcEit#TrL*~1b)9CUR_#R+P{B)zSO$9I+jRwwzjs;pFe;5_U%ufK8=iwl(;UI zazddHHZESgI5jopa5&o9+G=ZSceD>Q9E~)a%|4&+%a<>GeSO{C-ONi8i39-f{Q2|s z^>z3}007YI^>^>yb-Uf)zI`(qjr8J~#N%<;h{a;ho;}NN=OCBMLJfP!pnY$TIO48xMiq|Ii7@ht0t*;vZa zoH%hJolZY^@IbHEvk3SD%=>KVXXMz}m|CrtN~K1lF_}!}oG~_=4af0AhYn3oPs4GN zB&}AfQmK?kBwbxykw}DjmZVat*4Ea&d-pO+3>~{{b)zo0*wmdRIlE r|BvJa=#1nE$Vi@mjN}Q(NS^RN{MK_DQFOYg00000NkvXXu0mjfrq2)j literal 0 HcmV?d00001 diff --git a/doc/html/c++/inherit_graph_7.map b/doc/html/c++/inherit_graph_7.map new file mode 100644 index 0000000..45093db --- /dev/null +++ b/doc/html/c++/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/html/c++/inherit_graph_7.md5 b/doc/html/c++/inherit_graph_7.md5 new file mode 100644 index 0000000..934f21e --- /dev/null +++ b/doc/html/c++/inherit_graph_7.md5 @@ -0,0 +1 @@ +16fbc440eb698d2289749a381f7733e9 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_7.png b/doc/html/c++/inherit_graph_7.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9fee94043066fe1265981f1fe55c0d309dd89b GIT binary patch literal 1642 zcmV-w29^1VP)?%lg;wVL((GUL5ouhZ$wby1kD$LVx>yNIkQ7VbCe93KE6kw~6CeR|-)0g@zd-MR$;U>L?` zvsF}76crVj&F0syU$ZScJ3CD#lR}}mbLWo3;m~L_a=HBa_3Og*kBp3zmzR%^kE3P~ zLaWtURaF%T1o(!+?RJ|?rfu7{X*8Pd?rwoW69RJR?d?tQB;)t{0RYw2)t^6qe)Hyy zR;#5b3OTtA66|~T?wL%csi`TS&v)q1A*-q91aHnU}B-dISJCcI;R<9ByxKN4*5dU|3jK5Lix-F*i4-)oPJlQBhG}U!PGr znM^h}H&<6zclhvOyWK932mnxATzvZU>FMd|bLYeU1Ns=5NANP8_<>lqIwYBfwz01qnl!)BBU=uUG zzrSCj(Iij4_4RcK;ppfn@@q62kH>==OioVTzI_{JGUH>hSYctI$KzobhNfx2nK228 zAcXVt^Gc<%rl#h^i4*Bu3txP6Ga-YujYeZNyv>Q*^GQm!c&$maRX?AbG6z1T9cv$;zr z8Rp+1S$O=dUZkY>5knZcTz=-vnXM=V!S~4;itqpbEgg!Cg;y$-4Xf>-sfZfeF%a;U-(%h`1MJg o;Agx@!NQ9aEWAj;!i$vu00L7P^mfC1OaK4?07*qoM6N<$g6@ + + diff --git a/doc/html/c++/inherit_graph_8.md5 b/doc/html/c++/inherit_graph_8.md5 new file mode 100644 index 0000000..c718514 --- /dev/null +++ b/doc/html/c++/inherit_graph_8.md5 @@ -0,0 +1 @@ +6eedad4f70737940942a7d415a636fa9 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_8.png b/doc/html/c++/inherit_graph_8.png new file mode 100644 index 0000000000000000000000000000000000000000..e5221ab2e4d5713d827410bb07895c620ed5b60d GIT binary patch literal 1661 zcmV-@27>vCP)2h-EjEiEl; zYiob28iAZsTU%ROTbnpscYWLK_TJv!Z7)e+s~8?0e)HxHJ%c4T>g(&mvP+bt4_a#cWl@v3-oJleQBfh6%NrURmY0{Ss;U40 zXsGm?QX*bmT_s6UsZ`44a--203`Ox^5sjdRx6Xq+S=NzR%>Z#sYD{VfB!ye5R1iHTU$#? zN^l%+XlRH=qa2l=J$v@{?b|4hMx%v=g&#hANI9YnvDs`|t#;?mou#Fv-QC@r>B0ok zc>Ve{Ba@8FzBjfIC}JGQ&SV_H8wUDUJrz@ zx3^cRRL0|R2;sYT?+Aj3#bO(dD4B3LoS&cn^yyQd&u6h%FbrE-TH-bfJxrx%GW6Tw za3s2@)#?rXE-x>)*=#8J^XJcjfdQC~-_dAvVq#)xX(=9$fBpIu0N`@D*hB+?KuJkS zWo6}q2M;zgmgE=!@cHv+2;s`g3L|#8To6KyM&tAOP~(puKUP*&LYCJ?AcT=fWY3;G zcDo%yc=6)JmX?;yj3}94Ft}sKj*gBF)GHhgudS_d4=~y94EJjqjRpk=4<4MEnPF>| zm<5l=qgJa?eCW_2yL2mpZNczu1n)9Ji%<3?I4bO?d~ z0OaTAGh&3->s2TeXa}y-={z0}%A;=s9RR@Y-MedQYWn;8Baz6^(9pGO*ETbvWTaB* zmoH!JcKd+?2Tq+j_2b8nyu7sS%g}H1O#}c;PEMlfV6eKn3ILd$okfQPK}=6iqj+p= ztgWprExBkks@Lmp-MTeAJpAOz6AmE&fYtv)k?d{{4Gv zYwP99m+2o#rBVREt5>f=p-^HQa^=dEd-v{*kB>W@&c?>Zg!gp9;V_$ABod)03d1mp zqDYcNjZ+H6<8hP8bo1uTo}QjhpFRx@4Wazv;v!m%88Npm8<#F!x^w5w)YO#I={$Y< zbVB|2@85IlL3y1{7YGDMk~Eo293$FL_vFcw$Zx;jpO=>>7K_uZJj36l38bNm3$_l$DjCjVOe0d3m|HxtSmcsZ?q(82@PxTm+izP_NKfWE^@9?^#T7^~H)QmMpZaYaSN+qZAIor0;>ZxOxFzP`Q- z7cQ`sj&Qr(8jXg#jlll|^nWP*4{qW4IloBz`I8 z6%{>u_AE-<(I z6c~mjzqBmy?^0b|O+OR~zkhgzuzvFk!Eb&c_{}c_zxl;~L?{xTkxZ4A00000NkvXX Hu0mjff;mi3 literal 0 HcmV?d00001 diff --git a/doc/html/c++/inherit_graph_9.map b/doc/html/c++/inherit_graph_9.map new file mode 100644 index 0000000..af135fe --- /dev/null +++ b/doc/html/c++/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/html/c++/inherit_graph_9.md5 b/doc/html/c++/inherit_graph_9.md5 new file mode 100644 index 0000000..46cdea9 --- /dev/null +++ b/doc/html/c++/inherit_graph_9.md5 @@ -0,0 +1 @@ +c3c70306f33d304812201ed59e355875 \ No newline at end of file diff --git a/doc/html/c++/inherit_graph_9.png b/doc/html/c++/inherit_graph_9.png new file mode 100644 index 0000000000000000000000000000000000000000..dd80c17d19abafea6134452e6658f5931ee0e862 GIT binary patch literal 2115 zcmZWrc|6qJ9{!Oe`%adau_iK>o2{}mmd6ct+sEQ~601`+9 z+yl(*;Ls5f2IFSxPj@g02f8@JfnR_3=MAM<0B~p<3AgwB=d-0}p@@s2%I&{KYCIz2 zzI3|chIXnxv6u|x%N-i|m9z;IpQc?LbR+4&S$jNG$HUX0z@J#7|Kd!xP=1MHNdq~n zr^+?osvs(eHnct!aA+%n_iTOU?z{NHs4?TAI|aMe@m=-Z!#oGLkZ?jk*VUn!uKP{i zG}vvJvfzJ1N~bEH&nM^R66WUSW>|zK?+8Ib!SI<+3dAVlap%}roB8?q$J)n)uhsAH zH;%vdYY3_B=6ni()6vF04&rU+?CEIkWK#lq_X{PVN&0^3{{;Wu)<*>e5*iwX2Y0?L zEhQ0J-E#y0Ve8nNNb=5}FTo*fD$S@*{<{?5W+!0zUfzJWn=e}8}G^gCt4GRqnt zqjN4Uy#oU?=7oi}@yT%LWs^AN`+gP9INT{~YwPpAzUf017%gLCsoL6F1PZm^%`lV0 zWiNYKjJIY+Wwp=b|y*7$sM41re*25H~YghO-y8f$=TUp(?Q$`z}3yop5_UK z!K6KC@&rkBJgT%hC3v~-a{aKX2B4y%qM7?=We{5>F*&)Yq@-=$C(hjeSLjkwc?eFi;Il9x`eT@v9_)*r4zQzo zKx}Obm6B!L-QB0Br@{GJD9DqDm{@|RL2Ig<-sbYT|#zsT?`-A}vi+(9Vbc`1RHIP7DUa6N7P|XpApyYjYZTcUx;k z37}G`y#&n2yP|9R zn4tEqbF@yK!ufH?9l!PW^nBd9x4rsceqq6=%?c_R8&Pe+K$R8`lwZ0Co@fS%)YsW5 zKDQB*PodP=Xh4fPI*|PBHLaCmDm4ipI~7BU;@!WOlz@2o>$6f5dRZOc2I*IH0C>nD_4-vN8a=#A9@LyEKL}~LTX`w zE^4SzvNIgMT3B3E1OwZwTKbALZBkw93F!eY%ofByW~&?1&gYz;KGuqbY5P`9_Y zN4UAQmS3uvoVRYIVxyy-&hh9y@l}(a{n2lthx++uQ3I9=^F@X=7tk89I7$oN`s{iEA<_ z1j11NzF&@+#6 za;`^IH!Up< zVW@a9JRFvjn|m=P#(Ia(mz8<4Xd5)z*VpIi<8$u9g$vVDQ}%0XYyDrp{!umi=45xi zk$n8?259^3zY94>%?wl3&?q$v?jrl1(36sqO3TQgg4Z0!vWrOomHy@pEEA!Po$o(p zsw^J)nr5U{5X>B;v?Q^9OgN`wrgUt6Wxss;R!K%iCW?ePhmN?Fp7S7Mz2N7rNCJe3 zpCHG^#&W+@Uh87DLU?>eR|K!k+cI(>+GIsk(NGeD!DQ#;SZOH{{NK9%3VU45SgcF? zzh}%Y{A?U3FluK)legl?$cWIcA+s`|MK}cxRkIBDzmOFOLyHOs2%txe#>r;N;=rPW kRRTm@?oa{*_)qv~>plA>>xZ2e1pE~MNJkX>wSzzYFU>#}3;+NC literal 0 HcmV?d00001 diff --git a/doc/html/c++/inherits.html b/doc/html/c++/inherits.html new file mode 100644 index 0000000..aa4da85 --- /dev/null +++ b/doc/html/c++/inherits.html @@ -0,0 +1,138 @@ + +pfuclt_omni_dataset: Class Hierarchy + + + + + +

          + + +
          +
          +
          Class Hierarchy
          +
          +
          + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          + + + +
          +
          + +
          +
          +pfuclt_omni_dataset
          +Author(s):
          +autogenerated on Mon Jul 3 2017 16:11:29 +
          + + diff --git a/doc/html/c++/minicsv_8cpp.html b/doc/html/c++/minicsv_8cpp.html index 225a29e..8b0e074 100644 --- a/doc/html/c++/minicsv_8cpp.html +++ b/doc/html/c++/minicsv_8cpp.html @@ -9,6 +9,7 @@ @@ -28,12 +29,13 @@
          minicsv.cpp File Reference
          -
          #include <minicsv/minicsv.h>
          +
          #include <minicsv/minicsv.h>
          Include dependency graph for minicsv.cpp:
          +
          @@ -44,7 +46,7 @@
          pfuclt_omni_dataset
          Author(s):
          -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
          diff --git a/doc/html/c++/minicsv_8cpp__incl.map b/doc/html/c++/minicsv_8cpp__incl.map index 5318168..d31b90f 100644 --- a/doc/html/c++/minicsv_8cpp__incl.map +++ b/doc/html/c++/minicsv_8cpp__incl.map @@ -1,2 +1,3 @@ + diff --git a/doc/html/c++/minicsv_8cpp__incl.md5 b/doc/html/c++/minicsv_8cpp__incl.md5 index 57b3659..8141ed2 100644 --- a/doc/html/c++/minicsv_8cpp__incl.md5 +++ b/doc/html/c++/minicsv_8cpp__incl.md5 @@ -1 +1 @@ -e26fb2619c01e4f8788dde5d6da1e5fb \ No newline at end of file +93dd27be67570a8c4584c57158c29557 \ No newline at end of file diff --git a/doc/html/c++/minicsv_8cpp__incl.png b/doc/html/c++/minicsv_8cpp__incl.png index 31ff567aa6d93f4cbe265605e6a66116b186992f..e82aee7231946aa129aaced942eab2f756565145 100644 GIT binary patch literal 11678 zcmdUVbySpZxAqXy4T^-cgp{;2!qDAFhmum#4N^mclr+*IrF1tcEip)k(%mJTdw%a( z>%8Y%=bZmPU5vAs@pOt~RJ z|12~*qnvDvh8uFg-B@D6%F9{XueVu^QePIh5G}q@xPE?LvlJoLc+%|C=?3$@2``v`8FTY zV03()Ialaw!^f~m>zSDu)1i-Cwi&UoXl#@Oa$I3yVWkXyW%~)j1ZOjv4_y=@p3m_p zUj%+nWU~1EEdc`?yXTWs_;dGNz1G{~K@42n2WnSZo6B9nM}wRlrrVRHo>zZTYiuTp z6ehm^dH30*gQ}~m>+s~HXMj2&y0ukgN+gzAJQiH7XJ7!`Vj#A!D;OOKf=$ZNd$ANy zm0np}OVSgLKaj>_^=!&yf;*`$Q_PP%kx}`5P7ZbZ)jCB|QqtrlCE?T)l!WMRaG9ES ze-xB*#GZWm^a&Od(>GgZcQk8PMa#y9BPb}S-M+s$o_~40Q*{J>EdE}fB^O0SNB17B z4IF)E%2_V2YVWQvXdrm>2o1u_#@35Y?F$JA2nY!ex46ALy4?Lbs-~qCLTc=ZG!Xkl z^9({vN{Wt+jeWX3Rjz@{$1Y{FF_NX%?8+i`cWKc(FkrDWT~X&93$u+2l9Qo*{+vKZ zN9XY92nm9Uj^6X*2UdG~J0x&^e*T$>z`Ngah|q72ebQEGa9k2oO5=WDKUW_b9*%x@ zvvi-QS*!wqgi0bsK#|jwiu9+mMSV=o%!2Oz-q15Kp$FVuF+r9OS9%W5&O%E|Z3@Y4 z^}~MJRkfk%>gu{~jv-aGUqAD|yV}qfm4(&~NHF9tFE2wN@d}07VwJJ^`4%w~g+)bq z+T}WB1NO7EU7bNFNRa92X}ucr2X~ii_+Y&j`}0kgC!^xD337-VBcY%z&(v5jKYP|) zs#&bHVwn1dxv9Ci?9ScAMatXTyCR!DZ`OiFBcCxr&enIas|yLAN<>XmMP6P#YlMx1 zL&n*eYtiRG6e=y<1&5O!wBJ;2U*{axZhw>e8Nj!@SVsB71hRH`kyYbYHLm zD>(=G%LgLZ1-8|BZa$f?px7h4w!m_L=87r&@2{ey&usCgCt?|GYy4J4HiDI8_)- zVW&-2sCoUJ$S75Vi70|hN$E39s?|<&k`U`s%?ovl{%l*=B#qEDvgObW%;%zg+KmOO zrP>-M2Zf^kb2G^QzpoN>Aq34F@4t<;-rsS|cjQ!fXQrja*};E~=ZE`*ZiV6QM6UGY zjK6b(YEf$#kxIOVo$o1jF0`a2-vt~jhQ5nqaPshYO+!S6kB$KobKhu zNTrjD%h*e8sFn#1G|&5;bB%0+gT1M_#!+o)LzQkf?~(_1l&fc`EDAeB(kxThzjIpgr(l*T#K!d zA?&fAi#UOzKJ}G~v40BWa1nFek`W zTMXd2?o8vlySra52jf3eW=i~C4RF1&sj2JxcT8eNB?%p!6k95Fb@jvZ^RU9gry?RE z)m|r-kU+4=(2)m`QBmWcU-9hDHQ+-I4_Bo03=GP<#|W0Bv|}j+kvTazXMX)M1MHw~ z#v3XlLr^NOrWTKZg;h3T2f+Ynmyno9KV50W3V{*Q%fK=-DQmpXY>^~Hd@t3&V?`ae zutEq)NEo2=$?8-9t0Vaj7#fFu)eue4+$h)-h;9z6}pQw6wHb4X5@e zxHwoM1(+=PEIAUOJ|Ptq2LQeh$xj557&Sf@4lApxbP9@!p#+kj4H{J5F1G&41?!zN z1Cga;Vv^mRsgZ&ZY;A41&Bo5v+n1l6La$*#a<-aF5+d%q9|;q)Wyq z8%I^)++3XFuMg0r)Y#?f_)U$=h6-&6!K+uVy1Tn2*-Y9E0W4sKO47b_aS1i#AicV} z>Ykm|&lL7h!JzF09HH;_>O}hl69a>QjEoHJFICwrUQJDnBnIv8cTHs}v*t7(xRzNo ze+rV4l0pL0(q1LU+1)e`EVO!k?dGe&dm_}iv_uUtwXzB)W>Q(6Z*sAoD8lvi^CP6D z#wR8w)_e8J43H;SbTri8U+jGMSAKIoFDEB{VPT>5^yjp$_Hd>tbMx-12ez4w8;M=s zKS>*+qOcw28$Wsbu5>?OGpNUbAb&yRo%xn7E)&PHjEpp*{0 zv*@IU0vi3CAOZ%1{NJw-MCI=PbGkJl99uJXBJ1GVEf}@joYIFQO7*nmU>wySR8& z7#nDqzZbuA3e+l-7>JGAZr$ycl_z#c%Xfd-z*jI+ zITpHPsUMi0Zi=~O599=hNxXh7LPs}3%g#<})LbiLYO0EgdMfeNa{8<+s)P$L{Fe%H zjWN~L6R^l@T<$bVF|kDq%&qVslsUMKn3-8|jcFGi4*BoUhphcw)AjOg+cwrT$bm{l zoy9r(0~brwFC`@Keb0X}>*-I6_-bkYe)m8nOW`FHN_l>uiujt#sAx=QXZGRQ9u5!B zgg0F7^$@7G&ySBIYwX~TGp$!7M8pT36BA@zU2R+rhT=1G@O^7F7V(b92d!UmZ_bT+ z=N$370`7Q77#Yu~@8q5YmAD=*KW#mmR<&MeCiA~_CYoP(vLjlRnMp_aA|Cebn`h>W z1RUWO#>f1hS&>nE@;n^l(BKNMl^(+iE-DSZ0%0)EkkBj{Gc(LEJa%Dnuz2?~@}7h1 zGuPJZZSR7j_2rv`fwi1_-{vm9G9Ch?<&i8U5LzS_7Msh}C{rBjJEhTCMprTTF%u|Hl zAH5Z|KD-kkx;yrXq4lW$QLW8dV4WRPzT3{aZK>`;5C-JwQ*PhO6{^n$9+a9zIK6q& z^poz*JhUtPbabnP56@V?e8C#a4;Oy_-n(n5L-=zA`{WlKI;kEBhBiglJOZK^qI6k_7$#ex28`and6M|pW;U2Si`6#ZllJzw@BC^%R- zcq0dpD7eW|G>=uK`L8b!@R=^Iwr;_93Dh6{%t{&cNH#WtdNp*Y!RS7veq^s+J(y{^ z0Ec;%fYjp&yTR;QvaUC1Ld6aboiuKaVW+q#39jqgQ@kPJIXxi0@u|9~CQBo>g5+$R zTt|3CDhrS_rC2^Y#(V<-fx4j!=X5+M1T-dnJ_mc9_4XTw*E^$Y9ru2iMMddbZ=VSY zJ{%w4sPXfmbXXcu<6AkrIH*jaX88wC^tJD-4|^kCi<~7r>5ttDjv&qn&CmDlu%@S5 zeeP(C>V0Y*Ozr=%o9?gyTJ><>sc6jlIRApiso2Hl7a2*R85= zU6exuT_(Av{xex6rMzwHYH4f(aI$-Ue;@7c>ocYwZ1v#8)-0}+RZt*rzp`XA_O1CU zlXCLH9-U5YT5&W}aIQKa;JyB=#&lmW`Y*(WboY#|9{=$?*iYeyO?&wFLiX@G(+!t-FVE%eiK*VJG&|R{xCw2V zXGV=q*b~K$At1}Qr-%WMZ<)4ZUV1aX*hWel5*QaJ07`)Q;W8fiUoL0?9uCwt9v%Nn zjfJepbd`7zcw6VrTapCI@BQrt6QzhJ=E-_nNE(mH*d=#)-i`!nV05%^>(%-rpmpR3 z8IeNb6E$Hd=p3cZ(Jt=webr`0fWbSuZci#$xe-o<1j)G-sbOS_q?h`uFHh0pla%tosdAf{ zx*Y+iO#j;YuxuHjyiCkCE>m%lP(@6M2pZj#zO5}k9sOF3^P2p8OKPDI`DEYTMT`62 zFhQ64PcBxvpY{3F^Of;!rA(03w#BT2Bv=gJwboWNocY{@)hNWGRLUL$AlQ zw12DLz6vz14V`EJ0Sd=IdG4}q38)k<_9L8u@~S&c_|sD6o3fbb=z;P44j_C0P}${< zb&U#=(^gO(e);+}CBMB;=v)I2=+_NE(G_=_eSEXhBhq?4D`VK`L}B7j7EMUsyj2ie zwrN3woP6W-_je*q#gfx0Luskt%-0QMP(0#4dZJh8^9ARactlgcb;~`lh`9*l3vb6w zm6YhxdASB)grmz#_jgR${?{y7(?zlBdwlXHDC%1qIhCo4a!XQv z@h^gSvW$`Ofs$Mt{*KdvoHUD?KfAFB;?e zg#&5U1|;4x5D_`hv+eSNWtllRT*Jqgzj`|h->vcTm9;UF>C+&;5f=j0I1p^);goLv z(ea>>n~_Eq1H-%w6e8~0(c2#rZnU=nVFJMS(DCYw*er;TxiP% zUtfoQ+5&s?odAW9+3v2|b?e_@4`=_{P(A`@AogzrK=$5VhVGv~aiqe(V4?#Ba2$gr z4$Wit@}Wj4rcCT^SOhWprd#T(AL@ImIqi{gVn2rv&tC$bpO7&8>V*D&d(#wIzqWe9 zP5$gdvUXsb4<~>jJZES4_?JRaW3NJV0L>`)_)H+M-myW}4Da4W5}m?;sLUP|#8~@Y-2;<`1kLn`cI~e6QkJ)g1%_}nkcfD01T&GR~1@i+)SYiC8iSj z)(p!UrJw-=RAN}*^p#{8h3G}Zl42+9G;2ZCQeJti1 z{q?EIjGh4Q*cDAiG5$G?Pg1HF(85=smV|Pl(W$xfo1gDGAsAl6;?IK-LUPGpZ|3Xm ztr8Lvs%*PgHsDYA`LF$OvnRuYN{atqn#VVk|MIEdW5mk&z{>4O$-OD5{U67?3~sIV zz0wO7kasN5N8SI^0CZNbK{BN;DL^7XSDp5z1 zO^^;}P&f?qdwKO;jt2O52cbj=QGYkmj20wF9?5PCBje!*;!qa?l-hhKj8Y5Kf4H|2 z5<0`;I*_ca3~(r>9|8h3y~C)a6@UX3jsJJv21wS}WAcYP6Ci&lA0rb&xVewH>~tO@ z!qXjk&DWpDXw;S-X4K*@1?auQqHjTSg8gL4qSHI>Sc+I!Pzetpkd!YDFUC#h>Qx>K z*W=5??OX8L7o6II^s;3O!q5`=E9zPz(0*-;^VXi-%_v1D$*~(W=3XQuNx1<5s;Fq^ zy#U?L%EV29#+a9axZUBQ%S`hb4xsMKJ9EFRW6_dN-L!n%w#V1}fR^^Rcgu3^FZ(&pq&nOfWUSr_x8*K^tQB4_V-Tu`DjkR6L)dc-N9nQ}Jq}gYRJBW;nCd+U- zT4iT5(D6(4*_nPafX(U3`%#^5`xze}y3cu%k)x7QYp_m5de>-`aDU7Wwugr-IO27^ z5|g?AD@zNu5Ag@g9u5DFggXs+Wu-F6d$AB>cQgd1RvQ@+j3 zL6eJ~&c`#Ku||%9mY1HK@`I2#u|$ac?RfViBqUKTuj8*y&NXm1FI>7135iY*kUK!c z2r5!$cfLF{Y;2sN02O{aDa$BuB#ZPV&>XK?OG`1qp$)Gvu(EFAUJ!I;#&m3NdRSRG zTx~hb0OZKk)xNpMVz&n1j04?@O`jKeq8R_DTdBT!JLUkOUh&^a06QDyA}DuWAJPW5 zfHx0BQV39)52o;xg|(re)k+~~?4>zrzD-N5+YVXl%|8E>jU*3`X078A@)O}^(~Xg( zQ-6>c6ypB4<`(yXhLt6!nNYf}<3ARJ1Y?@$$y*~pQboWe;+*1(pAL|k^wNN>;(ql@ z2q80#ig!f0@9A$gYV7^^&Vo2uh`a$gQvKELy;;wX=IEV;xqOuqA(!=MK&!Glm7Q(w zl=$2oCr;J#;b{w(XEkYecagSm)-mbwY+c7PK>VIxzaAl|j`J!cpQ23|bi*iUz9H}5 z=V8Hz3p9vlW_Y{Gw6Dd>+M4$OHv*Ykd0boC)I=gLuXyHPK&Z^jlCaW)pYMEVO0>T; zsu4;Hkt;0PoGg8KzUR|2e(U57CTp)i3;ocbA-nHvXA2?n;!rO>?CSE%zHD(3WNCV?BYyt3FFxgOyN>qtfhTPbOk`S;QW|=TLpg&$ zI*FxrYPuJf=ul|yr`+6vA8;9HZ`b4`Dw9ePl8!51KOS(RE1Y|a+@<203xT90W~!_( z!@?XIVt~c^Qy8_>PwN|9FQ35$%$C|wlTz;d*wyJ0Oc$D2fRtG+xI zQ`WQ$MM4VUI1kf*R$wu32L(mY+?>eF#wP5O6f6G<807^uTu72UNd|d=VU~ zTNZ8}Y+D>?=_HA$cca$BS*x7lDDubjbVx)`(09^1j;*?PBb)+*OwcTW@lDo=u%Gv-`b!jQmD60u+gH z$v4+)p_Z}E%s7&OE< zJsk*P=3Bf9LQYBLV3)SuBmsidkcr2Vf~lpBd-~s@wDQZX;;+pdx>cd!IiZs3CoI;v zyBv!{L%x?+6`i2M>z52QY6(edF_U;TX&D(kBO{evCrv;Q@%3#lIoV+#!n7Q@Whzqn!#7)|btYKqN-+<_ z?)apng1Wrgt@$P&4BVLV(*SVb9zD{Snbk)$3Cigo5zW%uw`^wi_DB>I*tHG|tvbc7 z9EOc*dwc>?2{|Un0r%&dKMNm-i0s}qqn#4S%bz)({NCM-j(s9rR`a97sKp)E#>R#` z&BNa9zyTNs+~eiAgx3CUFdFVp1@+m<)~lx?e`{HVJoX`qiadG-8TmF7jJA7RQW!yC zsolSRRXcKcUA;LQW@TZK&le{OA#i&4PO?~~xvhndS*|z=9Rds@w!TK?KKK52UUkC? zjs=BudEhkZCO6|v_7P6`;x~Hf0I-G})kc@*$ zmY9$*CN0qD-H64E(>JtVq;@3e@2qX|{bwY_N*pOQ1e@5CO~@HI~EV|C%i#=6=9Wq0rmg z3p+h^b>1AKUD?`VDP!)CN#!si0zY6txxEc$b98)sbvhH%wfp2>j9pw@`edp77?6>X zdx3KYDk=GX6VM9JjVuo+7)$|&i#Zrtt&U^~)3LEBK?vfgM2RGm>{0%=Ip-9ADYkOe zMf1r0(V3OfPBX`iiQnX#JHEF2|@Jqkr zOLyYDw|@8({7S!n|Av8hVL<3aMUBofg&L%dI%Ie9D{uUa&QBaW{_4CC7LLji_K5Vk z*pC3gkI<>mFD)u{$RU-4f%z^hf|w~19iIyJh+QA{)oK)rHUx;AqoEBA4RT6KB$$|( z0Q?rsM=}M=-slLZzOfe*6I=a}%(@B^qkCdPlg+rb@yDJa#nj#aE?)2F&unI9X0$1s zCLG7d$B2n*Q&W>9N2>14n-B5vYAZEmk0t7MKYSoUl0b}iL8PMC4eGV@_NOZhaK#Ah z^gVE2RY_uuR~iXB-{1L7tpUGSB!^KmY<1QA=;olKeBJB#xBQg%qrA5il)~;x7)KZU zp0_pcW@mv8##`i8p&Fz&al_eRYI2m(E!lm@68D`sG%Z&Bamp{+JvY!2^f0v&m&+tVo&S^7@)iOsu_s zB($xywajm%ukf?QYml~6_m#$NSdNYdSQ9p7CQ9~YHVb^NZHw)G6d)A0xa&rAI3SU6Grluxs>fljaz^&9- zW^pkSuukQB8%|t&UrX9)D6_X4nnNy`^Y;h#1B5^5;T^nCk#uTlYVSni*RV3^kfk&< zh>U&q_@?X}7F#h@RaK|f{xwqW&^bX3bl5C z5M^R*O><@baLsnMt8Dhg{{DWl5as>fi=`ct+U$~lo~*gCkw#FEEN_<$0{Sb^*pZQt zlJ47lZ8BKY(Oekf$^$r0|YA)k+M|qr`6Fb z?ZMY&gZ_&k?uMn*FGlvFm}a3-A6K-f=i0e4yny462@19H(JpAn-m+ z*=9rHGc!M5-+B77`JGIW#=1Ju2X8oh`8Fi2__#2y5Wc z<~Tj2;5$@A0-%&nlUQ2JN#Pc-1z!`PIqkj{&Su$=kyo{O-X) zMerF6QICMr0n@->PH3vs5l#?V;=eF;I-fXQPJl>_$c9C4#aioe$(gyiC`5gkpEsn1 z{_3*>-cCS(IdrOw*@0$4pP7{vN-*UZyiElUYd4W1>Gqti6El(`$-BNV@fQ`_I>|~% zpaq@*PD)BjDDaK-2_Ll51CyNXt(cc@3#R(Xwe|%#z;-anNq_Ow!9V7Gkq;4T1a5~2 z0GN@$3Q;oc=yr1(`H&R~uQZaDmyZC>jgk`P@h@)_fpA9)F4hY?av@PsQ2>02E&8Lu z9F44Owk)IgT}xP47#4^Tu+A`B4yQi_ds;p}Qm4M)Z)g)}`ltHoHSg^N@Scn}yV<$! z&1#<^=$hHx?UkF5TUpGChPj1BjQJ&#+s{+)jpr`{CQk2)Bd*GKPAXJuk3?tn&To>E zNNVliDiuBH+6~kcP?I81XfZG`yTF+Ud;cCeQ`F}X*w@YwOk!6fazZ`=@udPz9CMLg zP+RhHb0Plz{&K3S;VmsdQKAS3e!QJ#UOHPE|MpVG`ucjHZZzwpydel;24*|gEe$rK zW-WLjK|=b`i87zFyL*3`c6sd=w%`|U6rj)o8({1EpUe$f&Z(tesyb$7^z7kz57Ql< zb0)|+0eg!fsDb%|T)gRq2SgF5fTGH@j7}#r-t7FoGxAB_7f8PG>(Q$7dv>N}Q9{oI z*8w#K(4o?rD=RCj{DK0g#fg9x_`iTu?0)@1iH;slF1u}wvA`7Mg zvZ}HG0LT-pEgix28aTqFCBeDs`R{h%0`<1BvIKU%^)g;{9stO236|#MxLa%NAY1qZ zqI+jdrG{fOC;EeSLBi#X`R1oy6IE7iIZV+_MN#6dq=QVKVSxtUx&tQjQ~G+pYT8|6 zD7>Uu>$;|)11q@q@nOYO^K2)ClI|JTGWO>SnATsJ);5{9PA&eG9w^z(=H=qw-7@bYGQx*QgZJHzW1+&uBV$dsk3VH>|Z(-6&+Tdwba2 zaQTlD6B8?S@$vDXHUGg|#~IsnXXgSc3Yy&1)WqR%va_?NrltxD3tRk$9{V=0J?A<* zIXRp|fS&lFi|}~-O6RcZ^@_5x+0Es#{rmTe#o`a^Go@7#>)Ys z1_cAJbV#>!Q7AcSY14?8($S)_tF4oht_lhYPD6u;>lP-}!s+R=ycEA0_W=8-WAKv* zJ1rP5@pD^C%e&Dko0`G1B$9!?zM8taIs$P-y0^Di5}?!Rm5$5o6S0yIh?5f0#>UFZ z%3o$T;N0M`w!92_|NS+~?d|OrvVrlZq7;nW$jAt~2&Juk=15-1BuDSiAqk++){jUe zg1Gzn-O0<#v)A=S7XjT~M)btQfq{X<#6%~hLG}r*-xF1pv??&%t}aGIgy`9`XNFy0 zU-d~9c*KM^@*E@}2G5?qe|!;KBtpM9d6h)@;+@#c2)Wq9w)Y10$W>pj*iZ=c=&R9W_7SYx0< zfESboXrTVI`a06S%e>ZYQ8b^mgZ3sS^r%m5Y`y-gVLZTC6ZPjyDPtoA?ECktr3{Z6 zOl^+2`3}aTZAk#VVVE8V^$V;er7|F46(9bvJNs7>UU0 z?&;~V-}2%QKYd#5;DcXOdk6W4ZowxW=_=05%q&u|{e0;)cl7VSzu&tzg-k?BGnbZ@ zhP9d7(_q4?;}W8h>Sl-z4mqbc#Gyg^(AtR=+ZyXaq44^3*#o6enl+Qj#51;oS5X`Y zu(q}qIm5sAtr2*B_6KTJ_@adDA@{)o(9SXcm^)XgX6YNe&6J#c^X`|qGsazkeZ1p;%Vc815~gUD)2 zO~KHRR5HjUp*Y&Y@>SQmB3H31Z%QbvA5kKAFV_te7#gBbm6)KwKs{Yu4MIdfK&rsk zgHLxs<|FeT=j13|vG~Ev?6G&#%F2p$?i3i>+xh-`U9$4>UpJTGj(UNcju$U#6LMv* zNG=%hm;G%afI-0?;4ftL%Bu-3d2zZkwk95DXE&6ctq9D9nGThnYPf$tGCEpbTKaB7 zL-j}i$Y6B*DMQ21s3=Zl9NyN}wp3|6mKnf_j}b8${35+$1_dBD6Y|wm zRY%9hB)o#ZHI$A{HJ1wlcB6mZftBRz>+9hm1Yvp#N?7m&8i?Cm8rgKJ$S59-iu%nM zJLx|Js$HIr9mruAEcPItPW@XCgokV;Cnq-?U~FS!1I)gSW3gBkf%ImcQHOyCuhbD3&EK|!E)JiPPER?0FvbaE)kD0E{B e`k${0b|h|`R46f}>}-KQbpYWE$+F(Ui}^1n1iw-M diff --git a/doc/html/c++/minicsv_8cpp_source.html b/doc/html/c++/minicsv_8cpp_source.html index 052e3bd..2151032 100644 --- a/doc/html/c++/minicsv_8cpp_source.html +++ b/doc/html/c++/minicsv_8cpp_source.html @@ -9,6 +9,7 @@
          @@ -28,13 +29,14 @@
          minicsv.cpp
          -Go to the documentation of this file.
          1 #include <minicsv/minicsv.h>
          +Go to the documentation of this file.

          pfuclt_omni_dataset
          Author(s):
          -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:28
          diff --git a/doc/html/c++/minicsv_8h.html b/doc/html/c++/minicsv_8h.html new file mode 100644 index 0000000..812a120 --- /dev/null +++ b/doc/html/c++/minicsv_8h.html @@ -0,0 +1,812 @@ + +pfuclt_omni_dataset: minicsv.h File Reference + + + + + + + + + +
          + +
          +
          minicsv.h File Reference
          +
          +
          +
          #include <string>
          +#include <sstream>
          +#include <fstream>
          +#include <algorithm>
          +#include <stdexcept>
          +
          +Include dependency graph for minicsv.h:
          +
          +
          + + +
          +
          +This graph shows which files directly or indirectly include this file:
          +
          +
          + + + + +
          +
          +

          Go to the source code of this file.

          + + + + + + + + + + + + +

          +Classes

          class  mini::csv::ifstream
           
          class  mini::csv::istringstream
           
          class  mini::csv::ofstream
           
          class  mini::csv::ostringstream
           
          class  mini::csv::sep
           
          + + + + + +

          +Namespaces

           mini
           
           mini::csv
           
          + + + +

          +Macros

          #define NEWLINE   '\n'
           
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

          +Functions

          template<typename T >
          mini::csv::ofstreamoperator<< (mini::csv::ofstream &ostm, const T &val)
           
          template<typename T >
          mini::csv::ofstreamoperator<< (mini::csv::ofstream &ostm, const T *val)
           
          template<>
          mini::csv::ofstreamoperator<< (mini::csv::ofstream &ostm, const std::string &val)
           
          template<>
          mini::csv::ofstreamoperator<< (mini::csv::ofstream &ostm, const mini::csv::sep &val)
           
          template<>
          mini::csv::ofstreamoperator<< (mini::csv::ofstream &ostm, const char &val)
           
          template<>
          mini::csv::ofstreamoperator<< (mini::csv::ofstream &ostm, const char *val)
           
          template<typename T >
          mini::csv::ostringstreamoperator<< (mini::csv::ostringstream &ostm, const T &val)
           
          template<typename T >
          mini::csv::ostringstreamoperator<< (mini::csv::ostringstream &ostm, const T *val)
           
          template<>
          mini::csv::ostringstreamoperator<< (mini::csv::ostringstream &ostm, const std::string &val)
           
          template<>
          mini::csv::ostringstreamoperator<< (mini::csv::ostringstream &ostm, const mini::csv::sep &val)
           
          template<>
          mini::csv::ostringstreamoperator<< (mini::csv::ostringstream &ostm, const char &val)
           
          template<>
          mini::csv::ostringstreamoperator<< (mini::csv::ostringstream &ostm, const char *val)
           
          template<typename T >
          mini::csv::ifstreamoperator>> (mini::csv::ifstream &istm, T &val)
           
          template<>
          mini::csv::ifstreamoperator>> (mini::csv::ifstream &istm, std::string &val)
           
          template<>
          mini::csv::ifstreamoperator>> (mini::csv::ifstream &istm, mini::csv::sep &val)
           
          template<typename T >
          mini::csv::istringstreamoperator>> (mini::csv::istringstream &istm, T &val)
           
          template<>
          mini::csv::istringstreamoperator>> (mini::csv::istringstream &istm, std::string &val)
           
          template<>
          mini::csv::istringstreamoperator>> (mini::csv::istringstream &istm, mini::csv::sep &val)
           
          std::string const & mini::csv::replace (std::string &src, std::string const &to_find, std::string const &to_replace)
           
          std::string mini::csv::trim (const std::string &str, const std::string &trimChars)
           
          std::string mini::csv::trim_left (const std::string &str, const std::string &trimChars)
           
          std::string mini::csv::trim_right (const std::string &str, const std::string &trimChars)
           
          +

          Macro Definition Documentation

          + +
          +
          + + + + +
          #define NEWLINE   '\n'
          +
          + +

          Definition at line 45 of file minicsv.h.

          + +
          +
          +

          Function Documentation

          + +
          +
          +
          +template<typename T >
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ofstream& operator<< (mini::csv::ofstreamostm,
          const T & val 
          )
          +
          + +

          Definition at line 511 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<typename T >
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ofstream& operator<< (mini::csv::ofstreamostm,
          const T * val 
          )
          +
          + +

          Definition at line 528 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ofstream& operator<< (mini::csv::ofstreamostm,
          const std::string & val 
          )
          +
          +inline
          +
          + +

          Definition at line 545 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ofstream& operator<< (mini::csv::ofstreamostm,
          const mini::csv::sepval 
          )
          +
          +inline
          +
          + +

          Definition at line 559 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ofstream& operator<< (mini::csv::ofstreamostm,
          const char & val 
          )
          +
          +inline
          +
          + +

          Definition at line 567 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ofstream& operator<< (mini::csv::ofstreamostm,
          const char * val 
          )
          +
          +inline
          +
          + +

          Definition at line 587 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<typename T >
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ostringstream& operator<< (mini::csv::ostringstreamostm,
          const T & val 
          )
          +
          + +

          Definition at line 902 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<typename T >
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ostringstream& operator<< (mini::csv::ostringstreamostm,
          const T * val 
          )
          +
          + +

          Definition at line 918 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ostringstream& operator<< (mini::csv::ostringstreamostm,
          const std::string & val 
          )
          +
          +inline
          +
          + +

          Definition at line 934 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ostringstream& operator<< (mini::csv::ostringstreamostm,
          const mini::csv::sepval 
          )
          +
          +inline
          +
          + +

          Definition at line 947 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ostringstream& operator<< (mini::csv::ostringstreamostm,
          const char & val 
          )
          +
          +inline
          +
          + +

          Definition at line 955 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ostringstream& operator<< (mini::csv::ostringstreamostm,
          const char * val 
          )
          +
          +inline
          +
          + +

          Definition at line 975 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<typename T >
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ifstream& operator>> (mini::csv::ifstreamistm,
          T & val 
          )
          +
          + +

          Definition at line 470 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ifstream& operator>> (mini::csv::ifstreamistm,
          std::string & val 
          )
          +
          +inline
          +
          + +

          Definition at line 495 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::ifstream& operator>> (mini::csv::ifstreamistm,
          mini::csv::sepval 
          )
          +
          +inline
          +
          + +

          Definition at line 503 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<typename T >
          + + + + + + + + + + + + + + + + + + +
          mini::csv::istringstream& operator>> (mini::csv::istringstreamistm,
          T & val 
          )
          +
          + +

          Definition at line 861 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::istringstream& operator>> (mini::csv::istringstreamistm,
          std::string & val 
          )
          +
          +inline
          +
          + +

          Definition at line 886 of file minicsv.h.

          + +
          +
          + +
          +
          +
          +template<>
          + + + + + +
          + + + + + + + + + + + + + + + + + + +
          mini::csv::istringstream& operator>> (mini::csv::istringstreamistm,
          mini::csv::sepval 
          )
          +
          +inline
          +
          + +

          Definition at line 894 of file minicsv.h.

          + +
          +
          +
          + +
          +
          +pfuclt_omni_dataset
          +Author(s):
          +autogenerated on Mon Jul 3 2017 16:11:29 +
          + + diff --git a/doc/html/c++/minicsv_8h__dep__incl.map b/doc/html/c++/minicsv_8h__dep__incl.map new file mode 100644 index 0000000..f830bbf --- /dev/null +++ b/doc/html/c++/minicsv_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/doc/html/c++/minicsv_8h__dep__incl.md5 b/doc/html/c++/minicsv_8h__dep__incl.md5 new file mode 100644 index 0000000..f535d20 --- /dev/null +++ b/doc/html/c++/minicsv_8h__dep__incl.md5 @@ -0,0 +1 @@ +67051f122a212bc5a351871ecbc63f57 \ No newline at end of file diff --git a/doc/html/c++/minicsv_8h__dep__incl.png b/doc/html/c++/minicsv_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..d921305f2c9d36394dcb66631b2b2f256579e20a GIT binary patch literal 4734 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 + diff --git a/doc/html/c++/minicsv_8h__incl.md5 b/doc/html/c++/minicsv_8h__incl.md5 new file mode 100644 index 0000000..68be9c8 --- /dev/null +++ b/doc/html/c++/minicsv_8h__incl.md5 @@ -0,0 +1 @@ +c09fab83ee9ed275be3b7fab31ed545b \ No newline at end of file diff --git a/doc/html/c++/minicsv_8h__incl.png b/doc/html/c++/minicsv_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..5e5724835d06140fa4beba98ac1df9b60854f5a1 GIT binary patch literal 8391 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 UoFAFx4rHS!%WKG0$-E5xFAQcxfdBvi literal 0 HcmV?d00001 diff --git a/doc/html/c++/minicsv_8h_source.html b/doc/html/c++/minicsv_8h_source.html new file mode 100644 index 0000000..cd72e52 --- /dev/null +++ b/doc/html/c++/minicsv_8h_source.html @@ -0,0 +1,59 @@ + +pfuclt_omni_dataset: minicsv.h Source File + + + + + + + + + +
          +
          +
          minicsv.h
          +
          +
          +Go to the documentation of this file.
          1 // The MIT License (MIT)
          2 // Minimalistic CSV Streams 1.7.9
          3 // Copyright (C) 2014 - 2016, by Wong Shao Voon (shaovoon@yahoo.com)
          4 //
          5 // http://opensource.org/licenses/MIT
          6 //
          7 // version 1.2 : make use of make_shared
          8 // version 1.3 : fixed: to when reading the last line and it does not have linefeed
          9 // added: skip_1st_line and skip_line functions to ifstream class
          10 // version 1.4 : Removed the use of smart ptr.
          11 // version 1.5 : Performance increase on writing without flushing every line.
          12 // version 1.6 : Add string streams
          13 // version 1.7 : You MUST specify the escape/unescape string when calling set_delimiter. Option to surround/trim string with quotes
          14 // version 1.7.1 : Add stream operator overload usage in example.cpp
          15 // Disable the surround/trim quote on text by default
          16 // version 1.7.2 : Stream operator overload for const char*
          17 // version 1.7.3 : Add num_of_delimiter method to ifstream and istringstream
          18 // Fix g++ compilation errors
          19 // version 1.7.4 : Add get_rest_of_line
          20 // version 1.7.5 : Add terminate_on_blank_line variable. Set to false if your file format has blank lines in between.
          21 // version 1.7.6 : Ignore delimiters within quotes during reading when enable_trim_quote_on_str is true;
          22 // version 1.7.7 : Fixed multiple symbol linkage errors
          23 // version 1.7.8 : Add quote escape/unescape. Default is "&quot;"
          24 // version 1.7.9 : Reading UTF-8 BOM
          25 // version 1.7.10 : separator class for the stream, so that no need to call set_delimiter repeatedly if delimiter keep changing
          26 // version 1.7.11 : Fixed num_of_delimiters function: do not count delimiter within quotes
          27 // version 1.8.0 : Add meaningful error message for data conversion during reading
          28 // version 1.8.1 : Put under the mini namespace
          29 
          30 //#define USE_BOOST_LEXICAL_CAST
          31 
          32 #ifndef MiniCSV_H
          33  #define MiniCSV_H
          34 
          35 #include <string>
          36 #include <sstream>
          37 #include <fstream>
          38 #include <algorithm>
          39 #include <stdexcept>
          40 
          41 #ifdef USE_BOOST_LEXICAL_CAST
          42 # include <boost/lexical_cast.hpp>
          43 #endif
          44 
          45 #define NEWLINE '\n'
          46 
          47 namespace mini
          48 {
          49 
          50  namespace csv
          51  {
          52  inline std::string const & replace(std::string & src, std::string const & to_find, std::string const & to_replace)
          53  {
          54  size_t pos = 0;
          55  while (std::string::npos != pos)
          56  {
          57  pos = src.find(to_find, pos);
          58 
          59  if (std::string::npos != pos)
          60  {
          61  src.erase(pos, to_find.size());
          62  src.insert(pos, to_replace);
          63  pos += to_replace.size();
          64  }
          65  }
          66 
          67  return src;
          68  }
          69 
          70  inline std::string trim_right(const std::string& str, const std::string& trimChars)
          71  {
          72  std::string result = "";
          73  size_t endpos = str.find_last_not_of(trimChars);
          74  if (std::string::npos != endpos)
          75  {
          76  result = str.substr(0, endpos + 1);
          77  }
          78  else
          79  result = str;
          80 
          81  return result;
          82  }
          83 
          84  inline std::string trim_left(const std::string& str, const std::string& trimChars)
          85  {
          86  std::string result = "";
          87 
          88  size_t startpos = str.find_first_not_of(trimChars);
          89  if (std::string::npos != startpos)
          90  {
          91  result = str.substr(startpos);
          92  }
          93  else
          94  result = str;
          95 
          96  return result;
          97  }
          98 
          99  inline std::string trim(const std::string& str, const std::string& trimChars)
          100  {
          101  return trim_left(trim_right(str, trimChars), trimChars);
          102  }
          103 
          104  class sep // separator class for the stream, so that no need to call set_delimiter
          105  {
          106  public:
          107  sep(const char delimiter_, const std::string& escape_) : delimiter(delimiter_), escape(escape_) {}
          108 
          109  const char get_delimiter() const { return delimiter; }
          110  const std::string& get_escape() const { return escape; }
          111  private:
          112  const char delimiter;
          113  const std::string escape;
          114  };
          115 
          116  class ifstream
          117  {
          118  public:
          119  ifstream()
          120  : str("")
          121  , pos(0)
          122  , delimiter(",")
          123  , unescape_str("##")
          124  , trim_quote_on_str(false)
          125  , trim_quote('\"')
          126  , terminate_on_blank_line(true)
          127  , quote_unescape("&quot;")
          128  , has_bom(false)
          129  , first_line_read(false)
          130  , filename("")
          131  , line_num(0)
          132  , token_num(0)
          133  {
          134  }
          135  ifstream(const char * file)
          136  {
          137  open(file);
          138  }
          139  void open(const char * file)
          140  {
          141  init();
          142  filename = file;
          143  istm.open(file, std::ios_base::in);
          144  read_bom();
          145  }
          146  void read_bom()
          147  {
          148  char tt[3] = { 0, 0, 0 };
          149 
          150  istm.read(tt, sizeof(tt));
          151 
          152  if (tt[0] == (char)0xEF || tt[1] == (char)0xBB || tt[2] == (char)0xBF) // not the correct BOM, so reset the pos to beginning (file might not have BOM)
          153  has_bom = true;
          154 
          155  istm.seekg(0, istm.beg);
          156  }
          157  void init()
          158  {
          159  str = "";
          160  pos = 0;
          161  delimiter = ',';
          162  unescape_str = "##";
          163  trim_quote_on_str = false;
          164  trim_quote = '\"';
          165  terminate_on_blank_line = true;
          166  has_bom = false;
          167  first_line_read = false;
          168  filename = "";
          169  line_num = 0;
          170  token_num = 0;
          171  }
          172  void close()
          173  {
          174  istm.close();
          175  }
          176  bool is_open()
          177  {
          178  return istm.is_open();
          179  }
          180  void enable_trim_quote_on_str(bool enable, char quote, const std::string& unescape = "&quot;")
          181  {
          182  trim_quote_on_str = enable;
          183  trim_quote = quote;
          184  quote_unescape = unescape;
          185  }
          186  // eof is replaced by read_line
          187  //bool eof() const
          188  void set_delimiter(char delimiter_, std::string const & unescape_str_)
          189  {
          190  delimiter = delimiter_;
          191  unescape_str = unescape_str_;
          192  }
          193  std::string const & get_delimiter() const
          194  {
          195  return delimiter;
          196  }
          197  std::string const & get_unescape_str() const
          198  {
          199  return unescape_str;
          200  }
          201  void skip_line()
          202  {
          203  if (!istm.eof())
          204  {
          205  std::getline(istm, str);
          206  pos = 0;
          207 
          208  if (first_line_read == false)
          209  {
          210  first_line_read = true;
          211  }
          212  }
          213  }
          214  bool read_line()
          215  {
          216  this->str = "";
          217  while (!istm.eof())
          218  {
          219  std::getline(istm, this->str);
          220  pos = 0;
          221 
          222  if (first_line_read == false)
          223  {
          224  first_line_read = true;
          225  if (has_bom)
          226  {
          227  this->str = this->str.substr(3);
          228  }
          229  }
          230 
          231  if (this->str.empty())
          232  {
          233  if (terminate_on_blank_line)
          234  break;
          235  else
          236  continue;
          237  }
          238 
          239  ++line_num;
          240  token_num = 0;
          241  return true;
          242  }
          243  return false;
          244  }
          245  std::string get_delimited_str()
          246  {
          247  std::string str = "";
          248  char ch = '\0';
          249  bool within_quote = false;
          250  do
          251  {
          252  if (pos >= this->str.size())
          253  {
          254  this->str = "";
          255 
          256  ++token_num;
          257  return unescape(str);
          258  }
          259 
          260  ch = this->str[pos];
          261  if (trim_quote_on_str)
          262  {
          263  if (within_quote == false && ch == trim_quote && ((pos > 0 && this->str[pos - 1] == delimiter[0]) || pos == 0))
          264  within_quote = true;
          265  else if (within_quote && ch == trim_quote)
          266  within_quote = false;
          267  }
          268 
          269  ++(pos);
          270 
          271  if (ch == delimiter[0] && within_quote == false)
          272  break;
          273  if (ch == '\r' || ch == '\n')
          274  break;
          275 
          276  str += ch;
          277  } while (true);
          278 
          279  ++token_num;
          280  return unescape(str);
          281  }
          282  std::string unescape(std::string & src)
          283  {
          284  src = unescape_str.empty() ? src : replace(src, unescape_str, delimiter);
          285 
          286  if (trim_quote_on_str)
          287  {
          288  std::string s = trim(src, std::string(1, trim_quote));
          289  return replace(s, quote_unescape, std::string(1, trim_quote));
          290  }
          291 
          292  return src;
          293  }
          294  size_t num_of_delimiter() const
          295  {
          296  if (delimiter.size() == 0)
          297  return 0;
          298 
          299  size_t cnt = 0;
          300  if (trim_quote_on_str)
          301  {
          302  bool inside_quote = false;
          303  for (size_t i = 0; i < str.size(); ++i)
          304  {
          305  if (str[i] == trim_quote)
          306  inside_quote = !inside_quote;
          307 
          308  if (!inside_quote)
          309  {
          310  if (str[i] == delimiter[0])
          311  ++cnt;
          312  }
          313  }
          314  }
          315  else
          316  {
          317  cnt = std::count(str.begin(), str.end(), delimiter[0]);
          318  }
          319  return cnt;
          320  }
          321  std::string get_rest_of_line() const
          322  {
          323  return str.substr(pos);
          324  }
          325  const std::string& get_line() const
          326  {
          327  return str;
          328  }
          329  void enable_terminate_on_blank_line(bool enable)
          330  {
          331  terminate_on_blank_line = enable;
          332  }
          333  bool is_terminate_on_blank_line() const
          334  {
          335  return terminate_on_blank_line;
          336  }
          337  std::string error_line(const std::string& token)
          338  {
          339  std::ostringstream is;
          340  is << "csv::ifstream Conversion error at line no.:" << line_num << ", filename:" << filename << ", token position:" << token_num << ", token:" << token;
          341  return is.str();
          342  }
          343 
          344  private:
          345  std::ifstream istm;
          346  std::string str;
          347  size_t pos;
          348  std::string delimiter;
          349  std::string unescape_str;
          350  bool trim_quote_on_str;
          351  char trim_quote;
          352  bool terminate_on_blank_line;
          353  std::string quote_unescape;
          354  bool has_bom;
          355  bool first_line_read;
          356  std::string filename;
          357  size_t line_num;
          358  size_t token_num;
          359  };
          360 
          361  class ofstream
          362  {
          363  public:
          364 
          365  ofstream()
          366  : after_newline(true)
          367  , delimiter(",")
          368  , escape_str("##")
          369  , surround_quote_on_str(false)
          370  , surround_quote('\"')
          371  , quote_escape("&quot;")
          372  {
          373  }
          374  ofstream(const char * file)
          375  {
          376  open(file);
          377  }
          378  void open(const char * file)
          379  {
          380  init();
          381  ostm.open(file, std::ios_base::out);
          382  }
          383  void init()
          384  {
          385  after_newline = true;
          386  delimiter = ',';
          387  escape_str = "##";
          388  surround_quote_on_str = false;
          389  surround_quote = '\"';
          390  quote_escape = "&quot;";
          391  }
          392  void flush()
          393  {
          394  ostm.flush();
          395  }
          396  void close()
          397  {
          398  ostm.close();
          399  }
          400  bool is_open()
          401  {
          402  return ostm.is_open();
          403  }
          404  void enable_surround_quote_on_str(bool enable, char quote, const std::string& escape = "&quot;")
          405  {
          406  surround_quote_on_str = enable;
          407  surround_quote = quote;
          408  quote_escape = escape;
          409  }
          410  void set_delimiter(char delimiter_, std::string const & escape_str_)
          411  {
          412  delimiter = delimiter_;
          413  escape_str = escape_str_;
          414  }
          415  std::string const & get_delimiter() const
          416  {
          417  return delimiter;
          418  }
          419  std::string const & get_escape_str() const
          420  {
          421  return escape_str;
          422  }
          423  void set_after_newline(bool after_newline_)
          424  {
          425  after_newline = after_newline_;
          426  }
          427  bool get_after_newline() const
          428  {
          429  return after_newline;
          430  }
          431  std::ofstream& get_ofstream()
          432  {
          433  return ostm;
          434  }
          435  void escape_and_output(std::string src)
          436  {
          437  ostm << ((escape_str.empty()) ? src : replace(src, delimiter, escape_str));
          438  }
          439  void escape_str_and_output(std::string src)
          440  {
          441  src = ((escape_str.empty()) ? src : replace(src, delimiter, escape_str));
          442  if (surround_quote_on_str)
          443  {
          444  if (!quote_escape.empty())
          445  {
          446  src = replace(src, std::string(1, surround_quote), quote_escape);
          447  }
          448  ostm << surround_quote << src << surround_quote;
          449  }
          450  else
          451  {
          452  ostm << src;
          453  }
          454  }
          455  private:
          456  std::ofstream ostm;
          457  bool after_newline;
          458  std::string delimiter;
          459  std::string escape_str;
          460  bool surround_quote_on_str;
          461  char surround_quote;
          462  std::string quote_escape;
          463  };
          464 
          465 
          466  } // ns csv
          467 } // ns mini
          468 
          469 template<typename T>
          471 {
          472  std::string str = istm.get_delimited_str();
          473 
          474 #ifdef USE_BOOST_LEXICAL_CAST
          475  try
          476  {
          477  val = boost::lexical_cast<T>(str);
          478  }
          479  catch (boost::bad_lexical_cast& e)
          480  {
          481  throw std::runtime_error(istm.error_line(str).c_str());
          482  }
          483 #else
          484  std::istringstream is(str);
          485  is >> val;
          486  if (!(bool)is)
          487  {
          488  throw std::runtime_error(istm.error_line(str).c_str());
          489  }
          490 #endif
          491 
          492  return istm;
          493 }
          494 template<>
          495 inline mini::csv::ifstream& operator >> (mini::csv::ifstream& istm, std::string& val)
          496 {
          497  val = istm.get_delimited_str();
          498 
          499  return istm;
          500 }
          501 
          502 template<>
          504 {
          505  istm.set_delimiter(val.get_delimiter(), val.get_escape());
          506 
          507  return istm;
          508 }
          509 
          510 template<typename T>
          512 {
          513  if(!ostm.get_after_newline())
          514  ostm.get_ofstream() << ostm.get_delimiter();
          515 
          516  std::ostringstream os_temp;
          517 
          518  os_temp << val;
          519 
          520  ostm.escape_and_output(os_temp.str());
          521 
          522  ostm.set_after_newline(false);
          523 
          524  return ostm;
          525 }
          526 
          527 template<typename T>
          529 {
          530  if (!ostm.get_after_newline())
          531  ostm.get_ofstream() << ostm.get_delimiter();
          532 
          533  std::ostringstream os_temp;
          534 
          535  os_temp << *val;
          536 
          537  ostm.escape_and_output(os_temp.str());
          538 
          539  ostm.set_after_newline(false);
          540 
          541  return ostm;
          542 }
          543 
          544 template<>
          545 inline mini::csv::ofstream& operator << (mini::csv::ofstream& ostm, const std::string& val)
          546 {
          547  if (!ostm.get_after_newline())
          548  ostm.get_ofstream() << ostm.get_delimiter();
          549 
          550  std::string temp = val;
          551  ostm.escape_str_and_output(temp);
          552 
          553  ostm.set_after_newline(false);
          554 
          555  return ostm;
          556 }
          557 
          558 template<>
          560 {
          561  ostm.set_delimiter(val.get_delimiter(), val.get_escape());
          562 
          563  return ostm;
          564 }
          565 
          566 template<>
          567 inline mini::csv::ofstream& operator << (mini::csv::ofstream& ostm, const char& val)
          568 {
          569  if(val==NEWLINE)
          570  {
          571  ostm.get_ofstream() << NEWLINE;
          572 
          573  ostm.set_after_newline(true);
          574  }
          575  else
          576  {
          577  std::ostringstream os_temp;
          578 
          579  os_temp << val;
          580 
          581  ostm.escape_and_output(os_temp.str());
          582  }
          583 
          584  return ostm;
          585 }
          586 template<>
          587 inline mini::csv::ofstream& operator << (mini::csv::ofstream& ostm, const char* val)
          588 {
          589  const std::string temp = val;
          590 
          591  ostm << temp;
          592 
          593  return ostm;
          594 }
          595 
          596 namespace mini
          597 {
          598  namespace csv
          599  {
          600 
          602  {
          603  public:
          604  istringstream(const char * text)
          605  : str("")
          606  , pos(0)
          607  , delimiter(",")
          608  , unescape_str("##")
          609  , trim_quote_on_str(false)
          610  , trim_quote('\"')
          611  , terminate_on_blank_line(true)
          612  , quote_unescape("&quot;")
          613  , line_num(0)
          614  , token_num(0)
          615  {
          616  istm.str(text);
          617  }
          618  void enable_trim_quote_on_str(bool enable, char quote, const std::string& unescape = "&quot;")
          619  {
          620  trim_quote_on_str = enable;
          621  trim_quote = quote;
          622  quote_unescape = unescape;
          623  }
          624  void set_delimiter(char delimiter_, std::string const & unescape_str_)
          625  {
          626  delimiter = delimiter_;
          627  unescape_str = unescape_str_;
          628  }
          629  std::string const & get_delimiter() const
          630  {
          631  return delimiter;
          632  }
          633  std::string const & get_unescape_str() const
          634  {
          635  return unescape_str;
          636  }
          637  void skip_line()
          638  {
          639  std::getline(istm, str);
          640  pos = 0;
          641  }
          642  bool read_line()
          643  {
          644  this->str = "";
          645  while (!istm.eof())
          646  {
          647  std::getline(istm, this->str);
          648  pos = 0;
          649 
          650  if (this->str.empty())
          651  {
          652  if (terminate_on_blank_line)
          653  break;
          654  else
          655  continue;
          656  }
          657 
          658  ++line_num;
          659  token_num = 0;
          660  return true;
          661  }
          662  return false;
          663  }
          664  std::string get_delimited_str()
          665  {
          666  std::string str = "";
          667  char ch = '\0';
          668  bool within_quote = false;
          669  do
          670  {
          671  if (pos >= this->str.size())
          672  {
          673  this->str = "";
          674 
          675  ++token_num;
          676  return unescape(str);
          677  }
          678 
          679  ch = this->str[pos];
          680  if (trim_quote_on_str)
          681  {
          682  if (within_quote == false && ch == trim_quote && ((pos > 0 && this->str[pos - 1] == delimiter[0]) || pos == 0))
          683  within_quote = true;
          684  else if (within_quote && ch == trim_quote)
          685  within_quote = false;
          686  }
          687 
          688  ++(pos);
          689 
          690  if (ch == delimiter[0] && within_quote == false)
          691  break;
          692  if (ch == '\r' || ch == '\n')
          693  break;
          694 
          695  str += ch;
          696  } while (true);
          697 
          698  ++token_num;
          699  return unescape(str);
          700  }
          701 
          702  std::string unescape(std::string & src)
          703  {
          704  src = unescape_str.empty() ? src : replace(src, unescape_str, delimiter);
          705  if (trim_quote_on_str)
          706  {
          707  std::string s = trim(src, std::string(1, trim_quote));
          708  return replace(s, quote_unescape, std::string(1, trim_quote));
          709  }
          710  return src;
          711  }
          712 
          713  size_t num_of_delimiter() const
          714  {
          715  if (delimiter.size() == 0)
          716  return 0;
          717 
          718  size_t cnt = 0;
          719  if (trim_quote_on_str)
          720  {
          721  bool inside_quote = false;
          722  for (size_t i = 0; i < str.size(); ++i)
          723  {
          724  if (str[i] == trim_quote)
          725  inside_quote = !inside_quote;
          726 
          727  if (!inside_quote)
          728  {
          729  if (str[i] == delimiter[0])
          730  ++cnt;
          731  }
          732  }
          733  }
          734  else
          735  {
          736  cnt = std::count(str.begin(), str.end(), delimiter[0]);
          737  }
          738  return cnt;
          739  }
          740  std::string get_rest_of_line() const
          741  {
          742  return str.substr(pos);
          743  }
          744  const std::string& get_line() const
          745  {
          746  return str;
          747  }
          748  void enable_terminate_on_blank_line(bool enable)
          749  {
          750  terminate_on_blank_line = enable;
          751  }
          752  bool is_terminate_on_blank_line() const
          753  {
          754  return terminate_on_blank_line;
          755  }
          756  std::string error_line(const std::string& token)
          757  {
          758  std::ostringstream is;
          759  is << "csv::istringstream conversion error at line no.:" << line_num << ", token position:" << token_num << ", token:" << token;
          760  return is.str();
          761  }
          762 
          763  private:
          764  std::istringstream istm;
          765  std::string str;
          766  size_t pos;
          767  std::string delimiter;
          768  std::string unescape_str;
          769  bool trim_quote_on_str;
          770  char trim_quote;
          771  bool terminate_on_blank_line;
          772  std::string quote_unescape;
          773  size_t line_num;
          774  size_t token_num;
          775  };
          776 
          778  {
          779  public:
          780 
          781  ostringstream()
          782  : after_newline(true)
          783  , delimiter(",")
          784  , escape_str("##")
          785  , surround_quote_on_str(false)
          786  , surround_quote('\"')
          787  , quote_escape("&quot;")
          788  {
          789  }
          790  void enable_surround_quote_on_str(bool enable, char quote, const std::string& escape = "&quot;")
          791  {
          792  surround_quote_on_str = enable;
          793  surround_quote = quote;
          794  quote_escape = escape;
          795  }
          796  void set_delimiter(char delimiter_, std::string const & escape_str_)
          797  {
          798  delimiter = delimiter_;
          799  escape_str = escape_str_;
          800  }
          801  std::string const & get_delimiter() const
          802  {
          803  return delimiter;
          804  }
          805  std::string const & get_escape_str() const
          806  {
          807  return escape_str;
          808  }
          809  void set_after_newline(bool after_newline_)
          810  {
          811  after_newline = after_newline_;
          812  }
          813  bool get_after_newline() const
          814  {
          815  return after_newline;
          816  }
          817  std::ostringstream& get_ostringstream()
          818  {
          819  return ostm;
          820  }
          821  std::string get_text()
          822  {
          823  return ostm.str();
          824  }
          825  void escape_and_output(std::string src)
          826  {
          827  ostm << ((escape_str.empty()) ? src : replace(src, delimiter, escape_str));
          828  }
          829  void escape_str_and_output(std::string src)
          830  {
          831  src = ((escape_str.empty()) ? src : replace(src, delimiter, escape_str));
          832  if (surround_quote_on_str)
          833  {
          834  if (!quote_escape.empty())
          835  {
          836  src = replace(src, std::string(1, surround_quote), quote_escape);
          837  }
          838  ostm << surround_quote << src << surround_quote;
          839  }
          840  else
          841  {
          842  ostm << src;
          843  }
          844  }
          845 
          846  private:
          847  std::ostringstream ostm;
          848  bool after_newline;
          849  std::string delimiter;
          850  std::string escape_str;
          851  bool surround_quote_on_str;
          852  char surround_quote;
          853  std::string quote_escape;
          854  };
          855 
          856 
          857  } // ns csv
          858 } // ns mini
          859 
          860 template<typename T>
          862 {
          863  std::string str = istm.get_delimited_str();
          864 
          865 #ifdef USE_BOOST_LEXICAL_CAST
          866  try
          867  {
          868  val = boost::lexical_cast<T>(str);
          869  }
          870  catch (boost::bad_lexical_cast& e)
          871  {
          872  throw std::runtime_error(istm.error_line(str).c_str());
          873  }
          874 #else
          875  std::istringstream is(str);
          876  is >> val;
          877  if (!(bool)is)
          878  {
          879  throw std::runtime_error(istm.error_line(str).c_str());
          880  }
          881 #endif
          882 
          883  return istm;
          884 }
          885 template<>
          887 {
          888  val = istm.get_delimited_str();
          889 
          890  return istm;
          891 }
          892 
          893 template<>
          895 {
          896  istm.set_delimiter(val.get_delimiter(), val.get_escape());
          897 
          898  return istm;
          899 }
          900 
          901 template<typename T>
          903 {
          904  if (!ostm.get_after_newline())
          905  ostm.get_ostringstream() << ostm.get_delimiter();
          906 
          907  std::ostringstream os_temp;
          908 
          909  os_temp << val;
          910 
          911  ostm.escape_and_output(os_temp.str());
          912 
          913  ostm.set_after_newline(false);
          914 
          915  return ostm;
          916 }
          917 template<typename T>
          919 {
          920  if (!ostm.get_after_newline())
          921  ostm.get_ostringstream() << ostm.get_delimiter();
          922 
          923  std::ostringstream os_temp;
          924 
          925  os_temp << *val;
          926 
          927  ostm.escape_and_output(os_temp.str());
          928 
          929  ostm.set_after_newline(false);
          930 
          931  return ostm;
          932 }
          933 template<>
          934 inline mini::csv::ostringstream& operator << (mini::csv::ostringstream& ostm, const std::string& val)
          935 {
          936  if (!ostm.get_after_newline())
          937  ostm.get_ostringstream() << ostm.get_delimiter();
          938 
          939  std::string temp = val;
          940  ostm.escape_str_and_output(temp);
          941 
          942  ostm.set_after_newline(false);
          943 
          944  return ostm;
          945 }
          946 template<>
          948 {
          949  ostm.set_delimiter(val.get_delimiter(), val.get_escape());
          950 
          951  return ostm;
          952 }
          953 
          954 template<>
          956 {
          957  if (val == NEWLINE)
          958  {
          959  ostm.get_ostringstream() << NEWLINE;
          960 
          961  ostm.set_after_newline(true);
          962  }
          963  else
          964  {
          965  std::ostringstream os_temp;
          966 
          967  os_temp << val;
          968 
          969  ostm.escape_and_output(os_temp.str());
          970  }
          971 
          972  return ostm;
          973 }
          974 template<>
          976 {
          977  const std::string temp = val;
          978 
          979  ostm << temp;
          980 
          981  return ostm;
          982 }
          983 
          984 
          985 #endif // MiniCSV_H
          + + +
          std::string trim_left(const std::string &str, const std::string &trimChars)
          Definition: minicsv.h:84
          +
          #define NEWLINE
          Definition: minicsv.h:45
          + +
          mini::csv::ifstream & operator>>(mini::csv::ifstream &istm, T &val)
          Definition: minicsv.h:470
          +
          const char delimiter
          Definition: minicsv.h:112
          +
          Definition: minicsv.h:47
          +
          const std::string escape
          Definition: minicsv.h:113
          +
          sep(const char delimiter_, const std::string &escape_)
          Definition: minicsv.h:107
          +
          std::string trim_right(const std::string &str, const std::string &trimChars)
          Definition: minicsv.h:70
          +
          std::string const & replace(std::string &src, std::string const &to_find, std::string const &to_replace)
          Definition: minicsv.h:52
          +
          const std::string & get_escape() const
          Definition: minicsv.h:110
          +
          const char get_delimiter() const
          Definition: minicsv.h:109
          +
          mini::csv::ofstream & operator<<(mini::csv::ofstream &ostm, const T &val)
          Definition: minicsv.h:511
          + +
          std::string trim(const std::string &str, const std::string &trimChars)
          Definition: minicsv.h:99
          +
          + +
          +
          +pfuclt_omni_dataset
          +Author(s):
          +autogenerated on Mon Jul 3 2017 16:11:28 +
          + + diff --git a/doc/html/c++/namespacemembers.html b/doc/html/c++/namespacemembers.html index 80dd515..7c8af19 100644 --- a/doc/html/c++/namespacemembers.html +++ b/doc/html/c++/namespacemembers.html @@ -9,6 +9,7 @@ @@ -23,20 +24,76 @@
        • All
        • Functions
        • Variables
        • +
        • Typedefs
        • +
        • Enumerations
        • +
        • Enumerator
        • +
        + +
        -
        Here is a list of all namespace members with links to the namespace documentation for each member:
        +
        +
        + +
        +
        +pfuclt_omni_dataset
        +Author(s):
        +autogenerated on Mon Jul 3 2017 16:11:29 +
        + + diff --git a/doc/html/c++/namespacemembers_eval.html b/doc/html/c++/namespacemembers_eval.html new file mode 100644 index 0000000..690d170 --- /dev/null +++ b/doc/html/c++/namespacemembers_eval.html @@ -0,0 +1,51 @@ + +pfuclt_omni_dataset: Namespace Members + + + + + + + + + +
        +
        + +
        +
        +pfuclt_omni_dataset
        +Author(s):
        +autogenerated on Mon Jul 3 2017 16:11:29 +
        + + diff --git a/doc/html/c++/namespacemembers_func.html b/doc/html/c++/namespacemembers_func.html index 2934310..93d0422 100644 --- a/doc/html/c++/namespacemembers_func.html +++ b/doc/html/c++/namespacemembers_func.html @@ -9,6 +9,7 @@ @@ -23,17 +24,41 @@
      • All
      • Functions
      • Variables
      • +
      • Typedefs
      • +
      • Enumerations
      • +
      • Enumerator
       
      @@ -41,7 +66,7 @@
      pfuclt_omni_dataset
      Author(s):
      -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
      diff --git a/doc/html/c++/namespacemembers_type.html b/doc/html/c++/namespacemembers_type.html new file mode 100644 index 0000000..467192a --- /dev/null +++ b/doc/html/c++/namespacemembers_type.html @@ -0,0 +1,78 @@ + +pfuclt_omni_dataset: Namespace Members + + + + + + + + + +
      +
      + +
      +
      +pfuclt_omni_dataset
      +Author(s):
      +autogenerated on Mon Jul 3 2017 16:11:29 +
      + + diff --git a/doc/html/c++/namespacemembers_vars.html b/doc/html/c++/namespacemembers_vars.html index a08ccd4..c6e26c5 100644 --- a/doc/html/c++/namespacemembers_vars.html +++ b/doc/html/c++/namespacemembers_vars.html @@ -9,6 +9,7 @@ @@ -23,6 +24,9 @@
    • All
    • Functions
    • Variables
    • +
    • Typedefs
    • +
    • Enumerations
    • +
    • Enumerator
    @@ -98,7 +102,7 @@
    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/namespacemini.html b/doc/html/c++/namespacemini.html new file mode 100644 index 0000000..385d250 --- /dev/null +++ b/doc/html/c++/namespacemini.html @@ -0,0 +1,45 @@ + +pfuclt_omni_dataset: mini Namespace Reference + + + + + + + + +
    + +
    +
    mini Namespace Reference
    +
    +
    + + + + +

    +Namespaces

     csv
     
    +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/namespacemini_1_1csv.html b/doc/html/c++/namespacemini_1_1csv.html new file mode 100644 index 0000000..437dd29 --- /dev/null +++ b/doc/html/c++/namespacemini_1_1csv.html @@ -0,0 +1,220 @@ + +pfuclt_omni_dataset: mini::csv Namespace Reference + + + + + + + + + +
    + +
    +
    mini::csv Namespace Reference
    +
    +
    + + + + + + + + + + + + +

    +Classes

    class  ifstream
     
    class  istringstream
     
    class  ofstream
     
    class  ostringstream
     
    class  sep
     
    + + + + + + + + + +

    +Functions

    std::string const & replace (std::string &src, std::string const &to_find, std::string const &to_replace)
     
    std::string trim (const std::string &str, const std::string &trimChars)
     
    std::string trim_left (const std::string &str, const std::string &trimChars)
     
    std::string trim_right (const std::string &str, const std::string &trimChars)
     
    +

    Function Documentation

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    std::string const& mini::csv::replace (std::string & src,
    std::string const & to_find,
    std::string const & to_replace 
    )
    +
    +inline
    +
    + +

    Definition at line 52 of file minicsv.h.

    + +
    +
    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::string mini::csv::trim (const std::string & str,
    const std::string & trimChars 
    )
    +
    +inline
    +
    + +

    Definition at line 99 of file minicsv.h.

    + +
    +
    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::string mini::csv::trim_left (const std::string & str,
    const std::string & trimChars 
    )
    +
    +inline
    +
    + +

    Definition at line 84 of file minicsv.h.

    + +
    +
    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::string mini::csv::trim_right (const std::string & str,
    const std::string & trimChars 
    )
    +
    +inline
    +
    + +

    Definition at line 70 of file minicsv.h.

    + +
    +
    +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/namespacepfuclt.html b/doc/html/c++/namespacepfuclt.html index e4e83bf..c56ff93 100644 --- a/doc/html/c++/namespacepfuclt.html +++ b/doc/html/c++/namespacepfuclt.html @@ -9,6 +9,7 @@ @@ -21,12 +22,28 @@
    pfuclt Namespace Reference
    + + + + + + + +

    +Classes

    class  Robot
     The Robot class - Has the common variables and methods of all robots, and is the base class of any specialized robots who may derive from it. Teammates should be instances of this class. More...
     
    class  RobotFactory
     The RobotFactory class - Creates and keeps information on the robot running the algorithm and its teammates. Is used as a middle-man between all robots. More...
     
    + + + +

    +Typedefs

    typedef boost::shared_ptr< RobotRobot_ptr
     
    @@ -43,7 +60,7 @@ - + @@ -72,6 +89,21 @@

    Variables

    std::vector< double > CUSTOM_PARTICLE_INIT
     
    float K5
     
    std::vector< pfuclt_aux::Landmark > landmarks
    std::vector< pfuclt_aux::Landmarklandmarks
     
    int MAX_ROBOTS
     
    bool USE_CUSTOM_VALUES = false
     
    +

    Typedef Documentation

    + +
    +
    + + + + +
    typedef boost::shared_ptr<Robot> pfuclt::Robot_ptr
    +
    + +

    Definition at line 38 of file pfuclt_omni_dataset.h.

    + +
    +

    Variable Documentation

    @@ -176,7 +208,7 @@

    Variable Documentation

    - +
    std::vector<pfuclt_aux::Landmark> pfuclt::landmarksstd::vector<pfuclt_aux::Landmark> pfuclt::landmarks
    @@ -373,7 +405,7 @@

    Variable Documentation


    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/namespacepfuclt__aux.html b/doc/html/c++/namespacepfuclt__aux.html index 61c6851..e2382e6 100644 --- a/doc/html/c++/namespacepfuclt__aux.html +++ b/doc/html/c++/namespacepfuclt__aux.html @@ -9,6 +9,7 @@
    @@ -21,26 +22,153 @@
    pfuclt_aux Namespace Reference
    + + + + + + + +

    +Classes

    struct  landmark_s
     The Landmark struct - used to store a landmark, defined by its serial number, and its position {x,y}. More...
     
    struct  timeEval_s
     The timeEval_s struct - takes care of time difference evaluation through the ros::Time methods. More...
     
    + + + + + + + +

    +Typedefs

    typedef struct pfuclt_aux::landmark_s Landmark
     The Landmark struct - used to store a landmark, defined by its serial number, and its position {x,y}. More...
     
    typedef struct pfuclt_aux::timeEval_s TimeEval
     The timeEval_s struct - takes care of time difference evaluation through the ros::Time methods. More...
     
    + + + + +

    +Enumerations

    enum  ORDER_TYPE { ASC, +DESC + }
     The ORDER_TYPE enum - use to define an ascending or descending ordering. More...
     
    - - + + + + + + + + + + + + + + + + + + +

    Functions

    std::vector< Landmark > getLandmarks (const char *filename)
     
    template<typename T >
    double calc_stdDev (const std::vector< T > &vec)
     calc_stdDev - Calculates standard deviation from a vector of type T More...
     
    std::vector< LandmarkgetLandmarks (const char *filename)
     getLandmarks - read landmark configuration from CSV file More...
     
    double linearRegressionSlope (const std::vector< double > &x, const std::vector< double > &y)
     linearRegressionSlope - applies linear regression to a set of data and calculates the slope More...
     
    template<typename T >
    std::vector< unsigned int > order_index (std::vector< T > const &values, const ORDER_TYPE order=pfuclt_aux::DESC)
     order_index - Generates a vector of indexes ordered according to another vector More...
     
    template<typename T >
    bool readParam (ros::NodeHandle &nh, const std::string name, T &variable)
     readParam - reads and returns a parameter from the ROS parameter server More...
     
    template<typename T >
    bool readParam (ros::NodeHandle &nh, const std::string name, std::vector< T > &variable)
     
    +

    Typedef Documentation

    + +
    +
    + + + + +
    typedef struct pfuclt_aux::landmark_s pfuclt_aux::Landmark
    +
    + +

    The Landmark struct - used to store a landmark, defined by its serial number, and its position {x,y}.

    + +
    +
    + +
    +
    + + + + +
    typedef struct pfuclt_aux::timeEval_s pfuclt_aux::TimeEval
    +
    + +

    The timeEval_s struct - takes care of time difference evaluation through the ros::Time methods.

    + +
    +
    +

    Enumeration Type Documentation

    + +
    +
    + + + + +
    enum pfuclt_aux::ORDER_TYPE
    +
    + +

    The ORDER_TYPE enum - use to define an ascending or descending ordering.

    + + + +
    Enumerator
    ASC  +
    DESC  +
    + +

    Definition at line 20 of file pfuclt_aux.h.

    + +
    +

    Function Documentation

    - +
    +
    +template<typename T >
    - + + + + + + +
    std::vector<Landmark> pfuclt_aux::getLandmarks double pfuclt_aux::calc_stdDev (const std::vector< T > & vec)
    +
    + +

    calc_stdDev - Calculates standard deviation from a vector of type T

    +
    Parameters
    + + +
    vec- vector of type T with values to calculate std.dev
    +
    +
    +
    Returns
    standard deviation as a double
    + +

    Definition at line 49 of file pfuclt_aux.h.

    + +
    +
    + +
    +
    + + + @@ -49,6 +177,16 @@

    Function Documentation

    std::vector< Landmark > pfuclt_aux::getLandmarks ( const char *  filename)
    +

    getLandmarks - read landmark configuration from CSV file

    +
    Parameters
    + + +
    filename- the CSV file
    +
    +
    +
    Returns
    lm_vec
    +
    Remarks
    if filename empty, not found or unreadable, will return empty vector
    +

    Definition at line 7 of file pfuclt_aux.cpp.

    @@ -77,8 +215,142 @@

    Function Documentation

    +

    linearRegressionSlope - applies linear regression to a set of data and calculates the slope

    +
    Parameters
    + + + +
    x- vector of time (or other) data
    y- vector of data
    +
    +
    +
    Returns
    slope of the linear regression affine function
    +

    Definition at line 27 of file pfuclt_aux.cpp.

    +
    +
    + +
    +
    +
    +template<typename T >
    + + + + + + + + + + + + + + + + + + +
    std::vector<unsigned int> pfuclt_aux::order_index (std::vector< T > const & values,
    const ORDER_TYPE order = pfuclt_aux::DESC 
    )
    +
    + +

    order_index - Generates a vector of indexes ordered according to another vector

    +
    Parameters
    + + + +
    values- vector of type T containing the values to order
    order- enum of ORDER_TYPE to order in ascending or descending order - defaults to DESC
    +
    +
    +
    Returns
    vector of unsigned ints with the desired ordering of indexes
    +
    Remarks
    vector values will not be modified
    + +

    Definition at line 68 of file pfuclt_aux.h.

    + +
    +
    + +
    +
    +
    +template<typename T >
    + + + + + + + + + + + + + + + + + + + + + + + + +
    bool pfuclt_aux::readParam (ros::NodeHandle & nh,
    const std::string name,
    T & variable 
    )
    +
    + +

    readParam - reads and returns a parameter from the ROS parameter server

    +
    Parameters
    + + + + +
    nh- pointer to the ROS nodehandle that will perform the parameter reading task
    name- the parameter's name
    variable- pointer to the location where the parameter should be stored as type T
    +
    +
    +
    Returns
    + +

    Definition at line 105 of file pfuclt_aux.h.

    + +
    +
    + +
    +
    +
    +template<typename T >
    + + + + + + + + + + + + + + + + + + + + + + + + +
    bool pfuclt_aux::readParam (ros::NodeHandle & nh,
    const std::string name,
    std::vector< T > & variable 
    )
    +
    + +

    Definition at line 132 of file pfuclt_aux.h.

    +
    @@ -87,7 +359,7 @@

    Function Documentation


    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/namespacepfuclt__ptcls.html b/doc/html/c++/namespacepfuclt__ptcls.html index 2bc6099..bb73863 100644 --- a/doc/html/c++/namespacepfuclt__ptcls.html +++ b/doc/html/c++/namespacepfuclt__ptcls.html @@ -9,6 +9,7 @@ @@ -20,17 +21,161 @@
    +
    pfuclt_ptcls Namespace Reference
    + + + + + + + + + + + + + +

    +Classes

    struct  landmarkObs_s
     
    struct  odometry_s
     
    class  ParticleFilter
     
    class  PFPublisher
     The PFPublisher class - implements publishing for the ParticleFilter class using ROS. More...
     
    struct  targetObs_s
     
    + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef double(* estimatorFunc) (const std::vector< double > &, const std::vector< double > &)
     
    typedef struct pfuclt_ptcls::landmarkObs_s LandmarkObservation
     
    typedef struct pfuclt_ptcls::odometry_s Odometry
     
    typedef std::vector< subparticles_tparticles_t
     
    typedef float pdata_t
     
    typedef boost::random::mt19937 RNGType
     
    typedef std::vector< pdata_tsubparticles_t
     
    typedef struct pfuclt_ptcls::targetObs_s TargetObservation
     
    +

    Typedef Documentation

    + +
    +
    + + + + +
    typedef double(* pfuclt_ptcls::estimatorFunc) (const std::vector< double > &, const std::vector< double > &)
    +
    + +

    Definition at line 62 of file pfuclt_particles.h.

    + +
    +
    + + + +
    +
    + +
    +
    + +
    +
    + + + + +
    typedef std::vector<subparticles_t> pfuclt_ptcls::particles_t
    +
    + +

    Definition at line 91 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    typedef float pfuclt_ptcls::pdata_t
    +
    + +

    Definition at line 60 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    typedef boost::random::mt19937 pfuclt_ptcls::RNGType
    +
    + +

    Definition at line 94 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    typedef std::vector<pdata_t> pfuclt_ptcls::subparticles_t
    +
    + +

    Definition at line 90 of file pfuclt_particles.h.

    + +
    +
    + +


    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/namespaces.html b/doc/html/c++/namespaces.html index 1fbc174..b854171 100644 --- a/doc/html/c++/namespaces.html +++ b/doc/html/c++/namespaces.html @@ -9,6 +9,7 @@ @@ -25,10 +26,12 @@
    Here is a list of all namespaces with brief descriptions:
    - - - - +
    [detail level 12]
     Npfuclt
     Npfuclt_aux
     Npfuclt_ptcls
    + + + + +
     Nmini
     Ncsv
     Npfuclt
     Npfuclt_aux
     Npfuclt_ptcls
    @@ -37,7 +40,7 @@
    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/ompver_8c.html b/doc/html/c++/ompver_8c.html index 0d71865..bcd2b9d 100644 --- a/doc/html/c++/ompver_8c.html +++ b/doc/html/c++/ompver_8c.html @@ -9,6 +9,7 @@ @@ -37,8 +38,6 @@ Include dependency graph for ompver.c:
    - -

    Go to the source code of this file.

    @@ -103,7 +102,7 @@

    Variable Documentation


    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/ompver_8c_source.html b/doc/html/c++/ompver_8c_source.html index 40dd77f..21597c3 100644 --- a/doc/html/c++/ompver_8c_source.html +++ b/doc/html/c++/ompver_8c_source.html @@ -9,6 +9,7 @@ @@ -36,7 +37,7 @@
    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:28
    diff --git a/doc/html/c++/ompver_8cpp.html b/doc/html/c++/ompver_8cpp.html index 5d4a3b1..d32aa92 100644 --- a/doc/html/c++/ompver_8cpp.html +++ b/doc/html/c++/ompver_8cpp.html @@ -9,6 +9,7 @@ @@ -37,8 +38,6 @@ Include dependency graph for ompver.cpp:
    - -

    Go to the source code of this file.

    @@ -103,7 +102,7 @@

    Variable Documentation


    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/ompver_8cpp_source.html b/doc/html/c++/ompver_8cpp_source.html index ada3f36..9950baa 100644 --- a/doc/html/c++/ompver_8cpp_source.html +++ b/doc/html/c++/ompver_8cpp_source.html @@ -9,6 +9,7 @@ @@ -36,7 +37,7 @@
    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:28
    diff --git a/doc/html/c++/pfuclt__aux_8cpp.html b/doc/html/c++/pfuclt__aux_8cpp.html index 5a01618..cd8b471 100644 --- a/doc/html/c++/pfuclt__aux_8cpp.html +++ b/doc/html/c++/pfuclt__aux_8cpp.html @@ -9,6 +9,7 @@ @@ -31,14 +32,16 @@
    pfuclt_aux.cpp File Reference
    -
    #include <pfuclt_omni_dataset/pfuclt_aux.h>
    -#include <minicsv/minicsv.h>
    +
    #include <pfuclt_omni_dataset/pfuclt_aux.h>
    +#include <minicsv/minicsv.h>
    #include <iostream>
    Include dependency graph for pfuclt_aux.cpp:
    + +
    @@ -51,9 +54,11 @@ - - + + + +

    Functions

    std::vector< Landmark > pfuclt_aux::getLandmarks (const char *filename)
     
    std::vector< Landmark > pfuclt_aux::getLandmarks (const char *filename)
     getLandmarks - read landmark configuration from CSV file More...
     
    double pfuclt_aux::linearRegressionSlope (const std::vector< double > &x, const std::vector< double > &y)
     linearRegressionSlope - applies linear regression to a set of data and calculates the slope More...
     
    @@ -62,7 +67,7 @@
    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/pfuclt__aux_8cpp__incl.map b/doc/html/c++/pfuclt__aux_8cpp__incl.map index 843a94b..ce6b64c 100644 --- a/doc/html/c++/pfuclt__aux_8cpp__incl.map +++ b/doc/html/c++/pfuclt__aux_8cpp__incl.map @@ -1,2 +1,4 @@ + + diff --git a/doc/html/c++/pfuclt__aux_8cpp__incl.md5 b/doc/html/c++/pfuclt__aux_8cpp__incl.md5 index 9c7d47e..dc2d2dc 100644 --- a/doc/html/c++/pfuclt__aux_8cpp__incl.md5 +++ b/doc/html/c++/pfuclt__aux_8cpp__incl.md5 @@ -1 +1 @@ -65ec10ccccd2c650aba8ddea7ad54373 \ No newline at end of file +fa8b21e352f80cbcffd5537667def6c6 \ No newline at end of file diff --git a/doc/html/c++/pfuclt__aux_8cpp__incl.png b/doc/html/c++/pfuclt__aux_8cpp__incl.png index 0957a8968e0f6921ea9043a1913a24d21e52de0c..eb21be17e514e9d679ca9ea154da4a751b6e7aab 100644 GIT binary patch literal 42873 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 Lmpfxiz{TGH*2YVM literal 8493 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
  • Main Page
  • Namespaces
  • +
  • Classes
  • Files
  • @@ -28,16 +29,23 @@
    pfuclt_aux.cpp
    -Go to the documentation of this file.
    1 #include <pfuclt_omni_dataset/pfuclt_aux.h>
    2 #include <minicsv/minicsv.h>
    3 #include <iostream>
    4 
    5 namespace pfuclt_aux
    6 {
    7 std::vector<Landmark> getLandmarks(const char* filename)
    8 {
    9  std::vector<Landmark> lm_vec;
    10  mini::csv::ifstream is(filename);
    11 
    12  if (is.is_open())
    13  {
    14  Landmark lm;
    15  while (is.read_line())
    16  {
    17  // order is serial,x,y\n
    18  is >> lm.serial >> lm.x >> lm.y;
    19  lm_vec.push_back(lm);
    20  }
    21  }
    22 
    23  is.close();
    24  return lm_vec;
    25 }
    26 
    27 double linearRegressionSlope(const std::vector<double>& x, const std::vector<double>& y)
    28 {
    29  const size_t size = x.size();
    30  const double s_y = std::accumulate(y.begin(), y.end(), 0.0);
    31  const double s_x = std::accumulate(x.begin(), x.end(), 0.0);
    32  const double s_xx = std::inner_product(x.begin(), x.end(), x.begin(), 0.0);
    33  const double s_xy = std::inner_product(x.begin(), x.end(), y.begin(), 0.0);
    34 
    35  const double slope = (size*s_xy - s_x*s_y) / (size*s_xx - s_x*s_x);
    36  return slope;
    37 }
    38 
    39 // end of namespace
    40 }
    std::vector< Landmark > getLandmarks(const char *filename)
    Definition: pfuclt_aux.cpp:7
    - -
    double linearRegressionSlope(const std::vector< double > &x, const std::vector< double > &y)
    Definition: pfuclt_aux.cpp:27
    +Go to the documentation of this file.
    2 #include <minicsv/minicsv.h>
    3 #include <iostream>
    4 
    5 namespace pfuclt_aux
    6 {
    7 std::vector<Landmark> getLandmarks(const char* filename)
    8 {
    9  std::vector<Landmark> lm_vec;
    10  mini::csv::ifstream is(filename);
    11 
    12  if (is.is_open())
    13  {
    14  Landmark lm;
    15  while (is.read_line())
    16  {
    17  // order is serial,x,y\n
    18  is >> lm.serial >> lm.x >> lm.y;
    19  lm_vec.push_back(lm);
    20  }
    21  }
    22 
    23  is.close();
    24  return lm_vec;
    25 }
    26 
    27 double linearRegressionSlope(const std::vector<double>& x, const std::vector<double>& y)
    28 {
    29  const size_t size = x.size();
    30  const double s_y = std::accumulate(y.begin(), y.end(), 0.0);
    31  const double s_x = std::accumulate(x.begin(), x.end(), 0.0);
    32  const double s_xx = std::inner_product(x.begin(), x.end(), x.begin(), 0.0);
    33  const double s_xy = std::inner_product(x.begin(), x.end(), y.begin(), 0.0);
    34 
    35  const double slope = (size*s_xy - s_x*s_y) / (size*s_xx - s_x*s_x);
    36  return slope;
    37 }
    38 
    39 // end of namespace
    40 }
    + + +
    The Landmark struct - used to store a landmark, defined by its serial number, and its position {x...
    Definition: pfuclt_aux.h:30
    + + +
    std::vector< Landmark > getLandmarks(const char *filename)
    getLandmarks - read landmark configuration from CSV file
    Definition: pfuclt_aux.cpp:7
    + +
    double linearRegressionSlope(const std::vector< double > &x, const std::vector< double > &y)
    linearRegressionSlope - applies linear regression to a set of data and calculates the slope ...
    Definition: pfuclt_aux.cpp:27
    +


    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:28
    diff --git a/doc/html/c++/pfuclt__aux_8h.html b/doc/html/c++/pfuclt__aux_8h.html new file mode 100644 index 0000000..dc165ab --- /dev/null +++ b/doc/html/c++/pfuclt__aux_8h.html @@ -0,0 +1,133 @@ + +pfuclt_omni_dataset: pfuclt_aux.h File Reference + + + + + + + + +
    +
    + +
    +
    pfuclt_aux.h File Reference
    +
    +
    +
    #include <ros/ros.h>
    +#include <vector>
    +#include <fstream>
    +#include <pfuclt_omni_dataset/pfuclt_aux.h>
    +#include <boost/ref.hpp>
    +#include <boost/accumulators/accumulators.hpp>
    +#include <boost/accumulators/statistics.hpp>
    +#include <boost/spirit/include/phoenix_core.hpp>
    +#include <boost/spirit/include/phoenix_operator.hpp>
    +
    +Include dependency graph for pfuclt_aux.h:
    +
    +
    + + +
    +
    +This graph shows which files directly or indirectly include this file:
    +
    +
    + + + + + + + +
    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    struct  pfuclt_aux::landmark_s
     The Landmark struct - used to store a landmark, defined by its serial number, and its position {x,y}. More...
     
    struct  pfuclt_aux::timeEval_s
     The timeEval_s struct - takes care of time difference evaluation through the ros::Time methods. More...
     
    + + + +

    +Namespaces

     pfuclt_aux
     
    + + + + + + + +

    +Typedefs

    typedef struct pfuclt_aux::landmark_s pfuclt_aux::Landmark
     The Landmark struct - used to store a landmark, defined by its serial number, and its position {x,y}. More...
     
    typedef struct pfuclt_aux::timeEval_s pfuclt_aux::TimeEval
     The timeEval_s struct - takes care of time difference evaluation through the ros::Time methods. More...
     
    + + + + +

    +Enumerations

    enum  pfuclt_aux::ORDER_TYPE { pfuclt_aux::ASC, +pfuclt_aux::DESC + }
     The ORDER_TYPE enum - use to define an ascending or descending ordering. More...
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    double pfuclt_aux::calc_stdDev (const std::vector< T > &vec)
     calc_stdDev - Calculates standard deviation from a vector of type T More...
     
    std::vector< Landmark > pfuclt_aux::getLandmarks (const char *filename)
     getLandmarks - read landmark configuration from CSV file More...
     
    double pfuclt_aux::linearRegressionSlope (const std::vector< double > &x, const std::vector< double > &y)
     linearRegressionSlope - applies linear regression to a set of data and calculates the slope More...
     
    template<typename T >
    std::vector< unsigned int > pfuclt_aux::order_index (std::vector< T > const &values, const ORDER_TYPE order=pfuclt_aux::DESC)
     order_index - Generates a vector of indexes ordered according to another vector More...
     
    template<typename T >
    bool pfuclt_aux::readParam (ros::NodeHandle &nh, const std::string name, T &variable)
     readParam - reads and returns a parameter from the ROS parameter server More...
     
    template<typename T >
    bool pfuclt_aux::readParam (ros::NodeHandle &nh, const std::string name, std::vector< T > &variable)
     
    +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/pfuclt__aux_8h__dep__incl.map b/doc/html/c++/pfuclt__aux_8h__dep__incl.map new file mode 100644 index 0000000..10a9bd9 --- /dev/null +++ b/doc/html/c++/pfuclt__aux_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doc/html/c++/pfuclt__aux_8h__dep__incl.md5 b/doc/html/c++/pfuclt__aux_8h__dep__incl.md5 new file mode 100644 index 0000000..d1aeb38 --- /dev/null +++ b/doc/html/c++/pfuclt__aux_8h__dep__incl.md5 @@ -0,0 +1 @@ +cd67073605db303cfcb527c701c0f42b \ No newline at end of file diff --git a/doc/html/c++/pfuclt__aux_8h__dep__incl.png b/doc/html/c++/pfuclt__aux_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..ea77112ce008501f9ee18ffd8b7d316cec7f720f GIT binary patch literal 19144 zcmbTebyQVR`!2c(B~-dZT1rys?(UK<0i`>orMtVOk?sa*X^`&j*mTF8e&79#bMG1B z{ByQLa5%==Ypyxpe4giB!3uKXZ; zYj}hqG;&l`DTXRmQcCI!3t2;1Ian-b6`Of-I7(lSV^Y(e`F)h}4#2 zaWqP|RpNXncBS3xd95punBTKT?`K=v2Ub?-aH@5=o|mL#|Bg+RWNZKj_cN2_yaH1) z`8E_rl6Q869OB{eI9F}FLFn)IG5K(DalfQwU}z}h@Q?;x(3FMADHdg7Q6`1gjV*Qf z>0}LV1_KNGE0ru$3QIpCWNd5W3b8`-YI2p>yIYi%%?P``6FEq3kGA%52hm;4 z>O?<0mI}9A$Gq|DVE9|+i09M5CF}NZO!1+p8sA1FjIglRFPbyD^yLt1TB~S!X}x><_WN4r zi#0aJ4QULOW`bE5^R>sw(o-`%-liL$b=_$?3!Mm04Z^Vq#H zU+n4m>T!2L2vsM6{n02HR}nB(>2ompn8`Uu$Ej2rjjEq!&8*XyHwNtxB^rDo-&n{lL?(k*lS3!_`k(4UJNJh4P zz2fz}5y`*Y=5Y`HnaSmdtTj7+x3;!+dU_g&O3Y`wE+Qx>sIIPlu;SG8-Ow(aFb3^Ped*_{JH-k0tH0v8Sr4i%`buCCe$DPJ_jm=faSFQF^M z_dNQ)y)l8tGY_+shODeESC=30hAS&I5)u~g+p{u| zMpph4H^GM1n6lI=YHPO`^~WS7;RTEOH!sv%>$SSZi`V1xcXsL?%{$VvI%fX*m0bwy zn@iYYhZ7V8GJ@F^cuD-w9wd~A>KYy;t-%K8QNvC@QWtS}bab#H@`AQD5Ey4j zNl)|gYOSo4XUa2a7#V$?70?7h8VuI4XXa*OJLvGO2}GTkwJ;jb{&X-SKQX@N>#U9T zvtuXqhV|<}TuV#Km#%=|Tox>fnVCT{L=BC`bA&3zI2F}t@z1phVjB)kl)>Z=Fk3d% zJv|<8Uu(R5ixb|P5WN=FPaW(R10ue+lqdv3j^RU}tAvgpo}QSfrl~pqbemsQ)pU6H zcXQL)df8oCvftdo;%Tn{#(pP4y~ZT0%8v2pdp}o{q|_U1JUo~CtD~|w?`-myIcmbb z2Ex8%zNC@aTxlOCB(&7rk%cg{@fKwd;wPQ_wRgKT2&L*ONfA4J#@Cxw>N^2!{bhYo}PpJ z1qNhDc71Ab$n(04?kRn}~lzz3~h-VH^Va@PRL#Efkbl$!tf|SIHt|;qTaQF81<-hIl&- zY+G8(0|N^j99$KsbK|h|-h?mvB)k@M_Zejm#*3HA;IKuEm-<%8q5WL(0n6_BiKZ`- z`-EXTG#j|jZ;=@ClyT?wf zgf>G1LRk|M9B=$%4;N`V0r&hPY*nVw%Wpa#QDGI%&&0kq0gE@YqnbK+L zzFH|iAP}bH+^n(N9076+(*Z0)n#=aU_+hdA{Uqsxw1sM_nCGV)oU*dmk#sGw9K{cD zUg=Z>D8Rdt_#Q_=k)YR-q@cC1wy14t_KU%pYYe!PAS z$x`Z%h}giP$L})i+TRcGe+6f5hCg@crL%p)kL7e`#K2r*%kgJtlwu;Eu+@HtFmtQs zBkK_{;SsA##Y-nn@Ps&wPsw6ANvQ`!yiL@+j{*YT%CfRKq0)b5EALT>S~3&W#!Zva zCO^#LG8llxx29|!xQUAwSW8O2NgwIH`WP?umP6s_)R2*rQ&W6_DY@juD_CZxka<0C zJbbg>UaKAE0Lj>=Kg0Ca?P(%pKdGC(pTD-Y{y{}slc|6e9=Y<##b!b6 z2MFr#nV7cjF4-w4SaX1TEJSKl=&O|L+DIUilY{gpg^hhVn5Z|~_P7mdHMa+s^Pj@6 zU<6=5gvlEJgUe8|8lA*JU^JXE`1Wm&wwBnyK)SPEeG;3cNvbs4>tva11qu4}Em%c` zs8$Elt@+x7YGYLE%p?fJ_hpgW_qi6&)}8s<+Q+*O(0Rv$f=u^1tH+(;)N&ye1i_Og zNh2a2iG`+1Vo-nbxA)-S_*VJ@t8qIednG!)y1K<|e1;D_8|ClM$nb&_==`hkZlWMn zw{d;Im>d*gnpKDlr*%&)R#pR6;cmg zM#GjZx7>m>-<6xIjqLBUbW<=+Eu9$g{CNH1LHw)vyOZrUpp5L@b&5^}|K2qcTU(8HY<_R>YaCa9(}Rc>5;`b^rg$tSG2g+K{*j1J z=K8FuEI;36Kdw4i!)qMJbAQs_>zN9=d>i5<_hJhk{#|Ymt4vIKAtnQ z4fTyja)vI8OGWR)?R&3#OYP?;n|V&eD|V!y4wL2P>#M2a@&vluxf$oSKLv53ilEHl z&zJdxQ|KHl5B#9|+heWqsJ7aSBpG8%XjPR|SJ#SebApQU#LXaMfONuxg&}j;K`fdA zDvW(B#LjMDx};HCNy+V@p{u+-B{V0*&+kw)RF41qx}_P-`rxOb(~U?txJ*9R%^tVK z*SaaGbCJZxeu3@b!MC|tB<#i`Hn@pM!hvQRgt&fi|57;7lT%-W4IErJvvI;3yeyi0 z&FQjMC2egFXhvYtfN^#7_w$EYi_Iqwc{08DxP8fz~r z-@MDWo;RXz(-eUf90QreA1pFRV$BB4+`O7X+B4&0hr$@rIf*H}y)u=Z{oqVVqY7Bn z;jA?X3%KSw2Kz6pp%1sSa0tiCtp}eB{4&&OG2)xJwwIcrR?9MSa!>iCr3U8Q19RV7 z%B=KSHhj7fw<&e47G0{%XXr68kC=_qdOXe%4_;*Q%-yUCj$ixK{~#&!?J7F6V7+3LLotyh@ z>X-D~T%OnC7KeF)%YrR^_tLB7<;#Qe)>iAqmc6UR*Ss?CG~JCo0}QdHSw z75@k-PHeE2kT99Al^o39lIG^Z>uOkjybsC4ACi3z%-$_h9z`Yg{0O`fgcfp6BjSS> z^0JrlCp<8qRZ2(@x3CBx?N5|SQy0{%5e+dre9L=;onkdk^oFqX^NlH3zXRx1NYk$5lKYcxS=^PIpvDq{#!CydGcYC<3Sk~_UEPMoe#IaJ~=uL6)8uC;r+xVXdx)a z>qeIA{1EQyVAaW$^mOxnV0?Ui?5BT2*xK)6aD+EEhbx}k_IDS58|}r{@d6q;BsuaV zMu%l(Wi70s@0^cwrP_RpYR`8JBMIFuj?;79Iu;fx-}5jru~L3BFR*4ybULD1({7pV z?1q=?l%(TjVULfSEK#@p37X_XjU6P+fK|Nyi#@Lh0?yS@{?m3@kO#Ch2tkSOb~K+t z#H4?8f1UE@Pu$p;+KU(Q+uKe5B7ylmCRB|<7-Is{UfJ%99UQEgSqLs;+2jP~Oc?Bg zgfwkUC8sSkqpwi$jw4{4jDo`Y>A|}z@F*?KvzHsEzoTi$dRZnSL`qn3a$o=}f|}BY zC^7ZFJ(Kx-%}*E@xrXOgjpk}17Kb}GH-z1{%p5K!Pd%Zhz5X|K4o2C-%2D=9x?xM1+bZxE*OZn+x2p}mh;wdYU})b_rBZH&FMV|wRP5+wN~jA z%ayB0a-G5DMA4}OgL@1N9pArWlakT~F_$^+{k5k??(9_EAVkD{dXkq(f2ku zm^(OuWr3Eyw6=!F%$ncz*;5NFlnX4>#Ib&Ha&gGX88tLwgvZgWC`s3PP8886g6QaA z(`aprg7A@JZOxjO_qol}W62LGz@?9j5O^usc&VMT4x!;()hejj8TE7}XH8w#H>wE< zjlOA@;8X5ps+o7S^^?GjY?e=Rx{R3hH zJ$Ew;jTz?h55%lrzrO5GzE4P?1VJ#!neHzF@Xj==nAEc~8XQJG={yi8w4^s-6l7%& z*SfAP=9uia1|-3O7?UTTW`j*{ltkIsK zyIs!77U@gntXg?l2RGW6vArSFiHMYxt9BP#V3!UEHW+ftx!ml$UQhi~m+N6~zdb$4 zbrWkUDo=2@-z;zRc~w_$u+AoR=(o7v#w7J^ZS)Pi7uSU@ntm~wlqK@bS1O97lqHL8 zPC@tMGaDXG+uZ!y(9k)WSsWMtl}c_hnSE41EMS+anj;MFlaOrbR4c5CnW(t&?tvSC zf&F{dR|#L~mFarql|yyZ`c_-#0rY#y&C4a8Q?xY7e-dO%b_+y%8$7q03f^Qo!oIWR)@x82Umer;xv}De=H=%n zq^Hv-7rIu3goKa^2UMt+l;KkR%@N!6O6xWnN#nF&Yre!N8j_8UE+QgQOQgHKUG4Di z_Nu{G{yY_xl!S@b;FlRMNv@R1*WJ1>YZ*jNTk9=eN^4S6=bN2dzCllSI2G{bi}|!V z5tk7aeJ~Q_WK|G9Tr8cf^uC1~*QZ-*z-}T>I(VUONxR-^zf7n4G(z+vD7-THJgASE zj*b;AV@0uExHMZxw%Y*g|2K4CZo?nH977KN&M)5DGP<>5w9Uh0m^xomdlMR`$?prVSrynMqjI($({36`aV zWyoh`Wp4MIia*6sX5BnyA_5nS7oZYZUSaV9&CSeU zAtGX8DapwI_t`UU{{(wJJ1@Jt5ctmi_YO3&eY1K*~b)-MiES&^5SS%Z*6@Jk()#tkeJ1D`e!q zfB%X_5bSMji55(lvdr&I6i7=+2?+@ms+f6rc%&l2K&p*L%ZiJe9S?9Is{jaYaW>S@ zcncw+qzt$=dmuSf+_3eYSKB{4Y_XWD`ukT&R(5!%T(AB^h&Z`+yGp8mi}Og_2j%H< zy%kp^Tlb)zW&&rhLw>K z*4x{a$J^75zMvpPm6OHE{J;76`SO{3Q!_K~5djX02>H|BZ`zuV7M(>6x+ZlcB_EH7 zhzK@zc3@x8pl-Xq?%U6v*dvfzsFZ?u<1*@IQ4g%yR7ki$#kB2W{UY%r;U?Su?(drc zB;MZs9Av0k#{ac&x%)+tv7Jt0J{i4sJ_q0hpx5o=PGAU*7y)crLPEC1Sncl=X$Zv7 za3ecAJ3>|XnH|E)&%g5fH{{;J0DQ<~R4i%YqoeyrN1dIW0g1rQ%4*q~Us-7@?(cvv z`Q^*cgz0C!1>gYSlNJ@Vy0f!$aKH^{1ww8onPjFskN)}jd5CvemhivUG@8%(&kaV3?M&gfd^Ho)BY)_lV`AI}xG3f6=rC&Jl z$)U63$q^P}WNd8c6>F&v7Z(y5T1gD7<^1fdVida4&hK)fKSOJ2W>!^OdwFr;e!2fy zK|$ewbs%;X*-nSBMaeVxg_4TT6 zBLtNBXS_T-cJ}tMv9Zp_i+h`!lXq$Z0|O9mTD7vtsi`kZnGkP4s~peQ((>~1GBZys zEwyg(n1{<1yize07KZcf$WkhL{j#gCuOJ6wp6-w(rY98FdZ`I8P36hS$$%N^Z1aha z$4*G4p`rO>R0SwC2nh#ALtR~h^N=6eT2AjJ#I_VsFbbPi)nc|{ZNAnV7+k9}l&G%d zE9!X=aNqS)+1t)$bm}iFZI5_-?vbq?3d)$Tpz0#4$4ky!T&c7)yReo$UZbKC5psxH;5lj4h|*1ehFzgvRA0ny?XTu z`0fuHQN@d~pTgkj0U-lOE=LE4$+0mLLdgRIt%UOkcu~cdzJRj&SyWV%oxOf|C{r+@ zi1p^xtBIMJ#OUa^Tn@W{L#kvIEcVQc;B$sge4+#v6t@7guBj*>@cU$~D>XG$5i2|_ zZ1V5l&V94F*#Fqkd?pPKS`%YSw$IZbBZBb=kD}gaH#g3>di`-ox=vP>)~Q#*t9OY} zHbp8WHvO_X<)I1Q-!siTRttYLMp8l9Rz#sXBkO<~XTf zI|3cLln&lZUC&HKgLiaBb-QNZC+pNvt4|#gdINE}pzd1K7Ki(AP4qun02#*Izhh$@ zpljuj>J7TIIIe8kQrx)96FHMTwVpUy_MqkB+Bo~FrabWk@){H1*T2WWymJ8fX2svUy!_pBof0Cegi+0LRPJ2y`iU0bv4Q<6D0{jnf@j+$DWtX8wKk~aC|1=GL1W=?X$*V)#EvY=z{MpjD5$zi z#DeS(*r@S(Myq-{Npj@iT*;riWD@j&=gH4+`ZqnvW0(SCDHI%ys$TjVgk?`rYj&)u zz>d-Bw{&({StwGIxdbyDi_6ZB?_GT9dYY<#zc=Zfy}La;1MpGk@}-XkJIvc@GqyT#k8`*=Ti4P{&@&!h{dT$aAqZFT)JQSFGXD_*)l z5-kCEw3`_WBz{cWGouRt<1p%I&gra7PLGWlnKj*y^5f1eM1tC-ZF4gY)POuLQCDli zq!91_Q18hyOw0#f&rg&z@hg)GYJDGBmxk9!0#W7~8y?6MUb9+d>y8(RyzoUZ?Tg^$ve6fGmX-OJE%>VE2tLWq zlG6~N#Kgp0Z}#^U7NUYSOoir!All);i+lcfDI{dg0WSks2#?zplBgmEl6C_cqlr~j zJ#lROXV-0+*Q(s9;rfH<@WX?})HJ`EJh%a}Z^9B17&x^(%L1b}m-q#hvG+>WGIS64}Gtn(QT_fKmoVTbmNPvacwNJd@6 zjCnMH&JXY#$w?-X_dE$Lq=@*K=gEJZcLDGnI%sBL0SchtqBk`0XXm3YeROXs)YEoG z`E5A>cP5te^muJ92=_i#vOu2u;GkHsXz~76p-M=R>9c5PFR~^Rc^-LOYMnJ|d6^Z5 zmnUa9rH>n#Uwlf+^#;PyKuANQq*wqxMpcZ=HXn7I2rLtm3IMKsM)nhvk|t(vR_@K| zaJYGR8n?usKF|yV_?IfG#Qjugm>gLn5szfpr?xA+j~1~)Mu`XwlR-jM|686}1^=r{ z(ZONc8|IgAz=akeFoT05~m3#YFt?u8k zgGH=j35rzC3KijohMGo$qzjb|Mr8pRg@CfSRP}XxvtMkz?3J^8h7rbXc2Q5jn+b&1 z3ONc-ju%BLAV=;!-0~x7;)i4_Dw@(ww{w-2X-i@;)O|91NyNQ9=86;yU#KGG>iQFa ze%&H_Zh0K!1gG2iDJi`Gppi*oG3t70>Tyo-91`*ioKx`PoL^C4pYQntT zr3hJcT>O@N+Kp@wEWbN-N#V_m`xK&2o10oxx(ibk5<1S zQ-g^*jCxK$f|Sm4djh<6Ub{$eDGbkkA{a9g6T@yK&GvXfEs0roUq8|pv#vUGSS*6r zYjf2Glr}K(nXZw9+$Q@fvB2Dwij0u`4>yfSFNBS+pkr6M3_rH1-Chqeey{uEP{x>;A_H?2g}wn70B7i`R_|R7{#0 zZ#-^nVuO(q8;|4S-5j?*T*bvbqfA%|{*1!LGP=L|d^jTy$}>7f7AqL=mB|Xw+;s{b z9t|zGiE3kFQC+4lwj4ppbH@PJaX~m^)X<<%E+G2EH1D}1_v^;2sMyf`Rw*M<4K(r! zDk^z-TW{apYq(E2k~5Zf&fT^oBotJi-)3ji^dmrm(}K!VrKHWBp%L0`?wylGA{I+Q z{rA@|K-KMcHvl5TZ2!hn$h|eWyV%Bjxt_WD%uLgdk>MT%5c4fnk6D z_q8=E1e95+n;$PNN*E&=k$yM3ECv0M%K@bSdvPL*c^1P>30}qc57^*jfy06RwwL`i z3Ib5>)#(d*S5{6>6f8HiD8EWI&l^_2)Ba7V%TAJVo2pJ10kAzlk}ob51m_BTI9u;A z#z2xu`Uu~L2V@e9i=9f!=huhH&30QNEoG}u&PyV31@fgOGE{N|7+4o{A5S!ljP^Tx zU%7Q=jaUh@Ja^yT^Y{0E;C3|o@Fg<@Co?H&6i{@3Iu|T>~~=4C(C0>?!&fJXSoJWsa*Y2<$3iEa`+MJq0a!hf9)5RchEd$4?7*cg7a{iGl?U!k6#)Ui~-Q~ zuo=vLYRwUs0B$UGYTl-g8L8mcFB^y|UQ~3c+wS@6Pfj!$5S-p!ea2&x5trG*#ZjG` zze9MzyHaocG*>+c7{4BsXhguiIQpugby5-uBBrG>F^2-8?s$$e)32fE77#bQH^k42f;X!C?z~o@Ry;~;awELaL+0}y{UQ<|Z zEhYCv88MO%O8@Y8eLqHkdgsPLA2;dm;Vj^_7O@6xa^7M(@y+#01XG-4t-mmX=!u^7Uv}I!ZiX(_kS@;F!!S zf~mg4Zswny)a$iBom|zS>#_VLV`J0ui_}(Coo3X+Y4Lha2aKLhdz+jTBk#b#z65!U z%1Xh;8@5yOu$9Gb16#R_u&1MXTi)A77#T&y%X({mN?8n9UxrVgobN6SGx_5E0-L{o zpF=Y{d;bFqSMB{6>@Z{d&(7V}4|#O8v_uzS(Dk&n6M!K1&_i6v z{1M|MDhhi^U&g@7>U(5Uet;~G?FKEoPV-e$UETPSM^i%%DIdHbCZ>J!Y?k>Y#)+)b z#SMlvCnqm0`xoGA?p&j?bT~T~dpn`HS|%nJ2?7G}iP4HG8XElHtD*?kj&xxe_9XYZ zbKBaAT3X6>0O0HmZn4Y5?jJ~%7(Z32WB%cXNf09ggO*NfePv|=+QK*E#F3QC8KCk7 zWy94qRMq-)aF`yjHDd~xPyrjbR2Q-t$$zJqm9=wqW$55=CqYR9s+_?T4qK2RGNiyR zGypvZVEnnbJWf&IjlsDIrEdamqvqjZfaqqLvkWh68;}J^^K&X{ecH`e$PA1yiAjul z0|;-F`mV#|whH|_A+Ov`P#MV4vfF!TyP=_B59YhdkIA{#D<%N}!;>RoVXYpt(s|ik0hQEP z$M*>)g(~|$;1KSvu+JD4u8!FGJ?R?VoO4WaFi24Xs{uL&P{|fJz+6=^Nqx(I9Umf> z(habIw72;9u5ND57h1>vVq$OD9CVk%>R>v#MY_JGW@vbrm92LzZ^6$$n;b)us|o{> z)!4|%z`#IB`E4NXLudR)kGsrR$~S;l&XCx^$U8f;10W)hgv?}|Zd{~;X}m5hm@aqoEP8mM2p-HTa8SU|MSV0v-ICY0Sr!45cT ztL>pLOP;X8g$JO3SZQahsquRb6U?4rV~yGk9hzqf}}&*?(~wl@1s(R(v9GoXP!cI6}s(}>Y)e-AL60(oYy$0>r9 zkKG|j#-;}bqKq z!sYgiqK=1*%wV?S3s4vX&GXaK(~+T7J1m5RiRtgq5D-aNjb#b`{P}ZM2q(1Gen$@6 z92*;(oxL9Lw99&c#@p%b?FG17OD6GNHmC@=TKjvyCEfgrBG(>KDvO7;+Id;G4W!8k zukrLvOlJ9LmZKq7#^}4N?&ck}GG(8fFGQQ*Edfa2;Q>84F^aQR&X>_>_vHP*LG=Hk z0}Zn2M7{@jEPDFkp&^TvHji21le)S(M@L5>j)r(Q+V4zHO{Md?;Xo7=6@QfKTU+bt z=y*Ime77KlHa$E%u&}U@k&(4|JriMLPqlk_K?E!<>EoqzDh)&dy`ip-2g$0cs&eGi zR?C{$W5GWHpe+Rj1t}@13QcWW8sGgU0q!sAy^17=;pGr zV<3Zucmu82$+GmtC7#JE> zV$Zve^!InD{+3%$@NYR_Vq$7?*i#yeR4dblfv~W$f)Rxx@Q{L0-QC?+TQ)jB^Yg_( za$i{?){-lj;3Pl^$p+L7*pJzO@$qpmw9sNd5sJ&GfVE}AL9Z8ru=X$AGBM5D-qq-9 zt@%GMlCM?AndkAy5n0HRk_k4ZixQ?=)4Rm=JBrt8{MiW2ao^1M;-ywlRec3Po3MA7 z^`{0pve^b8^3ItWdk%*Vj*hZ_ys=Jf3I6xdXa6-gFu*}DvfA;S&e{*2K2OQg(h>p* z7c)O^d@en0NX7b|5~Un^Qpj!Kez)_^12LMFO-BD;w^+eC@W4^4GXENuCCl_$qTW9MBFq;76^t?f_wpCIy}P8n+5j$IF^$6ye^*SzVY3S2ji%?&pFfa)2QoK5 z51h8m^)lo@U$~6+BOYKI(DCs#RaLjw*9|N!!)s3fYoW#9^{coT$oX9Y$$u>L0=-gY z4a@kX3Wl>N2Ic>p0MWCq6Takqbz#nVcqUWhaiQFGhQQOMIDp>~Acf_)gC{1asF90{ zi<_I9>D7x2aH$*$i_@xW zXnfg`5*2-sERzr&4FjRmZE*oJ0w8DtH&0_VR~=+9`@sAkazd40C89VcCgneRt6qr` zvEb+vje%MvA}Z8K18zVnYII+^n{%fB$IMP=-8xN{eis*JnVWv6q;&c#JdXeTC=2`< z5D6f<1LJu8GDlW}d0g})h3dkg1Y)A0>04MVf;p7&9C0dga(!B2 zE(ZzF3FzrPAI?<+Y7QSC-_iht;*e}W4}sMHYXz~T)#IM6j?%Z|D8$y*Rbrf*+jHN?pl}QO8Y2uzXxy9LsTSpa*~CMv%{2z7H+Q zIy5zD(9u6+m%iL5lFM*sG7LyA`rw|2Ozvc9kC`k}Rr`qauFgkV0PPDv%iV7jcGtf6 zJCi6x{@x<}C*|wuVFg_u1@RjZbpjMSAeRNi3m6yx{CuJKYD{Wacr6`$`12jD=GnM_ zpX1T|0RTsUkgbOst*~H~@ANodmU(-KGdb>}r_;cuKokoHhtK0qW%7q0#$QjS@T>iU z)CfYi-F2ppKS49OEbxgjF+SlOKY~bTX^Uf7xm-_7JAAx>V$kspGLv$5_sJ*&5SVY z?oY8MB(yAN{~!q>7q^pK-X30yB=&0YTCrRe_}pTMj;o=WnTLJaK;*I2SZM0c&&?HtY9G}+TTg33V@xKvfzvIRHEw$3&#Si3`n;U zXI?WhzH8~~fJqI1xH~|iptwzCpOJ=^+(fagv%dYa+Mzoj9yxHAUECL=eoT)?E}w<@hV8cYROfa5=^oJwXdnE zPCBjhzR@=v1bCjMO2dRUz9*=|57!hqO2zY&ikSGkqXlPirg1bWSy@AOca+p{2&7PD z;Ao-9MVwp_)Vv2Xff4w5?FKy}Ervf_v*qk!v$GG!bFKg&$M2rRknA0_0Y*aq6=WmB zsbC`1$B+l3&QRRtJLl5M3R1J39|_Wd`uTWW~u%cgP z5>j^|hCDFm{_X{!X9@$?%?%FW5G-IIZr5TVoOrOePpy=!tnH4^?D0~; zVTb6#SpepCK57Euwk;qTa_NJ;)OO#Z{JNzJ@S-M1S_-DBf{Vt*w)FY!@Rt^BJ0t1W z!^2At9qV9#%KV9PkSSh@$kGA8fPm| z*IPO6d|S%kMF(u3cH7~vvgLPB^{fmz??sUuMY&9;vNEgL%J0otX z@(6HvMcNC+=`ukT7kK}>81<)JuzKph3$*}MOp^XQ0@ia?8!hYwji`&`HaZTs}4DY6=dvSuD zp`;926>)MF6VAEje=g~3>UI0$qW__DjpY7n=^vU34h}%doqaDz)-kuz4L^VGIk8~} zJ9EDMf}C7KB9Ak_MYwyY;;Z>9yFEs2a3WWqL5M{rpgEwXd?#6FLfn>e!ZR zQD^{92g{X_>~97FM1Y!~q9FL(P~6@30p9QTZwe6kiHN)aQ1{(cvjYcSHzu~dRMS!M zbM5s;A0Sz~<{U{)$r1{FNRt0OUb26>={hcNCo0!*%L5aI1hoP!IxTqC#<(nYo8H{c zY(SzbN%$#3#m0%q>pWje=`ZfP)Q!f*t@UC=vz(&f*6-(+OU>`q$}=!9s)Q63aiBpY z68h_eqO4YnSwJ&-cE$uYtf%)|a4iF3Y@*sHE4N(RJhML83| zkHaVO-#FTFxn1lEAAXLDN)i#vA4#$$fSl}(Zx<=cg3&=AKdRvI9Xq=kZ%9G=lN}&a zdme6|fa(*Yu%_S(lZM-sNKX;!h-~y)sV7U>0mwZHy*F94WPFzh`I3W^KGRU_cgr+p6>2o+M2&#t~oN;2Vf-2~;o z0#H%{@v75IBCG^PYWU49Z!+(FZh#oHK)$uKbZvp*rhJ-Mdj)kQ%zkra=^A=3441tLbbJL<#LUj1x*L>B4V1D)iY5(B){J7lYn4qYb8Wsl7CvXd*jB1fsiQGKtzP_F#JYLNe-~(WsE-%mKj!HL4 zW*YEvo{yJ|H1QaOM@L&<;R?8ZG|@g7SIkVRoLxIN*?k4W>=erR1YlrO810L$^wbdr zg-2x-m(!E`VFs_g^~y4YF){1-&GVvPGM~q8DDHx4X^O+@Zyl`#?-Du=xXI_KX*R2+ zyU|X6LBJaDd$kP%PU29?H(h`=KIP8m%I%^RDSkSJ(oK@kMh(5aQPp)7b z1OOCx7*!8Ih+%2z!i=(yju@Bv5d>)H()nV&^)e7Ywm;Z?q&xf^Nw^&ocky+52ve*6 ziP?DM4=!Wf!tCoVZZgCeg3c{4@tiE9+2(Gb^w-Mmz7k9)$fUb&0zIb-0)^sA`;5h+ zi{n}+2}m@N#BRhq4FZyqD9|htiR_@H)Q>bYtxiWN=}{H--H5HV=H+yn4m7;2h|sL= zvdT)3qs9NNftB@n=vpX z!@7RB#F@OnRDmUGYNht{L2Vq<;fb|+Y>Zx6lwV#rJfwgb>R6%~o0xX*{j ze4pnLqQRIwA>YGlS74_`^^knJrkP1$u(Jr72%=JK>PHs*ueWDNKt}I=@3gPyB^v18 zn#OLOo0u5RBBvG?6XUfhp&}$S(j6>J#J6ZHRs`w-I^!_?j!NVM!9b#j?%g1i2n4Ot>BXLMOOCfIOUGR* z=-*V!b?NgJNY;UJ^CP?9P0YX(B?uC{NvR}=WMu!}pGaGj{}sRzt&R*2Q%FAarV7Nb zW01mMqQ(4?1=S{aM*`5lbXq=L9;g9mYCK>P9VqTB7wQ~a3DA4#`pZ!TyGer=Rg{%| zvkL*HWs~|IQAy*&&qf6Bf(sO4zQs#B5xi>hc0PFYz#x0f>7mB|BQ|!Fl`v|-wg4J2 zpoIl8*10)QqU8Vgr3YY29Bc`|jX~d3U(X)f4-biw$Q?{%OifM(nlC_jeWata07#aU zloaScd+W%eCBRz+@Hy>rtE$ex5eOO&v%m|&!oteP$Y5b()6>!Ewz&t>NB(c(*ZZV} zaxhsBxD#e(AiI0VVxnMTLR}XHCiWK_mBq!yMMZmthfBdNbIL~@3v8F3wQ7k_b-F)?cle(lCWeOSfLae=M~AbO%gf89 zUJI_V5geSHvZ-uhz z|FgY&YfDSN0*B`|0ta$Feg1s;!Uf<;-XH(|Rs(nQ|Nr-wkpau%*Hge%x3P`Dp`45@ zz=emvhEGdNOTfx2;1er=i-&ySX zJdfZ8SFYXjCr=WzfrCq1;!f<=Q&wK=Jza0>pNglaL>U}_8=HYgKfHSVT9C!l$0sMA z?>cbqIV%OY$?xyqjZaIg<{o|sU)h=~AuF4kmv=AF!=_B?`rrF$iv52(fhWueHbgx0 zFf=haVkaRjEiPJWF;VZ={={RzK_K8D*o}1H0TV#bxJp}F`*DEx=j z(H;yAi!a`)$vaq@=+4E(<<|4#f6Nr%02c#;q~y#$e`?ChzXL-F=*Dl+g|Uv2k(P>z z2hX2BfBky-l@)>3Wp8E}r2=#Sr5b1*9U zkHTcu8_dk?e87z@&Zql<11!Mi?=rRM=xBfc^Wp2`SXo)O-tT(Ng|QAbS=J4>PW6VV zY}X>lN>y3b!^xl|J6BGGLrG-g6JXXSWxVI9|2k8vx%UD~O{C5qJec_SSTAt&_4J7o zH}+P4pQP&T^0W5e@w<0xPfybYu2$95)vf*V;^Mu%)r<_hyu3iic`Y@P;E|V~e{Ers zyj9e}Q>VC2g9?}wqewS5HiiuqA0Mra-VWShY-(&=d~Hpn?(P*!&pdeW;MT3E1H~X$ z+wgG#k52f1*8bn`*}z5FU%r05dgaQUyLTmd+-A!O%gf8FsxDP@ZgT;y^gcb)XW91c z+kwNvz@c2==@Ox#qPJGf?mU_l84&^MmTcMA)(Ga#TwD4jVabX0S5(3#W&p$Gk)4Ks z3ZK$BU+CxwPyulCM8Jl + diff --git a/doc/html/c++/pfuclt__aux_8h__incl.md5 b/doc/html/c++/pfuclt__aux_8h__incl.md5 new file mode 100644 index 0000000..fd18ec0 --- /dev/null +++ b/doc/html/c++/pfuclt__aux_8h__incl.md5 @@ -0,0 +1 @@ +3c4d9ae2ac6d9759a4456de51312aebd \ No newline at end of file diff --git a/doc/html/c++/pfuclt__aux_8h__incl.png b/doc/html/c++/pfuclt__aux_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..e832eb76c913cdaba5dbd012d1edf82a04804b15 GIT binary patch literal 23698 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 RV2F!A=v>y +pfuclt_omni_dataset: pfuclt_aux.h Source File + + + + + + + + + +
    +
    +
    pfuclt_aux.h
    +
    +
    +Go to the documentation of this file.
    1 #ifndef PFUCLT_AUX_H
    2 #define PFUCLT_AUX_H
    3 
    4 #include <ros/ros.h>
    5 #include <vector>
    6 #include <fstream>
    8 #include <boost/ref.hpp>
    9 #include <boost/accumulators/accumulators.hpp>
    10 #include <boost/accumulators/statistics.hpp>
    11 #include <boost/spirit/include/phoenix_core.hpp>
    12 #include <boost/spirit/include/phoenix_operator.hpp>
    13 
    14 namespace pfuclt_aux
    15 {
    21 {
    22  ASC,
    24 };
    25 
    30 typedef struct landmark_s
    31 {
    32  int serial;
    33  float x, y;
    34 } Landmark;
    35 
    42 std::vector<Landmark> getLandmarks(const char* filename);
    43 
    49 template <typename T> double calc_stdDev(const std::vector<T>& vec)
    50 {
    51  using namespace boost::accumulators;
    52 
    53  accumulator_set<T, stats<tag::variance> > acc;
    54  std::for_each(vec.begin(), vec.end(), boost::bind<void>(boost::ref(acc), _1));
    55  return (double)sqrt(extract::variance(acc));
    56 }
    57 
    67 template <typename T>
    68 std::vector<unsigned int> order_index(std::vector<T> const& values,
    69  const ORDER_TYPE order = pfuclt_aux::DESC)
    70 {
    71  // from http://stackoverflow.com/a/10585614 and modified
    72  // return sorted indices of vector values
    73 
    74  using namespace boost::phoenix;
    75  using namespace boost::phoenix::arg_names;
    76 
    77  std::vector<unsigned int> indices(values.size());
    78  int i = 0;
    79  std::transform(values.begin(), values.end(), indices.begin(), ref(i)++);
    80  if (order == pfuclt_aux::DESC)
    81  {
    82  std::sort(indices.begin(), indices.end(),
    83  ref(values)[arg1] > ref(values)[arg2]);
    84  }
    85  else // ASC
    86  {
    87  std::sort(indices.begin(), indices.end(),
    88  ref(values)[arg1] < ref(values)[arg2]);
    89  }
    90 
    91  return indices;
    92 }
    93 
    104 template <typename T>
    105 bool readParam(ros::NodeHandle& nh, const std::string name, T& variable)
    106 {
    107  std::ostringstream oss;
    108  if (nh.getParam(name, variable))
    109  {
    110  oss << "Received parameter " << name << "=" << variable;
    111  ROS_INFO("%s", oss.str().c_str());
    112  return true;
    113  }
    114  else
    115  ROS_ERROR("Failed to receive parameter %s", name.c_str());
    116 
    117  return false;
    118 }
    119 
    120 /* @brief readParam (vectors) - reads and returns a parameter from the ROS
    121  * parameter
    122  * server
    123  * @param nh - reference to the ROS nodehandle that will perform the parameter
    124  * reading task
    125  * @param name - the parameter's name
    126  * @param variable - reference to the location where the parameter should be
    127  * stored as type std::vector<T>
    128  * @remark this function is overloaded from readParam for use with vectors
    129  * @return
    130  */
    131 template <typename T>
    132 bool readParam(ros::NodeHandle& nh, const std::string name,
    133  std::vector<T>& variable)
    134 {
    135  std::ostringstream oss;
    136  if (nh.getParam(name, variable))
    137  {
    138  oss << "Received parameter " << name << "=[ ";
    139  for (typename std::vector<T>::iterator it = variable.begin();
    140  it != variable.end(); ++it)
    141  {
    142  if (typeid(T) == typeid(bool))
    143  oss << std::boolalpha << *it << " ";
    144  else
    145  oss << *it << " ";
    146  }
    147  oss << "]";
    148 
    149  ROS_INFO("%s", oss.str().c_str());
    150  return true;
    151  }
    152  else
    153  ROS_ERROR("Failed to receive parameter %s", name.c_str());
    154 }
    155 
    162 double linearRegressionSlope(const std::vector<double>& x, const std::vector<double>& y);
    163 
    167 typedef struct timeEval_s
    168 {
    169  ros::Time rosPrev, rosNew;
    170  ros::WallTime wallPrev, wallNew;
    171  double diff;
    172 
    174  {
    175  rosPrev = rosNew = ros::Time::now();
    176  wallPrev = wallNew = ros::WallTime::now();
    177  diff = 0.0;
    178  }
    179 
    185  double updateTime(ros::Time t)
    186  {
    187  rosPrev = rosNew;
    188  rosNew = t;
    189 
    190  diff = (rosNew-rosPrev).toNSec() * 1e-9;
    191 
    192  return diff;
    193  }
    194 
    195  double updateTime(ros::WallTime t)
    196  {
    197  wallPrev = wallNew;
    198  wallNew = t;
    199 
    200  diff = (wallNew-wallPrev).toNSec() * 1e-9;
    201 
    202  return diff;
    203  }
    204 
    205 }TimeEval;
    206 
    207 // end of namespace
    208 }
    209 
    210 #endif // PFUCLT_AUX_H
    double calc_stdDev(const std::vector< T > &vec)
    calc_stdDev - Calculates standard deviation from a vector of type T
    Definition: pfuclt_aux.h:49
    +
    std::vector< unsigned int > order_index(std::vector< T > const &values, const ORDER_TYPE order=pfuclt_aux::DESC)
    order_index - Generates a vector of indexes ordered according to another vector
    Definition: pfuclt_aux.h:68
    + + + +
    double updateTime(ros::WallTime t)
    Definition: pfuclt_aux.h:195
    +
    ORDER_TYPE
    The ORDER_TYPE enum - use to define an ascending or descending ordering.
    Definition: pfuclt_aux.h:20
    +
    ros::WallTime wallPrev
    Definition: pfuclt_aux.h:170
    + +
    The Landmark struct - used to store a landmark, defined by its serial number, and its position {x...
    Definition: pfuclt_aux.h:30
    +
    double updateTime(ros::Time t)
    updateTime - adds the newest time available to the struct and returns the time difference ...
    Definition: pfuclt_aux.h:185
    +
    struct pfuclt_aux::landmark_s Landmark
    The Landmark struct - used to store a landmark, defined by its serial number, and its position {x...
    + + +
    std::vector< Landmark > getLandmarks(const char *filename)
    getLandmarks - read landmark configuration from CSV file
    Definition: pfuclt_aux.cpp:7
    + +
    struct pfuclt_aux::timeEval_s TimeEval
    The timeEval_s struct - takes care of time difference evaluation through the ros::Time methods...
    +
    double linearRegressionSlope(const std::vector< double > &x, const std::vector< double > &y)
    linearRegressionSlope - applies linear regression to a set of data and calculates the slope ...
    Definition: pfuclt_aux.cpp:27
    +
    bool readParam(ros::NodeHandle &nh, const std::string name, T &variable)
    readParam - reads and returns a parameter from the ROS parameter server
    Definition: pfuclt_aux.h:105
    + +
    The timeEval_s struct - takes care of time difference evaluation through the ros::Time methods...
    Definition: pfuclt_aux.h:167
    + + +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:28 +
    + + diff --git a/doc/html/c++/pfuclt__omni__dataset_8cpp.html b/doc/html/c++/pfuclt__omni__dataset_8cpp.html index 4b27994..3aaed47 100644 --- a/doc/html/c++/pfuclt__omni__dataset_8cpp.html +++ b/doc/html/c++/pfuclt__omni__dataset_8cpp.html @@ -9,6 +9,7 @@ @@ -33,15 +34,18 @@
    pfuclt_omni_dataset.cpp File Reference
    -
    #include <pfuclt_omni_dataset/pfuclt_aux.h>
    -#include <pfuclt_omni_dataset/pfuclt_particles.h>
    -#include <pfuclt_omni_dataset/pfuclt_omni_dataset.h>
    +
    Include dependency graph for pfuclt_omni_dataset.cpp:
    + + +
    @@ -78,7 +82,7 @@   float pfuclt::K5   -std::vector< pfuclt_aux::Landmark > pfuclt::landmarks +std::vector< pfuclt_aux::Landmarkpfuclt::landmarks   int pfuclt::MAX_ROBOTS   @@ -161,7 +165,7 @@

    Function Documentation


    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/pfuclt__omni__dataset_8cpp__incl.map b/doc/html/c++/pfuclt__omni__dataset_8cpp__incl.map index d2db655..9728e08 100644 --- a/doc/html/c++/pfuclt__omni__dataset_8cpp__incl.map +++ b/doc/html/c++/pfuclt__omni__dataset_8cpp__incl.map @@ -1,2 +1,5 @@ + + + diff --git a/doc/html/c++/pfuclt__omni__dataset_8cpp__incl.md5 b/doc/html/c++/pfuclt__omni__dataset_8cpp__incl.md5 index 485a3a6..474d0eb 100644 --- a/doc/html/c++/pfuclt__omni__dataset_8cpp__incl.md5 +++ b/doc/html/c++/pfuclt__omni__dataset_8cpp__incl.md5 @@ -1 +1 @@ -8fb4fdb3520db4978d4e43faa9909043 \ No newline at end of file +fc61eaefa24b17bf7e6fa49c5233c163 \ No newline at end of file diff --git a/doc/html/c++/pfuclt__omni__dataset_8cpp__incl.png b/doc/html/c++/pfuclt__omni__dataset_8cpp__incl.png index 5f30a6985ab6de31326a0f9c45644a5cc6e64e08..f504571504960f22ada8a7a4d5a4a8daa3729f4c 100644 GIT binary patch literal 183285 zcmbrm2Rzn))Hi;$C`rS}7Rk=Y%q(Q@y-AWivdPLQ3S}gFyNpowo*^Wgkd^G6y`S^# z_q*@=xphCU=lQ?>LM|?s@AvaL=Y8Jiea`s=D9DLl!Xm~(p-`73B}A3rzXvGPsaNMQ z;5%Bcuj#>m7>3f~qNro!Ut$$H428OZk`%qK;vBm;;_^&ov+8)w$??mbus3fc?`Trr zdvjK)kj9YnhJ-?%TlSP%StgA)>91e!(ypw0JwHELxqjjI{-MVyxS|tp zwX3T$1}V5FzKcApT}#9}_xJY=G?M;5eft6@?_V$Sn!{~tu`9&$;E_v}UP=loG_|)^ z<#2DHhKm;i70Y_xqh`$7{`|>bBb0o{qMz%sK0SA^-oed_b>l@tlI3u5z#hu$>aPx& zz|$vw!7J?7(f$fI@99KN^Zr?HOmbG_)fMW*Fi$)YdFVBHpB~xC6K}O2h5!G4+rRXd z^t;(^X_iB&nT+i0o)4M@atg_~3)w~_tqZ47vHao5C;lkP;Jh7goa_El$>z^jEb$-h zxHvdw0~vF99?tA%C8wlp#;rV?NsaSl?dR(qRYnoc(LFf1v$a?HySgZA#_~RY{*3D= zm(W2Q+2&CHZCf>}-PnD*VobnvhT`=mPSG|VN{m-Z@vjT`SYFQC9?dDeFpxKJiTg() zV_v0_JpY=ntDBp{uw{v4X!UNpHO}|#SIttP0}Fl9ELEw<#Mtt?zX!G1IyAA>L=%}7#H!Qvvu6eC(6{51MlWQh(-D&01(dPDZX_4~*wDE6-mjvhCTvI!yB@&L`>YedYCQ73_xj2MWqpl0L z4-aO929SFVBH^9~Q%;F@-x{nn7hj)_vCb+j)d=DL{nF!bK|i~^T&wNfZ9bEl$-8K3 zf!$wWW)>E`>m5RQ;uP*GBwQAq2}c{~+J%MwoF4WL{*(u=2JJD%?0xhj1h25Ha zla_sRX<>aA4-bzzq#0MEp<<;v`{m2?lHHgT&l34oDwP8Q0$RU*?RBcz*R}jnx|T5* zGF5Q5d*)cRh6Kgh?MqB{(kxJ&w49urALHWVbDNr)QphK__s^Fa%gC%)=^egHc`i(PA^YAw70hx&zTw4k1OW( zs`EguE@FJ@t$5e3qsPY$I5{}Z#%Jf{T@H^4R##ByjQkcF9-i7Ebo{K=4*V~ax@0&f z;c)Ru`QCi?=2!NPSxljwx`!QhsqSvBuDv}yDG3L^Xc1s@=z4H{F5YcfQC$2*YW24B zVE$vRD%T>lJiQ#JF?aP2!Tm+W0tzs-)Q)3kxOy9g{~;KOeD0AK$^oRZ9IMuqj$~GS z_;BL>{)YT5txtx2<>loY{o2;&^kVp&a^ErQW{p%hnRmnsAd88KXIl+WypRzkEFuEI zfk|MqSJ}+OMB(w{G(G1DKM`ZT!QAqB27&D#c3LG?aavkhDoRSpfHaDsy(1$z@$uw- zzP=eHCF(3y8=*f*{rzfpZgA##8B-n0iN?#&W=E z&EQ4Km&+G=zkla3NcjF;L)Y_g(-pjYvsvg!acqBdTSZ5QN%GHA;8Gi3UC*wl(C$IY z4L813;pEMXS$RvDSs1k5@a;4cbnY;4Hiv#&dM-DK@&qbr~_ z=7(*G{p!Q5VXaE%Pq3!v1h&3E%Gb&%KR(*Wzj~EYGFr&9+5;ld+}5ylrmh zx-VOuqUXrL!2w?Wh;1e0?Gylcz>XC}8?np$t6mwGQH1x8NG|wJu^lE-`v~MJy~VHj`T@)az$|bCA~>BO_LWOU#2ya(Cn0&J0^xx=q=X z8Wn5`SQiwvOwE(qScr;dgob{VlHs7|;!+Buxnx zGr_vBJMUPwv8R#T-| z{~*6~ikPf|`T&80qt&~Pl7U%?(A1qBb3AgZh>ijJl3~h{VdjzwO>+5H{PEK_$<2$j zFzIihu!C>Zi~-#}dtzn0lJZIhQu_Plii(yZ8YV*9xjz1|A9sB8sNz}mVI+gNs4oMT zqd`}TMKCrVvg-R-@+q8-A0+GQL@Y!*SZ6l(3Qc>+@$oH{ZEgLeq|Nb&h;r>Z;xg*% zN%0Ac+YH%A$n3skWSRBnKVAR~@<{&nja=7x0&nEmI(D2xKTm_5<)Bjb@87Nw5q;T} zm3o|lwWDB1IQd&*O)_eZI!meJQyVObZGPd&Cs!UMBY#m{~1%HdCx9DJn*(eV_|# zD^e#ST8n0<6}Ow2Hrd-)!@78pjd%J@f6rvs*wI#0yr)M{YuiFZOicRjdPf)Mz%P0# zLzD2Jq2UTuJ-xg@tP01)kC}yqVvip?%+JrOnwWh2(9iSu@hy68Zq>3f)7DlgB{8we zu1}}Nvy=bIj$Vt(J&Cm78la@*-Mk*R*CvO#XV^7Yn<(UhAw+G%N=TICxztJc3g2@DGAEvbpiBeCX} zr>FlUCeBA)F_PKctrhXE|16d=pVQFP_CCCFe=4ATyKE2gUu!-cH@9qxm>&@t2`U)> zFY0DcYGOL40%k!>GW@uNukXhX`j{MG24o1dSXihlD_2BE^J0)*$H%99)tKt*OQ^|2 z6GTRm;_GX2i?*3TP*Cf_g)Z>?z>p9%=bg^?9zKtH`uegR794@j$uO#0g|$zs2n!c} z6FRoXCzzf+SeI9q`AV1aD45Q%Lb~mp`-ezq16{C?XsE2e)3%U#`I?A;~1M z;*q~d@Js}PgP8b!_o5@3fnjmzQ$u=pH!&EM*^FGpfk%x@dRH_Dy(D7t?Xs#?R?##v z62CgAQ9c2Gd+mqviV<(ao+K%`!#}G%wYGD*`2m79Tz3>K?!;VXzN^V(oR<2Tfr;sJ zExuufiP?PTeBYE-+0&T*4}-Z|TUL*aKAV4wC2fz3Ntx?uUe_gh4z{^DpS`g0^OZU5 zUP>EFLOP^C_aOKXkuCX}Sg)wLxKsg1sVY9~2`1yR9Mwq~)eEVw7v`|~@%^481Nf^l zI^Aqz)+XiA8N#T)O{MuxA4DNlGBSZP!R#?NG4W!)PD|Xn6@_zm>H^QTgpRx%ZF9sf z@EKbRZ70c*`(d$;#ky!`zt*VyxTuMU47WK0?9*v1^dXjoCy!5#W#Z zAG6_0`eBvlxMGDZ6UJ~mr>odMgO^K5lcYqk(`F{#kS=&4uco5n+r_qqzw^w) zeP@E}w(j2Bz*mgnadF9rtqkadp5C}`>T?v_3S$~7wRTMoGNrNcUBXnH$ zpr|N^n4LyyCZ12xZraFv`3ETwBC+PrH(+5lUkH8ZxyXWNzA~z(>o~{(38`N+D`nTL ziN8(Rmf8N6|0(4(@YlALZ3+%W21Z6n2wGy|7_1zB0Yh!el)Yn%u^n(G_`F=j+wa?uDQ8+VKei?2RSfM28N;Z+uCNFW-9N$ z@h)&65hPUlX+$ikxxEawA^`O9PBQ^yTIL8{kxdZPbNaz1K9e96klbQV* zMat#_%h-5HvEP^hr?SCmkkD|~F0{TuBq%uGVS1`jNxX}3gj(*8^d5Qn{@W$7dD*#p zykU(vDOFY45YkNB-f3A5cB{V|s;WS404x>>EoEhy(co_2JdC&eo>H+s|7-hs@SUrw z-Em|0T4gU?`c~`yX!2;ksR@V7*~L^xC!Fcsk)g6o;&^y0Dc`uQhQ>?p>@yh6fQC6b zn&}~eS)F^E6~DHnpTtKcmD$;;D7;Dg@q;7frlBt#OWuH8M^3-~@m{8q($7Mh3GDU+ z&tS12EOy?ZHv?cV`T2(rGTUR!3(X^8apWI0H<=6-+Jhs4^uQq-^DcL1$0X(EnVqM9 zc{{d~c=TfLacOR@DtX76tYf~`B#1W;$6Ha4kh~{|WZR@M@Xp~RMOs##wequPg~si? z?qeJoJ-}k_@Y0BVoS!#7Jldw1D;nr$q%jWvk_oM>!7ulh8 zJ!A5?^c^vPD{Mz2%T(X{72RlICfvgjDO z=r~jDHsICV*Vq1niLbFqtksZ>@#f7V*2lE$JtAI{zy2S%IqsWY^*g75A|wYHI<18{F+;TVUKvP%55fTXhWA>x-VSwc|r-rw7+c8h7JuNa|^Y0r!& zmmh!s@@40}Pnn*f%1TQ5WplL`OJrV3(9tkR+ zP0lP|$Sng7N=#odSJtn~%v=3sv&bS?RP2bcb@|dIHOM5Dlnf)@n_&H*y|u)05BN9O z1aT{fEbSgBm+E1sr1})?eUXFzFkF4Sa#F98U7~xGFg4x~Q;v8M71cBXSU@0M2{^N&A5ILEZ zy^#U+UwWKadOUf^&=BwAk_r{oKBkJ1qLpcEi-G=PP};Z=7@a+(9JeL!Bqbjb+1SlJ z)nXQ;44lWC@r(@*66Kk56(Gt3^J4~<6-%0pb+G^feM+XXGAO!6_A=wC@RUv#kF|Jk za?U4m#eXh6F51lggRv%Zkd7Tr79uuu_;7e#mXw{_d0t-B)1$c ztri~X*96&G+rQ$JKLxr#nkz;c=LLLL#%Zo=r2Ug((wK6IGu%w6`C)_=9=lf}&v*Mi zO^?YL^>gFSF8qS-dvi!;+!Khejlj;QPj7)`D?#2e{Vgu}^JhYkZ2alqszokWp>J#N zwJL(3_$gfmjAbF*xPo(4X(>j_T~lADQTzYknZtofY( zU-cP-+1a_ZFUEE_@2Bm@?a_dYeFG&eOIsMhyFcyGhp@`m6O@!E@vha|(;86!-)J=> z(C^vzwQt6^_lv-I4(HX6vBOgcSgJMd-VIOjKMnarhmcbSWWOX_Dp{$iO8;h;pWdIo z1xcCh-q1idD0*gK6m);tGe)y_PuyNQFIo9cFAEcs=%XglOYf(9^`8P9sDl;-$!lN$ z(c|$fRIG(yf<6RABv*X!U>M1ksHlXIU4yV%zVkB^BF5|B3)rTIQyI+^$M+x=FCTwy zaX2e}oV2)zmy$AZ@t<^^f=<$Ms8Ia&?Kmv(8DnF^L~10l|G@O>4`5>x`kl;GcFZ7E zIU^-|SOQB4&I3r)*H_ev=sI%=%Y~jD`ZuwKtb?7Giq#M<-D9`SGo!LHkF>~nt&vzL{%NnxxT71QhJeLF zLJ0PthL6t$NvHY2jwmny1`sSue6YHC)N@gGH$ zSyi38&DgGWVm4;)7n0V#{}0s@%zCWEQVqnQYqW zR*T3kAed3<_>W$I0&z`ENd~5`U9X8Wd1qoTfYoyG(%7`F?H;(!#C2>e=pQSqs>(uD z=UexPlRkAe=eJptoluG1Mry9El@M*B2vOsytFG=0 zjM+#M78qEJu+|`A{B&gP5ZC+_ssjOnm<+d85GbMN;R1TEFYhRGZ;uNq6J>ix+cQv( z8=5uYIfY0nO8KB;6%Bn%QUYIZommGuqX%Xa4jy`NVEdoS%DG_wlU^$Fz^Ph8Yy3EIz3|BOd2JV@;cZb7iy*2 z$45>@Qc{kXG*Xc1;p4JPA+%h`Gxpzz@<&d)zC(2~L&yFj+&m8(S;qRYwP+gN)<^bT zh>A)@QgZqfZX8bR2I#~be?-;;0#8)aFbFLXjBOiT;`mxM9+A{@ui5W#I9UaQt`Hs( zVPqqW(r+5As&ZXxG`y|(J4smhIaJ{bfS}7f5LK`s4d5qF5Ip{obcuukS>WSs&k9xL zp5)F>gU7}+49L~~Zkmg=qoLyj+bKnzw25j4bb+~kS7yzxUUlbr&s^Z>P*Lzc+`lM~ zDQ7>=!n;%xbxG$cigXaJ0r8_h+3t~I7VL3jv$%Qxhn{U&AKtitJGJM#0UV#iYo=Y- z+mQgUpTiV-pM8ALQGid}%F+5ZH$D9UL=m&eCaH*U6|-iXm`c5b?w&~m=AXnlM5oJB ziI`i0{6p|MU-Ig896>nCg_G}P=X%| z?qwj#2K1FUf=F-H8m{t>1!#l8mEIsHoB%&SGBkv}-?{VCp+n&MLVg>F3KxAcQc}bd zJj%sMxE8ybf+C=>8p6x#$^n=I8}IP#?j)!Cp7Y};XgX@&Zc;gh6Wi~l95xJEdlz>j z;M;AR>}+#Y5g%nP?HJPFt=c0>$~vU}qGle8R8Qo%7;oK@la!=ElrTVSNl9aHWsrICsbNKl$pbwF>x%CompCD|B;!tWSx-^3t=4Y1+W6r{9i@|p`nJLgPDQu<1sAY zbu|xaSrnd?(y$ST9;uUiLe*0~I(ubx4z0R3c6=BkCB@({m!{w2zO9?JvEiKZsLtSD zYAD%am7{-L20PB_YF`Qz3W+x$kkdmV_9sDQ@aI0c3lq(Ai=pk)p$!vCs;UJbX)bOZ zSw=$a=>%C;YLtvwLLe-N-Ux!WLXJry6M?5sYMDBI1|f*z6+Cnh3wPQp{5szAcZ0IDMkIL6$l+p$QbE>}A&Y&}#VHU^)l zGSFuN^!tIN9?>zQ4tt1&l^+f`f-vXIOj|MW#?F(yTQ-KJBYH)J_Ft?hcn0Tc1LUC= z^?P@ZSsN+eJ^0sydw_9004YYfa8D(lIG z3KoJUAp6+O$SE2ce!U=f3ANwXTR7`^ylw5eQq|6Te9*I5dq&;tr|7G$PpsI5MGl#u z3H9e4>mUeSco)gG@Vah%G z<9Eash?(rz@>bY)2()c(*I2)!hMY6$_wN@t+D1TEhsul8{!0#o%meW#gg-T2mwz0H z;YC>oSuTs`U`E36f$rv(>t+LmUIs|kA)fl5Bf+!!0nfE69MS!`BZ!psYkil~~r?6!q*>_zoQ`O4r;MyKAHPA!~s3Z%9?h^jn@Ie zBrDg7oOLZzUsTk@AX<4WoOazSKt3ue;6Tg)MJP%hA}=pkCS0@Ijs==;%fjY4y^9ww zcGdf_7aG)+?Wf<5m1Jt~r=-yqn;p0{8@djair! zm4PjeJP)DCVPmbi0{T{x0C`kZzH@-an=U7->fw=Y{B<^lx{<||aO(u%)GG8tadBvf zps#;R)?q#YVX?_TNFaYJ8*#^dAS~kZ_|tocMD({U5!nR30>weqY@Sdv#}+RhdMqx^iC(1W87v9LGJ ziD158`-!4T-GwJ0cL3)?HmxX2XLHjM@;@YjLqv5XBZOMRA8{PN`NauFOPJ}|s(kDV z?l65yIUcrqQ-9iFJRE%p88eMQ8oIgdABCij@idC`mDAW^3G~=FY;KhU=Ls%d=}zN@ zZn$&?p7*bcPQB*0DpAj?%$Exh+^dG7PZzXS%0eA=5CF68-%=*ztnM3%et@jEs6`im z4rTy&At6*iV0899&qy>_JgiIgx*jJY9?qZ(0bm>z6naetvB-TuXuboi_grL9aAN&-k+MO0d;GgJNQZ$GLy^ZJvxEJ{7eh9B2=Wkjz`R?eP{PZHu> zo`;E?&?Lv(?074T3d(-jl%9T!$Rhvd^1X#$X84?2d%SVu_bw{T%{}4(3W2O@tW1K3 zR@#GCdT&RT`RDC3JnHK1^R83|xE^k5%Rl8s5fURHvA?{JB%BE2wr?i0!y_j*vuBE> za&_fLxNv`NPUlb&Ul9m?m3lQuCj(uX&5;VS`PtbEi(^7lAOso#NjdPMmk$V_L9D5i3Pr1A zYx~K#BmQ>a7l<15sEJzFrp~B6KJNCb zM*A<1My&Gk3p}&FeX9bM81d?N%vBT8@^SU|PxvMeCz%;6_qmLrAvKpOcV&K{m=UoS zz!d3Om*#5e{~;|ce)F}NM!UbKqPeZ(p|#rzxeZY6r=~22Dh9Hli)L$iGXvd>j*qWy z9vRVda4hc|87UbVUKlCK6NgHwR>c-AF}Kx+t~Qj{eO29&572sOnWIxCJGT36aBr}K zISh(5aC`M;W?CD0o=XZ~UTQfE>L3>8=ZC5Qi3VWgaNpah#mj{3d|}AklZ1y0RH_v5 z7jtDZxdR_G(IiE_Z+-u}<9fYqUfRk^OA~Q))1SyJFL$|jDl0!<5%Ndx!^_-LnJb?( z5mH9_HJlc;zZscaij7MT_bDlF&f@p(L7>X{rcG12_?YbpDF%E3miI`%TT_fN)SsWrR?fnfVARl?;#y zK`wC(_Yt2w zCL`k;?|J0f{+`YBO=u9ECk`j?f9s3)QVwb8${iX41>tCEejaG*Xq9`7EFTY#1i>q0 z&%(hiuIqBB0)5<-XXX6#w16yF=y%nU1d8lC{Htt{r?_XW-#6xuT5Yc>=RyZJ;>_0ccp{ zKZwQrPX*F^+p5`1QXVSLNNV!-YF>SPY^@`tTK~eAHzRUuti8T3Ud+D`s#Jik-vN;7 z5}l{!70M4?+F0-mb9&V?V*89Xo;JgVRA|ZH1GM z8ikhrThmzZ@O5c|x|VvAKX zRIRhqs0&)pWeUHjsK|ZJZgHqc8kbfsd~8L?yG8DGUZ^Eq-bIwbhaNfUP7>=M$pd=( zqL&4Cf{`=}y4%U1ifCoe5nB({leY~Myo(Fq=-vSeb#^gZZ?WRg1hT%f z@{8pqlyZD8;NrN(pD;Zi(yWbM{byi#T_9S7?nxniQb>OoeTxjV5LWx9r_+Q9#|F*08xv6PhTxhRLlJD5ygHuKo8s#Mjmk}*=OxhlMR}vcT z7s?NQ(?$`W6WKjf0-^)L7f5~3RrVGS8ly}kLz{cD3XRZ^JN);SLa$%{p)oor%mJim0*?TdGIT349@G)wF^E3)`t{DeIeH+Il$1Ij z&!O}mXlutnPfmA_{126j2_5L^>1kZY>O2NY%KI>U@a2EIcyCAyW`nq``pom(lQGF> zV~96D;||Q5>r1oq63ekYiG7=!oLq5vzr10h6S^Mlk9KD+>t#IraD2#%cVzwF8VXtK zA%%hpc{XG+qwd>duG3MM!S0^6$85)byE`*OEadU&8_%StebfBL>>9fCX$l*Omyy_tRMRC6rp|sMo%w#s+Mi2$UG8c z`;Aez6?#5C?MKbQeM=={xy#E|P~q2w=JRk4gE1CzMoIDzacF0T#pvO5T-3O&@$sIe zr6uNJB}@Fe3G}$zH(cVTgN1dG8lgk1dZ;%O!uU}=N zWM~dI&_b7DY3b-BJa^ml?VE_6e6iqKfO!f2U(qUGiZX2b3Ut_k*=& z?}0HG3z3cERZS5O0rj*z-gQ2+A$QwmU+T}82K*h9-V8-#sDR>V^+m0@Rf)FHZi{?) zbaWQ9agTWHFU`-*-Cc%}9M+vZv{;T-kp>jlXYU_e0EAqY~EAYePe7Q5couhzMEow;`^Qa`snhI>KY zb1#hGwpMDza=G-{+FEETOaX}?^DQyf)tT_2Su*Ca&sHM@9aM$nuCtT?RqN4$?&UBR zz>bVBMNpUNFvAN$%NkQBGO+pRqZ8A}{oR4?BY-gSpF$ywEK@xRfjME*@%EXU?IIx|KmjhpGk>K|yy< zGii?z4ytzC8LWlV_NS<1x5#CIR4_;R^_dQ#>B&f#QV=J15mio?c}radt@lIK?)&Pk zzZ@$z_ZIRXPiY6^38xm=8TWy%dfP<2O&^Mbd(eEZ_0hl^>BUFv3R(Lg?$HdGBg!l) z;#3GMUn(BPBO%E~MuWJ=o)u_mYlqxzD}eGYGVN17pOsB5+0xSDx-;>j$e`|Y5HY8e zcJYDd)-peT)?O#c4tK!{dz9oI$uAh1-#I=plqPRzRrW45Ucyt;k`;?YI>um~ikFOR4)DfO`t6*}6Vk>_5r}2M6CsP`_+6{CW3lf)IsS5ix4D z{vyjbB$)TDte63AKRGUG{cxFyD}~vGrk(S+SG%0wNZk48yvB6U>?zaO;jtyIV^f!+ z@#&}Vk7w&;2P6TrgmnsdS5LfkJ>+8D=oQ-O{jn%4Eqy(-g&ehyBY=N>`&`1ym$S2P zu>gv~>6JU74Pnd@0Q~bDL=O<=1J;$%a*e&2%9m%~FFNvF3pgt!E#3GS-b|a{C9rUq zf0_DCIkQi)TzqJ1Wz{4}8y8;uAwT~bDp7&1v$xkbO**oEW&6?I#@zmo4x0tyAhBm# zgHI6i_~g227W=f7UgMMDIUxC$P$s6P_x1GjhK^o~d5m7WN|qxfmA^VcJp77Hf zbM*7raW!s;Q1ulTm-ID34l3Sz*bh$J<<+ZXMxQiJTUw5oSUDz@l}T4xnO@D+Wv(f; zGERpMt|&Stjz{yo{IQ-#_IL!*iW(+Oz88!Mv9oOXajB?yzr)~(53W4_Rg{9ZHY3JM z|7#)5lwmEM{rxn|Z5N1xax*WoU3AaIXQuk;P6Z8?pLsQOuTrd-ZCNPyqEA zKouP0ukT-KTe}lM(B}Q1X?JeAozJE6a*&A(fW1FV^jx(naT8tO=H`CXm!%4`Ki9>c zQNa8N9Se)NyuAF-hRI_iBLkQlGOauE@k^qkI`Njw_HkIi)ElkRplnxgk&KL-`kExl zOD|9OVG>beBf;0$yBE}TY#Feyz8bDdW~&CTM_swvHBo3Wc!z&~v0!$2xv6S<^p$yT znQfAY#C%`%V=_RO6{@x;mTLntw^u)rHwbLQ75x2G4}89yVMqWCqA?>fx;@Z{&`qfkh=Wrd*` z#gUK}qk2#=)OHp73(mC z@E^2jV)5LS)^X@l{qpte=RkZ$o6SD;N6SCTOw7%t`Nk&ti-woJm)hQ3u2>QL;XD~c z$H>?K!%>M{CMXo6dhTZ!Q}cmAP29HrvAp>6qKzDZ56OOS_&MQ^htMl1;!Sf!lUy$=e`#j^qR2S>eD2MsU6K}y!0dJO; zmMKN#9V;*$E7WxcOnMVbHO}*-J(tUzd;VNTA}#a}x)5KE;kIr9duHu^`2HXFqgdM$ zrH8AiFP+EP@X-HiV1sOTOc-uJ?XMO)nQu+ z6s2QFC6|6IZw}};Lz~e>s1i{M2~mKTG{FEZ->aNPvYxthVVZR4#r{9uO`h_ z%i$#q8OXK>Jb?>T$&cPOGcGK2t>Md)!6lca0uD4*Iq6qVexgNmhj64?;c*DGp0? zw9fZ}=3oUnER+JB(U&&%!24*sZ<$xn(o*>btQpO_GO%qLPgn`T_Cswejt`6UNWWoZ z-<;Ec+q`q<4t(1p*29(l9h1vdyXgaBc_DW)Kx>}S7h)V#5H=u;qI_$+VPNZ{X%9{1 z(cS{e3wR+3%uMr`Y)48^-*_u=N}?={9jtN=gHJ##Clzi(gZdoO9Jf+YyyvW!q2Z3XD|^x{}!ybS&-zV)*$POHeml zuB8Fc2#0~?)r}tckl{lL$@?k)+=o(D7S`IRo72x=KE1lBNTGnoZPVjh!^dHs(%p)a zuuqL~PNM;3b~8U=bp3gwAs~)86M=}a@${SF*Hdm$T_&GlQrW+m!jlv+GpN^0c z{PsjdRJ72uy}ezd$P6DDYkfGNU2H*w%tDurEVGTN>*|uVwzY+Pxzg=TI{fyT-kE~EKPz>Z{lrqP%oJ(eGP*;Lx<}RGRhM|pTA5+WbS!McHG-#BpC(Kg zt-O^>>mzkbTujXWdvazMU7~^nWyDsFxTrl7JE4m6*5JY?+ex(ZxHq?=?nq!Wh5q?4 zNp@tTK|yiD?%-d?9(}ehtD>qJ&^89eUkC|KoqKD}q!6eek4ve}Q=s#Ocd$>Q0MXM3 zR_x9sTz=7TDy)U$7uUWy78#>|@(J{LIs4|f^K&1qc%>fTJTIHWP`=)!Wo2S`_!sK_ zF;rT)ul{;@LmdLZl!9cK-rZv*JcaUYu=QW(n3Wt!#6Ps_MWRgEmOgMlJ;E9wTk#o)LGXmEG$24;-J%J zMWpZrJXFd&E0zL3!qd8aMpM*&2Y!9LiKL^B9vwdZPFwGD?A@BC9(ny2%5wBXD-;Z~*o?Z&)XmuoQ@y>Hbfx+_KlC`3{%&P#+~*A^{2La}TnqU8u)qc5Ts+{1 ziHS|^%5{vX)+wc5GcgJ(M&5m9(Ak&t{Xj*<2>fsN&EZp4*qh6F+^^%~QwjMYL%u5V zpw0jf0?V57H4jf{PuhO*R$}7@anMaX7%cr^_3+S!$6tcl-zXnbFyW&IY$Nrxl@a~3 zpEUGe()Uq?4+%!e1P+s(_qp%)8vBCbr`h+yiV)Pu_1ri69uC-6jLgo>-B(oX(ztB* z#^}xkI5(qn%PH~SU?)<1++bV%Vx6sMuyECx*j40#)R!qGLTm;JYGE5XMrq6(wYx^E z5)AmKr83nrRBncg-8>rvuL8aUpQ+wD51HS>$9XL_c^<=WAa!+5%2U?0s(!D2fwha| zYv2}n1!jxUW#J^kqe7>Solpg9oC@5`iy->@Z74W1~N$bf>RB26AWBiPI zSC>dIv+0VDjiI_ydCj#7-m|!U(`3y1sHo;wFoo#q-`y^mL<=42>o^XEIj`2W*(?=3 z3EqC#Wt;I|%w=MI7h~iIXdWdY_D_iInJHp$Jfp$C8{V$ zoM+gqT?x5CF8^{ORYh8fp*9?gX7e(4>gc*3tEj6p)s-v4l55VVy=%V+DfZ7NV$bb-&$sQ4EeamM}t#h?ASeX_CMjQfkq%@3hL@Fe*b=2 zx!JE>3YmS^;9$V+`phJE&F&?bw*F6E^4URoyU$aQJY*8irKyD@EW7~SpkCjsQR5*X zL!&(8s;Q}Iy8nZsWH<;pP+34M@KH?oPZy2^oU6ON;TvQ@FcRD zokkYqhQU%k=v5KJ$tt%|Hwa!KzvK)Dlt4$ZZ9C_{_*-%EIuL2M_TL--j|_@<5I23` zV0V4O-VB&8H@I@c3~s#-x%`y?(aQ%%tW;MgHhEQ6O*p*o1&N(XQ^N7Ne@hO1TJ%ih z<(l9t)l#x;Q{4|&xUU7=Bn^g5AGNC-eM9(OCQf_4N{Z*0nm_){jz^fQ{O|pSm(6~| z&+E=VzyC1d&?i)+Yc9OgEJ7h0pOvt;6TUX_Rfwod^j90^w&pOy_bky;UoutFQf48CIBBh%sOV`*U|&9B^@&G3 zm7}boEvbYW#DqFhe&nZ5J@oQC9#;ZbyL2TLGxD_eY=)M)lF||*L&O!<(6+QHN{kB} z#E-SSG7@XCGdWVY6RFPz$k0%lgk#;3Oe5-?^WAjdrIevwRMr?XP`G*X<{5?vn*<`F z(8=`7shpD0`o`<}vBisU9!@QZb)|Q1E;EuYL7QKly1u*L@87?#`b9!(Gg~E`)$=|7 zF(PT(z@aTalU|V5!-+Vt#iJ%$7f^5@hhMvK17stRF@3a|5T4z1W$Rprh%(;BQu7(; znJw~5aH>z;*3$4AoL+Giw8%O@8k|>+r%~SvO>qSeRz(ixyGkibFvHVVh zURb-gxxfae$yf~LpL=zkrRi~`E=G>pDwigc2KA*C>t}k*H?lsiGijqC!jzQv@XnvFlgQ)t)sQ)Vj(pzGHSLs&I6G+@Iu4SPI38$W7kmPxOH&xYR7q!xFcy-d}hk@Xs8N09A)rYli3?F~3ZCrAd*Hv22blATf zJ~mLEd1^g#I_>Q>tq?pz9{N75a5E7pfE(Zhx(+`EAa5<3G) zTwoy9GdP>(OMCk{R3&INrR(4L)@Fo`U210DynX8pjUDG_{W?aByhZ$kuj^MrY9}vHfxUt45x%ZnxYV$KPaF?O@iEAbI4HTK zUGlu-+-7~@m0YE*;=A;pF=(sw`i6g{UOOY{dgxtsoF;5cE`Q$p-q@NOe^TK>U7OEO z`#X1c%5HL4T*y%tOVNs5_FTm9A*Kl(lL!mpE~Iu9#M(4{shE zori-J*yMOKO)4)31PfaP5|eTLB}$TE8h$!EG(2KzDW5s#kMZI=DOIHO+XQQ2i2usy zX^=s18;jBTce20#x-ZH>4lkPARm$^55Q4w1pe&G^`Sn&BK0qz#twansF6)y=BxzKt8h5J-*YfV%{7$R!TIA7*S0(ZvpQ^6)q z>+f1nHB?q&c%RxsPZ=hOld5Wp|!?N&6$}$5-T(m6f$>jputa-}5@mzYH;la}LNLeMw78 z`w4t9zwi<0rkJSzCz1HosoW&&lHC6}U3_`QT3bu&O=M(bu~14E&rdsvxEj%?7MNF* zZ!1Ja4fzzyhtQs{5u)-(9~^xo6qfQs^T%H~II>ycy;`c{;arvT(=jtWJ89NlYIf6% zjXJ_3j$Dd(o{KV-V~gU_>i*3$r&a0;I|hVAZ~0~sljyFxYBxIY$B!o}L;z$Be(-Bd z_8I(u-=Gu~C2Ye0B)CA6_FGK5)|aVnHVUDxwTwazOzY}0?2;e9uQ69`T=<~PO`)!L z_fh5LSF@#mYYbhA)PK_RFoI`UIYmju{r<(pR-Y$9R_)5TZ~N(reKcqG=~o1C-aid5 zg3L!p_r-|u{M8`M8#jF4RgQlAp7?9i|4P7l@0&^V)Hn$&)WxjOgOWs3BlLsBHSp!| z_GN*k5H&{Mu-9Tm-(8JZGl2Fb_AxxXW16Vc0+P&)$TruQdv^doZ-hz050X@X0~TrF z_zAxwFbtKTW+ha4G4VF_lLV(NG@4m5S~)3TpU2i&wsD5E#vhxTKH|=M8RAbajYi$j z%!&)>;?kY*8GBsLbQamQ+6_dLKDj4(+L#7%_J_0Re&8Wt`*+KCj$d zFXxdye6O~t>*$zho!R+o(<95{iHEbB3>r+l8cf13vsfh3z{dOrKj8YP8W-SbYL>Gd zl3XE^mZ7J@B`wk|NQi{e(hVYA@9g8f@4f$fe&^%y=;tWxy`TBcthHv%Je3h$ z*ZwUTE0D#q2)>6F`t;Nk6Hd=2jW^71CUmStMjGgrggT02(vzzJ{qk=xLy9?pjtIl#V0{$n+aM30*wiN^ZrEjJGf{pGy1LY< zsx0vRh%mCmoS`L*;5vK2QOKdKfWTtV(<%2p`7Lz>V!+@$tc9f1P9UQ4)F_n2I!AiL zv(*k2X$5oZp5o}$C%{8nllnu`oHyb%qDw9cMlp;6(aZ%BK^%#qGu=F!Y|FFUgwO@px?YZTuVp8?>hCOoO#k} z@@BJJF5VIH3yoWh()vp7?nqpZBvaiQLbwwq(|jX32`tZgdwTFtFH^q0o3Z3%XLsU( z2}B+&Zf;7zeld|G>AD=DFvvrvp9y{TU})~N>>Mo=6_>Ul+D&6)V^yvnD=RCkM%kyp zcc9zg#z_s{(7zfh=#LNq#?XI2G?nH8G0W|yKS>?Iuyi2o+oL);IWfhv5JbRmL<{ZK zz2}ly>c$WQ(5vhuqY0?c|M(OgTA|zZE7ZKuR)fI_1Q~RI&Stv}{{rkRWJ2uLdkT}8 zosq_uSgEX9XlAQKbSL zOjW|qo~?b8CTD+baLyAFPwiC{@ns34#qKDxa%9|VE9~oXr~7Pm+x%`;g9!H=k7m0S zAFYUf?34im>|`w0i|!d1V_;E;O{JXYj|$n+bouk?_m^9&oL^hP#x^+ryU#Bw>B%Q_ zA))rL*of7+-ql-0eewSXdxzsF@{+@zM054s!u&2s^{Bu082$g$6ll${@foVep%*41 z8%D%1f+Pm9My+OK!G=dBUbT316aw`y&Ld@6 zR+|QNZs62`nuD5{+D=FSsU!7L;c{OGQEm($_l`GCHqps&kv z<^`l_X>C<~OEL;!sHz1LB`5IC5r1pS0Quv`Kc>j9JF^vhoA7mt@n5`PMp0P}ADh|) zsyGNdZQ-c7`PS0X*q%6}aG($+&gN7-VI|=I9T_2ZtbLEhFaORMWG_TprBndEE-!OA z#_c<_7Q|mli{MiwJLsa_4rzCE{JDVMx`jheu%^H47B;u{hts(s&e8{Ox3f( zasT#tIfXD5TYt|;4K^9OQhXsHlw{>L=P`@#El)L~2Ire5N4Zm6EH)KI~H`ivCL_q(mjrR{42dvH@}Z)T1aW*01pKx<`qV zRr1A(4D~9ChEyy+{gV`@+cUN=!OgpH?YnJSnmA)Z+gUC&7XUtvTFFA=1>OJ@LePNM z#F!cUbOXCyPf~SY3)pmQPxF7?Z8L>d(V7Ph0aca;UB()WX&hxy5{pvff}Q2ozf@-O zXb;hdnwo8?fP#Ex(!=eo;6YLpTC9P-K>_Sr9_+U(rE?y>gjPINnuf}K$l0JHL#BRW z4~&N>z<;O(5aj$(Sf?vUEpG=&NycwYycseoQc(g~zCcr|jFd|_jXydFI=R!9EPa%~$KSyiXF!rk9%_TvYR z3&;J>hn_N~6PCuuY{VpBT8T?CmsX0n$;9+y_vB}VNqZxtII~Y`VeJ8DJIyp;g!M9%A6NE4PY0184&fa zL(E>#|C{!D<}_7QQ0eir_@D)nRVRpHB+UwvJ4XC&8 z1$v02XlXh2JwseIH*Q>Sb34n1e$*(&HKrgbY(Q%R8wi>clynPgy$UH&r#P@RQ}|^p zRy+{qw&(l#e0&G?>ttk}PQn+8jIS)uCLXmE`juN6uUc|&Qg^?bC#MFG`pZ+N_!=>B zy$nj)#U&c7^6DN)qk`6W+3xAaQFZ}~P=6xCM7(!y64QdHEnLWu1dOFF?(Ff3VH3tSHfuWN$NiIfyGvod$V&3p{ZuVCicSKwUr zKlt-!E-UOZvLO8wuP-ShR%AO_WF}13<%22f{}p*+eA=-C?d-M*{N6&J9*Z1l+V9<} zN1RozQuUyRC|xk%uB9xg+5=pB=#hDdp4lniB3o21MEtO9#eRJsCr=}tWL=T--rMio zDGIaPk}j+rrsyuN2i4|+X}+N342=@Yy1Qo{5d}lb@=T4;Q2dpI;>v@p-5P>ySfkKF<;-00rBh|IfdJnRrmHZ)kI?h zvWR<4PVsFdq@LbkhI^WkYT}QBWa)X+3zWM9kkRF^JD=~*8C_Ws+!-C^L_^5|q4#|e zdq*!z(j5389DnzALXD#t03AealK#!HR(2O zXc{6%2>bkUd6Y!Mm4p}g`{Y~7om`CwGP`ve*xz@?g^UbyVL$P)7xP^T;TeqvZQG6K z97cxlX1hZ%#I>~+Vc6JRy?sGlMcCEV4fJy;N6CUb6i`T#MITQzL3$Dr^88DMIgr9k zzGbVw!kzTx3$hqgsCeM<2LHS2xvTv zQ2XZ`j*Tl{%(i4&!_F@SOl#Gnoi*OvSe>I<1SBFMMf?{yg?B@#oc9qa1@=yvbc`;zIg2}Ir&6$l4 zGf0Uy0es*{W;6U$=Tx~!NrsT4k8c{wzpQn2y@?ma6gsuj5}L1toG|=;&DQ!A_KOtI z5qfi%=2V5*L)v*NqO-3yp3U72Ymb6&^ApM1cz1(YU_3mP5?Pt~Ag&L9j-?a@d4q>2 zTa5>njZaZ=C19xQc$d-8bTFML^xM!h$$Bwl-qcM9s%|0D_oLa`h%<1WK#kv=&LDpM zI)wF3?e=~Hvdlx5I?8qR@9N%7+?OYV@`xib@-vLJZ?=_!_NrSAbwRpb;E3w&&X>0c zL5jT@*Lysp5SBDa6%54)z!-nZqjL^>>kWB@Fen>#f|TNp7h3B4cLt#=boWdprDIp? zdA{4k8D*(YU0xn$?^B~Q2e}Yp$n%jIN|0t*Z}-g~1usk>JdOf0$Jdt!#PHQbE5dhD zWKnVd#q(XBDq-uEmQ)vD3l^8T=kkfeRt#@E-r;#Tk$bY?maF~=;}isCn$fCf7`%Dp zZ#A}*3$3%_+4xGfYnAI%Rjhd<+s_s8sJxMpLBQ{A7<{H$KocQ**OsO*F5w>?M-lT1 z+u%)#H3(9-3M$3KAqielvsWE%#j1ao1RM{UYT}dYofecepqhobSKaS8mdN6(ZeAlTIs)_OB*?cKe{+QFvCt{7;(5 zs7me^PTS$AQiN3Rvw~F4>}=PYr#7&$e;Uclcg1ZzkRDP>AThmz+$7Y6jnaNhe1YF%o&%Pe@og{9V9o`7ho@d_Z) zFDJ_QA+dMS`yK$56Dyanb$)1SDkM#0vclP1#BGb9G$qAQk=ZMAm{t8@e3a$LZ=PrO zsq>Y4+p8>3xKqOHk#Dgf&f%?upSZBFi{MHs80F;ApAV!4pL>tgQERHH;jXV!PJF7q zX5{-g7A|oJn%)jjEdc#QrR}Xb23_IW2unFtSd1=ke_LDWN-eJjijoo^71)_zS5@oY zz7re1L4n1-xMFVFb|cG@9Ug(eKxHDLYa)KR4Kk z?Z~ZusFzh<T6n+G6%rCMV!qbIlDDHG`DXp4wUI+B|(=ZSf$p{*t z8t=M?$k>j3=;S6-?EwBxPx62kj^frmX4B>V2*HEz1R$rHOf@@09ojuv@!IVqbv^#w zCk!wK`oRd(+JJZirFoimOrhp}*8y3CeBTB(0wjacXmxcrGbiVc=;+M0JZyQKuw(t( z&j3SkNC*iL$@A>;A&yHQk=?Tg5FFUpINwKIvukRQy$&ZHYMKR&uvI-+J77;t!pwNP zv?Og@^m!^0Lc|wWIMQ}@Ca}27mwY6DX`z$UK3J!iaz}<<_}#zlVP=F;OhYr<)OU}y z^sQwCDUrFocMIz#?hcqsDcnU#3GWIUB$YQWz%?}Vb#c83u*`pCEv)bLyQ7>2k%wG@(x5G zoPPV3`VjlLdQuElC(1#un~#qlvR-!SKn$31fHEa8FJ)%8MSl4r4K_&Q(?947cQXYk zam?U;6h%e?v!62?(I#hZq&4>LSxqyTZ#j@h3Q`;oM)TC!aX0y(g3Fq zEaCSpbJEIM?0Cz*xx1uRRYtC}Cnf%R02#H93u@cEAPFaXcOo0=SP>Cg$KIFQt`ikG z6vAng=INH5Z_V{gc-e6*nsa!}y0E})3EGA6c&VGs^e58Enyt>2j2)>*kC3331cLuR zFvWRUwm+E%pE+TKEolyBZ&g;JyF^5PZsuu>6S6!gSoE%nPucy=3qI?pF^*C+r@Ju#<%T01^PIk@HEd zSt1ZJBN?JSWYQhO@8XX6RU8NzAeQ&3+Nwaa)g>^?3*cDl*)v36IuQ0mEG#BG zAd@XHQ@#5GxnY_iG*3e%vZSQV8?sGA@UDCHj}LN6N+ci$(;aEM$+3P9l=jdVP; z+WOY*z+@-tE3pj?+g6r?(cdQXbJ9S_nEb3lPZk%WVPbk5cmL#*Fu~T((U_Z<>1~N@ zC-9c+$w$p8@gx2fQ^GUAKQnXMgW#jyoW5-Ub5h{>%Pj0=x-4>qsgnd|^sEA2tinLsq$HS1Bw{a7d%}Sl`Bp3_8~U!`9t<)!Zq3|FA_~1`Hwm_?9i4 z$SoDs0$iN1q0L37lX-_@-~hv;Ov<=ex7c6bg}8lcz7hXA48`E{=V3SRga6j+&)$ z1YH9f)ArCnuu#5!f(bEV!jISq0v{$B9_pvM{bYo$*r7Fg*bCk$F5EzSAdA#Z(|L&cV8i0T zM>YvcockWZuEHWdip(Qn@33s*c;0@~Hw(oOSXw0OD#`O-RV0q?@&n6);Mar!iL6YPq{n?$VN==j0WJ$br2N zI|na~I-w>lUMq+WmdKUvTUKGSG>DHQn;tV?En{fXG(Hx<0K|s)a(V)=oX;0-d^3Jm zUSPMTg4jg>22w+<5X?Itge`)GgIZa^lCAl{=;~UP9@CpUS86c-VQEILb#b!ds{7f4 z0et0PnKoTL$iZx!eX+ufAYCw#vH$SG>vBKC%dwYfWA9+RSrRy0k1OmHLW&hTq!vG2 zU14P>_jwO5KS1B^1%641p>D06I9L55YR*h|6IA25qvk6Dzta(kEOkZrA`&es0%=jd zoi?NzVv&hsSpX+f)Ywf&*-jq9-E-@6PA7Cp4|rUyd?5$Prn>3~^*`ULqcoF|DIkkG zJ>M5Y3o!-XAbRpWb781rF<-s}nr-_8TKH*57}E#mra~-5j7LYO?Rti|sa5OIT{`sU zD*b@|2f|#hVTnRcF5LON(C?}N9XJ*km-F(3fPUh&_pqevB2~YWD%{)sDxjiUKIaEB zH?KW5D?$`p8JLF!jsK5u0)qzMB#slwZy0Kt$*8D=2^tsqAjk$HPL1>CdHK$(|(JPimGj1*FICp zLnS|7v#d{Rq8G$LsLfaErI!Kim)8oW41&nK?~;!qIy{2{d(|G4(369x!o7tkN_3Pl z*N|SytLRM>Uj1o3{e0vRXu1Il>-ro=FL@KS@L+{-QzztY>B2;sSF}X5!3HodZ+*Tj zumi@Oxi|XH!DBWEc6zwVsK%zS3;r|*P7n2#SL8TFTQAF%05mhn1g0Dg-`5=lTUCE*lCCN)qOS`Mw2LCi%!DMCn>5DBK;F*=~$uyWP>3C(3T>3SLQ z{(U+1VKXi;1q4Thbr!MiGllX{VMwBI5HnZ(Z|_mTf3;R!y0^X1hZTj=e7}#2zzsZj zlj$2kIww|%u4e9~RKtuGYF?hS?iZUeS^}k(wLge@e!gL(;!sbPNNx}7S)#1Vrv0r; zg^+Q@Tz+`a;0zB3|KBOR>>L$d^6r^N)$e0JLn-mFb5S!ipdE8qfNblZDFdGf3`)e7 zmLh%n6!@!Zh?)>INWAIkHt$D|)D6VrQ(C^ z;yr5@Uj_mxC*eqrfQ#vn5Qc}Hoe)y-PMAv)25%LKPFcD@{!WCN*a00hZtahkQ?968 z+li1M%_7$=zqzJrN9juyo&3Pv!Jfk!2rj zrnj4|fL~jk2Ymu@#U~=bS5sQQ?80H-Aq?Be3PLOyLHKF9s6mvP@Mw*B2Q2VFX=}?R z3u&U=hlL2}_wzQ(sV8Ho5FW{$z00#%v$I2zJy*BOlMx>C0d&x1X~q`lgvlqis4J*G zm2v)L_Kl6}WlZL#Bm8TBfLw%+B@Yd}u7R|zUC(yV2@#dBmxXj8QS-jTdLa`8iq~hg zt>o%w5BLxRLw!kCEMR#)-xH_I&bj%of})Up$%$7OFa)|Jf}${+R+9taPvNKilub|i z?3s|l;+=0a_TaL&cPK0?v8>BahPKG7-alECXI4?SCT0??T*21}Ua{B_$Ob;5>9jWd zJ8@;h0j(^tEMmcRWp34%wyK5WC7sz}%3Vj#)(Imzh9?AFdg}A?9-ND=(trk09+`0l za6OjI`=bPCIsmCn_aO;jA_^x=Fu?2v@FC;hiv|_f*1@VTo+&vnY+;OdzwFWc`F_E| zuPC*)`W4ksX-A9e471)N!C>bm)UVy{gg7zjjKqAX@rrNx0wM3mD_n-c+&J!k%lr8k z@UX%hSlDh3jY>CcU=q&v0gIyZkOh&)df`T>;SP*}v^8IjhQq+{ivM-;|RzqD@fVdNtzL?Z+AkMuhJ*Mc;wFAxuCQ;^&_-I z|0w&@r<+DT+OcC}c0ErK+&QaO#fpAFv=WP?Z{7>nq5k}zxzHe7w_okJ?sQ}?e<6-_ zuajjyJE|xyrB9t_*a33M`Uche;>sLQ$^McWxEGNSJ~;v<6b#IJJSKs+z!?j_cWWR$ zIKYw3aRhjW!0oDH)i(;#h4BIM^zau3S&ZbD=r)}bf6zPdbJ+j75_2?~(-Xj%H5Q#pd!Eb*$Q@t@Wvz)m@UosS<2S9G$8=;KDo zp+?E+zOix?rq<&R$H~`9(PVd6bwfq17Rt*vq`0Ajw%&f06O@271kNt_3L?UOqttql+*Tm>qVoC6}_nPYz@V z$Wqv*N6b?YB|KKrc0#eFVI$a5oG(jpvGd$~*la7zMMnYmaG3QWUFaah#IeYLkK|}- zpT*|qAHK2DMgs7ApC%t2%y@}7v||r0B&cme`)VNh5N2aZKA&y7AMdtj;5MYU&$kP$ zoD;y<$9A%e0UHeFz&tNCBqlK!J7GH>Eh`m#S|$Ljt@(V($m8-vt-{M4mHjs6p3xN_ z=KgY;x0X*v?W7n;o@En^)n*E}VFF*b1TjLTgmpj7LAuq%G9Nq4?4KCgs;ymsI0A1g zv~M0b%!jKAG(iftI5#!w$NObKkYyB*s8X7INS1*^||(1%KGQXOtV;kR~N zdVR0LWA6tHkWzg+6C(nLFI+*uY%~4SAKE`K`6>q9=0Bdq;3GzZU8Y3s8eykCT+mxy zh_&8@TC#wnT4$M14*B?Uu#}7}0GH`EzweyyFqRF@1%{}qxoB^Ms#!!jNJ?rzOI}&1Zw7kPS zG5;_0IKA4Ob~n&mxkTNKRep?)r`U!eg2o<*X1B4ep-nsCvWADy(Gua4h3d zW7^N6lFI7s;jvMj&ReoK9r5JJuHDsDN`BicAssWfDu;gK&zW!I@B5jHqJ!5|2U^85 zywT`_b%S(@6)X!eOe?TVD_%aP^jVN+OT3TmpMsgq85P4Bm7SA)-m>I5;ektyRe~)9 z|Frb=9mE9W>+74cF3KuyXgw0(wpGChK>@4OvuDfQ7$M}u#G`S&{ny^-ORuB6W3cOIhrf|LRdg4??Xd;%4Yg4+&G*~V;^Vh?uNZa+Y&&>aZQU?gDTedmef zjwAkf;3Od6NqOznS!P)Estd~E5?e}0M(GnydD{{a92_?^%mw}$i9I|Dir_lIYu-L< z!X47=B^_BZHJH-Z{N*)c?VC;rXMNnSQ^ruh6e0RcnhfLD);O<=NbWuVAmdg;nZnPM z1LR7_R*n9l=}_k2?n10Hx0Tk>*^H{ECqA{GH&@dSVce~klv*xkro86fF)xyPhTUS1+F21*vq47U-} zii@M=C>*s6Wlgg(j$ViFde6MHeYBYA_~K}M%{3~nAxE8vE*MW54*!4soPM64e{`4jCX^{CV!K0|o6Q@733}S) z$^^3O>RzFX@Y(u&>5T_{5wnFd{b1j0mc)SsO^{z`(3dm( z1oZTJv#FIHdv=r}Zp7vT9Cq5fWuHD>d-!mtTF`)rV9DhCxNP_0=&FTKtz+h>PURMs z{D&t#H{i0@&eh@R3a6!g<4VJlk6X<-qw9{x4$MtgmyBEnahVFSNT8eH5wbA1baobg z?Y6ges>cAl4nJ<)lB@Hs$AdE!rH-wy33yz5`* zVgGu*Y9)GS^}oFUN&}*$Ww3=}!e*Q~i-o$9Tlns)BT0@YHV^zr-&vf#cyL_E271`H zOOE-DE7$%nPubs(x_(WcAl#Fe+82g{6jCc;Tcpj6R zpEY!JqHjOS?deba^@Vu9Br}r|X>Ma90AhPMM*+$65KH!G`x+X~@{rK3JrS|?-0r+G zGg{~K2IIw^LtN>{xw+vmC@#LZ*t0j~tOPiNrDeWO-}Vf$m1h2jkT8WuHk16MzP{-t zGtXUJkqHRi%tZ@OcTUyI=r=abG$zf3kW#n82({jygR-Vi*ad3l3mp;e^UKRq>wBC7 zslDJM)Q6j=!|a>WW=g-RSX$nkD4%Dnc>f zcxx6~&2MkNT($6HWD22UVEaX9vkybrVtrC+S-NVe_ z5TtZJK2Ekb;KHPg5rMzjvh;CoYYWBR-u?LWQ+szea%pLmdOV)>&_*=topH&mAxSO) znv}deZPwexp$4VTV+=#2zw$2XdU$?n8y`m&7vG-So7ml}f6?zGxIO1&FP@)CXlW0h zQ(j)t^A)$g`X}rq!L7zO9FFD^)O%24yFczdNhZb7|Cs@)sFKFNKK|Rc^QZOl5s|+p zJ-X6l6d<$12=Da=N!#7SIgfZe%JCi~#e}I_OlPcgM%_&2S?~%DJvAQ5C!Jebdj5LL zZXz!5SsxBP=N5y9XHCyHexFM+l7-M9f+Q*bGF-~(Hy#!>hfS?e6=_f_m?GrN z6xm^4h(>tl-HFLbI?>dq++1}==65n0*8>iu39MYHd@uN@8r%!!H-8vFk~Z#7egXvb z+Qn(e!}p1CZnUp;e$BP^9q$iPK$wwfYgd=cQcO*y;t>-1O9cfhDx%4Ie{Qi_DH~Ys zh~Q98Ii#BL^ZTGJ-4iTo{2ybY^%?IwbuF!c&!S8pE0=n{YD>~Tq!)M;0YwYRKPZUm zI&vdE^>);*16NyH9UA7ooJZXb@(lqJ*nPz)~l?2c!6 z(^_5Sh4w;xfrc10H;K1oR@iI+2ZDq&3Gv5|T){q1c}@0whk5^)%QqJe{4=(|%8&}TclpjL2iZYb-vZtXUsh9=YMj2O~AbDWNj z2y|SR;&_8nd3pJVW(iuK*K(;#S(MGryh`V;9kknn=2b#N5GV#B4Jh{NFhaC zUVQr%_qD@*{ks4CJ1?&nSIQO!b?i<4$(!Ed6p&HU)43oS^sl@S<-dOYGh|)!95Kel z)?AIz8Mo9gOIAHg@Fn(FM%O<*A8Z(L>|3cM-$|kA4t8N=*S4)J*Bt2%2_aT~4;zX3 ztevZ>#6!ZIA(7iGG+GQ8a|7@T*5xp}4)<7`z{N=>I6 zyMCu7GRCR5nergNt#gj^=#ly7y{?>O(fT`^TP1#5RXz=9_Knq4ge-^PpPzNsX%rW6 zqz6A}Su0#I5d!(X*v9$dG(orVl(p30@y}l?0JvUKHINSs#7tCMOQlqu88jJ$zu4!` zs?mwM)0`SfCzJg_T>in+r$i=wZz?A$7>MDIg4TrZyn-WVoSCGuJd$o@4F<(T{u(7E z7-AM@zimCYy!C@6RxpLt2s z&PlQ^GO&O7toTV^pc%DEJ1e_wYCTu$T|55$XM9gTvgdQk7k&tp&XU)L^ILg*oe)tD z_J2fkstQb+LUEZ}Sh$AMU7|wrmf$ycaoM<3UePmYmD{LlPxJ+@ANU6I(-GVlrH9o^=Y?C=Yk>{EOyrvsBUoh}~M{R8thkW+z zXL?}ZXOYe8u8lL{QwBE)eZTauwv85dx*N1mz=K9Dc71;RbgrhUDl9P2iBimSh4y>7 z$uPg481GwUK@V=KzBg3C8ilQZC->HibLO^Z_~#qTnlF(vd{1vL57NYRMs@4@oB_0k zh5)kLwt;cAtzMwcqq55l7=&G0lk@o9s|}_OOEQV3+R^2aL?8pTGp9G3FW<$CKcNVL zf2WzHYTiI9J6LmC+db}q(q4_j9<(GHGceXn)u-=1qLaFu~!8j1P9;vD#h764Wy zCTg`#PEOerkKB5wo+&F6L`_X?7$1ih*wLYm05alFc3TY0_;^=g)lBi+uV3L}ULj#a6lC&P@QzKynWd)!GoMY^)ugMeNyhDz}2sxS1X6?@^_$17^PYFyD zs*!n&Aq@>kf*cO@)Vl}IcZH7UcK7XWFUwhl-83w3 zQS$u|_mFG6WxqQ&Pr~^Y-2qYepd@ee`Q3LvEt!LNxc=eMaU`(=Um> zWFq`ArG01>@$go0s6W5VQ7EHh$U%dL5Yp+5q&~R)00*ElD_db8 zRh&P5eCqKlLL1m{;L(iNx3LkrT!zg5#5X6^3$5OU46EpaKMO%N5h&arsccd&BUsuu zg_GX)4v;4h65MUWD!e~v!McH&^Vw4%l#oFHe)KmM6!h8J@-#JZO#BcN-62p@^x}T2 z44A`?#0f5Mk$(I(zxQH`P7Y3R*Moz3u4Cz4%8&DN(boB7il6<_HrxExskFJ(fae%r z-Bo0~ugEAcnf`mfFIloODvD5A+8d92y?rVy^pqZQ3h?ids+6h1Yj9a38aB3PU4saN z@XriOzsSg6h+kY+*LnW
    X&aEIyRFl^~-%e3Ixxe7IG_{QyEd;=P%Y%V+0L(do1 zTu?X+>WIT|3|j%ych)&N+TI=bmUmX+btD%qOQU;mG-<(0$FXVqL3fWb{YCzum{@I5 z5lIlLU+CU~7f7UC`nIa>uU<2?e}0jYss0`|c@n*(yfu=)P%SGjk6&XW6b0#^rMH(F zE+RJBp2|YQ`t$MNyNx`=$>{+>xGVwSBZpHLes*@Nx%Ktn?P=t=M50gttAExAzx{fC zH)l8)laz6ye*ZcEj37AObWe8b-d-76q8TFwV!GS|kY{|aE--MYzI1d(od6f@7|MD` z#!X9LP>Oo@ZZ2NLZ-)~nIu~JN4^a}rI0W$>ObV z96Uk(pHfQ|6|hMFt|O;f>c)2A@L(?1jIlh}Pf)kOk&u%+as5QX0Ldgo8u{&qqP-_K zL!_rY{Pq_jBi}tA+y_7k8VwwD%2dNW8hvR(Tn$VTI;sfZKW~+%7d^CR4;_`1v@6RK zDl3si#SHB+nPyITlKR%QFgMZaQ}UzLmT4=6zNaP?NV-;^q;4-RB1uRb+6Fui@DIwQ z-BBf-Xw*bn|3b{RzTxWN>}+S_fA=pEz16$nayIc;H&FfT$VeX4C16mY*c)SXLF!2A znj`*v)|YLMj4lHFk?wrnA0Q+XsjkyZpBbfaeDX$HLg6 z`sd$Y6pQWshBDQ7Or)>F?C!9a?=~n)?UVL9Em<=5RhGwC+5G=W8^ z+cg~N>Ep+IHTDv*G`@m2A>raPn8u}w-UvdG`*wil5A`lw_JyL#Ye~jeFinV)&>K8w ztXfHOD=Y3uqS=U;nD2P4z4=)_0}0W5Vt zlI-x%jZEy52(z-HBw*MM(_8!G4wv3s-`71s;)9?FL|5wULiyn-a9KcVbdC=><9MU2 zcCv~tK2FvDKcP^)vfNyZ`g)AT#bo>X`el73C1Pb}=Zyr(7Ae^qxcK-6!C`0g^nqc( zTRu1HAC^wlJpKBdMLc74b0L$~zV4Io4~HGJ7Y^0WCL+4cCLIRREGcl!c6-~5x#?L7 zULdjGt0Z%E)yvlozOKHtF-8mb*07{|(33#j1eBOX_4^E=^X(6=RCu4*1IL98OoC6m z9W7GAogk`(jd|xypBV0J9FNxJaY+xPUZ!wASr+4QI z3z~r1wge!TRrl@m#84ILR#}kJ)7K#g2O9dGWnBjFFP`&;&=D=s}A6n@$77r_E4V~h^2B+#A?!U=xY8WVC2jhrvT^{ z(I)LYnV`!7#we`uvLtTIyvH1*!NJE#>ri~5luZ5ts)EQL{srNo-Ty!i7!)#EcL1Tq=olgL)z>-o)*ra8) z^=(RBT|K5ZVH^pm#x`YgIV&}u;R+X!vhl$>o9)L7xQZcQ(?-Z`%k!iu-48@LFm&F0 zbH|SamW7UgscfhOeEG!Fk`M#458|d0x}e8yw`%iB4dPArm+v8RX=>^wkEI3yEJwr# zlsf5YMHTbJzN6Z@6EA`h9>lrLAC!r&wcCe>sfULzm81Gw0^;4hopB>%BWx!Jz`$Dh zzIeoRs!kAgN%iL2 zIx)!0x+lkd&ysn>?RAI(jkoLaF)u4XN~$2nki-8M+P5qPT~tWOX>pM?E{#(`HHPxX zkL8;qP>BscxkwpjBElCB<0Sg4nt`nRZ;%5fJx{S971vKu#<6m0OL0BQg6G$%{u5+n z$UC7ZV*8X3Z@?A;yUp4M2fY{ebcx*PbJO4s=eyk>@;ZB+{A%U-Ns4bnW1!9eclRVc z`beN%ZP_eIr37s;%M@MwtxUfY5y_ibzGDcRw|M(OB;Ft6`m~jg*%)LnVDaheqQjVL z??L}hP2HYCk^b3LBE{N_H)Oy;F5keO&KcpUgdf`}}ZnBRq<*s+Vlmd!GdX&owk9KJVCi z@3vBJ&ZLDVCLaAPd0mqw6$}1Oq_HxI2=nx{ph1a@@AIW%U%nJo_?*2s-)(2>dCLBh z3_oabk&cX)^H~DTJ4YSJn$fn9&C`O1l`d(<0 zDwGiY=MOy@7PG9v8R7}Yq9BQeTp=hp@x#W5gacOlXraf@_$BG}^tMO-haCL7Tmz69 z+@U>5|CE)z$bZ-(5FRSX2`QX!NHAU?XqK~@8GSW3T% zoU`QKSZG1aPiX~3{RaJAHi1V0@7`Tec@v<0rs)a!QHzqvWzeJW>=`yC8X#;3B0>KkL&Y)Z0!$T`RD0fp90>w^DAtL9eC&1%oaxi0 zTbGS8VWo2i<9;Zy-EHsq?hTcs7&XMq5*YQ z%ff*gcgJ8(G#t@mp)hnsN5L4$#c;vk)`|--n3aJg*l^APm!!BZt|SF?t|Qcj0?1E{ML|0pR=aPlHR9*(pk`;CkCDhz~G^t70yH5Ktj-dYj3h}1fW0YBg_~K zY;Gp4Ga$KsT@+e=CL`|KOp8+aAn=gfuktofSNH99D|i!3RBxbDpi88tsGmJIG7C2Y zDnPgG+elP0ZK9qbDk`dotlSA5KR;Td=UaOop35qv=`P6OVqRSIchn*PK8YUc4yqCd zUq=G4Y6$(s1hvEV)>fRW^A$6A$3_h`#ar-%jvHN}FLZU9Eqz&;TyodvdPK)&$);2C z?j<@Q!B3l1ct%7okME}nRg%%si61qlO*f3}ez~n*VLw|8GFr_qtgBj3vidWcZ#^ni ztgsj+V`Ra#9N*iKgBLqiA`)?Nb|>JgTkD@SWGEypZbsi{->x0VLtTk`$BrnZ&MQtJ z@VCJW;nQj=;2DeapOu+X_eb_nXSf zIv^Szz~m$VqwXB10%(I?Nc=1ME|`sjwh?k*kPw;BM-fDX`d+k6E>Si@%)=% zluz!s7W;c>YyVLj#sy-FfY$)mFfi@8(gz^dl&V7iO&Xz>MSiRje@m)XyArsjkF3VT z^tD|Lj(BJdtAG6LxDIkSA*gwvODdaTWelQZ42EXVq>#kpf0G9a9bKZj{JbEgHihOv z9`XB<(Yu3=Zf-~!gU|I+IZ9Now|fDX@rx@ayT1oV-O z@dxCjX%8IMG_FAgHLl6;cBo+U(gHrJ3{f7@yN839K;96{pqkCBL zbF6aE7a8zX^W~{tL-UUyD97NYy-}<~1y%f;+b8%X{F&_4}&zsxf&FY zk>}%B@;T_>#=A*LwFOME&-N|~9TnMspia5>>POnvfVDe0!`8`{4i4oq@PXgB?!3yz z9*LV37q)6~#cx#pql&ZZ8xBK~KJ_ehdY!(evIBQP#e6U3_BNIKJS|sDjXzN9P* z>qiT7b3ayusEm>YYRLT4)g2V=2ABeJuCMR14*vtz`0j=iAt<;Qba+mr?An~p+gz-y z=7DN}B9^CCH#hy~=E6jdpAHXYDm>38LNJ|gdDjg-X@#Gk-$jyi;6`Vlw(8(D5UO=tjqS|sm?o?5H`pY~VIZ!5^4hRq(9P)7;=>G|~7j|)N9`-8y? zGK9wetJ93z?{e3TLcic%rdmcUm?DurpDdf%ia)8f+cAL_JuGaIEUsZ7>EpKgj@X9h z0l9kUer1CIU_xN!H@CM9!Ftq>Gdq_xa;w~ZNA8267bPGETF6Dt%UE5SPi|GO5eYl6i6&ljm=7YP)9 z_lE}mMBOl`(AJO0L0h2?2LayBN4NQsQKw8C1GtR$`Q8W_Uy)bCpiG$nSa#fuyK(UU z3tHD2cFzKK2HMM#DsgoUDE*}OX9O|_E^4;-i>G8}tohOvNxvqwHG*&_pxf-RiQ7@> zhY#eKq;{4zwu5n8r0l;K*C^E?Fn@0T?jLW z2}`{}^pt^IWsBwr(#@OcXqFNnQYF68$*R(V>CXEALg7!s(s^Hwgu+a93**NaruO!z z@cG}k;lcB@D&_|1e|rH`FE5|W?SCy%g-#tL`hkHe-N?8%*>jp3y-QZi$BEE@3&A{r zbQKHpgh;N?8PS8eR)hCsBxf(uqp5DfRd*3IgD?g)rED zY^j3=NxidQ$B)YT*TOQ(dCbVx{plyoDFB1nixgS4b{h#(;#-5nCr0#e^TGtc{e|L2{V%WIfxW`J|f z@4ok5d#$zi&d%ln?(_EF0?B26D7l2()VF?4#K9S_J7NPZ1zNYn!OoW5QTns0N*4jU z&VTEnU!E+He=MXJDAdMB@CYiRw;~5r=g!_EhzoR_KSVGK4YcC8vsqlav>X2xutmE5 z24Eq>JWtKPId1D-C*+6lPY2JNxFbxpOBR5knwsytvxu%pHQ+CKc}4{IQdbYj%!Gb_ z4Q?9N1oBlI1O0dSWa}XSj-b|Ro0}s9F>v?z*!qTsN2ZN-r&fPB{ttbi{CS=nIA-Rg z^-;R1XXWQ#lgWCK90m`vp>ZaqO7KZwc;bL5Bn(Q*{F(4LFV~v+$G~H`x~|R>f*k_# zHPe<dR()zry4=YzQ8^J)8%{pBlk6(;3NW|0Ra%0FFbjX7!6^1SkkZOGN+%hogke9uys=%6q>i&ec8&Hl=c}C@QN~i*t78_&~HrVZ&L2I!ZQXC0h|^T+mHf%{se>d zuW$4*6FczrjthaPaJSoAgWjsCs$PntXCOVNb?%60hgJ}x%&d#OQa@!FY$FYZyyb5; zA4WFH?WTaedv3=Q8-iW42$cq<$RCUP=+pEo%CAj6q)z+GURqPDhd<|_y8ZHs-l1)9 zaMpUNkp}okaDmzh_@1L1`nVDq`dth@8aX$ER{%6N0*IS+me4VL!Kkpnfp)=*`3(i^ z-Qo^{m_NtOenA?#0ZvPcTwtRErs)*|m@@?Eumv?XQnj^zRvI#$Ycj#dTo(+9`<*#B zYzA!2$>kX#WWv_UXDBdjCu?Epxx>|W*fQd@p}`N@t3PZ3yjH9gn;}^blQvL+NXzPQ zP}NXV3j$ORtEp%@u{njE#pwMkUxNRwsE_$z z@i0kqu zZfaTGU7MYhL;zc+eMh^nxmN$k&WoX)pKkI=yNb5!~330Mvg7K^Fsw4kgk zDkf!xHbqVxX>tFz#d*J5pa4PW=g(}w`9e@AN@_)KsDQ!)^K<S%ADl2C3|kNm z5XMx@UDGxY7xC28yrraebPZwv7TD}uk`TP!s-H590*T{c(4W*dWU($GW!RR(~N zXlpAt1w8|tZlLc=01T&>6-|1`90}h7EjIOW$xotg@uDvl*HB|bj*R3!7xdyMt*|JT zjip8&FEfczUaRmtx(WFB8Y!nQD(TzbHb{bQTjUnKC)B2UFt(oibf!qh2@}k>ly_8` zEGs@t6hnaztGAdmw8xerIddVM+gHE;;ll!kD_~eULviwG-xhM2O5J!JA7;F3obf*o zy~!Z>>hhQw^eQe;M1T-$nBZ2|&g%e;Hn)5a2rr;~TEJN}Q;$K*!V+~|;e}`2q@x3f z03##M%1tD(n$Gv}z>{Tid2Rw*YGgr;b~KuLeD~gX%?<(LMgtLWa{6L1+47I^#;~uu zT?qU)Ii+*do;~$QWQ8`cEwe2F;%{YeMBhXc@s0qF-aSL)5bB==u4(MjzYqg3T4|5q}k90$hk< zYzIHuA`H*cbhbg6Ot6xo>C~c5IhGTg7Z4Rq&rfEdbE|w?(9ObvTPD^p0Ju|p>hD#P zZkwB~Wc*vtp)}gvuHh}Jo*DgNwXyeINT|$Vj2pQ;CB}13nc|*4x*9VBbk7urD z=d8f1_^TWPuIyLk+3+CT!M`m%ln6E2(94eRaxeCwyIl+mGjkXaF~E09-M$VkxU!1P zKq!Yy%}@ZfhJN`nfV)R7*AvB>ont#qLURB=VA+GA5jTmj z?uFuRhbHr4m;zRvsy_QlAqK2_ARzjj`)ss$g8vd7sHsOrZ~!3HI%N@ogJZf@4FQ56 z#lsHDdcoT~ufw|JsNuuCP2ab0C&2&t7@ACC?j6PUc%|G>2@`wox+>|fKMtQh^Y|pZ z>fFc9Q<yw;#lRST?-cCqoSNijGm_W7Z zNPlB_*&k5b>a_RfgM{hy{}is33JA3*B7$5%a1z988X!nP)|a}vy!n?{>>|&44^P4X z;pPlf1(oO_vv(P3hh7^hG{vEVx1!;AHXg#{_tBwiNVanvZF&xNoj`&C5=TwtG!}K7 z=UMHW3g)#WnX3xVECxF9aN~#$w&wZ=pwJi9Z7+2?7=uy<-8dYej_MRE3Atr2&bYhZ z7M#SJ^A$n?;9C7&y%6DiffulzP6_RXrcKC-CPGU>P@mxAM;_lD-p6!t| zzGq1wM>wwlHiEzn+NPD&Kv2(-IKa_d`MVsC9OwG@gX2=+lZP3ybcl!#tm4UX{NDOh zjVsPOIQrlVMyM<&+ch^%PCQ@@+aF^{cmSYLkr0pVCjBLzUUkFx!gu#zoquz~;JpXg z>{CUbok}A98^9MD*0^Gy;ljc*1_Mk=$OpLV4tn0qZwu8lG-BG?Qk7L!y$;M2B|~zQ zyMJsEk*(tdw0P4HE#ru$`-~YA(=E?h{inKn*PC(Y-m>!%6-u};HMTJIX5u^{1zc6Q z_%7ZAKXC1F2*4*q54Asl3dk%-_U~2DuHnMD0t1}Vt~~8-u45)K!doXjKmecW!v2Z` z+!*jgK+QI2x{fh0hn4~4vg}iaez@DDaE%c}S|;!Zr42j;;8fe@YF>i-fsx2A^b$%b zXm;QR^$*GT{DgDi=g$Zl-=v{mW)#s(!J$ndnuSbeZNaFZhK?2;K_!cjdxd&;{6lou z5RL^1@h}zmX%zX$%;;n5d(bNZ86OKO_ze3AxiGk@?U(-) zM&iCJ=JC>Us!WVCo7g9Gb-xBh5jSfP6{0^_j&CFQwE;@+PkiD}+Efx9L(HArhC(Kl zgNPHQ;qOGs6nB|59=<%{!+E3=_~?F+%3bhb>m&+6GX+;?_Jflz7L#c}Ac9ZN(cQgz zkNW2Ru4>_C9Kzt{ZT-yeb0Z7Z8MS_u%wn$lfeky23Um=d z!j?+$qiu@OU&>tBcF@ECv2v*;z=cx4@j6z>YQ_z)PCtD308xd3f9Wqj$;EMJV87** zr!G>jSYAh@yUFJ0a~LEO4osPUaUN<*gQM5U?h33?rAEginS6>H9-fZ47%=LlcBIAt zL|$3y)B6ZiPQpR?47RgsfhL5=452tIFfW-4eibE9mUbe=THx+AySh|_R${SN35=2; zdBFl?R1hOG1}caVbfAjp1jZ}5Kyb0JFAe>?0csH7HgL0nB>pP3(7)CADTy|Ah&S96o`t-Zm>gTMZgO17 zp<4*N2ITw$UEt5aP6ccZ!Xu@j3!~g|f?6?K zDBu0%f3%(5JuqvZo5My%1`ZX-)3S*Y{#kknYSBdT@|6bfyn~OB$-pF=lBUAGW+|9g zot9WFezd{pU-7)tT9&T(*!^LC-usQ{mzX8RdE+I33i<7YqhZ`W4#Wsp7Q+77+9g|*7>yjlYiop)QGZuV?-A5 z->CSBJa>%+VFHaM$o8gvDG1X-`O%vqa6K;o?kduACqTGO5kllW8+^d)+0P%d!gg~? zC?)zug)o7W3c;3zojD7|_EJMu8&2R0lFAg$Rr?4y=x-kbv~ImbP%n%jgZ*)FBp?~U zj<|M24YodX2leW-|3J$px)}`dps&HC-e-{R5Geg*qwtxdtLvvpvS1h5e}QH$lu*V( zcI<0YS^b@dD7BK&MiZq+{zl}xr?%i$77Be22_a)F6@}!{Bi!AC`oG3_FJ=mnLT&;}dc-3=^DW5YB#%A;9GlM=v^03n$?5MRm}Np6N&ep8Y5b6Hu# zo;RD>_hRVD;v(-;jDZUsEOBYKHj>XQrb{&Sbz`Hl)_KJOdw8Pa0W&Lajd)0iQ!)~) zHYW=V5?T%P`{Ah^gm4c9s=wgHJUSc#i~gk}S_T_fGg>pHg+NX+1r)1O>-e-#5_vQm zd>u4bIUQ9h3Urh2@91_9v+uv9 z!z20^Ol2zxIv%~`B-=RyNsp>gDGE~VAi{;r)=LU**1;TX$S|o@Y6!5Mn~RK;Gyqhj zxk>eX)N7BH`cg@j@J-Q_Q^&x13V#S?di%8{ic2h;s-K;azwNn}-fw!1kdCei+OQ@a zRls2pq>{KaNuZRdz?wYD&p(xL{q}tvQE8d|`9+Bx{#iq|u}7;+`NG+Gqz?;6c*m3y z69H7Jx@>P)K~c>w^)SCazDHB1dW+WWSA##mXS0b<;eSD_%9K|F`wOgFVVdI#nB7KYk>(w70vBS;O*F*g6lzc@V8%_&crEv>EE!ja3MXAf zsBeG%KtV8?(1bRB(0@n7am@(YeEL#V%%Cx0c+{HPUY`fnrUbQ&vZPAl zhhWC@H>rij5-(fQVr8MT0C-z~^V8G$KGFDk6_s4Gli5j-TkJ~~W7f1Y;yNqE2Fq<> z#99D?_}F*cGZh6B7v!VC3QJngV_X^N3qUkXh>Le(dB;@`@?lmv%t?a}hxcLr-Vz}` z$*RpJ%j6qS24ltEw?Rk14%m{*U4D81;cT|~Y=%j!`L8B4IPeJD&_aw6u!;dFZ%vlF zegVDFpuG0UcH$wZwodB<6n28&6*=wNz%nV|v^axH!zTzj0{F=Zf!qgKK?%$n6P^lM z+F%p}q1zO0SDf4%GVa^x;JxJXC>t1kyg3|0-53EAG=e_y-~js=s%>}+O;+}dpQ_@2 zZ3aPd46O)yzHq3mJ&P604v;Q$xbD*_Lk{f#{H3a?3DZBA^w^6E$0%-+9@8O?#!mA{sMED{?MItA&}!BJod+N|@h;?n zTnCxLzsHp^6p1%_0e;7E;UXEH0cj1Z5%jQpGH*x39C3D>d$HtddxU>G8u1 z)%)1;2)d*6J_Z9kpoN{C>j5nUE~bw$U&Y}nL0doyX=*5WYBkp^`P0fuv5?R|la)BZ zNu&XJIV+M3ujkKC_4ONcUV;xCKF)zW6-@9@OT*)Zx+buqBB(e|aq=6$T!c^2YQ3E* z_>+L2C|)GVHjKZ%#@Qr51dYNvVZx7~Bj*bckdm~!2se;h7h0EW%u|q*aRgrM8>HTk z@wqsn8E-gc`<~|2tlX)_%m*fm$1pvf9ud-PhRTZ&?x%w_2k7v*Ny1K!aQ#3nlL{B> z1lq~}>IYK)vOd9!k9erSNnYSMr-Sx;@@G?Qcjc`gEwqjGi}|4g(ONxq@*gI4*XPok z8iD}AADxus|CPT${015R;KH@6;L5j9(ZMn=`}2LpyFi=F2jP8vvT|=HLAyE=$bGNh zY^cWew9~+#B(UOv#2@+Ah&miz6Ok%I8u7nS(8n@a1z|e2xMEMPse)xM^V1JX>qTb~ z5EgL2p;hNn9`wjk9Qb-rSUwC6qgYW_*H)P`@w^^en9E3wi}?u05Heq!0(*@D;$cEZ zj)pFBh(x=0F-U5lG|@44Q3M3c0y`#U{NX;(9*Ca|m@L#w0`oJWVtgv&`P1v7E6dY2 z=;jJqm6?|_^zMt5>2UDRqL`{_Y0ZqkH#Q{m{$F?TPzu5ZiRdKFQ6$w97hqFE-gt|G_zftCJ2%*cy z*m4YQs=BZ0NCP7B6GZiJ-`;z4)vOpa;B=qgtf2I;r-rra!Wms`z7h%4ER31o>onU- zzY;zcPhaBYiGW2W@>?@rH^KLttGpQtA2hTL+d;ZS*qNjw-4LKj_{!S|EM(9hIl1b^ z0>Q8}1YrQA<$a8mHRv*RqzYZaWffVQbo;yGjY2qx1hBY-rc>|6BtUtrW#@2p+2e7# z(pT%Y{kXP%t^vIOgt7KeBJaHp?%H~HSe_dDb@`i*iG#|*;~xd8|Lp&Dw)`6zK^pGr zVurpRS+HjUIRQF)ZLL6H`<{PlD(}`--3Ks)BrA1PszH5%V3zsSc5f1QSdv&_pnDEp z8Q)nJ<+Jm=3kV&WgMcW|HNnDWHGYELVo}e}FI;YqEvJ)`j!D-CMM!FTI$P@<#h&<_ z)4y$9=t%w`M<5LL#2w9MElDoIH5`9H?8bry4sgICG&sQd>vLk)0s@AkcDa67A0ck5 zY>a**JLWwn({x;l!*XJf|KQ0YtUs;az9GYQMO0AMi;DAHwd*>J@sOJ!ZJhb=$-o1?wRL(+SgiGS%edBuQJ*lvC z0I%H_Jh5JIsvsXXvO^v}If;eS7zv!(l-*S$IB*gE6ht#4_4kg&4l|)IRY?EZwj~H% zz2q=2kmQ|ka>zX!3sYz})tYJ2FEN!+LG-vl@e1P>fWU;$98Bz?kitOL;!8niasl5~ z%)Bv8aIlU&B}DVv48cPi?%a&aCQtcN09?W1!9gY6uPj^y49ndavk{;nQTn9JvN8r^oS3 znt-c96wBj33lITY+q0H9qKu&V5}pPOph1VOiTA$-N@pTTcfOXJX*;d=F2n>~x_)Vyn~!*`Borf9hMi_H67YZg8fdm0g}{f9 z6h<$_ypE~HhL0|h&*PD=b*qZwqoTH={fejuP~)nh=A>6Vvj5xxP0dNW*mb1QeX}i~ zI_7ubsAek;hd8PfGI9VaW}K6+U$#^W11cuN{DE(yx4g5%uNU8`)+jlSzfJfOU%&oy zeYE&`uF@%1vEJB_t5rgbcwCTq&-cZFjH&gZJT$H1{lUWWaE-f?8pA>zNq6}UiA~KO zx2`>3Slp*8Z!oC;5v*~z!u&%O_?c@)2OAto+_~+-9KZ2Q*U4NYudLCJ$i!~eG z9SeUc_vMp$E08sL74IxU{>KXdzrNhCzfE2a`OQDt&R>eg%VqB#iv`U2)@R8Dug_ia z+D`H{XiO1eN_kugBj3C!4_|JYn3Q6R_!|_H(@^4)zIb6O{X$DC*U_~Y$I{ZKwpIu3 zF4p(&`&Tx@`MGHk1pC)nl5V_u!yvByTKpB!P2z;$tu0}s5W?G5xpySG!*tj>G9+t2 z2PUP%UlwPIHyO^4(P{D)Pp)Cde~C{Rug<(D|Ni`qzxz%wl4#TSgZOkxD)xnWRcw9x z5#RjJALHbndi*(zHYLg59HWnW|2}$Sq%cF1^|S~bT2prqT^?3hdmDr)y1XRFP*7n@ zgt>HuIu)ze^!2UHjy4{8im>9E-GC`ruyj_N%g>i4ismY$L{goVmzT6ykFzc6mQnjy zO<_qpGLo>@Z<3k1i>S@93$BZS7dm`4tNt{;>rs~%dYjUw zM&|p+b1K|kzqz}f@)Q}0V2XHptP3(EynfBId*XEN$LlDww9qa9KVp15sdZ=w&2Ca4 z>q$kO)x-~Z2g_CZYz78`Tjv)l^Xr2`(CraGCfeXrP|XWJufh8i_u<3%2!rEQ*z%!I z7OY*W4o)>Zc(-Ti-xX^2fR-@oHf$os;&yw*I=0yStZuld$5pWrrzCW>);o zn{+DPSUAzGJ#Tm7UcbJMG{0AC9K}MAuB7xa!%&2ExYWU5zSWk3&-y6_FYm?0s;k7I zn&Epe+1(0xO}p4W=MW#l&~g65yvX>+%cC zHIuzhDJJ?bYkS#f=jP4umoMec*HbXw+!5fnGLA&Yu~n3bN@%pXbxxcdJ zxMTQXwwEA2E-q%Yn3P_?!#bo7>CNlc;osBz+Fst=zKK6jFVQ`mdvlqo`Ts(_Q-3gx^T`Gs2Dkq5v2%=}|OP9bj*4~;y0%InkOxh<~ zzhs|GJf{)ygd4`1lzdBDJo}F#ExyUbC*zJHwLGC(=?QpVWW=={X&ErEmCTvMvf=Y7ieB6=Bv zQGurAL{l|J9g|h03(HT#VLff2R`KC|x-{<}%q;&HJmN!0d5(FoN+oM;o%myAb@i*q zZ(B5^({|;(y=NXLTqGG8rMrhe^%}gBqu#tx;`-XMAifuOKejU@$J~_<9^Yyom6*a8 z+F&agw#3ElDHjGtbE1?L7O|VRIev-kUlEnE{gfB&iN8h8R~7>MY-4OByYkll9AWmR z(*)<|GdK!RN(VZMQc&;;dz9(y30|edMk;nhlG40Rk1*Uh9djMDX)w&t>NJz{FDd%&K*%U#V}T=Q+6orHu;-T{KHY;Q`^-?2%h zg2KG4fqh5iQD}l@G**nxm44GX>ho2~pa5jN=5rp@G@<(gu5ygG6T0zKuiMGgfYqiV_O*7iVk@o(X|TNl(9YG|KAh-!*Jb zyh@LYLoU$pT^Pw%!@ha^}=eSJ$cAbuR2@V9?6K4{Y^d_{oJ!<-$ z@M~dC()LZ#w}I>HPZ=1Vp1-x~4M#5Z~zeDc+ONyR@gV0;@FnY-ZpR35zEQ#eRR4XbyNU~SYa8DIZvpl&uIHV zTHACSZF`xmBf z0Kj~WUNf0%qT!>STQ!SR3Hr zWI}b^;5N$aT#HOYkwPr?`|Rx4gM<5D^48avuU>yxmWP$Bm`KLPEkQw&3&DAHt~M;b zC7Okv8Fox}?kvsJyA$i;NxZbKvKf=n*XP$N!u+~D#o4;#q{$>nJe(OqpTbuj6d8FB zacH*KR01<^r5}z(l7>SgkI%~}CFnM~P&o9TuXmT2ZnzZ=*u!y226b_1$k^8Qp&EYuLb(|@5ln6pvR{?$0y|o zrV|p1CCKPzW|2n{YhJ2#`FUL?$|~01f7V>Vxrn*csJRnRBJHcL-6@AAN4M%xS2=Qu zd)B0%K7q^ii~HgyR0~ zSBZ&egoKi{^;7LbL(;F9%}q?yH=MtivNSZ_&(JQlAiH0Jed1kbBwI=E_ci}$GpwyM zFZye`&8#ne|X-yb!*~f zw6e6V?OnK|#A32i47cGSh+poeLfk+A&Si$Hu@3?4kcp&c>KGOIy!V%{qh3Sq?d`2J zB$bf+_T?*+$=PoVOq}R3fm;eOK_XsFVQ;mEoTFo{FwAZs@WN|G%T_YlgzkZ+M%G8~ zl0NM7PE5S0b>~FCIwuT3oBz5tVzqar#-kj^+1(%_AI@C-2{Cw!l#o)=`JrD{YzxQ$Btx@QQ$9L`nG&09d{cpdKO48>&>dk114_r$r__jyQwD0Qo}x1s_(LbuDZxH>HN@`;uZ2%#PU10 zegjzy;9OQ|Q$w{V?kLL7gzzGf!8_%GkvjBLmNG~Xe1_ugh8L#Gnpl(}72YEEb z*u(z!ee+wkA)ZG?m7?t_$;r2-XJ)FZMI_{Y3cq+A+|{Llv@dlFKCx`|TTgk8=4fn< zTcllFoTY>1x|tan35Rm2z`NOxO*IBM^{M&FT?@C@f0aHsB}TC=Vpmf0bACn=Y>92( zz7as$hv{=hnTl^^ayEkGMt1jCgrEkt|MDf9R*ViSt_C_%j)-7Du*NIQqqTGs{P5*) z)#s~+*;35xa*s&b`ga824R`J?Y~z!S*Zk=1b=%Z}k!KUpK!HINqrqYv&_wq-HVjKh zVDUWM9dKnUa9u^~EfWWmVO~CJP zNimdrls~_ImpZH+Xpvv*volmCCVS)6+gO0JHJITQUfCxnB?UM%&%A_all6!Sn@YM! zY-6~*1vq?o`iyLb-stxoWK3u3GR#vR%G0d)Jyf_X68iQ{LfD%utTWb#o?)4ogbh=| zz67<(CN=ZLbJ-3hb#`5Wk4o8iI6i2i>Db{?p>H|oGA#SSu2jT+4dpCDCc1mD|K`QY z+8Cj{{4KKk_MDH>Qf|1rpP7o8+1SJc2Oshz^sGJSex6I3a_@P|8y4B!tqGZ}=?8Uf zmVS4#X;c0$LYC^;w~WXXYmZyJK`B7CGe?o7oN9=OkcHac@G+hF1l?2kiz6dREw#ko z1Y3Mb$c<3W8u#?k%xl9;t$@)zF1JB>K zGHbDk%l)|KusY+O4Z3#9L5U#r;JN7m<23>j43p`{MmO3C{P z0I5H!q~lo4OkR&9IU15bZH5sltGy3mut_bf4$D3_c^t0a18uZ)kS$r5y5`4-3WeLw zB?hcWQTrTwzUNLf5buCg=JGzk z>8n<9SrlOWzb)HVx8PqXQ&@k ze=q#RFk_EEoy1`-*KB(-61+}AP>Iusw0vKC4!$VyD6&E7zjGVZMTp{ALjT?Q8q`i* zPxl$ng@mvXWf)Y^h++@E%>S}4J$M2$U?T7@GJbgyVLITv4!ohGa3>0PJTjj6^;bB`zdtFXfZ(yZTpck zJMa7e>g_MMG)>X|{2Y(pxYH57F-a=(|xvtiW!Z2@T}gySKR%Trn=oI1hGJ|hg{&f z1y(d2mdBMS_E6qcD697S*8Wn`ud!FxC?BoV@>hm)L%4`{I{w8P9Nf?bHTv#;j(7D0 zd}zB9mfsO6kB3K!#z#vu6s_s}(@m{XYE&Vilvh!2-iybfIP63l-+*KB(M^~biUU0A zFEBEYMVD3VzII>;w#ov)x+Lx_3~<{1iMJ(u`H1R@PloINdQ&wBC~+}x$j3iCM4^bH zI9~992Ugw)4M7hZFIHt!@16Wg!mC%&P~n3{QWD608YC%An2B^M`H+JDJS2g& ze+jBAB=KnSk@*d4l>7H7Zcv`w(l@ZldWfPYAgCMI&w2F(IDXBy$;me-Yf58(Z*Q{B z_I$g!G*N*X9M%bu*po{Qh=@b-rlzyqRb@dWX62XHmhptvmgRO&_6R&_W0@0x4x#ZK zk1Q+mK>7&3T>P$iS!L0~>uS0#`^yHs>3&!wBwq!bOieSYYk5FAMd zkqoergySwsgV!C66k5htayO~cqKte$WBOeg3P#kLqM^-5I)C~T%q;Fp!*uT+w$GV8 zlxmOXm!-nhkW>q`T(_oh2brgxoxWs=c~OS(5nh)UtqQ<`0hY4+uYv< z7Xc9`0I$7al0v5WS~gZH3mUy&V7d{f_mxi`R`N`WhKPlQjDW|ktjCLsz+~Q7)2Zqm zjS?GM+ucD@hXhR^B#U%cf`I&(-|@S~X~+O#j|qgEVe1FM`I5Z<3v(n4g}BL4CQx$d zG@RT(!p;7%ct(U&>(++{W!VY^Wr2(ROhj9)lNTM)sx_bJ!d@*9!`#2ODfEyBHSHu! za1lJ>aKRZ&f+4(i&9nVW_P#I|YeF~TB{yHVVX$iBegS;oN~K#Uhy8StHV1cbu+&l*&F{9+QOdL9*y1ELSS@Q`DK-J%XM@194MRbflQCWBKB7(XjXQ ze2$g-b$omkb!tWiU2k7sRg-~FHmBWFP5ZT_#YKEFvX_ls$ARq&v^+cnB_$;^#o8{p zX@#c zpRVA9j0P)Qp)CnhG& zJ1g?ne-A|S!6zpV%Fe#g;FB72a&j!EKyaIWsr~cU1xKjz(ZW!cSL9zMF^liaZoE-X4UAc4tbG-w4RwS5MMUhjv zLrFOa1}fGBp#_M9kjW)uqFn5uc_W9An@b106Bsta3ulUBvid^co912f`GXhc*B`U1 zsF0#!sC4A3)ejVodBU(a6aWp(HT#&~Waaj?Z++d$!_)IN zBcrs<6dN}D1+6SK)73^dk49>IQaA+#$#-TOhg`{)30+Qh4H%d#{JH(xkx#r!Wae7f z@t5a+Z=Z4T7HZkU&~-|epFeV@t5rm`5~faJp&$%A^(D7k8ZFj?abD<1m?08uMopAK z7PpD*h7?+JH)cFxRDjgB(fq>5cN(1~6(EXeMxt;om4#bwAP z*12vXt3Q^OQzTrNskg;MeNpSe0;s@k63fW4a$;wEGG%G`TR7~IB7$gUh9Fhk?NxR? zH0cZS;Mkw{XKg znQQts+uaQuatT|_wzibdkzG0vZmpA(2QOHm!5p#(Kq!_v)3r$KLImkX#l| z4{ALA@FB~~UjqVu$;rgH1Owf;G^h(+ z>WsCi#Idol8K0blmH<0D7)ob7K0Z#%$e1$_^v=lVh&YBu%#fL7V{4)U>Tc{yI6yq3 z!B!MzHsk4v|SG^EO1e;-30cD4*%ul+1o2$TtH27 zD*X~b?5$5$*?g|KI>qaDgYTa1rkxzDSksP3N4ut$5%vx(@SVi<$3TQcge8C0=KyvN z<*l9viI`n}_fq`uu#!@$8|qj|BXsxt#i*|U-TYYnHBx(+1E>=ufq_h!PD|bCH((No za#AXVcEp4}u#2<=;SjNrKKNaYLYub`CZ<66!CKx=*EU)CvmC?5Ztf&!m!l2MVx~L_ z@_oR_*FiKu@(&65pb&G=oi)eJw`?|Ym!{Hs1r_)@kKbGD)wZX&a8`BMWl0ryXZt~B zl4zT_A~;T7e2)Po8*mz+SFwYn5SW(sU~Ah3k#yYLND!Q+jm_gmdn38ifl=3Q3yy$4 z@I77>cMKOaFVxI=WBXi>lzW3=wzQv)1M7)V!|<+NK6oCpaJJ)a1~u^dT(j%vw~C?$ z!`1}<-JiIwqoF}0K#BW3O(={>Ii&@T3gMkcQs9n-Pa6X%A}s%4jQ!6Oq&PVS%o{g? zv$E)mii`JV+~?>-L@u)SBkU^#e*XMPCgRCgR8*u|V{ZT*8`!Wf0%_ULYNpvwOjuah z*xVePgm0GyG9Od3Kbb2grKXyFd(Eh@nH{0T)D8x@h_BHU zSu)Y&R%0bp_A_-kI@Cl&!MVz*ZR6u)F)=aY&|TC0=c6tu(xWs%G(0>!vRk)WJ37!X z@TfJ|2qQb7PoH{Yv=|XEmEH+JZ|i5q*}PzHtf*+5!J=doZ|_Ot%X3j!twaj!URxxo z*uwegPo2g|45%ukI%Dk1D$jRux`0m|GZ`l4Y{ogCySjvl4|k?(og~fmQ1b1YBW&nL zGTfS6w!LB4ArQE@kcgvyKUYIXN9W?>3r@m|2`8VUyPu*cNK zM(KtCam|&YGe`biqlwe^vD~3gDl9UjBS|7|eIBM_-T%qW%NyG0qs(WokAcu{^=g=) zV}(&BX3IaEu)cM!nKY4;#^1<~3TA+PUEG=|I5}Nwt;0=Shwn3k50d%vfxxi3@Qod) z*g)SKfcJ~2QNzM~auinwtAKO`cZS$fN2C-gnsOUJ>I8cl85yPw_njk<$_4xy*bfhk7eK z{>~jbHa2QN&r%NFceULaZjFO1LNf?SG`Cp&AQQcxn$}1Qh1+Ne6}XkR zBEH4rnN3v}6038ZN^$@9>Bi60gyuza##3IUr%xGBT09TeTW{aKJr3h?dh`tpo){Z{ zFnu!Un$UQ8x|W_C7KQ;Q#w?ab%;Np~_qL-&PY@uBqT`mRx4`CTF@@LZKBL$93HQP7 zu5ly@yJ-|Ry8jC=FJ71}4-u&YsSKLd6M^-u_BnGy_s_}BW*$A-+cSCg?3wM__p}J} zl&=*g?dV$dZgwO@L|}TW`ot zY1fpfGCzfLWeYEXjgBs0d$uuk@6 z5_E)EAzOW^_icY<%iA8V57HDLpPxRru(9c(7WQZ%Gh-7GNdvO33>F+qnCIVBF}N6^ z%3J(Sr`(UG9HV)8dO6>Ug6{wADG$HRDBEbJG|> zv0*$IVYjxnr}zxQGGDoFa(s%Rdb=qYC6UM>(nHRFXciuRs}5H>=i_KezWVG^*+;?e zg)a~2>FCnH^~qTzACCmgrpD()&DoC|FT@WOU+BLr)VgTZ*Iz9IZjfd6U~i(=qF?mm zh%;aL^R;^x4q|ESdL;S_=J6_R+zNLX|GPvVB(xbVf=Y~Hvf3^Z5fOJ6+8O_xml)JT zADy~~hsTF!L%HKM4m5%;>#Dg)Urf1S=&HNzco{MW2L}L4mPEEEfs$dkEThT%cH~OR z%7{3Oj0CIXuRnhL7zo^BB!56^9d(3EN|1!mAb=hXepoC1u*xbN`8l?Rh2oex1WZ_$650T78aK4>IFncn`7DyYa1K7%)s>uA^8Uc z1pF97E6~$=2NupsK^EX=lzqaKT20C4&kyXUYXjoq z@S!WDwWkLgARXFU)~kxi&9PFoyhl{vm4H8ReNoEG%Na|s>4J$sQm60e|2RqRy8X6} zU!BT&O>ykIrGTD&0bsBfL z9OuQOdj_8xu?Rg%c_*3j4m;(I(XKa!|G)sWOiU89Y89zAXit|zpLM2DTl?I6s>3LV zB-g>Q(DonpfKrS)qTK8_QzdA$*qmSDOD-SI!EiD1~ z=MQ)-EG!`TPfzQ6czKykRz9osIpgPdm@RS^+88Acm%+x~+wlzS11Nc2$j1@@Qf#%lkXKE<1!*@i~c%uUt1jfRaW zu!e(zj&_~_$lQ|lL7UU<&rOFufAa6{P;k5rdU4%B7D^!Pi&aNT-QGR*ekpYu z6&?K=vwr7!dZb>B*YU3ijIzh->MbkICRSFMNM!uBWUym72zUnJ7yGDFoqoYH1m}~0DQGC0*F~X{p%#+i* zvgU9f*1Eti2@$7-=U2?9pppOb;xTc)wasvq(Z-~lYknH1fsh}x4;^k#9cKwL+_^)~ z&0RhqrfCb4dx@}KB`2Q_@=(WyA)}y!DVr2fSiV7h^$$B{R+V_49HnRd8JP-?eUCOq z2Fpw&Pfkx4t}b`3;=oxheo=nAW2mxOHMikRQN6s|nL|U1Z#AFn#R~#99Y?IkdDL)# z)0__1J#_R^Hy|Z|4dv&L3b0#1yJ9ow%{vNb#?^O0*8!&9BqxOt3yBQn@JN--V3LNL zn*}=3LrWwFlV4X>rSFet)?OU4Y*BzBF5vuyRJ&BP(;qn%tPDAuaW6@TDIa5nNFYc# zm>K_9qTHDk0TT-%*{{zw3T3O$+~TMFmCrMr^fOsi8=v&Df)DB@M8MR$g~=bAtt^(WYmYmzO!ERxGD~ z{y+mK+U~)DBwX%t*|TLyL>q5ugRS&ThboY6B3_qwjm^w!OU#9$F({ zpdUj`*$P~Z0+kSp(*Fc7lCa6s*Hs6mIzEV)=_w3kD{!O(v61;O1q$2&#pT^CkBl4d4WhlKkew%HYu%e$| zWYw#735MGNU}h+VNCIc-n`Ont9dw%;{fx)2sHo@{Rs}07#YJdYIYb*|Tqe0w*AZCCf4V zRa0$G)x>_Tujf@%RICO=tlRGV!_}>=UI4sL#Krwhg^v-CW7!` zjvZeC( zT4njneUsuoP(incf|W_%VC_?(cKW8^J7;g-O2mTEvjk|?ZS!;gc_LGKg zNoYAzoPeH3UxP4pIr%B#a-Cihn86HB^Z#S(E1;_In{5G6K@e$BX%5{X9fBZ@bR*p% z9TJk#Al)HSBGQtAASEG4OP7kYfONe%|9jv4zVE)b7K;TeJRZ*Z{bu&;y=NvZIhp9b zpbG-t5_Q(e+83&mIV9xzB^yJ$nhDN2Hc4)08QaDAek1cOJ`e7BLNQlo)`K%qAV;9} z=JD+bXw~vK+?>K+P#<&ul$e$_*yOJNRj*d(%jb?2cjB-j`R5cRLjKWjDfkbzW>S@M z#SE*S!kMb6tTcwgd9*}CX(#!ukW7?t{a6e^R4kK&gToZmPs!a)-ussD=&7bX{?kqT zC2M{k@+ZyvQ`n{etq{)O-3lE5Cp^$lMnAb2`&*d1nSV9e51UfEI;VF4$JqBFE1}`} zfuO5L&R1ZL2MW~E0XHU3a-DA6`_DWco&qkP;iOi2X>V`us)ZL<+0fiy2Uvm6xDADv zgro;#lmWdu`(CKUdbzo|Nppv+%(|mZc6WC-;S6A-C@3je+~>151~;LlgoFfCr1hJS z#|P%;pT61mJ^r&)21#`j{-#a9&I27Ck9IjxQGRW0eFYEM%m+J?Yi+F;hx+um7~c=K zW`Hh8NXXZj?CA+BEG(?b7WQOLv3cI|_FZsO6Ukg_lY6KnH4i7JF+8LNCMKpmL3B@IRTre9cG*vg&xYHoS?dqaRX#>2zggxAsn)GSs`PL(Zg zr8PUXq}D8~t{6EDa(<;#U#0HkLULhSmw7_NdSel3&GCKp8RhJzo~&#upi=6pKp!v+ zQ@7oj$JB|Vu+!Q9g{7mDb}61@L~J!AW_)-!s%vi_S^kKL%kN2~X*68coGKyrqAD0D zmR|lymC>eo4^#~v2wKD-IV0ag5mC{pGTj(0#axbPCPICt`Y60TXadF{>0+ZX--Tl3r9N6K2%lQg>ev%*9{~mIjKR>1j7GqLU zOR8QecAWitw)2TcMn;A{u{Tk2FiWrls)jTj)(JS`+sSW*WyZ7hyJ85iVwpxqM#kog z8@>1GYpSZ4JT{Bp`vhmqYqLC8$`OB&qpPRKe0T-fH?6t3dHI-8_=ZKJc9+hHQ7Skt zv?}K9e=T!|u^CYqIQ~rP23J^m;wUQ=7MO-%lFS_cFQTYRpqHkjqvJ9%T5yS$6-BYV z@++;(y zcNOiUd?30UpFbCZB!6!P=v~uBIFxE{HMUx{wUBVI@@Qv)O&*lPkJL_Mw-IqtSN6~;<(`%e(2{dtdLVZbzvvur&o2Kd6!2#rbVWIcQPTN~d@1nnjrnS2gP&F`>jKfXA1 zFn=SnGvZEKSna++G|}|IpFx_d`}^Mjusq139g2_)llDXHPdD_!jXxkQuAYtEQr`IlVWP)l;iTOaW@oNu&2nFcQ zvMP$C!;L&vzECbw&EtG5CbPP_S_c5LE;PMEj;4O}k`t15O#kSQr|C_u8gq@BvjSC% zY1It{B{TKUkcsDmLnz9g_yRi0L37ej?rEUnWOAaMrB%bS-+668#Mloh@v7V*3uwoL3*WdnLWzS8qh>pQKgSnmw;z zx`T}Ani>*ly0RW_>Y|+!Moz}u=SNb4C|^&*eKYD-GtRe-rjpFXf2vP1Fx~fT z@jbzZU2&lkc0lXirJW>y^hm7E@dAhTv0K|6@lCL-Q8(ep*(H&SyRXm_5D-8?N5Y_- z^-xQT7zVQK0$xmQ60!LC?w^phE~f3KXk%i6s;{pv;(M%OlXZtuObYny@j9aEkN@Ot z-;+s1T+bu$PvC*nlaxewelTf7D(2hJH$)UIVYCCYNetI0i;*}+KOEvjMz@R)58v4*xFr z;;~v%v$L@*h8(P{qF}c5(!vXZ_N70(?7_Hx>VK%wfNC@N=%uO^NCekVKtb<@81n6-w`-RN5baTHlil4nL@4eI4-ZF%aXfAH#q{wx zQyYK7dWWXupDbPIXc#Yx9xodLg1aPhGOX}1gKFs}z$c^xk$l!#@?YeOf`gx;q9UjF zo;eIbG^+Ab+E5|uCanW+4$wF@?pGyhcPSzfA-L`|w6w#uHtHx3rKHfava-ew1J_gD zZYV^mjTZof`$gwKvY=-~v#Cf!Ua?;#D(6}u?Erwik zOU8Zmv2*X9o4-FOx9G6WgaUjMPN#p(p&2o6e^!7|_e}4FWB~RG{}Qd3xVt?5$TqA7 zXG1q~t#l?~|E`$KmpJ5+5JK}IB!GbA{yN0YLB%t+6ab^&Ht30`zmKApI>KOXO5yQx z6i3^NUxRoKkUyI5v`pqddV5`*e(0-{%-jktIvU?2`bZDb9VdiXUYim0Y$10^c*OCP z!l9#5QZt|j@L&m5V9$!_1S^MPniK9y&kIyf&kGyRn>gp#;HA`Q_`}P}stEHtipw9- zBxC$<|7IZqq;7hatg<((f-;Cc7{ycY&8M*u|HqGT@#jwveJp=-szb=231na(OLB+n zhPipTSfnZyE>pIZVFCWZ&Gms`X=PoLtHGAlB7}oT~Jk-h!H;N87LToI8i!nu^ zko(6ESutjw7umD3pU?7{IXNqb*AIag{BIXgso^sys=tFg3+4d@LoFZ>0ki$J?8Z@A zVX9~VFC82wEI+%wVsn`LnFfn&A?sg*(@Oc`91qCOo@$GJkjC3q_o?wCD!q11Q36yL zI}79zVc(EFXpnD!`vbcL3>q=evDXFdid4jlvq&*L2%str3kwz~0X^Y(w0+GPl&acc zWo4|%?)(oPu>GxRa!1XBQWpA^86e!kz8ylRMgyR<(NtP?tOn9lOQLzK293u{H7Uob z1qJUy%0NLex3V&Wcn%{r!#;d?0Dn-_`(WminPmCG@W{x|@GwY%3jO9yJHM;V=?_?9 zVq(DUb4;Nka?A4X(129E1Q@V~T~M*p{)K>Q?gb2#P|Whe74_kR$>SZy#wrJ& zz9496?-xH=0IqLg{h(ud{fkxPh&y4%UGYn-ED>)KurIggh?=>PD@R0=3F4!oqQbxe zwAB7Ccn_e9(5%Zv>5N2a#?|k1&M1?2?n&VTWCVdhmf)6x`|*H6^mzze6&q@oxn(DT zH1SV&Y$tdnj2CUd9w`NMhGAHtd)M3*G9-puI>(7J;7(NMh!u(#|`k(MDG*_yMbKH9FFpQd?F% z_wE+708LgbfDcIvB|ywi4}8B@CI{={RWGh|$Yr#@-x2o(OFi~Lx+``{$^#IslRf!F z)T;hhTcK?F&mZAfbRWJDScxHSSXlg&q&fN1WG$)u{4`A0htv!gLkw~LB{4|s<6wUx zjqur{WfjNr1{IfhSp<7hfCgv#O=PbVRkA;0v-OCITw+w;{jiR}`1tetx3GwfpoJYp z9YMs^4M)9g$qDR+w|sM$#8PuRldhVK{cia`W=>AlH*B2Ee^Tw#wuIsfXcynuapW-LEk3acejFl%QBm}{LMIwlYdMy0l3SB zNlbur*yKWlK=jGV$_8jKheG)U*Zmt5;7IBYViP-+MpGcb`1ACiBDHyC6p zFlGJ2@Z~*UxPSL9Q=iw>rRe;p7Zq-NLGXMT{eQVM{`vC6wI9)xKOEG+c_ zulz{%Q_;P(yZnx1fZJX{&o5GUg5ZQQb`)5e0>7tZVWbB1X3Qy;#qLLN3BPG7+2Gi( zH%##G?F`3560lITaG8I>9mwRr1LZk$s-_2kFz^w-BTp<*8`%vht%`|=kbBz`8?fgZ zJhV!3&$VRw%FUm-hqNPw?W!Y^XqC&?OPJM2EKiLAZ)?tn9E&*X^U;E5_j1=o(rji) z1`g#Vi2?h~Yd2~q+!=Gx!KskKu@ff|T(`XUlL2~J3@52=1{M}50aqf4JU~p(4>u!# z61}FfAVaum6e4L-wGtHc_owFz2PQ!MY(_>#(EBrceC$>0Fhh*IK&q0>VwnO}_Z5|5 zxS*^3aW`jCILoF+&|H}6Ub$YY}Oj?+873V7e$p1j*WFXLYKg z`+t5OgQ8-(EdYxk(KfQ-_HFMHt*;N`e{`(6LMJCxVy~5b0t12bt4x-ciZ`4ZDc6&7 z8|dOWrO{v(!H-V}YM3`6!JJIZf7GEUcXGzV@k9(OLF05uv`REk~#t3lU^{hv@?^+B9yTj{;Snu-POlU>)IynN{kNeskQQc@={*IkS2xehC20t3&D zE(JT6P+q>g0idQrpy=gGkuK-e{l-_lKQJx!#Opa>j>C^%^3?b(J(Mq4zuCIzg4fge z{MZ?JRt;qIdFY5{W7#cZm>trSor_8&f^VRrAUo6!9Imwi6^nwhy`8*j!YbJ}3YQkz z?A1YV1=n2OhH`zF5Z58Snk*K(c3A!v- z_#K$e(*k8lXnZfJkcUBRMXL);zL-ZE_`w86iR?iZ_9Xr-L>P0ia7EsBamIx-pLch! zTg|d?oKBP{rS4ILt<4DR%r?3@IXOLqG)%MuhwmPU6yT&w@17Yx+6M<_bDG!%e>B+? zUVn=Bh6tDZ!eH=T-h0<~rI;Y7DJo*)P>LCBTO?1qGeLKf=DV&m-Zcfqtncr?Rij?x z1MB`G7y|Uz)bB&n>Eqbh2r&3MU7ovrpL%;0bbqf`SouGV-lga#o05A4Iay>}E-pXh zSnl54yBq#P?vY@mJJujNA{SNmvPLBh_Fd>Lii3j6CXMj|k27?q=-~M0T2b zqa`TbzzBuS$&FvWCc_@JR#x%A2(BB@7ZQzqBG&)pG0;o5qy1zJM!GM@2*Wy55e%pX z($z7(9&gTdV}2a_J`KDZhZ3O9sHJ2n%q$d@T$)yUf|~}z17@$PyN-RmmvO`PO(vL6 zxNp$Dxw6{%xKhBlBYv4)UDGn_OwPotNvK*G^8NM=q7!O0O-|-R;^C5T^x=|#yl(5x zmu$>vL7m1CTvc@R%)~0M2$BaMY}XBKCuJ{C4h_z36A3JCA8sGF8ddns4e$&N`g(d; zT0OIx-;XcbYFjh!$p7*vK}vzMdP+)wOi`+OM!I26(b!c$$}W>Ynj$b@CL^`Oq^3?u zm2lBRVPa!o_E*c(o9KZxDR(Nj=m`_3`&lJe$x^8MZ<*^#BN866ri8Gvgm)22y}`7* z=Mx(wB`IxT!MY*nBbgv2kd1%t&yc08RX?;Eg7~maUTbG-yXeupKI4Aeqx#b(}_j7 zf*_TfsKrJ1ly1Xn&c1UW)6vRq&sBu}Gf^)ok^C*)W)D~alNLzw)C*Dzb{pVyPS;lNfMfD;I~@m3!m8)wl&V0*S${lJdd!YKIR=QZ#{3N0{y|cX=I*Yr7f_ zqE^{Yk-V~iahQB5v(FkW5Zy68WOftw?cZLvxTqNJf44`=@jvA!<@u#*;5M8H%?9+x zzOgOh@dDP=Op#O=LI3&)zxb@k-ADL}du9MZ&e!5R(<)N$-;|P^XD%jA@kDQLD^{ct39M+Zob#CGl>~f}BK9*Ml-WGMmYE0j^Xt1w+bEjovz6*y+HUUKr zA1{V}^z8#0n)r}p+m31JKO(8bO=+933N~*;5&zZ=Gg*3f>x@`yUR2HT*QHDv+F|js zl~T02T4frv^h{iha-)CU`qVtuRqf1jzWg{D;G4&97Kn}Dw>0YD16LbszjQy%>sbl-+N~8m zxeEOrOeRoqiR>iB~F_(IuEoSk{^^HOEIV?C_;)9Xn0gBx`2 zul?Krc3RBn)!)`_a$}nJdUG%_nfa_WVt-JWlwgoJ0$0JdA4ws z51g`3aw^JVybMKqBoWJ>3H@j7oY;z)e7BG0JSiz)vR;}08TXLrI3JvCq~BM)Sh-7h z=VS04v11h2+{eYvuGl26M+K{QjyUS7N|OK4SLfP3~xNVPePn=HAJ_zcQaKBkM-E)?rxe4Jea_ zp5(V~-O~H09RB?9Pb!?mU={csd@OyC_@sF+ynTSNaiJjVPSVY0$*m^SQwHP=q zaCL4beBtxZjm)umi?4IV8TnU@kB>v|EkAqHZyLp1F;Td8LaSLkFyYnbZjq7?PHCyx z6Q9-!8S9tm{;(IIDuJqCBv?Ktun%v?Pn;7So?JnY`Z<5xj##OoNm_7 zV8iAaG?i78Y1CVNe0nqIh5xsT?7e3@?EiMUPgA&_0?wx{Zs$wY$^u&{&n zij67#Lf0kgc4WRpLWtX~_#4fJQrvH;(>0b{rd~7ZMg4exx)xK&TJww%@ur&lT7tS;%gq&q0?j5=6!Ua#%d`5FRBDn;V=D8F{f<-6U6zg9eGbS}vtrT(B5<1ml z(#SefY$6}q3%eDhGU?dJ@ag+S#;22x5t+!@anr;jmUj!1s|j)XA+B_qmWdLYu9U?I z4kn~8JEtrrF$wd9O>P8?+60d>wXd3~saf7r_iw#_ahlw=l>-0SAFs_n&%x_w@6@=S zyW+&z-n*8Rk(?@o1^&?PQSdvC*MZvu$>pLrE%+UofHz1tXn5Z1SGpCrfegsJf5f8% ztil8uknQ~5jm>B{c+Pt>KxzsDMgdGkOWz*dxsEb6F`+k<2~{G zu>Ok@W~HKo^au6Iz7ym)WV%}PrYJ4_ym7FM%yN)H7u|$1v+khGKHqr%=Xnb$IHFOg zNU=w*Z=cD@;KvB5v7t-UQsRV}RrD03{B=-{%s0Csu_-JqEe(4ZhsB=IHi?lho#|;W zh!J2C@mQ6&CD2`USfpl0FI@Ta+Sg4ei90@#d@WF<>~}-_TqS}|p}f1&Bn+9qR#$W1 z?e6ycgoQCSjqE=If@V+(CI6Ab!4d zr;)wT@OZo;wr#m9b!o4kgf^MG(zv}dSS{K%Zb$OwOx*{5WzmB%`WKYH?R}4z9)qD5 z3w9K%*7%h-{&F*L?%HSMsCf9vpKeRr0BdcSmNJUOD0X*+vS)MZ*<$Ni_pc^Ie(*@+ z5DNak?u!JjlyD^j7d=l4qk4%=TF6+EY)$>@W`)S8#`17ZLhQ$+sVSaFPO95f(F|L+yzEdsA8{uiW=yO!Pp9ifX-i>i zHX(hS(vaNf54Z4%<^zSpX-X;80618jIxdNfd$NVt0%Ux@ZCt}v1WIgg1+^6$so#3p z{`3WNa`i;0N#!w>l3B0P+oI(Vy#Q~LwwDa88MzCsSyU^mjghO3e|`EUf~hKxzA187 zPkGrj!zYEysu^j4Y(+QMM*GUC@6Y$WHrG5*m5bR#l^*)H_DsLzPK@VPk3>UNms+k# zhz|DyFN0o?ngA>9J*A?bbl2lC2r|smF_ng`x!DBLhg5NIb-j1ib@cz_B1G3Phd=8m zeD0t6VAEx4_?}pLEsde68UJ^I z6ILnnptnyl@5eoUqoPR!`oHd0ksCS+610FCbtF_VFq8mPA@nYYO&qrcUgH91pH@l3 z+B8D$a|)Zj6F9VJ@5R6>I*FJZejwRf27Qdy=b;xuUO}N|`rKa}KEzIb5S;JEz39vm zbcK;mDg)qOi1WN;WnsD2R-gg+B!7Rm1Bl5J6%Pw5Fv)oUxr7gXE>hBL z*y~$W)gEHGTcqmt1J=$|RUGur3 zY<@%ApRFE=FHHde3w2QZitFRSgkF~G;G#jQ6mE6`&md`dR}@E&MXG3&lw?=#rJL%6 z(kw=hbTy zC-lT-k}>IZ=6$k}pYfBpe`cka7Ez~5%36MoPv=|N7i`}*(4#Px4ERc~ho6wnOB*RN z>*%B9qV`LKQ2J(16=ANFWH1$m%J_g=e)ovxMQuy3-V(h9Tg?-i*VM!c4@VE5?4hoA zy;t1rvm`L7kK)9>me1JcNYcJ9+b?rNjfvhcf<}SZMQH04f*i1@$WRBT+P7Ll_&MNf9TiA}{x77lM_c2R^6Tr3p7>L_{oga^zP)w@;S$wQt`@U z9vTp_Aok}EOP$8oB8p@Y5jw1})vj5z#)!2@C&ER^#F0cS_nKopxnn(gYJcp*w$LCn zj^~Hw4*s7A9P4RCvkN)AMQ{|J?|E(Na_eg&;$gEfo}`5ZX>#)BvzBwhS_Gr|A^P`I zHpV}a3A}%N_uoD``;5d;@w760wpUAGlul!+GN>qh{r&H;Dl;WVdBgL=$%Q?194ss> zp!>Kcx#2Geb}%w?JWbH`7wY7!hC{D8KBNk<6n4W%*CA07_%@1!WAJ&-*SaID?8CzC zYRIc++s!FbMA$cAV;QP0lw;gapRdvVZh}tG)aA08K}k(bBDBDViTzuBGeQvaw0k(Q zMRq$01de81QS+pG5Q%^;-YVAlha_m~TJe(0dT=B-ye(KE(>q`S+ zJN5mpu1k+nrv-tXkJO-_kZgb4cmKPk9}QC*Stsf6$gvah|NRbx`_YgoKb&+A>4I!q~jVj4?;h*Eks`VBO5IvJnlUdZ=3a z_cT6U{%(rBMJs!r*w-(FkqL6QU%$%o|GF9UTzxvhqU(8UdUP#AugSBGkoQe;1Q&Ny)dPg}U28)`aYum=AoorAs*9Z~xRG4TAkGMmr|P=sUM;b#OluJJmUh3tucdRnviMBklQxo- zKHygQhVkC|x~a_+Qx=`5MXa`_bag`Vxj#u{lpiDe;pQX>orB10At zcGF2r>d4CC@A^2F$k58^M#X}eng#+taB{;z^{di2aa0#j15&CXto@+34L)6+8LRbs zd-fTNqtl^&?&WnX;)f{~2HroD1%Nq#DL|6Zq+DoE#4mWE1W+6s8w*(Vmc>6i_eUZ% z|8p<93p`}~9<{!13tcsEp@95ff?M1Tx_LDJf-eDzo|__f*wGkC9>6DD^x+eXFpGh# zMl|TiX#X&ogFME?qYEOd{T%hs-%{-S`}K9N-7c0_sjGwTa)KbF4&~V}fo$blu3$ri zk4fa=v)VFnP~QA_OG=sv zJfR)cbo*&GlDh%~IeI~p8z@8j80c9kNoIZYta!b!)jnd`G&i{%fk6i7NvjE;AOj^X ztZ=##of-gYhh>d~s)lSrfR18dhsh((F9p;*)-a3_*c0*lK!nEe3`FCC#Bt<04kDyZlM1s9tDFvFS6g`@AQTIn3}T> zEbtSV1k;&}J9BKntJLs4%>P0@BRPBezNV(CzW$8)tub(8N8`~xrUIw~j*$i^>8qd# zsZ1<1G!&M|@IfJJiIiOKh@W$6l^bB9K%~9_{_MxGWRS~Vx(*871XcK1Z5C)kE1d*S zq;z%D-BFL{txJ*Y82FDU6X}&CpFX8Pl1AVRFoTwfu|bm+GmR&cN> z#mFGhfEfcRQvpM_yIC`|T;9C>xz=VB#`#iyJe;-zIvyo}rMv;HINRf%;i57ee>v#! zY>=pBoHy$@T77^2oqz3a*Cu5^j3Rq94R_e70SX_XX(3S^aY(9DDDi4KU2lKl=x$QSFY-N=X99G8Aiv`Qhp}V{unT6^r^gKLcUf! zD}ICJ-){?56K6z7qza>Bgmh7edC~8*I2GBtq6d@wKOb7r{aT-DnOVhavggCwZ7?mAO-D;9-w2n&|K{FN zI;ALWx^=Kpltze?Ir`I2o?!3!)}lblt*-s7C!EIwJ!yeE&6jS-i64ED7} z?>5fwdtW~tkQzs5D$!#23eiPi%CZXfX5GouX13ULo~Z(gIGa_e|7U`6{mi1<^y0oC ze1pTsWbhi5_xHP)z3h<$A z)wONI{qw4;PIbbNRqV`?$0U{_T$St}o!v|i%G|BlkT+w&`ePaEH+qIa9ksDeK0H-^ zhv^WYfPNXcI7G%8=*w7q4#7nE&NoU7i!D7-0zkI;(0h)VU!$t28468)E48D_b~P5? z{AF;-!w$bwiXSgtBXjP=L+(PYvB15ltpDP&zGpY|cT;W8VWMmaxJ?WJ5s5nw3I=m| zZhQS$^}OUQgp-2(>1@ufVKKrZ<`w%G3a!;?Q9F=-;+c=Io=JV^yAcfV>1(Gt*$ z1U|aM2KD%gt6`siqWoO|EizPcG+JO?GaPZiNm)_Te{pA{bYWlU>~QyRX2WS*b7-Zy zU%7kEGtOrJr~CL;z;B(}3IDsdx|~Pk?ig==f1Sot{PV15;(arh@39|n2MSzJA>7n> zq+esBPBbWbWDg39waV(CB*q}* zLJ*j^();a?aJ|CwQDTFW(daNX^WExaaAH@=(3zxn(TqnlnUjM|NM-3Yoyfwhc`*az zOtuSc z*-swyRJ$T&Aq;h7^c?AXS*$E7Lo_cG#Y9#U32>A#pP+; z!?uWX-#c@LQP!@6(lzKshxi!)iT*s#hE(?Fxo+-&|F6n)9hq9TrW{EnCG=*GP$*iv z2eYYxQLb{e!qwC?*_`g`EN*H_J0Oc)QPKGg)FO$61u7x&DM0+NyvlD;BWmKeu>2U= z4&LOo`Fu0Nmc~Vyv67EVjrkuhKxyfp_M4PHnh1k_bJq4qhoei7iNH$%=NB674jS1* zzhgO^oID%MY<0yuQ_y$JHS+sF#6N$`UHYyAcwG@-WJw(A$_{_*_AK;V99489A;&*} zAq%H{xr@^5_>Y+3<8ZV9S*h*6nCl`#OP6OoOS7(&po#c~0`FS)HPxGwJazi?cwY0< zs{602DCiJk1m=;@z-LPVUXF&JDMs~cdrf;D58YVx%s%-73A*U*n0pij;>S{w`sqqx z>gDKCVTqVuB(OD727U*~jTuss^O}aN{DnVjcMc^E!(kJU=dcwiY=*7fk^n*uHHHX~p@;~j z{-GnNE&+>DW1yX1o{BZ)1kJJ2B%`4RUhDaXovEiLRyVG3mZg92TZq61>UZAvPs<{E zrZ(bwh+qrmm+D*6!&LpZ66DzIJ{Eqr529QAZl6zw03=PfEP#{$1)Y@VF6N>!sbUFt zA-SAsgakA@Yq|qP6RDP)G)7pK8>_?GY?y#9oAC9XWxhrWr^PM9pf+Hwj4yHQFR54~ zX|QRphjrXAd=j{VC@GCKS95SK9h*<6IroP;pgyIa_^a;0@8`GRi5C@)ET`Sj9A`~u zy=O7=ls5x}H2XT7+_=I%B;&F@P;l3$=_|}fNS|ll0`f8Ci%D$roJWE{c$P8!^7UYD zsB7VJw^N-p7avMVK4K(%=92TP)ut#qeT9zB|L=}btw02{%eJwnk%#X%id!Jv zAI~_wj}so- z6}X)WGFP|J6l5Y+unechL?jC34~Nhlajr%5il&c@ z&c8yWMj;NqLoI5TEh$38iQ3F34_v-@^Bz zz?DW7846t0mB;IG*5Zy&S2mB7LwTjRz9>*D5Yg93nCL6Uz{{4LQsBkn%$&@+34Mh{M<>UsRYyyFMcwi^fQEd zRTAq>G8}sPMgtE8MFMI1?DUa@8HX@NODr4v8RO*?M1+mtSNPkg;=koF!o5rRGoDmw za?2ggVu+;k*qBtNQkN~GM!L&m)p&ju=eMuNmX0Rt1<7c7?@KAeiCC(PHhxveGhWO$ zekXGjq{UBPd;P_7c`m#+L5m0(T9pEhK8!*SC3nc?gT>{8(Ja~Rjbp~hmrYHi%q$%f zu%&peqzqekrPNa8GB1bUs}5I^8V9q z;hnOMmAEJEzlR^W7^;OWHLi+1HhE2AmF;d0^`T}{B;j=w&w0UH&px%_U=e=|hKKm1 zlq%g*I1$*o>TXZ3EJ6W+)pPCxzW=9pUlF>~IN^g2Mambu?;EwhEk0b>`B8vJd*e0K z9drtpVZz%2^~o&uewKqGFa*NBn@C$EZ2aA`mmMbk?s8H%|DowN30S(QiIh{_dk>mH zItooctEybe#%Qu47lJg}s*s%vFOrUT3o~bR@jz(Ft-6*R-UB)2^tTjZxdaIay$D4( zy-SsWFp7|jHR5GaJ_v6mfG%#w3+a5V}L&$A8lh->f_($WB#ZjE#)sEG@kk zrM!s;G#)}Ba`(&-Nvgn`__U>I>3HQ1%qZB0L%T6XVx+0{QswE>h?x5*F^S zPEf9E(;{LeZKm zeR@GbsiKpu-1h(`#wv4$Hcn$qdA2S~0)Wv1vB3yTC!zGD6*u`c4H_neZ5zfd^Vn}EN1b4n`O%c5C9Ua>z_(3}&qqnI-|u6&>TsxM>&kp~S=Yb$20dQEvB?GtOCMuD7-Zj3-`;U zJxC6z3OUa@hruE^GdRcbwEr%?gkKt-s`@{urx9*iouaW$>4 zU)dki*u|EUq-p+rRDuWIY908hrsKq^~T9 zKqATL?j(~Qer?0V7#V4<7RJicTUyTkGWSKfG6Qa5Ug>i!{LVlcIW&Rtr!+4DRnPQVj?mky#WFv-U*5QH$n%Zo4jRNcp3w~Mv+5s3C_+bfLsKD&kW-g^Q*a|vxTP? zA|r8`Sss;?lu!;Pt!61>78d#w5}l}M5ySSG78SjFaK0$%=>Eyv2Af0jI~$Q9lDlqu zqaF%Dr;xo>2ygRc20(G%x!4{CnNS9%5aMG)#y>gPHb_-+Q}x)|Gyd7f;rtmh>~+~@ zo3a7Hf9u1}P9W}lF4JX!hCqI#2+?qLiS_M$Cc~t~hkGz-3A}?*C@3u2^WQ8ID)bV& zqQqf1Mh{eenMiCpt>=-LQC=(RN*3n5-@P*V>1jZrf_O)PoS}j_ZMXrK-Guenco&z$ zH1HrlY{@(gdQt^3@*jM!dV|A1_xBc(${KzXM)v0%bU*BCHqx-$oC2j5*|!fv*8h^WrS5fb;)1>5abh?GKBOa0@mI+cQ+X<~^3+s# z6Z41B&2^Rf6?R#NZJt!t($OC^7~lgCm5Rrd2x`;ai=Es+zOZl%Bl9~rQ8YCHbP`Gj zn-oy>3t`iSnyWo>cPGuTq)L|8Ws*BvX058F!wG6zhngHzKg$(rIX>Bha9~iS;)DAw z>TPSM(9zM@!NCR8DjfYDGawpj)l$+L=p+c!zjf}D`HIogo?Mh)`0s#%0w89|iRNOS z>-B)*aA|q0j*Bj9iZvpWE|HlAkG_%){~pLT75#rt$SP+X)+W~iI;cPYEKU6edV^E* zR^`mpsk0Cr@M6BL_RhVE$)+8O6SmI|lSFEY59gZS=-N=zTb?QweIvqXfb#=m-^%Gn zt+=n3!_%ERdG-5G?N9$2jtC`ygHB{y95;D<#tLt%82F#`l8Q9kJpId*uOX3d zc(N-a4pb@~3Q7-`w{u$nx50~xy8;(~0}Y?5A^tm^nJ$2lCkOn71DQv}k&(V$TOaJ4 z_IfW|47J|vedV9wwCGb8`0>gYIDR5S`B)n^uy|3zG$v(M0|Bnd!df9q7f)@Ug_}66 zU395gAwD~P1b`wDb0J|=dZ@80$Wk3@U?epP=W1iP!bq;XpC+77T9x-7BL(vw^mFaL z=Uaer3ub>n?Oxh$?s3b=FXUn6Rjg2j$a!LwZs=%hkpjS+y z)@Rbm0PBcUs6=qwHhxv%dx1w`)={Pzv1uM@7BBlbAuV4uh230UAzl_OK0NDzBfV{x zshkuItBKu{oy^G%Sp_S6D1pGZV8D(E5n3#lR>8of5%GPCPr=khV4aR${W}+3QS4)Z zENd#`O~Vn+;s*z#aYK_jt=4H$qe*!tMQ(UfR@CWZxY*r?%>01DfC_sIRXE@7d#0+l zjed+ZEqQGU;vWfOfSUb>J0j{VH+=2Zr=FdBr~wkPw6sT4Vvm`Ot}cbVyiNuTV1>QK zzQ5;11C~uG<>k>pg&@rBJJQDwA$`gin+NllCd zvqe}w?-7M-<&;2D$}f}8AuG=NUukhpFS4nGxWU3i{&|VhSInqffjT^x!qte3*IEU> z1`mVgMETsy8Att>G50-}PB(@+Z}XquN*Md#SoEit;b+77-YTcL>=Ti*O$*>H8rk1I za`~A&WHwn&1%}^xu>6dlfP*)U*9MQzzF{Z8v2_wJLJD8tXHuiUMw!I>=hVUyWSfu= z=#}(B9A<2HCqK=HZ_n+!0K;E<7pPgaGQ9&jt%}yWerLq>)4ui3DmpM3W}{M{HlbN% zaaE50nwhYl)d`HJC0S0a05Y-=Jgu_*CK-4Rr!(k--svTe}quaFHU? z8qDbhrICe5tdyjK+HVw;oK-3eG$^Lgkvm>JHgljc%bEAkgvIx)nW3%djm9L_*&~XJ#p9-Ls1R1pf>F)Z}IJA`y!sVelfn z?>9Vl&a>9LCG0U)n3!9qi$4awCe%vzX(%Xe+}SpfQ-KUsw{hJR`ktWwg(q+0jDedD zpN5&mu%y(5I-T%a{WJ2&sFn8y7H8^)Tc2aeDX{OVC65YW2X~Md5w>%B{aq)LR8=KA z+aT>)p=rHrA|)DYc9L@)&@7}3uCeI8B22rguF*8e=n3$CJL%m>41i?H_ z_=t^F|4>j_=q=^1LGrNq7A$0VtugJohg79VMNdgZ{(eK8DmCAQ-v(EM&+ea&M5s-^ z8KjP`r_Hqg`g+Hs_kJ+4QbCfkTJM`MAB7$ExeKBXTYwIn_2M!&Z{r61IM838p$QR1 z@*-NdMhhI*{eL!$D5uu<#X%$hHI0kH-^=CQP&3=fe(qI-_x}86qpRlxv0_a!<^9yt zcmB=hfa77V8<=lh@;-)|FkzJYF`2u&;ulT=ThJpp86Tx2hWBW0ct?cXQW_nNkUOKN zeh}tul1t?T6%7h_7UDD_Bc2rfEnu9cNM(vt)Js61!uiCxndkzx;=O%CC!wvikiyeW zDs_a(ifKytC|*cHi=3jRq?STay_9LG5sA-JexJm&CN({I)|A?jwDt9Mx@dbFS|1V8 zXnws(k)a0(+yezgFCB{VOmGtOB;2$z60fCm;ybF5mc6yfI-JDk`bH=(dkdi#1+p2Y zGJvSMPKJHhO5+$Jc`y=*i1^YEeV^as0C~SI`4X0ZZ**Eg2^AU;G68k{EdXecgpBUm zlZ^=n8JgFUgx+KxI;uh^5ppUrlyd~q((?wXEk=;pKJE_+u^L@o2S?aVLLzT2+c8{d z8ASsu#X9-(!!3oB^E)+`?~x0mzq&JF+*m>CKd_9R0R$av*I&`?5eyWqM*FuymygdD zKGn<%gQ|^38`}n3>6Qu-PwS?;^c7NkUozyLlfY=D7<09mmD}WAIl=vONVCIAtS}*x zPwEIe3hfyFuubvgzbl=a*FZ3Ye}obzdMLKHXV9=wJ`6LTWy||*33B`nX$NvHZXj!9 zXfb{1kF{`Z|5r}n{V3F}UC@o*R_pC3GH z9uVXW`i-HX^^((ej1mTVilwkNHYxZ&#=ptYpZX#Y95zHycryaAf7hWpx`)Dt@`>mH zYU`=3a@{$r(~D3DvE4ROja>oS9|Xn_ zI?#?F-&ahU#Q2EV&u&?+K&1ox(m!6UoNcrEgiN7Z)n!!pax}yW@R^Fx^sP?3EX`au zP+Ed>DN-UiQV8fnVSSWB)VXqtCSIzh9~WJ$#edVO@w?D~!3+D3yQc?U>%}$hHb}i; zZBt;Q;ypa==+1OfsLCgd_T!lzTn|=a;CCiVrRK3vP&&Zmz1?HzX2qSa{-*T#gqXTE zNyqkF73XDZ3=@Nbu0^vpiHM=$hqwWhUE@jGo3MP&Z#a(2rIrGtER zzv)+u};j@79;z~cCmA}RB_3gl{1Rw?J%35p}WyM_o z{l>@RbSPM(uZ_g$Jo;zJb`TpIUa`?1b54zT~mJh`JDSol;8+C8sB)bmYjow`e zgN1(+pM)(0SXcfJRqp|hh5o*em!j;wXZGG%k?g%klubf*R%SNYJ1g0nkZiJ760(x) zBztA^zn{)IpYQ+odOb&8&yjeZ_xm2#b=}t;h~3(Y&UJok&ZiCr*>hyp>QoEE00cn6 z{2e`}O8$~>m;$PPG#N--0NF}h181QMkX&~!cViBZd&PZI)-}IH?(Lz0lgBmC zt=;ErSWao+45eu#AQ#j%`Sey?dhKMN&QS=U zL}8`?wnOU+{1B|oS<69d^bdBW-IczFG$7uW2EE!<3aFC*`2SyV5az?cmmjJiXQPW3 zbHd##m0dqR?EOZ#ynykQw4{V+1#PN!tbCDrB7uee^tz0#7gV#~;+gki>2Y)V3VV^E z;d!%q=M{xeG$<$&RM^+TGvz^GI#PtBulwgUeOFMr=k?yzQtBg**Y7OQgy1~;`d!oy zGPG~IyIP_462zHR*;=#IaMXyAsaW)>D%=d@1@R&s>c_6NM1biR-1uJfZ$BN?Y`JY& zF=mVUDe?7h1|F}%Hk#uH3i%jHpZW+g-L|6zVlx)?eaN<+!S{dhf|G#2gD*b)yEQJ| zy?z$H>Ehb0OEsK^4pGZgUU^GREpFz*gbYdD$F8n<8k)vhYbvSMDk=;jar~0+?}i82 zgsTt|-eF5(=i4k^__J};#9mc=sgdF;w0zo5;=Us*|-s*i(i2#(5b zJ(9-qNQ)QM=^+~&-_XAx&}1bzWp1|RjpCl{_Odqb_N3@F9z3_5(T!*i^fLKgZ%T5{ zjd^c>wt=&9$YZ^{78XPc+s-z=>qIrC_A`ivRJsUKa~{{6$M*m@qWHkV8Awu;1vyG>bWUlfu>FEK(R4rTBL*o_^Xw+Ez zjyuzj2aPWSvBfj|7tI>=Q6=6pX8E4dF{&8_S&yl<8@gx0sl2`T@)#sxh`tZDJ9>P| zyw^IEax`fCBSs@P+Ft9Vq#RnrVaGuZrFY&ZuK$3uSR;S_kDijAyrU(8hO#1y6n}C% zcv)66L6{1yKPs=_^aby3F~e(Kyy55bLRg~1@rgh-HQIxclKIudFSEVV)qM~Gz;qx1 zo=oy6a8aOB5g^CU;O9U_K=dF{l>0mJfg4kUK9kSablK|}P zaIa?YC+&i0Z=QD*g=NwOj(X5bJ)qaTN9$2uo#YG$C8svNzv|~p60NY>UaebFMNJD*OFt^D>Xj2{Lq5~%Ptjy=|JSFuc9{-A_^RoSAhGhNuJ@)K*r#0Ob|-?Cxq0GbMqR-UQka zC=L29O3ga9riKM%YnrOB86N0-DM#--IhmlLP@SK3pENz$t`)uMo5*9pO2Z^aA zep$N3#%5VIjU(VD%*;D~p)g8M=IDDBf&e8QN%$q8{CnE1IH2bJTNR!DzT)=Sxq}!# zyf;gEdIa1>yUs(g7*I{(LIpvd;nedH&N>T-i9@065M+PE53`5wNfQ`3Bth<}SMO*B zKY4{dM*}8Ezo@_CNqDV%ok`2h=6g!* z8Q@)>)HCTJvVA`D7f0|dYWFg$NbyHHm6q};gYndwq> z;0ps808HA`oAWc+0c%R0|EyN~3r&0YFB@Pi0^0SGKM`Q`l)q08v4hk6mU$Y_K`Y>G zLnXID>>uhJbC4?+RbYWR{96X$&F}qrg@#R%Qw=p(Nl6Rrsg>`(JnL6Q$XJNa)OC}g z00;2loS7rvrSJnInF?5~}<|CXk9|KvJ8<2fm~aD-xIh7n@)fD*R}=7rR_ z9Zg8V)_BauJ@M-y!R3CI3gY`TU;GgP3?Kx1JJ4wlNo?e&}>sX3YH`wTfvBv-yr!eb_H3E(#NLBP- zz^coL+hKHPKG30a$!R|N-e=es)Y*7&H3T9Ft-||(D(S4dqe>55tWQesp6m^Bklg)^ z3#kedA#!&%R80qg`*R-81Dx;9gM9`mqd&`xE-)*a_mJ5iyK%q|oB)wKXK=Sr{Nl#` zYFpIPtQLa5Z0_KlFrUSwhnErew)8@rmZCdBIX1J&m;^5!VI9Vid1=X|i5R3x67=!!^2qe=%h=w7isHXZOzwPTdDJ3zsIUB zd;38kBrT2EZQC;D+c#KS75&JrwzkS8OP=nuN951_ip!(2D=K{Fic2E|<3*AE<$PObz6pN1=%e^-%f-9{ zEdThO1fj6NbRbiK$9OEsPL7ogKRGW%L!kJ!n%BZdw}#w*!{-tNp>>ZX_4TjaxRtz6l2nUbngm+eFLIHLkqwC?qo*vdd0n(!8tvXvp*urZ<=qv%2`NySkbW%O1#pT zr`m}r*c`dtHWz&KqX`k{SuRdz{hMG(AUc;Q0(wT*Di96coLS#FYMWDB?Yfo_=~&%)d*`bBSC@M-w+U%IUb)={Y_5P(voP2Kub^=%bNfGy0F=}F|o+y zcS68t$=;jp@FNID2!1wFV+%3~oLpcPm0;;SLDhg)Pd%)kr`@DQ2p^+oZ0wUZ%`{#u8SN`k5aE2c2OSO% z$6Xko=)wpecv({L)|$*hUy3#x71& zPHISU>f%@RgKO2|_8OI2Ha(-B8Y(8BLdkj~_5$zv> z6zxD)`e>vj23-) z%j>d@*x`lsva`a_6~=y;+_o_E!!-jw=8wf6c`L>*ndFNc{fdjZ?}IkdRLA-gq$HKBMZ?$+$SrK=lwDBJdz_JrX_Nv4DAZekNDgvkc>I_lP(e z>6r$_)iF9h<|#zLsc65q{atd@X)^eKZKstA7QG!yjha*g3trrj=Pph{Odb)cLV<}H z+I`Ecg5`p9Z?&2$0)a$JUgYwYaK0vYxf;%pyK(fm5TQ6zEXHAYPbgY#?!~v4rtc#7 z2!lDes2-|6Cb!$G_=-8H^juP_U^z+HPOY*n7bXP9@bsJG94%Y1hiYYV`x#fQE2Q?@ zN7D>;&L~McRoS}xm0ir%^fH;&N=l*E)z=IWrob2|DnSDYfaf ztbv@B*Q0C1u*7@x;wN*QQTUzB2!c-ezsdt9Fy-;&ZV1?yeOxOX?rghsy$5YxzpLA7|4#WsT-uwP^ z?+*y^5QLjj{ORd>`PBPxAKm4ZhVtQ1peIb~B4CQe6!d0O^;JmZ0vqoy=aydpdld%s zJ^~5*lfgUW^pY73*h*#&%(upEz({Mqy1Y<=b9}_edj38HRAv%h_xtc$#W?No4SrSEl+ZNQg0 z>DT8_6W!$!{WEo@SGV;;)r+qg^5zmyf?Wu)ak|5OHYnQdZv0o2bhXPo&gU4P z=poC$&o84DF6D(6Pc|Tunxj?l-GydN7%^4MRux3e$jcL6P{H{_KH0QWImi0vE=77UeD=k=N8J-WFbKey}|rXSg*dO7EA|K2)14uSc#wC=ZWhluv4~X(fY*G zO`bJ;y=@NMpa2@2UgP4A>5kXmmg6QFBoho~+85)UOIMe-clHs<)C@fQWlPV8jD$Hu zF>%V|9Fb!+)smhs42naQC}9dI6_qYUPa9?`G^7~&+3&w5h7#^rc|iRkp%FKXC-?~+ zl@jYQmNARO`}^7I6oiBeWztMqKW2#)-eu$H8EmM<)C><*S6@?jD_xi;ykPx51x+L* z!|GP!4F!+i(>3G+14x;=oZG+uVecHU6b!_Dwi{V!*mQQhq%TV{}8kN3DXEA1{AQl+Qw1f5tCZ zXEMnto|a|e$_ zDg@fs_;VZ6G76`*DNzF3O}I%gLiCO=c-Re3ufOqe( zU_2lmx)ehl6H0wQ#Yb>X&ba{z92KzG^|%quwA#i`3}$Md_sHTGYvxncD_gh>pYt{K zGaNfwgf`yEithEjFcS=ICrN%^djiG2lG9g>TVTQC*K^uJ8u$tUyG98LKwLls`UWf8 zGQ3)`Iqxxl>Wg33&zGntO&6sLi|kG~;R4x!9m>q{PUkweWu(-`PwrD{Mj0LwjK9AI z3U#V7R=)+xf+Jo(eOxpQDdUA>Xcn{Qj1VmD^2hgMEbd~!Hg)(UUctFZnK9HOBTQh; zg=mDi!S2Z`DF)tD0#7joX3gSdZnC@0FD-bj-)awJkF#b^mJW9^d!9gIiltW}+|DI}Rada2Gl^6XJU`&%MWVl?I?-aZRW`FuQrhzHr~(wr&aur9+Y zV^nFyA1qBfwp0c064y5z{bKsr14a>4hiAOjA>Gp7%&Pj@sHAOKTR4*{AFsGMB(#R* zv>)edqaZXUTac-j9Ia|uOO(?;i#@bXVo4cIHc%w`= zUPQ~#ZW-T-0*lU8K&-CZTtPL`w0kT53u`x1rQkO@r#LiKuY@37!=Vx$-VlKscSOg> z^+TGy?`r}DVX&uli%Y_8dQp-wAyD#8=dTerU$(z(AAfk|_%Z(J zEj9#rzh3b;9KRnl;oi7p(L%MJv@`*oquzxU?HSd4x2Uu*oznV?F z@%i`oW5++!F$=-OoZYBQk;F~H7(MTn_lMiMQ=i@s805T1CHTXmWNOHi8z-s&tQaci z%j;Tuf{Cdj=B_T^OYj(%s56@lB+e}iu&vIoii@jm{M-;c@xBgR7ZVAF4Zq-3{7@#T zFE`7pzgHF|uMfd#o5v z@Y@mQx8o%y{3Y2V%wB}?+N{V2o`hUnsmcr^;fiXH%JD=pJ=K+6vWvA{B;6Hk6}Q~{ z91>cte}rnXMDbQs2)z;ufwnyo8uDH)SIQt=(g1B-A8nj``+C%kUnhDUi5RSl>btVc zJUUyICA=7~RzI}8t;Ee#ZWgRmdt!#2U$?3)gxglPI%YGD{VE!}XDd5lI2e`RLjR5C z*eoSTe%YHU6&Z+cldWu{GTLy5@J-vkA-*Q|hM5cH)LY}&o2P!(^!UO_l`Jwv#Uo$A zN*e2HyFHUL{7Qkd_Beh1^elGtI!P87exqv?BKHD+ZDHk>vISLC;50T#{o252UqQ=m zy7#H@>e@@mJ5sK-xT=N7s)eMrwTxdU(iU9OG_=em4KqpIn&MOxNdweR-qt3C-CUn^ zH<@h|@DSCwMt>1bFFwA5)G<{RjeGaR#;<=B{rF(a&g1gL&wRYZfhIwL=jms9@T(Yk zeRmy4z~e&fx}y?_#$3BxOiZLU|I2eFGc+0kl-+3ldx1WGWsP_jebO7R;&C*0frD@^5n;R zgPD-sCd~w82srEK72bbn+#QjdtjS5i=(+ayd;d&J*@YQEfzLuqx2w`SN!lUar#p_R z48c$9@hkhe<0l^TZhKAA6oWks-c$-8c+INP_cD)9*9AUhHW6TpxnO~j7Ngs9k_&WL zKk(0wE{g_PAY2-yN{?*B3aywxK^H9;Pd?vM%^VL+b@{$zJ4>L8=TX0sq<+7}sAMh+ z1B-R7q7^@y|9oDMZfRM4j4aK);_UH~kS_WJgNm0X+@JH2x`85Y$YV@HlEzCf64Fvc zQT)Ril&bs)ZssqST++f+EIQPXinWI)4S%8YOQAM#0>y*0pnS+ls|s3w43Zt5 zHLQL}+~WVTW*T`}sK?&18qvN=HySdj6rcHhi@R-j>CPDlL#KTXJqh7$_l{4PwGW!L zf8cso!MOxdz5OKiz3|v}csX~@ioX*04-*GYDn%1!aiPV8Zbi`IFpJyslQFnQlGOK? zLnzqbgX`YAZH_-m+L;7V-mvN1hf%b)?v{tJQFd&*&3Ja>H+p$D-khqcS86Rqm37>x zmLxRFel~WSKPP75R8tDYqsZmxi#oBX@BYHG2tj&W=a$>hfLz(UCwzWMQlKUd-Yi2O z1CYm1${l$L;8?m@hM!GFAD=$jZJy z&AC~nhvt9nVpeUrSebD$R7mE^a(I2&nPtO`E<=^COqWubQL`(j4$9=tzSbt*e~wY) zwO8Fx)*FO2ZTpgEW=gOddDDXknm}78s%&l*0<+-UIjfP!f;cD;_#C$y_`2;!W1kEX z5vz*swwmf#Sh$0DWzK}V2!55-uvr2Ph(n9@OIrZ^54BhN-hB+^3;6in+wwqH6K^2` zMwJ0e?7a~@D@#J9MgZLFIxu#X+!G`ii z8>`x7;pD;m*nW#x`B%(D{sx>ewjVy`3p~MzVZy~K^z_+OX0*fhFBZ%$*6bqPz|a1Z zqL`|{ER2lg2V*)CAgMQ z^*`-!bw)iBVnV~;gLM|h2{QV4WajkqN4;OhW$-dZL;`;OM$4|Ld4J$Rd)@%08Hn<7 zTHnx%jwt!G5F!%7*VhY~!IacNQ0_ zLae-q9wh9Tb#IIM`I87_DyU#wCIScb*2ebO(azqA@!R|-Ov;RymcwttWFjmviY;nf zL_$^48waEjg^xwei(iMV%5MyYl{6EWCQU!R{*kZ^NA>&GZMUt1-43wJ%}-=$%gSR> z%*TWD#$%&R2;Uvmer@*$={2W=pexnOs>~2U-GUiKt zXDX@v%R8mUEiaFL%z!hL$gStASZ#AJZ^b{WGz{Tto$`mFEfU_g%~teYN_Xs^L-#Ny zjlANgRB)p}z3T^;4zbY&lWvbMs9gw$08J*tYir5M&J}Y1GnD+;4iaC22pQ<%<|iJ{ z1t~IsKU=1Mf~tu2hUH;@it!e-QcAm(eiuZ!ax>lbpWVS^2TI^c8+n!Qz!PP;g`L2-w8HL#?L7Vmg8K#GU#4`6v8^t+9#>+$8*8 z)^#A^!)wA#BL6L3w{&qd88SxV`GHgQ{Ug(NyUrNW*scNxQT=s zB+2lCkszm9Ifs3Lg+%!vHk|;Cl%0r!NhogBpg2*gI1yg|w|eZfSzOLH3YQNV`_)lf zd3j`5lMZP4*G>~Ne$CxYuYE!o7m5$zu-ydgks`gy6?qfpsMqg^j<}{pKhP*8Z2m6I zh`Z)_Tg|1VL=ihe=2pua9ZzceJWYM0PelZGe|fsQ*Y{eWus*wu9F;~!$7GWzjnyq3N>;|zD(%_!(~h-5c?D^9Y0mwt&@CtFeFF`HCF6kzRatYH+E5X+s_w;s8rl@}hCH^Iviap&8P=iB`7fn6RRoybxBwL0v=gZ1Th6&vauc zIXRrR<8IXY#aGj}nu}zgKE>H?J;Q`@@44;N7u3SB$ON@F0o@TXFlFO<>pjPXghRMy zOa8KkhRbMPqgX*>x0&_EH<_T~%zNSN;}b*>XmB<+{i{*8#>Zu$Gpdgub#*0zU<7+& zg!^BKM)%?`pcAb)pBOQ9q{QB4e4BuZn^Y%AHvaCBf+Xu^Ck|12cJN~>3E~8W#{y27 z&?2A&v=AmhT%g5mr1x>m#?jZ5U?Ee3H_N605 zA<~k*N^35PMqMLTiQYWd^EI)eLJ02059WVa?_agb$H<#3rAas>cwxbdiV^Zd+^d*f z8BJjr%``` z)C)=yOZmw(U&chgSaY#3h_o#|cH+*}zzmcait;bkGZvT92K_1~z|UCsFFn|NcLGt5 zHyu_%Q~jtaodFHz)5OoF6M(x$2ZvA|Kq5@4()si7*UqW`(*mG|;=jIsApn%3_3`v@ zG;Wjd4b^P*uGc)1ORZ<0yK-dsy6mH^;BEi(#z(v-(rLc9kdxqV%f>*UIKP~56%>NP zX5_ugD?rpqqApyIV3rmvi?`j_EO`zYKU&rb}$zfJrw3DDuUoJXAl{T9)r^) zJeP`aXms%1=hZDcz6&;}8i?zC>%Z$w(g2Z?9?!bVOxge~G`vf?&b*3%iSvn&6U$Jz z5~-?zqEk%VS`8A-wN^YT+yw26jJ%-fvX#l&M@bJ1H1`5UTpm{z-Vjkt76{loV2qz4 z_^Fk~il6z*x9;BPl2ed1A+!msNk}L+NcnRUe!%+=DK%#V;17O0)V;cvA6D47q4(c# z?*q;(W0W{`$2}3_|Z^!aWWdHg)@pJV<|4EozONq8K9CWy_ocBhStPZTs z?yH5EV;I7b5fSk$5U;I8R%a(N<+nkA5CzKC^9+bvt1r2B?Vam0K}1Pt3ma~4F2egw z1Hy?La8rH0U`t}TVhJzH!l=1-hU>±J!Y_@STR!E@E&bJTJpedy(keR>Rd^@NWm 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

    ?ZF0aPM;k-d`pXwV|nkKdJmcp2n^8QrCw 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 F{2y@E?w9}o diff --git a/doc/html/c++/pfuclt__omni__dataset_8cpp_source.html b/doc/html/c++/pfuclt__omni__dataset_8cpp_source.html index e00c37f..c279ae4 100644 --- a/doc/html/c++/pfuclt__omni__dataset_8cpp_source.html +++ b/doc/html/c++/pfuclt__omni__dataset_8cpp_source.html @@ -9,6 +9,7 @@

    @@ -28,39 +29,106 @@
    pfuclt_omni_dataset.cpp
    -Go to the documentation of this file.
    1 #include <pfuclt_omni_dataset/pfuclt_aux.h>
    2 #include <pfuclt_omni_dataset/pfuclt_particles.h>
    3 #include <pfuclt_omni_dataset/pfuclt_omni_dataset.h>
    4 #include <tf2/utils.h>
    5 
    6 #define ROS_TDIFF(t) (t.toSec() - timeInit.toSec())
    7 
    8 namespace pfuclt
    9 {
    10 int MY_ID;
    12 int NUM_ROBOTS; // total number of playing robots in the team including self
    13 int NUM_SENSORS_PER_ROBOT; // SENSORS include odometry, each feature sensor like
    14 // a ball detector, each landmark-set detector and so
    15 // on. In this case for example the number of sensors
    16 // are 3, 1-odometry, 1-orange ball, 1-landmarkset.
    17 // Usually this must co-incide with the number of
    18 // topics to which each robot is publishing its
    19 // sensed information.
    20 int NUM_TARGETS; // Number of targets being tracked. In omni dataset, only one
    21 // target exists for now: the orange ball. This may be improved
    22 // in future by adding the blue ball which can be seen the raw
    23 // footage of the dataset experiment
    24 int NUM_LANDMARKS = 10;
    25 std::vector<bool> PLAYING_ROBOTS; // indicate which robot(s) is(are) playing
    26 
    27 // Empirically obtained coefficients in the covariance expression. See (add
    28 // publications here)
    29 
    30 // coefficients for landmark observation covariance
    31 float K1, K2;
    32 
    33 // coefficients for target observation covariance
    34 float K3, K4, K5;
    35 
    36 float ROB_HT; // Fixed height of the robots above ground in meters
    37 
    38 // Initial 2D positons of the robot as obtained from the overhead ground truth
    39 // system. The order is OMNI1 OMNI2 OMNI3 OMNI4 and OMNI5. Notice OMNI2 is
    40 // initialized as 0,0 because the robot is absent from the dataset.
    41 std::vector<double> POS_INIT;
    42 
    44 
    45 bool USE_CUSTOM_VALUES = false; // If set to true via the parameter server, the
    46 // custom values will be used
    47 std::vector<double> CUSTOM_PARTICLE_INIT; // Used to set custom values when
    48 // initiating the particle filter set (will still be a uniform distribution)
    49 
    50 bool DEBUG;
    51 bool PUBLISH;
    52 
    53 // for ease of access
    54 std::vector<pfuclt_aux::Landmark> landmarks;
    55 ros::Time timeInit;
    56 
    57 // Method definitions
    58 
    59 RobotFactory::RobotFactory(ros::NodeHandle& nh) : nh_(nh)
    60 {
    61  ParticleFilter::PFinitData initData(nh, MY_ID, NUM_TARGETS, STATES_PER_ROBOT,
    62  MAX_ROBOTS, NUM_LANDMARKS, PLAYING_ROBOTS,
    63  landmarks);
    64 
    65  if (PUBLISH)
    66  pf = boost::shared_ptr<PFPublisher>(
    67  new PFPublisher(initData, PFPublisher::PublishData(ROB_HT)));
    68  else
    69  pf = boost::shared_ptr<ParticleFilter>(new ParticleFilter(initData));
    70 
    71  timeInit = ros::Time::now();
    72  ROS_INFO("Init time set to %f", timeInit.toSec());
    73 
    74  for (uint rn = 0; rn < MAX_ROBOTS; rn++)
    75  {
    76  if (PLAYING_ROBOTS[rn])
    77  {
    78  robots_.push_back(
    79  Robot_ptr(new Robot(nh_, this, pf->getPFReference(), rn)));
    80  }
    81  }
    82 }
    83 
    84 void RobotFactory::tryInitializeParticles()
    85 {
    86  if (!areAllRobotsActive())
    87  return;
    88 
    89  pf->init(CUSTOM_PARTICLE_INIT, POS_INIT);
    90 }
    91 
    92 void RobotFactory::initializeFixedLandmarks()
    93 {
    94  std::string filename;
    95  using namespace pfuclt_aux;
    96 
    97  // get the filename from parameter server
    98  if (!readParam<std::string>(nh_, "/LANDMARKS_CONFIG", filename))
    99  return;
    100 
    101  // parse the file and copy to vector of Landmarks
    102  landmarks = getLandmarks(filename.c_str());
    103  ROS_ERROR_COND(landmarks.empty(), "Couldn't open file \"%s\"",
    104  filename.c_str());
    105 
    106  ROS_ERROR_COND(landmarks.size() != NUM_LANDMARKS,
    107  "Read a number of landmarks different from the specified in "
    108  "NUM_LANDMARKS");
    109 
    110  // iterate over the vector and print information
    111  for (std::vector<Landmark>::iterator it = landmarks.begin();
    112  it != landmarks.end(); ++it)
    113  {
    114  ROS_INFO("A fixed landmark with ID %d at position {x=%.2f, y=%.2f} \twas "
    115  "created",
    116  it->serial, it->x, it->y);
    117  }
    118 }
    119 
    120 bool RobotFactory::areAllRobotsActive()
    121 {
    122  for (std::vector<Robot_ptr>::iterator it = robots_.begin();
    123  it != robots_.end(); ++it)
    124  {
    125  if (false == (*it)->hasStarted())
    126  return false;
    127  }
    128  return true;
    129 }
    130 
    131 void Robot::startNow()
    132 {
    133  timeStarted_ = ros::Time::now();
    134  started_ = true;
    135  ROS_INFO("OMNI%d has started %.2fs after the initial time", robotNumber_ + 1,
    136  ROS_TDIFF(timeStarted_));
    137 }
    138 
    139 Robot::Robot(ros::NodeHandle& nh, RobotFactory* parent, ParticleFilter* pf,
    140  uint robotNumber)
    141  : parent_(parent), pf_(pf), started_(false), robotNumber_(robotNumber)
    142 {
    143  std::string robotNamespace("/omni" +
    144  boost::lexical_cast<std::string>(robotNumber + 1));
    145 
    146  // Subscribe to topics
    147  sOdom_ = nh.subscribe<nav_msgs::Odometry>(
    148  robotNamespace + "/odometry", 10,
    149  boost::bind(&Robot::odometryCallback, this, _1));
    150 
    151  sBall_ = nh.subscribe<read_omni_dataset::BallData>(
    152  robotNamespace + "/orangeball3Dposition", 10,
    153  boost::bind(&Robot::targetCallback, this, _1));
    154 
    155  sLandmark_ = nh.subscribe<read_omni_dataset::LRMLandmarksData>(
    156  robotNamespace + "/landmarkspositions", 10,
    157  boost::bind(&Robot::landmarkDataCallback, this, _1));
    158 
    159  ROS_INFO("Created robot OMNI%d", robotNumber + 1);
    160 }
    161 
    162 void Robot::odometryCallback(const nav_msgs::Odometry::ConstPtr& odometry)
    163 {
    164  if (!started_)
    165  startNow();
    166 
    167  if (!pf_->isInitialized())
    168  parent_->tryInitializeParticles();
    169 
    170  pfuclt_ptcls::Odometry odomStruct;
    171  odomStruct.x = odometry->pose.pose.position.x;
    172  odomStruct.y = odometry->pose.pose.position.y;
    173  odomStruct.theta = tf2::getYaw(odometry->pose.pose.orientation);
    174 
    175  // ROS_DEBUG("OMNI%d odometry at time %d = {%f;%f;%f}", robotNumber_ + 1,
    176  // odometry->header.stamp.sec, odomStruct.x, odomStruct.y,
    177  // odomStruct.theta);
    178 
    179  // Call the particle filter predict step for this robot
    180  pf_->predict(robotNumber_, odomStruct, odometry->header.stamp);
    181 }
    182 
    183 void Robot::targetCallback(const read_omni_dataset::BallData::ConstPtr& target)
    184 {
    185  if (!started_)
    186  startNow();
    187 
    188  // If needed, modify here to if(true) to go over the target occlusion from the dataset
    189  if (target->found)
    190  {
    191  // ROS_DEBUG("OMNI%d ball data at time %d", robotNumber_ + 1,
    192  // target->header.stamp.sec);
    193 
    194  pfuclt_ptcls::TargetObservation obs;
    195 
    196  obs.found = true;
    197  obs.x = target->x;
    198  obs.y = target->y;
    199  obs.z = target->z;
    200  obs.d = Eigen::Vector2d(obs.x, obs.y).norm();
    201  obs.r = Eigen::Vector3d(obs.x, obs.y, obs.z).norm();
    202  obs.phi = atan2(target->y, target->x);
    203 
    204  // Auxiliary
    205  const double cos2p = pow(cos(obs.phi), 2);
    206  const double sin2p = pow(sin(obs.phi), 2);
    207  const double d2 = pow(obs.d, 2);
    208  const double r2 = pow(obs.r, 2);
    209 
    210  // 3D Model
    211  static const float ballRadius = 0.1;
    212  static const float ballr2 = pow(ballRadius, 2);
    213  obs.covDD = K3 * (r2 * sin2p / (2 * ballr2)) +
    214  K4 * (r2 * sin2p / (2 * (r2 - ballr2))) +
    215  K3 * K4 * (r2 * cos2p / (4 * ballr2 * (r2 - ballr2)));
    216  obs.covPP = K5 / (r2 - ballr2 * sin2p);
    217 
    218  // 2D Model
    219  // obs.covDD = (double)(1 / target->mismatchFactor) *
    220  // (K3 * obs.d + K4 * (obs.d * obs.d));
    221 
    222  // obs.covPP = K5 * (1 / (obs.d + 1));
    223 
    224  obs.covXX =
    225  cos2p * obs.covDD + sin2p * (d2 * obs.covPP + obs.covDD * obs.covPP);
    226  obs.covYY =
    227  sin2p * obs.covDD + cos2p * (d2 * obs.covPP + obs.covDD * obs.covPP);
    228 
    229  // Save this observation
    230  pf_->saveTargetObservation(robotNumber_, obs, target->header.stamp);
    231  }
    232  else
    233  {
    234  // ROS_DEBUG("OMNI%d didn't find the ball at time %d", robotNumber_ + 1,
    235  // target->header.stamp.sec);
    236 
    237  pf_->saveTargetObservation(robotNumber_, false);
    238  }
    239 
    240  pf_->saveAllTargetMeasurementsDone(robotNumber_);
    241 
    242  // If this is the "self robot", update the iteration time
    243  if (MY_ID == robotNumber_ + 1)
    244  pf_->updateTargetIterationTime(target->header.stamp);
    245 }
    246 
    247 void Robot::landmarkDataCallback(
    248  const read_omni_dataset::LRMLandmarksData::ConstPtr& landmarkData)
    249 {
    250  // ROS_DEBUG("OMNI%d landmark data at time %d", robotNumber_ + 1,
    251  // landmarkData->header.stamp.sec);
    252 
    253  bool heuristicsFound[NUM_LANDMARKS];
    254  for (int i = 0; i < NUM_LANDMARKS; i++)
    255  heuristicsFound[i] = landmarkData->found[i];
    256 
    257  float distances[NUM_LANDMARKS];
    258 
    259  // d = sqrt(x^2+y^2)
    260  for (int i = 0; i < NUM_LANDMARKS; i++)
    261  {
    262  distances[i] =
    263  pow((pow(landmarkData->x[i], 2) + pow(landmarkData->y[i], 2)), 0.5);
    264  }
    265 
    266  // Define heuristics if using custom values
    267  if (USE_CUSTOM_VALUES)
    268  {
    269  // Huristic 1. If I see only 8 and not 9.... then I cannot see 7
    270  if (landmarkData->found[8] && !landmarkData->found[9])
    271  heuristicsFound[7] = false;
    272 
    273  // Huristic 2. If I see only 9 and not 8.... then I cannot see 6
    274  if (!landmarkData->found[8] && landmarkData->found[9])
    275  heuristicsFound[6] = false;
    276 
    277  // Huristic 3. If I see both 8 and 9.... then there are 2 subcases
    278  if (landmarkData->found[8] && landmarkData->found[9])
    279  {
    280  // Huristic 3.1. If I am closer to 9.... then I cannot see 6
    281  if (distances[9] < distances[8])
    282  heuristicsFound[6] = false;
    283 
    284  // Huristic 3.2 If I am closer to 8.... then I cannot see 7
    285  if (distances[8] < distances[9])
    286  heuristicsFound[7] = false;
    287  }
    288 
    289  float heuristicsThresh[] = HEURISTICS_THRESH_DEFAULT;
    290 
    291  if (robotNumber_ == 0)
    292  {
    293  heuristicsThresh[4] = 6.5;
    294  heuristicsThresh[5] = 6.5;
    295  heuristicsThresh[8] = 6.5;
    296  heuristicsThresh[9] = 6.5;
    297  }
    298 
    299  else if (robotNumber_ == 2)
    300  {
    301  heuristicsThresh[4] = 6.5;
    302  heuristicsThresh[5] = 6.5;
    303  heuristicsThresh[8] = 6.5;
    304  heuristicsThresh[9] = 6.5;
    305  }
    306 
    307  else if (robotNumber_ == 3)
    308  {
    309  heuristicsThresh[4] = 6.5;
    310  heuristicsThresh[5] = 6.5;
    311  heuristicsThresh[8] = 6.5;
    312  heuristicsThresh[9] = 6.5;
    313  }
    314 
    315  else if (robotNumber_ == 4)
    316  {
    317  heuristicsThresh[4] = 3.5;
    318  heuristicsThresh[5] = 3.5;
    319  heuristicsThresh[8] = 3.5;
    320  heuristicsThresh[9] = 3.5;
    321  }
    322 
    323  // Set landmark as not found if distance to it is above a certain threshold
    324  for (int i = 0; i < NUM_LANDMARKS; i++)
    325  {
    326  if (distances[i] > heuristicsThresh[i])
    327  heuristicsFound[i] = false;
    328  }
    329  }
    330 
    331  // End of heuristics, below uses the array but just for convenience
    332 
    333  for (int i = 0; i < NUM_LANDMARKS; i++)
    334  {
    335 
    336  if (false == heuristicsFound[i])
    337  pf_->saveLandmarkObservation(robotNumber_, i, false);
    338 
    339  else
    340  {
    341  pfuclt_ptcls::LandmarkObservation obs;
    342  obs.found = true;
    343  obs.x = landmarkData->x[i];
    344  obs.y = landmarkData->y[i];
    345  obs.d = sqrt(obs.x * obs.x + obs.y * obs.y);
    346 
    347  // If needed, this hack goes over the dataset threshold distance
    348 // if (obs.d > 2.0)
    349 // {
    350 // pf_->saveLandmarkObservation(robotNumber_, i, false);
    351 // continue;
    352 // }
    353 
    354  obs.phi = atan2(obs.y, obs.x);
    355  obs.covDD =
    356  (K1 * fabs(1.0 - (landmarkData->AreaLandMarkActualinPixels[i] /
    357  landmarkData->AreaLandMarkExpectedinPixels[i]))) *
    358  (obs.d * obs.d);
    359  obs.covPP = NUM_LANDMARKS * K2 * (1 / (obs.d + 1));
    360  obs.covXX = pow(cos(obs.phi), 2) * obs.covDD +
    361  pow(sin(obs.phi), 2) *
    362  (pow(obs.d, 2) * obs.covPP + obs.covDD * obs.covPP);
    363  obs.covYY = pow(sin(obs.phi), 2) * obs.covDD +
    364  pow(cos(obs.phi), 2) *
    365  (pow(obs.d, 2) * obs.covPP + obs.covDD * obs.covPP);
    366 
    367  pf_->saveLandmarkObservation(robotNumber_, i, obs,
    368  landmarkData->header.stamp);
    369  }
    370  }
    371 
    372  pf_->saveAllLandmarkMeasurementsDone(robotNumber_);
    373 }
    374 
    375 // end of namespace
    376 }
    377 
    378 int main(int argc, char* argv[])
    379 {
    380 
    381  ros::init(argc, argv, "pfuclt_omni_dataset");
    382  ros::NodeHandle nh("~");
    383 
    384  using namespace pfuclt;
    385 
    386  // Parse input parameters
    387  // TODO Consider using a library for this
    388  if (argc > 2)
    389  {
    390  if (!strcmp(argv[2], "true"))
    391  {
    392  if (ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME,
    393  ros::console::levels::Debug))
    394  {
    395  ros::console::notifyLoggerLevelsChanged();
    396  }
    397 
    398  ROS_DEBUG("DEBUG mode set");
    399  DEBUG = true;
    400  }
    401  else
    402  DEBUG = false;
    403  }
    404  else
    405  DEBUG = false;
    406 
    407  if (argc > 4)
    408  {
    409  if (!strcmp(argv[4], "true"))
    410  {
    411  PUBLISH = true;
    412  ROS_INFO("Publish = true");
    413  }
    414  else
    415  PUBLISH = false;
    416  }
    417  else
    418  PUBLISH = false;
    419 
    420  // read parameters from param server
    421  using pfuclt_aux::readParam;
    422 
    423  readParam<int>(nh, "/MAX_ROBOTS", MAX_ROBOTS);
    424  readParam<float>(nh, "/ROB_HT", ROB_HT);
    425  readParam<int>(nh, "/NUM_TARGETS", NUM_TARGETS);
    426  readParam<int>(nh, "/NUM_LANDMARKS", NUM_LANDMARKS);
    427  readParam<float>(nh, "/LANDMARK_COV/K1", K1);
    428  readParam<float>(nh, "/LANDMARK_COV/K2", K2);
    429  readParam<float>(nh, "/LANDMARK_COV/K3", K3);
    430  readParam<float>(nh, "/LANDMARK_COV/K4", K4);
    431  readParam<float>(nh, "/LANDMARK_COV/K5", K5);
    432  readParam<bool>(nh, "/PLAYING_ROBOTS", PLAYING_ROBOTS);
    433  readParam<double>(nh, "/POS_INIT", POS_INIT);
    434  readParam<bool>(nh, "/USE_CUSTOM_VALUES", USE_CUSTOM_VALUES);
    435  readParam<int>(nh, "/MY_ID", MY_ID);
    436 
    437  uint total_size =
    438  MAX_ROBOTS * STATES_PER_ROBOT + NUM_TARGETS * STATES_PER_TARGET;
    439 
    440  readParam<double>(nh, "/CUSTOM_PARTICLE_INIT", CUSTOM_PARTICLE_INIT);
    441  if (CUSTOM_PARTICLE_INIT.size() != (total_size * 2))
    442  {
    443  ROS_ERROR("/CUSTOM_PARTICLE_INIT given but not of correct size - should "
    444  "have %d numbers and has %d",
    445  total_size * 2, (int)CUSTOM_PARTICLE_INIT.size());
    446  }
    447 
    448  ROS_INFO("Waiting for /clock");
    449  while (ros::Time::now().toSec() == 0)
    450  ;
    451  ROS_INFO("/clock message received");
    452 
    453  pfuclt::RobotFactory Factory(nh);
    454 
    456  {
    457  ROS_WARN("OMNI2 not present in dataset.");
    458  return 0;
    459  }
    460 
    461  Factory.initializeFixedLandmarks();
    462 
    463  ros::spin();
    464  return 0;
    465 }
    int main(int argc, char *argv[])
    +Go to the documentation of this file.
    4 #include <tf2/utils.h>
    5 
    6 #define ROS_TDIFF(t) (t.toSec() - timeInit.toSec())
    7 
    8 namespace pfuclt
    9 {
    10 int MY_ID;
    12 int NUM_ROBOTS; // total number of playing robots in the team including self
    13 int NUM_SENSORS_PER_ROBOT; // SENSORS include odometry, each feature sensor like
    14 // a ball detector, each landmark-set detector and so
    15 // on. In this case for example the number of sensors
    16 // are 3, 1-odometry, 1-orange ball, 1-landmarkset.
    17 // Usually this must co-incide with the number of
    18 // topics to which each robot is publishing its
    19 // sensed information.
    20 int NUM_TARGETS; // Number of targets being tracked. In omni dataset, only one
    21 // target exists for now: the orange ball. This may be improved
    22 // in future by adding the blue ball which can be seen the raw
    23 // footage of the dataset experiment
    24 int NUM_LANDMARKS = 10;
    25 std::vector<bool> PLAYING_ROBOTS; // indicate which robot(s) is(are) playing
    26 
    27 // Empirically obtained coefficients in the covariance expression. See (add
    28 // publications here)
    29 
    30 // coefficients for landmark observation covariance
    31 float K1, K2;
    32 
    33 // coefficients for target observation covariance
    34 float K3, K4, K5;
    35 
    36 float ROB_HT; // Fixed height of the robots above ground in meters
    37 
    38 // Initial 2D positons of the robot as obtained from the overhead ground truth
    39 // system. The order is OMNI1 OMNI2 OMNI3 OMNI4 and OMNI5. Notice OMNI2 is
    40 // initialized as 0,0 because the robot is absent from the dataset.
    41 std::vector<double> POS_INIT;
    42 
    44 
    45 bool USE_CUSTOM_VALUES = false; // If set to true via the parameter server, the
    46 // custom values will be used
    47 std::vector<double> CUSTOM_PARTICLE_INIT; // Used to set custom values when
    48 // initiating the particle filter set (will still be a uniform distribution)
    49 
    50 bool DEBUG;
    51 bool PUBLISH;
    52 
    53 // for ease of access
    54 std::vector<pfuclt_aux::Landmark> landmarks;
    55 ros::Time timeInit;
    56 
    57 // Method definitions
    58 
    59 RobotFactory::RobotFactory(ros::NodeHandle& nh) : nh_(nh)
    60 {
    61  ParticleFilter::PFinitData initData(nh, MY_ID, NUM_TARGETS, STATES_PER_ROBOT,
    62  MAX_ROBOTS, NUM_LANDMARKS, PLAYING_ROBOTS,
    63  landmarks);
    64 
    65  if (PUBLISH)
    66  pf = boost::shared_ptr<PFPublisher>(
    67  new PFPublisher(initData, PFPublisher::PublishData(ROB_HT)));
    68  else
    69  pf = boost::shared_ptr<ParticleFilter>(new ParticleFilter(initData));
    70 
    71  timeInit = ros::Time::now();
    72  ROS_INFO("Init time set to %f", timeInit.toSec());
    73 
    74  for (uint rn = 0; rn < MAX_ROBOTS; rn++)
    75  {
    76  if (PLAYING_ROBOTS[rn])
    77  {
    78  robots_.push_back(
    79  Robot_ptr(new Robot(nh_, this, pf->getPFReference(), rn)));
    80  }
    81  }
    82 }
    83 
    85 {
    86  if (!areAllRobotsActive())
    87  return;
    88 
    89  pf->init(CUSTOM_PARTICLE_INIT, POS_INIT);
    90 }
    91 
    93 {
    94  std::string filename;
    95  using namespace pfuclt_aux;
    96 
    97  // get the filename from parameter server
    98  if (!readParam<std::string>(nh_, "/LANDMARKS_CONFIG", filename))
    99  return;
    100 
    101  // parse the file and copy to vector of Landmarks
    102  landmarks = getLandmarks(filename.c_str());
    103  ROS_ERROR_COND(landmarks.empty(), "Couldn't open file \"%s\"",
    104  filename.c_str());
    105 
    106  ROS_ERROR_COND(landmarks.size() != NUM_LANDMARKS,
    107  "Read a number of landmarks different from the specified in "
    108  "NUM_LANDMARKS");
    109 
    110  // iterate over the vector and print information
    111  for (std::vector<Landmark>::iterator it = landmarks.begin();
    112  it != landmarks.end(); ++it)
    113  {
    114  ROS_INFO("A fixed landmark with ID %d at position {x=%.2f, y=%.2f} \twas "
    115  "created",
    116  it->serial, it->x, it->y);
    117  }
    118 }
    119 
    121 {
    122  for (std::vector<Robot_ptr>::iterator it = robots_.begin();
    123  it != robots_.end(); ++it)
    124  {
    125  if (false == (*it)->hasStarted())
    126  return false;
    127  }
    128  return true;
    129 }
    130 
    132 {
    133  timeStarted_ = ros::Time::now();
    134  started_ = true;
    135  ROS_INFO("OMNI%d has started %.2fs after the initial time", robotNumber_ + 1,
    136  ROS_TDIFF(timeStarted_));
    137 }
    138 
    139 Robot::Robot(ros::NodeHandle& nh, RobotFactory* parent, ParticleFilter* pf,
    140  uint robotNumber)
    141  : parent_(parent), pf_(pf), started_(false), robotNumber_(robotNumber)
    142 {
    143  std::string robotNamespace("/omni" +
    144  boost::lexical_cast<std::string>(robotNumber + 1));
    145 
    146  // Subscribe to topics
    147  sOdom_ = nh.subscribe<nav_msgs::Odometry>(
    148  robotNamespace + "/odometry", 10,
    149  boost::bind(&Robot::odometryCallback, this, _1));
    150 
    151  sBall_ = nh.subscribe<read_omni_dataset::BallData>(
    152  robotNamespace + "/orangeball3Dposition", 10,
    153  boost::bind(&Robot::targetCallback, this, _1));
    154 
    155  sLandmark_ = nh.subscribe<read_omni_dataset::LRMLandmarksData>(
    156  robotNamespace + "/landmarkspositions", 10,
    157  boost::bind(&Robot::landmarkDataCallback, this, _1));
    158 
    159  ROS_INFO("Created robot OMNI%d", robotNumber + 1);
    160 }
    161 
    162 void Robot::odometryCallback(const nav_msgs::Odometry::ConstPtr& odometry)
    163 {
    164  if (!started_)
    165  startNow();
    166 
    167  if (!pf_->isInitialized())
    169 
    170  pfuclt_ptcls::Odometry odomStruct;
    171  odomStruct.x = odometry->pose.pose.position.x;
    172  odomStruct.y = odometry->pose.pose.position.y;
    173  odomStruct.theta = tf2::getYaw(odometry->pose.pose.orientation);
    174 
    175  // ROS_DEBUG("OMNI%d odometry at time %d = {%f;%f;%f}", robotNumber_ + 1,
    176  // odometry->header.stamp.sec, odomStruct.x, odomStruct.y,
    177  // odomStruct.theta);
    178 
    179  // Call the particle filter predict step for this robot
    180  pf_->predict(robotNumber_, odomStruct, odometry->header.stamp);
    181 }
    182 
    183 void Robot::targetCallback(const read_omni_dataset::BallData::ConstPtr& target)
    184 {
    185  if (!started_)
    186  startNow();
    187 
    188  // If needed, modify here to if(true) to go over the target occlusion from the dataset
    189  if (target->found)
    190  {
    191  // ROS_DEBUG("OMNI%d ball data at time %d", robotNumber_ + 1,
    192  // target->header.stamp.sec);
    193 
    195 
    196  obs.found = true;
    197  obs.x = target->x;
    198  obs.y = target->y;
    199  obs.z = target->z;
    200  obs.d = Eigen::Vector2d(obs.x, obs.y).norm();
    201  obs.r = Eigen::Vector3d(obs.x, obs.y, obs.z).norm();
    202  obs.phi = atan2(target->y, target->x);
    203 
    204  // Auxiliary
    205  const double cos2p = pow(cos(obs.phi), 2);
    206  const double sin2p = pow(sin(obs.phi), 2);
    207  const double d2 = pow(obs.d, 2);
    208  const double r2 = pow(obs.r, 2);
    209 
    210  // 3D Model
    211  static const float ballRadius = 0.1;
    212  static const float ballr2 = pow(ballRadius, 2);
    213  obs.covDD = K3 * (r2 * sin2p / (2 * ballr2)) +
    214  K4 * (r2 * sin2p / (2 * (r2 - ballr2))) +
    215  K3 * K4 * (r2 * cos2p / (4 * ballr2 * (r2 - ballr2)));
    216  obs.covPP = K5 / (r2 - ballr2 * sin2p);
    217 
    218  // 2D Model
    219  // obs.covDD = (double)(1 / target->mismatchFactor) *
    220  // (K3 * obs.d + K4 * (obs.d * obs.d));
    221 
    222  // obs.covPP = K5 * (1 / (obs.d + 1));
    223 
    224  obs.covXX =
    225  cos2p * obs.covDD + sin2p * (d2 * obs.covPP + obs.covDD * obs.covPP);
    226  obs.covYY =
    227  sin2p * obs.covDD + cos2p * (d2 * obs.covPP + obs.covDD * obs.covPP);
    228 
    229  // Save this observation
    230  pf_->saveTargetObservation(robotNumber_, obs, target->header.stamp);
    231  }
    232  else
    233  {
    234  // ROS_DEBUG("OMNI%d didn't find the ball at time %d", robotNumber_ + 1,
    235  // target->header.stamp.sec);
    236 
    238  }
    239 
    241 
    242  // If this is the "self robot", update the iteration time
    243  if (MY_ID == robotNumber_ + 1)
    244  pf_->updateTargetIterationTime(target->header.stamp);
    245 }
    246 
    248  const read_omni_dataset::LRMLandmarksData::ConstPtr& landmarkData)
    249 {
    250  // ROS_DEBUG("OMNI%d landmark data at time %d", robotNumber_ + 1,
    251  // landmarkData->header.stamp.sec);
    252 
    253  bool heuristicsFound[NUM_LANDMARKS];
    254  for (int i = 0; i < NUM_LANDMARKS; i++)
    255  heuristicsFound[i] = landmarkData->found[i];
    256 
    257  float distances[NUM_LANDMARKS];
    258 
    259  // d = sqrt(x^2+y^2)
    260  for (int i = 0; i < NUM_LANDMARKS; i++)
    261  {
    262  distances[i] =
    263  pow((pow(landmarkData->x[i], 2) + pow(landmarkData->y[i], 2)), 0.5);
    264  }
    265 
    266  // Define heuristics if using custom values
    267  if (USE_CUSTOM_VALUES)
    268  {
    269  // Huristic 1. If I see only 8 and not 9.... then I cannot see 7
    270  if (landmarkData->found[8] && !landmarkData->found[9])
    271  heuristicsFound[7] = false;
    272 
    273  // Huristic 2. If I see only 9 and not 8.... then I cannot see 6
    274  if (!landmarkData->found[8] && landmarkData->found[9])
    275  heuristicsFound[6] = false;
    276 
    277  // Huristic 3. If I see both 8 and 9.... then there are 2 subcases
    278  if (landmarkData->found[8] && landmarkData->found[9])
    279  {
    280  // Huristic 3.1. If I am closer to 9.... then I cannot see 6
    281  if (distances[9] < distances[8])
    282  heuristicsFound[6] = false;
    283 
    284  // Huristic 3.2 If I am closer to 8.... then I cannot see 7
    285  if (distances[8] < distances[9])
    286  heuristicsFound[7] = false;
    287  }
    288 
    289  float heuristicsThresh[] = HEURISTICS_THRESH_DEFAULT;
    290 
    291  if (robotNumber_ == 0)
    292  {
    293  heuristicsThresh[4] = 6.5;
    294  heuristicsThresh[5] = 6.5;
    295  heuristicsThresh[8] = 6.5;
    296  heuristicsThresh[9] = 6.5;
    297  }
    298 
    299  else if (robotNumber_ == 2)
    300  {
    301  heuristicsThresh[4] = 6.5;
    302  heuristicsThresh[5] = 6.5;
    303  heuristicsThresh[8] = 6.5;
    304  heuristicsThresh[9] = 6.5;
    305  }
    306 
    307  else if (robotNumber_ == 3)
    308  {
    309  heuristicsThresh[4] = 6.5;
    310  heuristicsThresh[5] = 6.5;
    311  heuristicsThresh[8] = 6.5;
    312  heuristicsThresh[9] = 6.5;
    313  }
    314 
    315  else if (robotNumber_ == 4)
    316  {
    317  heuristicsThresh[4] = 3.5;
    318  heuristicsThresh[5] = 3.5;
    319  heuristicsThresh[8] = 3.5;
    320  heuristicsThresh[9] = 3.5;
    321  }
    322 
    323  // Set landmark as not found if distance to it is above a certain threshold
    324  for (int i = 0; i < NUM_LANDMARKS; i++)
    325  {
    326  if (distances[i] > heuristicsThresh[i])
    327  heuristicsFound[i] = false;
    328  }
    329  }
    330 
    331  // End of heuristics, below uses the array but just for convenience
    332 
    333  for (int i = 0; i < NUM_LANDMARKS; i++)
    334  {
    335 
    336  if (false == heuristicsFound[i])
    338 
    339  else
    340  {
    342  obs.found = true;
    343  obs.x = landmarkData->x[i];
    344  obs.y = landmarkData->y[i];
    345  obs.d = sqrt(obs.x * obs.x + obs.y * obs.y);
    346 
    347  // If needed, this hack goes over the dataset threshold distance
    348 // if (obs.d > 2.0)
    349 // {
    350 // pf_->saveLandmarkObservation(robotNumber_, i, false);
    351 // continue;
    352 // }
    353 
    354  obs.phi = atan2(obs.y, obs.x);
    355  obs.covDD =
    356  (K1 * fabs(1.0 - (landmarkData->AreaLandMarkActualinPixels[i] /
    357  landmarkData->AreaLandMarkExpectedinPixels[i]))) *
    358  (obs.d * obs.d);
    359  obs.covPP = NUM_LANDMARKS * K2 * (1 / (obs.d + 1));
    360  obs.covXX = pow(cos(obs.phi), 2) * obs.covDD +
    361  pow(sin(obs.phi), 2) *
    362  (pow(obs.d, 2) * obs.covPP + obs.covDD * obs.covPP);
    363  obs.covYY = pow(sin(obs.phi), 2) * obs.covDD +
    364  pow(cos(obs.phi), 2) *
    365  (pow(obs.d, 2) * obs.covPP + obs.covDD * obs.covPP);
    366 
    368  landmarkData->header.stamp);
    369  }
    370  }
    371 
    373 }
    374 
    375 // end of namespace
    376 }
    377 
    378 int main(int argc, char* argv[])
    379 {
    380 
    381  ros::init(argc, argv, "pfuclt_omni_dataset");
    382  ros::NodeHandle nh("~");
    383 
    384  using namespace pfuclt;
    385 
    386  // Parse input parameters
    387  // TODO Consider using a library for this
    388  if (argc > 2)
    389  {
    390  if (!strcmp(argv[2], "true"))
    391  {
    392  if (ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME,
    393  ros::console::levels::Debug))
    394  {
    395  ros::console::notifyLoggerLevelsChanged();
    396  }
    397 
    398  ROS_DEBUG("DEBUG mode set");
    399  DEBUG = true;
    400  }
    401  else
    402  DEBUG = false;
    403  }
    404  else
    405  DEBUG = false;
    406 
    407  if (argc > 4)
    408  {
    409  if (!strcmp(argv[4], "true"))
    410  {
    411  PUBLISH = true;
    412  ROS_INFO("Publish = true");
    413  }
    414  else
    415  PUBLISH = false;
    416  }
    417  else
    418  PUBLISH = false;
    419 
    420  // read parameters from param server
    421  using pfuclt_aux::readParam;
    422 
    423  readParam<int>(nh, "/MAX_ROBOTS", MAX_ROBOTS);
    424  readParam<float>(nh, "/ROB_HT", ROB_HT);
    425  readParam<int>(nh, "/NUM_TARGETS", NUM_TARGETS);
    426  readParam<int>(nh, "/NUM_LANDMARKS", NUM_LANDMARKS);
    427  readParam<float>(nh, "/LANDMARK_COV/K1", K1);
    428  readParam<float>(nh, "/LANDMARK_COV/K2", K2);
    429  readParam<float>(nh, "/LANDMARK_COV/K3", K3);
    430  readParam<float>(nh, "/LANDMARK_COV/K4", K4);
    431  readParam<float>(nh, "/LANDMARK_COV/K5", K5);
    432  readParam<bool>(nh, "/PLAYING_ROBOTS", PLAYING_ROBOTS);
    433  readParam<double>(nh, "/POS_INIT", POS_INIT);
    434  readParam<bool>(nh, "/USE_CUSTOM_VALUES", USE_CUSTOM_VALUES);
    435  readParam<int>(nh, "/MY_ID", MY_ID);
    436 
    437  uint total_size =
    439 
    440  readParam<double>(nh, "/CUSTOM_PARTICLE_INIT", CUSTOM_PARTICLE_INIT);
    441  if (CUSTOM_PARTICLE_INIT.size() != (total_size * 2))
    442  {
    443  ROS_ERROR("/CUSTOM_PARTICLE_INIT given but not of correct size - should "
    444  "have %d numbers and has %d",
    445  total_size * 2, (int)CUSTOM_PARTICLE_INIT.size());
    446  }
    447 
    448  ROS_INFO("Waiting for /clock");
    449  while (ros::Time::now().toSec() == 0)
    450  ;
    451  ROS_INFO("/clock message received");
    452 
    453  pfuclt::RobotFactory Factory(nh);
    454 
    456  {
    457  ROS_WARN("OMNI2 not present in dataset.");
    458  return 0;
    459  }
    460 
    461  Factory.initializeFixedLandmarks();
    462 
    463  ros::spin();
    464  return 0;
    465 }
    int main(int argc, char *argv[])
    + +
    #define HEURISTICS_THRESH_DEFAULT
    + +
    void saveLandmarkObservation(const uint robotNumber, const uint landmarkNumber, const LandmarkObservation obs, ros::Time stamp)
    saveLandmarkObservation - saves the landmark observation to a buffer of observations ...
    + +
    int NUM_SENSORS_PER_ROBOT
    - + +
    #define STATES_PER_ROBOT
    +
    #define STATES_PER_TARGET
    + + +
    Robot(ros::NodeHandle &nh, RobotFactory *parent, ParticleFilter *pf, uint robotNumber)
    Robot - constructor, creates a new Robot instance.
    +
    ros::NodeHandle & nh_
    + +
    bool USE_CUSTOM_VALUES
    +
    void startNow()
    startNow - starts the robot
    +
    void tryInitializeParticles()
    tryInitializeParticles - checks if every robot is started, and if so, will initiate the particle filt...
    + + +
    #define ROS_TDIFF(t)
    std::vector< pfuclt_aux::Landmark > landmarks
    +
    void landmarkDataCallback(const read_omni_dataset::LRMLandmarksData::ConstPtr &)
    landmarkDataCallback - event-driven function which should be called when new landmark data is receive...
    +
    bool isInitialized()
    isInitialized - simple interface to access private member initialized_
    +
    bool areAllRobotsActive()
    areAllTeammatesActive - uses each robot&#39;s public methods to check if they have started yet ...
    +
    The PFPublisher class - implements publishing for the ParticleFilter class using ROS.
    + +
    The PFinitData struct - provides encapsulation to the initial data necessary to construct a ParticleF...
    + + +
    void saveTargetObservation(const uint robotNumber, const TargetObservation obs, ros::Time stamp)
    saveTargetObservation - saves the target observation to a buffer of observations
    +
    struct pfuclt_ptcls::odometry_s Odometry
    std::vector< double > CUSTOM_PARTICLE_INIT
    +
    ros::Subscriber sOdom_
    +
    ros::Subscriber sBall_
    + + +
    ros::Subscriber sLandmark_
    +
    void odometryCallback(const nav_msgs::Odometry::ConstPtr &)
    odometryCallback - event-driven function which should be called when new odometry data is received ...
    + + + + + -
    std::vector< Landmark > getLandmarks(const char *filename)
    Definition: pfuclt_aux.cpp:7
    +
    void updateTargetIterationTime(ros::Time tRos)
    updateTargetIterationTime - the main robot should call this method after the target callback ...
    + +
    ros::Time timeInit
    - + + +
    The Robot class - Has the common variables and methods of all robots, and is the base class of any sp...
    +
    RobotFactory(ros::NodeHandle &nh)
    +
    void saveAllTargetMeasurementsDone(const uint robotNumber)
    saveAllTargetMeasurementsDone - call this function when all target measurements have been performed b...
    +
    boost::shared_ptr< Robot > Robot_ptr
    +
    void saveAllLandmarkMeasurementsDone(const uint robotNumber)
    saveAllLandmarkMeasurementsDone - call this function when all landmark measurements have been perform...
    +
    std::vector< Landmark > getLandmarks(const char *filename)
    getLandmarks - read landmark configuration from CSV file
    Definition: pfuclt_aux.cpp:7
    +
    RobotFactory * parent_
    +
    void predict(const uint robotNumber, const Odometry odom, const ros::Time stamp)
    predict - prediction step in the particle filter set with the received odometry
    + +
    std::vector< double > POS_INIT
    +
    ParticleFilter * pf_
    +
    The RobotFactory class - Creates and keeps information on the robot running the algorithm and its tea...
    +
    std::vector< bool > PLAYING_ROBOTS
    + + +
    bool readParam(ros::NodeHandle &nh, const std::string name, T &variable)
    readParam - reads and returns a parameter from the ROS parameter server
    Definition: pfuclt_aux.h:105
    + +
    void initializeFixedLandmarks()
    initializeFixedLandmarks - will get a filename from the parameter server, and use its information to ...
    +
    std::vector< Robot_ptr > robots_
    + +
    void targetCallback(const read_omni_dataset::BallData::ConstPtr &)
    targetCallBack - event-driven function which should be called when new target data is received ...
    + + +
    boost::shared_ptr< ParticleFilter > pf


    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:28
    diff --git a/doc/html/c++/pfuclt__omni__dataset_8h.html b/doc/html/c++/pfuclt__omni__dataset_8h.html new file mode 100644 index 0000000..a55fc79 --- /dev/null +++ b/doc/html/c++/pfuclt__omni__dataset_8h.html @@ -0,0 +1,153 @@ + +pfuclt_omni_dataset: pfuclt_omni_dataset.h File Reference + + + + + + + + +
    +
    + +
    +
    pfuclt_omni_dataset.h File Reference
    +
    +
    +
    #include <vector>
    +#include <algorithm>
    +#include <cstdio>
    +#include <fstream>
    +#include <string>
    +#include <ros/ros.h>
    +#include <nav_msgs/Odometry.h>
    +#include <read_omni_dataset/BallData.h>
    +#include <read_omni_dataset/LRMLandmarksData.h>
    +#include <Eigen/Core>
    +#include <Eigen/Geometry>
    +#include <boost/bind.hpp>
    +#include <boost/ref.hpp>
    +#include <boost/shared_ptr.hpp>
    +#include <pfuclt_omni_dataset/pfuclt_aux.h>
    +#include <pfuclt_omni_dataset/pfuclt_particles.h>
    +
    +Include dependency graph for pfuclt_omni_dataset.h:
    +
    +
    + + + + +
    +
    +This graph shows which files directly or indirectly include this file:
    +
    +
    + + + +
    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    class  pfuclt::Robot
     The Robot class - Has the common variables and methods of all robots, and is the base class of any specialized robots who may derive from it. Teammates should be instances of this class. More...
     
    class  pfuclt::RobotFactory
     The RobotFactory class - Creates and keeps information on the robot running the algorithm and its teammates. Is used as a middle-man between all robots. More...
     
    + + + +

    +Namespaces

     pfuclt
     
    + + + + + + + +

    +Macros

    #define HEURISTICS_THRESH_DEFAULT
     
    #define NUM_WEIGHT   1
     
    #define STATES_PER_ROBOT   3
     
    + + + +

    +Typedefs

    typedef boost::shared_ptr< Robot > pfuclt::Robot_ptr
     
    +

    Macro Definition Documentation

    + +
    +
    + + + + +
    #define HEURISTICS_THRESH_DEFAULT
    +
    +Value:
    { \
    2.5, 2.5, 2.5, 2.5, FLT_MAX, FLT_MAX, 3.5, 3.5, FLT_MAX, FLT_MAX \
    }
    +

    Definition at line 32 of file pfuclt_omni_dataset.h.

    + +
    +
    + +
    +
    + + + + +
    #define NUM_WEIGHT   1
    +
    + +

    Definition at line 30 of file pfuclt_omni_dataset.h.

    + +
    +
    + +
    +
    + + + + +
    #define STATES_PER_ROBOT   3
    +
    + +

    Definition at line 31 of file pfuclt_omni_dataset.h.

    + +
    +
    +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.map b/doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.map new file mode 100644 index 0000000..22f85b6 --- /dev/null +++ b/doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.md5 b/doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.md5 new file mode 100644 index 0000000..8a1d87a --- /dev/null +++ b/doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.md5 @@ -0,0 +1 @@ +6060fec0daceeb1bc35a7930a2010d16 \ No newline at end of file diff --git a/doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.png b/doc/html/c++/pfuclt__omni__dataset_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..53854518debe8e398a5b9f18b3843b6057a82900 GIT binary patch literal 4269 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 literal 0 HcmV?d00001 diff --git a/doc/html/c++/pfuclt__omni__dataset_8h__incl.map b/doc/html/c++/pfuclt__omni__dataset_8h__incl.map new file mode 100644 index 0000000..56db102 --- /dev/null +++ b/doc/html/c++/pfuclt__omni__dataset_8h__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/doc/html/c++/pfuclt__omni__dataset_8h__incl.md5 b/doc/html/c++/pfuclt__omni__dataset_8h__incl.md5 new file mode 100644 index 0000000..929948d --- /dev/null +++ b/doc/html/c++/pfuclt__omni__dataset_8h__incl.md5 @@ -0,0 +1 @@ +1d96058254e046dec12b686828cccca4 \ No newline at end of file diff --git a/doc/html/c++/pfuclt__omni__dataset_8h__incl.png b/doc/html/c++/pfuclt__omni__dataset_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..ce5971d7e4b3c5dfd18ae4dfdc2be6961e04aea8 GIT binary patch literal 161124 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%0Df1m2`k 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 literal 0 HcmV?d00001 diff --git a/doc/html/c++/pfuclt__omni__dataset_8h_source.html b/doc/html/c++/pfuclt__omni__dataset_8h_source.html new file mode 100644 index 0000000..3c11101 --- /dev/null +++ b/doc/html/c++/pfuclt__omni__dataset_8h_source.html @@ -0,0 +1,60 @@ + +pfuclt_omni_dataset: pfuclt_omni_dataset.h Source File + + + + + +

    + + + +
    +
    +
    pfuclt_omni_dataset.h
    +
    +
    +Go to the documentation of this file.
    1 // STL libraries
    2 #include <vector>
    3 #include <algorithm>
    4 #include <cstdio>
    5 #include <fstream>
    6 #include <string>
    7 
    8 // ROS message definitions
    9 #include <ros/ros.h>
    10 #include <nav_msgs/Odometry.h>
    11 #include <read_omni_dataset/BallData.h>
    12 #include <read_omni_dataset/LRMLandmarksData.h>
    13 
    14 // Eigen libraries
    15 #include <Eigen/Core>
    16 #include <Eigen/Geometry>
    17 
    18 // Boost libraries
    19 #include <boost/bind.hpp>
    20 #include <boost/ref.hpp>
    21 #include <boost/shared_ptr.hpp>
    22 
    23 // Auxiliary libraries
    26 
    27 namespace pfuclt
    28 {
    29 using namespace pfuclt_ptcls;
    30 #define NUM_WEIGHT 1
    31 #define STATES_PER_ROBOT 3
    32 #define HEURISTICS_THRESH_DEFAULT \
    33  { \
    34  2.5, 2.5, 2.5, 2.5, FLT_MAX, FLT_MAX, 3.5, 3.5, FLT_MAX, FLT_MAX \
    35  }
    36 
    37 // Forward declaration of classes
    38 class Robot;
    39 
    40 // useful typedefs
    41 typedef boost::shared_ptr<Robot> Robot_ptr;
    42 
    49 {
    50 
    51 private:
    52  ros::NodeHandle& nh_;
    53  std::vector<Robot_ptr> robots_;
    54 
    60  bool areAllRobotsActive();
    61 
    62 public:
    63  boost::shared_ptr<ParticleFilter> pf;
    64 
    65  RobotFactory(ros::NodeHandle& nh);
    66 
    71  void tryInitializeParticles();
    72 
    78  void initializeFixedLandmarks();
    79 };
    80 
    86 class Robot
    87 {
    88 protected:
    91  bool started_;
    92  ros::Time timeStarted_;
    93  ros::Subscriber sOdom_, sBall_, sLandmark_;
    95  Eigen::Isometry2d initPose_; // x y theta;
    96 
    100  void startNow();
    101 
    102 public:
    111  Robot(ros::NodeHandle& nh, RobotFactory* parent,
    112  ParticleFilter* pf, uint robotNumber);
    113 
    118  void odometryCallback(const nav_msgs::Odometry::ConstPtr&);
    119 
    124  void targetCallback(const read_omni_dataset::BallData::ConstPtr&);
    125 
    130  void
    131  landmarkDataCallback(const read_omni_dataset::LRMLandmarksData::ConstPtr&);
    132 
    137  bool hasStarted() { return started_; }
    138 };
    139 
    140 // end of namespace
    141 }
    bool hasStarted()
    hasStarted
    + +
    ros::Time timeStarted_
    + + +
    ros::NodeHandle & nh_
    +
    ros::Subscriber sOdom_
    + + +
    Eigen::Isometry2d initPose_
    +
    The Robot class - Has the common variables and methods of all robots, and is the base class of any sp...
    +
    boost::shared_ptr< Robot > Robot_ptr
    +
    RobotFactory * parent_
    + +
    ParticleFilter * pf_
    +
    The RobotFactory class - Creates and keeps information on the robot running the algorithm and its tea...
    +
    std::vector< Robot_ptr > robots_
    + +
    boost::shared_ptr< ParticleFilter > pf
    +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:28 +
    + + diff --git a/doc/html/c++/pfuclt__particles_8cpp.html b/doc/html/c++/pfuclt__particles_8cpp.html index 932a916..2c3c63e 100644 --- a/doc/html/c++/pfuclt__particles_8cpp.html +++ b/doc/html/c++/pfuclt__particles_8cpp.html @@ -9,6 +9,7 @@ @@ -31,7 +32,7 @@
    pfuclt_particles.cpp File Reference
    -
    #include <pfuclt_omni_dataset/pfuclt_particles.h>
    +
    #include <pfuclt_omni_dataset/pfuclt_particles.h>
    #include <ros/ros.h>
    #include <stdlib.h>
    #include <boost/random.hpp>
    @@ -52,6 +53,8 @@
    + +
    @@ -120,7 +123,7 @@

    Macro Definition Documentation


    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/pfuclt__particles_8cpp__incl.map b/doc/html/c++/pfuclt__particles_8cpp__incl.map index b629e2c..4021f19 100644 --- a/doc/html/c++/pfuclt__particles_8cpp__incl.map +++ b/doc/html/c++/pfuclt__particles_8cpp__incl.map @@ -1,2 +1,4 @@ + + diff --git a/doc/html/c++/pfuclt__particles_8cpp__incl.md5 b/doc/html/c++/pfuclt__particles_8cpp__incl.md5 index f4f8a3e..16542c9 100644 --- a/doc/html/c++/pfuclt__particles_8cpp__incl.md5 +++ b/doc/html/c++/pfuclt__particles_8cpp__incl.md5 @@ -1 +1 @@ -8f2fcbf42a49c5094d88b07f274aedea \ No newline at end of file +953953bbc41b8d5ee1a60f15b97a25ad \ No newline at end of file diff --git a/doc/html/c++/pfuclt__particles_8cpp__incl.png b/doc/html/c++/pfuclt__particles_8cpp__incl.png index b540a364963a3aa422a6e708f8a1be580c4c4fd6..c205de191ded71c2d922ef4855f347151d63227d 100644 GIT binary patch literal 162811 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

    -{6Gm3W|*{K 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� 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 Ee+-cg$^ZZW literal 59317 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 ZuH*msI#H6=~OyNAtu{sVfFOlbfB diff --git a/doc/html/c++/pfuclt__particles_8cpp_source.html b/doc/html/c++/pfuclt__particles_8cpp_source.html index 8fe9056..d1e76cf 100644 --- a/doc/html/c++/pfuclt__particles_8cpp_source.html +++ b/doc/html/c++/pfuclt__particles_8cpp_source.html @@ -9,6 +9,7 @@
    @@ -28,14 +29,142 @@
    pfuclt_particles.cpp
    -Go to the documentation of this file.
    1 #include <pfuclt_omni_dataset/pfuclt_particles.h>
    2 #include <ros/ros.h>
    3 #include <stdlib.h>
    4 #include <boost/random.hpp>
    5 #include <boost/foreach.hpp>
    6 #include <boost/thread/mutex.hpp>
    7 #include <angles/angles.h>
    8 #include <geometry_msgs/TransformStamped.h>
    9 #include <tf2_geometry_msgs/tf2_geometry_msgs.h>
    10 #include <tf2/LinearMath/Quaternion.h>
    11 #include <tf2/transform_datatypes.h>
    12 #include <geometry_msgs/PoseArray.h>
    13 #include <geometry_msgs/PoseStamped.h>
    14 #include <sensor_msgs/PointCloud.h>
    15 #include <visualization_msgs/Marker.h>
    16 #include <read_omni_dataset/read_omni_dataset.h> // defines version of messages
    17 
    18 //#define DONT_RESAMPLE true
    19 //#define DONT_FUSE_TARGET true
    20 //#define DONT_FUSE_ROBOTS true
    21 #define BROADCAST_TF_AND_POSES true
    22 #define PUBLISH_PTCLS true
    23 #define EVALUATE_TIME_PERFORMANCE true
    24 //#define RECONFIGURE_ALPHAS true
    25 
    26 namespace pfuclt_ptcls
    27 {
    28 
    29 ParticleFilter::ParticleFilter(struct PFinitData& data)
    30  : nh_(data.nh), mainRobotID_(data.mainRobotID - 1),
    31  nTargets_(data.nTargets), nStatesPerRobot_(data.statesPerRobot),
    32  nRobots_(data.nRobots),
    33  nSubParticleSets_(data.nTargets * STATES_PER_TARGET +
    34  data.nRobots * data.statesPerRobot + 1),
    35  nLandmarks_(data.nLandmarks), robotsUsed_(data.robotsUsed),
    36  landmarksMap_(data.landmarksMap),
    37  dynamicVariables_(data.nh, data.nRobots),
    38  iteration_oss(new std::ostringstream("")),
    39  nParticles_(dynamicVariables_.nParticles),
    40  particles_(nSubParticleSets_, subparticles_t(nParticles_)),
    41  seed_(time(0)), initialized_(false),
    42  bufLandmarkObservations_(
    43  data.nRobots, std::vector<LandmarkObservation>(data.nLandmarks)),
    44  bufTargetObservations_(data.nRobots),
    45  weightComponents_(data.nRobots, subparticles_t(nParticles_, 0.0)),
    46  state_(data.statesPerRobot, data.nRobots),
    47  targetIterationTime_(), odometryTime_(), iterationEvalTime_(), mutex_(),
    48  dynamicServer_(), O_TARGET(data.nRobots * data.statesPerRobot),
    49  O_WEIGHT(nSubParticleSets_ - 1), numberIterations(0),
    50  durationSum(ros::WallDuration(0))
    51 {
    52  ROS_INFO("Created particle filter with dimensions %d, %d",
    53  (int)particles_.size(), (int)particles_[0].size());
    54 
    55  // Bind dynamic reconfigure callback
    56  dynamic_reconfigure::Server<pfuclt_omni_dataset::DynamicConfig>::CallbackType
    57  callback;
    58  callback = boost::bind(&ParticleFilter::dynamicReconfigureCallback, this, _1);
    59  dynamicServer_.setCallback(callback);
    60 }
    61 
    62 void ParticleFilter::dynamicReconfigureCallback(
    63  pfuclt_omni_dataset::DynamicConfig& config)
    64 {
    65  // Skip first callback which is done automatically for some reason
    66  if (dynamicVariables_.firstCallback)
    67  {
    68  dynamicVariables_.firstCallback = false;
    69  return;
    70  }
    71 
    72  if (!initialized_)
    73  return;
    74 
    75  ROS_INFO("Dynamic Reconfigure Callback:\n\tparticles = "
    76  "%d\n\tresampling_percentage_to_keep = "
    77  "%f\n\tpredict_model_stddev = "
    78  "%f\n\tOMNI1_alpha=%s\n\tOMNI3_alpha=%s\n\tOMNI4_alpha=%s\n\tOMNI5_"
    79  "alpha=%s",
    80  config.particles,
    81  config.groups.resampling.percentage_to_keep,
    82  config.groups.target.predict_model_stddev,
    83  config.groups.alphas.OMNI1_alpha.c_str(),
    84  config.groups.alphas.OMNI3_alpha.c_str(),
    85  config.groups.alphas.OMNI4_alpha.c_str(),
    86  config.groups.alphas.OMNI5_alpha.c_str());
    87 
    88  // Resize particles and re-initialize the pf if value changed
    89  if (dynamicVariables_.nParticles != config.particles)
    90  {
    91  ROS_INFO("Resizing particles to %d and re-initializing the pf",
    92  config.particles);
    93 
    94  resize_particles(config.particles);
    95  nParticles_ = config.particles;
    96  }
    97 
    98  // Update with desired values
    99  dynamicVariables_.nParticles = config.particles;
    100  dynamicVariables_.resamplingPercentageToKeep =
    101  config.groups.resampling.percentage_to_keep;
    102  dynamicVariables_.targetRandStddev =
    103  config.groups.target.predict_model_stddev;
    104 
    105 // Alpha values updated only if using the original dataset
    106 #ifdef RECONFIGURE_ALPHAS
    107  dynamicVariables_.fill_alpha(0, config.groups.alphas.OMNI1_alpha);
    108  dynamicVariables_.fill_alpha(2, config.groups.alphas.OMNI3_alpha);
    109  dynamicVariables_.fill_alpha(3, config.groups.alphas.OMNI4_alpha);
    110  dynamicVariables_.fill_alpha(4, config.groups.alphas.OMNI5_alpha);
    111 #endif
    112 }
    113 
    114 void ParticleFilter::spreadTargetParticlesSphere(float particlesRatio,
    115  pdata_t center[3],
    116  float radius)
    117 {
    118  uint particlesToSpread = nParticles_ * particlesRatio;
    119 
    120  boost::random::uniform_real_distribution<> dist(-radius, radius);
    121 
    122  for (uint p = 0; p < particlesToSpread; ++p)
    123  {
    124  for (uint s = 0; s < STATES_PER_TARGET; ++s)
    125  particles_[O_TARGET + s][p] = center[s] + dist(seed_);
    126  }
    127 }
    128 
    129 void ParticleFilter::predictTarget()
    130 {
    131  *iteration_oss << "predictTarget() -> ";
    132 
    133  using namespace boost::random;
    134 
    135  // Random acceleration model
    136  normal_distribution<> targetAcceleration(TARGET_RAND_MEAN,
    137  dynamicVariables_.targetRandStddev);
    138 
    139  for (int p = 0; p < nParticles_; p++)
    140  {
    141  // Get random accelerations
    142  pdata_t accel[STATES_PER_TARGET] = { targetAcceleration(seed_),
    143  targetAcceleration(seed_),
    144  targetAcceleration(seed_) };
    145 
    146  // Use random acceleration model
    147  for (uint s = 0; s < STATES_PER_TARGET - 1; ++s)
    148  {
    149  particles_[O_TARGET + s][p] += 0.5 * accel[s] * pow(targetIterationTime_.diff, 2);
    150  }
    151  }
    152 }
    153 
    154 void ParticleFilter::fuseRobots()
    155 {
    156  *iteration_oss << "fuseRobots() -> ";
    157 
    158  // Save the latest observation time to be used when publishing
    159  savedLatestObservationTime_ = latestObservationTime_;
    160 
    161  // Keeps track of number of landmarks seen for each robot
    162  std::vector<uint> landmarksSeen(nRobots_, 0);
    163 
    164  // Will track the probability propagation based on the landmark observations
    165  // for each robot
    166  std::vector<subparticles_t> probabilities(nRobots_,
    167  subparticles_t(nParticles_, 1.0));
    168 
    169  // For every robot
    170  for (uint r = 0; r < nRobots_; ++r)
    171  {
    172  // If not used, skip
    173  if (false == robotsUsed_[r])
    174  continue;
    175 
    176  // Index offset for this robot in the particles vector
    177  uint o_robot = r * nStatesPerRobot_;
    178 
    179  // For every landmark
    180  for (uint l = 0; l < nLandmarks_; ++l)
    181  {
    182  // If landmark not seen, skip
    183  if (false == bufLandmarkObservations_[r][l].found)
    184  continue;
    185  else
    186  ++(landmarksSeen[r]);
    187 
    188  // Reference to the observation for easier access
    189  LandmarkObservation& m = bufLandmarkObservations_[r][l];
    190 
    191  // Observation in robot frame
    192  Eigen::Matrix<pdata_t, 2, 1> Zrobot(m.x, m.y);
    193 
    194  // Landmark in global frame
    195  Eigen::Matrix<pdata_t, 2, 1> LMglobal(landmarksMap_[l].x,
    196  landmarksMap_[l].y);
    197 
    198 #pragma omp parallel for
    199  for (uint p = 0; p < nParticles_; ++p)
    200  {
    201 
    202  // Robot pose <=> frame
    203  Eigen::Rotation2D<pdata_t> Rrobot(-particles_[o_robot + O_THETA][p]);
    204  Eigen::Matrix<pdata_t, 2, 1> Srobot(particles_[o_robot + O_X][p],
    205  particles_[o_robot + O_Y][p]);
    206 
    207  // Landmark to robot frame
    208  Eigen::Matrix<pdata_t, 2, 1> LMrobot = Rrobot * (LMglobal - Srobot);
    209 
    210  // Error in observation
    211  Eigen::Matrix<pdata_t, 2, 1> Zerr = LMrobot - Zrobot;
    212 
    213  // The values of interest to the particle weights
    214  // Note: using Eigen wasn't of particular interest here since it does
    215  // not allow for transposing a non-dynamic matrix
    216  float expArg = -0.5 * (Zerr(O_X) * Zerr(O_X) / m.covXX +
    217  Zerr(O_Y) * Zerr(O_Y) / m.covYY);
    218  float detValue = 1.0; // pow((2 * M_PI * m.covXX * m.covYY), -0.5);
    219 
    220  /*
    221  ROS_DEBUG_COND(
    222  p == 0,
    223  "OMNI%d's particle 0 is at {%f;%f;%f}, sees landmark %d with "
    224  "certainty %f%%, and error {%f;%f}",
    225  r + 1, particles_[o_robot + O_X][p], particles_[o_robot + O_Y][p],
    226  particles_[o_robot + O_THETA][p], l, 100 * (detValue * exp(expArg)),
    227  Zerr(0), Zerr(1));
    228  */
    229 
    230  // Update weight component for this robot and particular particle
    231  probabilities[r][p] *= detValue * exp(expArg);
    232  }
    233  }
    234  }
    235 
    236  // Reset weights, later will be multiplied by weightComponents of each robot
    237  resetWeights(1.0);
    238 
    239  // Duplicate particles
    240  particles_t dupParticles(particles_);
    241 
    242  for (uint r = 0; r < nRobots_; ++r)
    243  {
    244  // Again, if robot not used, skip
    245  if (false == robotsUsed_[r])
    246  continue;
    247 
    248  // Check that at least one landmark was seen, if not send warning
    249  // If seen use probabilities vector, if not keep using the previous
    250  // weightComponents for this robot
    251  if (0 == landmarksSeen[r])
    252  {
    253  ROS_WARN("In this iteration, OMNI%d didn't see any landmarks", r + 1);
    254 
    255  // weightComponent stays from previous iteration
    256  }
    257 
    258  else
    259  {
    260  weightComponents_[r] = probabilities[r];
    261  }
    262 
    263  // Index offset for this robot in the particles vector
    264  uint o_robot = r * nStatesPerRobot_;
    265 
    266  // Create a vector of indexes according to a descending order of the weights
    267  // components of robot r
    268  std::vector<uint> sorted = order_index<pdata_t>(weightComponents_[r], DESC);
    269 
    270  // For every particle
    271  for (uint p = 0; p < nParticles_; ++p)
    272  {
    273  // Re-order the particle subsets of this robot
    274  uint sort_index = sorted[p];
    275 
    276  // Copy this sub-particle set from dupParticles' sort_index particle
    277  copyParticle(particles_, dupParticles, p, sort_index, o_robot,
    278  o_robot + nStatesPerRobot_ - 1);
    279 
    280  // Update the particle weight (will get multiplied nRobots times and get a
    281  // lower value)
    282  particles_[O_WEIGHT][p] *= weightComponents_[r][sort_index];
    283  }
    284  }
    285 }
    286 
    287 void ParticleFilter::fuseTarget()
    288 {
    289  *iteration_oss << "fuseTarget() -> ";
    290 
    291  // If ball not seen by any robot, just skip all of this
    292  bool ballSeen = false;
    293  for (std::vector<TargetObservation>::iterator it =
    294  bufTargetObservations_.begin();
    295  it != bufTargetObservations_.end(); ++it)
    296  {
    297  if (it->found)
    298  {
    299  ballSeen = true;
    300  break;
    301  }
    302  }
    303 
    304  // Update ball state
    305  state_.target.seen = ballSeen;
    306 
    307  // exit if ball not seen by any robot
    308  if (!ballSeen)
    309  {
    310  *iteration_oss << "Ball not seen ->";
    311  return;
    312  }
    313  // If program is here, at least one robot saw the ball
    314 
    315  // Instance variables to be worked in the loops
    316  pdata_t maxTargetSubParticleWeight, totalWeight;
    317  uint m, p, mStar, r, o_robot;
    318  float expArg, detValue, Z[3], Zcap[3], Z_Zcap[3];
    319  TargetObservation* obs;
    320 
    321  // For every particle m in the particle set [1:M]
    322  for (m = 0; m < nParticles_; ++m)
    323  {
    324  // Keep track of the maximum contributed weight and that particle's index
    325  maxTargetSubParticleWeight = -1.0f;
    326  mStar = m;
    327 
    328 // Find the particle m* in the set [m:M] for which the weight contribution
    329 // by the target subparticle to the full weight is maximum
    330 #pragma omp parallel for private(p, r, o_robot, obs, expArg, detValue, Z, \
    331  Zcap, Z_Zcap)
    332  for (p = m; p < nParticles_; ++p)
    333  {
    334  // Vector with probabilities for each robot, starting at 0.0 in case the
    335  // robot hasn't seen the ball
    336  std::vector<pdata_t> probabilities(nRobots_, 0.0);
    337 
    338  // Observations of the target by all robots
    339  for (r = 0; r < nRobots_; ++r)
    340  {
    341  if (false == robotsUsed_[r] || false == bufTargetObservations_[r].found)
    342  continue;
    343 
    344  // Usefull variables
    345  obs = &bufTargetObservations_[r];
    346  o_robot = r * nStatesPerRobot_;
    347 
    348  // Observation model
    349  Z[0] = obs->x;
    350  Z[1] = obs->y;
    351  Z[2] = obs->z;
    352  Zcap[0] =
    353  (particles_[O_TARGET + O_TX][p] - particles_[o_robot + O_X][m]) *
    354  (cos(particles_[o_robot + O_THETA][m])) +
    355  (particles_[O_TARGET + O_TY][p] - particles_[o_robot + O_Y][m]) *
    356  (sin(particles_[o_robot + O_THETA][m]));
    357  Zcap[1] =
    358  -(particles_[O_TARGET + O_TX][p] - particles_[o_robot + O_X][m]) *
    359  (sin(particles_[o_robot + O_THETA][m])) +
    360  (particles_[O_TARGET + O_TY][p] - particles_[o_robot + O_Y][m]) *
    361  (cos(particles_[o_robot + O_THETA][m]));
    362  Zcap[2] = particles_[O_TARGET + O_TZ][p];
    363  Z_Zcap[0] = Z[0] - Zcap[0];
    364  Z_Zcap[1] = Z[1] - Zcap[1];
    365  Z_Zcap[2] = Z[2] - Zcap[2];
    366 
    367  expArg = -0.5 * (Z_Zcap[0] * Z_Zcap[0] / obs->covXX +
    368  Z_Zcap[1] * Z_Zcap[1] / obs->covYY +
    369  Z_Zcap[2] * Z_Zcap[2] / .04);
    370  detValue =
    371  1.0; // pow((2 * M_PI * obs->covXX * obs->covYY * 10.0), -0.5);
    372 
    373  // Probability value for this robot and this particle
    374  probabilities[r] = detValue * exp(expArg);
    375  }
    376 
    377  // Total weight contributed by this particle
    378  totalWeight =
    379  std::accumulate(probabilities.begin(), probabilities.end(), 0.0);
    380 
    381  // If the weight is the maximum as of now, update the maximum and set
    382  // particle p as mStar
    383  if (totalWeight > maxTargetSubParticleWeight)
    384  {
    385 // Swap particle m with m* so that the most relevant (in terms of
    386 // weight)
    387 // target subparticle is at the lowest indexes
    388 #pragma omp critical
    389  {
    390  if (totalWeight > maxTargetSubParticleWeight)
    391  {
    392  maxTargetSubParticleWeight = totalWeight;
    393  mStar = p;
    394  }
    395  }
    396  }
    397  }
    398 
    399  // Particle m* has been found, let's swap the subparticles
    400  for (uint i = 0; i < STATES_PER_TARGET; ++i)
    401  std::swap(particles_[O_TARGET + i][m], particles_[O_TARGET + i][mStar]);
    402 
    403  // Update the weight of this particle
    404  particles_[O_WEIGHT][m] *= maxTargetSubParticleWeight;
    405 
    406  // The target subparticles are now reordered according to their weight
    407  // contribution
    408 
    409  // printWeights("After fuseTarget(): ");
    410  }
    411 }
    412 
    413 void ParticleFilter::modifiedMultinomialResampler(uint startAt)
    414 {
    415  // Implementing a very basic resampler... a particle gets selected
    416  // proportional to its weight and startAt% of the top particles are kept
    417 
    418  particles_t duplicate(particles_);
    419 
    420  std::vector<pdata_t> cumulativeWeights(nParticles_);
    421  cumulativeWeights[0] = duplicate[O_WEIGHT][0];
    422 
    423  for (int par = 1; par < nParticles_; par++)
    424  {
    425  cumulativeWeights[par] =
    426  cumulativeWeights[par - 1] + duplicate[O_WEIGHT][par];
    427  }
    428 
    429  int startParticle = nParticles_ * startAt;
    430 
    431  // Robot particle resampling starts only at startParticle
    432  for (int par = startParticle; par < nParticles_; par++)
    433  {
    434  boost::random::uniform_real_distribution<> dist(0, 1);
    435  float randNo = dist(seed_);
    436 
    437  int m = 0;
    438  while (randNo > cumulativeWeights[m])
    439  m++;
    440 
    441  copyParticle(particles_, duplicate, par, m, 0, O_TARGET - 1);
    442  }
    443 
    444  // Target resampling is done for all particles
    445  for (int par = 0; par < nParticles_; par++)
    446  {
    447  boost::random::uniform_real_distribution<> dist(0, 1);
    448  float randNo = dist(seed_);
    449 
    450  int m = 0;
    451  while (randNo > cumulativeWeights[m])
    452  m++;
    453 
    454  copyParticle(particles_, duplicate, par, m, O_TARGET,
    455  nSubParticleSets_ - 1);
    456  }
    457 
    458  // ROS_DEBUG("End of modifiedMultinomialResampler()");
    459 }
    460 
    461 void ParticleFilter::resample()
    462 {
    463  *iteration_oss << "resample() -> ";
    464 
    465  for (uint r = 0; r < nRobots_; ++r)
    466  {
    467  if (false == robotsUsed_[r])
    468  continue;
    469 
    470  uint o_robot = r * nStatesPerRobot_;
    471 
    472  pdata_t stdX = pfuclt_aux::calc_stdDev<pdata_t>(particles_[o_robot + O_X]);
    473  pdata_t stdY = pfuclt_aux::calc_stdDev<pdata_t>(particles_[o_robot + O_Y]);
    474  pdata_t stdTheta =
    475  pfuclt_aux::calc_stdDev<pdata_t>(particles_[o_robot + O_THETA]);
    476 
    477  state_.robots[r].conf = 1 / (stdX + stdY + stdTheta);
    478 
    479  // ROS_DEBUG("OMNI%d stdX = %f, stdY = %f, stdTheta = %f", r + 1, stdX,
    480  // stdY,
    481  // stdTheta);
    482  }
    483 
    484  // Calc. sum of weights
    485  pdata_t weightSum = std::accumulate(particles_[O_WEIGHT].begin(),
    486  particles_[O_WEIGHT].end(), 0.0);
    487 
    488  // ROS_DEBUG("WeightSum before resampling = %f", weightSum);
    489 
    490  // printWeights("before resampling: ");
    491 
    492  if (weightSum < MIN_WEIGHTSUM)
    493  {
    494  ROS_WARN("Zero weightsum - returning without resampling");
    495 
    496  // Print iteration and state information
    497  *iteration_oss << "FAIL! -> ";
    498 
    499  converged_ = false;
    500  resetWeights(1.0 / nParticles_);
    501  return;
    502  }
    503 
    504  converged_ = true;
    505 
    506  // All resamplers use normalized weights
    507  for (uint p = 0; p < nParticles_; ++p)
    508  particles_[O_WEIGHT][p] = particles_[O_WEIGHT][p] / weightSum;
    509 
    510  modifiedMultinomialResampler(dynamicVariables_.resamplingPercentageToKeep /
    511  100.0);
    512 
    513  // printWeights("after resampling: ");
    514 }
    515 
    516 void ParticleFilter::estimate()
    517 {
    518  *iteration_oss << "estimate() -> ";
    519 
    520  pdata_t weightSum = std::accumulate(particles_[O_WEIGHT].begin(),
    521  particles_[O_WEIGHT].end(), 0.0);
    522 
    523  // ROS_DEBUG("WeightSum when estimating = %f", weightSum);
    524 
    525  subparticles_t normalizedWeights(particles_[O_WEIGHT]);
    526 
    527  // Normalize the weights
    528  for (uint p = 0; p < nParticles_; ++p)
    529  normalizedWeights[p] = normalizedWeights[p] / weightSum;
    530 
    531  if (weightSum < MIN_WEIGHTSUM)
    532  {
    533  *iteration_oss << "DONE without estimating!";
    534 
    535  // Increase standard deviation for target prediction
    536  if (dynamicVariables_.targetRandStddev != TARGET_RAND_STDDEV_LOST)
    537  {
    538  dynamicVariables_.oldTargetRandSTddev =
    539  dynamicVariables_.targetRandStddev;
    540  dynamicVariables_.targetRandStddev = TARGET_RAND_STDDEV_LOST;
    541  }
    542 
    543  // Don't estimate
    544  return;
    545  }
    546 
    547  // Return (if necessary) to old target prediction model stddev
    548  if(dynamicVariables_.targetRandStddev != dynamicVariables_.oldTargetRandSTddev)
    549  dynamicVariables_.targetRandStddev = dynamicVariables_.oldTargetRandSTddev;
    550 
    551  // For each robot
    552  for (uint r = 0; r < nRobots_; ++r)
    553  {
    554  // If the robot isn't playing, skip it
    555  if (false == robotsUsed_[r])
    556  continue;
    557 
    558  uint o_robot = r * nStatesPerRobot_;
    559 
    560  // A vector of weighted means that will be calculated in the next loop
    561  std::vector<double> weightedMeans(nStatesPerRobot_ - 1, 0.0);
    562 
    563  // For theta we will obtain the mean of circular quantities, by converting
    564  // to cartesian coordinates, placing each angle in the unit circle,
    565  // averaging these points and finally converting again to polar
    566  double weightedMeanThetaCartesian[2] = { 0, 0 };
    567 
    568  // ..and each particle
    569  for (uint p = 0; p < nParticles_; ++p)
    570  {
    571  // Accumulate the state proportionally to the particle's normalized weight
    572  for (uint g = 0; g < nStatesPerRobot_ - 1; ++g)
    573  {
    574  weightedMeans[g] += particles_[o_robot + g][p] * normalizedWeights[p];
    575  }
    576 
    577  // Mean of circular quantities for theta
    578  weightedMeanThetaCartesian[O_X] +=
    579  cos(particles_[o_robot + O_THETA][p]) * normalizedWeights[p];
    580  weightedMeanThetaCartesian[O_Y] +=
    581  sin(particles_[o_robot + O_THETA][p]) * normalizedWeights[p];
    582  }
    583 
    584  // Put the angle back in polar coordinates
    585  double weightedMeanThetaPolar =
    586  atan2(weightedMeanThetaCartesian[O_Y], weightedMeanThetaCartesian[O_X]);
    587 
    588  // Save in the robot state
    589  // Can't use easy copy since one is using double precision
    590  state_.robots[r].pose[O_X] = weightedMeans[O_X];
    591  state_.robots[r].pose[O_Y] = weightedMeans[O_Y];
    592  state_.robots[r].pose[O_THETA] = weightedMeanThetaPolar;
    593  }
    594 
    595  // Target weighted means
    596  std::vector<double> targetWeightedMeans(STATES_PER_TARGET, 0.0);
    597 
    598  // For each particle
    599  for (uint p = 0; p < nParticles_; ++p)
    600  {
    601  for (uint t = 0; t < STATES_PER_TARGET; ++t)
    602  {
    603  targetWeightedMeans[t] +=
    604  particles_[O_TARGET + t][p] * normalizedWeights[p];
    605  }
    606  }
    607 
    608  // Update position
    609  // Can't use easy copy since one is using double precision
    610  state_.target.pos[O_TX] = targetWeightedMeans[O_TX];
    611  state_.target.pos[O_TY] = targetWeightedMeans[O_TY];
    612  state_.target.pos[O_TZ] = targetWeightedMeans[O_TZ];
    613 
    614  *iteration_oss << "DONE!";
    615 }
    616 
    617 void ParticleFilter::printWeights(std::string pre)
    618 {
    619  std::ostringstream debug;
    620  debug << "Weights " << pre;
    621  for (uint i = 0; i < nParticles_; ++i)
    622  debug << particles_[O_WEIGHT][i] << " ";
    623 
    624  ROS_DEBUG("%s", debug.str().c_str());
    625 }
    626 
    627 // TODO set different values for position and orientation, targets, etc
    628 // Simple version, use default values - randomize all values between [-10,10]
    629 void ParticleFilter::init()
    630 {
    631  if (initialized_)
    632  return;
    633 
    634  int lvalue = -10;
    635  int rvalue = 10;
    636 
    637  std::vector<double> defRand((nSubParticleSets_ - 1) * 2);
    638 
    639  for (int i = 0; i < defRand.size(); i += 2)
    640  {
    641  defRand[i] = lvalue;
    642  defRand[i + 1] = rvalue;
    643  }
    644 
    645  std::vector<double> defPos((nRobots_ * 2), 0.0);
    646 
    647  // Call the custom function with these values
    648  init(defRand, defPos);
    649 }
    650 
    651 // Overloaded function when using custom values
    652 void ParticleFilter::init(const std::vector<double>& customRandInit,
    653  const std::vector<double>& customPosInit)
    654 {
    655  if (initialized_)
    656  return;
    657 
    658  // Set flag
    659  initialized_ = true;
    660 
    661  bool flag_theta_given = (customPosInit.size() == nRobots_ * 3 &&
    662  customRandInit.size() == nSubParticleSets_ * 3);
    663  size_t numVars =
    664  flag_theta_given ? customRandInit.size() / 3 : customRandInit.size() / 2;
    665 
    666  ROS_INFO("Initializing particle filter");
    667 
    668  // For all subparticle sets except the particle weights
    669  for (int i = 0; i < numVars; ++i)
    670  {
    671  ROS_DEBUG("Values for distribution: %.4f %.4f", customRandInit[2 * i],
    672  customRandInit[2 * i + 1]);
    673 
    674  boost::random::uniform_real_distribution<> dist(customRandInit[2 * i],
    675  customRandInit[2 * i + 1]);
    676 
    677  // Sample a value from the uniform distribution for each particle
    678  for (uint p = 0; p < nParticles_; ++p)
    679  particles_[i][p] = dist(seed_);
    680  }
    681 
    682  // Particle weights init with same weight (1/nParticles)
    683  resetWeights(1.0 / nParticles_);
    684 
    685  // Initialize pose with initial belief
    686  for (uint r = 0; r < nRobots_; ++r)
    687  {
    688  pdata_t tmp[] = { customPosInit[2 * r + O_X], customPosInit[2 * r + O_Y],
    689  -M_PI };
    690  state_.robots[r].pose = std::vector<pdata_t>(tmp, tmp + nStatesPerRobot_);
    691  if (flag_theta_given)
    692  state_.robots[r].pose.push_back(customPosInit[2 * r + O_THETA]);
    693  }
    694 
    695  // State should have the initial belief
    696 
    697  ROS_INFO("Particle filter initialized");
    698 }
    699 
    700 void ParticleFilter::predict(const uint robotNumber, const Odometry odom,
    701  const ros::Time stamp)
    702 {
    703  if (!initialized_)
    704  return;
    705 
    706  *iteration_oss << "predict(OMNI" << robotNumber + 1 << ") -> ";
    707 
    708 #ifdef EVALUATE_TIME_PERFORMANCE
    709  // If this is the main robot, update the odometry time
    710  if (mainRobotID_ == robotNumber)
    711  {
    712  odometryTime_.updateTime(ros::WallTime::now());
    713  iterationEvalTime_ = ros::WallTime::now();
    714  }
    715 #endif
    716 
    717  using namespace boost::random;
    718 
    719  // Variables concerning this robot specifically
    720  int robot_offset = robotNumber * nStatesPerRobot_;
    721  std::vector<float>& alpha = dynamicVariables_.alpha[robotNumber];
    722 
    723  // Determining the propagation of the robot state through odometry
    724  pdata_t deltaRot = atan2(odom.y, odom.x);
    725  pdata_t deltaTrans = sqrt(odom.x * odom.x + odom.y * odom.y);
    726  pdata_t deltaFinalRot = odom.theta - deltaRot;
    727 
    728  // Create an error model based on a gaussian distribution
    729  normal_distribution<> deltaRotEffective(deltaRot, alpha[0] * fabs(deltaRot) +
    730  alpha[1] * deltaTrans);
    731 
    732  normal_distribution<> deltaTransEffective(
    733  deltaTrans,
    734  alpha[2] * deltaTrans + alpha[3] * fabs(deltaRot + deltaFinalRot));
    735 
    736  normal_distribution<> deltaFinalRotEffective(
    737  deltaFinalRot, alpha[0] * fabs(deltaFinalRot) + alpha[1] * deltaTrans);
    738 
    739  for (int i = 0; i < nParticles_; i++)
    740  {
    741  // Rotate to final position
    742  particles_[O_THETA + robot_offset][i] += deltaRotEffective(seed_);
    743 
    744  pdata_t sampleTrans = deltaTransEffective(seed_);
    745 
    746  // Translate to final position
    747  particles_[O_X + robot_offset][i] +=
    748  sampleTrans * cos(particles_[O_THETA + robot_offset][i]);
    749  particles_[O_Y + robot_offset][i] +=
    750  sampleTrans * sin(particles_[O_THETA + robot_offset][i]);
    751 
    752  // Rotate to final position and normalize angle
    753  particles_[O_THETA + robot_offset][i] = angles::normalize_angle(
    754  particles_[O_THETA + robot_offset][i] + deltaFinalRotEffective(seed_));
    755  }
    756 
    757  // Check if we should activate robotRandom
    758  // Only if no landmarks and no target seen
    759  uint nLandmarksSeen = 0;
    760  for (std::vector<LandmarkObservation>::iterator it =
    761  bufLandmarkObservations_[robotNumber].begin();
    762  it != bufLandmarkObservations_[robotNumber].end(); ++it)
    763  {
    764  if (it->found)
    765  nLandmarksSeen++;
    766  }
    767 
    768  if (nLandmarksSeen == 0 && !bufTargetObservations_[robotNumber].found)
    769  {
    770  // Randomize a bit for this robot since it does not see landmarks and target
    771  // isn't seen
    772  boost::random::uniform_real_distribution<> randPar(-0.05, 0.05);
    773 
    774  for (uint p = 0; p < nParticles_; ++p)
    775  {
    776  for (uint s = 0; s < nStatesPerRobot_; ++s)
    777  particles_[robot_offset + s][p] += randPar(seed_);
    778  }
    779  }
    780 
    781  // If this is the main robot, perform one PF-UCLT iteration
    782  if (mainRobotID_ == robotNumber)
    783  {
    784  // Lock mutex
    785  boost::mutex::scoped_lock(mutex_);
    786 
    787  // All the PF-UCLT steps
    788  predictTarget();
    789 
    790 #ifndef DONT_FUSE_ROBOTS
    791  fuseRobots();
    792 #endif
    793 
    794 #ifndef DONT_FUSE_TARGET
    795  fuseTarget();
    796 #endif
    797 
    798 #ifndef DONT_RESAMPLE
    799  resample();
    800 #endif
    801 
    802  estimate();
    803 
    804 #ifdef EVALUATE_TIME_PERFORMANCE
    805  ROS_INFO("(WALL TIME) Odometry analyzed with = %fms",
    806  1e3 * odometryTime_.diff);
    807 
    808  deltaIteration_ = ros::WallTime::now() - iterationEvalTime_;
    809  if (deltaIteration_ > maxDeltaIteration_)
    810  maxDeltaIteration_ = deltaIteration_;
    811 
    812  durationSum += deltaIteration_;
    813  numberIterations++;
    814 
    815  ROS_INFO_STREAM("(WALL TIME) Iteration time: "
    816  << 1e-6 * deltaIteration_.toNSec() << "ms ::: Worst case: "
    817  << 1e-6 * maxDeltaIteration_.toNSec() << "ms ::: Average: "
    818  << 1e-6 * (durationSum.toNSec() / numberIterations) << "s");
    819 #endif
    820 
    821  // ROS_DEBUG("Iteration: %s", iteration_oss->str().c_str());
    822  // Clear ostringstream
    823  iteration_oss->str("");
    824  iteration_oss->clear();
    825 
    826  // Start next iteration
    827  nextIteration();
    828  }
    829 }
    830 
    831 void ParticleFilter::saveAllLandmarkMeasurementsDone(const uint robotNumber)
    832 {
    833  *iteration_oss << "allLandmarks(OMNI" << robotNumber + 1 << ") -> ";
    834 }
    835 
    836 void ParticleFilter::saveAllTargetMeasurementsDone(const uint robotNumber)
    837 {
    838  *iteration_oss << "allTargets(OMNI" << robotNumber + 1 << ") -> ";
    839 }
    840 
    841 PFPublisher::PFPublisher(struct ParticleFilter::PFinitData& data,
    842  struct PublishData publishData)
    843  : ParticleFilter(data), pubData(publishData),
    844  robotBroadcasters(data.nRobots), particleStdPublishers_(data.nRobots),
    845  robotGTPublishers_(data.nRobots), robotEstimatePublishers_(data.nRobots)
    846 {
    847  // Prepare particle message
    848  resize_particles(nParticles_);
    849 
    850  // Subscribe to GT data
    851  GT_sub_ = nh_.subscribe<read_omni_dataset::LRMGTData>(
    852  "/gtData_4robotExp", 10,
    853  boost::bind(&PFPublisher::gtDataCallback, this, _1));
    854 
    855  // Other publishers
    856  estimatePublisher_ =
    857  nh_.advertise<read_omni_dataset::Estimate>("/pfuclt_estimate", 100);
    858  particlePublisher_ =
    859  nh_.advertise<pfuclt_omni_dataset::particles>("/pfuclt_particles", 10);
    860 
    861  // Rviz visualization publishers
    862  // Target
    863  targetEstimatePublisher_ =
    864  nh_.advertise<geometry_msgs::PointStamped>("/target/estimatedPose", 1000);
    865  targetGTPublisher_ =
    866  nh_.advertise<geometry_msgs::PointStamped>("/target/gtPose", 1000);
    867  targetParticlePublisher_ =
    868  nh_.advertise<sensor_msgs::PointCloud>("/target/particles", 10);
    869 
    870  // target observations publisher
    871  targetObservationsPublisher_ =
    872  nh_.advertise<visualization_msgs::Marker>("/targetObservations", 100);
    873 
    874  // Robots
    875  for (uint r = 0; r < nRobots_; ++r)
    876  {
    877  std::ostringstream robotName;
    878  robotName << "omni" << r + 1;
    879 
    880  // particle publisher
    881  particleStdPublishers_[r] = nh_.advertise<geometry_msgs::PoseArray>(
    882  "/" + robotName.str() + "/particles", 1000);
    883 
    884  // estimated state
    885  robotEstimatePublishers_[r] = nh_.advertise<geometry_msgs::PoseStamped>(
    886  "/" + robotName.str() + "/estimatedPose", 1000);
    887 
    888  // build estimate msg
    889  msg_estimate_.robotEstimates.push_back(geometry_msgs::Pose());
    890  msg_estimate_.targetVisibility.push_back(false);
    891 
    892 // ground truth publisher, in the simulation package we have PoseStamped
    893 #ifndef USE_NEWER_READ_OMNI_PACKAGE
    894  robotGTPublishers_[r] = nh_.advertise<geometry_msgs::PointStamped>(
    895  "/" + robotName.str() + "/gtPose", 1000);
    896 #else
    897  robotGTPublishers_[r] = nh_.advertise<geometry_msgs::PoseStamped>(
    898  "/" + robotName.str() + "/gtPose", 1000);
    899 #endif
    900  }
    901 
    902  ROS_INFO("It's a publishing particle filter!");
    903 }
    904 
    905 void PFPublisher::publishParticles()
    906 {
    907  // The eval package would rather have the particles in the format
    908  // particle->subparticle instead, so we have to inverse it
    909  for (uint p = 0; p < nParticles_; ++p)
    910  {
    911  for (uint s = 0; s < nSubParticleSets_; ++s)
    912  {
    913  msg_particles_.particles[p].particle[s] = particles_[s][p];
    914  }
    915  }
    916 
    917  // Send it!
    918  particlePublisher_.publish(msg_particles_);
    919 
    920 #ifdef PUBLISH_PTCLS
    921  // Also send as a series of PoseArray messages for each robot
    922  for (uint r = 0; r < nRobots_; ++r)
    923  {
    924  if (false == robotsUsed_[r])
    925  continue;
    926 
    927  uint o_robot = r * nStatesPerRobot_;
    928  geometry_msgs::PoseArray msgStd_particles;
    929  msgStd_particles.header.stamp = savedLatestObservationTime_;
    930  msgStd_particles.header.frame_id = "world";
    931 
    932  for (uint p = 0; p < nParticles_; ++p)
    933  {
    934  tf2::Quaternion tf2q(tf2::Vector3(0, 0, 1),
    935  particles_[o_robot + O_THETA][p]);
    936  tf2::Transform tf2t(tf2q, tf2::Vector3(particles_[o_robot + O_X][p],
    937  particles_[o_robot + O_Y][p],
    938  pubData.robotHeight));
    939 
    940  geometry_msgs::Pose pose;
    941  tf2::toMsg(tf2t, pose);
    942  msgStd_particles.poses.insert(msgStd_particles.poses.begin(), pose);
    943  }
    944 
    945  particleStdPublishers_[r].publish(msgStd_particles);
    946  }
    947 
    948  // Send target particles as a pointcloud
    949  sensor_msgs::PointCloud target_particles;
    950  target_particles.header.stamp = ros::Time::now();
    951  target_particles.header.frame_id = "world";
    952 
    953  for (uint p = 0; p < nParticles_; ++p)
    954  {
    955  geometry_msgs::Point32 point;
    956  point.x = particles_[O_TARGET + O_TX][p];
    957  point.y = particles_[O_TARGET + O_TY][p];
    958  point.z = particles_[O_TARGET + O_TZ][p];
    959 
    960  target_particles.points.insert(target_particles.points.begin(), point);
    961  }
    962  targetParticlePublisher_.publish(target_particles);
    963 
    964 #endif
    965 }
    966 
    967 void PFPublisher::publishRobotStates()
    968 {
    969  // This is pretty much copy and paste
    970  for (uint r = 0; r < nRobots_; ++r)
    971  {
    972  if (false == robotsUsed_[r])
    973  continue;
    974 
    975  std::ostringstream robotName;
    976  robotName << "omni" << r + 1;
    977 
    978  msg_estimate_.header.stamp = savedLatestObservationTime_;
    979 
    980  ParticleFilter::State::robotState_s& pfState = state_.robots[r];
    981  geometry_msgs::Pose& rosState = msg_estimate_.robotEstimates[r];
    982 
    983  // Create from Euler angles
    984  tf2::Quaternion tf2q(tf2::Vector3(0, 0, 1), pfState.pose[O_THETA]);
    985  tf2::Transform tf2t(tf2q, tf2::Vector3(pfState.pose[O_X], pfState.pose[O_Y],
    986  pubData.robotHeight));
    987 
    988  // Transform to our message type
    989  tf2::toMsg(tf2t, rosState);
    990 
    991 #ifdef BROADCAST_TF_AND_POSES
    992  // TF2 broadcast
    993  geometry_msgs::TransformStamped estTransf;
    994  estTransf.header.stamp = savedLatestObservationTime_;
    995  estTransf.header.frame_id = "world";
    996  estTransf.child_frame_id = robotName.str() + "est";
    997  estTransf.transform = tf2::toMsg(tf2t);
    998  robotBroadcasters[r].sendTransform(estTransf);
    999 
    1000  // Publish as a standard pose msg using the previous TF
    1001  geometry_msgs::PoseStamped estPose;
    1002  estPose.header.stamp = estTransf.header.stamp;
    1003  estPose.header.frame_id = estTransf.child_frame_id;
    1004  // Pose is everything at 0 as it's the same as the TF
    1005 
    1006  robotEstimatePublishers_[r].publish(estPose);
    1007 #endif
    1008  }
    1009 }
    1010 
    1011 void PFPublisher::publishTargetState()
    1012 {
    1013  msg_estimate_.targetEstimate.header.frame_id = "world";
    1014 
    1015  // Our custom message type
    1016  msg_estimate_.targetEstimate.x = state_.target.pos[O_TX];
    1017  msg_estimate_.targetEstimate.y = state_.target.pos[O_TY];
    1018  msg_estimate_.targetEstimate.z = state_.target.pos[O_TZ];
    1019  msg_estimate_.targetEstimate.found = state_.target.seen;
    1020 
    1021  for (uint r = 0; r < nRobots_; ++r)
    1022  {
    1023  msg_estimate_.targetVisibility[r] = bufTargetObservations_[r].found;
    1024  }
    1025 
    1026 #ifdef BROADCAST_TF_AND_POSES
    1027  // Publish as a standard pose msg using the previous TF
    1028  geometry_msgs::PointStamped estPoint;
    1029  estPoint.header.stamp = ros::Time::now();
    1030  estPoint.header.frame_id = "world";
    1031  estPoint.point.x = state_.target.pos[O_TX];
    1032  estPoint.point.y = state_.target.pos[O_TY];
    1033  estPoint.point.z = state_.target.pos[O_TZ];
    1034 
    1035  targetEstimatePublisher_.publish(estPoint);
    1036 #endif
    1037 }
    1038 
    1039 void PFPublisher::publishEstimate()
    1040 {
    1041  // msg_estimate_ has been built in other methods (publishRobotStates and
    1042  // publishTargetState)
    1043  msg_estimate_.computationTime = deltaIteration_.toNSec() * 1e-9;
    1044  msg_estimate_.converged = converged_;
    1045 
    1046  estimatePublisher_.publish(msg_estimate_);
    1047 }
    1048 
    1049 void PFPublisher::publishTargetObservations()
    1050 {
    1051  static std::vector<bool> previouslyPublished(nRobots_, false);
    1052 
    1053  for (uint r = 0; r < nRobots_; ++r)
    1054  {
    1055  // Publish as rviz standard visualization types (an arrow)
    1056  visualization_msgs::Marker marker;
    1057 
    1058  if (!robotsUsed_[r])
    1059  continue;
    1060 
    1061  // Robot and observation
    1062  std::ostringstream robotName;
    1063  robotName << "omni" << r + 1;
    1064 
    1065  TargetObservation& obs = bufTargetObservations_[r];
    1066 
    1067  // If not found, let's just publish that one time
    1068  if (obs.found == false)
    1069  {
    1070  if (previouslyPublished[r])
    1071  continue;
    1072  else
    1073  previouslyPublished[r] = true;
    1074  }
    1075  else
    1076  previouslyPublished[r] = false;
    1077 
    1078  marker.header.frame_id = robotName.str() + "est";
    1079  marker.header.stamp = savedLatestObservationTime_;
    1080 
    1081  // Setting the same namespace and id will overwrite the previous marker
    1082  marker.ns = robotName.str() + "_target_observations";
    1083  marker.id = 0;
    1084 
    1085  marker.type = visualization_msgs::Marker::ARROW;
    1086  marker.action = visualization_msgs::Marker::ADD;
    1087 
    1088  // Arrow draw
    1089  geometry_msgs::Point tail;
    1090  tail.x = tail.y = tail.z = 0.0;
    1091  // Point at index 0 - tail tip - is 0,0,0 because we're in the local frame
    1092  marker.points.push_back(tail);
    1093  // Point at index 1 - head - is the target pose in the local frame
    1094  geometry_msgs::Point head;
    1095  head.x = obs.x;
    1096  head.y = obs.y;
    1097  head.z = obs.z - pubData.robotHeight;
    1098  marker.points.push_back(head);
    1099 
    1100  marker.scale.x = 0.01;
    1101  marker.scale.y = 0.03;
    1102  marker.scale.z = 0.05;
    1103 
    1104  // Colour
    1105  marker.color.a = 1;
    1106  if (obs.found)
    1107  marker.color.r = marker.color.g = marker.color.b = 0.6;
    1108  else
    1109  {
    1110  marker.color.r = 1.0;
    1111  marker.color.g = marker.color.b = 0.0;
    1112  }
    1113 
    1114  // Other
    1115  marker.lifetime = ros::Duration(2);
    1116 
    1117  // Send it
    1118  targetObservationsPublisher_.publish(marker);
    1119  }
    1120 }
    1121 
    1122 void PFPublisher::publishGTData()
    1123 {
    1124  geometry_msgs::PointStamped gtPoint;
    1125  gtPoint.header.stamp = savedLatestObservationTime_;
    1126  gtPoint.header.frame_id = "world";
    1127 
    1128 #ifdef USE_NEWER_READ_OMNI_PACKAGE
    1129  geometry_msgs::PoseStamped gtPose;
    1130  gtPose.header.stamp = savedLatestObservationTime_;
    1131  gtPose.header.frame_id = "world";
    1132 
    1133  for (uint r = 0; r < nRobots_; ++r)
    1134  {
    1135  gtPose.pose = msg_GT_.poseOMNI[r].pose;
    1136  robotGTPublishers_[r].publish(gtPose);
    1137  }
    1138 
    1139 #else
    1140  if (true == robotsUsed_[0])
    1141  {
    1142  gtPoint.point = msg_GT_.poseOMNI1.pose.position;
    1143  robotGTPublishers_[0].publish(gtPoint);
    1144  }
    1145 
    1146  if (true == robotsUsed_[2])
    1147  {
    1148  gtPoint.point = msg_GT_.poseOMNI3.pose.position;
    1149  robotGTPublishers_[2].publish(gtPoint);
    1150  }
    1151 
    1152  if (true == robotsUsed_[3])
    1153  {
    1154  gtPoint.point = msg_GT_.poseOMNI4.pose.position;
    1155  robotGTPublishers_[3].publish(gtPoint);
    1156  }
    1157 
    1158  if (true == robotsUsed_[4])
    1159  {
    1160  gtPoint.point = msg_GT_.poseOMNI5.pose.position;
    1161  robotGTPublishers_[4].publish(gtPoint);
    1162  }
    1163 #endif
    1164 
    1165  // Publish for the target as well
    1166  if (msg_GT_.orangeBall3DGTposition.found)
    1167  {
    1168  gtPoint.point.x = msg_GT_.orangeBall3DGTposition.x;
    1169  gtPoint.point.y = msg_GT_.orangeBall3DGTposition.y;
    1170  gtPoint.point.z = msg_GT_.orangeBall3DGTposition.z;
    1171  targetGTPublisher_.publish(gtPoint);
    1172  }
    1173 }
    1174 
    1175 void PFPublisher::gtDataCallback(
    1176  const read_omni_dataset::LRMGTData::ConstPtr& gtMsgReceived)
    1177 {
    1178  msg_GT_ = *gtMsgReceived;
    1179 }
    1180 
    1181 void PFPublisher::nextIteration()
    1182 {
    1183  // Call the base class method
    1184  ParticleFilter::nextIteration();
    1185 
    1186  // Publish the particles first
    1187  publishParticles();
    1188 
    1189  // Publish robot states
    1190  publishRobotStates();
    1191 
    1192  // Publish target state
    1193  publishTargetState();
    1194 
    1195  // Publish estimate
    1196  publishEstimate();
    1197 
    1198  // Publish robot-to-target lines
    1199  publishTargetObservations();
    1200 
    1201 // Publish GT data if we have received any callback
    1202 #ifdef USE_NEWER_READ_OMNI_PACKAGE
    1203  if (!msg_GT_.poseOMNI.empty())
    1204  publishGTData();
    1205 #else
    1206  publishGTData();
    1207 #endif
    1208 }
    1209 
    1210 ParticleFilter::dynamicVariables_s::dynamicVariables_s(ros::NodeHandle& nh,
    1211  const uint nRobots)
    1212  : alpha(nRobots, std::vector<float>(NUM_ALPHAS)), firstCallback(true)
    1213 {
    1214  // Get node parameters, assume they exist
    1215  readParam<double>(nh, "percentage_to_keep", resamplingPercentageToKeep);
    1216 
    1217  readParam<int>(nh, "particles", nParticles);
    1218 
    1219  readParam<double>(nh, "predict_model_stddev", targetRandStddev);
    1220  oldTargetRandSTddev = targetRandStddev;
    1221 
    1222  // Get alpha values for some robots (hard-coded for our 4 robots..)
    1223  for (uint r = 0; r < nRobots; ++r)
    1224  {
    1225  std::string paramName =
    1226  "OMNI" + boost::lexical_cast<std::string>(r + 1) + "_alpha";
    1227 
    1228  std::string str;
    1229  if (readParam<std::string>(nh, paramName, str))
    1230  fill_alpha(r, str); // value was provided
    1231  else
    1232  fill_alpha(r, "0.015,0.1,0.5,0.001"); // default
    1233  }
    1234 }
    1235 
    1236 void ParticleFilter::dynamicVariables_s::fill_alpha(const uint robot,
    1237  const std::string& str)
    1238 {
    1239  // Tokenize the string of comma-separated values
    1240  std::istringstream iss(str);
    1241  std::string token;
    1242  uint tokenCount = 0;
    1243  while (std::getline(iss, token, ','))
    1244  {
    1245  if (tokenCount >= NUM_ALPHAS)
    1246  break;
    1247 
    1248  std::istringstream tokss(token);
    1249  float val;
    1250  tokss >> val;
    1251 
    1252  if (val < 0)
    1253  {
    1254  ROS_WARN("Invalid alpha value %f", val);
    1255  continue;
    1256  }
    1257 
    1258  alpha[robot][tokenCount] = val;
    1259  ++tokenCount;
    1260  }
    1261 
    1262  ROS_WARN_COND(tokenCount != NUM_ALPHAS,
    1263  "Number of alpha values provided is not the required number %d",
    1264  NUM_ALPHAS);
    1265 }
    1266 
    1267 // end of namespace pfuclt_ptcls
    1268 }
    +Go to the documentation of this file.
    2 #include <ros/ros.h>
    3 #include <stdlib.h>
    4 #include <boost/random.hpp>
    5 #include <boost/foreach.hpp>
    6 #include <boost/thread/mutex.hpp>
    7 #include <angles/angles.h>
    8 #include <geometry_msgs/TransformStamped.h>
    9 #include <tf2_geometry_msgs/tf2_geometry_msgs.h>
    10 #include <tf2/LinearMath/Quaternion.h>
    11 #include <tf2/transform_datatypes.h>
    12 #include <geometry_msgs/PoseArray.h>
    13 #include <geometry_msgs/PoseStamped.h>
    14 #include <sensor_msgs/PointCloud.h>
    15 #include <visualization_msgs/Marker.h>
    16 #include <read_omni_dataset/read_omni_dataset.h> // defines version of messages
    17 
    18 //#define DONT_RESAMPLE true
    19 //#define DONT_FUSE_TARGET true
    20 //#define DONT_FUSE_ROBOTS true
    21 #define BROADCAST_TF_AND_POSES true
    22 #define PUBLISH_PTCLS true
    23 #define EVALUATE_TIME_PERFORMANCE true
    24 //#define RECONFIGURE_ALPHAS true
    25 
    26 namespace pfuclt_ptcls
    27 {
    28 
    30  : nh_(data.nh), mainRobotID_(data.mainRobotID - 1),
    31  nTargets_(data.nTargets), nStatesPerRobot_(data.statesPerRobot),
    32  nRobots_(data.nRobots),
    33  nSubParticleSets_(data.nTargets * STATES_PER_TARGET +
    34  data.nRobots * data.statesPerRobot + 1),
    35  nLandmarks_(data.nLandmarks), robotsUsed_(data.robotsUsed),
    36  landmarksMap_(data.landmarksMap),
    37  dynamicVariables_(data.nh, data.nRobots),
    38  iteration_oss(new std::ostringstream("")),
    39  nParticles_(dynamicVariables_.nParticles),
    40  particles_(nSubParticleSets_, subparticles_t(nParticles_)),
    41  seed_(time(0)), initialized_(false),
    42  bufLandmarkObservations_(
    43  data.nRobots, std::vector<LandmarkObservation>(data.nLandmarks)),
    44  bufTargetObservations_(data.nRobots),
    45  weightComponents_(data.nRobots, subparticles_t(nParticles_, 0.0)),
    46  state_(data.statesPerRobot, data.nRobots),
    47  targetIterationTime_(), odometryTime_(), iterationEvalTime_(), mutex_(),
    48  dynamicServer_(), O_TARGET(data.nRobots * data.statesPerRobot),
    49  O_WEIGHT(nSubParticleSets_ - 1), numberIterations(0),
    50  durationSum(ros::WallDuration(0))
    51 {
    52  ROS_INFO("Created particle filter with dimensions %d, %d",
    53  (int)particles_.size(), (int)particles_[0].size());
    54 
    55  // Bind dynamic reconfigure callback
    56  dynamic_reconfigure::Server<pfuclt_omni_dataset::DynamicConfig>::CallbackType
    57  callback;
    58  callback = boost::bind(&ParticleFilter::dynamicReconfigureCallback, this, _1);
    59  dynamicServer_.setCallback(callback);
    60 }
    61 
    63  pfuclt_omni_dataset::DynamicConfig& config)
    64 {
    65  // Skip first callback which is done automatically for some reason
    67  {
    69  return;
    70  }
    71 
    72  if (!initialized_)
    73  return;
    74 
    75  ROS_INFO("Dynamic Reconfigure Callback:\n\tparticles = "
    76  "%d\n\tresampling_percentage_to_keep = "
    77  "%f\n\tpredict_model_stddev = "
    78  "%f\n\tOMNI1_alpha=%s\n\tOMNI3_alpha=%s\n\tOMNI4_alpha=%s\n\tOMNI5_"
    79  "alpha=%s",
    80  config.particles,
    81  config.groups.resampling.percentage_to_keep,
    82  config.groups.target.predict_model_stddev,
    83  config.groups.alphas.OMNI1_alpha.c_str(),
    84  config.groups.alphas.OMNI3_alpha.c_str(),
    85  config.groups.alphas.OMNI4_alpha.c_str(),
    86  config.groups.alphas.OMNI5_alpha.c_str());
    87 
    88  // Resize particles and re-initialize the pf if value changed
    89  if (dynamicVariables_.nParticles != config.particles)
    90  {
    91  ROS_INFO("Resizing particles to %d and re-initializing the pf",
    92  config.particles);
    93 
    94  resize_particles(config.particles);
    95  nParticles_ = config.particles;
    96  }
    97 
    98  // Update with desired values
    99  dynamicVariables_.nParticles = config.particles;
    101  config.groups.resampling.percentage_to_keep;
    103  config.groups.target.predict_model_stddev;
    104 
    105 // Alpha values updated only if using the original dataset
    106 #ifdef RECONFIGURE_ALPHAS
    107  dynamicVariables_.fill_alpha(0, config.groups.alphas.OMNI1_alpha);
    108  dynamicVariables_.fill_alpha(2, config.groups.alphas.OMNI3_alpha);
    109  dynamicVariables_.fill_alpha(3, config.groups.alphas.OMNI4_alpha);
    110  dynamicVariables_.fill_alpha(4, config.groups.alphas.OMNI5_alpha);
    111 #endif
    112 }
    113 
    115  pdata_t center[3],
    116  float radius)
    117 {
    118  uint particlesToSpread = nParticles_ * particlesRatio;
    119 
    120  boost::random::uniform_real_distribution<> dist(-radius, radius);
    121 
    122  for (uint p = 0; p < particlesToSpread; ++p)
    123  {
    124  for (uint s = 0; s < STATES_PER_TARGET; ++s)
    125  particles_[O_TARGET + s][p] = center[s] + dist(seed_);
    126  }
    127 }
    128 
    130 {
    131  *iteration_oss << "predictTarget() -> ";
    132 
    133  using namespace boost::random;
    134 
    135  // Random acceleration model
    136  normal_distribution<> targetAcceleration(TARGET_RAND_MEAN,
    138 
    139  for (int p = 0; p < nParticles_; p++)
    140  {
    141  // Get random accelerations
    142  pdata_t accel[STATES_PER_TARGET] = { targetAcceleration(seed_),
    143  targetAcceleration(seed_),
    144  targetAcceleration(seed_) };
    145 
    146  // Use random acceleration model
    147  for (uint s = 0; s < STATES_PER_TARGET - 1; ++s)
    148  {
    149  particles_[O_TARGET + s][p] += 0.5 * accel[s] * pow(targetIterationTime_.diff, 2);
    150  }
    151  }
    152 }
    153 
    155 {
    156  *iteration_oss << "fuseRobots() -> ";
    157 
    158  // Save the latest observation time to be used when publishing
    160 
    161  // Keeps track of number of landmarks seen for each robot
    162  std::vector<uint> landmarksSeen(nRobots_, 0);
    163 
    164  // Will track the probability propagation based on the landmark observations
    165  // for each robot
    166  std::vector<subparticles_t> probabilities(nRobots_,
    168 
    169  // For every robot
    170  for (uint r = 0; r < nRobots_; ++r)
    171  {
    172  // If not used, skip
    173  if (false == robotsUsed_[r])
    174  continue;
    175 
    176  // Index offset for this robot in the particles vector
    177  uint o_robot = r * nStatesPerRobot_;
    178 
    179  // For every landmark
    180  for (uint l = 0; l < nLandmarks_; ++l)
    181  {
    182  // If landmark not seen, skip
    183  if (false == bufLandmarkObservations_[r][l].found)
    184  continue;
    185  else
    186  ++(landmarksSeen[r]);
    187 
    188  // Reference to the observation for easier access
    190 
    191  // Observation in robot frame
    192  Eigen::Matrix<pdata_t, 2, 1> Zrobot(m.x, m.y);
    193 
    194  // Landmark in global frame
    195  Eigen::Matrix<pdata_t, 2, 1> LMglobal(landmarksMap_[l].x,
    196  landmarksMap_[l].y);
    197 
    198 #pragma omp parallel for
    199  for (uint p = 0; p < nParticles_; ++p)
    200  {
    201 
    202  // Robot pose <=> frame
    203  Eigen::Rotation2D<pdata_t> Rrobot(-particles_[o_robot + O_THETA][p]);
    204  Eigen::Matrix<pdata_t, 2, 1> Srobot(particles_[o_robot + O_X][p],
    205  particles_[o_robot + O_Y][p]);
    206 
    207  // Landmark to robot frame
    208  Eigen::Matrix<pdata_t, 2, 1> LMrobot = Rrobot * (LMglobal - Srobot);
    209 
    210  // Error in observation
    211  Eigen::Matrix<pdata_t, 2, 1> Zerr = LMrobot - Zrobot;
    212 
    213  // The values of interest to the particle weights
    214  // Note: using Eigen wasn't of particular interest here since it does
    215  // not allow for transposing a non-dynamic matrix
    216  float expArg = -0.5 * (Zerr(O_X) * Zerr(O_X) / m.covXX +
    217  Zerr(O_Y) * Zerr(O_Y) / m.covYY);
    218  float detValue = 1.0; // pow((2 * M_PI * m.covXX * m.covYY), -0.5);
    219 
    220  /*
    221  ROS_DEBUG_COND(
    222  p == 0,
    223  "OMNI%d's particle 0 is at {%f;%f;%f}, sees landmark %d with "
    224  "certainty %f%%, and error {%f;%f}",
    225  r + 1, particles_[o_robot + O_X][p], particles_[o_robot + O_Y][p],
    226  particles_[o_robot + O_THETA][p], l, 100 * (detValue * exp(expArg)),
    227  Zerr(0), Zerr(1));
    228  */
    229 
    230  // Update weight component for this robot and particular particle
    231  probabilities[r][p] *= detValue * exp(expArg);
    232  }
    233  }
    234  }
    235 
    236  // Reset weights, later will be multiplied by weightComponents of each robot
    237  resetWeights(1.0);
    238 
    239  // Duplicate particles
    240  particles_t dupParticles(particles_);
    241 
    242  for (uint r = 0; r < nRobots_; ++r)
    243  {
    244  // Again, if robot not used, skip
    245  if (false == robotsUsed_[r])
    246  continue;
    247 
    248  // Check that at least one landmark was seen, if not send warning
    249  // If seen use probabilities vector, if not keep using the previous
    250  // weightComponents for this robot
    251  if (0 == landmarksSeen[r])
    252  {
    253  ROS_WARN("In this iteration, OMNI%d didn't see any landmarks", r + 1);
    254 
    255  // weightComponent stays from previous iteration
    256  }
    257 
    258  else
    259  {
    260  weightComponents_[r] = probabilities[r];
    261  }
    262 
    263  // Index offset for this robot in the particles vector
    264  uint o_robot = r * nStatesPerRobot_;
    265 
    266  // Create a vector of indexes according to a descending order of the weights
    267  // components of robot r
    268  std::vector<uint> sorted = order_index<pdata_t>(weightComponents_[r], DESC);
    269 
    270  // For every particle
    271  for (uint p = 0; p < nParticles_; ++p)
    272  {
    273  // Re-order the particle subsets of this robot
    274  uint sort_index = sorted[p];
    275 
    276  // Copy this sub-particle set from dupParticles' sort_index particle
    277  copyParticle(particles_, dupParticles, p, sort_index, o_robot,
    278  o_robot + nStatesPerRobot_ - 1);
    279 
    280  // Update the particle weight (will get multiplied nRobots times and get a
    281  // lower value)
    282  particles_[O_WEIGHT][p] *= weightComponents_[r][sort_index];
    283  }
    284  }
    285 }
    286 
    288 {
    289  *iteration_oss << "fuseTarget() -> ";
    290 
    291  // If ball not seen by any robot, just skip all of this
    292  bool ballSeen = false;
    293  for (std::vector<TargetObservation>::iterator it =
    294  bufTargetObservations_.begin();
    295  it != bufTargetObservations_.end(); ++it)
    296  {
    297  if (it->found)
    298  {
    299  ballSeen = true;
    300  break;
    301  }
    302  }
    303 
    304  // Update ball state
    305  state_.target.seen = ballSeen;
    306 
    307  // exit if ball not seen by any robot
    308  if (!ballSeen)
    309  {
    310  *iteration_oss << "Ball not seen ->";
    311  return;
    312  }
    313  // If program is here, at least one robot saw the ball
    314 
    315  // Instance variables to be worked in the loops
    316  pdata_t maxTargetSubParticleWeight, totalWeight;
    317  uint m, p, mStar, r, o_robot;
    318  float expArg, detValue, Z[3], Zcap[3], Z_Zcap[3];
    319  TargetObservation* obs;
    320 
    321  // For every particle m in the particle set [1:M]
    322  for (m = 0; m < nParticles_; ++m)
    323  {
    324  // Keep track of the maximum contributed weight and that particle's index
    325  maxTargetSubParticleWeight = -1.0f;
    326  mStar = m;
    327 
    328 // Find the particle m* in the set [m:M] for which the weight contribution
    329 // by the target subparticle to the full weight is maximum
    330 #pragma omp parallel for private(p, r, o_robot, obs, expArg, detValue, Z, \
    331  Zcap, Z_Zcap)
    332  for (p = m; p < nParticles_; ++p)
    333  {
    334  // Vector with probabilities for each robot, starting at 0.0 in case the
    335  // robot hasn't seen the ball
    336  std::vector<pdata_t> probabilities(nRobots_, 0.0);
    337 
    338  // Observations of the target by all robots
    339  for (r = 0; r < nRobots_; ++r)
    340  {
    341  if (false == robotsUsed_[r] || false == bufTargetObservations_[r].found)
    342  continue;
    343 
    344  // Usefull variables
    345  obs = &bufTargetObservations_[r];
    346  o_robot = r * nStatesPerRobot_;
    347 
    348  // Observation model
    349  Z[0] = obs->x;
    350  Z[1] = obs->y;
    351  Z[2] = obs->z;
    352  Zcap[0] =
    353  (particles_[O_TARGET + O_TX][p] - particles_[o_robot + O_X][m]) *
    354  (cos(particles_[o_robot + O_THETA][m])) +
    355  (particles_[O_TARGET + O_TY][p] - particles_[o_robot + O_Y][m]) *
    356  (sin(particles_[o_robot + O_THETA][m]));
    357  Zcap[1] =
    358  -(particles_[O_TARGET + O_TX][p] - particles_[o_robot + O_X][m]) *
    359  (sin(particles_[o_robot + O_THETA][m])) +
    360  (particles_[O_TARGET + O_TY][p] - particles_[o_robot + O_Y][m]) *
    361  (cos(particles_[o_robot + O_THETA][m]));
    362  Zcap[2] = particles_[O_TARGET + O_TZ][p];
    363  Z_Zcap[0] = Z[0] - Zcap[0];
    364  Z_Zcap[1] = Z[1] - Zcap[1];
    365  Z_Zcap[2] = Z[2] - Zcap[2];
    366 
    367  expArg = -0.5 * (Z_Zcap[0] * Z_Zcap[0] / obs->covXX +
    368  Z_Zcap[1] * Z_Zcap[1] / obs->covYY +
    369  Z_Zcap[2] * Z_Zcap[2] / .04);
    370  detValue =
    371  1.0; // pow((2 * M_PI * obs->covXX * obs->covYY * 10.0), -0.5);
    372 
    373  // Probability value for this robot and this particle
    374  probabilities[r] = detValue * exp(expArg);
    375  }
    376 
    377  // Total weight contributed by this particle
    378  totalWeight =
    379  std::accumulate(probabilities.begin(), probabilities.end(), 0.0);
    380 
    381  // If the weight is the maximum as of now, update the maximum and set
    382  // particle p as mStar
    383  if (totalWeight > maxTargetSubParticleWeight)
    384  {
    385 // Swap particle m with m* so that the most relevant (in terms of
    386 // weight)
    387 // target subparticle is at the lowest indexes
    388 #pragma omp critical
    389  {
    390  if (totalWeight > maxTargetSubParticleWeight)
    391  {
    392  maxTargetSubParticleWeight = totalWeight;
    393  mStar = p;
    394  }
    395  }
    396  }
    397  }
    398 
    399  // Particle m* has been found, let's swap the subparticles
    400  for (uint i = 0; i < STATES_PER_TARGET; ++i)
    401  std::swap(particles_[O_TARGET + i][m], particles_[O_TARGET + i][mStar]);
    402 
    403  // Update the weight of this particle
    404  particles_[O_WEIGHT][m] *= maxTargetSubParticleWeight;
    405 
    406  // The target subparticles are now reordered according to their weight
    407  // contribution
    408 
    409  // printWeights("After fuseTarget(): ");
    410  }
    411 }
    412 
    414 {
    415  // Implementing a very basic resampler... a particle gets selected
    416  // proportional to its weight and startAt% of the top particles are kept
    417 
    418  particles_t duplicate(particles_);
    419 
    420  std::vector<pdata_t> cumulativeWeights(nParticles_);
    421  cumulativeWeights[0] = duplicate[O_WEIGHT][0];
    422 
    423  for (int par = 1; par < nParticles_; par++)
    424  {
    425  cumulativeWeights[par] =
    426  cumulativeWeights[par - 1] + duplicate[O_WEIGHT][par];
    427  }
    428 
    429  int startParticle = nParticles_ * startAt;
    430 
    431  // Robot particle resampling starts only at startParticle
    432  for (int par = startParticle; par < nParticles_; par++)
    433  {
    434  boost::random::uniform_real_distribution<> dist(0, 1);
    435  float randNo = dist(seed_);
    436 
    437  int m = 0;
    438  while (randNo > cumulativeWeights[m])
    439  m++;
    440 
    441  copyParticle(particles_, duplicate, par, m, 0, O_TARGET - 1);
    442  }
    443 
    444  // Target resampling is done for all particles
    445  for (int par = 0; par < nParticles_; par++)
    446  {
    447  boost::random::uniform_real_distribution<> dist(0, 1);
    448  float randNo = dist(seed_);
    449 
    450  int m = 0;
    451  while (randNo > cumulativeWeights[m])
    452  m++;
    453 
    454  copyParticle(particles_, duplicate, par, m, O_TARGET,
    455  nSubParticleSets_ - 1);
    456  }
    457 
    458  // ROS_DEBUG("End of modifiedMultinomialResampler()");
    459 }
    460 
    462 {
    463  *iteration_oss << "resample() -> ";
    464 
    465  for (uint r = 0; r < nRobots_; ++r)
    466  {
    467  if (false == robotsUsed_[r])
    468  continue;
    469 
    470  uint o_robot = r * nStatesPerRobot_;
    471 
    472  pdata_t stdX = pfuclt_aux::calc_stdDev<pdata_t>(particles_[o_robot + O_X]);
    473  pdata_t stdY = pfuclt_aux::calc_stdDev<pdata_t>(particles_[o_robot + O_Y]);
    474  pdata_t stdTheta =
    475  pfuclt_aux::calc_stdDev<pdata_t>(particles_[o_robot + O_THETA]);
    476 
    477  state_.robots[r].conf = 1 / (stdX + stdY + stdTheta);
    478 
    479  // ROS_DEBUG("OMNI%d stdX = %f, stdY = %f, stdTheta = %f", r + 1, stdX,
    480  // stdY,
    481  // stdTheta);
    482  }
    483 
    484  // Calc. sum of weights
    485  pdata_t weightSum = std::accumulate(particles_[O_WEIGHT].begin(),
    486  particles_[O_WEIGHT].end(), 0.0);
    487 
    488  // ROS_DEBUG("WeightSum before resampling = %f", weightSum);
    489 
    490  // printWeights("before resampling: ");
    491 
    492  if (weightSum < MIN_WEIGHTSUM)
    493  {
    494  ROS_WARN("Zero weightsum - returning without resampling");
    495 
    496  // Print iteration and state information
    497  *iteration_oss << "FAIL! -> ";
    498 
    499  converged_ = false;
    500  resetWeights(1.0 / nParticles_);
    501  return;
    502  }
    503 
    504  converged_ = true;
    505 
    506  // All resamplers use normalized weights
    507  for (uint p = 0; p < nParticles_; ++p)
    508  particles_[O_WEIGHT][p] = particles_[O_WEIGHT][p] / weightSum;
    509 
    511  100.0);
    512 
    513  // printWeights("after resampling: ");
    514 }
    515 
    517 {
    518  *iteration_oss << "estimate() -> ";
    519 
    520  pdata_t weightSum = std::accumulate(particles_[O_WEIGHT].begin(),
    521  particles_[O_WEIGHT].end(), 0.0);
    522 
    523  // ROS_DEBUG("WeightSum when estimating = %f", weightSum);
    524 
    525  subparticles_t normalizedWeights(particles_[O_WEIGHT]);
    526 
    527  // Normalize the weights
    528  for (uint p = 0; p < nParticles_; ++p)
    529  normalizedWeights[p] = normalizedWeights[p] / weightSum;
    530 
    531  if (weightSum < MIN_WEIGHTSUM)
    532  {
    533  *iteration_oss << "DONE without estimating!";
    534 
    535  // Increase standard deviation for target prediction
    537  {
    541  }
    542 
    543  // Don't estimate
    544  return;
    545  }
    546 
    547  // Return (if necessary) to old target prediction model stddev
    550 
    551  // For each robot
    552  for (uint r = 0; r < nRobots_; ++r)
    553  {
    554  // If the robot isn't playing, skip it
    555  if (false == robotsUsed_[r])
    556  continue;
    557 
    558  uint o_robot = r * nStatesPerRobot_;
    559 
    560  // A vector of weighted means that will be calculated in the next loop
    561  std::vector<double> weightedMeans(nStatesPerRobot_ - 1, 0.0);
    562 
    563  // For theta we will obtain the mean of circular quantities, by converting
    564  // to cartesian coordinates, placing each angle in the unit circle,
    565  // averaging these points and finally converting again to polar
    566  double weightedMeanThetaCartesian[2] = { 0, 0 };
    567 
    568  // ..and each particle
    569  for (uint p = 0; p < nParticles_; ++p)
    570  {
    571  // Accumulate the state proportionally to the particle's normalized weight
    572  for (uint g = 0; g < nStatesPerRobot_ - 1; ++g)
    573  {
    574  weightedMeans[g] += particles_[o_robot + g][p] * normalizedWeights[p];
    575  }
    576 
    577  // Mean of circular quantities for theta
    578  weightedMeanThetaCartesian[O_X] +=
    579  cos(particles_[o_robot + O_THETA][p]) * normalizedWeights[p];
    580  weightedMeanThetaCartesian[O_Y] +=
    581  sin(particles_[o_robot + O_THETA][p]) * normalizedWeights[p];
    582  }
    583 
    584  // Put the angle back in polar coordinates
    585  double weightedMeanThetaPolar =
    586  atan2(weightedMeanThetaCartesian[O_Y], weightedMeanThetaCartesian[O_X]);
    587 
    588  // Save in the robot state
    589  // Can't use easy copy since one is using double precision
    590  state_.robots[r].pose[O_X] = weightedMeans[O_X];
    591  state_.robots[r].pose[O_Y] = weightedMeans[O_Y];
    592  state_.robots[r].pose[O_THETA] = weightedMeanThetaPolar;
    593  }
    594 
    595  // Target weighted means
    596  std::vector<double> targetWeightedMeans(STATES_PER_TARGET, 0.0);
    597 
    598  // For each particle
    599  for (uint p = 0; p < nParticles_; ++p)
    600  {
    601  for (uint t = 0; t < STATES_PER_TARGET; ++t)
    602  {
    603  targetWeightedMeans[t] +=
    604  particles_[O_TARGET + t][p] * normalizedWeights[p];
    605  }
    606  }
    607 
    608  // Update position
    609  // Can't use easy copy since one is using double precision
    610  state_.target.pos[O_TX] = targetWeightedMeans[O_TX];
    611  state_.target.pos[O_TY] = targetWeightedMeans[O_TY];
    612  state_.target.pos[O_TZ] = targetWeightedMeans[O_TZ];
    613 
    614  *iteration_oss << "DONE!";
    615 }
    616 
    617 void ParticleFilter::printWeights(std::string pre)
    618 {
    619  std::ostringstream debug;
    620  debug << "Weights " << pre;
    621  for (uint i = 0; i < nParticles_; ++i)
    622  debug << particles_[O_WEIGHT][i] << " ";
    623 
    624  ROS_DEBUG("%s", debug.str().c_str());
    625 }
    626 
    627 // TODO set different values for position and orientation, targets, etc
    628 // Simple version, use default values - randomize all values between [-10,10]
    630 {
    631  if (initialized_)
    632  return;
    633 
    634  int lvalue = -10;
    635  int rvalue = 10;
    636 
    637  std::vector<double> defRand((nSubParticleSets_ - 1) * 2);
    638 
    639  for (int i = 0; i < defRand.size(); i += 2)
    640  {
    641  defRand[i] = lvalue;
    642  defRand[i + 1] = rvalue;
    643  }
    644 
    645  std::vector<double> defPos((nRobots_ * 2), 0.0);
    646 
    647  // Call the custom function with these values
    648  init(defRand, defPos);
    649 }
    650 
    651 // Overloaded function when using custom values
    652 void ParticleFilter::init(const std::vector<double>& customRandInit,
    653  const std::vector<double>& customPosInit)
    654 {
    655  if (initialized_)
    656  return;
    657 
    658  // Set flag
    659  initialized_ = true;
    660 
    661  bool flag_theta_given = (customPosInit.size() == nRobots_ * 3 &&
    662  customRandInit.size() == nSubParticleSets_ * 3);
    663  size_t numVars =
    664  flag_theta_given ? customRandInit.size() / 3 : customRandInit.size() / 2;
    665 
    666  ROS_INFO("Initializing particle filter");
    667 
    668  // For all subparticle sets except the particle weights
    669  for (int i = 0; i < numVars; ++i)
    670  {
    671  ROS_DEBUG("Values for distribution: %.4f %.4f", customRandInit[2 * i],
    672  customRandInit[2 * i + 1]);
    673 
    674  boost::random::uniform_real_distribution<> dist(customRandInit[2 * i],
    675  customRandInit[2 * i + 1]);
    676 
    677  // Sample a value from the uniform distribution for each particle
    678  for (uint p = 0; p < nParticles_; ++p)
    679  particles_[i][p] = dist(seed_);
    680  }
    681 
    682  // Particle weights init with same weight (1/nParticles)
    683  resetWeights(1.0 / nParticles_);
    684 
    685  // Initialize pose with initial belief
    686  for (uint r = 0; r < nRobots_; ++r)
    687  {
    688  pdata_t tmp[] = { customPosInit[2 * r + O_X], customPosInit[2 * r + O_Y],
    689  -M_PI };
    690  state_.robots[r].pose = std::vector<pdata_t>(tmp, tmp + nStatesPerRobot_);
    691  if (flag_theta_given)
    692  state_.robots[r].pose.push_back(customPosInit[2 * r + O_THETA]);
    693  }
    694 
    695  // State should have the initial belief
    696 
    697  ROS_INFO("Particle filter initialized");
    698 }
    699 
    700 void ParticleFilter::predict(const uint robotNumber, const Odometry odom,
    701  const ros::Time stamp)
    702 {
    703  if (!initialized_)
    704  return;
    705 
    706  *iteration_oss << "predict(OMNI" << robotNumber + 1 << ") -> ";
    707 
    708 #ifdef EVALUATE_TIME_PERFORMANCE
    709  // If this is the main robot, update the odometry time
    710  if (mainRobotID_ == robotNumber)
    711  {
    712  odometryTime_.updateTime(ros::WallTime::now());
    713  iterationEvalTime_ = ros::WallTime::now();
    714  }
    715 #endif
    716 
    717  using namespace boost::random;
    718 
    719  // Variables concerning this robot specifically
    720  int robot_offset = robotNumber * nStatesPerRobot_;
    721  std::vector<float>& alpha = dynamicVariables_.alpha[robotNumber];
    722 
    723  // Determining the propagation of the robot state through odometry
    724  pdata_t deltaRot = atan2(odom.y, odom.x);
    725  pdata_t deltaTrans = sqrt(odom.x * odom.x + odom.y * odom.y);
    726  pdata_t deltaFinalRot = odom.theta - deltaRot;
    727 
    728  // Create an error model based on a gaussian distribution
    729  normal_distribution<> deltaRotEffective(deltaRot, alpha[0] * fabs(deltaRot) +
    730  alpha[1] * deltaTrans);
    731 
    732  normal_distribution<> deltaTransEffective(
    733  deltaTrans,
    734  alpha[2] * deltaTrans + alpha[3] * fabs(deltaRot + deltaFinalRot));
    735 
    736  normal_distribution<> deltaFinalRotEffective(
    737  deltaFinalRot, alpha[0] * fabs(deltaFinalRot) + alpha[1] * deltaTrans);
    738 
    739  for (int i = 0; i < nParticles_; i++)
    740  {
    741  // Rotate to final position
    742  particles_[O_THETA + robot_offset][i] += deltaRotEffective(seed_);
    743 
    744  pdata_t sampleTrans = deltaTransEffective(seed_);
    745 
    746  // Translate to final position
    747  particles_[O_X + robot_offset][i] +=
    748  sampleTrans * cos(particles_[O_THETA + robot_offset][i]);
    749  particles_[O_Y + robot_offset][i] +=
    750  sampleTrans * sin(particles_[O_THETA + robot_offset][i]);
    751 
    752  // Rotate to final position and normalize angle
    753  particles_[O_THETA + robot_offset][i] = angles::normalize_angle(
    754  particles_[O_THETA + robot_offset][i] + deltaFinalRotEffective(seed_));
    755  }
    756 
    757  // Check if we should activate robotRandom
    758  // Only if no landmarks and no target seen
    759  uint nLandmarksSeen = 0;
    760  for (std::vector<LandmarkObservation>::iterator it =
    761  bufLandmarkObservations_[robotNumber].begin();
    762  it != bufLandmarkObservations_[robotNumber].end(); ++it)
    763  {
    764  if (it->found)
    765  nLandmarksSeen++;
    766  }
    767 
    768  if (nLandmarksSeen == 0 && !bufTargetObservations_[robotNumber].found)
    769  {
    770  // Randomize a bit for this robot since it does not see landmarks and target
    771  // isn't seen
    772  boost::random::uniform_real_distribution<> randPar(-0.05, 0.05);
    773 
    774  for (uint p = 0; p < nParticles_; ++p)
    775  {
    776  for (uint s = 0; s < nStatesPerRobot_; ++s)
    777  particles_[robot_offset + s][p] += randPar(seed_);
    778  }
    779  }
    780 
    781  // If this is the main robot, perform one PF-UCLT iteration
    782  if (mainRobotID_ == robotNumber)
    783  {
    784  // Lock mutex
    785  boost::mutex::scoped_lock(mutex_);
    786 
    787  // All the PF-UCLT steps
    788  predictTarget();
    789 
    790 #ifndef DONT_FUSE_ROBOTS
    791  fuseRobots();
    792 #endif
    793 
    794 #ifndef DONT_FUSE_TARGET
    795  fuseTarget();
    796 #endif
    797 
    798 #ifndef DONT_RESAMPLE
    799  resample();
    800 #endif
    801 
    802  estimate();
    803 
    804 #ifdef EVALUATE_TIME_PERFORMANCE
    805  ROS_INFO("(WALL TIME) Odometry analyzed with = %fms",
    806  1e3 * odometryTime_.diff);
    807 
    808  deltaIteration_ = ros::WallTime::now() - iterationEvalTime_;
    811 
    814 
    815  ROS_INFO_STREAM("(WALL TIME) Iteration time: "
    816  << 1e-6 * deltaIteration_.toNSec() << "ms ::: Worst case: "
    817  << 1e-6 * maxDeltaIteration_.toNSec() << "ms ::: Average: "
    818  << 1e-6 * (durationSum.toNSec() / numberIterations) << "s");
    819 #endif
    820 
    821  // ROS_DEBUG("Iteration: %s", iteration_oss->str().c_str());
    822  // Clear ostringstream
    823  iteration_oss->str("");
    824  iteration_oss->clear();
    825 
    826  // Start next iteration
    827  nextIteration();
    828  }
    829 }
    830 
    832 {
    833  *iteration_oss << "allLandmarks(OMNI" << robotNumber + 1 << ") -> ";
    834 }
    835 
    837 {
    838  *iteration_oss << "allTargets(OMNI" << robotNumber + 1 << ") -> ";
    839 }
    840 
    842  struct PublishData publishData)
    843  : ParticleFilter(data), pubData(publishData),
    844  robotBroadcasters(data.nRobots), particleStdPublishers_(data.nRobots),
    845  robotGTPublishers_(data.nRobots), robotEstimatePublishers_(data.nRobots)
    846 {
    847  // Prepare particle message
    849 
    850  // Subscribe to GT data
    851  GT_sub_ = nh_.subscribe<read_omni_dataset::LRMGTData>(
    852  "/gtData_4robotExp", 10,
    853  boost::bind(&PFPublisher::gtDataCallback, this, _1));
    854 
    855  // Other publishers
    857  nh_.advertise<read_omni_dataset::Estimate>("/pfuclt_estimate", 100);
    859  nh_.advertise<pfuclt_omni_dataset::particles>("/pfuclt_particles", 10);
    860 
    861  // Rviz visualization publishers
    862  // Target
    864  nh_.advertise<geometry_msgs::PointStamped>("/target/estimatedPose", 1000);
    866  nh_.advertise<geometry_msgs::PointStamped>("/target/gtPose", 1000);
    868  nh_.advertise<sensor_msgs::PointCloud>("/target/particles", 10);
    869 
    870  // target observations publisher
    872  nh_.advertise<visualization_msgs::Marker>("/targetObservations", 100);
    873 
    874  // Robots
    875  for (uint r = 0; r < nRobots_; ++r)
    876  {
    877  std::ostringstream robotName;
    878  robotName << "omni" << r + 1;
    879 
    880  // particle publisher
    881  particleStdPublishers_[r] = nh_.advertise<geometry_msgs::PoseArray>(
    882  "/" + robotName.str() + "/particles", 1000);
    883 
    884  // estimated state
    885  robotEstimatePublishers_[r] = nh_.advertise<geometry_msgs::PoseStamped>(
    886  "/" + robotName.str() + "/estimatedPose", 1000);
    887 
    888  // build estimate msg
    889  msg_estimate_.robotEstimates.push_back(geometry_msgs::Pose());
    890  msg_estimate_.targetVisibility.push_back(false);
    891 
    892 // ground truth publisher, in the simulation package we have PoseStamped
    893 #ifndef USE_NEWER_READ_OMNI_PACKAGE
    894  robotGTPublishers_[r] = nh_.advertise<geometry_msgs::PointStamped>(
    895  "/" + robotName.str() + "/gtPose", 1000);
    896 #else
    897  robotGTPublishers_[r] = nh_.advertise<geometry_msgs::PoseStamped>(
    898  "/" + robotName.str() + "/gtPose", 1000);
    899 #endif
    900  }
    901 
    902  ROS_INFO("It's a publishing particle filter!");
    903 }
    904 
    906 {
    907  // The eval package would rather have the particles in the format
    908  // particle->subparticle instead, so we have to inverse it
    909  for (uint p = 0; p < nParticles_; ++p)
    910  {
    911  for (uint s = 0; s < nSubParticleSets_; ++s)
    912  {
    913  msg_particles_.particles[p].particle[s] = particles_[s][p];
    914  }
    915  }
    916 
    917  // Send it!
    919 
    920 #ifdef PUBLISH_PTCLS
    921  // Also send as a series of PoseArray messages for each robot
    922  for (uint r = 0; r < nRobots_; ++r)
    923  {
    924  if (false == robotsUsed_[r])
    925  continue;
    926 
    927  uint o_robot = r * nStatesPerRobot_;
    928  geometry_msgs::PoseArray msgStd_particles;
    929  msgStd_particles.header.stamp = savedLatestObservationTime_;
    930  msgStd_particles.header.frame_id = "world";
    931 
    932  for (uint p = 0; p < nParticles_; ++p)
    933  {
    934  tf2::Quaternion tf2q(tf2::Vector3(0, 0, 1),
    935  particles_[o_robot + O_THETA][p]);
    936  tf2::Transform tf2t(tf2q, tf2::Vector3(particles_[o_robot + O_X][p],
    937  particles_[o_robot + O_Y][p],
    939 
    940  geometry_msgs::Pose pose;
    941  tf2::toMsg(tf2t, pose);
    942  msgStd_particles.poses.insert(msgStd_particles.poses.begin(), pose);
    943  }
    944 
    945  particleStdPublishers_[r].publish(msgStd_particles);
    946  }
    947 
    948  // Send target particles as a pointcloud
    949  sensor_msgs::PointCloud target_particles;
    950  target_particles.header.stamp = ros::Time::now();
    951  target_particles.header.frame_id = "world";
    952 
    953  for (uint p = 0; p < nParticles_; ++p)
    954  {
    955  geometry_msgs::Point32 point;
    956  point.x = particles_[O_TARGET + O_TX][p];
    957  point.y = particles_[O_TARGET + O_TY][p];
    958  point.z = particles_[O_TARGET + O_TZ][p];
    959 
    960  target_particles.points.insert(target_particles.points.begin(), point);
    961  }
    962  targetParticlePublisher_.publish(target_particles);
    963 
    964 #endif
    965 }
    966 
    968 {
    969  // This is pretty much copy and paste
    970  for (uint r = 0; r < nRobots_; ++r)
    971  {
    972  if (false == robotsUsed_[r])
    973  continue;
    974 
    975  std::ostringstream robotName;
    976  robotName << "omni" << r + 1;
    977 
    979 
    981  geometry_msgs::Pose& rosState = msg_estimate_.robotEstimates[r];
    982 
    983  // Create from Euler angles
    984  tf2::Quaternion tf2q(tf2::Vector3(0, 0, 1), pfState.pose[O_THETA]);
    985  tf2::Transform tf2t(tf2q, tf2::Vector3(pfState.pose[O_X], pfState.pose[O_Y],
    987 
    988  // Transform to our message type
    989  tf2::toMsg(tf2t, rosState);
    990 
    991 #ifdef BROADCAST_TF_AND_POSES
    992  // TF2 broadcast
    993  geometry_msgs::TransformStamped estTransf;
    994  estTransf.header.stamp = savedLatestObservationTime_;
    995  estTransf.header.frame_id = "world";
    996  estTransf.child_frame_id = robotName.str() + "est";
    997  estTransf.transform = tf2::toMsg(tf2t);
    998  robotBroadcasters[r].sendTransform(estTransf);
    999 
    1000  // Publish as a standard pose msg using the previous TF
    1001  geometry_msgs::PoseStamped estPose;
    1002  estPose.header.stamp = estTransf.header.stamp;
    1003  estPose.header.frame_id = estTransf.child_frame_id;
    1004  // Pose is everything at 0 as it's the same as the TF
    1005 
    1006  robotEstimatePublishers_[r].publish(estPose);
    1007 #endif
    1008  }
    1009 }
    1010 
    1012 {
    1013  msg_estimate_.targetEstimate.header.frame_id = "world";
    1014 
    1015  // Our custom message type
    1016  msg_estimate_.targetEstimate.x = state_.target.pos[O_TX];
    1017  msg_estimate_.targetEstimate.y = state_.target.pos[O_TY];
    1018  msg_estimate_.targetEstimate.z = state_.target.pos[O_TZ];
    1019  msg_estimate_.targetEstimate.found = state_.target.seen;
    1020 
    1021  for (uint r = 0; r < nRobots_; ++r)
    1022  {
    1023  msg_estimate_.targetVisibility[r] = bufTargetObservations_[r].found;
    1024  }
    1025 
    1026 #ifdef BROADCAST_TF_AND_POSES
    1027  // Publish as a standard pose msg using the previous TF
    1028  geometry_msgs::PointStamped estPoint;
    1029  estPoint.header.stamp = ros::Time::now();
    1030  estPoint.header.frame_id = "world";
    1031  estPoint.point.x = state_.target.pos[O_TX];
    1032  estPoint.point.y = state_.target.pos[O_TY];
    1033  estPoint.point.z = state_.target.pos[O_TZ];
    1034 
    1035  targetEstimatePublisher_.publish(estPoint);
    1036 #endif
    1037 }
    1038 
    1040 {
    1041  // msg_estimate_ has been built in other methods (publishRobotStates and
    1042  // publishTargetState)
    1043  msg_estimate_.computationTime = deltaIteration_.toNSec() * 1e-9;
    1044  msg_estimate_.converged = converged_;
    1045 
    1047 }
    1048 
    1050 {
    1051  static std::vector<bool> previouslyPublished(nRobots_, false);
    1052 
    1053  for (uint r = 0; r < nRobots_; ++r)
    1054  {
    1055  // Publish as rviz standard visualization types (an arrow)
    1056  visualization_msgs::Marker marker;
    1057 
    1058  if (!robotsUsed_[r])
    1059  continue;
    1060 
    1061  // Robot and observation
    1062  std::ostringstream robotName;
    1063  robotName << "omni" << r + 1;
    1064 
    1066 
    1067  // If not found, let's just publish that one time
    1068  if (obs.found == false)
    1069  {
    1070  if (previouslyPublished[r])
    1071  continue;
    1072  else
    1073  previouslyPublished[r] = true;
    1074  }
    1075  else
    1076  previouslyPublished[r] = false;
    1077 
    1078  marker.header.frame_id = robotName.str() + "est";
    1079  marker.header.stamp = savedLatestObservationTime_;
    1080 
    1081  // Setting the same namespace and id will overwrite the previous marker
    1082  marker.ns = robotName.str() + "_target_observations";
    1083  marker.id = 0;
    1084 
    1085  marker.type = visualization_msgs::Marker::ARROW;
    1086  marker.action = visualization_msgs::Marker::ADD;
    1087 
    1088  // Arrow draw
    1089  geometry_msgs::Point tail;
    1090  tail.x = tail.y = tail.z = 0.0;
    1091  // Point at index 0 - tail tip - is 0,0,0 because we're in the local frame
    1092  marker.points.push_back(tail);
    1093  // Point at index 1 - head - is the target pose in the local frame
    1094  geometry_msgs::Point head;
    1095  head.x = obs.x;
    1096  head.y = obs.y;
    1097  head.z = obs.z - pubData.robotHeight;
    1098  marker.points.push_back(head);
    1099 
    1100  marker.scale.x = 0.01;
    1101  marker.scale.y = 0.03;
    1102  marker.scale.z = 0.05;
    1103 
    1104  // Colour
    1105  marker.color.a = 1;
    1106  if (obs.found)
    1107  marker.color.r = marker.color.g = marker.color.b = 0.6;
    1108  else
    1109  {
    1110  marker.color.r = 1.0;
    1111  marker.color.g = marker.color.b = 0.0;
    1112  }
    1113 
    1114  // Other
    1115  marker.lifetime = ros::Duration(2);
    1116 
    1117  // Send it
    1118  targetObservationsPublisher_.publish(marker);
    1119  }
    1120 }
    1121 
    1123 {
    1124  geometry_msgs::PointStamped gtPoint;
    1125  gtPoint.header.stamp = savedLatestObservationTime_;
    1126  gtPoint.header.frame_id = "world";
    1127 
    1128 #ifdef USE_NEWER_READ_OMNI_PACKAGE
    1129  geometry_msgs::PoseStamped gtPose;
    1130  gtPose.header.stamp = savedLatestObservationTime_;
    1131  gtPose.header.frame_id = "world";
    1132 
    1133  for (uint r = 0; r < nRobots_; ++r)
    1134  {
    1135  gtPose.pose = msg_GT_.poseOMNI[r].pose;
    1136  robotGTPublishers_[r].publish(gtPose);
    1137  }
    1138 
    1139 #else
    1140  if (true == robotsUsed_[0])
    1141  {
    1142  gtPoint.point = msg_GT_.poseOMNI1.pose.position;
    1143  robotGTPublishers_[0].publish(gtPoint);
    1144  }
    1145 
    1146  if (true == robotsUsed_[2])
    1147  {
    1148  gtPoint.point = msg_GT_.poseOMNI3.pose.position;
    1149  robotGTPublishers_[2].publish(gtPoint);
    1150  }
    1151 
    1152  if (true == robotsUsed_[3])
    1153  {
    1154  gtPoint.point = msg_GT_.poseOMNI4.pose.position;
    1155  robotGTPublishers_[3].publish(gtPoint);
    1156  }
    1157 
    1158  if (true == robotsUsed_[4])
    1159  {
    1160  gtPoint.point = msg_GT_.poseOMNI5.pose.position;
    1161  robotGTPublishers_[4].publish(gtPoint);
    1162  }
    1163 #endif
    1164 
    1165  // Publish for the target as well
    1166  if (msg_GT_.orangeBall3DGTposition.found)
    1167  {
    1168  gtPoint.point.x = msg_GT_.orangeBall3DGTposition.x;
    1169  gtPoint.point.y = msg_GT_.orangeBall3DGTposition.y;
    1170  gtPoint.point.z = msg_GT_.orangeBall3DGTposition.z;
    1171  targetGTPublisher_.publish(gtPoint);
    1172  }
    1173 }
    1174 
    1176  const read_omni_dataset::LRMGTData::ConstPtr& gtMsgReceived)
    1177 {
    1178  msg_GT_ = *gtMsgReceived;
    1179 }
    1180 
    1182 {
    1183  // Call the base class method
    1185 
    1186  // Publish the particles first
    1187  publishParticles();
    1188 
    1189  // Publish robot states
    1191 
    1192  // Publish target state
    1194 
    1195  // Publish estimate
    1196  publishEstimate();
    1197 
    1198  // Publish robot-to-target lines
    1200 
    1201 // Publish GT data if we have received any callback
    1202 #ifdef USE_NEWER_READ_OMNI_PACKAGE
    1203  if (!msg_GT_.poseOMNI.empty())
    1204  publishGTData();
    1205 #else
    1206  publishGTData();
    1207 #endif
    1208 }
    1209 
    1211  const uint nRobots)
    1212  : alpha(nRobots, std::vector<float>(NUM_ALPHAS)), firstCallback(true)
    1213 {
    1214  // Get node parameters, assume they exist
    1215  readParam<double>(nh, "percentage_to_keep", resamplingPercentageToKeep);
    1216 
    1217  readParam<int>(nh, "particles", nParticles);
    1218 
    1219  readParam<double>(nh, "predict_model_stddev", targetRandStddev);
    1221 
    1222  // Get alpha values for some robots (hard-coded for our 4 robots..)
    1223  for (uint r = 0; r < nRobots; ++r)
    1224  {
    1225  std::string paramName =
    1226  "OMNI" + boost::lexical_cast<std::string>(r + 1) + "_alpha";
    1227 
    1228  std::string str;
    1229  if (readParam<std::string>(nh, paramName, str))
    1230  fill_alpha(r, str); // value was provided
    1231  else
    1232  fill_alpha(r, "0.015,0.1,0.5,0.001"); // default
    1233  }
    1234 }
    1235 
    1237  const std::string& str)
    1238 {
    1239  // Tokenize the string of comma-separated values
    1240  std::istringstream iss(str);
    1241  std::string token;
    1242  uint tokenCount = 0;
    1243  while (std::getline(iss, token, ','))
    1244  {
    1245  if (tokenCount >= NUM_ALPHAS)
    1246  break;
    1247 
    1248  std::istringstream tokss(token);
    1249  float val;
    1250  tokss >> val;
    1251 
    1252  if (val < 0)
    1253  {
    1254  ROS_WARN("Invalid alpha value %f", val);
    1255  continue;
    1256  }
    1257 
    1258  alpha[robot][tokenCount] = val;
    1259  ++tokenCount;
    1260  }
    1261 
    1262  ROS_WARN_COND(tokenCount != NUM_ALPHAS,
    1263  "Number of alpha values provided is not the required number %d",
    1264  NUM_ALPHAS);
    1265 }
    1266 
    1267 // end of namespace pfuclt_ptcls
    1268 }
    void resample()
    resample - the resampling step
    +
    ros::WallDuration deltaIteration_
    + +
    read_omni_dataset::Estimate msg_estimate_
    +
    std::vector< ros::Publisher > robotGTPublishers_
    + + + + +
    void resize_particles(const uint n)
    resize_particles - change to a different number of particles and resize the publishing message ...
    + + + + +
    ros::Publisher targetGTPublisher_
    + + +
    #define O_X
    + +
    virtual void resize_particles(const uint n)
    resize_particles - change to a different number of particles
    +
    void fuseRobots()
    fuseRobots - fuse robot states step
    + +
    #define O_TX
    +
    std::vector< tf2_ros::TransformBroadcaster > robotBroadcasters
    + +
    #define STATES_PER_TARGET
    + + +
    void fuseTarget()
    fuseTarget - fuse target state step
    + + + +
    dynamicVariables_s(ros::NodeHandle &nh, const uint nRobots)
    +
    #define O_Y
    + + + +
    #define TARGET_RAND_MEAN
    + + + +
    #define O_TY
    + +
    std::vector< ros::Publisher > robotEstimatePublishers_
    + + +
    void printWeights(std::string pre)
    printWeights
    + + +
    The PFinitData struct - provides encapsulation to the initial data necessary to construct a ParticleF...
    +
    pfuclt_omni_dataset::particles msg_particles_
    + + + +
    void copyParticle(particles_t &p_To, particles_t &p_From, uint i_To, uint i_From)
    copyParticle - copies a whole particle from one particle set to another
    +
    ros::Publisher targetParticlePublisher_
    +
    void gtDataCallback(const read_omni_dataset::LRMGTData::ConstPtr &)
    gtDataCallback - callback of ground truth data
    +
    std::vector< std::vector< LandmarkObservation > > bufLandmarkObservations_
    +
    #define NUM_ALPHAS
    + +
    std::vector< TargetObservation > bufTargetObservations_
    +
    #define TARGET_RAND_STDDEV_LOST
    + +
    void predictTarget()
    predictTarget - predict target state step
    +
    std::size_t size()
    size - interface to the size of the particle filter
    + + +
    ros::WallDuration maxDeltaIteration_
    + +
    double updateTime(ros::Time t)
    updateTime - adds the newest time available to the struct and returns the time difference ...
    Definition: pfuclt_aux.h:185
    + +
    read_omni_dataset::LRMGTData msg_GT_
    +
    const std::vector< bool > & robotsUsed_
    + + +
    ros::Publisher particlePublisher_
    + +
    std::vector< pdata_t > subparticles_t
    +
    The robotState_s struct - saves information on the belief of a robot&#39;s state.
    +
    const std::vector< Landmark > & landmarksMap_
    +
    std::vector< RobotState > robots
    + + + + +
    void spreadTargetParticlesSphere(float particlesRatio, pdata_t center[3], float radius)
    spreadTargetParticlesSphere - spread a percentage of the target particle in a sphere around center ...
    +
    std::vector< std::vector< float > > alpha
    +
    ParticleFilter(struct PFinitData &data)
    ParticleFilter - constructor.
    +
    #define O_THETA
    +
    struct pfuclt_ptcls::ParticleFilter::State::targetState_s target
    +
    dynamic_reconfigure::Server< pfuclt_omni_dataset::DynamicConfig > dynamicServer_
    + + + +
    void estimate()
    estimate - state estimation through weighted means of particle weights
    + +
    void saveAllTargetMeasurementsDone(const uint robotNumber)
    saveAllTargetMeasurementsDone - call this function when all target measurements have been performed b...
    +
    std::vector< ros::Publisher > particleStdPublishers_
    +
    void saveAllLandmarkMeasurementsDone(const uint robotNumber)
    saveAllLandmarkMeasurementsDone - call this function when all landmark measurements have been perform...
    +
    #define O_TZ
    +
    void init()
    init - initialize the particle filter set with the default randomized values
    +
    virtual void nextIteration()
    nextIteration - perform final steps before next iteration
    +
    void resetWeights(pdata_t val)
    resetWeights - assign the value val to all particle weights
    +
    void nextIteration()
    nextIteration - extends the base class method to add the ROS publishing
    +
    void predict(const uint robotNumber, const Odometry odom, const ros::Time stamp)
    predict - prediction step in the particle filter set with the received odometry
    + +
    std::vector< subparticles_t > particles_t
    + +
    void fill_alpha(const uint robot, const std::string &str)
    +
    PFPublisher(struct ParticleFilter::PFinitData &data, struct PublishData publishData)
    PFPublisher - constructor.
    +
    struct pfuclt_ptcls::ParticleFilter::dynamicVariables_s dynamicVariables_
    +
    ros::Publisher estimatePublisher_
    + +
    ros::Publisher targetObservationsPublisher_
    +
    #define MIN_WEIGHTSUM
    +
    ros::Publisher targetEstimatePublisher_
    + + + + +
    void dynamicReconfigureCallback(pfuclt_omni_dataset::DynamicConfig &)
    dynamicReconfigureCallback - Dynamic reconfigure callback for dynamically setting variables during ru...
    +
    boost::shared_ptr< std::ostringstream > iteration_oss
    + +
    struct PublishData pubData
    + + + + +
    void modifiedMultinomialResampler(uint startAt)
    modifiedMultinomialResampler - a costly resampler that keeps 50% of the particles and implements the ...


    pfuclt_omni_dataset
    Author(s):
    -autogenerated on Mon Jul 3 2017 15:58:35 +autogenerated on Mon Jul 3 2017 16:11:29
    diff --git a/doc/html/c++/pfuclt__particles_8h.html b/doc/html/c++/pfuclt__particles_8h.html new file mode 100644 index 0000000..e0034f7 --- /dev/null +++ b/doc/html/c++/pfuclt__particles_8h.html @@ -0,0 +1,351 @@ + +pfuclt_omni_dataset: pfuclt_particles.h File Reference + + + + + + + + +
    +
    + +
    +
    pfuclt_particles.h File Reference
    +
    +
    +
    #include <pfuclt_omni_dataset/pfuclt_aux.h>
    +#include <vector>
    +#include <algorithm>
    +#include <iostream>
    +#include <sstream>
    +#include <boost/random.hpp>
    +#include <boost/thread/mutex.hpp>
    +#include <Eigen/Core>
    +#include <Eigen/Geometry>
    +#include <tf2_ros/transform_broadcaster.h>
    +#include <read_omni_dataset/RobotState.h>
    +#include <read_omni_dataset/LRMGTData.h>
    +#include <read_omni_dataset/Estimate.h>
    +#include <pfuclt_omni_dataset/particle.h>
    +#include <pfuclt_omni_dataset/particles.h>
    +#include <dynamic_reconfigure/server.h>
    +#include <pfuclt_omni_dataset/DynamicConfig.h>
    +#include <geometry_msgs/Vector3.h>
    +
    +Include dependency graph for pfuclt_particles.h:
    +
    +
    + + + +
    +
    +This graph shows which files directly or indirectly include this file:
    +
    +
    + + + + + +
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    struct  pfuclt_ptcls::ParticleFilter::dynamicVariables_s
     
    struct  pfuclt_ptcls::landmarkObs_s
     
    struct  pfuclt_ptcls::odometry_s
     
    class  pfuclt_ptcls::ParticleFilter
     
    struct  pfuclt_ptcls::ParticleFilter::PFinitData
     The PFinitData struct - provides encapsulation to the initial data necessary to construct a ParticleFilter instance. More...
     
    class  pfuclt_ptcls::PFPublisher
     The PFPublisher class - implements publishing for the ParticleFilter class using ROS. More...
     
    struct  pfuclt_ptcls::PFPublisher::PublishData
     
    struct  pfuclt_ptcls::ParticleFilter::State::robotState_s
     The robotState_s struct - saves information on the belief of a robot's state. More...
     
    struct  pfuclt_ptcls::ParticleFilter::State
     The state_s struct - defines a structure to hold state information for the particle filter class. More...
     
    struct  pfuclt_ptcls::targetObs_s
     
    struct  pfuclt_ptcls::ParticleFilter::State::targetState_s
     The targetState_s struct - saves information on the belief of the target's state. More...
     
    + + + +

    +Namespaces

     pfuclt_ptcls
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    #define MIN_WEIGHTSUM   1e-10
     
    #define NUM_ALPHAS   4
     
    #define O_THETA   (2)
     
    #define O_TX   (0)
     
    #define O_TY   (1)
     
    #define O_TZ   (2)
     
    #define O_X   (0)
     
    #define O_Y   (1)
     
    #define STATES_PER_TARGET   3
     
    #define TARGET_ITERATION_TIME_DEFAULT   0.0333
     
    #define TARGET_ITERATION_TIME_MAX   (1)
     
    #define TARGET_RAND_MEAN   0
     
    #define TARGET_RAND_STDDEV_LOST   500.0
     
    + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef double(* pfuclt_ptcls::estimatorFunc) (const std::vector< double > &, const std::vector< double > &)
     
    typedef struct pfuclt_ptcls::landmarkObs_s pfuclt_ptcls::LandmarkObservation
     
    typedef struct pfuclt_ptcls::odometry_s pfuclt_ptcls::Odometry
     
    typedef std::vector< subparticles_t > pfuclt_ptcls::particles_t
     
    typedef float pfuclt_ptcls::pdata_t
     
    typedef boost::random::mt19937 pfuclt_ptcls::RNGType
     
    typedef std::vector< pdata_t > pfuclt_ptcls::subparticles_t
     
    typedef struct pfuclt_ptcls::targetObs_s pfuclt_ptcls::TargetObservation
     
    +

    Macro Definition Documentation

    + +
    +
    + + + + +
    #define MIN_WEIGHTSUM   1e-10
    +
    + +

    Definition at line 51 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define NUM_ALPHAS   4
    +
    + +

    Definition at line 27 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define O_THETA   (2)
    +
    + +

    Definition at line 35 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define O_TX   (0)
    +
    + +

    Definition at line 37 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define O_TY   (1)
    +
    + +

    Definition at line 38 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define O_TZ   (2)
    +
    + +

    Definition at line 39 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define O_X   (0)
    +
    + +

    Definition at line 33 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define O_Y   (1)
    +
    + +

    Definition at line 34 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define STATES_PER_TARGET   3
    +
    + +

    Definition at line 30 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define TARGET_ITERATION_TIME_DEFAULT   0.0333
    +
    + +

    Definition at line 47 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define TARGET_ITERATION_TIME_MAX   (1)
    +
    + +

    Definition at line 48 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define TARGET_RAND_MEAN   0
    +
    + +

    Definition at line 43 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    #define TARGET_RAND_STDDEV_LOST   500.0
    +
    + +

    Definition at line 44 of file pfuclt_particles.h.

    + +
    +
    +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/pfuclt__particles_8h__dep__incl.map b/doc/html/c++/pfuclt__particles_8h__dep__incl.map new file mode 100644 index 0000000..c921551 --- /dev/null +++ b/doc/html/c++/pfuclt__particles_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doc/html/c++/pfuclt__particles_8h__dep__incl.md5 b/doc/html/c++/pfuclt__particles_8h__dep__incl.md5 new file mode 100644 index 0000000..03e37ff --- /dev/null +++ b/doc/html/c++/pfuclt__particles_8h__dep__incl.md5 @@ -0,0 +1 @@ +06edaac8e7fae4361c184cc88e785c14 \ No newline at end of file diff --git a/doc/html/c++/pfuclt__particles_8h__dep__incl.png b/doc/html/c++/pfuclt__particles_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..5dee0ef5486f93e92deb2f3b2c28e68ebce9a763 GIT binary patch literal 11681 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 + + diff --git a/doc/html/c++/pfuclt__particles_8h__incl.md5 b/doc/html/c++/pfuclt__particles_8h__incl.md5 new file mode 100644 index 0000000..44c2929 --- /dev/null +++ b/doc/html/c++/pfuclt__particles_8h__incl.md5 @@ -0,0 +1 @@ +b14f23e2750aacf6e7d5d72afc9aee68 \ No newline at end of file diff --git a/doc/html/c++/pfuclt__particles_8h__incl.png b/doc/html/c++/pfuclt__particles_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..f9a9e7975fbd0eaa667073c5bd96005aa82c1d40 GIT binary patch literal 84134 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
  • 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/html/c++/pfuclt__particles_8h_source.html b/doc/html/c++/pfuclt__particles_8h_source.html new file mode 100644 index 0000000..5f0a841 --- /dev/null +++ b/doc/html/c++/pfuclt__particles_8h_source.html @@ -0,0 +1,165 @@ + +pfuclt_omni_dataset: pfuclt_particles.h Source File + + + + + + + + + +
    +
    +
    pfuclt_particles.h
    +
    +
    +Go to the documentation of this file.
    1 #ifndef PARTICLES_H
    2 #define PARTICLES_H
    3 
    5 
    6 #include <vector>
    7 #include <algorithm>
    8 #include <iostream>
    9 #include <sstream>
    10 #include <boost/random.hpp>
    11 #include <boost/thread/mutex.hpp>
    12 #include <Eigen/Core>
    13 #include <Eigen/Geometry>
    14 #include <tf2_ros/transform_broadcaster.h>
    15 
    16 #include <read_omni_dataset/RobotState.h>
    17 #include <read_omni_dataset/LRMGTData.h>
    18 #include <read_omni_dataset/Estimate.h>
    19 #include <pfuclt_omni_dataset/particle.h>
    20 #include <pfuclt_omni_dataset/particles.h>
    21 
    22 #include <dynamic_reconfigure/server.h>
    23 #include <pfuclt_omni_dataset/DynamicConfig.h>
    24 
    25 #include <geometry_msgs/Vector3.h>
    26 
    27 #define NUM_ALPHAS 4
    28 
    29 // ideally later this will be a parameter, when it makes sense to
    30 #define STATES_PER_TARGET 3
    31 
    32 // offsets
    33 #define O_X (0)
    34 #define O_Y (1)
    35 #define O_THETA (2)
    36 //#define O_TARGET (nRobots_ * nStatesPerRobot_)
    37 #define O_TX (0)
    38 #define O_TY (1)
    39 #define O_TZ (2)
    40 //#define O_WEIGHT (nSubParticleSets_ - 1)
    41 
    42 // target motion model and estimator
    43 #define TARGET_RAND_MEAN 0
    44 #define TARGET_RAND_STDDEV_LOST 500.0
    45 
    46 // concerning time
    47 #define TARGET_ITERATION_TIME_DEFAULT 0.0333
    48 #define TARGET_ITERATION_TIME_MAX (1)
    49 
    50 // others
    51 #define MIN_WEIGHTSUM 1e-10
    52 
    53 //#define MORE_DEBUG true
    54 
    55 namespace pfuclt_ptcls
    56 {
    57 
    58 using namespace pfuclt_aux;
    59 
    60 typedef float pdata_t;
    61 
    62 typedef double (*estimatorFunc)(const std::vector<double>&,
    63  const std::vector<double>&);
    64 
    65 typedef struct odometry_s
    66 {
    67  double x, y, theta;
    68 } Odometry;
    69 
    70 typedef struct landmarkObs_s
    71 {
    72  bool found;
    73  double x, y;
    74  double d, phi;
    75  double covDD, covPP, covXX, covYY;
    76  landmarkObs_s() { found = false; }
    78 
    79 typedef struct targetObs_s
    80 {
    81  bool found;
    82  double x, y, z;
    83  double d, phi, r;
    84  double covDD, covPP, covXX, covYY;
    85 
    86  targetObs_s() { found = false; }
    88 
    89 // Apply concept of subparticles (the particle set for each dimension)
    90 typedef std::vector<pdata_t> subparticles_t;
    91 typedef std::vector<subparticles_t> particles_t;
    92 
    93 // This will be the generator use for randomizing
    94 typedef boost::random::mt19937 RNGType;
    95 
    97 {
    98 private:
    99  boost::mutex mutex_;
    100  dynamic_reconfigure::Server<pfuclt_omni_dataset::DynamicConfig>
    102 
    103 protected:
    105  {
    111  std::vector<std::vector<float> > alpha;
    112 
    113  dynamicVariables_s(ros::NodeHandle& nh, const uint nRobots);
    114 
    115  void fill_alpha(const uint robot, const std::string& str);
    116 
    117  } dynamicVariables_;
    118 
    123  struct State
    124  {
    125  uint nRobots;
    127 
    132  typedef struct robotState_s
    133  {
    134  std::vector<pdata_t> pose;
    135  pdata_t conf;
    136 
    137  robotState_s(uint poseSize) : pose(poseSize, 0.0), conf(0.0) {}
    138  } RobotState;
    139  std::vector<RobotState> robots;
    140 
    146  {
    147  std::vector<pdata_t> pos;
    148  bool seen;
    149 
    151  : pos(STATES_PER_TARGET, 0.0), seen(false)
    152  {
    153  }
    154  } target;
    155 
    159  State(const uint nStatesPerRobot, const uint nRobots)
    160  : nStatesPerRobot(nStatesPerRobot), nRobots(nRobots)
    161  {
    162  // Create and initialize the robots vector
    163  for (uint r = 0; r < nRobots; ++r)
    164  robots.push_back(robotState_s(nStatesPerRobot));
    165  }
    166  };
    167 
    168 public:
    173  struct PFinitData
    174  {
    175  const uint mainRobotID, nTargets, statesPerRobot, nRobots, nLandmarks;
    176  const std::vector<bool>& robotsUsed;
    177  const std::vector<Landmark>& landmarksMap;
    178  ros::NodeHandle& nh;
    179 
    196  PFinitData(ros::NodeHandle& nh, const uint mainRobotID, const uint nTargets,
    197  const uint statesPerRobot, const uint nRobots,
    198  const uint nLandmarks, const std::vector<bool>& robotsUsed,
    199  const std::vector<Landmark>& landmarksMap)
    200  : nh(nh), mainRobotID(mainRobotID), nTargets(nTargets),
    201  statesPerRobot(statesPerRobot), nRobots(nRobots),
    202  nLandmarks(nLandmarks), robotsUsed(robotsUsed),
    203  landmarksMap(landmarksMap)
    204  {
    205  }
    206  };
    207 
    208 protected:
    209  ros::NodeHandle& nh_;
    211  const uint mainRobotID_;
    212  const std::vector<Landmark>& landmarksMap_;
    213  const std::vector<bool>& robotsUsed_;
    214  const uint nTargets_;
    215  const uint nRobots_;
    216  const uint nStatesPerRobot_;
    217  const uint nSubParticleSets_;
    218  const uint nLandmarks_;
    219  particles_t particles_;
    220  particles_t weightComponents_;
    221  RNGType seed_;
    223  std::vector<std::vector<LandmarkObservation> > bufLandmarkObservations_;
    224  std::vector<TargetObservation> bufTargetObservations_;
    226  ros::WallTime iterationEvalTime_;
    227  ros::WallDuration deltaIteration_, maxDeltaIteration_;
    228  ros::WallDuration durationSum;
    230  struct State state_;
    231  ros::Time latestObservationTime_, savedLatestObservationTime_;
    233 
    243  inline void copyParticle(particles_t& p_To, particles_t& p_From, uint i_To,
    244  uint i_From)
    245  {
    246  copyParticle(p_To, p_From, i_To, i_From, 0, p_To.size() - 1);
    247  }
    248 
    260  inline void copyParticle(particles_t& p_To, particles_t& p_From, uint i_To,
    261  uint i_From, uint subFirst, uint subLast)
    262  {
    263  for (uint k = subFirst; k <= subLast; ++k)
    264  p_To[k][i_To] = p_From[k][i_From];
    265  }
    266 
    270  inline void resetWeights(pdata_t val)
    271  {
    272  particles_[O_WEIGHT].assign(particles_[O_WEIGHT].size(), val);
    273  }
    274 
    283  void spreadTargetParticlesSphere(float particlesRatio, pdata_t center[3],
    284  float radius);
    285 
    290  void predictTarget();
    291 
    295  void fuseRobots();
    296 
    300  void fuseTarget();
    301 
    306  void modifiedMultinomialResampler(uint startAt);
    307 
    311  void resample();
    312 
    316  void estimate();
    317 
    321  virtual void nextIteration() {}
    322 
    327  virtual void resize_particles(const uint n)
    328  {
    329  size_t old_size = particles_[0].size();
    330 
    331  // Resize weightComponents
    332  for (uint r = 0; r < weightComponents_.size(); ++r)
    333  weightComponents_[r].resize(n);
    334 
    335  // Resize particles
    336  for (uint s = 0; s < particles_.size(); ++s)
    337  particles_[s].resize(n);
    338 
    339  // If n is lower than old_size, the last particles are removed - the ones
    340  // with the most weight are kept
    341  // But if n is higher, it's better to resample
    342  if (n > old_size)
    343  resample();
    344  }
    345 
    346 public:
    347  boost::shared_ptr<std::ostringstream> iteration_oss;
    348  uint O_TARGET, O_WEIGHT;
    349 
    354  void dynamicReconfigureCallback(pfuclt_omni_dataset::DynamicConfig&);
    355 
    361  ParticleFilter(struct PFinitData& data);
    362 
    369  void updateTargetIterationTime(ros::Time tRos)
    370  {
    371  targetIterationTime_.updateTime(tRos);
    372 
    373  if (fabs(targetIterationTime_.diff) > TARGET_ITERATION_TIME_MAX)
    374  {
    375  // Something is wrong, set to default iteration time
    376  targetIterationTime_.diff = TARGET_ITERATION_TIME_DEFAULT;
    377  }
    378  ROS_DEBUG("Target tracking iteration time: %f", targetIterationTime_.diff);
    379  }
    380 
    386  ParticleFilter* getPFReference() { return this; }
    387 
    391  void printWeights(std::string pre);
    392 
    397  void assign(const pdata_t value);
    398 
    404  void assign(const pdata_t value, const uint index);
    405 
    411  inline subparticles_t& operator[](int index) { return particles_[index]; }
    412 
    420  inline const subparticles_t& operator[](int index) const
    421  {
    422  return particles_[index];
    423  }
    424 
    429  void init();
    430 
    441  void init(const std::vector<double>& customRandInit,
    442  const std::vector<double>& customPosInit);
    443 
    452  void predict(const uint robotNumber, const Odometry odom,
    453  const ros::Time stamp);
    454 
    460  bool isInitialized() { return initialized_; }
    461 
    466  std::size_t size() { return nSubParticleSets_; }
    467 
    476  inline void saveLandmarkObservation(const uint robotNumber,
    477  const uint landmarkNumber,
    478  const LandmarkObservation obs,
    479  ros::Time stamp)
    480  {
    481  bufLandmarkObservations_[robotNumber][landmarkNumber] = obs;
    482  latestObservationTime_ = stamp;
    483  }
    484 
    490  inline void saveLandmarkObservation(const uint robotNumber,
    491  const uint landmarkNumber,
    492  const bool found)
    493  {
    494  bufLandmarkObservations_[robotNumber][landmarkNumber].found = found;
    495  }
    496 
    503  void saveAllLandmarkMeasurementsDone(const uint robotNumber);
    504 
    511  inline void saveTargetObservation(const uint robotNumber,
    512  const TargetObservation obs,
    513  ros::Time stamp)
    514  {
    515  bufTargetObservations_[robotNumber] = obs;
    516 
    517  // If previously target not seen and now is found
    518  if (obs.found && !state_.target.seen)
    519  {
    520  // Update to target seen
    521  state_.target.seen = true;
    522 
    523  // Observation to global frame
    524  const ParticleFilter::State::RobotState& rs = state_.robots[robotNumber];
    525  pdata_t ballGlobal[3];
    526  ballGlobal[O_TX] = rs.pose[O_X] + obs.x * cos(rs.pose[O_THETA]) -
    527  obs.y * sin(rs.pose[O_THETA]);
    528  ballGlobal[O_TY] = rs.pose[O_Y] + obs.x * sin(rs.pose[O_THETA]) +
    529  obs.y * cos(rs.pose[O_THETA]);
    530  ballGlobal[O_TZ] = obs.z;
    531 
    532  // Spread 50% of particles around ballGlobal in a sphere with 1.0 meter
    533  // radius
    534  spreadTargetParticlesSphere(0.5, ballGlobal, 1.0);
    535  }
    536  }
    537 
    543  inline void saveTargetObservation(const uint robotNumber, const bool found)
    544  {
    545  bufTargetObservations_[robotNumber].found = found;
    546  }
    547 
    554  void saveAllTargetMeasurementsDone(const uint robotNumber);
    555 };
    556 
    562 {
    563 public:
    564  struct PublishData
    565  {
    566  float robotHeight;
    567 
    574  PublishData(float robotHeight) : robotHeight(robotHeight) {}
    575  };
    576 
    582  void resize_particles(const uint n)
    583  {
    584  // Call base class method
    586 
    587  ROS_INFO("Resizing particle message");
    588 
    589  // Resize particle message
    590  msg_particles_.particles.resize(n);
    591  for (uint p = 0; p < n; ++p)
    592  {
    593  msg_particles_.particles[p].particle.resize(nSubParticleSets_);
    594  }
    595  }
    596 
    597 private:
    598  ros::Subscriber GT_sub_;
    599  ros::Publisher estimatePublisher_, particlePublisher_,
    600  targetEstimatePublisher_, targetGTPublisher_, targetParticlePublisher_;
    601  std::vector<ros::Publisher> particleStdPublishers_;
    602  std::vector<ros::Publisher> robotGTPublishers_;
    603  std::vector<ros::Publisher> robotEstimatePublishers_;
    605 
    606  read_omni_dataset::LRMGTData msg_GT_;
    607  pfuclt_omni_dataset::particles msg_particles_;
    608  read_omni_dataset::Estimate msg_estimate_;
    609 
    610  std::vector<tf2_ros::TransformBroadcaster> robotBroadcasters;
    611 
    612  struct PublishData pubData;
    613 
    614  void publishParticles();
    615  void publishRobotStates();
    616  void publishTargetState();
    617  void publishEstimate();
    618  void publishGTData();
    619  void publishTargetObservations();
    620 
    621 public:
    629  struct PublishData publishData);
    630 
    637 
    641  void gtDataCallback(const read_omni_dataset::LRMGTData::ConstPtr&);
    642 
    647  void nextIteration();
    648 };
    649 
    650 // end of namespace pfuclt_ptcls
    651 }
    652 #endif // PARTICLES_H
    PublishData(float robotHeight)
    PublishData - contains information necessary for the PFPublisher class.
    + +
    read_omni_dataset::Estimate msg_estimate_
    +
    std::vector< ros::Publisher > robotGTPublishers_
    + +
    ParticleFilter * getPFReference()
    getPFReference - retrieve a reference to this object - to be overloaded by deriving classes so that t...
    + + +
    void saveLandmarkObservation(const uint robotNumber, const uint landmarkNumber, const LandmarkObservation obs, ros::Time stamp)
    saveLandmarkObservation - saves the landmark observation to a buffer of observations ...
    + +
    void resize_particles(const uint n)
    resize_particles - change to a different number of particles and resize the publishing message ...
    + +
    const subparticles_t & operator[](int index) const
    operator [] - const version of the array subscripting access, when using it on const intantiations of...
    + + + + + +
    #define O_X
    +
    #define TARGET_ITERATION_TIME_DEFAULT
    +
    virtual void resize_particles(const uint n)
    resize_particles - change to a different number of particles
    + +
    #define O_TX
    +
    std::vector< tf2_ros::TransformBroadcaster > robotBroadcasters
    +
    #define STATES_PER_TARGET
    + + + + + +
    #define O_Y
    + + + + + +
    void saveTargetObservation(const uint robotNumber, const bool found)
    saveTargetObservation - change the measurement buffer state
    +
    #define O_TY
    + +
    std::vector< ros::Publisher > robotEstimatePublishers_
    + +
    ParticleFilter * getPFReference()
    getPFReference - retrieve a reference to the base class&#39;s members
    +
    boost::random::mt19937 RNGType
    +
    bool isInitialized()
    isInitialized - simple interface to access private member initialized_
    + +
    The PFPublisher class - implements publishing for the ParticleFilter class using ROS.
    + + +
    The PFinitData struct - provides encapsulation to the initial data necessary to construct a ParticleF...
    +
    pfuclt_omni_dataset::particles msg_particles_
    + + + +
    void copyParticle(particles_t &p_To, particles_t &p_From, uint i_To, uint i_From)
    copyParticle - copies a whole particle from one particle set to another
    +
    ros::Publisher targetParticlePublisher_
    +
    The targetState_s struct - saves information on the belief of the target&#39;s state. ...
    + +
    std::vector< std::vector< LandmarkObservation > > bufLandmarkObservations_
    +
    void saveTargetObservation(const uint robotNumber, const TargetObservation obs, ros::Time stamp)
    saveTargetObservation - saves the target observation to a buffer of observations
    +
    struct pfuclt_ptcls::odometry_s Odometry
    + +
    std::vector< TargetObservation > bufTargetObservations_
    +
    std::size_t size()
    size - interface to the size of the particle filter
    + + +
    ros::WallDuration maxDeltaIteration_
    + +
    const std::vector< bool > & robotsUsed
    +
    #define TARGET_ITERATION_TIME_MAX
    +
    double updateTime(ros::Time t)
    updateTime - adds the newest time available to the struct and returns the time difference ...
    Definition: pfuclt_aux.h:185
    + +
    read_omni_dataset::LRMGTData msg_GT_
    + +
    const std::vector< bool > & robotsUsed_
    + + +
    std::vector< pdata_t > subparticles_t
    +
    The robotState_s struct - saves information on the belief of a robot&#39;s state.
    +
    const std::vector< Landmark > & landmarksMap
    +
    const std::vector< Landmark > & landmarksMap_
    +
    std::vector< RobotState > robots
    + + + + +
    std::vector< std::vector< float > > alpha
    +
    void updateTargetIterationTime(ros::Time tRos)
    updateTargetIterationTime - the main robot should call this method after the target callback ...
    +
    #define O_THETA
    +
    double(* estimatorFunc)(const std::vector< double > &, const std::vector< double > &)
    + +
    dynamic_reconfigure::Server< pfuclt_omni_dataset::DynamicConfig > dynamicServer_
    + + +
    State(const uint nStatesPerRobot, const uint nRobots)
    State - constructor.
    + + + +
    subparticles_t & operator[](int index)
    operator [] - array subscripting access to the private particle set
    +
    The state_s struct - defines a structure to hold state information for the particle filter class...
    +
    std::vector< ros::Publisher > particleStdPublishers_
    +
    void copyParticle(particles_t &p_To, particles_t &p_From, uint i_To, uint i_From, uint subFirst, uint subLast)
    copyParticle - copies some subparticle sets of a particle from one particle set to another ...
    +
    #define O_TZ
    + +
    virtual void nextIteration()
    nextIteration - perform final steps before next iteration
    +
    void resetWeights(pdata_t val)
    resetWeights - assign the value val to all particle weights
    + +
    PFinitData(ros::NodeHandle &nh, const uint mainRobotID, const uint nTargets, const uint statesPerRobot, const uint nRobots, const uint nLandmarks, const std::vector< bool > &robotsUsed, const std::vector< Landmark > &landmarksMap)
    PFinitData.
    +
    std::vector< subparticles_t > particles_t
    + + +
    ros::Publisher targetObservationsPublisher_
    + +
    struct pfuclt_ptcls::targetObs_s TargetObservation
    +
    void saveLandmarkObservation(const uint robotNumber, const uint landmarkNumber, const bool found)
    saveLandmarkObservation - change the measurement buffer state
    + +
    boost::shared_ptr< std::ostringstream > iteration_oss
    +
    struct pfuclt_ptcls::landmarkObs_s LandmarkObservation
    + +
    The timeEval_s struct - takes care of time difference evaluation through the ros::Time methods...
    Definition: pfuclt_aux.h:167
    + + + + + +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__aux_1_1landmark__s-members.html b/doc/html/c++/structpfuclt__aux_1_1landmark__s-members.html new file mode 100644 index 0000000..f3158c1 --- /dev/null +++ b/doc/html/c++/structpfuclt__aux_1_1landmark__s-members.html @@ -0,0 +1,48 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_aux::landmark_s Member List
    +
    +
    + +

    This is the complete list of members for pfuclt_aux::landmark_s, including all inherited members.

    + + + + +
    serialpfuclt_aux::landmark_s
    xpfuclt_aux::landmark_s
    ypfuclt_aux::landmark_s
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__aux_1_1landmark__s.html b/doc/html/c++/structpfuclt__aux_1_1landmark__s.html new file mode 100644 index 0000000..710d143 --- /dev/null +++ b/doc/html/c++/structpfuclt__aux_1_1landmark__s.html @@ -0,0 +1,110 @@ + +pfuclt_omni_dataset: pfuclt_aux::landmark_s Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_aux::landmark_s Struct Reference
    +
    +
    + +

    The Landmark struct - used to store a landmark, defined by its serial number, and its position {x,y}. + More...

    + +

    #include <pfuclt_aux.h>

    + + + + + + + + +

    +Public Attributes

    int serial
     
    float x
     
    float y
     
    +

    Detailed Description

    +

    The Landmark struct - used to store a landmark, defined by its serial number, and its position {x,y}.

    + +

    Definition at line 30 of file pfuclt_aux.h.

    +

    Member Data Documentation

    + +
    +
    + + + + +
    int pfuclt_aux::landmark_s::serial
    +
    + +

    Definition at line 32 of file pfuclt_aux.h.

    + +
    +
    + +
    +
    + + + + +
    float pfuclt_aux::landmark_s::x
    +
    + +

    Definition at line 33 of file pfuclt_aux.h.

    + +
    +
    + +
    +
    + + + + +
    float pfuclt_aux::landmark_s::y
    +
    + +

    Definition at line 33 of file pfuclt_aux.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__aux_1_1timeEval__s-members.html b/doc/html/c++/structpfuclt__aux_1_1timeEval__s-members.html new file mode 100644 index 0000000..2ccd051 --- /dev/null +++ b/doc/html/c++/structpfuclt__aux_1_1timeEval__s-members.html @@ -0,0 +1,53 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_aux::timeEval_s Member List
    +
    + + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__aux_1_1timeEval__s.html b/doc/html/c++/structpfuclt__aux_1_1timeEval__s.html new file mode 100644 index 0000000..defb0d3 --- /dev/null +++ b/doc/html/c++/structpfuclt__aux_1_1timeEval__s.html @@ -0,0 +1,241 @@ + +pfuclt_omni_dataset: pfuclt_aux::timeEval_s Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_aux::timeEval_s Struct Reference
    +
    +
    + +

    The timeEval_s struct - takes care of time difference evaluation through the ros::Time methods. + More...

    + +

    #include <pfuclt_aux.h>

    + + + + + + + + + +

    +Public Member Functions

     timeEval_s ()
     
    double updateTime (ros::Time t)
     updateTime - adds the newest time available to the struct and returns the time difference More...
     
    double updateTime (ros::WallTime t)
     
    + + + + + + + + + + + +

    +Public Attributes

    double diff
     
    ros::Time rosNew
     
    ros::Time rosPrev
     
    ros::WallTime wallNew
     
    ros::WallTime wallPrev
     
    +

    Detailed Description

    +

    The timeEval_s struct - takes care of time difference evaluation through the ros::Time methods.

    + +

    Definition at line 167 of file pfuclt_aux.h.

    +

    Constructor & Destructor Documentation

    + +
    +
    + + + + + +
    + + + + + + + +
    pfuclt_aux::timeEval_s::timeEval_s ()
    +
    +inline
    +
    + +

    Definition at line 173 of file pfuclt_aux.h.

    + +
    +
    +

    Member Function Documentation

    + +
    +
    + + + + + +
    + + + + + + + + +
    double pfuclt_aux::timeEval_s::updateTime (ros::Time t)
    +
    +inline
    +
    + +

    updateTime - adds the newest time available to the struct and returns the time difference

    +
    Parameters
    + + +
    t- the new time in ros::Time format
    +
    +
    +
    Returns
    + +

    Definition at line 185 of file pfuclt_aux.h.

    + +
    +
    + +
    +
    + + + + + +
    + + + + + + + + +
    double pfuclt_aux::timeEval_s::updateTime (ros::WallTime t)
    +
    +inline
    +
    + +

    Definition at line 195 of file pfuclt_aux.h.

    + +
    +
    +

    Member Data Documentation

    + +
    +
    + + + + +
    double pfuclt_aux::timeEval_s::diff
    +
    + +

    Definition at line 171 of file pfuclt_aux.h.

    + +
    +
    + +
    +
    + + + + +
    ros::Time pfuclt_aux::timeEval_s::rosNew
    +
    + +

    Definition at line 169 of file pfuclt_aux.h.

    + +
    +
    + +
    +
    + + + + +
    ros::Time pfuclt_aux::timeEval_s::rosPrev
    +
    + +

    Definition at line 169 of file pfuclt_aux.h.

    + +
    +
    + +
    +
    + + + + +
    ros::WallTime pfuclt_aux::timeEval_s::wallNew
    +
    + +

    Definition at line 170 of file pfuclt_aux.h.

    + +
    +
    + +
    +
    + + + + +
    ros::WallTime pfuclt_aux::timeEval_s::wallPrev
    +
    + +

    Definition at line 170 of file pfuclt_aux.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1PFPublisher_1_1PublishData-members.html b/doc/html/c++/structpfuclt__ptcls_1_1PFPublisher_1_1PublishData-members.html new file mode 100644 index 0000000..ffdce10 --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1PFPublisher_1_1PublishData-members.html @@ -0,0 +1,47 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_ptcls::PFPublisher::PublishData Member List
    +
    +
    + +

    This is the complete list of members for pfuclt_ptcls::PFPublisher::PublishData, including all inherited members.

    + + + +
    PublishData(float robotHeight)pfuclt_ptcls::PFPublisher::PublishDatainline
    robotHeightpfuclt_ptcls::PFPublisher::PublishData
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1PFPublisher_1_1PublishData.html b/doc/html/c++/structpfuclt__ptcls_1_1PFPublisher_1_1PublishData.html new file mode 100644 index 0000000..e7b8c1e --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1PFPublisher_1_1PublishData.html @@ -0,0 +1,117 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::PFPublisher::PublishData Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_ptcls::PFPublisher::PublishData Struct Reference
    +
    +
    + +

    #include <pfuclt_particles.h>

    + + + + + +

    +Public Member Functions

     PublishData (float robotHeight)
     PublishData - contains information necessary for the PFPublisher class. More...
     
    + + + +

    +Public Attributes

    float robotHeight
     
    +

    Detailed Description

    +
    +

    Definition at line 564 of file pfuclt_particles.h.

    +

    Constructor & Destructor Documentation

    + +
    +
    + + + + + +
    + + + + + + + + +
    pfuclt_ptcls::PFPublisher::PublishData::PublishData (float robotHeight)
    +
    +inline
    +
    + +

    PublishData - contains information necessary for the PFPublisher class.

    +
    Parameters
    + + + +
    nh- the node handle object
    robotHeight- the fixed robot height
    +
    +
    + +

    Definition at line 574 of file pfuclt_particles.h.

    + +
    +
    +

    Member Data Documentation

    + +
    +
    + + + + +
    float pfuclt_ptcls::PFPublisher::PublishData::robotHeight
    +
    + +

    Definition at line 566 of file pfuclt_particles.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1PFinitData-members.html b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1PFinitData-members.html new file mode 100644 index 0000000..277860f --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1PFinitData-members.html @@ -0,0 +1,54 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_ptcls::ParticleFilter::PFinitData Member List
    +
    +
    + +

    This is the complete list of members for pfuclt_ptcls::ParticleFilter::PFinitData, including all inherited members.

    + + + + + + + + + + +
    landmarksMappfuclt_ptcls::ParticleFilter::PFinitData
    mainRobotIDpfuclt_ptcls::ParticleFilter::PFinitData
    nhpfuclt_ptcls::ParticleFilter::PFinitData
    nLandmarkspfuclt_ptcls::ParticleFilter::PFinitData
    nRobotspfuclt_ptcls::ParticleFilter::PFinitData
    nTargetspfuclt_ptcls::ParticleFilter::PFinitData
    PFinitData(ros::NodeHandle &nh, const uint mainRobotID, const uint nTargets, const uint statesPerRobot, const uint nRobots, const uint nLandmarks, const std::vector< bool > &robotsUsed, const std::vector< Landmark > &landmarksMap)pfuclt_ptcls::ParticleFilter::PFinitDatainline
    robotsUsedpfuclt_ptcls::ParticleFilter::PFinitData
    statesPerRobotpfuclt_ptcls::ParticleFilter::PFinitData
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1PFinitData.html b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1PFinitData.html new file mode 100644 index 0000000..fad57f4 --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1PFinitData.html @@ -0,0 +1,286 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::ParticleFilter::PFinitData Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_ptcls::ParticleFilter::PFinitData Struct Reference
    +
    +
    + +

    The PFinitData struct - provides encapsulation to the initial data necessary to construct a ParticleFilter instance. + More...

    + +

    #include <pfuclt_particles.h>

    + + + + + +

    +Public Member Functions

     PFinitData (ros::NodeHandle &nh, const uint mainRobotID, const uint nTargets, const uint statesPerRobot, const uint nRobots, const uint nLandmarks, const std::vector< bool > &robotsUsed, const std::vector< Landmark > &landmarksMap)
     PFinitData. More...
     
    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    const std::vector< Landmark > & landmarksMap
     
    const uint mainRobotID
     
    ros::NodeHandle & nh
     
    const uint nLandmarks
     
    const uint nRobots
     
    const uint nTargets
     
    const std::vector< bool > & robotsUsed
     
    const uint statesPerRobot
     
    +

    Detailed Description

    +

    The PFinitData struct - provides encapsulation to the initial data necessary to construct a ParticleFilter instance.

    + +

    Definition at line 173 of file pfuclt_particles.h.

    +

    Constructor & Destructor Documentation

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    pfuclt_ptcls::ParticleFilter::PFinitData::PFinitData (ros::NodeHandle & nh,
    const uint mainRobotID,
    const uint nTargets,
    const uint statesPerRobot,
    const uint nRobots,
    const uint nLandmarks,
    const std::vector< bool > & robotsUsed,
    const std::vector< Landmark > & landmarksMap 
    )
    +
    +inline
    +
    + +

    PFinitData.

    +
    Parameters
    + + + + + + + + + + +
    nh- the node handle
    mainRobotID- the robot number where this algorithm will run on - affects the timings of iteration and estimation updates - consider that OMNI1 is ID1
    nTargets- the number of targets to consider
    statesPerRobot- the state space dimension for each robot
    nRobots- number of robots
    nLandmarks- number of landmarks
    robotsUsed- vector of bools mentioning if robots are being used, according to the standard robot ordering
    landmarksMap- vector of Landmark structs containing information on the landmark locations
    vectorwith values to be used in the RNG for the model sampling
    +
    +
    + +

    Definition at line 196 of file pfuclt_particles.h.

    + +
    +
    +

    Member Data Documentation

    + +
    +
    + + + + +
    const std::vector<Landmark>& pfuclt_ptcls::ParticleFilter::PFinitData::landmarksMap
    +
    + +

    Definition at line 177 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    const uint pfuclt_ptcls::ParticleFilter::PFinitData::mainRobotID
    +
    + +

    Definition at line 175 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    ros::NodeHandle& pfuclt_ptcls::ParticleFilter::PFinitData::nh
    +
    + +

    Definition at line 178 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    const uint pfuclt_ptcls::ParticleFilter::PFinitData::nLandmarks
    +
    + +

    Definition at line 175 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    const uint pfuclt_ptcls::ParticleFilter::PFinitData::nRobots
    +
    + +

    Definition at line 175 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    const uint pfuclt_ptcls::ParticleFilter::PFinitData::nTargets
    +
    + +

    Definition at line 175 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    const std::vector<bool>& pfuclt_ptcls::ParticleFilter::PFinitData::robotsUsed
    +
    + +

    Definition at line 176 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    const uint pfuclt_ptcls::ParticleFilter::PFinitData::statesPerRobot
    +
    + +

    Definition at line 175 of file pfuclt_particles.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State-members.html b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State-members.html new file mode 100644 index 0000000..28f2b64 --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State-members.html @@ -0,0 +1,51 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_ptcls::ParticleFilter::State Member List
    +
    + + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State.html b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State.html new file mode 100644 index 0000000..3659c1a --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State.html @@ -0,0 +1,202 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::ParticleFilter::State Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_ptcls::ParticleFilter::State Struct Reference
    +
    +
    + +

    The state_s struct - defines a structure to hold state information for the particle filter class. + More...

    + +

    #include <pfuclt_particles.h>

    + + + + + + + + +

    +Classes

    struct  robotState_s
     The robotState_s struct - saves information on the belief of a robot's state. More...
     
    struct  targetState_s
     The targetState_s struct - saves information on the belief of the target's state. More...
     
    + + + + +

    +Public Types

    typedef struct pfuclt_ptcls::ParticleFilter::State::robotState_s RobotState
     The robotState_s struct - saves information on the belief of a robot's state. More...
     
    + + + + +

    +Public Member Functions

     State (const uint nStatesPerRobot, const uint nRobots)
     State - constructor. More...
     
    + + + + + + + + + +

    +Public Attributes

    uint nRobots
     
    uint nStatesPerRobot
     
    std::vector< RobotStaterobots
     
    struct pfuclt_ptcls::ParticleFilter::State::targetState_s target
     
    +

    Detailed Description

    +

    The state_s struct - defines a structure to hold state information for the particle filter class.

    + +

    Definition at line 123 of file pfuclt_particles.h.

    +

    Member Typedef Documentation

    + +
    +
    + +

    The robotState_s struct - saves information on the belief of a robot's state.

    + +
    +
    +

    Constructor & Destructor Documentation

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    pfuclt_ptcls::ParticleFilter::State::State (const uint nStatesPerRobot,
    const uint nRobots 
    )
    +
    +inline
    +
    + +

    State - constructor.

    + +

    Definition at line 159 of file pfuclt_particles.h.

    + +
    +
    +

    Member Data Documentation

    + +
    +
    + + + + +
    uint pfuclt_ptcls::ParticleFilter::State::nRobots
    +
    + +

    Definition at line 125 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    uint pfuclt_ptcls::ParticleFilter::State::nStatesPerRobot
    +
    + +

    Definition at line 126 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    std::vector<RobotState> pfuclt_ptcls::ParticleFilter::State::robots
    +
    + +

    Definition at line 139 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    struct pfuclt_ptcls::ParticleFilter::State::targetState_s pfuclt_ptcls::ParticleFilter::State::target
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1robotState__s-members.html b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1robotState__s-members.html new file mode 100644 index 0000000..5e1a74d --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1robotState__s-members.html @@ -0,0 +1,48 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_ptcls::ParticleFilter::State::robotState_s Member List
    +
    + + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1robotState__s.html b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1robotState__s.html new file mode 100644 index 0000000..6200834 --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1robotState__s.html @@ -0,0 +1,127 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::ParticleFilter::State::robotState_s Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_ptcls::ParticleFilter::State::robotState_s Struct Reference
    +
    +
    + +

    The robotState_s struct - saves information on the belief of a robot's state. + More...

    + +

    #include <pfuclt_particles.h>

    + + + + +

    +Public Member Functions

     robotState_s (uint poseSize)
     
    + + + + + +

    +Public Attributes

    pdata_t conf
     
    std::vector< pdata_tpose
     
    +

    Detailed Description

    +

    The robotState_s struct - saves information on the belief of a robot's state.

    + +

    Definition at line 132 of file pfuclt_particles.h.

    +

    Constructor & Destructor Documentation

    + +
    +
    + + + + + +
    + + + + + + + + +
    pfuclt_ptcls::ParticleFilter::State::robotState_s::robotState_s (uint poseSize)
    +
    +inline
    +
    + +

    Definition at line 137 of file pfuclt_particles.h.

    + +
    +
    +

    Member Data Documentation

    + +
    +
    + + + + +
    pdata_t pfuclt_ptcls::ParticleFilter::State::robotState_s::conf
    +
    + +

    Definition at line 135 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    std::vector<pdata_t> pfuclt_ptcls::ParticleFilter::State::robotState_s::pose
    +
    + +

    Definition at line 134 of file pfuclt_particles.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1targetState__s-members.html b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1targetState__s-members.html new file mode 100644 index 0000000..648f461 --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1targetState__s-members.html @@ -0,0 +1,48 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_ptcls::ParticleFilter::State::targetState_s Member List
    +
    + + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1targetState__s.html b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1targetState__s.html new file mode 100644 index 0000000..0efc17f --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1State_1_1targetState__s.html @@ -0,0 +1,126 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::ParticleFilter::State::targetState_s Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_ptcls::ParticleFilter::State::targetState_s Struct Reference
    +
    +
    + +

    The targetState_s struct - saves information on the belief of the target's state. + More...

    + +

    #include <pfuclt_particles.h>

    + + + + +

    +Public Member Functions

     targetState_s ()
     
    + + + + + +

    +Public Attributes

    std::vector< pdata_tpos
     
    bool seen
     
    +

    Detailed Description

    +

    The targetState_s struct - saves information on the belief of the target's state.

    + +

    Definition at line 145 of file pfuclt_particles.h.

    +

    Constructor & Destructor Documentation

    + +
    +
    + + + + + +
    + + + + + + + +
    pfuclt_ptcls::ParticleFilter::State::targetState_s::targetState_s ()
    +
    +inline
    +
    + +

    Definition at line 150 of file pfuclt_particles.h.

    + +
    +
    +

    Member Data Documentation

    + +
    +
    + + + + +
    std::vector<pdata_t> pfuclt_ptcls::ParticleFilter::State::targetState_s::pos
    +
    + +

    Definition at line 147 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    bool pfuclt_ptcls::ParticleFilter::State::targetState_s::seen
    +
    + +

    Definition at line 148 of file pfuclt_particles.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1dynamicVariables__s-members.html b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1dynamicVariables__s-members.html new file mode 100644 index 0000000..c5d9be6 --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1dynamicVariables__s-members.html @@ -0,0 +1,53 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_ptcls::ParticleFilter::dynamicVariables_s Member List
    +
    + + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1dynamicVariables__s.html b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1dynamicVariables__s.html new file mode 100644 index 0000000..6a1eedb --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1ParticleFilter_1_1dynamicVariables__s.html @@ -0,0 +1,221 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::ParticleFilter::dynamicVariables_s Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_ptcls::ParticleFilter::dynamicVariables_s Struct Reference
    +
    +
    + +

    #include <pfuclt_particles.h>

    + + + + + + +

    +Public Member Functions

     dynamicVariables_s (ros::NodeHandle &nh, const uint nRobots)
     
    void fill_alpha (const uint robot, const std::string &str)
     
    + + + + + + + + + + + + + +

    +Public Attributes

    std::vector< std::vector< float > > alpha
     
    bool firstCallback
     
    int nParticles
     
    double oldTargetRandSTddev
     
    double resamplingPercentageToKeep
     
    double targetRandStddev
     
    +

    Detailed Description

    +
    +

    Definition at line 104 of file pfuclt_particles.h.

    +

    Constructor & Destructor Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    pfuclt_ptcls::ParticleFilter::dynamicVariables_s::dynamicVariables_s (ros::NodeHandle & nh,
    const uint nRobots 
    )
    +
    + +

    Definition at line 1210 of file pfuclt_particles.cpp.

    + +
    +
    +

    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void pfuclt_ptcls::ParticleFilter::dynamicVariables_s::fill_alpha (const uint robot,
    const std::string & str 
    )
    +
    + +

    Definition at line 1236 of file pfuclt_particles.cpp.

    + +
    +
    +

    Member Data Documentation

    + +
    +
    + + + + +
    std::vector<std::vector<float> > pfuclt_ptcls::ParticleFilter::dynamicVariables_s::alpha
    +
    + +

    Definition at line 111 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    bool pfuclt_ptcls::ParticleFilter::dynamicVariables_s::firstCallback
    +
    + +

    Definition at line 106 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    int pfuclt_ptcls::ParticleFilter::dynamicVariables_s::nParticles
    +
    + +

    Definition at line 107 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::ParticleFilter::dynamicVariables_s::oldTargetRandSTddev
    +
    + +

    Definition at line 110 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::ParticleFilter::dynamicVariables_s::resamplingPercentageToKeep
    +
    + +

    Definition at line 108 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::ParticleFilter::dynamicVariables_s::targetRandStddev
    +
    + +

    Definition at line 109 of file pfuclt_particles.h.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1landmarkObs__s-members.html b/doc/html/c++/structpfuclt__ptcls_1_1landmarkObs__s-members.html new file mode 100644 index 0000000..52ec13c --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1landmarkObs__s-members.html @@ -0,0 +1,55 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_ptcls::landmarkObs_s Member List
    +
    + + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1landmarkObs__s.html b/doc/html/c++/structpfuclt__ptcls_1_1landmarkObs__s.html new file mode 100644 index 0000000..e3aaf8e --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1landmarkObs__s.html @@ -0,0 +1,234 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::landmarkObs_s Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_ptcls::landmarkObs_s Struct Reference
    +
    +
    + +

    #include <pfuclt_particles.h>

    + + + + +

    +Public Member Functions

     landmarkObs_s ()
     
    + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    double covDD
     
    double covPP
     
    double covXX
     
    double covYY
     
    double d
     
    bool found
     
    double phi
     
    double x
     
    double y
     
    +

    Detailed Description

    +
    +

    Definition at line 70 of file pfuclt_particles.h.

    +

    Constructor & Destructor Documentation

    + +
    +
    + + + + + +
    + + + + + + + +
    pfuclt_ptcls::landmarkObs_s::landmarkObs_s ()
    +
    +inline
    +
    + +

    Definition at line 76 of file pfuclt_particles.h.

    + +
    +
    +

    Member Data Documentation

    + +
    +
    + + + + +
    double pfuclt_ptcls::landmarkObs_s::covDD
    +
    + +

    Definition at line 75 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::landmarkObs_s::covPP
    +
    + +

    Definition at line 75 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::landmarkObs_s::covXX
    +
    + +

    Definition at line 75 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::landmarkObs_s::covYY
    +
    + +

    Definition at line 75 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::landmarkObs_s::d
    +
    + +

    Definition at line 74 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    bool pfuclt_ptcls::landmarkObs_s::found
    +
    + +

    Definition at line 72 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::landmarkObs_s::phi
    +
    + +

    Definition at line 74 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::landmarkObs_s::x
    +
    + +

    Definition at line 73 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::landmarkObs_s::y
    +
    + +

    Definition at line 73 of file pfuclt_particles.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1odometry__s-members.html b/doc/html/c++/structpfuclt__ptcls_1_1odometry__s-members.html new file mode 100644 index 0000000..ace4398 --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1odometry__s-members.html @@ -0,0 +1,48 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_ptcls::odometry_s Member List
    +
    +
    + +

    This is the complete list of members for pfuclt_ptcls::odometry_s, including all inherited members.

    + + + + +
    thetapfuclt_ptcls::odometry_s
    xpfuclt_ptcls::odometry_s
    ypfuclt_ptcls::odometry_s
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1odometry__s.html b/doc/html/c++/structpfuclt__ptcls_1_1odometry__s.html new file mode 100644 index 0000000..739f6ef --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1odometry__s.html @@ -0,0 +1,106 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::odometry_s Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_ptcls::odometry_s Struct Reference
    +
    +
    + +

    #include <pfuclt_particles.h>

    + + + + + + + + +

    +Public Attributes

    double theta
     
    double x
     
    double y
     
    +

    Detailed Description

    +
    +

    Definition at line 65 of file pfuclt_particles.h.

    +

    Member Data Documentation

    + +
    +
    + + + + +
    double pfuclt_ptcls::odometry_s::theta
    +
    + +

    Definition at line 67 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::odometry_s::x
    +
    + +

    Definition at line 67 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::odometry_s::y
    +
    + +

    Definition at line 67 of file pfuclt_particles.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1targetObs__s-members.html b/doc/html/c++/structpfuclt__ptcls_1_1targetObs__s-members.html new file mode 100644 index 0000000..e3bc2a1 --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1targetObs__s-members.html @@ -0,0 +1,57 @@ + +pfuclt_omni_dataset: Member List + + + + + + + + + +
    +
    +
    pfuclt_ptcls::targetObs_s Member List
    +
    + + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/c++/structpfuclt__ptcls_1_1targetObs__s.html b/doc/html/c++/structpfuclt__ptcls_1_1targetObs__s.html new file mode 100644 index 0000000..a6fb3cd --- /dev/null +++ b/doc/html/c++/structpfuclt__ptcls_1_1targetObs__s.html @@ -0,0 +1,266 @@ + +pfuclt_omni_dataset: pfuclt_ptcls::targetObs_s Struct Reference + + + + + + + + + +
    + +
    +
    pfuclt_ptcls::targetObs_s Struct Reference
    +
    +
    + +

    #include <pfuclt_particles.h>

    + + + + +

    +Public Member Functions

     targetObs_s ()
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    double covDD
     
    double covPP
     
    double covXX
     
    double covYY
     
    double d
     
    bool found
     
    double phi
     
    double r
     
    double x
     
    double y
     
    double z
     
    +

    Detailed Description

    +
    +

    Definition at line 79 of file pfuclt_particles.h.

    +

    Constructor & Destructor Documentation

    + +
    +
    + + + + + +
    + + + + + + + +
    pfuclt_ptcls::targetObs_s::targetObs_s ()
    +
    +inline
    +
    + +

    Definition at line 86 of file pfuclt_particles.h.

    + +
    +
    +

    Member Data Documentation

    + +
    +
    + + + + +
    double pfuclt_ptcls::targetObs_s::covDD
    +
    + +

    Definition at line 84 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::targetObs_s::covPP
    +
    + +

    Definition at line 84 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::targetObs_s::covXX
    +
    + +

    Definition at line 84 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::targetObs_s::covYY
    +
    + +

    Definition at line 84 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::targetObs_s::d
    +
    + +

    Definition at line 83 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    bool pfuclt_ptcls::targetObs_s::found
    +
    + +

    Definition at line 81 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::targetObs_s::phi
    +
    + +

    Definition at line 83 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::targetObs_s::r
    +
    + +

    Definition at line 83 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::targetObs_s::x
    +
    + +

    Definition at line 82 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::targetObs_s::y
    +
    + +

    Definition at line 82 of file pfuclt_particles.h.

    + +
    +
    + +
    +
    + + + + +
    double pfuclt_ptcls::targetObs_s::z
    +
    + +

    Definition at line 82 of file pfuclt_particles.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + +
    +
    +pfuclt_omni_dataset
    +Author(s):
    +autogenerated on Mon Jul 3 2017 16:11:29 +
    + + diff --git a/doc/html/index-msg.html b/doc/html/index-msg.html index 4ce6306..2973db2 100644 --- a/doc/html/index-msg.html +++ b/doc/html/index-msg.html @@ -31,7 +31,7 @@

    Message types

    - + diff --git a/doc/html/index.html b/doc/html/index.html index 2da700c..0204034 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -10,7 +10,7 @@

    pfuclt_omni_dataset API Documentation

  • Particle Filter-Based Unified Cooperative Localization and Tracking
  • - + diff --git a/doc/html/msg/particle.html b/doc/html/msg/particle.html index 4d62e93..5514e14 100644 --- a/doc/html/msg/particle.html +++ b/doc/html/msg/particle.html @@ -26,7 +26,7 @@

    Compact Message Definition

    - + diff --git a/doc/html/msg/particles.html b/doc/html/msg/particles.html index 405b48a..67dc44c 100644 --- a/doc/html/msg/particles.html +++ b/doc/html/msg/particles.html @@ -26,7 +26,7 @@

    Compact Message Definition

    - + diff --git a/rosdoc.yaml b/rosdoc.yaml index c26ed93..db5e46f 100644 --- a/rosdoc.yaml +++ b/rosdoc.yaml @@ -2,4 +2,3 @@ name: Particle Filter-Based Unified Cooperative Localization and Tracking output_dir: c++ file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox' - exclude_patterns: '*/include/*' \ No newline at end of file