From 2ba4510a2be608a09e4e072b0a4de97f437a909a Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 1 Jun 2017 14:09:16 +0900 Subject: [PATCH 001/172] Repository split from ROBOTIS-OP3 --- .gitignore | 11 + LICENSE | 26 + ball_detector/CMakeLists.txt | 176 +++++ ball_detector/cfg/detector_params.cfg | 33 + ball_detector/cfg/detector_params_blue.cfg | 33 + ball_detector/cfg/detector_params_red.cfg | 33 + .../include/ball_detector/ball_detector.h | 157 ++++ .../ball_detector/ball_detector_config.h | 119 +++ ball_detector/launch/ball_detector.launch | 13 + ball_detector/launch/ball_detector.rviz | 138 ++++ .../launch/ball_detector_from_usb_cam.launch | 37 + .../launch/ball_detector_from_uvc.launch | 30 + .../launch/ball_detector_params.yaml | 23 + .../launch/ball_detector_params_default.yaml | 23 + .../launch/ball_detector_params_op.yaml | 23 + ball_detector/msg/circleSetStamped.msg | 9 + ball_detector/package.xml | 42 ++ ball_detector/src/ball_detector.cpp | 680 ++++++++++++++++++ ball_detector/src/ball_detector_node.cpp | 69 ++ op3_demo/CMakeLists.txt | 256 +++++++ op3_demo/Data/mp3/Autonomous soccer mode.mp3 | Bin 0 -> 13287 bytes op3_demo/Data/mp3/Bye bye.mp3 | Bin 0 -> 8271 bytes op3_demo/Data/mp3/Clap please.mp3 | Bin 0 -> 8741 bytes .../Data/mp3/Demonstration ready mode.mp3 | Bin 0 -> 13443 bytes op3_demo/Data/mp3/Headstand.mp3 | Bin 0 -> 8428 bytes op3_demo/Data/mp3/Interactive motion mode.mp3 | Bin 0 -> 13287 bytes op3_demo/Data/mp3/Intro01.mp3 | Bin 0 -> 397479 bytes op3_demo/Data/mp3/Intro02.mp3 | Bin 0 -> 389955 bytes op3_demo/Data/mp3/Intro03.mp3 | Bin 0 -> 196858 bytes op3_demo/Data/mp3/Introduction.mp3 | Bin 0 -> 244819 bytes op3_demo/Data/mp3/Left kick.mp3 | Bin 0 -> 8271 bytes op3_demo/Data/mp3/No.mp3 | Bin 0 -> 6861 bytes op3_demo/Data/mp3/Oops.mp3 | Bin 0 -> 6861 bytes op3_demo/Data/mp3/Right kick.mp3 | Bin 0 -> 7958 bytes .../Data/mp3/Sensor calibration complete.mp3 | Bin 0 -> 14070 bytes op3_demo/Data/mp3/Sensor calibration fail.mp3 | Bin 0 -> 13600 bytes op3_demo/Data/mp3/Shoot.mp3 | Bin 0 -> 6234 bytes op3_demo/Data/mp3/Sit down.mp3 | Bin 0 -> 7801 bytes op3_demo/Data/mp3/Stand up.mp3 | Bin 0 -> 8114 bytes .../Data/mp3/Start motion demonstration.mp3 | Bin 0 -> 13443 bytes .../Data/mp3/Start soccer demonstration.mp3 | Bin 0 -> 13443 bytes .../Start vision processing demonstration.mp3 | Bin 0 -> 18146 bytes op3_demo/Data/mp3/System shutdown.mp3 | Bin 0 -> 10309 bytes op3_demo/Data/mp3/Thank you.mp3 | Bin 0 -> 7174 bytes op3_demo/Data/mp3/Vision processing mode.mp3 | Bin 0 -> 13287 bytes op3_demo/Data/mp3/Wow.mp3 | Bin 0 -> 6077 bytes op3_demo/Data/mp3/Yes go.mp3 | Bin 0 -> 7174 bytes op3_demo/Data/mp3/Yes.mp3 | Bin 0 -> 7017 bytes op3_demo/Data/mp3/intro_test.mp3 | Bin 0 -> 62815 bytes op3_demo/Data/mp3/test/Announce mic test.mp3 | Bin 0 -> 21123 bytes op3_demo/Data/mp3/test/Button test mode.mp3 | Bin 0 -> 11249 bytes op3_demo/Data/mp3/test/Mic test mode.mp3 | Bin 0 -> 11092 bytes .../mp3/test/Mode button long pressed.mp3 | Bin 0 -> 12817 bytes .../Data/mp3/test/Mode button pressed.mp3 | Bin 0 -> 11406 bytes .../Data/mp3/test/Self test ready mode.mp3 | Bin 0 -> 12660 bytes .../mp3/test/Start button long pressed.mp3 | Bin 0 -> 13443 bytes .../Data/mp3/test/Start button pressed.mp3 | Bin 0 -> 12033 bytes .../Data/mp3/test/Start button test mode.mp3 | Bin 0 -> 13600 bytes .../Data/mp3/test/Start mic test mode.mp3 | Bin 0 -> 13287 bytes op3_demo/Data/mp3/test/Start playing.mp3 | Bin 0 -> 8898 bytes op3_demo/Data/mp3/test/Start recording.mp3 | Bin 0 -> 9839 bytes .../mp3/test/User button long pressed.mp3 | Bin 0 -> 13600 bytes .../Data/mp3/test/User button pressed.mp3 | Bin 0 -> 12190 bytes op3_demo/include/op3_demo/action_demo.h | 130 ++++ op3_demo/include/op3_demo/ball_follower.h | 136 ++++ op3_demo/include/op3_demo/ball_tracker.h | 123 ++++ op3_demo/include/op3_demo/button_test.h | 101 +++ op3_demo/include/op3_demo/face_tracker.h | 116 +++ op3_demo/include/op3_demo/mic_test.h | 105 +++ op3_demo/include/op3_demo/op_demo.h | 77 ++ op3_demo/include/op3_demo/soccer_demo.h | 126 ++++ op3_demo/include/op3_demo/vision_demo.h | 93 +++ op3_demo/launch/ball_tracker.launch | 10 + op3_demo/launch/demo.launch | 23 + op3_demo/launch/face_detection_op3.launch | 21 + op3_demo/launch/self_test.launch | 23 + op3_demo/package.xml | 69 ++ op3_demo/script/action_script.yaml | 23 + op3_demo/script/action_script_bk.yaml | 18 + op3_demo/src/action/action_demo.cpp | 430 +++++++++++ op3_demo/src/ball_tracker_node.cpp | 133 ++++ op3_demo/src/demo_node.cpp | 334 +++++++++ op3_demo/src/soccer/ball_follower.cpp | 331 +++++++++ op3_demo/src/soccer/ball_tracker.cpp | 261 +++++++ op3_demo/src/soccer/soccer_demo.cpp | 517 +++++++++++++ op3_demo/src/soccer_demo_node.cpp | 504 +++++++++++++ op3_demo/src/test/button_test.cpp | 268 +++++++ op3_demo/src/test/mic_test.cpp | 295 ++++++++ op3_demo/src/test_node.cpp | 380 ++++++++++ op3_demo/src/vision/face_tracker.cpp | 208 ++++++ op3_demo/src/vision/vision_demo.cpp | 247 +++++++ robotis_op3_demo/CMakeLists.txt | 4 + robotis_op3_demo/package.xml | 24 + 93 files changed, 7061 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 ball_detector/CMakeLists.txt create mode 100644 ball_detector/cfg/detector_params.cfg create mode 100644 ball_detector/cfg/detector_params_blue.cfg create mode 100644 ball_detector/cfg/detector_params_red.cfg create mode 100644 ball_detector/include/ball_detector/ball_detector.h create mode 100644 ball_detector/include/ball_detector/ball_detector_config.h create mode 100644 ball_detector/launch/ball_detector.launch create mode 100644 ball_detector/launch/ball_detector.rviz create mode 100644 ball_detector/launch/ball_detector_from_usb_cam.launch create mode 100644 ball_detector/launch/ball_detector_from_uvc.launch create mode 100644 ball_detector/launch/ball_detector_params.yaml create mode 100644 ball_detector/launch/ball_detector_params_default.yaml create mode 100644 ball_detector/launch/ball_detector_params_op.yaml create mode 100644 ball_detector/msg/circleSetStamped.msg create mode 100644 ball_detector/package.xml create mode 100644 ball_detector/src/ball_detector.cpp create mode 100644 ball_detector/src/ball_detector_node.cpp create mode 100644 op3_demo/CMakeLists.txt create mode 100644 op3_demo/Data/mp3/Autonomous soccer mode.mp3 create mode 100644 op3_demo/Data/mp3/Bye bye.mp3 create mode 100644 op3_demo/Data/mp3/Clap please.mp3 create mode 100644 op3_demo/Data/mp3/Demonstration ready mode.mp3 create mode 100644 op3_demo/Data/mp3/Headstand.mp3 create mode 100644 op3_demo/Data/mp3/Interactive motion mode.mp3 create mode 100644 op3_demo/Data/mp3/Intro01.mp3 create mode 100644 op3_demo/Data/mp3/Intro02.mp3 create mode 100644 op3_demo/Data/mp3/Intro03.mp3 create mode 100644 op3_demo/Data/mp3/Introduction.mp3 create mode 100644 op3_demo/Data/mp3/Left kick.mp3 create mode 100644 op3_demo/Data/mp3/No.mp3 create mode 100644 op3_demo/Data/mp3/Oops.mp3 create mode 100644 op3_demo/Data/mp3/Right kick.mp3 create mode 100644 op3_demo/Data/mp3/Sensor calibration complete.mp3 create mode 100644 op3_demo/Data/mp3/Sensor calibration fail.mp3 create mode 100644 op3_demo/Data/mp3/Shoot.mp3 create mode 100644 op3_demo/Data/mp3/Sit down.mp3 create mode 100644 op3_demo/Data/mp3/Stand up.mp3 create mode 100644 op3_demo/Data/mp3/Start motion demonstration.mp3 create mode 100644 op3_demo/Data/mp3/Start soccer demonstration.mp3 create mode 100644 op3_demo/Data/mp3/Start vision processing demonstration.mp3 create mode 100644 op3_demo/Data/mp3/System shutdown.mp3 create mode 100644 op3_demo/Data/mp3/Thank you.mp3 create mode 100644 op3_demo/Data/mp3/Vision processing mode.mp3 create mode 100644 op3_demo/Data/mp3/Wow.mp3 create mode 100644 op3_demo/Data/mp3/Yes go.mp3 create mode 100644 op3_demo/Data/mp3/Yes.mp3 create mode 100644 op3_demo/Data/mp3/intro_test.mp3 create mode 100644 op3_demo/Data/mp3/test/Announce mic test.mp3 create mode 100644 op3_demo/Data/mp3/test/Button test mode.mp3 create mode 100644 op3_demo/Data/mp3/test/Mic test mode.mp3 create mode 100644 op3_demo/Data/mp3/test/Mode button long pressed.mp3 create mode 100644 op3_demo/Data/mp3/test/Mode button pressed.mp3 create mode 100644 op3_demo/Data/mp3/test/Self test ready mode.mp3 create mode 100644 op3_demo/Data/mp3/test/Start button long pressed.mp3 create mode 100644 op3_demo/Data/mp3/test/Start button pressed.mp3 create mode 100644 op3_demo/Data/mp3/test/Start button test mode.mp3 create mode 100644 op3_demo/Data/mp3/test/Start mic test mode.mp3 create mode 100644 op3_demo/Data/mp3/test/Start playing.mp3 create mode 100644 op3_demo/Data/mp3/test/Start recording.mp3 create mode 100644 op3_demo/Data/mp3/test/User button long pressed.mp3 create mode 100644 op3_demo/Data/mp3/test/User button pressed.mp3 create mode 100644 op3_demo/include/op3_demo/action_demo.h create mode 100644 op3_demo/include/op3_demo/ball_follower.h create mode 100644 op3_demo/include/op3_demo/ball_tracker.h create mode 100644 op3_demo/include/op3_demo/button_test.h create mode 100644 op3_demo/include/op3_demo/face_tracker.h create mode 100644 op3_demo/include/op3_demo/mic_test.h create mode 100644 op3_demo/include/op3_demo/op_demo.h create mode 100644 op3_demo/include/op3_demo/soccer_demo.h create mode 100644 op3_demo/include/op3_demo/vision_demo.h create mode 100644 op3_demo/launch/ball_tracker.launch create mode 100644 op3_demo/launch/demo.launch create mode 100644 op3_demo/launch/face_detection_op3.launch create mode 100644 op3_demo/launch/self_test.launch create mode 100644 op3_demo/package.xml create mode 100644 op3_demo/script/action_script.yaml create mode 100644 op3_demo/script/action_script_bk.yaml create mode 100644 op3_demo/src/action/action_demo.cpp create mode 100644 op3_demo/src/ball_tracker_node.cpp create mode 100644 op3_demo/src/demo_node.cpp create mode 100644 op3_demo/src/soccer/ball_follower.cpp create mode 100644 op3_demo/src/soccer/ball_tracker.cpp create mode 100644 op3_demo/src/soccer/soccer_demo.cpp create mode 100644 op3_demo/src/soccer_demo_node.cpp create mode 100644 op3_demo/src/test/button_test.cpp create mode 100644 op3_demo/src/test/mic_test.cpp create mode 100644 op3_demo/src/test_node.cpp create mode 100644 op3_demo/src/vision/face_tracker.cpp create mode 100644 op3_demo/src/vision/vision_demo.cpp create mode 100644 robotis_op3_demo/CMakeLists.txt create mode 100644 robotis_op3_demo/package.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36a5c0a --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +build +devel +bin +lib +msg_gen +srv_gen +qtcreator-build +*~ +*.backup +*.user +*.autosave diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5298325 --- /dev/null +++ b/LICENSE @@ -0,0 +1,26 @@ +Software License Agreement (BSD License) + +Copyright (c) 2014, ROBOTIS Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of ROBOTIS nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY ROBOTIS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL ROBOTIS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt new file mode 100644 index 0000000..ed50e03 --- /dev/null +++ b/ball_detector/CMakeLists.txt @@ -0,0 +1,176 @@ +cmake_minimum_required(VERSION 2.8.3) +project(ball_detector) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + cv_bridge + geometry_msgs + image_transport + roscpp + rospy + std_msgs + dynamic_reconfigure + message_generation +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependencies might have been +## pulled in transitively but can be declared for certainty nonetheless: +## * add a build_depend tag for "message_generation" +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +add_message_files( + FILES + circleSetStamped.msg +) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +generate_messages( + DEPENDENCIES + geometry_msgs std_msgs +) + +#dynamic reconfigure cfg file +generate_dynamic_reconfigure_options(cfg/detector_params.cfg) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( + INCLUDE_DIRS include +# LIBRARIES ball_detector + CATKIN_DEPENDS cv_bridge geometry_msgs image_transport roscpp rospy std_msgs dynamic_reconfigure +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + include + ${catkin_INCLUDE_DIRS} +) + +## Declare a cpp library +#add_library(ball_detector +# src/BallDetector.cpp +# src/${PROJECT_NAME}/BallDetector.cpp +#) + +## Declare a cpp executable +add_executable(ball_detector_node + src/ball_detector.cpp + src/ball_detector_node.cpp) + +## Add cmake target dependencies of the executable/library +## as an example, message headers may need to be generated before nodes +# add_dependencies(ball_detector_node ball_detector_generate_messages_cpp) +add_dependencies(ball_detector_node ${PROJECT_NAME}_gencfg) + +## Specify libraries to link a library or executable target against +target_link_libraries(ball_detector_node + ${catkin_LIBRARIES} + yaml-cpp +) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +# install(TARGETS ball_detector ball_detector_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_ball_detector.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/ball_detector/cfg/detector_params.cfg b/ball_detector/cfg/detector_params.cfg new file mode 100644 index 0000000..2d61d6c --- /dev/null +++ b/ball_detector/cfg/detector_params.cfg @@ -0,0 +1,33 @@ +#!/usr/bin/env python +PACKAGE='ball_detector' + +from dynamic_reconfigure.parameter_generator_catkin import * + +gen = ParameterGenerator() + +# Name Type Reconfiguration levexl Description Default Min Max +gen.add("gaussian_blur_size",int_t , -1, "Size of Gaussian Blur Kernel (odd value!)", 7, 1, 11) +gen.add("gaussian_blur_sigma",double_t , -1, "Std deviation of Gaussian Blur Kernel", 2, 1, 5) +gen.add("canny_edge_th",double_t , -1, "Threshold of the edge detector", 50, 50, 200) +gen.add("hough_accum_resolution",double_t , -1, "Resolution of the Hough accumulator, in terms of inverse ratio of image resolution", 2, 1, 8) +gen.add("min_circle_dist",double_t , -1, "Minimum distance between circles", 40, 10, 200) +gen.add("hough_accum_th",double_t , -1, "Accumulator threshold to decide circle detection", 15, 10, 200) +gen.add("min_radius",int_t , -1, "Minimum circle radius allowed", 20, 10, 200) +gen.add("max_radius",int_t , -1, "Maximum circle radius allowed", 150, 100, 600) +gen.add("filter_h_min",int_t , -1, "Threshold of H filter", 180, 0, 359) +gen.add("filter_h_max",int_t , -1, "Threshold of H filter", 245, 0, 359) +gen.add("filter_s_min",int_t , -1, "Threshold of S filter", 200, 0, 255) +gen.add("filter_s_max",int_t , -1, "Threshold of S filter", 255, 0, 255) +gen.add("filter_v_min",int_t , -1, "Threshold of V filter", 50, 0, 255) +gen.add("filter_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) +gen.add("use_second_filter", bool_t, 0, "Use second filter", False) +gen.add("filter2_h_min",int_t , -1, "Threshold of H filter", 160, 0, 359) +gen.add("filter2_h_max",int_t , -1, "Threshold of H filter", 255, 0, 359) +gen.add("filter2_s_min",int_t , -1, "Threshold of S filter", 0, 0, 255) +gen.add("filter2_s_max",int_t , -1, "Threshold of S filter", 55, 0, 255) +gen.add("filter2_v_min",int_t , -1, "Threshold of V filter", 180, 0, 255) +gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) +gen.add("ellipse_size",int_t , -1, "Ellipse size", 2, 1, 9) +gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) + +exit(gen.generate(PACKAGE, "ball_detector_node", "detectorParams")) diff --git a/ball_detector/cfg/detector_params_blue.cfg b/ball_detector/cfg/detector_params_blue.cfg new file mode 100644 index 0000000..2d61d6c --- /dev/null +++ b/ball_detector/cfg/detector_params_blue.cfg @@ -0,0 +1,33 @@ +#!/usr/bin/env python +PACKAGE='ball_detector' + +from dynamic_reconfigure.parameter_generator_catkin import * + +gen = ParameterGenerator() + +# Name Type Reconfiguration levexl Description Default Min Max +gen.add("gaussian_blur_size",int_t , -1, "Size of Gaussian Blur Kernel (odd value!)", 7, 1, 11) +gen.add("gaussian_blur_sigma",double_t , -1, "Std deviation of Gaussian Blur Kernel", 2, 1, 5) +gen.add("canny_edge_th",double_t , -1, "Threshold of the edge detector", 50, 50, 200) +gen.add("hough_accum_resolution",double_t , -1, "Resolution of the Hough accumulator, in terms of inverse ratio of image resolution", 2, 1, 8) +gen.add("min_circle_dist",double_t , -1, "Minimum distance between circles", 40, 10, 200) +gen.add("hough_accum_th",double_t , -1, "Accumulator threshold to decide circle detection", 15, 10, 200) +gen.add("min_radius",int_t , -1, "Minimum circle radius allowed", 20, 10, 200) +gen.add("max_radius",int_t , -1, "Maximum circle radius allowed", 150, 100, 600) +gen.add("filter_h_min",int_t , -1, "Threshold of H filter", 180, 0, 359) +gen.add("filter_h_max",int_t , -1, "Threshold of H filter", 245, 0, 359) +gen.add("filter_s_min",int_t , -1, "Threshold of S filter", 200, 0, 255) +gen.add("filter_s_max",int_t , -1, "Threshold of S filter", 255, 0, 255) +gen.add("filter_v_min",int_t , -1, "Threshold of V filter", 50, 0, 255) +gen.add("filter_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) +gen.add("use_second_filter", bool_t, 0, "Use second filter", False) +gen.add("filter2_h_min",int_t , -1, "Threshold of H filter", 160, 0, 359) +gen.add("filter2_h_max",int_t , -1, "Threshold of H filter", 255, 0, 359) +gen.add("filter2_s_min",int_t , -1, "Threshold of S filter", 0, 0, 255) +gen.add("filter2_s_max",int_t , -1, "Threshold of S filter", 55, 0, 255) +gen.add("filter2_v_min",int_t , -1, "Threshold of V filter", 180, 0, 255) +gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) +gen.add("ellipse_size",int_t , -1, "Ellipse size", 2, 1, 9) +gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) + +exit(gen.generate(PACKAGE, "ball_detector_node", "detectorParams")) diff --git a/ball_detector/cfg/detector_params_red.cfg b/ball_detector/cfg/detector_params_red.cfg new file mode 100644 index 0000000..4fa6a18 --- /dev/null +++ b/ball_detector/cfg/detector_params_red.cfg @@ -0,0 +1,33 @@ +#!/usr/bin/env python +PACKAGE='ball_detector' + +from dynamic_reconfigure.parameter_generator_catkin import * + +gen = ParameterGenerator() + +# Name Type Reconfiguration levexl Description Default Min Max +gen.add("gaussian_blur_size",int_t , -1, "Size of Gaussian Blur Kernel (odd value!)", 7, 1, 11) +gen.add("gaussian_blur_sigma",double_t , -1, "Std deviation of Gaussian Blur Kernel", 2, 1, 5) +gen.add("canny_edge_th",double_t , -1, "Threshold of the edge detector", 50, 50, 200) +gen.add("hough_accum_resolution",double_t , -1, "Resolution of the Hough accumulator, in terms of inverse ratio of image resolution", 2, 1, 8) +gen.add("min_circle_dist",double_t , -1, "Minimum distance between circles", 40, 10, 200) +gen.add("hough_accum_th",double_t , -1, "Accumulator threshold to decide circle detection", 15, 10, 200) +gen.add("min_radius",int_t , -1, "Minimum circle radius allowed", 20, 10, 200) +gen.add("max_radius",int_t , -1, "Maximum circle radius allowed", 150, 100, 600) +gen.add("filter_h_min",int_t , -1, "Threshold of H filter", 330, 0, 359) +gen.add("filter_h_max",int_t , -1, "Threshold of H filter", 30, 0, 359) +gen.add("filter_s_min",int_t , -1, "Threshold of S filter", 128, 0, 255) +gen.add("filter_s_max",int_t , -1, "Threshold of S filter", 255, 0, 255) +gen.add("filter_v_min",int_t , -1, "Threshold of V filter", 128, 0, 255) +gen.add("filter_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) +gen.add("use_second_filter", bool_t, 0, "Use second filter", False) +gen.add("filter2_h_min",int_t , -1, "Threshold of H filter", 160, 0, 359) +gen.add("filter2_h_max",int_t , -1, "Threshold of H filter", 255, 0, 359) +gen.add("filter2_s_min",int_t , -1, "Threshold of S filter", 0, 0, 255) +gen.add("filter2_s_max",int_t , -1, "Threshold of S filter", 55, 0, 255) +gen.add("filter2_v_min",int_t , -1, "Threshold of V filter", 180, 0, 255) +gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) +gen.add("ellipse_size",int_t , -1, "Ellipse size", 5, 1, 9) +gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) + +exit(gen.generate(PACKAGE, "ball_detector_node", "detectorParams")) diff --git a/ball_detector/include/ball_detector/ball_detector.h b/ball_detector/include/ball_detector/ball_detector.h new file mode 100644 index 0000000..da8338e --- /dev/null +++ b/ball_detector/include/ball_detector/ball_detector.h @@ -0,0 +1,157 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef _BALL_DETECTOR_H_ +#define _BALL_DETECTOR_H_ + +//std +#include + +#include +#include + +//ros dependencies +#include +#include +#include +#include +#include +#include +#include + +#include "ball_detector/circleSetStamped.h" +#include "ball_detector/ball_detector_config.h" +#include "ball_detector/detectorParamsConfig.h" + +namespace robotis_op +{ + +class BallDetector +{ + public: + BallDetector(); + ~BallDetector(); + + //checks if a new image has been received + bool newImage(); + + //execute circle detection with the cureent image + void process(); + + //publish the output image (input image + marked circles) + void publishImage(); + + //publish the circle set data + void publishCircles(); + + protected: + const static int NOT_FOUND_TH = 30; + + //callbacks to image subscription + void imageCallback(const sensor_msgs::ImageConstPtr & msg); + + //callbacks to camera info subscription + void cameraInfoCallback(const sensor_msgs::CameraInfo & msg); + + void dynParamCallback(ball_detector::detectorParamsConfig &config, uint32_t level); + void enableCallback(const std_msgs::Bool::ConstPtr &msg); + + void printConfig(); + void saveConfig(); + void setInputImage(const cv::Mat & inIm); + void getOutputImage(cv::Mat & outIm); + void filterImage(); + void makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, int range); + void makeFilterMaskFromBall(const cv::Mat &source_img, cv::Mat &mask_img); + void inRangeHsv(const cv::Mat &input_img, const HsvFilter &filter_value, cv::Mat &output_img); + void mophology(const cv::Mat &intput_img, cv::Mat &output_img, int ellipse_size); + void houghDetection(const unsigned int imgEncoding); + void drawOutputImage(); + + //ros node handle + ros::NodeHandle nh_; + + ros::Subscriber enable_sub_; + + //image publisher/subscriber + image_transport::ImageTransport it_; + image_transport::Publisher image_pub_; + cv_bridge::CvImage cv_img_pub_; + image_transport::Subscriber image_sub_; + cv_bridge::CvImagePtr cv_img_ptr_sub_; + + bool enable_; + bool init_param_; + int not_found_count_; + + //circle set publisher + ball_detector::circleSetStamped circles_msg_; + ros::Publisher circles_pub_; + + //camera info subscriber + sensor_msgs::CameraInfo camera_info_msg_; + ros::Subscriber camera_info_sub_; + ros::Publisher camera_info_pub_; + + //dynamic reconfigure + DetectorConfig params_config_; + std::string param_path_; + bool has_path_; + + //flag indicating a new image has been received + bool new_image_flag_; + + //image time stamp and frame id + ros::Time sub_time_; + std::string image_frame_id_; + + //img encoding id + unsigned int img_encoding_; + + /** \brief Set of detected circles + * + * Detected circles. For a circle i: + * x_i: circles[i][0] + * y_i: circles[i][1] + * radius_i: circles[i][2] + * + **/ + std::vector circles_; + cv::Mat in_image_; + cv::Mat out_image_; + + dynamic_reconfigure::Server param_server_; + dynamic_reconfigure::Server::CallbackType callback_fnc_; +}; + +} // namespace robotis_op +#endif // _BALL_DETECTOR_H_ diff --git a/ball_detector/include/ball_detector/ball_detector_config.h b/ball_detector/include/ball_detector/ball_detector_config.h new file mode 100644 index 0000000..7182697 --- /dev/null +++ b/ball_detector/include/ball_detector/ball_detector_config.h @@ -0,0 +1,119 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef _DETECTOR_CONFIG_H_ +#define _DETECTOR_CONFIG_H_ + +namespace robotis_op +{ + +//constants +const int GAUSSIAN_BLUR_SIZE_DEFAULT = 7; +const double GAUSSIAN_BLUR_SIGMA_DEFAULT = 2; +const double CANNY_EDGE_TH_DEFAULT = 130; +const double HOUGH_ACCUM_RESOLUTION_DEFAULT = 2; +const double MIN_CIRCLE_DIST_DEFAULT = 30; +const double HOUGH_ACCUM_TH_DEFAULT = 120; +const int MIN_RADIUS_DEFAULT = 30; +const int MAX_RADIUS_DEFAULT = 400; +const unsigned int IMG_MONO = 0; +const unsigned int IMG_RGB8 = 1; +const int FILTER_RANGE_DEFAULT_MIN = 160; +const int FILTER_RANGE_DEFAULT_MAX = 255; +const int FILTER_H_MIN_DEFAULT = 0; +const int FILTER_H_MAX_DEFAULT = 30; +const int FILTER_S_MIN_DEFAULT = 0; +const int FILTER_S_MAX_DEFAULT = 255; +const int FILTER_V_MIN_DEFAULT = 0; +const int FILTER_V_MAX_DEFAULT = 255; +const int ELLIPSE_SIZE = 5; + +class HsvFilter +{ + public: + HsvFilter() + : h_min(FILTER_H_MIN_DEFAULT), + h_max(FILTER_H_MAX_DEFAULT), + s_min(FILTER_S_MIN_DEFAULT), + s_max(FILTER_S_MAX_DEFAULT), + v_min(FILTER_V_MIN_DEFAULT), + v_max(FILTER_V_MAX_DEFAULT) + { + } + + int h_min; + int h_max; + int s_min; + int s_max; + int v_min; + int v_max; +}; + +class DetectorConfig +{ + public: + int gaussian_blur_size; // size of gaussian blur kernel mask [pixel] + double gaussian_blur_sigma; // sigma of gaussian blur kernel mask [pixel] + double canny_edge_th; // threshold of the edge detector. + double hough_accum_resolution; // resolution of the Hough accumulator, in terms of inverse ratio of image resolution + double min_circle_dist; // Minimum distance between circles + double hough_accum_th; // accumulator threshold to decide circle detection + int min_radius; // minimum circle radius allowed + int max_radius; // maximum circle radius allowed + HsvFilter filter_threshold; // filter threshold + bool use_second_filter; + HsvFilter filter2_threshold; // filter threshold + int ellipse_size; + bool debug; // to debug log + + DetectorConfig() + : canny_edge_th(CANNY_EDGE_TH_DEFAULT), + hough_accum_resolution(HOUGH_ACCUM_RESOLUTION_DEFAULT), + min_circle_dist(MIN_CIRCLE_DIST_DEFAULT), + hough_accum_th(HOUGH_ACCUM_TH_DEFAULT), + min_radius(MIN_RADIUS_DEFAULT), + max_radius(MAX_RADIUS_DEFAULT), + filter_threshold(), + use_second_filter(false), + filter2_threshold(), + ellipse_size(ELLIPSE_SIZE), + debug(false) + { + } + + ~DetectorConfig() + { + } +}; + +} +#endif // _DETECTOR_CONFIG_H_ diff --git a/ball_detector/launch/ball_detector.launch b/ball_detector/launch/ball_detector.launch new file mode 100644 index 0000000..05cc278 --- /dev/null +++ b/ball_detector/launch/ball_detector.launch @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/ball_detector/launch/ball_detector.rviz b/ball_detector/launch/ball_detector.rviz new file mode 100644 index 0000000..7fd856d --- /dev/null +++ b/ball_detector/launch/ball_detector.rviz @@ -0,0 +1,138 @@ +Panels: + - Class: rviz/Displays + Help Height: 0 + Name: Displays + Property Tree Widget: + Expanded: + - /Global Options1 + - /Status1 + Splitter Ratio: 0.5 + Tree Height: 355 + - Class: rviz/Selection + Name: Selection + - Class: rviz/Tool Properties + Expanded: + - /2D Pose Estimate1 + - /2D Nav Goal1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.588679 + - Class: rviz/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rviz/Time + Experimental: false + Name: Time + SyncMode: 0 + SyncSource: Image +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.03 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Alpha: 1 + Class: rviz/RobotModel + Collision Enabled: false + Enabled: true + Links: + All Links Enabled: true + Expand Joint Details: false + Expand Link Details: false + Expand Tree: false + Link Tree Style: "" + Name: RobotModel + Robot Description: robot_description + TF Prefix: "" + Update Interval: 0 + Value: true + Visual Enabled: true + - Class: rviz/Image + Enabled: true + Image Topic: /ball_detector_node/image_out + Max Value: 1 + Median window: 5 + Min Value: 0 + Name: Image + Normalize Range: true + Queue Size: 2 + Transport Hint: compressed + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: map + Frame Rate: 30 + Name: root + Tools: + - Class: rviz/Interact + Hide Inactive Objects: true + - Class: rviz/MoveCamera + - Class: rviz/Select + - Class: rviz/FocusCamera + - Class: rviz/Measure + - Class: rviz/SetInitialPose + Topic: /initialpose + - Class: rviz/SetGoal + Topic: /move_base_simple/goal + - Class: rviz/PublishPoint + Single click: true + Topic: /clicked_point + Value: true + Views: + Current: + Class: rviz/Orbit + Distance: 10 + Enable Stereo Rendering: + Stereo Eye Separation: 0.06 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: 0 + Y: 0 + Z: 0 + Name: Current View + Near Clip Distance: 0.01 + Pitch: 0.785398 + Target Frame: + Value: Orbit (rviz) + Yaw: 0.785398 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1056 + Hide Left Dock: false + Hide Right Dock: false + Image: + collapsed: false + QMainWindow State: 000000ff00000000fd00000004000000000000027500000396fc0200000009fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000001a4000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d00610067006501000001d2000001ec0000001600ffffff000000010000010f00000396fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000002800000396000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073f0000003efc0100000002fb0000000800540069006d006501000000000000073f000002f600fffffffb0000000800540069006d00650100000000000004500000000000000000000003af0000039600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: false + Width: 1855 + X: 1985 + Y: 24 diff --git a/ball_detector/launch/ball_detector_from_usb_cam.launch b/ball_detector/launch/ball_detector_from_usb_cam.launch new file mode 100644 index 0000000..2ae61c6 --- /dev/null +++ b/ball_detector/launch/ball_detector_from_usb_cam.launch @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ball_detector/launch/ball_detector_from_uvc.launch b/ball_detector/launch/ball_detector_from_uvc.launch new file mode 100644 index 0000000..4ef7b43 --- /dev/null +++ b/ball_detector/launch/ball_detector_from_uvc.launch @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ball_detector/launch/ball_detector_params.yaml b/ball_detector/launch/ball_detector_params.yaml new file mode 100644 index 0000000..86bd8e9 --- /dev/null +++ b/ball_detector/launch/ball_detector_params.yaml @@ -0,0 +1,23 @@ +gaussian_blur_size: 7 +gaussian_blur_sigma: 2 +canny_edge_th: 100 +hough_accum_resolution: 1 +min_circle_dist: 100 +hough_accum_th: 28 +min_radius: 20 +max_radius: 300 +filter_h_min: 350 +filter_h_max: 20 +filter_s_min: 230 +filter_s_max: 255 +filter_v_min: 30 +filter_v_max: 255 +use_second_filter: false +filter2_h_min: 40 +filter2_h_max: 345 +filter2_s_min: 0 +filter2_s_max: 44 +filter2_v_min: 90 +filter2_v_max: 255 +ellipse_size: 3 +filter_debug: false \ No newline at end of file diff --git a/ball_detector/launch/ball_detector_params_default.yaml b/ball_detector/launch/ball_detector_params_default.yaml new file mode 100644 index 0000000..7310922 --- /dev/null +++ b/ball_detector/launch/ball_detector_params_default.yaml @@ -0,0 +1,23 @@ +gaussian_blur_size: 7 +gaussian_blur_sigma: 2.52 +canny_edge_th: 100.5 +hough_accum_resolution: 1 +min_circle_dist: 28.5 +hough_accum_th: 26.6 +min_radius: 25 +max_radius: 150 +filter_h_min: 350 +filter_h_max: 20 +filter_s_min: 90 +filter_s_max: 255 +filter_v_min: 86 +filter_v_max: 255 +use_second_filter: true +filter2_h_min: 30 +filter2_h_max: 355 +filter2_s_min: 0 +filter2_s_max: 40 +filter2_v_min: 200 +filter2_v_max: 255 +ellipse_size: 1 +filter_debug: false \ No newline at end of file diff --git a/ball_detector/launch/ball_detector_params_op.yaml b/ball_detector/launch/ball_detector_params_op.yaml new file mode 100644 index 0000000..7310922 --- /dev/null +++ b/ball_detector/launch/ball_detector_params_op.yaml @@ -0,0 +1,23 @@ +gaussian_blur_size: 7 +gaussian_blur_sigma: 2.52 +canny_edge_th: 100.5 +hough_accum_resolution: 1 +min_circle_dist: 28.5 +hough_accum_th: 26.6 +min_radius: 25 +max_radius: 150 +filter_h_min: 350 +filter_h_max: 20 +filter_s_min: 90 +filter_s_max: 255 +filter_v_min: 86 +filter_v_max: 255 +use_second_filter: true +filter2_h_min: 30 +filter2_h_max: 355 +filter2_s_min: 0 +filter2_s_max: 40 +filter2_v_min: 200 +filter2_v_max: 255 +ellipse_size: 1 +filter_debug: false \ No newline at end of file diff --git a/ball_detector/msg/circleSetStamped.msg b/ball_detector/msg/circleSetStamped.msg new file mode 100644 index 0000000..4ed5885 --- /dev/null +++ b/ball_detector/msg/circleSetStamped.msg @@ -0,0 +1,9 @@ +# This represents the set of detected circles + +#timestamp and frame id of the image frame +std_msgs/Header header + +#set of detected circles: +# (circles[i].x, circles[i].y) is the center point in image coordinates +# circles[i].z is the circle radius +geometry_msgs/Point[] circles diff --git a/ball_detector/package.xml b/ball_detector/package.xml new file mode 100644 index 0000000..e6f4b56 --- /dev/null +++ b/ball_detector/package.xml @@ -0,0 +1,42 @@ + + + ball_detector + 0.1.0 + + This package implements a circle-like shape detector of the input image. + It requires and input image and publish, at frame rate, a marked image + and a stamped array of circle centers and radius. + + + kayman + + BSD + + + + kayman + + catkin + + cv_bridge + geometry_msgs + image_transport + roscpp + rospy + std_msgs + dynamic_reconfigure + message_generation + + cv_bridge + geometry_msgs + image_transport + roscpp + rospy + std_msgs + dynamic_reconfigure + message_runtime + + + + + diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp new file mode 100644 index 0000000..bbe4f8d --- /dev/null +++ b/ball_detector/src/ball_detector.cpp @@ -0,0 +1,680 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include +#include + +#include "ball_detector/ball_detector.h" + +namespace robotis_op +{ + +BallDetector::BallDetector() +: nh_(ros::this_node::getName()), + it_(this->nh_), + enable_(true), + params_config_(), + init_param_(false), + not_found_count_(0) +{ + has_path_ = nh_.getParam("yaml_path", param_path_); + + if (has_path_) + std::cout << "Path : " << param_path_ << std::endl; + + //detector config struct + DetectorConfig detect_config; + + //get user parameters from dynamic reconfigure (yaml entries) + nh_.param("gaussian_blur_size", detect_config.gaussian_blur_size, params_config_.gaussian_blur_size); + if (detect_config.gaussian_blur_size % 2 == 0) + detect_config.gaussian_blur_size -= 1; + if (detect_config.gaussian_blur_size <= 0) + detect_config.gaussian_blur_size = 1; + nh_.param("gaussian_blur_sigma", detect_config.gaussian_blur_sigma, params_config_.gaussian_blur_sigma); + nh_.param("canny_edge_th", detect_config.canny_edge_th, params_config_.canny_edge_th); + nh_.param("hough_accum_resolution", detect_config.hough_accum_resolution, + params_config_.hough_accum_resolution); + nh_.param("min_circle_dist", detect_config.min_circle_dist, params_config_.min_circle_dist); + nh_.param("hough_accum_th", detect_config.hough_accum_th, params_config_.hough_accum_th); + nh_.param("min_radius", detect_config.min_radius, params_config_.min_radius); + nh_.param("max_radius", detect_config.max_radius, params_config_.max_radius); + nh_.param("filter_h_min", detect_config.filter_threshold.h_min, params_config_.filter_threshold.h_min); + nh_.param("filter_h_max", detect_config.filter_threshold.h_max, params_config_.filter_threshold.h_max); + nh_.param("filter_s_min", detect_config.filter_threshold.s_min, params_config_.filter_threshold.s_min); + nh_.param("filter_s_max", detect_config.filter_threshold.s_max, params_config_.filter_threshold.s_max); + nh_.param("filter_v_min", detect_config.filter_threshold.v_min, params_config_.filter_threshold.v_min); + nh_.param("filter_v_max", detect_config.filter_threshold.v_max, params_config_.filter_threshold.v_max); + nh_.param("use_second_filter", detect_config.use_second_filter, params_config_.use_second_filter); + nh_.param("filter2_h_min", detect_config.filter2_threshold.h_min, params_config_.filter2_threshold.h_min); + nh_.param("filter2_h_max", detect_config.filter2_threshold.h_max, params_config_.filter2_threshold.h_max); + nh_.param("filter2_s_min", detect_config.filter2_threshold.s_min, params_config_.filter2_threshold.s_min); + nh_.param("filter2_s_max", detect_config.filter2_threshold.s_max, params_config_.filter2_threshold.s_max); + nh_.param("filter2_v_min", detect_config.filter2_threshold.v_min, params_config_.filter2_threshold.v_min); + nh_.param("filter2_v_max", detect_config.filter2_threshold.v_max, params_config_.filter2_threshold.v_max); + nh_.param("ellipse_size", detect_config.ellipse_size, params_config_.ellipse_size); + nh_.param("filter_debug", detect_config.debug, params_config_.debug); + + //sets publishers + image_pub_ = it_.advertise("image_out", 100); + circles_pub_ = nh_.advertise("circle_set", 100); + camera_info_pub_ = nh_.advertise("camera_info", 100); + + //sets subscribers + enable_sub_ = nh_.subscribe("enable", 1, &BallDetector::enableCallback, this); + image_sub_ = it_.subscribe("image_in", 1, &BallDetector::imageCallback, this); + camera_info_sub_ = nh_.subscribe("cameraInfo_in", 100, &BallDetector::cameraInfoCallback, this); + + //initializes newImageFlag + new_image_flag_ = false; + + // dynamic_reconfigure + callback_fnc_ = boost::bind(&BallDetector::dynParamCallback, this, _1, _2); + param_server_.setCallback(callback_fnc_); + + //sets config and prints it + params_config_ = detect_config; + init_param_ = true; + printConfig(); +} + +BallDetector::~BallDetector() +{ + +} + +bool BallDetector::newImage() +{ + if (new_image_flag_) + { + new_image_flag_ = false; + return true; + } + else + { + return false; + } +} + +void BallDetector::process() +{ + if(enable_ == false) + return; + + if (cv_img_ptr_sub_ != NULL) + { + //sets input image + setInputImage(cv_img_ptr_sub_->image); + + // test image filtering + filterImage(); + + //detect circles + houghDetection(this->img_encoding_); + } +} + +void BallDetector::publishImage() +{ + if(enable_ == false) + return; + + //image_raw topic + cv_img_pub_.header.seq++; + cv_img_pub_.header.stamp = sub_time_; + cv_img_pub_.header.frame_id = image_frame_id_; + switch (img_encoding_) + { + case IMG_RGB8: + cv_img_pub_.encoding = sensor_msgs::image_encodings::RGB8; + break; + case IMG_MONO: + cv_img_pub_.encoding = sensor_msgs::image_encodings::MONO8; + break; + default: + cv_img_pub_.encoding = sensor_msgs::image_encodings::MONO8; + break; + } + getOutputImage(cv_img_pub_.image); + image_pub_.publish(cv_img_pub_.toImageMsg()); + camera_info_pub_.publish(camera_info_msg_); +} + +void BallDetector::publishCircles() +{ + if(enable_ == false) + return; + + if (circles_.size() == 0) + return; + + //clears and resize the message + circles_msg_.circles.clear(); + circles_msg_.circles.resize(circles_.size()); + + //fill header + circles_msg_.header.seq++; + circles_msg_.header.stamp = sub_time_; + circles_msg_.header.frame_id = "detector"; //To do: get frame_id from input image + + //fill circle data + // top(-1), bottom(+1) + // left(-1), right(+1) + for (int idx = 0; idx < circles_.size(); idx++) + { + circles_msg_.circles[idx].x = circles_[idx][0] / in_image_.cols * 2 - 1; // x (-1 ~ 1) + circles_msg_.circles[idx].y = circles_[idx][1] / in_image_.rows * 2 - 1; // y (-1 ~ 1) + circles_msg_.circles[idx].z = circles_[idx][2]; // radius + } + + //publish message + circles_pub_.publish(circles_msg_); + + //ball_detecting process time + //ros::Duration _process_dur = ros::Time::now() - sub_time_; + //ROS_INFO_STREAM("== Ball detecting processing time : " << _process_dur); +} + +void BallDetector::enableCallback(const std_msgs::Bool::ConstPtr &msg) +{ + enable_ = msg->data; +} + +void BallDetector::imageCallback(const sensor_msgs::ImageConstPtr & msg) +{ + if(enable_ == false) + return; + + try + { + if (msg->encoding.compare(sensor_msgs::image_encodings::MONO8) == 0) + this->img_encoding_ = IMG_MONO; + if (msg->encoding.compare(sensor_msgs::image_encodings::RGB8) == 0) + this->img_encoding_ = IMG_RGB8; + this->cv_img_ptr_sub_ = cv_bridge::toCvCopy(msg, msg->encoding); + } catch (cv_bridge::Exception& e) + { + ROS_ERROR("cv_bridge exception: %s", e.what()); + return; + } + + //indicates a new image is available + this->sub_time_ = msg->header.stamp; + this->image_frame_id_ = msg->header.frame_id; + this->new_image_flag_ = true; + return; +} + +void BallDetector::dynParamCallback(ball_detector::detectorParamsConfig &config, uint32_t level) +{ + params_config_.gaussian_blur_size = config.gaussian_blur_size; + params_config_.gaussian_blur_sigma = config.gaussian_blur_sigma; + params_config_.canny_edge_th = config.canny_edge_th; + params_config_.hough_accum_resolution = config.hough_accum_resolution; + params_config_.min_circle_dist = config.min_circle_dist; + params_config_.hough_accum_th = config.hough_accum_th; + params_config_.min_radius = config.min_radius; + params_config_.max_radius = config.max_radius; + params_config_.filter_threshold.h_min = config.filter_h_min; + params_config_.filter_threshold.h_max = config.filter_h_max; + params_config_.filter_threshold.s_min = config.filter_s_min; + params_config_.filter_threshold.s_max = config.filter_s_max; + params_config_.filter_threshold.v_min = config.filter_v_min; + params_config_.filter_threshold.v_max = config.filter_v_max; + params_config_.use_second_filter = config.use_second_filter; + params_config_.filter2_threshold.h_min = config.filter2_h_min; + params_config_.filter2_threshold.h_max = config.filter2_h_max; + params_config_.filter2_threshold.s_min = config.filter2_s_min; + params_config_.filter2_threshold.s_max = config.filter2_s_max; + params_config_.filter2_threshold.v_min = config.filter2_v_min; + params_config_.filter2_threshold.v_max = config.filter2_v_max; + params_config_.ellipse_size = config.ellipse_size; + params_config_.debug = config.debug_image; + + // gaussian_blur has to be odd number. + if (params_config_.gaussian_blur_size % 2 == 0) + params_config_.gaussian_blur_size -= 1; + if (params_config_.gaussian_blur_size <= 0) + params_config_.gaussian_blur_size = 1; + + printConfig(); + saveConfig(); +} + +void BallDetector::cameraInfoCallback(const sensor_msgs::CameraInfo & msg) +{ + if(enable_ == false) + return; + + camera_info_msg_ = msg; +} + +void BallDetector::printConfig() +{ + if (init_param_ == false) + return; + + std::cout << "Detetctor Configuration:" << std::endl << " gaussian_blur_size: " + << params_config_.gaussian_blur_size << std::endl << " gaussian_blur_sigma: " + << params_config_.gaussian_blur_sigma << std::endl << " canny_edge_th: " << params_config_.canny_edge_th + << std::endl << " hough_accum_resolution: " << params_config_.hough_accum_resolution << std::endl + << " min_circle_dist: " << params_config_.min_circle_dist << std::endl << " hough_accum_th: " + << params_config_.hough_accum_th << std::endl << " min_radius: " << params_config_.min_radius + << std::endl << " max_radius: " << params_config_.max_radius << std::endl << " filter_h_min: " + << params_config_.filter_threshold.h_min << std::endl << " filter_h_max: " + << params_config_.filter_threshold.h_max << std::endl << " filter_s_min: " + << params_config_.filter_threshold.s_min << std::endl << " filter_s_max: " + << params_config_.filter_threshold.s_max << std::endl << " filter_v_min: " + << params_config_.filter_threshold.v_min << std::endl << " filter_v_max: " + << params_config_.filter_threshold.v_max << std::endl << " use_second_filter: " + << params_config_.use_second_filter << std::endl << " filter2_h_min: " + << params_config_.filter2_threshold.h_min << std::endl << " filter2_h_max: " + << params_config_.filter2_threshold.h_max << std::endl << " filter2_s_min: " + << params_config_.filter2_threshold.s_min << std::endl << " filter2_s_max: " + << params_config_.filter2_threshold.s_max << std::endl << " filter2_v_min: " + << params_config_.filter2_threshold.v_min << std::endl << " filter2_v_max: " + << params_config_.filter2_threshold.v_max << std::endl << " ellipse_size: " + << params_config_.ellipse_size << std::endl << " filter_image_to_debug: " << params_config_.debug + << std::endl << std::endl; +} + +void BallDetector::saveConfig() +{ + if (has_path_ == false) + return; + + YAML::Emitter yaml_out; + + yaml_out << YAML::BeginMap; + yaml_out << YAML::Key << "gaussian_blur_size" << YAML::Value << params_config_.gaussian_blur_size; + yaml_out << YAML::Key << "gaussian_blur_sigma" << YAML::Value << params_config_.gaussian_blur_sigma; + yaml_out << YAML::Key << "canny_edge_th" << YAML::Value << params_config_.canny_edge_th; + yaml_out << YAML::Key << "hough_accum_resolution" << YAML::Value << params_config_.hough_accum_resolution; + yaml_out << YAML::Key << "min_circle_dist" << YAML::Value << params_config_.min_circle_dist; + yaml_out << YAML::Key << "hough_accum_th" << YAML::Value << params_config_.hough_accum_th; + yaml_out << YAML::Key << "min_radius" << YAML::Value << params_config_.min_radius; + yaml_out << YAML::Key << "max_radius" << YAML::Value << params_config_.max_radius; + yaml_out << YAML::Key << "filter_h_min" << YAML::Value << params_config_.filter_threshold.h_min; + yaml_out << YAML::Key << "filter_h_max" << YAML::Value << params_config_.filter_threshold.h_max; + yaml_out << YAML::Key << "filter_s_min" << YAML::Value << params_config_.filter_threshold.s_min; + yaml_out << YAML::Key << "filter_s_max" << YAML::Value << params_config_.filter_threshold.s_max; + yaml_out << YAML::Key << "filter_v_min" << YAML::Value << params_config_.filter_threshold.v_min; + yaml_out << YAML::Key << "filter_v_max" << YAML::Value << params_config_.filter_threshold.v_max; + yaml_out << YAML::Key << "use_second_filter" << YAML::Value << params_config_.use_second_filter; + yaml_out << YAML::Key << "filter2_h_min" << YAML::Value << params_config_.filter2_threshold.h_min; + yaml_out << YAML::Key << "filter2_h_max" << YAML::Value << params_config_.filter2_threshold.h_max; + yaml_out << YAML::Key << "filter2_s_min" << YAML::Value << params_config_.filter2_threshold.s_min; + yaml_out << YAML::Key << "filter2_s_max" << YAML::Value << params_config_.filter2_threshold.s_max; + yaml_out << YAML::Key << "filter2_v_min" << YAML::Value << params_config_.filter2_threshold.v_min; + yaml_out << YAML::Key << "filter2_v_max" << YAML::Value << params_config_.filter2_threshold.v_max; + yaml_out << YAML::Key << "ellipse_size" << YAML::Value << params_config_.ellipse_size; + yaml_out << YAML::Key << "filter_debug" << YAML::Value << params_config_.debug; + yaml_out << YAML::EndMap; + + // output to file + std::ofstream fout(param_path_.c_str()); + fout << yaml_out.c_str(); +} + +void BallDetector::setInputImage(const cv::Mat & inIm) +{ + in_image_ = inIm.clone(); + + if (params_config_.debug == false) + out_image_ = in_image_.clone(); +} + +void BallDetector::getOutputImage(cv::Mat & outIm) +{ + this->drawOutputImage(); + outIm = out_image_.clone(); +} + +void BallDetector::filterImage() +{ + if (!in_image_.data) + return; + + /* + cv::Mat imgCrCb, imgCr; + cv::cvtColor(in_image_, imgCrCb, cv::COLOR_BGR2YCrCb); + std::vector _channels; + cv::split(imgCrCb, _channels); + imgCr = _channels[2]; + + cv::inRange(imgCr, params_config_.filter_h_min, params_config_.filter_h_max, imgCr); + cv::erode(imgCr, imgCr, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(5, 5)) ); + cv::dilate(imgCr, imgCr, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(5, 5)) ); + + cv::dilate(imgCr, imgCr, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(5, 5)) ); + cv::erode(imgCr, imgCr, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(5, 5)) ); + + cv::cvtColor(imgCr, in_image_, cv::COLOR_GRAY2RGB); + */ + + cv::Mat img_hsv, img_filtered; + cv::cvtColor(in_image_, img_hsv, cv::COLOR_RGB2HSV); + + inRangeHsv(img_hsv, params_config_.filter_threshold, img_filtered); + + // mophology : open and close + mophology(img_filtered, img_filtered, params_config_.ellipse_size); + + if (params_config_.use_second_filter == true) + { + // mask + cv::Mat img_mask; + + // mophology : open and close + //int ellipse_size = 30; + //int dilate_size = params_config_.max_radius; // dilate_size = ellipse_size * 10 + //cv::erode(img_filtered, img_mask, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(ellipse_size, ellipse_size))); + //cv::dilate(img_mask, img_mask, + // cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(dilate_size, dilate_size))); + + //makeFilterMask(img_filtered, img_mask, ellipse_size); + + // check hsv range + cv::Mat img_filtered2; + inRangeHsv(img_hsv, params_config_.filter2_threshold, img_filtered2); + + makeFilterMaskFromBall(img_filtered, img_mask); + cv::bitwise_and(img_filtered2, img_mask, img_filtered2); + + // mophology(img_filtered2, img_filtered2, params_config_.ellipse_size); + + // or + cv::bitwise_or(img_filtered, img_filtered2, img_filtered); + } + + mophology(img_filtered, img_filtered, params_config_.ellipse_size); + + cv::cvtColor(img_filtered, in_image_, cv::COLOR_GRAY2RGB); +} + +void BallDetector::makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, int range) +{ + // source_img. + mask_img = cv::Mat::zeros(source_img.rows, source_img.cols, CV_8UC1); + + int source_height = source_img.rows; + int source_width = source_img.cols; + + // channel : 1 + if (source_img.channels() != 1) + return; + + for (int i = 0; i < source_height; i++) + { + for (int j = 0; j < source_width; j++) + { + uint8_t pixel = source_img.at(i, j); + + if (pixel == 0) + continue; + + for (int mask_i = i - range; mask_i <= i + range; mask_i++) + { + if (mask_i < 0 || mask_i >= source_height) + continue; + + for (int mask_j = j - range; mask_j <= j + range; mask_j++) + { + if (mask_j < 0 || mask_j >= source_width) + continue; + + mask_img.at(mask_i, mask_j, 0) = 255; + } + } + } + } +} + +void BallDetector::makeFilterMaskFromBall(const cv::Mat &source_img, cv::Mat &mask_img) +{ + // source_img. + mask_img = cv::Mat::zeros(source_img.rows, source_img.cols, CV_8UC1); + + if(circles_.size() == 0) + return; + + // channel : 1 + if (source_img.channels() != 1) + return; + + // for (int i = 0; i < circles_.size(); i++) + // { + // if (circles_[i][0] != -1) + // { + // // _center = cv::Point(cvRound(circles_[_i][0]), cvRound(circles_[_i][1])); + // int center_x = cvRound(circles_[i][0]); + // int center_y = cvRound(circles_[i][1]); + // int radius = cvRound(circles_[i][2]) * 1.5; + // + // for (int mask_i = center_y - radius; mask_i <= center_y + radius; mask_i++) + // { + // if (mask_i < 0 || mask_i >= source_img.rows) + // continue; + // + // int mask_offset = abs(mask_i - center_y) * 0.5; + // + // for (int mask_j = center_x - radius + mask_offset; mask_j <= center_x + radius - mask_offset; mask_j++) + // { + // if (mask_j < 0 || mask_j >= source_img.cols) + // continue; + // + // mask_img.at(mask_i, mask_j, 0) = 255; + // } + // } + // + // } + // } + + cv::Mat img_labels, stats, centroids; + int numOfLables = cv::connectedComponentsWithStats(source_img, img_labels, + stats, centroids, 8,CV_32S); + for (int j = 1; j < numOfLables; j++) + { + int area = stats.at(j, cv::CC_STAT_AREA); + int left = stats.at(j, cv::CC_STAT_LEFT); + int top = stats.at(j, cv::CC_STAT_TOP); + int width = stats.at(j, cv::CC_STAT_WIDTH); + int height = stats.at(j, cv::CC_STAT_HEIGHT); + + int center_x = left + width * 0.5; + int center_y = top + height * 0.5; + int radius = (width + height) * 0.5; + + for (int mask_i = center_y - radius; mask_i <= center_y + radius; mask_i++) + { + if (mask_i < 0 || mask_i >= source_img.rows) + continue; + + int mask_offset = abs(mask_i - center_y) * 0.5; + + for (int mask_j = center_x - radius + mask_offset; mask_j <= center_x + radius - mask_offset; mask_j++) + { + if (mask_j < 0 || mask_j >= source_img.cols) + continue; + + mask_img.at(mask_i, mask_j, 0) = 255; + } + } + } + +} + +void BallDetector::inRangeHsv(const cv::Mat &input_img, const HsvFilter &filter_value, cv::Mat &output_img) +{ + // 0-360 -> 0-180 + int scaled_hue_min = static_cast(filter_value.h_min * 0.5); + int scaled_hue_max = static_cast(filter_value.h_max * 0.5); + + if (scaled_hue_min <= scaled_hue_max) + { + cv::Scalar min_value = cv::Scalar(scaled_hue_min, filter_value.s_min, filter_value.v_min, 0); + cv::Scalar max_value = cv::Scalar(scaled_hue_max, filter_value.s_max, filter_value.v_max, 0); + + cv::inRange(input_img, min_value, max_value, output_img); + } + else + { + cv::Mat lower_hue_range, upper_hue_range; + cv::Scalar min_value, max_value; + + min_value = cv::Scalar(0, filter_value.s_min, filter_value.v_min, 0); + max_value = cv::Scalar(scaled_hue_max, filter_value.s_max, filter_value.v_max, 0); + cv::inRange(input_img, min_value, max_value, lower_hue_range); + + min_value = cv::Scalar(scaled_hue_min, filter_value.s_min, filter_value.v_min, 0); + max_value = cv::Scalar(179, filter_value.s_max, filter_value.v_max, 0); + cv::inRange(input_img, min_value, max_value, upper_hue_range); + + cv::bitwise_or(lower_hue_range, upper_hue_range, output_img); + } +} + +void BallDetector::mophology(const cv::Mat &intput_img, cv::Mat &output_img, int ellipse_size) +{ + cv::erode(intput_img, output_img, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(ellipse_size, ellipse_size))); + cv::dilate(output_img, output_img, + cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(ellipse_size * 2, ellipse_size * 2))); + + cv::dilate(output_img, output_img, + cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(ellipse_size, ellipse_size))); + cv::erode(output_img, output_img, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(ellipse_size, ellipse_size))); +} + +void BallDetector::houghDetection(const unsigned int imgEncoding) +{ + cv::Mat gray_image; + std::vector circles_current; + std::vector prev_circles = circles_; + + //clear previous circles + circles_.clear(); + + // If input image is RGB, convert it to gray + if (imgEncoding == IMG_RGB8) + cv::cvtColor(in_image_, gray_image, CV_RGB2GRAY); + + //Reduce the noise so we avoid false circle detection + cv::GaussianBlur(gray_image, gray_image, cv::Size(params_config_.gaussian_blur_size, params_config_.gaussian_blur_size), + params_config_.gaussian_blur_sigma); + + //double hough_accum_th = (not_found_count_ < NOT_FOUND_TH) ? + // params_config_.hough_accum_th : params_config_.hough_accum_th * 0.5; + double hough_accum_th = params_config_.hough_accum_th; + + // std::cout << "Not found : " << not_found_count_ << ", value : " << hough_accum_th << std::endl; + + //Apply the Hough Transform to find the circles + cv::HoughCircles(gray_image, circles_current, CV_HOUGH_GRADIENT, params_config_.hough_accum_resolution, + params_config_.min_circle_dist, params_config_.canny_edge_th, hough_accum_th, + params_config_.min_radius, params_config_.max_radius); + + //set found circles to circles set. Apply some condition if desired. + //for (int ii = 0; ii < circles_current.size(); ii++) + //{ + // circles_.push_back(circles_current.at(ii)); + // // std::cout << "circle " << ii << ": (" << circles.at(ii)[0] << "," << circles.at(ii)[1] << ")" << std::endl; + //} + + if(circles_current.size() == 0) + not_found_count_ += 1; + else + not_found_count_ = 0; + + double alpha = 0.2; + + for(int ix = 0; ix < circles_current.size(); ix++) + { + cv::Point2d center = cv::Point(circles_current[ix][0], circles_current[ix][1]); + double radius = circles_current[ix][2]; + + for(int prev_ix = 0; prev_ix < prev_circles.size(); prev_ix++) + { + cv::Point2d prev_center = cv::Point(prev_circles[prev_ix][0], prev_circles[prev_ix][1]); + double prev_radius = prev_circles[prev_ix][2]; + + cv::Point2d diff = center - prev_center; + double radius_th = std::max(radius, prev_radius) * 0.75; + + if(sqrt(diff.dot(diff)) < radius_th) + { + if(abs(radius - prev_radius) < radius_th) + { + // std::cout << "circle - raw " << ix << ": (" << circles_current.at(ix)[0] << "," << circles_current.at(ix)[1] << ")" << std::endl; + circles_current[ix] = circles_current[ix] * alpha + prev_circles[prev_ix] * (1 - alpha); + // std::cout << "circle - lpf " << ix << ": (" << circles_current.at(ix)[0] << "," << circles_current.at(ix)[1] << ")" << std::endl; + } + + break; + } + } + + circles_.push_back(circles_current[ix]); + } +} + +void BallDetector::drawOutputImage() +{ + cv::Point center_position; + int radius = 0; + size_t ii; + + //draws results to output Image + if (params_config_.debug == true) + out_image_ = in_image_.clone(); + + for (ii = 0; ii < circles_.size(); ii++) + { + { + // cv::Point _center = cv::Point(cvRound(circles_[ii][0]), cvRound(circles_[ii][1])); + // int _radius = cvRound(circles_[ii][2]); + // cv::circle( out_image_, _center, 5, cv::Scalar(0,0,255), -1, 8, 0 );// circle center in green + // cv::circle( out_image_, _center, _radius, cv::Scalar(0,0,255), 3, 8, 0 );// circle outline in red + + int this_radius = cvRound(circles_[ii][2]); + if (this_radius > radius) + { + radius = this_radius; + center_position = cv::Point(cvRound(circles_[ii][0]), cvRound(circles_[ii][1])); + } + } + } + cv::circle(out_image_, center_position, 5, cv::Scalar(0, 0, 255), -1, 8, 0); // circle center in blue + cv::circle(out_image_, center_position, radius, cv::Scalar(0, 0, 255), 3, 8, 0); // circle outline in blue + +} + +} // namespace robotis_op diff --git a/ball_detector/src/ball_detector_node.cpp b/ball_detector/src/ball_detector_node.cpp new file mode 100644 index 0000000..a7036cd --- /dev/null +++ b/ball_detector/src/ball_detector_node.cpp @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include "ball_detector/ball_detector.h" + +//node main +int main(int argc, char **argv) +{ + //init ros + ros::init(argc, argv, "ball_detector_node"); + + //create ros wrapper object + robotis_op::BallDetector detector; + + //set node loop rate + ros::Rate loop_rate(30); + + //node loop + while (ros::ok()) + { + + //if new image , do things + if (detector.newImage()) + { + detector.process(); + detector.publishImage(); + detector.publishCircles(); + } + + //execute pending callbacks + ros::spinOnce(); + + //relax to fit output rate + loop_rate.sleep(); + } + + //exit program + return 0; +} + diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt new file mode 100644 index 0000000..7d126c5 --- /dev/null +++ b/op3_demo/CMakeLists.txt @@ -0,0 +1,256 @@ +cmake_minimum_required(VERSION 2.8.3) +project(op3_demo) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + roscpp + roslib + sensor_msgs + ball_detector + op3_walking_module_msgs + cmake_modules + robotis_math +) + +## System dependencies are found with CMake's conventions +find_package(Eigen REQUIRED) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +# add_message_files( +# FILES +# Message1.msg +# Message2.msg +# ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +# generate_messages( +# DEPENDENCIES +# sensor_msgs +# ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( + INCLUDE_DIRS include +# LIBRARIES ball_tracker + CATKIN_DEPENDS roscpp sensor_msgs +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + include + ${catkin_INCLUDE_DIRS} + ${Eigen_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(ball_tracking +# src/${PROJECT_NAME}/ball_tracking.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(ball_tracking ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +add_executable(ball_tracker_node + src/ball_tracker_node.cpp + src/soccer/ball_tracker.cpp +) + +## Add cmake target dependencies of the executable +## same as for the library above +add_dependencies(ball_tracker_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +target_link_libraries(ball_tracker_node + ${catkin_LIBRARIES} + yaml-cpp +) + +add_executable(soccer_demo_node + src/soccer_demo_node.cpp + src/soccer/ball_tracker.cpp + src/soccer/ball_follower.cpp +) + +## Add cmake target dependencies of the executable +## same as for the library above +add_dependencies(soccer_demo_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +target_link_libraries(soccer_demo_node + ${catkin_LIBRARIES} + yaml-cpp +) + +add_executable(op_demo_node + src/demo_node.cpp + src/soccer/soccer_demo.cpp + src/soccer/ball_tracker.cpp + src/soccer/ball_follower.cpp + src/action/action_demo.cpp + src/vision/vision_demo.cpp + src/vision/face_tracker.cpp +) + +## Add cmake target dependencies of the executable +## same as for the library above +add_dependencies(op_demo_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +target_link_libraries(op_demo_node + ${catkin_LIBRARIES} + yaml-cpp +) + +add_executable(self_test_node + src/test_node.cpp + src/soccer/soccer_demo.cpp + src/soccer/ball_tracker.cpp + src/soccer/ball_follower.cpp + src/action/action_demo.cpp + src/vision/vision_demo.cpp + src/vision/face_tracker.cpp + src/test/button_test.cpp + src/test/mic_test.cpp +) + +## Add cmake target dependencies of the executable +## same as for the library above +add_dependencies(self_test_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +target_link_libraries(self_test_node + ${catkin_LIBRARIES} + yaml-cpp +) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +# install(TARGETS ball_tracking ball_tracking_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_ball_tracking.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/op3_demo/Data/mp3/Autonomous soccer mode.mp3 b/op3_demo/Data/mp3/Autonomous soccer mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ef1f8780fa17ad7e93c941e1c629b0ffbc02f2c3 GIT binary patch literal 13287 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 literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Headstand.mp3 b/op3_demo/Data/mp3/Headstand.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6864057357d3a156d50f64e1550717318fb797bf GIT binary patch literal 8428 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 A3;+NC literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Interactive motion mode.mp3 b/op3_demo/Data/mp3/Interactive motion mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..db2f2c96739416807c81dfca739431b48d247d44 GIT binary patch literal 13287 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℞Tv$`3fz15pJB$z8G25Xwwq;VDaQn=Sc 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
erG{GkVsv6>^%5_ z*GxWBwW0Ga0#&jTdv?&eyrC{#a`jZG3L+0B0lky>92ROyZCIdJkz^1D-!p;v(L;`k z2BE%-)TmN}YJP$t4pQFleV~|p@}zMH$vRXg@aF6AtF?#Y3!i$_FP^F|ezo6lbc!!0 zG3ZLHPjT=*a`uR>9naV}w%+`(=6c<&+mQR$zj1hVO(x%Ldo8+4E3|el&q!hXn@Upn zaxqtZn!~;{+CH<0{1zWbrI zWm9h%Lm6cXB!#pouBe6dfXu8wXH!#Tll-x1VxQ8HkBrVYZn$5T^0K6F$F?&Hksm`t z>KnGbcSXsSjTv{A~vE5I1nY;^kN zguyuf)Qi}`@|3XnGXvh{NuDYvtw^AB0Y|9|28 z7jm%oG)L~EVZ!g}gDOl+U4)!){?tjLC?7h>8RZ^5N+C_y#7Rv%P_UZDpg3F0rl3Kx zQD|Ae#^6peQe#ufiWtcjG?Gls)s*HO&s4sdqL%c~ z47ffo#==J%Nt*NVtgs4f*BOoL#;Uk}k~kSexsjxbX=%9_+YJ~ht=&PRg2~4ZR5Qv+BI_KJ`%(h40WDMVPb!#WKKMrzeup&ISk#KVR zQahA`nElymrcJ<|*_i;(Mxm(CZ0|~U6c36-jMx|JwOSo}>l?%IQ1b=>r5M(H+J~Xj z2)Mz(`V{5%rfqb|Kp{fX%m%V6VZLCl+|nU>?*TFMNBHUlyZBD>@uNq{rVY}h!rV)8+Ef-DRu8AGnroNCJNt$&cNO= zkLqwhU@_@pPMIq{275X2H04^wWh5`b1OG64I*x%K;BDY$UJ$A*nQHZnk1TmWJY$!N zQz8PMm9BPs^WZ0_{Suq!%$}i+-o+U|XMx)8VLw2H>zf8Y-C6G9t{L~Ay6k%7&Z=+8 znA*#D_Y9YZ(%UN!k2B(Ld6}@BJ8SA;Z{7DrXWac(Jw2^=2sU+p?Akb7F*)F~L8I^^ z@zN`JIO7j~uf_l!&moR|uD;-^f?{y0SH=oyKvLgOg(CrDb)fM=7^l!b^LZf@WA{lZ z(M_Ddy)Y1#LR8Bva=pgS?wficKMa)%tTo*UK*dC6#A8AdMQh^dOfJTK|Bbl9`|!(; zVBKS!uFC}Gnvxjsm+j)lPFS;I4!L#E46SC=G73+ymEm?FF0_&HulEfkHguu<=F=54#DQ zet?hW2QpuiqrFaFSp6gGz5f$YMAVM&CstQq?%awddleQ-kisNjd0%g{PV3Oy>y6^q z`by{Z+lo1`%Zw`E4I zH&=68d8)qIbffrJ)YLPxZ9}|oHv6GTZ{8aZu77NvS&Q4|Ujt4m6uE)HJB38Ql`fu7PhRAdm$M{C}R7@RyL2_=Kc7i{I$;@^whg zhH7Mb-(00gzTW~$Wt9jBJdmguGwo*>h&Qs}w|jkjI8d~OnlSHy6xBAjm4VD_WoqeT zL$74oN|jZwNt$`trFdGoDX>-xNQ+g|s&NaTiegR}O;p+2jq5_hS;3gGsE^-7H4%_m z_;T!#Ocvw&7#-B6?V5+94buc7r=PTFFpo~md>t0LqWCAC2fdBtsXcO70gc^+DX@G8 zVXDcsb(y%#k!=^pu}bleD_$e$yG&=J9v*Jm_n@hKqBVk+)fZjRQC*ca=a73d=f%Y% zU9F>rdSbY+4;r(4bahhw!|2WcL#IkD7um48lS+rqCP%la_Es%TXorN1zf#C7oH9R8 zF}?Q zPMs;^TpP~{xaqJK3k8TwfEIf%qW}FATlf1>ZJ1qrjD*U4Rvqd-viYLmUR;I zoriG`+W7Sg5*iAqB5jS`Rrcl(L!a$OK%HyV7Hc=t8yVVJ_jMnqrd4RA+qgP7M9SnB zroD8tO4H2G^-c}ZJW`ck=qlaoEc@tjj#DAMrW(nw(@E3!#Px^O={~rxT}3SH@3oI` z>$TUhZpw8eIaRkB$L1C?i|s3lTNuMmGV1>>I{B~J1MK@|m&5~1k=FgIJOb0G$8#l2q5*uM;14OEcr${8^%^2~3u@c|+T9Iot?G zl|y0CiU$L_!@GV>qh9))->4M5r~Pwn+5YY*&ji<%69FB;t^@&Ro+4ZF&g8x>&m_%v zy@jE`X9K6NLjI{&k03j7Z)>r&k08A6!A*XoFSjDkQ?>QrybL-ZhL zsh2F)UzKFt#Wb{Kw{(2b=4rIWclB6`rVYVuJxBWKfOp%F4=1A(NrELR_6IU&4!_-x-b9u(+^9w?XMr_n(M%O(8GI+W8Od=dZ)hVILAV00SbBdj zOx0Q*r;Lw`KMh|agIdEsC+%@iT=!&o8|59H?;eu;q{Ye3<^g~C(8HYhW2U!?@CbdM za)R$g2Big+h_=?oLpiA&(wtII#CQO0?#Gc%e9z)N_Pa!Et_}qK`T3#rKNmNDKH&d`_7`$+w4?j@zXb)a@f6ed zf6K!BiJT}X7(@UnF22c-e()5KkX)D-Q1Q|5=!zzd z#)JF4#sUtQEcL;2ZR#A1_k9r*x~w@|XfE~Wn(;%i@wtRipTj#^&0$B3928{F8%w|V ziH~nOF?9u$yD|HT>-qIsXWwH{=(xeRIBA5%EvFmHdQblx>mBR4+XSZMc)O@=`UGB5F>Mh-Ztz7)*0+!@-oB-NsoX-2Kg1Fs50=e+ zD(}tcJXGp``QV4pvHs)hrO!00rgYT$um0G%`tg6!y!x*s@3)kjp$@=~F#q0CsHS5; z`ucBDj^u*i;wyKMEcGCG!6{NSf;1f=CmvmczQ~!XVlWl)k{~3DDwhl_dBb@qYOt_H z#pP<5N_=Rb!1=5^X?>dewsNDT6$LAURAYIFWCWS^T*6+{>F(s~^1RlP{dMC$5u8WC zRWEk#t~FO~xN6~exi?a(U3T5m*01Almw!B1T`f7?)f#S{22CLEGTifFpTF3*oVoq8 z_ac7mdwBA5^}U<78oD30r_9`qXe01{q}n*|Iv%yF)o|C5H_2!Kkj(ybKo!2^UP}sd zRaB#pvlco^4)BmU-f4JwmJjOz2#;Y80SG4qRaxK%>Q@!$3l{YIal$fTybcdSn<5wt zMyQ*NE`3_35qS}v0Ws0-A0L3YEB7~;TUcB6=gQbZoG)gY{ZQ^`BdcK$WYER;lAs)G zJO~C*g;`5gSv%AX;atzFv2drE7sAF_NK~~fQ1{6)n3a`-yGp8$vkb5C_ zm#QvGPv+Z(462_>2Nh(b7$Bm=_P-#m5xsA#I=^(rR3GvmQ;+&@DQD|C9!C{DnZGvM zzzqJ}-}Ot%iLQY~j#U8G03d={k}8I#UlZm+@C#95ynOMSz_aRM1X3P6^mpFgIxh$sR)$Cr$7P+GL25Q<*AhsZq=6Dul%H>j1rn zA$z3+YSd`T%_Iv1f@Y`2FpaA0zbd2Od_#=Skd%}qLV7>@c<+B0w{*~V)U^9>?#-+h zo42w6L_*R@yGycD(ncr}U}I!Y4TYnstQGwNso)R3cZcq*>3F*}QDqlKZ{1<_oR(6X zBP89r-r|?6eq&;d!O@(;)+--p_D^p*A)>8W>(rmnEq(9(cb1fBB>tP*FXSXX5om)& zziqi`(Z=Z*F)gVBT)}U*93X&5K;5fKS=X|oQOSjog3&T#Vq5BTgDw8CMo{pDGO+^Ed{J4iR&WsLyu#$B9q`!iq$A6 zJdtHvP(9ybxQp78lq{RHaShx}W7?|biCHPJOp~HD$$!%nynngEJ@g{2IAJVgCN(P& zU^zhgDT<^+W<3t?=_p>ck`cpikRaoJx}Qfj!t2lU1cXd#hm~6g&FZ951p(g>4rR5k zS6`ZMz5?qiez&^%IAfq~Q7!du(tRZ-U7QM}=nD=_fNS|a)r06&{RGQkI1h7A$KLk4 z`DEUMH`m^U$H66GIRk0N@jp1Z$L-28_9Qn1|JY~b?PDSHa4t{rz{#~pNplWQRY=VsPb{om7uh-bV4qI@F+Bj-h@=>iEP@Dmg z`tW~)r&?G~7silBw(4lpfdFX|bahg8d|Obvav~4xK+cWtQja5J(1)YQ z!^+(@0x!$Qdui;iX;io^r=&5PV6~>-IzYiERVk@b8E;7sMe!Nsl8~eUNt7xD=V4%dI%$f3p@!$~EM={VcBZ}sx+FABytoK67_~KsoU5?J* z&Yf6{$kND@-4m##6;rSIv4-?dG~51DdHNf<;`NSslatoJkyA2(5dR%=0H__zXg0ZT z0l{3R$-?IVCWI7*JS*Q`+kA|ggmf@xnwFboSWN5R%?|T#9CBB-Be?_ZqYPP7AP6{( z=`D=~y+?^QsOSKMWn<;wuL*ZD`>-CDB6T87)SXpSMm7@d((aeGgZdL(2~OGyGG4H^ z?|#1XJ5@`2Dtb6i%)VdW;0rrmqHpW3*LFX3-(=mE3jwYQviCi0WjnC@5?VDs$E15S zX=1TBR54PCsD5Jg18YC&8#HfXTFWF%EpG?*CHWEn!Nlm0QDXu`9vW~0q#;ZbE{%;dW#c{G!AueSQXBfb0i z=EuZmGbGJjwxnYz+x`#LosAQpAPo7C4$ocMt!lK$PMmm5XOcgoV?8*e=#c2PS6Ayb z3$FdN*t6StUlmR>^0uG zZ#ejsw%{f9)p`N0hPf5XIEnnp!w`FVKA+-F$p= z$URJA5T*4;kJjj2$=lcWKU)gcEWZ5i);9ZF-Hi6rOE)sXH~cf&Xs!KiQwd|NsCwx^ z>@j_nSqwRd(D?-I3)vQAoobTl8oB!F(b%I$MqLIzUjk|xa}V5b)gC7u<-R@Y^Zz>r ze<6qX7(wmMoBS7YgvXCjm%=antylr-oUGu8<;7HYg1R9bS)4o!;@2Qk*(^o885>k% zpBK}RlBdq*TbD&sf>TfQSJ+d@4hAtvIhPrDf&=Yv7T2jfb135=JTLx;|JjX|WAE2> z>&Lz%yY23$zcSa801A>)$D9cExCYrT zWWP4G!x&SeNgrnVFW30x*UBmdP0n6z)|~JD>3!x_mdwukZzsNGgA@?&u!~NM_-EO* zIZS=LVR8;H`eCt&ba>)4lCR97vC5SAYq)BxB?MlX70!;92H3L7{S4RXU^*{4_XnPy zR2h(p3#lj}*y;-_jRHE5TBuC&ZUhU5$}m~nu-?h-ZTU*BQ%9WF%5c%$O-KX}dB|o< zCNxT~*3Rg%W|@14NoGYZo3wCeN7HnU@!Cof0olRtgr?kom5^VABsD2p5ex&DD*{pK z$#f7^W|)ntkr#T(l=-j^BZmp#qeV)fg9wt&*?{*r9EJO`ms*)Y`1ZEP&3>!z{eIxxplDmpPLEi7jgj1iE86~ zXj&vPf4PFy$z;vqf0vPD6aeT>ej`0?fI3gvuAzq@-mk!BO2fOr1PTN4M*B|K;T5ev zR+@5$sdDyZ2lEZJ$|{X=^MlAo<-vC2I}19e5_7r_4bnzm)YS$zh_7_5zZXx=DP8sq z8{B24Gzj77xqht0D`;k^v&FM`cWzA&|MAE0x8vJ*($*;}g-1-+e&|^L?$O-M-3J$+ z`P{kn^!$ULd$0I?E4;+wzb`b5_YaPdK)m{P`DYoFO#-L{fC~kHA*0v*RQyP6JsD(H zOEo@tkrXdsuc5)V!gd*NKtODIbEx>sY7A!=^g1=(Z2}vR%^C(UedoFL-fNzFI<}?+ zlI*gz=kErsOHUR*&o(RWErI~_cIdsp`EuIHFC7FN-^rmo*5r!4A*qbE<#CW0YumN^ z?_O;7DfUy{g}s*D7DXu}eqVoSl%iiAE_>>;IKYESlkX-7*Z~APJl_I*Tw~1b^7XkX zX@D9@bFZp1xxQG<0@GOdwtyURGKbBwSCJrQLK~(xWA}Spcg(Dc95~Q?*|fP0T7d~8 zk%F<>Jx*vxWeA6^wHB~?@cE1=kfh;l;^B27rA!7e!gAb=Q~xL*@NbR$7jkfA#|J+} zu}glg(s2S00RJ3mdnyA!2C{ZQI3!T8T~Tt0&Ax5wHI$Pkmk5C3HSIQz+EvGKUY#0h17P_ahnM@`HhpAA!tdL-95nu8}x&+`uG-=Hq~?DO8WSv2rZ zzN{5}u1*~JD6$a%0L1?D>_4Sb>^!T^DEW7rqd!C4I0?%cy-a@B4y`lBAubwz4OePpEPi%z?K$ z>q9m@>y$%lU6|GYr4(*x!$I*1>bS-pj|@9H)T|P5N{zmxqz3~)NLB6Po(~yprZ5&5 z2_)Q&#w6%^f^xji@?P;VPQ~p-c8?Bjs@w?KWb~!Q@_FCWLPworYCW*zwo@rx*cUcu z>JP6x0F_!?_+|%7sH_aU(<52SUL+rvG z59@D!f>l*miG87}d~?@wDAjLW zlO|Tp@wj}k7nK^#g-qooJ_v-g)_V(gBEr~@R zW>YRo|OCe)pYw=r^p3mhOxj+kZVu)~hQOb<(7XG>t)tiq^_ zatBv=CBK^m5k}B1t+p=Snq<36(t_*wO59Te+2q-qRuxi>G3xdxX|?%T%$}09PT>+d zAMh#nJw3w3h-gDN9Bx}zS9d+UI+rRC2+H;Jn?$GS`c1ucJTxmHqOQ6myh3!PBpiu? zdwP2LgcNytdin&j69qk^&Z0l#N1aVP86<6oK7G;GD*8mf7o}3e`<8Y54c_!GA=eBt<0BNNVrDoFougiI`}!oCOS)fKF3&o@KT1;$1kkJHF|3q1 zFb`mH0AZ-#Vt4EbqczS@PHwnfKhP`*H7ll??%%OC#$@bGED=Ht-8&Z@^5N1H{FI}e zP|Y|XfmKyavBI)Nx8V~3)9=xO% z+$tPx_WnbKT{s19Den7&(y02}D~8W4mgrvhqqsT|WVH-?Y}DvW$8^^!{UNjT?3q=5 z_P`;3{o}_stL9j16ew!$`0ri=`-Pm?$8p-g`D>Gu-!s-VG;xtD_+Js4Pym#m)>yAP z!)sK#p*C5~tBDyqPS>DBfU_Ly8R0F#g6mzXDTrQ_OsS+A7mla$YkO;wH=)atZ4~<% zXU&^4;2J3~nI8`K!SL2$wbYIJ{a`z3xHtx{phm9F=7(8;&|!$Om}9NiT(F3MYuBY0 zYvVWSR=tSo)4J$zDuu;EJ~_=kFVI^a2y;}8(qC?mW3;!uwB0-L?s=xHT1m5K`C?>f zRj#|;J2&@{nINB629xjBO`a}m+}#$cOv^&{ojuxv;oMqNz!lR2pf?^sRNFJ-%b+J(T$d~5fqhzjks7-Xex!d z4x17gXz(Q9&7lFI4Q1v@6tCw!l^{A{{)1krjSOvmSU}z^eiAvIC-&mIaN%jyo{Dr6-JST zqv)8FY&0nhf&&x|0tlLQ52-oRgfKH^<&0UotSmL>ue! zpjd8g35DLK3a-Nl4BbuLoduD3Ta-`O)pRC+;Kr=&{2&<%T({-+?g}8|TDo^WP;RJr zVlnrcEk3*CP86l~sa;r=;u&mNZ11no&F_gaLbPv5hW4FzEZ*SuzR z9`=ZFj0(V>CQ~eHA}lGfiw#DnhlSkQVbmSPU0s#rSoWz?8KHnrA+BZsLjT*o5l|ih?ky4OcDe5KC8ZhB1EFB1E zkw^+8W@MYs8P%lbjVcjdA+}{^B`{?L%LL|(+8Jo5Asqiho3N%>fZD5$2Z9-E(Jrh+ z*eQUON~5!6QxLFxI9gdu8iK>tD9y>Iqpe9sSi)WFAgdl;_Bv0FT53|KwUrezk$sDaQ8Dp$Jkw+HSnUMBbSseBMQh zK;50R5;rWp0K~5S@tV_DE91!0E@K7u+GN}kZO0@$&(vR7UcK3){Ko4kzQp%$`_p{(@o|b z_m_I5gnPR3VeP$*x+9B~glj10v9xFd)>erYL1K$F+haFqX&tFHDZQJeBQ5Y&{}d&W z$hF$0@eW$OhBtNlK>}iPXA?95L!h`~;dt%L?lE;(4B^0v_6Jk5Sl1l}P)lreS@{BW zT7N>qy|Inq_IPf;Tth;eTk(63W_z+ZJ`i&tmZK@Bnf*9T?m4ccYxBC3`98_7dYRsT z=$}mOoOsh?8qp7ouQ^A1CKr$<-Hi^~%`7uWQcR2u8p2kaSiRkG7TBdiB?Bw&L2ESS zcAG?NU~l206&}2_gjSJeKpm;+>GGsYLrYkuux$O{-6DCv1PAjJiA1CpV6D>5iy z`gJO5p?koTJR5CNkM1`@iS#ooL3<)XvC-Dg*K=*#VU&tB`+4GoeJ4vnHK!qBpL}+( zch7K6=+T4P#W`RmTp<`iPg)6l!-eXylfXf}{A@TP)*!7|45~;75v5bW`R@m)Xl8?O zde{~*+|LU`B03Ta|8Z`T-^e|qGc@+L{hc0y5F?QWMuTwFCwtHv)5EBM=Mxww(5BEuGD-9w@w|aR~GX{ zJdSe*<$x_^tgtwoCw2P6I>R~lrjotp#uI6Y7z~wBfB$A8Sa@t`V4Y_%pnW{ce!2r| zl%KuzECR^r^7`yk+?sm$)DET{(coL9lUc}UxDO?arn_dpYAc#9htS^p-q|IbW-3Sl zoRl@$bfU5gXCOHnSW918M!4VO;tsu601gFf-zmpwJfLchiq`FhtOHF0y7>zo{#3B@ zS7V9-#F{CAVYb6i-ASUb83un2AhMWe0r#nB9lC5lWKRAYRa~(iTp5K|)7?ST2apIt zK-EbGoZ5i&rqXglkMdm=F9DKtc6CCv#Gz(sGi9d4?*97>An?7DQ+Uc1cP)OqtjWBy zqYV6Jn0Hed!D$+rj;4TeGnyTosCitf4qMC}GvsGY80A zfMws~;eW&L9|qkoBAaQ?IP#ZUkMHUrOfJIZ2eoxp}7bE&w>Z~>s@JdE|oPf zc(3Euak=TcZhFkRoTF`$-VcOMzKPy6`k%F`sc?QH{)n@kPy{0z3kTPJ3`=%`fzD4R7r@L5K zw|MW@@_k_+aigO9Zh-Hr$TzL_~9CVpsW%p)wC>G70cP`v4GQ&ofw!Ap;Yf(jAR%m-Bu z18o5VW>|X)RnX@VwEo~mko$dtA0d;&11Uqx4j3^@4>W`%gkKIl4dXuq`u4dh&M4$> zX<#R{?doO~aU7+#0rG%63C=#tA*qEYp#c{=2HG!Jhs;V`XbITDyJHHn2Atl<5snUJ z7~2XB66*K_HAoj1zcP!p;b>9YwiP`H&q+8Ma~l8Ls*HzNnac!>=NuqCNVdVFtx z|AT`53%O5V`p{Xaw%OmvtqGShlGybxR(cL$751<2$+iOu`eobbx>$(`scds417Sacrp=6l{__$}0>9^2uS`|uK&Sy^UQ7e66=8Kj-E088*xjMO}Wk1hr5&S!#zZuS+a zEI|fV&i^uX`?D_*wAdeoZc@ffqM`t=V_A_xbfCt1JR#kDOhOji!gWs}YoJjM zohTT#zs;&Od>{`fu~m}>r@w)59U-=P$dIyZcKkem81mpc6kc_J8nWEuDuz(Wb}wvc zuQW&-y1=2;An1**F8VMO&6{2OaGE|%q_Sn;+{LaCIm*jJRc-eT(+$<}?Yp&&#>M4Q zQq~&al-s41yY|p}PJ*Bmc0!)M9$9(}Y9akX$(}FBga=Rg<6dOppQ$%dWHbqwfUcZP zY7`_TG#5!D2Pvk&4+@rAnn`%TTEJGdwZIKL*u)wrwlYl^xu_2|j&c?+SHb{{aCe|o z(X4MXC5UQmo64srq3y@CkW2~izHw~%#;A;2GH&=!HKcS&vPY&C9uBgHd;IMTn`8VB z5B|UJ^fz)yD~1NXf9Y>2XCh;C;f1Tz6_a1*~V)}B`E8C&(_O+5f zC>fN6D5F36sxE#z)m*@9Q^hMBUB5rsKjF5cv*q@R6$UheO0QPOq5L{_dGF6=_2gpZ zrt;H0QmaNi!^@?;;$B`39j`ThK)-6eM4Dt07oZU0$OmeAH`|^%(GvXOrm5zxX(Cz! zT5{Kk#i^7)yEYD#L7H&xM#Z3Ep&B`d%EOpTY$ru%|#T9=o&nLO>szNF;~<;P<%*D7N_E>VD^k_fPEba%b}O^ozhlJ5ZGj6Zs8dq@?ZIfgbpSgy~qbtI?I1VmFLgi%f(WpmIX7qWTu-0x3eM zQkHb=@Iw+LIkTLB%f@^$!CI>?xb3G)$U!`rNKHjjp z2RZm}IW#knhEfLt{zi`UOk?D#lDCtwEyJ`U$RU<&qhUdiMQTD&38}%0R>2Y+Rk|Md zOISk&y&sKWjvr;&rQ#~tDVEwZ8tyEFo!y=h7cuLrZ(=I7gCbJHD}%}5vh8UFw3p!|-Sg&O5yW6QDJjCHHc4O-Z?poaX z({Eb4)E-)F>9O-jbi-YsDL+dMt6yKC=V3Tu+q9B!Rx-HNrF1ejcu@cD0m7=L0!Lz$Y`NBZ-uyjK|bz$6V=<%ogF@mLF z^s4CfItAwTlb|C*uGYO^AhFB4P2SXehm8GUi;5t{XcCj)ibrGD7z%&rP%i zGy(;-fGUyTbQELzgtY}~U5!9U;w0&$09-mms%TQr_nGm8b70@4XK5^f_r4Z(SUAl0z&5>94t~s6oqeGT{ZsGAF!;{y#i`>{*(}On#8L0%i>5aJK=yt~IjN5;w0qo= zqtxG0jv(yCnc%@?twK zKyyUJ&ogVHTIVAi@z7k4s09SWn>|)-T$g~P12|_mjYkd2@z2m7r%v-993&7gv#*#dl`gd$=tU$*h)k(>T*~GsCR)?CfYfM&j(VMj zpuPsU$leS_y{^G5P|eX8k7Hyn6evu$=vQC+@$*`@mrhNOflNF-tIRr0t0(@sa;eLJ zrs|`L3a`hX^qw=Ndd@b!__Fi+?MQ3RM9ba7dXLw(&yH42W%leutL6pAesC{Y0l)C`~d_zO?(AigM22bz`}Chp7rk;9T#RL3nJ@z(`q4L%25$=+0O(+#cPewdEWz|JcQzK>_aU)3U6Y0uSKBj7@3@^VdDVz%a<8Cv{N)xZrc8(0 zY0OkoxJm%TCPohzLUWFRTIwLN7erIXZm87t?pRhgDw9(NT+e^l|2XyextX4R$*>6@ zwS9_JUjt1RpP%;@OVnSxy%f1e{oc(>e~chB4t)RPR>A!N`cFH~{mF6wM+C?I$O-bF zkYfXYF_`N0hhk$7U{TeFil)-%UfCtBR4Cy&eM( zidQ?snKGZB;4C;@&2x{>m+fKgkt*PE9Uu$k9fqM4Zdy-om^F(IJpX8@=J`RZc@nWi zBw8vHoxM>7@hBg2lbh5&MLQn8{xd|w^QU#b?7WLR)*)MR^d`5Ve(Qki@9_Yle~Fpa zr+Ygsrpq>$KU%C}-tP=`)8kLy50NAjXW|sj%&lu?ejY1G{QYa9KT=BMkB|I&htMCl zb*;!|o0b!+)m%Srcc)%iDo7zKMm`6{mXKJ6ap|`k^FTk63FQgQ@FGf0Ru3j)%I1Dj zBU6@=is_&@iryg#Tcz+fOB-R5nQS{e*bqXHD>!Gb+gY#t z)$F1oP*QK%MWwi8^<2$>tyg9q_e79U1nscAHlB6mE6D8wJdoF2QHDj$=)iLCgLA~* zMjoLC9-%!4@s=gsvIqxHu4GV#xT%D7AlyL>P9keIg9!}1cs3aAuPHx0QgdzRoa<+z z(bF}<>idZ#NUNUS^7dn|jga-KWK6)=6C?iP)vrs}B4q0FE0z9kL&m^en6Uppr=&8mCmS>4Cnrw%s4|2MpTV zdNd5RU7}QAYXX#^tM25@S5;HWx1N^n{&rC`iX@WvMn=mHw>I>n^0oP8Q$4%ELniS-}=vR%0AVxrhUQFX6e_XfqS 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ƋBvJla?j5uSZ}TjQDsa5^(|*$)^k|% zu;8$;1s1%}=ww1xgK%&Hup^sfjJ1S}MvYtt=Piz>_?lQcoR7InS~b@p-@JAQ zPn!I8f^=WZIs zVg&$yw#558rQj@@S-5cyJUc*0}Ty3-QB0?6g6i89x z)}W(!QK4A4G1VfQaR>TS5alo!ATBiI21qImZo*}0MVk^Vd;2{i8C8&m+b0XB7QYVK zpj zFTy24FxBw_OYW`j2CX53opfv%el!%_ctJEm+-+p)V_I5?%>oEqki_woRBfAk-X`Kv z54nu-s6gZR&FqUZR1aT2;LB0GQcnozh9FT_R`so)=8tx@53Qj>XWX6Nx_C72fH<`MPX z7Wj6ydLz>@>c3dr+ovd1{mG1X3pQII3dyK_;%wxnnLofP8&sCv2#LY`wGZbg~ z+m0V!AJ8lK?-=O6AomGi?!0s#QRHbPInf+c2Myuv6GTGFN#&#g_MxzD%CaxTr))BbibvKfKmEp z6v-9x<*uoA)Tr3%H#3hwj$0*!PMtq&tA&oJdm?F@(X6*+&)XWqxMa8aEr3&Z6O01) zin|8Ey2x0XYuay#IogZD-p-1*`A_QjjntYh?&>XopOOegX6ZS%k`^V@+`dK|HAims7K4t zaK`J<$wT?=H|^ZINgcK|g^m90w=dcp%~!rT)u1z6)A>C*(fxMePWS=dWBAy-*9|*| ziNfK$g2Fsr7RQS^coo7i7wsiF5?vUY0F{Cu4+k8L_Aa{AZnRGiw|QDJkx?-eT8Fg7 zYri<2Q9Bxrb4yikP0ZtlwOv9WL?kw|5`@7`zDtL*z}Ur<+ww)gg=T3kBh9JAZd3S; z#h2rPw!>IuXO`}D*P~3_B%5ZmU%Vm;*VB{>LUx(^TV>?X}YzD*)iQe_{w_+SsB-QcMqf7nGuHkghCe5#jc( z>hVSsaFI&;ktUN4RB#l`JqO)DLKSnw8_ZZ9;|0=M!hXAjRv#NWs!C7voo02sz5Cvh z)^yR>l&)@4KoQKtjDEytbVi{-&LKny0nz<4kB{Nah$GjoMRRRw{q*cWAK0YuCHSklBvm3YaM?M0S2x^TB^9}QmuR9y1{z5~PYk<_ zs&1Hd@3)HEETY6IpL{b}St+h5HdC}GYs|0zC1iD(~N`6Fxiv-kiv7XW|&VcpF>S@r{QH-kT3 zcvW8Td$sqm*}Dnt#d4@{JxCpap(x-RX;!!?;hhaXHH_M0sIHdp5v$l2_vLE6m9*`C zV0QWq19X*-=)lfn>{3PVwS=X?V@&J%RUw};wZ`Vd)||t3qZW#jp5_VEV7Re|+rXD# zQCCZv0HmI^RCE;L_vT5tr#$Vh*%?5teU#B#?eH zjd@$}U5#6-Po<(h1F-CymQq6Ff9E9IbJUPE8tEgjat=y_r8llxoMcff5Mp8|Stb>Y zOrc$|=K!#)dfK+Fx=x&K=Rg!N7wIEd?Q_h9(>~Is>=L^FaJ2y3dbfJEUNsp%EoYe~ zYdx3~l?OXZiAfYA^cIlSgtECiss#rrcrre+AA`UL0aJ}}(te|8XSk*&>fW$huZ!wP zCZTtM$MxtrcmM~O3HFsScua}_6AU}$OunfKloWeZXItrJsUQjvfN1qzI=N@Ec*^vT zlt21^z->+ewRCvD%=;;E&7AlJvQe=SC1@NdY00Kf#;72vNj@`itfTImy& zQa*MC+(gM1^_r4MwhatjocH3^?6xnpIPMyg`KcpImnVa0yO3sMI8XR&`iS%dhj|}w zR}M5G#3Fj^>8wgnsx&#!U2Wj-v1cWd>%zj44<3I1b?dRFoa+T{f}O-^b*sno1Bs?5 zRBJ?fiKL&jvRh=Wn%n9T0>`I*-f!%Gt|NGkyI7;#nI^*yPcPRF0_K>6-4pa1UU+O^ zp_*$~tFKtEeyNa@s{c5W-JtjiOTYqSV2~5as1EVv`@|;#)!^1Z0u8VQ*uZMnQ((6m zR7fBkn6w%Lfl#RJ$b4RV8#dVAkKToH45N7F6xMN!(FMY?)1t^xTL`JD*B|F+8PYXG z=UUV79DkqZ39KY@YCZ`B>`t^4L4ZP`$3{CJ81lcJ&0LASWRJ?Q*g`;ao(uCSW@wm2 z{!E}sPSEhmHBOb4-8!bO8>)7rIYZ?gv@f8B8PJB=wM6Qbx3m!H( zVZecEFU9CC%OcNvk7oH;P^<|XdT>RcqyR*APE{0M1)Tf|XRs0tZ&W~MqN z?G}dt0~*fUbCsS3G3F$M#9ysLIi(x*96Y+)4J<^d!7jJIg(vJ6bty*PqG2v+;cS3{ za7}0(!CMxjnZuj^rGW7V$ZZ{lID-vwn+zhuObF!9dOfL78#VxZm#ix@O54p`pBZlU ztSTOI07kY~#L?BWXQQRdBNe+RQVN@bq+5$haOVWmG&T87&GZdZNrBiahIeU`wZA~u z9i+Zr6IS|Cgt4sucsaT6lf4+zya#>E?DAsIPY7!dklh_;M(vTLQ=l|TI1uDshXu?g z6Of|Oqmsa7z_J7(IjIdPAV6eEi6NfJjw(~qC^15ad_@jPj9w{5(2OP>hY+CVVjz19 zAMbzsY7a(!_wamo?f+CIDCEZ$TzFkp3t)1sW9n`Xmea> zcR@&%*3YUo7Xj}J6!B(db)BlO&TE$H794@AEjfaqA{|BDnV+{TP50}YO*Q!kx zMoI#lc8^ytFT(hg>tF?DD+_)@pmQWk_wnZ;EkfIdZ%mQxbNgE^W^@_s zp=mHj1RJ$KWcgN60j#H?#N}SdL7yTwm=zF6>9+@Wi25G-3VSzKqk}O^9uBLQd?-4r zXPxWyD(uLhXkKEi^^JQ{C=jnBOchE-I7a|%bh~ryb6jia{;n2vH;THc$e9GUWvFT& zeXaHWbO>dnY*Dn=a&UjOYK_+wbpcg@-hC=6KNmAh;Z>DtSiCBMjDee{{r0bI4*nZ* z6EtUylK--D3Ho1;{H#I#b;L(HwX9#E? zUD6~0aftllI#Jb*Sc8)Uq@+IQ(T_;M)JgvyGfJchb_Oj$Qr+mO_7fKzHRcjAPNOQ| zG)eo|6T}=;PkIaiJ37%t>Z%y->k!YgXOa128QczjP=OFproPqN5F!Zyr3Ugt`8|aC zsfLdW2KbdkE~T(lD9UUsOh`xsaM;E^^XQ!$p^LdfvUif{MTj_=t9qEGvpucd7Lpqf z%^Yc<8^xy|(GOLjtoBv#PuP$uUOdwY@vui&`#Qrb2!c2drzyqmdi4sA;~$a-6lq@!cZ|6OKHUCzXcFB_wsk$db@}+J*5t4A3--p>pj4?n?ROuL;@WLn zl4hE_8h%qsRVjHKn@;lhcKL|*?t447zZ*@y3=jB~QsW>TnEq)*&^bQyF#&!=SLBTz zGS%q!5RwmDchf;y9Z@JT$`55JKv)R=1F92E1Z-lWAILnHBipx;*5m8(;5oTJfP(Ur z9sgi09o5P(oKGDcKl36BAg#1gXB-*?s#yE*rn7Gek7TDHyg@h;rJ~iRTe57aA%`W~ za_bo{mPnrzEzyj>&X+(NMM!ilT)*6Y>!`5x%MbGI(Dnw2!?dCG&&mu3;%fcJKmdAb zIM{b0u@b_?pkvJ0KD9yi=ns`O%f2>DpMFUwgCC2)y>@F)V-p&y{AukSUT}!HVb`nA zkZysn%0%(z+t>7v<`Noqd5`J@e129B zt+>W=>(>V-Iv(a2T5FaJL!M?pZZ-^8UK9U}3H^OC7Ec7b?xcwMhUX8j13M%WYnZ=*gYYYI-|n3KSXD(9O+L`(eMxc zRo5bXLhnV)E&%8#mXQg*p=)qfm(NP~0GND=nD88ErX8T`49GIWXzHeb)d~8M&cs(86Y#uv>4=|0v&}`GZ2OzGe5pwT`p=i@%qfWy zh;~X3z$3i`fJYiGN!md!DW-=8MQcSdDWNI5>F)0C8KNX#Nzf(Hefu1CFZU>p;IYS) z1YndUP;)VQNS`2M3W7EVcuTBI{dBO#MREe zT&=bV%X{KMiI%iH9_g~5SG5naf+`=ClpLGv_PU-asAO!Yrs2`ru3OE_`@g-s5uPnD z`>OSi)6jog;QEgYfoqZ*gakq$H^}4L_~&kP6d``l2j-P^HVZs%-$H=IO4B293{P`x4XDE za62a!<-ec3Wc04b@y#Hy&g8pjMD`xnZ}%S?cLIJtN&SfV{K$(m`Ssmi`vKFJT!vhG z!58S(-hC%>FMt75&u%_?06uJ}*B5CYNg?}E`%r80VRS`oO}8i}hD9jov#?*Px6F%K z>)%rq30teR4_FO!T%wI?1v=GPh{7uUY7S7GBy%2ur85}}v55pXFUtO&b;l+50jGm; zkcu@!Fon_iEZ$&C>gDE|XTaBhotzAs$gotz4ESi`V=kJYg}n5Fz4B>w;EqMEp3DZEH?^jfe@|X6X3=v z!Ola3bxGMrm$lEipXUMXujBlQ&oQnh!2qbx9oo%cOLG-!@L;jut_Wx9F++S}1X3~y zTBb3KD)GLiYU300O%cIK&!f;9g58yAq;yp=BKy70GZhxEf|&;u}vp@L^c zw)bm643HQoTr+&Ul>vrjXoqkW+Y}7Y!4QIgXn{- zM4$pzxG_B`SGm{2|3)qv0In44`xh_#`pdCyzyJS2j>xYm65;euEQdr0Bkfi1*sCdw zvZL+wsk{BGyJ<0e$!X>RU@8;zf#6iB)OVpy9xcNW@Fl0u^afhwV!Ta!wkHWr)=0b^ zZ600eQoKYtHsJ2-fZL}gYdg@)-fhC z9&xA6p%90ViDL0a=`{`Mqi{b1Mz`XaCW~Pv>;0hk919(JYsEv;pIDFc+1ErfPl0^V zbD{xw{%$!i5b{Au0-8V*A~*tG0M?XvYVwgQ%5)nR+bJB2lIcxT^Ubm=V0)gx+~EJe z@pAv+^!_(4|AyQ*>NxlgXX76$C&7cJAF`L>);+jf z%3zcxNK-|U4N<2r86}BeIhecR{i?@gMJc|kSPi_pU>44{S_;MHSI-=EeLi0_HWz#L zX05CHZWY|ci%q^xL+K-n1~#hFxl^fjraJ?dcXsaVyp7l$wby@9@_6X*)=7*8?%-pQ z5HNLI7IH|tqS%~e)T69B#cQ4OIne4i>r@J=1*-82_~EGSrOeN9Hh1(nN@g z`h+mL?javSZ=C6-0>OV+NST#yI65yolGc~kpIm_K67C7>PUNJoUwt%NOAqgRlq-tI zHHdrQ8`SNa*j-6WP-IvzHXMbW0w4(Zf$q_;IN3r9+Ygii$z{P4b6Z*CHZ(Z5%KzPv^T;G_`{EMy;TzB!kk;)@nWL(JuQGsH>4^7sB-blm@o z=D%XO?G5U<_?^L}f6@nKesz(PevH2%2L^y406*h>e&<1E0KAz<5^K2$17Kt)mub1_ zlTFN>D<(5-Gyr}tH&YW|QjfFm3?GeVK=OQLl{kjj*3BDAgS8OBSdj~{deP2ehuF*f57&>RgnQby_BxNl<+ae3#d)15m{k=)m6IZuZ>-Ye&R5N51qo3$rMYU`7- z?(k;`1WHM<3M{32onB}aJJEg!q!~)z3Jp1r-2Y9xz9-bOg3uLO&(_h+ZjpzFjD)w> z3)h6|UcYk7kO8SLokuh`9{z$wp-Q32~`mk?3B|ukzOx&!- z%PEs-TqPutA`VhN>eCJGUUu5_0}HAVh``FcRjEaQusWcLULl#JiO3F}Hn|q|@2ar= zO_B(0-=mIY-WfdpkCmGh#EHaMQT~bL5GX#&-CI@)7SVO9kWv8K>4LI>Ac&7OM8R9} zYT@RL1hml<3|p3#fuhTu>7o4$aF|C9~Q|9wR-=3?2Q;-z<}xw`Xq3X!E>$__tnfFBtv+!NMK zRtx~toY9p|-66<)Ye zr+0-h9ifDc&c@5=YdH0H1A{i1H0+1aOKy3S2c$L&B%On>D-!*hK2|{IVm;W4xkCv+ zUCI;S8mYcJF-vw3XqsmK#>s7VIDNf;_*sL{Rm}c={RuX1$~HypFh|s17cA-2yLJ9a z+{bohD>YlEm}!LUnwCfZGJu85@!bKGBC+y!d@(Y-yMi7ICK+prn9vJlNR~LotM);{ z@By~&5>9C_1ItXmm;(}&H1vlGNkas5xuX#G1t0#>fDW+1+X#iZc- zpQVb^#7CJ3_pwUWaaoTgG}DH4RAtTU#_(((c-~UR1Z_~Fiam4GKv%~3~ z7+q2HZy8;#o9}+3vyW|^I1VKLZ0M5ks-PF=t6Fy-ff4K zt+XX=!{4C!r}H-t_m*SKc4rN@+>TU#<)is~bYT-=Y3YRHa!2j@*BlVlQirNKJ$-fF z^~c9Y8q-f00VpBKi>uY`oBcPNOr^b}qGeNt4#ugSIYiHY;o&w$={jRRxpy%LmpoQ^z-->IjM4zd3Z%ph!5q zw$W7bfoEpO?GEi93VaVj6q?P)kG=VyZR=mL-1T47F>vYN#(n@Fn>TIa>A+7AKFXJH z;wEot+yylP^2dwld_sf$UOmGbx`DO&&$l3czzKLaSTHe>pNddL)e{c64a(^f!7(^> zlG~PkhCX;|js4sPIllye_eQ%EXgF;jzYrDcr>m9ls5;2n4XP%#4m7tC3&>nIK~ppb z8`Xe}kW^M^xZg#&uxxwsOH*go@p`m_I+%QudGGOdq@lEST*y*%_ZsJzzl_|C7((Nm=Jb|FGfKOb!% zk4v5}4i-KkSv0xu=yLqX=GWgooc(oWX@_AVAZKhbIBFde%M!AN628#qDmw(yALNQh z+Z)C+-~pT@Da#LwHq;?IUzo5FWl@bpv~>nqlqNt?W4XxcKRO6(>_ml5n_iUaxL2fg zyNfZ=un4%MA>|piF!-vV1e|H@Aqe>N#(WT6ePgJw@#zu7i(eiRk|>gw)_$n{sKUkZ zVxg!@kL#YE|Kei)M88NgR?~QN7GXDaSpXyJh%b+yO{)OfCXesajZgEC=@b_y8XUf^ z=ZYI@2dq|l21_R$DkG=0M^$B&2gr9wNeBfMPX#<1Xpnf@r+(7o`3wH+)kFD4DBQmM z!n!#D0HT+|-J>g?TWU7*_M6h)?@gcQ(x*x*j^5p06B|zM{JLU$U#&5AE7bDtla}5h z{djnHm9ckg$iPtN|4)?Sul>KD0MyaMlI{sFET7>Y174MXR39juza1+`-Qnd0()xa& z-l?R4su-6N7E;Y9Ot2|HD3QWoqN_NKSBWB&-pLvDrNJJ9FIjM~w4&EklId`;Do#{2 zG4`-d&Gqf@P(Osl>w+;!4;j!gOU<67dI&J~AmMY7arl)UEm0ulS)pu;*LERiwf~AV zF1~L*|3vJ=BnH}0y05AoxwCI5mY}x%@P|UYdnY{nVuT7^? zV;$k0Om6MY&SqOQUP2-92wB{uCoAG0rRZ0r-&4d=F$(Ws*YFbIH9Llu4t z%K`1XKJ(&gMSb9S-RlX??15)$el5Q&{XDdd`OR!Cwg;05E6jy(>6G=s^F~)TV{T_x z|0*jOk1i%Wx-=T;mFXNmUv#JoL&pZ7L*7i@YOLDy=XO&7f;Tv|EMp^3x6$tRTdkb8 z|GWK}fB97aOo}=NJ&6VU5z6seT(OEe`bJLyNFL(;5W&$sGw}aV_nu)*wcWbtOd$ja z5PE=sp$bR|y@(pBl+cTSpa~^(K|lml484V3q#JrwsUk%URZ2h*M8HN@6cxlS%8Bp$ zu62EToxRTfv9D|I@5~>`HA#TXC-)p|X0u+q?y;w}vs^}GVK!vGL^er55ZSoUHVhRbNaN4Wx&gDF z78NJ6?Nk{-fK%$JdKGV3;$2#v{unGJC4jFr`F0*624>9VD6#9>6e)yrGzTZ}`*DNlujzirKaH?34qH!hj7alsdy)% z&sa3OUz1&Q)%m^(@QUh!3mb2gzlkk!$++$rBFOQm2-SvybE1SSQICX+&CUwNhI7D1 z)Y20Vvy2>vCc332$}5ogtORvkeKu`!$P=ZOA^R2IeP27JRcg3{Gv~|d1h>@2RXf!p#@%snkl+93 z@%P@yzY{(BUw#$wMNp4HfFl7vq7OY}|E5tSU@j2a<0OF|4qYw1(*6p*Qki}C ziv3g(=G&9jW7oIvBZtN>w-u1#Kr|uim^5nC{yb{P8(i$EZ5YsF>0<+RkMwjG)bf3u z>{)0{oF4E3v68aL#5XeeIOm3FT3d=Kk5R3du4E4TFpr2vj387)g)_{87$khe?_$JsdI; zJBS-yR=(}-L?xi|h&V7#5alXeXoxA)FMk+f31{uK>`AEoec2bX83icfE`-!Q zmJD&Cn$u+KoECc{7A>}OkHLr20Z~8~4Go%Nd#!pfa4S8_I0=|AIjJK_Phw3NL?kP( zR*4edPat>W2 z7CYH3GL4I0`tGpR+ukzXq%?9=AZy}{x%hP9IVHZdJslnAuPf`>E0@k4)M)VCnrAX3 z?A@B$QCs?-=u0xbod2I5e_OfFw{YgdOHsl9Kn~pvk`B7)&bXw%AjfDz@1WV|SX?su zHgU(3jv0`o@$yn^aavA_ILtZ-WL?h<>C3i|>qjS zwB5ct(5Jn>Uw8Snq4xZEP3GFhPmX1sViS1ap`%vEMG*AQft^%*<1r)cu%-HVdY!*N z!DKSPVg1zmuz2$y2L}vxM$q>(v3q5bnDbP@B9t-P_e@E_A@}U|#^N&P1nJak;O0p; z!^tH)f9V|iB)e>*aNbIuDS0?XoW@P+lUP-AVNyX#na%)-MFmxLS+)L_dQpLk$4O#nR7PdAg%lD?r zos$mMqPJ6kdtyO5{X4UuwWMXBPK# z2KOJ3GXjYRg&OqFb!5XK#pkhS)D5iTjZ|H<+rc<3>;!XgY!ddfhoLA}YC;@sh!m#d zd5d&hE*Q@&V-J#2u^DVajLWIf`sK_T(wV641Lxe^DL!@#xr6Kc=h*8>jv`qyitZ51 zU`w7M1{9-LW0(k&=jD!1xTTWP0*rbE@UapGJ2oakqakt9zHjgj*Sr$W);wf8ap0jF ze9Qg*QfBn6=$f7VfuXaHWa~Rv5_xW=*Z9bTEb$`W9=|H*+P{d_3aJi!RNZ;*NDEV< zo>zQy##!ltmT3>IV<)dZFOtpj8y-tNod`%5LixS)xUNqdThz)-xNc1cu+c`CqI$zH+xQR2JKSr4zi`TRPs zbIjMG_|lb^O4{XRjvu1LkI7IekTcSyT+(M$G9Y&?z9w62OS(}#1igOcjRTwL+m!Sxdd2QN~@vj}U<6j3do<^B;)jOE&&sP7<(l?AP))xXA^A*AJV zK86Uq>Ue+7_3FW|DM_Bj#>NSG)S-iengZwlo#ys`9P5)4;|$2@J0~0_K;5gI(?RkV z-T|QGR?*m4EC?H*ttvF9hBY|T&ccPn%Co29#9NUE-V$;h=^X$EN6baF|dxHPaM zrl%6;Dr4xN{`g04^cmg+ER}71H1Ik3#NPJ1?#q^t`*Pncnok^@&6g^4=qcVP9C?MM z)`W`GgVBjc^cy}rzZ)(6+_jU~vG=6aj~LX0wa5%D zo-{SZ?k(46oA1wazS4d5;lPd>da$$q@)svLlldTdcjrVVC)sn5CP6!(;Z{CgEhj;( z4rrqsw3JsnCzlP|@37>j8tG1o7y8G|fp60Rd3;cc$U!XrE_=`XjH&GI~W&A^2kj z2G0uz%^n}Jj4=rn>^X@+1hf<2Fz`x&>xaS)g1%|IuA5jApbYKuOR!;T@`_Y{@k{D- zcz3*+p4AEAyU!V@IF|Cw&re&vB7ge*&~QDg!kK8XD0lD!C-XC1ibY$*Fx9N}0&|79 z8)nD-$|Z=~FF5Ncf_IHvSp@i}WO+^;(I+ zaiMVwD>biQNoPb13PhdXeLcP%lKV)bMry1nfKOIg)UPCTp8hdwzWBPjjB85>pB#E& zRFX}wCrvO!ss7k*q&WY-mfrq?8~}rzn7Vfn2e_pdFx~&D}3+$i!p37tuN=D%vS$Z=XPYs#yJgcH`XU#g$}Z zEB565C*r+X<}Y3RoYAQ)m6>OrN7&aElwZ3ZR1f-N>OFq2M6|H2O6ZDk*O_N(Vzp`Ao6mlEMcE$r;?r`g&_wCZ`$M5?&*)xCEuLLQI0f z&A81EzNO%~II>p7so0!&iU>q<%sCR_GxhC3p(EZ5Dv8mibK}%#@jU%BAA%5I3=m`p zj^IQX^&G(jM&gO#C1ALQ$^2L@u*4C`|2s6rd#`c%t95^aVGKwJtYcbbmdAs?`phiWCZkO|hY2x<# zT*vzkdoK>Ij6Ctw5Vvfa;4lB#G8+=F_F8r$%y+A6JaFKQ6N&j6E@S(6zf%AyWLV*j zcn&uGf5&Y7FC6KAefghQZXHKw>z%>=<5)#O5JiS#rTr7j!4Xtpt6RVD?w2_=P4N(; z_}tw`1mso?8!EzyVf6Gpcx&CceKl%-_2-HPV#;esk3kujAPOpJ_!ESNHVI-WyHp3= z{a!#!k-C#@`}8)f=eFxeVV;DA?ZVwgx&SzB`!QecYcl}QlkqT=;l1%22C*}iQg~d{ zaD(V56`p!bto!iK3$+rRH{RZ@YnOli9igs{?v`maC^=AYZm}os$7+*?C7*wNF&q7G zJ+SwKJXzjD-4uZzZyvPW0RT=q7tLf^D|&q7)9ChXMCDCweChJG_3|Ql4pUcAI$jIc zN9}J0GFgXq>|$okEz&y%RDIx0s{ z#G)pjd4N1i+l>$m8xAFB zUC~#n6|Tv5@4bG_wyk^b>kqZ7=3;>(95D^qGUvv3i&VV?eAfrHns#$XpE(-@RR4R! z?w?qW#(>gHGZKO@xk2;6#afC&=e<|NoHwYWR#XM2@+>>GEH(vIIbyQ?25`V5OM298dq^)kF z(#YM5mUQ~VfRiWPgMUkMJm8!ecQ*VeAdt)b0Ow`15NmlZ?v%=kHDy_?{ZR0pBQ zo)P&eZQmcL2@2+w`mTc#r(u2&RGzirMQkJ@Qjs7&mTo|zoGO%m<46W);3g^;m<;3e zlLxQOi9nrw)1dYJ6-E}tUG8eDV8cnhO%MQjKmn%j*gm87q$hDk888hRV~UXO^(`{W zD3ya7p{(fsSj!<0h9yO&{bn&w)-R?-ioD&>vcpc+7SioWl4W|a)3KWB*bLguqdZx+ z`OBxqX|q+ip+1%r?wu14Ur_hmIf~~BPP~;qbanBUX1MR~rMLe!%)tNEto~!=8X1r) z@}&KTmHYKa|5uiA`ZwfI=%G_~A5#&Y8RAz^YK1V}!eLQVg6cMIq~8veJsdCXArPA` z%_UG+??h0&lY^qa!C0fw_p#RTQ>%8&5aDE&St-?Mp37LXSF8pxEF=DEgm{(C=Y@+Lx;25zqU`>?7qvnB8=ZR-`^V$Lrz$TA?+5NA1;3q{eg^Ap3$$l<{!oIZ!; zv2Xibs>tsogNNTA-}9bV;**f&ow%**g7@;fxYg>AI@B@dvi6P6*WWTib5GZ#jrQZ> z5v;U4MtOsdCeucO;S^<@{V>^T(nnYsi#KDRf)O*2@JyGZ^HZwPvZXNs0j% zzk%x^#pUm~OWk)$%a=qDZ09E6G8Mr3SPdk&Wy*uA?pM#*&hkoDZyU~Bs&=b2brjLd z>fZL0+}e7<>6uf%a_WnZBT_kAJh$iT6pk{sU84#AeO3LxLg4@O`CpI&n09f~384hW zKmV)Xbx2S_S8$RH`aNWm20{YLHmIRRhVcznWb`4B#JMq z+LASZJynu>+v({$a%r`dV=@ps&v=`#b+bFgd8SpF9d8elSicu(%V)e7ICC+B!SD0z zM3c~Z#blJXv(YOK2T}+ll7FS_#>k3XJhpJ5e<{pu@(R?4S ze-<~1IU#NTf~GqDlLK9k)kpXHdvJGhQ1q1HCX>>$Li~v_0HHs@Y(zp`K=OkK$4~6M z1IIm|Wti3Vx$8LEAr4b5Aqp!Oww=dYKs|dloFM&-S-lXzOb=8$;cR^DQN>~`;207D z1(#7?g-D7TT=c{Vu?u0ds=(~hf+}1PEe>dQ(K0bUE*=aOpvJhz#Li}4RZvs#xz+PI z8o*4cT)g)<;O-c{DE(lNW9^6AB7UT#{dE~zr_S;jl@=-}8K$Kea{>7X<&r60Yq+`n z#4CL%Z~(^@iFZ|~)Er(W1xUMQuz@Zymg8V8;A60B>?^c~v~rvnV`QO_Es0Izure9I0w#rdk}u zBZM#vGYGw{`1QtUy&MRr$SUSpnCd2Gv8KTEd zGx56=&RWu+{bE}Qt4)qiMt{F7eq7{X>AfqH z`!nCpo;cb5GIW3Rcjm3VuZ;Rr+38zrb>&pJ^(l%jeigU z0!b5AQ;k^-phP;8v@H2DA3H<+LK{24oGnZwlTtu&XcK_jet=ndaJ;g=0#s!jE8AV{ zBu9CR){;$kvc9vs{D3+5NDFxD`y^34=4qnn>A(bjX7D!^=$e&u6v}65LrTY9aK|f` zQ#pBno1T#D>gjl8$$!vFg5o@(!|YNVezfdlxJWN0s_1u8!}Hsx#S&#*(5DY{x4xxK z)Ub@*Y`j6l3nfD_JOd6E*B;5ib9a|+^}cz1uZ7!7p8LwtBZ!8IO_z^cU==PyE|p@T z^YW6Tv`OqVrB2OfumUZqVK06js_GhxEYwGxjh7QU@f*L%9bD@pxbjm_0> znX--4z)Nv88p6msR&iZXl$LkKuuYYQL zcif1(_30h~3_f4TRN$Ly*l>LTe{22WJ49!5XMXX9)=Z&#XK9+*c~%VvL{alk8JYFy z<_fQ(?9NpdB<&|l_MU|Lp7@DBH|6*2tG_)-XW=#1y^5~Aq4ifCWOrWoVnS!Cd$GxH zWSalz*8`tFUaz1LhktmQJ6q^3gL(gZ;zFvh6InJ(Mh_Lu#ML*SDP3IQT$+x;0D!{L zSTK1znqm{HKy55FJri?BCC=W7{P@(h$`I}uI9G6))QH*nv-UCjr|UfRlX_%77EPY2 zk-GvW)Sr^As(kl@6qLC=%xBQ>4s;XY=4Yn)qGaSnW80qn(*T$TOCGjx!Dg#+iRR6n zkf3v+++<;J*dAqO?EgV6=%z&Z{+0&wk8-Z=?H3Y(<~(=&in*L>8vd<2Gyx`@p6TNY z%m3k6#V;ryD*9X7=1(Wdp9Gx=vxoi1J^Sa7yBr3_G!H?B@PQr=A9)9kL2}dw5F(h2 z>qsK8)XyMk$rb~$n<%rH{qKmIp@v5?Yv%Z?cFmcUuHhR!*Yes_l(DxLOYh4eNYS5( zpHA&a|K{PvUouWOCiF9@fX&qlZ;H8p0y!ePw08fgo!|@CGmU3lUs!1#+4-S+>BDz_ z!IWMZ523rxOfDa$Zp2BDF525Z&~>0YynXbl7~uBAzyJ*S&tEO%22WJhji>9ap`I?rIj{lH#Q6Q4(lx_&Q+6o%j-~4(QZC~s-wbs*X;514Z3et?4#u2dR(+~e zHwUY0f`DQrfl&fTlzkrQnq9M$DN~s@QlJwxTL9>86l3*SVVH_^Ya%4sI+g>}UwGF0 z-NF&L)_Kp`WB@`&Ng87@)>;&n^Rx;a#{Y)SdGRsqG#xG=sKoPGY~oH~@*tBk^LgmT zeI+NV7)rpkgK6j@9ITQg1s6W@-u3f~$twEB#8b_J6B$GK`IAPK;cE}8TR#;X04lZ~_D_KqUZYUuIl7@kdMs zSvZeD+X_0B=*d`GfbAx1oyMM#dy_E=a7w7pl@h~rQqR|)tA{i%#h#8(jbSpk(SJG2 zw!{v+#$~PP+KTJ*(!uIj=%`5Wp_vjXu(Gsnv3LV4oZ^OKbCkznI=UPa?UeC@3j;Dso!Ot&T@p$y@hU)0<>C6p?jgI++2jPP4XP%|q2FO4c_L*6olx zX)n5_9EZoxhbDY5e_P>q@k504OvbmbM}yZAl&lzyg=G!A zm632+n+3NFJ&(Z`fg{ye@m2?4pDlS7=*=XA(_ZS8c+iP>D?ha!zs~DhA)6ys_h7H{sSDE=I&0mVsMW7GOYlvYGmQMBdf+r*3AQ?h6z$Mg=!+@=x z^CdI5qGJc4tR_7WrW`1?aqhA*L`IEJwz6E4<;?Id9Y0P{>I-$eBd^Yr4_0eYUR30ZfEa2?qSoM0MAE>(h!~1Y~-5EKd zxi;ZbQkn{n2Ccc@2iLhK{WxMwoU1f8O`IbRaMvF0U-CE(t~DKWBt7!Y#9`bS6Vr(R z2oeJW!86&P*@2-5Avm@k&CAE(+|hnqgd+>5N!lJv4P}LMc)>|wbS@BvIntFx@CIKt zlZLUX;6jCX7#xKX!paw_s_-h0AtKD!ly)^H6{G}TC@iByJfb!#R(ksp7p5E+7tANWCi4cJ>xS3q(@&h=U{d zV8K58cW(gk;hlH5DUk~@VSE-i;kb|swWVI0E4pCn5maZ&`wVv7yYA#T%*MR_a1u13 z5G$Axmk>w6uxQnP``6OuAEWW_aQwYt{XD>!V(s})-X%;nLrp34$kDN(0bdog<6v!#0FlCQTkQ zC}xz|Eo>wV8O%B7jUW{Zy(w8Z?Y4S3fm`h?fNtYJkRr;QH7@n7f8fla1i2x9(Jrx6%jrd)}O^n z$Ke)eSP1}UC;;Q4CbLAl@36$h8q0{HOd?ph3JF7=VxV$(;)1>~x!hwgyIJ}q^crde z9aiC6z(T5FM^WcU9u-vR2n$OQ0_L&2m|zYgNT6sgd|LUr^m!`{R>KAHJ##p|wns%9 zX*>a&!Z+qBlMP3P)_5`zctCyB%A?*u`hukgqA2BfWpi1!MXQ=8j*VGg){X7Q2hC|j zN}I7zZ_XFDG;0mn9~YxoqJ6yD^SwSLhn<1MRYp1VnGamjdOF|gveziVYlw78(!)#` zV=$v!>W@)#5@frAETK!HGE$GOU0cIaI9f|D3|M=MTqcRY+^G~9J}HGN_ouq2-v?YR z=??yUG}VRQe(r`354JtIx<)eQ6^l!b>9t91-YlCz9`9#ej5vZZ_^rEr`WWekY5xVa z8tIq~VKbL${J>OxgK7VUh3v7kq=tn_Z^nC{-M;!YWM%21G9iqj_&*2y-;mSbW=uZx zECss(0!|FS>U8B#y$cuPs{Vq?$dM?Y!KgwxG)x3k*0)rsfvQwip;QV8s?YQ#9*l0m z#hABX&9FE7^~}a)(9@1Bjg}Ixj={gWUqjPXGbB7A1GctHa!6 zgRFoS^oWHT&tw7iku~KPZs~ElB=yNGBFsmh*L7Gk%ttiI^qmjKkR_0ge?mT#ve5Ak z(N#d&db45C)74g5y>Vl9ukh=A8H&;K`o~8{KG6qvt}=Q`VnJk2mBh_^E@|S0-NG>y zcaG=BE7OMv0KmNaFa-NM^BE_Z6e!p)eRhxzT+|x-9dXs*Wm2#z=zzv~9q|%4i4gh1 zIkkZ5S${=*4G zDO4!rHL929nTW_eWoDFI+VngD2GjQ?HhzO+cF;U3K?aHK2yPMl(<~T;6;PZG zeo_QKo4-RV3hkTs>hbS5=b$>N_hs90W3jk%%kLrn(L_6CjsNB38V}2IUXi)o{C5o(N5k%J|(7|}+7XeQ8Q%>(veMqV#nl`!T`?B6LYv40WP9#T zq8QvNE1|HGXBRJK_-kEhhgvC+70SU^XfPxgAAi83jx36o`;A;z67w4kqN9TJ?gYyy zeVXZF(%>;ZC}Ub=AB#&sUDYhkRS^1ij=|Vl)T$sj8l7!PF%;8N_Q`1;AZPhF(WpEi z&{MAn0Zv{BPJhKVB^8>;Bwx}<2$(fZ;bhi~yp|eD5$c4Yomv(Gi((8VisK5_xdrbt z3mQmHaS5qYA*airRsQ`C*$bB)?6?b|lARNXGD1ZgW8zL;*;Ky#`g6(X^@sG8Gj?DN zR)lX5{_AJcs8i?e{zSdH8B$J`VXBt@Omcc{P1Hxm<#x?|x9%~;&p+Z*Fo}i107wAa z_iW2nA+7j|)z0dKDvW%CATT=mq}fHKBDX5Gl#-&@W|psKt0DnxIkly*SvGi?^jjJm z=2k1{^p%N70L#_#R4=oGDhVcSzBJ3Mj_n`Sgl1-OlTkL~lU_ED+M;av`2}sOPZ=8< zCBN=i{~wx~|AHLkLb0B?U9m^7Gl7}0dvIN-Vd1|OBr%q8t1J(j$pS<$pbgnO9zwV5 z)+X;yv*fBW)5XJtv~SH%VL@=#yW=Z-)cQST|2CmbQ&U1iA*rc18Y;`pJto)gEN-u2PGyr_pO zE4j5Fnz^bx$~Ft4v1x6roe05xHjw3Ti2>LiTg#t3rY=^W<9AyH2h@ut6$dq(rj*7OCi_#t&hc}#!L(|@Xyx<-(atfFq`#q5_egQvDLtvE&A{J9 z*m%C}ow=x_Z`4M1)5kiNB-P8Mu)-v|`hno#JjB9o3H*qO-0V`EYn`CE+n2P(s(|>iqpymL?|qnd}NTY839g3sx`r<+2)%zba~rI|JuCuqvcnEtm}!M`8}Fy$K<8!_7D zTxkLrDg|(fROZuuMFyqa7QF_=06-%E(LSoAXLol(A9cTwdQeN7)lLoD(onB zK8rWrF6y$R=9{UN5cOyU1JYd7=eLgC+}A>%AO0bwl+|n7CvG`+tUS`V%!h9=+|@~^ zeS7Dg{d6IvN8QNx*R=y*g-3Q4;lGoI5RR*XCD5}be<2A;dDE8 z@lkm%FV03V>YMF_*(Z$7-h3urnHv|jk36w*)nmo-eR4MRdRwNMaJ(naI)SIQEqUTe z=R(!$5VC^x*u^cEx1x8L_;22j(IMrXR4=bHOOJH|zzU?cTQlxL*rq$3=)x>b zeSjmPSV`ljQj!}`@JryG$h~_nhchu+g3dI`0H^37vGJ~J)^e; z9sJh*a^}#;!P@WfM#9rG@fEvoaU)BYGuLaLt<#w3SJ%t09gN)P1Q?ropz8=p#Lh!I z1adP%G)OsC_WCN{&~+8z4FVpQ>ZRZHeo%CnU1j{`Fc%XSX2ZkHE9mi{VRw#Uc6tu!bKYXGng8FcV|}n{oa)aQro4 zWJ`Z?LWMJ<3pdi#S_Z4Y!Rgzl=$`~tW;)D^@?r*(It2n#itRiIHn(Mp8hBf7_HqTz z>T$pL>=0qDBL@;YC0FgV{VV%~yk6Qdo7?G5x8Jj+Ac>s4I}?Ph`5J~uDZ6sk?Kkh; zMb1||e)Ei4>Md#_UJxsELp1Pr&Ip)1V@hptJb3PRzB4&H}~;zJKUf*~Au6sj zs*EfZppPEn`t?nW(0L~qEtL+7%_{ZuwT;EK{)wg;2OV>%^uaYWNh_WKKS_NmpM0Wt zRx!Z)9mcEdW4>RyDlxt@(;dtn*J2vVO5J*{wK>HQ1zK*+nuwDw_D()$QpKVMD-*Br z^Oi2oFz{UwiL&VrVg-<57m1szFCM2)J~qfM%o2*JAOjNPY8o0$EGH9pS#4WaPNyK( zYlZa)dz{-ms{9$9zsy!Y`ZRqxtx>u@^qQ9^*BsnK^5T+JXOk^UHTMcU&InV_E+*8+-Vpt0$h*|N?^doOvVYZLlg|ISmhS?k+ z{pC9&2g~~vbKqfl)W4(BO;5*MJ8NQ=h~!RX4?He4dF7_0%=zK0 z{af>~b4%uaFgJ*RNRmM{OoH+VtMR%kNF<{1m;!a3MhIF@UQZQ;c z`i;WArzs7wNi8~n*Thk?toguhonO+@Iv%K%6i$UEE~%|Pcu>f$!LF$lEe0K4 zMj0lQUr|K$Ey?xv6$!ey@HcRFw7n@2#Rn~^SQ?ia74eb+Sx?psi*JqBu@-poTYk-L zy6$hKSsl4~36^A%VWBS5_4|VFK-ZL~_)hBK79S(O-_|yLd*eH*(Pa*u#^0ZgXW4B1 ztC#&dmQ#PCH@l}5O?AWx)co187O_~+y}tEd%rDR5O8IV56aI%a7~p_+0bY5g%<({- zN~cIeMYJEb(CF-u00?ZVm`E7{MHCcJIq3?Z{N#HNSCK3kJ zZ=%^aoXD{>m;jBo!0r60GN$K~f*Kb~pfdmY%d<6nd_P<|hk)je6##T%$jaBx^n=p$ z3YQ_yMnWJfo9*3vQuxz4YEb)4bt&M0HPr5m#!@Zn(+k_9wo% zjYIvffn{1#mPs5jCRNXauOHc8!8FG23$1XcuUc>=L#}2yjiI3!CwC}i2t>WMfU37P z1Sbp#g<)tFLspf`!l7~0IWSBm8ARf;=_F_w%7_+Hy-bi`_=IKgn-DGTd42M4{Ao_? z5Q;fQ1lf;?L1<*J*E{5V%2gE`zvFRItp1}Svq7n28<04fpI&&9+r;-}>hPF=PFd;x z9?a#;PoXCJgY;0kw&C-)e0nKGwOQ4*&o^dNwR;;==s^_sinClK_HT$yTm>eYi?Pz%qMh)T}3!?`(ei` zY#O{Mn;({Q5~9az-QVEn!Od;StfTrC5tHi&A4T^NoKUa|YqM?WzHjW{VHY|$(K01W z#!2~^6tl8CwBNAuM4J1IrM2R)6zY*>uHWKxMaH_5+k@<%w!H`o0E^bbsrXqB7(U-B zaxxifoK%w-^4ZSoJ|ZD~J;K#BqdVY>noC=xNSSy?ai`VTW#nxm{z30omtl*BQTJbkeOcWzJ(u*%`td>^66gZDFO8I92>o&9qiX9@rh*IS5JGCw#G+eB@a^^oiA7bo znV1j7MuNZ5>q6C>9H6@n>BN$p7%B?7uQjt^H@DPa2CMhmc2nfellgeHedAuU!j;fA zlR+)Vp}>^GP4%;ms>9d^g1^2Eoo!+IY}VZ>5Qbh|LtyIPD&W0t+~~z?Zu574WK+37 znbYaCy3${Fe5CxC$Kk04)yGx&zE;YTtU^9!fd@dLu z8Shn!vhVn$PpTl;&It3ivMu;YKWcQjIL|@)xW$mX91Qn$?@*gdPk5cL-BK6s^}|2A zzT>7#s*jbwVMC#{i0grsTgot&C<{^}OpyY-olk4N(O(CeN~IrVkCUL+JI zo!h^KP!7jDM;^thtXmb6(z*F?E-Qn|qdz1a<>W{60o$78SjWUQsi>b0H6V$2UL!iq zP`MxTEAFCi2I{=nCQJtGz+>--_q^ z?w{T%j_~UZ{gJYCwR~Y*RRslbaAcFk*(0eJbcnZNk5NnGI6T!}@Y^KQNczd4+#a3# zP59Krjz@yI!Dpt}^Wzwd6=#;VWT4P^m^+pq#V2FWzwQAJHU^_dni0fgvWEl)x7`^6 zRWrj9eJ)x_ttplDWG9*Q)>QPAS*w*sGapc-m?WzsBqA?S z3u3h^>hzw89)6|c_avTl2>^c_YYLkxUmt*C6ue@|0Mx|8$o3CBq1McE*@l&RkID_#pZ4IHNDn2en!{IZ+ruc3S`&}T;=OW zK*fjkTBWx$`OoZVS&cm)hgv`$ZkN-V;jxQ>xn*t;n}sS1>UU{sBl>6u zrN)`oSIVwJM=BFPIo%REGR(e9xThvC%oOH&wm?x;e`ulmoZ<<#L#YfI#c)$MKAzPY z##8Fy)x2jpC27n?0rMqlCCofqbsD~XTBnTIw<`O5Zt-dkr|wek$pob_?Y3IP1K_yw z^J8heam8#=wT;wkqo4X61)W{|2jZH#vno?rstC`}L$OoA*1m(5Ntigf#>-vCeWPyi z_lP$xGy^6sq~|MsNABqBNu6l)9B`I6YGAF%VdIq6sLtN(q>QhyS&uq1F?OTT!CIZ> zGl8HQJ2OXg%KW(LnBrx`AAVY-t=Q<5CVRCUp~X63g))ehyuoL0s!QzZCzko~+g9sQ zJyUpFj?^$_#{CGxr&Lm!<}6KWqspgs&QO?C+0vD|{gMCYDTV)n9KiJ3oc=!O53JZR zGyuSuDjXBMOJ#K*Hvd9>m6`yHh4nd` znO+}?^h=Cx?t=?`U5E}3xqC^_|91RN`0B?Cr}CWLR6_$Y-J)68`_)ZS3-kje zKJS@a_xjN#8l>=eqU4g$r4Lc4UJobkVhvXfvo~GYsqKgUY#9!&p8fO4PX7cjJ~jXb z98L>J=Nh)F$f-$xiS~kwK+ia$y{eX_?Id;84B{Xv%0+P+FeV=1UhUq&RK1d2XR;uR zc*)r4$Ca}CMIzaEkC)jkz;QFi6m-@Cp1wfk#loQ4?T~1k=o$4#agUE`h8RK%$6Bj% zlQ=7h8F9CW5U6VD;mhhEn%R zV?{zPSXqLL^-P!hho2b5LVHjOh9#9KXm(ra7UR-?q(1($0^2L^|1&|M&RB{6+s9v! zWBUT&9x8bgpno98V8OvKrfv9M{P}2qSvfGHsmTtDMZ#o}7<&jWnPs!Wqe8|B$g*zU zP$P>eRX2L4m$9CfK}jkCX!-mh-0%&haegEu8(rk0+}Mbg3zjVnqs`B=>zc5txDSZq zBq~5562gjDYHJq3m!M{%&)B6Db*Vn!dlYO7ISB6%n8vqyS&!;ift=j zN=3*(?_%YHj=Q%VdJ*0Bu=l0r!HZLjc}(HPEjjNiePM?d;(n(z@r89$mdu{{^#Nc_GR>(!K2$vsVIQs1DnH_rD;P`9aaLKx zOyUL+`E)Z3wm*3&QPnXM9}utMVozuDNI0JEX{13h9FZ_Er^|~>og$=Kp2mVPvpsAoMO&CK%Qs8^0r<{0Xctk zmDDv|3tAj}y;I-3UX$Os-fZkpjRzNqoBtl0P4K@KW&1K#&&tloc?Bn~RpAn%%FCj< zaL@nW26lg2IT*XS!+U=W17m+#xkK-ibh`hBT-+bvx&3x-V=#R51PpoOAXCfzVC@$M zykhGLy9x*MW4jWpjs zc#=Me+c7^leE#|O@%tkG4}0$c)zsSUd#{8L0t5&>p_$MOJ@g`Ks8Rxk-b+G}rqV>Q z5kd>SS5ZT+Dpf^MLzSk|5i5Nwq5_It_@dkQzVAEkx%WHcjx)~LjWEnQP5o z=2J4C`OoXwaGNGQ4(-*%3@%1VTJs0KmPD1@MK!bxHrT8_t@GToA9?;_P1cWGxt*s2 zoV%EZFS<-waR5MRnw;}qC~_MV?Q}tLY!zv-@dzeMkVfrY=4@(9su+PUZxbLg*LA>3 zm{=Hy0X9;_$+?aMHK`jAiv$d1G)Ft{&l&BipfDm*o}+c;j;*CKUzPMD9dY~Anb!$zoHORV48PX#B8!MRMN(lMoqEAiVk7L$$-SIPTc zqfV&=$bb}edGL6?sof3gf!4!X{+qNjjT!}|!#39SQ67H%qz z&W}>UH5;K%0~AU&!A#NH<}k9u{J0S)OQ&@;jV6GHv{&9s>s;q>M6p^++6fb?T3pxb zdM;H$II2zA!=kDO^HR{p0r2LLx?%ep0j}L2+}`KRL@GPO60INBk^VT9J#AF0%$C!$ z9^AR!qux9arO9)h;8$;8?Xk9kEmQ4qI6qAZsH;3Nbl7Tae8S4;c(wA>lkyL*p4ar- z9CDt{TaEg0vv+z#f9$`oBbnhFh-Q3q&U9Lzi`X!#`3&iMz9SZq#J;m+$iaDW=Upkm zUFYD=HZ`8*X6Zf^W(H=3nV5jEDL)VM`P*S8p>vcf*e>BcyMDYLGlO%^P?gs8?nZJd zMg5`<^R+2&dLI`ML6!N%DBfB#qxq6P(D3BD$o3n-a3( z5+&`*NKe7B=2qYWPn@y2`;mCVM>R*5!F4^B5UQrdkrb$;H?H5g)f0`Dq^of@;6|NK zg)NIV&L7U|xOGA%CBf?9smQ?BueK}?$QPQG9^U^oondc7`+9k&YwO58je;)go$w`3 z6E?e{^(p13UD1(jNj+Za#UVNJ-^p9w)>@0ljThc7Mf|vyIpo0~hi6w96y}8>wkO?% ziju4P1Y`L54XU=~_reG7tsmpYmcNV1(${f!C+)S|;YSGZ?tN4>yt6=Egk8m0_?{j- zx3hRT3DZk(~^ESC2vF)Oe|4-_F1vxQGhizs~@ISh8N~}2X zH~%aT0a2ym0f3hmIQ723stI@;%Brn<7=J%QvpeVyfsRZ-$%@cZQ{LPpA*NX+S&qTN z0loYsdSd{`x*!F6ZTkZ1eu$vNO>x$JbWv70ZShwtAa zejiHr=wc@lbk^{fC#l*N%YB;M6MAy@L`y>6ww$X;L0(a;3mJW2Au*hL#-gZ=AMQaj zdf;~YOJ`$3wf;=_&Ght{nu^K`1&?n=&!&wx{jvYYjoenc!`y$GT7(dvXdW`;^YP=> znu|S*b76ZYlcjPa#Y;0^OOOYzTOL+l@K;>dzXo4ssccobPI0*wM z)t>1;P%zpp0>6R8!M^n-*n#5-XJH!amG|a)gdu6u1`=3iRs7xTm6#BMsRWeGR=O9n z$jd``WUDNf$l))~!;&eB(LtW@Bm?HD2C{rYMfTicoQEI=Xgs8g;seB*#VT;^&UYLR z?P22ph5?9lQ$XqzPygeFRj+FD1JB;Xlf=`Zfb08?GT*hz09Z<(Ob7ZrAyLtH6(lKcv0aR9-CcbW*=o{0bnxQbg@1=J=yiedwW0Z!|#21yh_H=a|Uo zGL#tI8z0Oms!-E9o6N@peZKc)q))86(LTbY16+-Rul=ES=;mhOw0w#r=H-3YSQC>+ z;2fMOcmV`-(T$}hM>cOy;<1LFOJ1$#9>s-n%wf+$#nYO235U>dl=8@+6da>BQe>W{DoH5ZGeXRP zw@Y%_Nv9DzdyPhXA@SGyT)LC0`$q$k*-k-lP;#ANkB_XWgg@C=u1%jCrwG+jTRBmG ztOQnW-74NBliuz*?8S|H1aPt#6?yUu8hUU#d#*Zk+ zY(T|2eyr6u!v9JN#_1R0qI}f_wA5ghBKq)~B5);N!Y*Xya^yfSNQz~gI-Z1sRLkas z9wPN;O9s}Z$mji=T^N!>1v*sTp<%E?eM9Phy$-4xUb+H=A zOOuO;!E>;p$V3W5upN<$GvwtDe+B0&P(p7z#ymQ`72R;9!aoMh(Y~|2Rw!gddUOU& z8)8_NReRVxUrOA=YKw1qadwY+$Hl0+-I`Ga4Hls-ffJjrPEYMsDsiXmDl&nET~a+! zRF0}kgte9EmV_F*tXxj~@=^S@^UIm_@QIvv&$U|NoIM+tX>9{<3EVIW7byHtinU9Sd8U()$_s>|`cd1F;(e4CkDpt(n zb{Oq^(EjZk(;3fWUjDPy`tJ@|{}1o?E6NQUSjBbttp7r8R~4%?Gbxzy3pv%j?z)6~ zYJ0;~DPB0=1FEA%>fSP1@GAARRa}554hvSD)KG=7sJXl27$G=%g(_mNDjuvHbd6rG zixvz+Cx|};izj7D;d?tn;{&KhT;2o zLey-0bJBF;+Wi+8D?f(|7hG#+4&!D}Py4Ny6E1uB^ujgyt9xh z+i;%`T-8S8=H_KWn(dh7cjDUD+zFGpT z;T_3SElKYsb?#chjUj_&gN=ym_~}&&;ND$Ujwnu}7_cs~Cl3R>v9qx(%a1r%;VA+v z>egEC)w&39IY0SoePx^(mIg4U+`Y9h>`1XF4GlOtHZ@Vxv{)JK-y(OI7l{K9FdW_E z+=VzwCD#)cBqEC!KPv8&{L#I;3nH->Kalwl=SW79633fwyl87$t+>X*F{`1&n?t2= z(AsQVfHyZ~h=^MOd^9)IHevLukH^aW))^Mdh}Iv$$#lnenq)SJRz=gfH~j$Gs;Pfu}U9|*gg7>C>NxnaV$+Q zW%2<<3YyOalxe1-2Z(BjjWiG-6`eJ(0#*=#3z6xrN0NnDx#DybZE;`s^P@542(^4z z0z^-2@jJZjT3FNluDS^DzT&zRGCF?X^em+)J}3+^i4~zryWPMBsa-P3S~TJd&VnDi zY8{+O!lzQP4Rc$o6J#EHOP$WX*&D(sO5z#A^_GwMtH95gl_$RM8I#VIgzj>b+p{QC z-9Xm7wtCWm)oksW3+il6V0zyylA+&)2^eXmBFFONMnXa8o=_dQ;@!1=m=M8sAZyb& z!b1vf{7z#H=&I(oV`pcN4W&ri6XkHDirrK`w2!3Iu+1ywoK&gccxemVJfyobplvKHLJToM2O*R`R?A$U@Q4&AG%O6xwKn- zkBs@j2%4Fh(pcoww)y+S2F)7{BA2b)TH5^(U?|ktFArRMwQ)=bd-1d4-pePPN{+rS z_e=ZNuKIr|EB{3=_6xbk2E!~jx)HyS6Io`%TECOc`h}c$qt#_AZehKVC?0~Xe%cw? z5pNkQCCmszE-uA~k@q-5=ky343wl*2Z)+HJZ0t4=aE|^@7ku&EQ)_IT>qxFWi z;|+KH7nLih+r8d*3-`=L$K66bKeKHX(fgu#Hf42!^Lhz(PnYPc+> zupm*`R}5=!JfxMr>-sc6;il6Wel;+&JJZ2I#TH`3T7}wvSQ)i$!6q)jUmn(ty2;X3 z#lP0~{n)Lkj%R)&Uo~!eo*e}9LMIn* z_s=v4#mFG^KW-lN{Frk|LditQ>GS))Y6SbwQ27hF9)n^2>pt)Q5#^NF#H`;k%f0=% zzzYC+gfVt}g+|cnIL_EbaMFYsr;lRxJGH?HJ{BpCBo-bkb)_y6qJ-=WgL2Q=L*;of zCc9u2a#Rvg@B8s-@ya*=zD@um3wV4+Z)3|ZwKP||>G1NNDzx5ZO??6sWdx%Y?aO4# zj-{pg)jf|<$>~QrJp4*4?lEG8d&5U%VMS$U} zyI65T&QJ*TRa&F-=pqL*Z;GcFSTU2l%1wb*$cEp!r-ympzi*6$9}0z4DAUJF)#+*7 zHLjIm6OjRe9RjgWGej2Suun!*jm9)+Fab$Qyd(}kx~lJMj52m?^mL2T-dX3=uJKp+ zex-p=O`$-I3tZv1eYjL+bz7z_zxWxFud>8HQ1Kc+szZRkf|bn)ek+Hu{LU-ngXgIa zS1WE$#=N-l7c74MA29e6IgYIg1B-JdC%yj><^0$r-ULfh{ugq5{6FD(j?@Q23N`JWMM5}BLF7(+~*diZ5&R#flkZ&cnLb-z7h}k$V4~5_H zb0{6==X+T+4IA}Bc8?sD%s|WWg>RGk`NAVPKgvv8>M{IdJx3Za2kRSl5o90Cz=~c4 zy?E*v6Fe-sBV`|Sty!(i%~s}Nvxtx#w}3Wbz2Jx`mN=OTS~-QHMbu`8M|@wF z3c9QNwr}jqUSl92@M!Gx;O@92qz*m|moEdY&Es3QrD;$&Bh?R7XmWo zqbCLHrH!l3H0zKoOPNc|=D72Mz+JA7KfSw_t<8F9uN>lDyj0ma3+K!mUD#0^$LGZ#M^vvVn!1Lijv z)9~Et<>wp9dhjz9YQ3XMn=-8Tn6eqs$7F{VA{5%Q!cZq`p&l4n?(@KtOoNthqiw~?@#2G6%8yVilWzlAt$EFCVucJ#(evxlNqK&2LLgf zSeE(J=BxJod(lPBLL@^>scFA4Cy-U!4`=VLj#E$_W_;1slwQ<5Oxg(ZC_XIl^4(-P zQONA09pC%!GRKpU`LZc|AI^3L?+WuwQwxa_u`+Xct1oT-;JEe5c*b4Ts(ixL_{%4o z3uOzg^Q!D@4!_*x@cnWIpC)#fSrwUC9Rj*uEHeko=B0{Fua=p{C_0=S^xEW9W<n;-gc03|)yL=ZtGA)7bqzZXTU0 zdVkBNMFg%qbM=K@gt38sa5GJPbit(?fu(*4G+7}+^8{qD$a7@QjN(fkrx>;Yz#I3WqJ6)FQd?OD$fnjb@18Skfh>^gLe;JQ>qv~G%KAO zFZh7-$rFzmi=cz=WO zf-2ndNwt($0?0w=tw(L8*OG=O$kU z9zHV@Nqp*DAaLUK^`@E4LFeQ$O9f{b=(dM-DM^fPcFOq#d5`iDv+9nE@dOX+`np^$ ztJzHf6s;*f_U!pch$LpRZwroWnvyz8e`Wst_^5RtDrWS|UU#i$>BkwP&Qs5)X2i3Y zYJTkX-owb#8LS?b#H+)Y;(hf;+62aBOF2BBU}k+jEg9(GCtC$eQ=JbBemK}ox>5F| zSldRl=^WW%iu<(5$vPFw5Q}>QnV0PROkP@ivVTIm<`*^k*gy+P+ccWZ_srO1pf!;D zS)r^vvhR$Xip*(J!?+8?O(`FM#e*NbeD1U zbhB8~hgbfv5t}%#x30pURh=rg=D@l+ZOiUab^;AIpFZvS_5QPlgp75iW5ydbfq^4Z zDtq(~`{lHy1ozv~)~8Cy7D?ja81{%_-V45u&01tIxu8#akas-yhg_l4uYke!SXc?Ciu?#)T9?htTa+DX;=6j+jQm$sEh%P5A zC`so(iQxAr?hI+w^gI1@`K0R#g(=kM7nBhv6PzB#Kl(JI`MBV+JMAJjai93o`H<@p z!>tczJZ;LtYDNbDa2XWO;rYR{J{A!=B;T%wDh)Y)jSf{CnAE?h*LAWG{_wR<%e*j)AS24ZFUS>0D3m5qk5vFqi><(L4uWff!f;u@?wSiToA& ze}5wPfyIbe_URt8%l30#ZdW^xHvFg~;}>##H(-D?ct8P6J48gHE`=BpK=Y>R0L7)!LML)c@T1sc78Mru3_&k6Tj z5_Dshh>R3XIih~`_PKoFI{ZlNnU0{2&d|cIo=&ft_wrF8Nl5iHs_C%YQD^E*lyC@q zg52_HI2f)SZRIvk0bsR?k_Ph;(l*Lk>;WNg z@jg+88fr#J7!+D;!`|v>^X(W>x&)qHta^|zy3B%GfLRt9%Ho`npRy;QGGC4k+7;8y zlsinpMd4Heh{2zq&t)QFYsiP?;L}qrW&=UQO)6JHhsSU72`1eh%*dyu)Qu)wY@d0M z`j`7=;!or>myK*Aoc-x`rqZL3g{!CzHhkJE9dnAB$DAt9Ad;qm`4Q!U2Q|DB&Ei%x zIPSPz%`+FdV6uz~J{(rxqhl2MMAFFC09AB4{sL3wcT#nnKVD~pg5+#+dRTSW9LQ?49YvF+)47m_ zh#QU^{0Nsdl5*@_gD?;;FZIrldkV34IHzTTp}@}=!wZ`=xmLmxtL6gIUKE|R@C0!m zw4}h@ba~ATHZ(fzo>`$zE?DU<@nSHtqut97SFmrMf1^hm))k8Q8BOkUzw*%pwqJ~# z>69Q2)A;y=1#+JlD|2%{eYTKLq7g9GDoZG49xD6;)dHq?#@`xTf?8t-&@tl(K)&2q zO`xv9PZO?ZxJ#CpE%V(Ad+yxTiK+~F?b>f^^+0CNsDLf9$TK8ge0E4v@=W~6?D88b zt*erJK%YnzH9^Fnr|aHq4{&+`q^@qYIBI1049N?H&&59!0>#1A-1RJEF+o;r-0}tT zM{2uAD7wCVm=fKRwp3LiOSbUFJ zz??MRP0QYI_#Sa4WRrz_55!Xcw+`N)$g#dL7?aZLr?>?i z&jO@4oCDeRr5!>V9V)FqZ&?F7P! z(Tx>6{e2sskj-wS8BNchYC_9$=QB=-)hHP3zThu;ZnS%<%2Oy>9wCs;9gIKo=wXvv zlym>X#S8P7U8c9#xsu)N1z)vmeN*6so7FZ}izQ-)iN}%_1YR1b*u5AzRIctwzTZYI zm%CAtt`k|dW8ZrIcEdi?dauUY*Q92zTymT$&UEgt3`;-v(&*)(J%i()C#u$--5ZyM zM{#I9Off#*DL^D@8=QIk>GBiIQ`;%7ukAvJ(aVqOxb}SQ41eT%=N2b((7^8eu?!T$ z(R*P4?1HGWxBMvh==f7jib|Rbo`CX31?{J4pQX4C3=WYk&fr2!%0-kC> zuaniZ=L}%i4!$!pB*k`Lf?~B@UU%>&p6*88XPa#7L)_(+0lKi|f%&Wwu!Vb(!Tl9= zaq4RN9Mv>0b=a)>hh7ZpTc`deJ%vl4!91^r(j7sJdYMa+6DT)c){EDxrjL(%xC*so z=vaRV)f`G23baS%%J_}E9P+mce3ga|o-(;rwzpgn8@!Y+&}W-m)PSv)PjSmP(XF!a zi5epi>*Z3erUdgd7g!LP4@9SwTdLaI3CO1eYo(AX#|REWc7i@~DNP0B+G?G8B?|`u z7xVI>KxsQMbB()vmYPLV89rYAnsQp2o~8v}r$+hs0ZJ{G9qb=FFs~Ytr2*I^AUE8 zcUIoM(rz`;!mJyj3${2dKW;|Hj7cl@F*?Wk_IYSJcRPi})AwkiaXkP~BunP|P2n5=-gF^L4Vzs*zP9psLWO?x!`i2pgbp$g(NGG`fpN zG1eaRoC`ag*V#q4u7c?JYZ)75oO_Za$RC7--G8=k8UD_W8~&Ufx7OROZ8!3*s|6PX zsvG(2Q=$VmYcZw**rasPYgDwXcahE9Fu$2`e~kt`t=fVXiAiW?v4<0fXR3#n3#ChKf--z7|c_ zunH|8ZftQOxnC%7jKzrNuJ#!*MS*Mx!x`3=>G&TF)L&@(8RVc_?FN>6oKLO)gE%F2 zA?3GtX3tK8!dznmW7>=4($(XpBqfFu{f#na>;nQAo_+h$x<(NmBl7fRsMrW@Ko90yJ z(nkpUjkuEX5C=kG_-jMMn~-+-xK2Up=i{@s{5c~$m;J-yW6I|F+$%D$)RQi|{r3wL0PU< zOyL;0ZHn>Yk-;=Ico~-VD4k+)+qAs6QIc!|kq1(ka?)ykP7r0oKx`A*TeW;x=(CCI zx-_4ZBn*vU~ z1Ka&7Ewy_meS*jx*_E9p_a$><#qsh2jiM?E{zyJhZQqRoZO5e-IMpUryK%j;3IjmN z^xmLDgKD_J*4dTtBKEiEGA^%fn4bJ#sTSK{ybHw>*kB!Akt$c2SoK>x%JY?%I3aAusr~pgWBf1cAoc#FYkXnMecnnM7|Y%!g*24e#FCq=mKJ7 z0fGR6!9~r#-eES`W;_K0iX3YZm0P7lxQt>-wMZ`nBp0w}gxbrMHK06?0y-N3#NA3Q@B3u9N`v0l3pUArTR**A7klLjz2&+4S}?2GOPr~F!*SOZ^)y-14E3>~WI`N; zw^vd(VBOQpSR%jINZXpzpS9m6#p0k|ye)cHr5?Iey!5)fp?k88Z^>ZCpp07OmL5(X z*$|QZEU{}va8v-ESted_eL=61Z&5`Y(*5ORg__6`o5k$%LfJ!2RhbIDwWxi0=el0d z&j+Ef1NFx2oN{bbT{y^?uZQR4|JG&ypW^F3c;BDMacx~aahvm>$VohXvBEu{%=m>I zp6g2*A%}~=2Jp5g7@rF~mJ;YtZ2W$0FYD^@*E1Kc1aT3h@dRTFk=Gg`}3<8J*k9j>6551KF3Ii$gl68t2ECoBQ1KCpG>0 z(KF-|c@bSNrP73bH?%L8EN_VGW^_J^?yb|0Q8|_B@A$Q%=?3|Y+QTaPrrkcKRu?MC zX~jHRLFc;eKuOX``CHi3&C&bWB|6pEr8>u=WwE*Ou~3?{1v)fH9wv+rg;`%yAs40%bkq^#(C z2~t1uG0orDIgKRl8D7g_;VZM0(`MUNKiPf6!}e>HLj&P~Xma4kf{Y8ap?E){lALqi zgL?k5i5ZNkZE)ov=Bb#Wdq~qu+xADvPC+L|2#06X_IR+!xg`#lBp7ZkpkA&{JW~F{ zM^UP^S@X8fc+vY$Up7|%%C!9i@F#Nc_?*CfqKdd~J#V)2fD|BRu=-GOK4END|M47< zK97-poYmW?C$LE>!=T~Nq!E6O6h~2hbB%OduEP!gliVt+st!7ztCt!dj;qcJMMhaz zSPtjbD~Pk)47oZbJ}U3Ku6S?XaM4V^mfelK2QjR^1Z$bYL=Stxw3Z#W=@skRnqh72 zQx;`k{4DlcWyl8@dUPG@BnE0s_D3N z3~d)S;@EDr6Z&~sN>T+i8uzO zNtU;|^$+P9ezd=B(PN+IT&XHUU%<3}$uV5u)mEP4s2cX;s=HS$hVs?=&*o6k#wL3o z%_ubx2%b|l3LYsJZe9x(Q(x0pj)s<{iB8D;R^+Y${t6j zos``_wzT#3MLc(?md*)$Q<^Mkt|gn6R&eQ9$>F>X{xM+*m_|(Bc$-(|Ay#6K*!7t#=AUtZ~*DAx~omVN8WDi5;PaKHV zHVp!iy9x$_4;v5-`j6{2mVIxw{_j`YWUyC{jQ$-ZSDRWx!=}xzpLSYBlo*{?zgr3 zZ{&Vk*Zr=B|Bc-5>bc+6?!S@yZC&@f8vZwOzpLkdTf6^8?zeT_?`rtp$o;OK`)%$1 znW6dj7hb=u|9(Hi{|<7$pU-}Ci~mF9q)k>H3Y7k=p-E*{;HQG{Xy#=iAs|3&w=)(7 zMQ$BDQi)sJlet9t7QCqg3de#gJu;+Mct1!Ky%cJG5?vjd@`BB*eMZ@j9Y)WTE>CgX zdC-d_QzXj{4;RF}x_kf;%oQ$n&C^LVefaf=F2{MF_D?Z#MxTx6D~$+80xmHBMfq!^ zZU_LV!g|4@3bd3z%vzR&vRYWPlq3ORM!mBm%ny5XEz6k`UN*E$Hd z+;Q~Vk!N+gOhb!S&tDmSW9xjAt2HrniD|4ZGR;zsSwjFBvun^_E!i(+^V;{vG0We+ z+gGNUVrXGINiVmsiI_pZhrQ%nxbBS;k3Vhi&s_YuyS{vL{o9cX7oOQ?e%;>bIO0~Y zd}nhzDCftPoAVdWhy3gD`4c&S^@gR1wGWBKM2-`s>fGX1*-()P9gRwQ^`Z zW$yz~1*K1OaT>_^i9M=29Y>vy?hUd5gUhZ8J*BBcABg!pjM&y*U#?lX!1vNfC5#Gp zH6AIj*!KEZ?{VKi`4TVX<(koGR}$2teW1Gb6I0U6DrQh-=gQ9Z&bOeu$G&`j^$jh~ zxp)7IP^OxO8D0PA)Xo9%nC-{tYbQ_OxtMwM;Jbt&A8E#7rgSI>2@UB^Hv=vC47}3F zNRGMMG?k zWEu8xFlgldBeU>W6c8#sa-ht>N76PjF44vHm1BI4bHY13PJk%}oYmDW*XfOxi}#iC zmxQ9B;=<|8upmlkzbcWR7f7eE5b%may|cRMSw-vAwX+>RiqpFG1-|`Jo)#xq z`*GC+e3be7&d%yzGy&)*ax7b)4J~&6Du+G?fY4K%lI^c4%v7eI75G7HK_McN{YR4* zFFU{x5VMxy!x!2T4kW(6_1e5(VRps!ORYk4tl+9+Jq7J6ZZ7c3qAxL6E&d}>%R%1j zh^>MMn+m=gHNd{HB!ErfYsSwOccW57%z${k5)BizD5dCYb&DdRdyoF{?C#FHl5?pz z?c0U0z^6UURSHzKwUG&fV5_MeuO0@o;tokt8qVm$A9vbQP|dn#n1yE-NFT&1rtlYF zDiNb00|BW)MPLqE{fy$U(&!{Jf=pnSUv+B(1o8su(5Db zGZNGAv9dY$r9VJvnm6oXb^%2ty3WKCqq7XO(KN%y#~F$1Zq-!RsGb{YHn6i2V@pS2 zLPu>X6J!GBPI~W)(#^QWpW1K@brxfT=WI(VwtYFl0bn9%OKKE`K$#>M63+%{^9E{Z z8n_cK0=;($Ma_74zTK+y0DlP##N%AIg~jh;kcB`#=9n1%6b? zwVFecXaG1oXd?FsxQk4S2S#id=;|(apLr-!+819PqUDP>7zZWxV1O)#WEd~Bh?ld| zYZ_hAECt*97XQ%^iVXl*2ntq1zj;d&NDR`Plw@B9s8c|(UhOO z5oFhq?B^DB<-x>E zl{)ugy6tVad8CTD{)NVo+#fe!qu|H>d+NWb1^&1j|0CNkl_#tN7{uoPlyb zt;7rOtYuzUAMj|U+JdggaNG#_xHEU->F^Hn^4plsu*Ul7bmNr@j}A{S|333WQ&mxw zO^h8|Q!A=l3^%>_5LUr}f{C-B08|TW<_Tjn189 z<_7<{iZ!2InJ0pi@hd49=mgM?K25MRCnr^lfUZU(DNvd%t2g`>$|)Y(gt+W1I{o%a zZ$T7-A#dtWl6AKC0j*s2_G{?ZhxzxcKr_Vj$Z-o4G{y!Y&(TWzYRLkWM<+ojyo5o> z8%Uar&HyMqUJOsy5BHb7Jg^Q{-V+2nJ0kUFe>7 zZ|Ey4Pta&zWDh|$cCxEch{E8mgG2BqOu+-n-lMhNa5xr6KLOxz48&mBqH-+P+qEKX3RGIqt1KLuPU6M{~cB6QAXj zJs6xc`U^R5LiLV4S(ES@)Tj=^eG`?$q8i>CL#w4S&Y9o|tCY-(M?{;&AqlK}@r|l< zLkXxXK9Gju1j6ne&wIM$>|$hR?q`IK-@Qj1;3!D6$2fp0SC;bN#cYxy;c{su$ztmK ztlUA$4JNsN_IrQ$V#~-MUY<;7e_>?ltymRjkYV@f9Ti`&DWx!#GOx&?u)BqFfW_OazP-5nk6azcH~8x}Rr_=9yVqgOr5 zAfb6pp=f2bkcTj>BO`vT&X5l&YGNZe^|ao21S1yFR;{rVZ){l)btQKd&-9O$y@Zi+ ziWhtbh1E}Q_e!f1>f#%XSwLo{hZMkRKzUtxh5rFdk;W7fV3S1i7m!F2N+sXDc&KBr z&Q9Xp&ejNS=lf(&v4O2e*XxFq0l{|LA|%JNhJpC*O?>EF2-=&}9BvQ`tgv$mg>=%^ z+acb3l;9FC@_H=QIxf*0kjJ*p^800)MP|$UzEwPaENYMZvLT<`(dRomI#aH;l8-Hz zV%LVNR%PseWzPNu!#^8V)@FmD^T+YbzjLAK0BBdbiVW)MkN^5LVg=d;V>>_h!|#*c zPlN+qfKI(oJPZn`aCHlkdBx zHA~;j4?q_`tzmE@G#EfO5^KRr0)}XWk~EIjAW7LxG2XdOZhJfCNaM$EHC2w6(IhmUmK^sCsH|akUt%S@ z9U*tJ*zA1Y@3q4$LCb72DZptY(jUnUIt1R3qeB1t&0p4eB+l57ehb6Z63={FXA z<7W)8o%2ndoPefY-njST{aON}Rq8Qt2Cb77&myJC&XpB`6bLYs?JuiwjIOARi$2R% z5v;g;*DuIRZDN@5^-d3im)M9YhU)3Y%Nf22&3y(Hn(O7aam&ddQQ3%mT6mBq0l*PI zau_(<`K%sCKS*o_g`DD3zivEp(@rYeRlhI#kD zyFB>egv5~8AD!+^-qrdD=-f{nC> z9c=?J3jD6Y5+O{~P|sDd66aUNWi@r1A-xfJG{p=8afL8^sj=P*(z=z_c#5QV0of4l z{YOvV6)9I$%sT`cXTuLdnF?5#ADV{}q*=YR>18lIu|7rzt9mklN51TnOuQmrQ|Gn$ zw!|Z~iOqRu^!Q#oHHriQW_M|D0Na|0Pt%7fyGqjWp+(M0Y7u3umF-wkC(EuQZD0J6eyj> z@++fZK_VqIDmI&!Sj0gt7|8Fn+FL4O{PsBN%kUY;lz>ZyU-(Z)89Zh?FI%9maY02s zDHU}SE2@%2*MBMh&bco-~ph0pNc>TDdK z6V4eU$%m1*QXRUE?lObg&!Wc1eA}^e5{C5M2G`0?Jz8kE{@@V&P)g{17mIsmhDMnc zui;ue-+D%ZMw+`cy7Vz4D%~MHr$zDIAG~FGd>Coo@$hN@FX8`Cvx!(dTgSEcuW&2iJ^)gW4Fd|cJK(FvrY%hMAuQ${a4RR{r16G36I z^UfO8eoKT{LnA7Wz7xS5^ggZvj)KY#2ek`ydZpHFRJv=lRaOW%F|IlE!pX;YkVf&Z;Kcd_byMA6tif?$OEDu{PNl0ZS zfF|JWkA3^gCPutY;7I9w&>c zI${W~?x0RFj3jAPV-cVnB`EoeiXi%(a+O1jkBa|aWXSq!_^^z(V!1iS954JiVvS}+ zA3T158T2$L006<^bX55j)sLU%m4f>7tU&AfvvQzlaG5tGMQxE^UR)LLYAir>I1SQQ zUx_0nYF{P&;e&vw0=bAdtt$0g{1c2`0l^2MOIqz7NJwczvNkGx^9!oniet|&AqSNE zK#|Lb=+{}hE+U|KKO;UCgC%mb@RvgZK$qp&KVlLjh7&mv&eEivGoNn-tA(n zk)L>0V~o*c9Z?49ATERzx5lbkioki-t2T)MaZpx@tVCk9STZ%PD}&ONMk1voFaS1H zv=A=jkm`F*HGNLpr&EyFLtODI5^|=y(q+TTp%O_ea8M!&=m)cy;1L2(#Kx|f=JLV& zrMzTyiaxd)c=uh`v0xvhjiiey$pwxe?cniP-3IrQ9X-`#`o(xcYf?OvdP$twbr%g zwdS?voQo@Qlp2c$Ds5Bs5U7k2^?>dRyyp3pwXUJguxTy|yjHSKM(t!d=5r;ZvFvfe zxvyBJ-n+fby=YyC@yyVr0+6CJw_R~VUCHpOB;33ECEf>xvnTmf#4L&?x*JNpI5&Rr zKx9qRp?y2sRp@jx{4weD3HIaCr1G@HWAU-J?zP>X?hYcsNMA_AA?c7)mufFnUBT2{ zXgDtI@oZXSRDf8BG;zK$Moiyj@|HfSF133a?&D92h9!Y2B;nvdLK0k*S3&72+zZyP zP!bqCxl(^^U=^~WR~-mq*4e;QF^qoU#3g&Zq}t%r?!}8HLyVW`OrM4Uh6A(ODjy=# zxrolbQON`v(yEBU-Uyg!Hah>FTbm4nAoCovUd$(I58kB1^XQ9NRi)$+x`ouWq41(% z#R~KLPpO3GXq6A6V6PqmB#CczUrTOgDFGlg*o5brLS4&9E~Y&)xgm0 zJ$NmYQpsm(n?U|Uf`{RjA2anDO5+S|{?jw5obbt8+ReHryNm2gZ$uHu=l z$|NgWsJ&AYn!>M9OcVuBlvBIDc$&$6)y_QpjQ0@&(=Veh)o<4%eTr==#*CuO6KoN>T~ua0j&v-uGJYv<6l|4%id|8F7gU+4b{d>u8m zg*+X^{o8$@aHQa)s_egsRZ7&4JDOYfUeNm?u-vC=hZQm(gn7B2Du{!6@!*C$C24dD zPNZ){!%|opcUief9F2tX=-_DK3t*9-=QV#ttA=rB(ZW>QWe=*IVpRAF7&}(TwUCy!eMRRT$)(o2N=*|3-Jf2c$>@IP)tMsn#-N)26GWr) zfS6MQnPPB|fh*uSRhkkt-L=Q1rnf zi~0DBO-V^5@+1Omw`QM*${PIzGuYR*x@Y1-1}dRGY)#{^^FPmZ{maOKjzK7s8z*|g zJuAd8P&t4W!)-IlsoEN>?**XF>H#Jx#++R*fRwng>7-u$jfOxInU0I<0q&iT9M6{| z$cQQLY8;oim7BUI*CY_dz1{pByH;#ev^?&m9%$L?v#N@vRD(+37kIJ-6+;ULJADR~ z37DSbDf!}h?lhV1=HSi{Fu72;klX8?(#Z1FF+!Vr@@bc$APm@nb0mm^${0>dG$^_0 z(kEO(qE}sMDwVWoES92*n)R+1pRlzi0q31VBj=|k6E36)C{-8Fw{Ozv*r5fpp$!ME%;zg7Hpf7w7vO>W~X&VEuy2z=U>jThJy z8rro$2klyjLvD<%W8dm5yvH8pqK_XjNDYkL#!mmFjh9aM#-82vI{nkOp~YE{OMwOn z020|)dD$iEteT_*)!5iyCuiuqwwBc4F>S}C#?2&J$k{-h*Lp_BAQj0Ek3T*o5@2)h z5l;$#U$2c>HWgu^kV(%UJC+|(_+Vx_MpS5@A+n9XYQ!nmwi=JEPiQGac|MEh_xPnPi7NRY5HSP z>QE@Ya$L4Dc2m4=Q+K>Y1J7-p?3?6cIHkdWVZ+y`G1FA}WH7aas~ z$uX)~iiwIQ!=ZCP|D7QyAD>@!n{G9+{?|cK`9-X7^g>Ye6$Fo>qEU7Nqeu3zpDddM zyeoKS*bQ-!eWzrVe7!8lPHv$Zsh4nFSMiBApI-YnQ1$*8PaWA4&GY)|nbD)`c`s$F zf@Z_>)MJ~9HJ>12h)Y2u-*Ro`NfOU=1D)Ha1ZO8o$K!7`-qyC%E%!3e+~wzT{s5dg z?|o?YjrxUD??)wPhK4mx@ov0+F4vwZSS0mr2n91%3nxYn7pLe@7-Bw})Ank-Sq+ZM z<*5fZ!@RzA%z0ad-c9w~FICc$e>*0q!v^`b1Vqhi3A$o^keUvM@C2kHBtsf8vci06 zDXUy>9U-bJf}RsE85Y`FA81m$P_)Z5Q6(Xlcl3H0SFvE5VPIhT8zGm!LM8pDA@gp+ zAV>=22UB)9-(Qr_dJrUPk$=vI`@YHonEb?gv4=+_CR3V+x?pebrEe*`=GoVlQ?(ji z8uTstN1SDebJgS1e!<)yCC01byWZjRH$=krpuCj_SlTgfkGY?bI7;fryh$wu4 zFZzGe2LA;)*dk>nic=`qav)|33bDi9;aIs4T~L`}`2s3eSMQRG3yxzcT*#89N3Ar| zU|3m5+1a;6W|&j?UCwR=mrR;OSmEWY;@6RPw8CT#i)RK9E;VlNT{nRjrc>c3JzygW zri6rKj&l`+*+`Tk56U;5$_i)6u#Lqgsq;%89Mj|_iaqSXFk;*U0#4VHak%njBu4a} z`j;q{gqN@R6XlZbBT%q8z=~XRW;ITdy5^i9L6g-dJj{e*PD-TU&uI zJ`v=WX$jR!@+rL;3yEX_@adLr3!cAFgUzsH7(Y5Q6cS$dJTx=`!JN znqT*7MO54a@r^IvjAeSYV2#jOzxxY8;&!w>~6 zKhXY?4~w2h9(ux{nLW&^lZYFJAc8CxR6c}1V9ksUJRODJds!{YXSK9gN1UpnEadr7d*lhc5)!Fv`2~a+w=WvwHfhwXWgSxxTJtL)Syi`N z2mg@I_taCF6j~{tTWX^@wXNLNQ8&EfclGBHE34ASD`{#2V%1Gj`DPz^$_{5M$ux`e zHYJ~%&b@)(e>CdFaQ-u^0I?=#%bhP=r&+V^$ww0drD4X_Vrf^ z6a)D?DpzW~tozkT$imCyhbR}SoFeLSV_I7~!GE@&jDLwSbw&)WE7OoC&^6{kDrNq3 zlODT~;*e+9{LD=NW;RfQQovf;w`ih!4>2(5l*49e&DBH^eaHL_I5Cm5)LkQ5>ZO>z zfHQVb<-h8ds8Rb>C0)jlN47|GEd^v8JgGicyxe_e28(|jl6kjs?!(Q3%aPnPr4vHj zk+hN00^2MzY-sQ`Lv$;Qs)+}7AqdLdiMi_)H+l(2```vkiRB9wbzg+VKEXuRDYoks z2f_*RPkDH@5)<#E99|$4f5Ums;3~b-37wfd%3T!Cg^Erl;YPCH(G-}(BE=${p!}If z;uGhI_SJWJklTrgb-22!(h|w@CE^T@;o^7?H~j&~*B6vYlM|ES|MngtxHMb-v-!Yr z+yTmT(=+T{?Mg_>DXhMB0&lwR!F-e~cYca{!Rh->YgOL01qY+Xe8%1Zn=l?tDEzFX zw|@_k*D__*3;NTom+gS>MkE%eJGaeN8^$X<=CpEEBl>V zT}{G-Q@@z7D_NI)GQKjh&)ll$Q-v<*7$LzXGlsJ8i6aB5pXR zdT*w!=w;HK_YVSaec|;CXb8fy;pCi~*>+gKni4}yOB1b9<2lK+1jU(iCz1*$$j-$u zvJ&r2l)Yt(f(RG^T1;pnmjxgafQ5NRGK^jTKvNQ^Bt0RQx)Kd8k+mb9^M3w56&2#q zbt5t!w!d$s1vX%7fmF|u5M8?J{4gbEx2n6|Ib1hpWQ?A&I+JxM*KiYR1Y%QRIbQd5hjf zy-h*&_2N;arY>e5514xUgbVl-=>RN4X;8`*lSBinz>6o_oTL%lmihCh_KL=@m0t%E z9@SNi3&k9FJGI7pA#e>uC<_RhO6ZTw?e`5U82eRrOj5f9w70G2OXMc()Aw&3*HeYJ z?>K#Y_~ed4$fwMrsEehS-+RryzHxU?$sZNDrGEdP<`DoW(m8J!lnep*)Q;uuA&i-6 zQEiCXx3X&Y_QocRnTdh&F-GmxAi`tRXkiofVpQ(MMjhI zYM^G?2tNAOhO|^OQ7OdBJGv^)1EN%Ji0z@mm5G=*aZN#gEK3PMU@BNXO$lYDhcq=< zq2ctVIMb);NlAokCY)$*m@ev1saX9oOz%Ob2(C4#dv%3&`H?nLN}lC6-wpWot0Q8! z+ckx^2i0CdtGlyrnh}iQePE0*|Ls=}>*0KaLNm2zuWzn7kolC8rw+QQG=zE3d5a2K z4{W0tTMrA^PfM!b-x2pSICzoM_w5hve}-U_H2Tj7O#j=;y)kyMh$3_5gb%j>fTY*B z)diyX*nevzzdb34~{Uy=}vv=5F&uszYCi3)Vb-F)dK<`Z|#OLn(OE;<9n=>vYc z)oyAV@?^B8psEJK{O&}4vq&z?_M2kwKTjOtpzE*CUyu{{hNO%qbxffCCe~eRym*0) z0QSH4yCn71-+tlxITjy+7{*Lyo7ayO2x5H5TD8hYO&GQ95Ve!HNzqu18dEruQLXfa z&7&QLc)*GnI9l1o2(zh8zd5lO(lByVN)C`ZnhVlQ>`t}guRe#sus*Ird^HkBCpC4m z`R(shVE3R9f9Cz2&ww5c-3t4- zk^kMiIy<=VrZ(Xh@z{rLc9Z`%+K|Vb;OutRfb2xb;n4*fwRh8cpEn?({Bqzm1O$8f)m4|iD zM{G^$9na261PNZXM=yl{3>}#Hw4`O>WrUB6kFN#>3PoXPj>CHv?D;^M`lF@8K{}d0 zVZ7v?9-ixNpXjNr>4LWwv*m3P-`=WqK8pELnsxtJ?Ej!t{5}2uH=4g7$Im%(nwr$! z_3yQuR0c%h=yCafLyi<~t)=tIu+2^*tb@3qug(xh@nD8{3i+T${$x5%^M^XUnj0{t zIXmO(dq*r8?3%$$dP=oYowlJ*1L*pIk(z%J{JyL}7189&lW)D>4IcwIo&|uSpvJvB zy(Yl&ve%cOlzrLrWc!9)E4O#PzI}H7+`ahkZ5NKO*CaG7M+vU@F7;g>X>9Q&kCYvB zqdQK@R>-)j*3OLhr0HuU-;Y_$B7eDoFWA*B6DHL?_5|ZRvW(*!6@^Jo!;g(6ryGuF z1yHdG$$kF1#*By(`qW`AFc_Fn0)f+#ppXDdI?x7&kMfF9fQWoXL=w0%i}EI=o2a*s zNdBcHT-Q^fKq*TzMZry=bZhgDr;v_t{k~+o@ZzqUpRzNqknl^c zIIVKLyMv?>j(E>TyLYxTDfG}Whuy4pp%y^@=8(UmVck*F2>e{WqRE7_uO4|_?w6+9 z>bp#{n)S_yWkY8N-G`SC-3cu!xWhB&J?Hg^Zn@Om}dFG{Jr7BqT3oMg_LbO&geCboDbiu2p3o{*ja1uOZAL z`>PN_6WL}*EgEt5-NqFN$+m?Gf~Kf757APxy&n$+LEcDrxl_+}xw|a}AV&&wArO)n9#TUc4+BDJET0@+5w2X66M&foO54u3Txl z@*lkA^%vv-xS)+w*ijq@jQ>hwO;9!XukM4obPf?j&OfJwZ)JmYHA49GM<%$tS_UN? z&@2WEha#NlmqwlHPxh@3+JIx^6fKLPO9QaLv>9cTsTC79!};} z0Us(T+xSUE)ynXIx&!Knj;1I2ABmlDU;Wrk3P@9(CtIB};Aal~D2f zh`JS}ptGub8-?xU51wr#%p4?C^+#t-V zHMO7mGvdn^|6IT80|D)hoSvWoFiu)!I6R_j@%*J5`sLd^L7yrcV3ckR4A&8shbWRO ziQ-RQUuaB*(;1|U1h_EN$5_VRL_&B^Qwlf4Iwt^+8yyIgoQ7(k0C9s8$>NxFw+2xl z1uToK3`H3R;`)z2^&3b%?0(1}KlA!h@lnFcK5L@njI1Qag= z4h`8YBPt?caeFNzxvzqCK&rJTshe{~roG&r7>U^_88|;b61@NG<>VqRn{HF19 z?|)W^=3iD0@^zguVG%{=%*kIKE6#2hhSK`*g~!ZC=5P$ zz8kSi2n9xqC6H|gJ;uY3Uoa~s#~H^+go`=#;Q zA3g6V6sSZO#~0p(dcK3X6tmZ=HBL9u6bg6PI%llF!%KD&VE5IEtG7PBYkh1O-TL0_ zgXf5zi^!E2rN=}7te+O7iSaXHag)d>-HJG3G?9qJAb4DTqblfhB6Ik+%R|{wYv*-Q zGzf=IpwA~P1g9s?7k5`?S%J!YuvcFz76CHFYzzh=E|CMmP`%x$l9HpclB4n>)HDEj zf7^9xC2Ja`--A94HAESs>3OAvc0f%nIxqcd80x^@RWb~lzq$cxONI@t!aKS~hWKUMr^yBDSwSxzq36{v}5uUU@ z_geaAt@Zu`xhv;RMgP5)!)0)*xBN?&`xA%G4*)17y0zsS=3I9(Z@Dc7iXf;|glh?l zOD;vIA4`D^-~~M3^$Rhgys#uFk`+2-I_hD_PDT0`_QD6x^->h{Y2Y|`aw&$0_#~fA zKsHLkMXg?<^+?f>y=OEXof2F%l5tLr_D5{G%w(YB=_swHmbx?@Y0f+P+b~MA!)r$C zRLH)vqENb`JuSI6K4G3uO(-~hb!=fDX#_vg%RC5ulssM1uwPwMOL1Wplw>d5Rr^wqE4xlr zl<%wwGFuNOn7w7JSy<6iq+w{9EmuK|wCtjrn4h=R)zh59^!SorawkE2x|f&m+Bj}u zuE1ZZjXgYPaTQWnXL+9`X5_$OY6i9l$3T^Xx+)m4L_0}>%93|d;!8#}cM@Y*Wty8D z@I6z$$BGv;udmYi4m_S;-(s0a4+kM+g!({Ak282>^e~8ZSmKRn>4T22OS=O<55%xK zMTP!J=Vbo9mXon@-Tp6YIT3D6slTOQ4&=ZP$E{Q+82|-6sBz486G(UCH+K>C_pOjU z7HaS9FB{uzOo^^rxJn;L6?P5E!TF@E0!;3r_rcqrQiB4tGv49R>Imc8n8aFWrLq3- z?!4K@-isz~?Wr4=o!cCA>~h)K#S_8bmSbLt!h1iQ8-IGuK=xq!v`^o&l6Okezt4!i z?Te5+c1N+XgJv?`Q`1zcVNhDsGNkF*J8KwtZvWQuiX7i?Wyz1*haB3j1;>SjxlrV; z=wXuo(8}*?f3Dl_Fq&rP`694FIElL$?B`HcTzaXrBqmi0qlOWJtneg)=y@)qVxT9C zb+8DW0$_Bd{fG&88zK=SHylJM&FV9Ua3yn_ z8b?lvB$m8AWFYwd#Muv5db3B}tQBex1h@#U#mY=RHZx5XzRmcpm_qCwGt>_k%v~-*p(f|t>Fu?S ziI?BG`~Erp#J{S`eeI#xL;g$V^bmw7a5TyCZ(`lA5jAAYOt_3KN(E<3`U%cT0%~|G z8Hk)o?{b691sPttoVkLauJ0$@tLkBIbrW)Ux-(fA#m^6tWGzBf295R8XnLT3DLD^}^me@yKr8bz&J6Tz2yKXwrm$5p1tDf=)*5Y?ILtW3MA50ip zyfWUrOpQ{uv*?Mo7)a2T<)(xkRhE%=Eoy2_^UQPpA?mST6Zgqet>Qtjn{$TAonqND z!K;sN6g^#mf_VJXkM@gOPWW6G>9TB&lQyz{sRyVxYrtdyfOUB&2bx2`(g_ShX0mak zk3F_B3C>b1cVk5q_>@`Hokd_V$srX(#Y0fI2^ToK6|Ro$SQsk6b1>;7nTqx|7Xv4O zDtp9`qiVb)&Wb{YeiMiA)5xZch4r|K+Q#A0a-%A?>R57@KX{yT{wo?H41P~49vj>K z+8IV&rcl_-<@)Y?>ZCH3!7ywD|>yc$ks&U^eK2m<6_AsM5@Yiet2VP-V^VI;$wB&x79SJ6GdYzYR1V|kIT zUzKc88So!C5o}|a17c#B|3df$G!?+>S|O#Pj0jUCV%`{Z8XEgy@#*BQRTrD^u?ZXnOS=&Hc+nI=EaFVQUTe79C_ zQ*3f$M*l)(X>=w!m9WE-=fW~{MKPg?bOsZ#eQ2gM5v_0vR(4Ah2E`I}{WLSK)BDRL z#LS|f$>HhUF1;#oeTrartd%fxyAsy7%F!41FL8pX^=R*r%Czhh|jGo+Q(`y zn&|o4^G^4R>Z!KOu9OM)ca};3m>ZfY_$=LmOTZ~zW+}6!5RR=*h2bI+{Dws7Tnrds zf}3Iy1C;j1B-2E9`D_QO<~=H&94r@CVE69!7<_MJ(C~EnpTwpA6?A_?uAd{zwf_fl zUEE3n$Nl~nzE0Lu_w{{~ZVCp8kS3Fq zF9ibyP7-@~p#s6BpDR-oGdUtewpKbpTlIdR>;l8M(ZW{t!W%!!;=P($GhvN*CQn@gS} zU%8dS^!e95cg4zj$ZJ{34^ z5CkfU+@}o9w&fRBGKWZJJPHy9@uW(qgA!^4HTAIBWc6F0(@9^G3%L*RR_>=G31K190aW)PjloDAlepC5OKzCCpY3sLh^xGU=wJIZ z{+D1Lp_BIdSK^x{_vfFLx-$(%`(qC8|K&*gVL~kca|@En7G&+rO&{O4{QOLR+r{|R zC!Ny%+-~hmDMAhUxS7Vy`=QnIZ9JwmX3l^l{B0`NDOgVVOF_^hI5Chr-`=XBWyk>t zaJboN7GtE4%)G+CY~(3XbHS>2c=*Jmz_+vg_amf@+NdWMOTrTbZH$V45YML{!l>6h z_xSZ|-{|iRgRSTPr?LIZ%JIQkDHFV9agA=O-z$)^->?*}eIjEFP%+@?n@9v9K$L=M zzENlaB8$a{718HIBLN8+fh^JNTo`X!))qCoP>mw1kL zAV3TTdPTJ$OmTcDhA`Nt8)mm86pdn|l?q|f=wekIwoSaThvKN9k{;P?M-W zdhLtL>XG58!ag=K$XW%gdO0e`H?KXJzL|gT{o5b>HDzgMLbT-_D#8>n=J} zn`3=d^H5&t=2*YBcIhp9Ux)dG9EwAIeWFU>IywdMs{f^QA~}hOK=i!KuYYA}7o51l z^HdHE3Wpb^vRRV_*QuZRc00nQi6djWrrigU9qQ7P{d@y4p+3ed1f*|uHgpu8Ev$=U zh}+Y<`px z`^SGN<(oMC@OK-EZhL#MnX;=qJs>%<_j3EA2bT`*`j-D>clE6-Wm%v1afBG})9t#- zgiB|f`0#?o!UO7=Ds}lsgnM}MZB%M9t8%n5bh4{5Z)OHt5la+vm9ntroWE{};7hQ! zN-4rq`93Pm!koKy_#)0-AC;*x7k(#6tK^%b4!0Zvl)62iuQg@Q;h!6@mj3q)$G;#4 zzNnyQ0d2ZLh||5cI15(NOTmR9SZ3;`%QziX9U$)7wmk&uHy zu@z>ig9`)lFQ5=pb|S*}(&$}CZsqILJm@Tinp_T*jJa4p5QV=VEyHuQWV0m_leIHWS{k%-@!vKRy>5c~ z?!EIq_9jW#{hZQhZs!gvP|q$YFa45UC+BPH&bAC@S&s`(Hu~))ybG_xc`oOFFrq>^ z)!+K04{-%ruVOw2%PF9szTK7S=E-Dr%Rs*h`^t&}1e%n0cs5#h)z8dB5zfobon|EQEtj zck1mcrX$NOe~XHIDhacgANsy6?{#4B;L9fY;}IYCv`sw<8|%E{w%j9bp?F;$a{sH= zP|W7W(%aiJ*GFYN_d+%MTHow>waQp>=8VqH4&ko~R~y>@zv(D{Lyl8j&h-!6 zeJ92_!}%}Bkr4n#DN)h`ega4y&3-UaiO3^(NO4t~NR-U?m&FCP9`o%URFUN);?Su4 zvOVh!eq#3BFjA~=qYNQnDM>-|M60M5QNuArVAue2t7~9tQ_cQSwz{7fCMtj7h6T=td0nU&y`ic$wM$tNq5EGtl(=vr!Mc1Ao5>t1P|10mBZv^v`w6j{$&9f%AZ5 z@S`K7#TmO5MZR*!`~En$a~za7v2fBpedx-GerwB8-M4|2iWLHIe`!d1sud2~Vj41` zcUHoD&JKge1b(fY$p{2XQcgt5SNjZeuvUFtG?QTt0qPs*qh3}bD~gEbN=9Lzlt>TfpZFgI%y zYIqN%_cdhouk{dLzWUjY!owf>-)cuQU=-DTnA9ilP&SY}W1ljccV(#}J> zow^T`@GD^lcc=PBhe?`0h19h}+m%HRoaJ+;Sei;W&i;6_L{;I09no<4U-rfTWvW}Je1B{3g*c{T|D99Qsv=1?AFAR`F8s-k8CRyUH>Rq2o^vk8R^gIMxC5y zEs!*}!Z#jvJatGhE_u)UIK}Lv=ReqCYPXF^%iXLOuMG;cF|~WPlKoyAEK>b^I)A96 z&z@ga46h?~?tGyBxt))xRTJ*#{EG9qABchR zxB|p{1t)|tZ1eksE_bZc$FTezBq1X9bf_;h(>x`^)+E8!6g6CJ+eja9;AcZ03uK2o z_qhY`G#t}c%bafR$2J#~gzXW9kP>cnA=S8eS+lLx2zKD&)Ap_HGoSAe3OmmVq3O9=LbDPT1Ka0{Pn}urc)S0Qg=?)s)9dfY z?|*Rn;I`N6`qens!>Sr87Ym2qkGajr~ZPRz}E$%aY(ygq?bY(6Dc=E%i|*Oe>Cel4J~C5 zb0|dee$s%HhP{z`x|l2ud0l|&qB+dRY#jHowDVy*`mkF4P-=9Rwj@6b;lN0!xNMiw zl?=n-7_djbDit!?1%di(8Pi88)LY3jh+O=i%0lPcgvBihFpN4X-v?et2dcYMG5j*p zqKQNkV!xnCGe%ssG#P@$;3{N@`L7)fKdRa6*?IP=dt*mmUz#ie3hw$|(h5;z`TmHw zI=}f$&%WY(&wAUtmg(h|T(7FdH%yidE#|^)3-g*Y5A#}ztXuDa z_vvu(F!exLri|7z7w3DIuerDe`glKVPogI#Hh0_`Z7al8RGN4HiWU~Rn8Jzlmk5nJ zcYmtA^TWGbm@E3=aIp9Mt!}M8idiy`Mc2W)3r|yBiWK(B1|CzW!_k6#;ns#ef`Mw$ z#+QT56!t}f1c^*JZXuEbZqW&ZB?1w^=6mcMS#sK~Fc*77uUj@f$PODVUVr2dc$E zPdD7ll=rHQ&k|{`{72-fZE2Eb`Nc0>x061+8;*uVfX4}PROt3H!nw66M#zJV= zsIClA7bOfQ5@^CoPLAIg3}Vk-%fR_{8S3XR*-l3)O{@~Is4=vDR<=62wJ8>+jrQYtFlOp4u|Cn#j}m~e+&BB+ce8rkDJqxt2>lLsAFT-Vl)W1SBN7CRZZzi+)A z;QIdENsfJaR`yWYv9G!IS@~i~aQlydDE*cImsbMc+!o8#YG)hTcV-SvpSsc*ib!op zFlu4(lHQTkpEFIw)p(3;l=9GOup=fym8ss36&lI-|MxKFDd@z zvCpT;@-!11Dgt%_!R{re&Z;}q)64(~mCvqvL?WVJhDng5;oljBXNJCHddugX!&5X@ zgOOdh=l35y+Z+3Yt2f@`_Aw58{eOJ?VgVS zhI)I%c`{NG7)c0N5;zqNzVu{gES@tkzjnVc;xrE>rNvjj{cqVVoLT)xef}m^X-;*y zLpZ>F{b4OT9e9+$ttC|sfDSXfAb*Hem{S=Y3XxgH5hchF%RU3BsEa1w`XL6yX}w>s zHW?*V8lPa242sd42@!a&j2OGalRB|Rh$FE;eOCNsmI4rF82kate z3U(MD;yKqXEfO3I2Xma{9?X7U;V?8>^yY&v6F;j|f~3kM%pxI$Qx}Pv`kN&!nZk(0Glb9{O87K@>JnMR?2PAh=>oUfA&<{e%BC=rXrzBgs zEbr`!dH%bT8P$Na4{Xe>xf|GX@amSwF_|I%_as;kQ^F=(hDi^gr_I~sK`wvg4ViqM zkX~1C`KMi{ZCCL1O<%J;u~LI0dyef&&uSfC8&SmGQ)&9R8oKygFvjWRgB{NoT)Mu| zLi4mT@I2&z(76NrM|P$=NQ=9jTl%fLzdHHKjtco+4BLhFXFovhVQPL4%l+Pue|s?E zw2C~N&FtOOxQid~+E6(`KQ!uz*6T8M`acxuzaR(E`bl{pr+=DBBmc>q4x_z+86iJv zb4N0y=%}1K+?YW?_D(+o8$?p|Q>3rrMD|SAw4${%Y(CFD(E9qgVr2g0ZND0p~d2XyuCDpWfH}a{D_S;;+q&Q+X!<7x-*eiGmUE0|! zB0p(VeSE{sUhe1&pMtCwLc{*6e!@bu&`XNtqvN7o;fJkdUb!h7%s~t>FHi8Py-pNY zUOf3_n+L5d-hE5SaFMZT%$YV-=4b~ZzVsxp>@Y2Yj`%#OWuS>Y1&u)3d2z1ei+V4YDcZy z?@mnF<2&(RnTq%LmSNo2%UyoP>d;4GoxqZr`C)*BeT1(~7Etj{5#|NM91McH&PCT< zd7Rhltt`5WUsyK@EN9s$i$Fr)7n4@Rt4o-%_#^Oim4=J;$P_KOXsLR_9cxV!FcrQ_ z{PKL#oo>{Sk7Kf8Mk*i=RY1tUOBIue1A6Nr9kc36T6Rhh z8s!<=*LMCUVM#04j8?rvrT}#QVZvpx)5}U3d$wv49gc2Y7Ir%L#D^fVli^@o_I#Ld zb8O3oC&J>4eVzEx4J?J*Xq#A7-?<`grT(JP*vuh*)Frw3bcTY>p5JB;wnsl(`Ht-L zHr5&Z%vAZGe3pMf4$ecFiZb9p4#!1@`i0Sgxh%6oG$~Pl7mkyxFLKz~k7Fc&)T}KP z!IIr~FCF#;ike=8(~|UU4|y)z?G_o0al*8Ofc33d;{8~&-NLn(3NbicRN^Jz`XPNi zy-c9=)SdDQsfGO9(kT$Ff{17i1Pe}gnRF$jz^wOmjzq{x$=O?;EyS-84nC9M{wkp; zdI|&Ex=Foa)fFdOoE#T?pC_sCk`CDJfCSao?u<}xn@~!}9vD;ElCX_f-16WZE?m<; z=(yAoL#oH{mMvS}(6ayX>UB-u`j*qzAGbe~pVcH(1JGDHH0>;UdSGt;^~}bD_6u>_ zu|GEH+eDvDlm?VvLtCn2bJ_B18v01x$@0|=yH=mInjQmk&&?3C&MB8?_}BOz-rkBA4wcn2K;=!r zhCY6b@zE@5dj%sEspJWPmdW=YA25NjDv$RYvfBT$FQ`7-Vq#4 z(jHcSLFszwNUd4bC)d3^X`<~A>tzSeYi6KuWA9t<24#XJ%YBB|7;3kF$hhgZDtsQY zGUWhD1?*CFvNTKj`7Lwtb0luONd9U0>1I5AZP@jjLiO9Z%7=&Bxgvz$qUFy$vXlke z#5y9ajXzRK)OeIX3G-&6ya&ry7az;K`*Lvc*can?a7if5X-ini3=}i%`{~r1rw>EU z=#*ue9Tr?lt&2~I98bCStnT|2zE`<9YXzAv%+9Deosf8Xe<13ASLFVH=-+9q$M`5y zJ>q>RFR~bcbCV{*Wu6@(3i56*XQOgsT}J@G!WEo8E;~Sr++e4FW@XvVod}%99^8E{ zHm1BW9Oy-fW<);HQapu6Lqb(^i>X&ZGAk6V(R8St0z%)`Y7;bg!zN+q$$5seL9Rz z#7CaZst%Ef-1SRK#}nJDIuy4g7V4IiyUW=(vbPhr71k9wKi$)(lVHSrk+PY&e!ySY z`p5)uoN6wshk%n=Cgx|vySej@JP70j!r#h~c^?q+n`Ti3Ue&aI>oG}_6%mqh+?{1{ zh@cQGYvNUzII3TLIY@RjLszdM$@nw{0$hTbLTTvCn_6L}3W6+~n5ht5`aSysDO&A( ziRc|FOP|+i?{Lt^-El)CTGZXEmNNxbOglW2e9oHE6d=g0^Ww{SvS6f4lRa+=pcqUr zIaYQ5v7=69i#k?k`1F#~Yp8oU=9peY#OoC#3jBP>tys+ZKr7x3OhQZc6RpuLfx0&SLVM`hPY9w zS2X=%|C{(7#|tYd9d`1k5qiDc|8xHAzpPv<52pnGiHUVDUY+zm#EJ&(C?x zIK&DpU?TgeDB207NklY69}X2nlm|yI>mC-YxO&W> zb>+joZxXM+ozXG?-&Ourz7|aSw#@hcF!!BdO?B(GDa{=pl#V^ug@UErC2+OS5+0qeA1-o)7*UWkV4em4@t z(LvW%Z1x^+b=OjnNt-Yob)8A^LY9T8!X0lGnqY-dgi@tC7_f z+|o=w7Tyt2Kh$b|M?pWmChz=7NuP6;m5l+rPd~Wq_2Int_=xD!qOy;P7Mw60YD;;@ zb=8cS#Cz)-7V#5mXUq$}!0!gaC3tLal?%sxmSLWSShQ#RB?P;opx!WjUak!e9AOLx z`;jPqO(A3-Y*&(yIP2w;;o0gzKKwxzwjx2U>|}GUOH8W3ITaPSCRVmTnbDcn+KrKf z26UmRo#5qy`cp2vuq=Kt@XZ$jcz!zry~R!5R1yC4RV>s~tGv){#8aZz5moa{$=?6d zkH?-u{jG^x78T_7?|ku0nE8qC0-2*W7|-dRTg^7-E~;te`6&x$Go5Ce^pmq99wsuGUt`S|1E!KFa4*B!G?>!X`H%yMBRPfqz(O}P~I~>j5$ZQ41TP(Qg+kL`+4r4$?ly!GosS-$$uvj@dxBY z))z<*{&rh`j#pD8x{CEzCy4}*xt9e77T`}NWU0{tsnxtFe>6V?L*}ognHC8Iu^u=_LvY~TR3?+=1sGEh^!txoQbHsJPg)Ukp)Mpg3~WT;?HGL+5TP1AFSrbg&|2G zI~Y|H8)gEGN4U%i!nq7vN(lLm0gygwg8mchLfQnLJkvR{A@! z6Lz9jrkH9&8b9DypTPQ%0E7SmDoSuW0=y6o4-~PaF7T3qLntt!5rmH~DgXxhK!wAR zyxqL9elrxmeg(e|E#aP)hp?TIP2jNBoWRg;epbscOlAzmrmpo8p=jh`PvjG;{-e8f zgUcQEA_~)n&p^=G!kVNw^>w~4KcgbnhZ8nEQZV&w9K=XTk`yV_0g4{bI z*Y#mWXFmlx1yNM;#B6bmM*R7sc04EIGG+jtU~NucvY>_K-rju)$pq0=W}RQ0jZ#Ju zZGd<8C=z!-406F?RL4quoH2~TL>OST4;*k-(*aX6lwXL#aUZHgg-Me=L5`N6KCkMr zZYu3*BGPm)^WPZc<|3tXJ^p$GdhC?}VssGh@huIV9DQf&S5NTC=uNtL`#TLU`%geR z5&tlhM^oKPL-st@HmEi?RfW8${&gpze(x{ls%vGc_zRLjhFOX^=~n$;-GdIf zWZSge-mkRi6n6ZWVPKRbX?N*He|7nf%dHsdjtocG?)@#f)NscWx-NZxzb?G=WL>2DkY$ki3xPx&5O^8 zHiv@~5`bvj=(bG+{uAXldWEmsJCkxR4l~jjhhNiZ+BAm5C z6lvP0&N2%;NEU$(t11{C8-c60t5iCnmu+lr`fsTmb!jzqYxZ=yeVFw`IMNNbi2s!*;d=c#o>#WWWh_ja-Nvw`BMQiqa04~?(&H&kC`*3^;#vc>0m$HutA@EM0Z^8vI;In0^>Bjd_ zn;|R69q5{3SZBHhogN69SN!+}oN~VMsK+~Qd1LEcdEFBs8BqEija;wkI;`s(tT@&E z$O%>Xh&OiWx8CM&1?e~wVJJ<=tDS3c+r>eJ%5S_JvJUB#?QMB`#5rmA!0J`5_y|}$ zu%DG>X>xL}$U(6$Ck*-T4-8A)7PcmH zC#T;v&IgW3y_~P;J3LZQL9D*JQTfAXZcU?@{$RtRr=BO9Qv|shs$2T?1W>UrVLLQ z^yCj8ip?*0GM>mVaq6bLetNGM8CppqtEKu)pUb0TaJ@hx1>-Ic!zU%@37y*s2Ahft ze$Q#T_~|~Ezvc1ntF7714CU+4)b=?)1eXgTvj3r?+r9I~*Jrl(dBlPUd{iPR6iks% z=mb|-A&e07JSh`1;7hMxe%jbt7>=I^`nm%{qJkqO@AOA(zZg@#?5X;2{aRv%(MsOYqeUTH|_ zv=oJjGWagPjX?(E%1a43F?|&TD<;Rx-yjm+qlLWk3damU;HiMaE$ge@SAsL=HXIVA z)6L%$d!`EO6xSi3owsZ~Szd$teSRZv6V|--D{tp~?Ntc0*%2{-F<;yD;K#eIpH_3G zbicy%s}|1W7RrR0uNnp^@9Z^h;WTx1^FZd|OY>@AqQ!D<;XzwbO@sI83sp~PGOr}w zDNNQ!Db$*$SA-jl4;ssQms*`z37uE2s8A#4L#$7ZYAL;y>qdr&e{GrBpIw+@T9a}? zwDDEUjUadZ*C$qRB|?g_4II69Vq#q5JbbTsm7x4}L4d?{c4QbB!Fr)dcC?;8VUu9? zvZjBrvgQRWfQ=*H(l60AVl&lN_fNak;Wsd77zDC=g%7QxGSlgptG5E)}A&J z5%s4&9BHoY_wm|R9RVeX%tCT3MsoJLN(P?!sq$*8fa`0fw)2zB#`aKUM`Z*Jqn#j$ za{6lc!r^GlhcwQb{1l+xY1}0(c&lcZ#`df4tmvsVjk#KNp;fJLNUK}fG4qJi(VIsv zbiPk-7#VNm<5|McA7rDY_^@XX*XMBQC0UeS;VkvU+J<$cxFS_qh{eRu0_vgIITSpv9xHaQ%i{YE$ zN_|PE@#46q51=Nh^uuHv2p`Md>#&USwcmaq3#2qGg?-TAtbmXWr?9DjfF?0ZaTq1) zZ!%?nB7hE8pJf*l0*O?b7Mv`WXc=>}o5<70;k_=S68`eCnWZrRVG70Gw|YHcLEd_ZYUeOfsA|Ew*-L4N4eBTy1|%}{1wfgs5UEUI z)*IHMP$ociG2?}b5PK=(=;asN%Q&b|wtRNqvN{xn_z0Ilr6vcAsuh~4Xu?pI3jT=5 z4BljJo(s@f&7;T&Dl3PEYntrx$0Me@K>0?Q9OH2O%~;^p!u-(3CD^zwCHp7#^<(-(W=1Jtu+GW5vdr&-pdLof$8fUv7iFf#<3 zx*`vctILKlN0+L+n!kx-XOhiIDHJ8RyMW0bv?PGf{*<4?1^x`Mv+m|$i{(tG5O`FJDWB~Cu@qwiEw`T{e@}~We3Cd z?cH~4x0&L$%0F4dBinz6$fN}^I$QTKzDm$M41agKBJUU!4~XU?BYbdu;01yA9Y7M! zLkup>j=(8!&}%x4pwg$dRgYDgc@>JP;)hP(ZXC6FQdH}6_Nz@0aeY3>}6F~hK}gLwECv8zF6bZ*l+4?cuS>0#V+f- z%qXOw0-FaH>S2Pi(p^1yZD%uV_mB9OVfS0k`W?4?(kMN2CqBQ0KX6IoHC58bi-H?C zr5U{Vqh>JdQcH%srGdCD*gle+Uf6cSyiNPiMI~NdxM?DoI!7fPEP78Bkl+RAb~8Rm z!1p0^WdF3udaU2KYyY(7r2k@F^4IF&8EKg3_UPQlN`A;wGp$^@OjE^Sxov=YfsGgx z4M|h!?Rf0HacKJ#)OYK-?P~efll;5SJ!}r!?;h>lcF5(vQoIz;t$Pc{W54(?sR!Dp zE)ySkXO3MZ7UI0&y5}=Ud$?KU{Zksg(cNP0C!+p#e>C zITjB-4OE{2Q@bi52$ZZKv(ZgvNoI(nz%Q42()-iojKwC(_#IqJD*Y9NTv6(#Mj{;N!>cx`({pCNX$DuM};b z^!k8Ay#8j7zg~Wt3T|;(3Wp84k^m+D%4E0zFA!=U_AS1+3L2Ul zEXB^yy)PDXtE*FV@?TYX=?};W^Hz}trJs&s_GO9BLlo~x$?}Pd98#v`weQCuvNpJ= zWp;MAXYKD1A0$V^YB_)&L^aETp_3{B8g{`&z|!4t2NCN0THE|e7?A@)+m4XvnWe;e zawKU&H^z!(V3i==Nuo}WWsDq-`yWVN@$l(njn{KOUAvYYXXw&qH~8qX&DGxWw=Tsm32N~#_T3`Lo=}Q^qz*c9 zK;;O%JuX0SciNGwS6)0@ThcJx`UMDZiR$s6e1B^rtZY8ovinv0Xd)zjvvj}icxY{@ z9S$95F%jAjnvL-~RuI_@N_1A-@bvKOMMY+&pdyoHhVESqnJHF+QjY9+X&6lmE_3cR zkgpEtmtRJ);eiijx`{I?Z)VI`b)qUX0TXEy2g(>YH& z%dQhC^L#9y zScLo|lepd%-a$V39r3a+5I`QzXZ$Ua|{7bLWwkstUb(@fk@STqF^P>EC2 zcB;SW`{h>7x7)gIhg>1REvd{jhF20Ll*g_^LjN;=yt;% zM)+u7x9RWY8@A51f+VgkRIZ%Py!<7-uT7IS5;ft@FLA+1hPS&u=c3KdCknpk-JbJD zepRhGY1CU+HpVv+Pnd8jK>|8hAswrC6Uvj?1y4r@hy*Y0(S3flOr;-H46F*Wsnl-&#i0i z12@i_5@W8ICy~VD4tkVF8GnBT`y6g(D`atLU)9$&Ia@IchU^4c=%~Y{eQfWVgGdpQ#|z(j!vp%4OI08kVL->R(CMH(DZQKOwtM_( z?#1ojQhOwXoDAhx#=XjRW;;a%mSWhF5(0MxT$(jX%J+38T^+1-_jPhOw=(Y_>^%%t z>@Vd=9{1IG)g+#rc<`vq4oL#UOlv)D>*+)NG!S2Zyq9WQU@8?btvHa0Zq%%Gl5s}v z5f7AWuFCC>nHI^ZwB@vdZss-+0+BXZ`uoyLDhee#b>1;lf8Gh2OA47*ysy2#^YCq_ z;$JqmWz44u=L|f`R~5AtdDGbDn|YfV$|eASk*QUNbVf3X$;F5!O5V;|u8K5egm)Ru zw5Bknm^-?088Q9}7ArlW63H_Q)w%GLp-su~bQwl8`y7}|uq4>?CVMA#xolJYV&nJo zXQjLWjU zP7W%mx}iI`o}k%EMczJjy30S=@-08B$Lzk*A(cOal!`TL)iXX6AXI&9)bypz@z?w` zQ;Z78wMPDFK|6!EyYvu#bA6pWn|KE7Be@?9Hj9q$`6Uh382U5Sq$%*e{}pCEXeG$lzQ`S(W4 zj`8U{ugYM%qp`^^8iacsw_3lSdK-BE$V=Zmz#?$DEu|*3D9COgS%QWLcrJ<|2H>cm zXn+=K^iol8r_M0|!{FeICVThUno~FG;jhf(n?|148^=tZhqFU8=T9}MOfN<_sLI@m zHCFjzh7LKXHoMq%)a_dW<}60n@Ji*Vgq5%lEW&3o$!J4w&`^L!?&^6k-5@IpX!zd! z&^Ya9%F5ixPx_Sc5zmX|-_Lx#8Gl6~T}?e^=4=S^VTH4i)CpEMcXPTO8ZtXNvrs!B z3CeCsZ_IP&&o=!CYi&Ng^LdxuD=VEZ>fACoTHpO7(*@f#KOn-3gPK?V1-BLc zVNmXG}l`0Pcc8*g;DZ@8sOC+<&pX{>(wc zIG4PYL8C<5;MACfPzfPw&CT(j4jgL>rOq<}93Co)6$0fzh#Z!|_Fj4_t6x|Etjl^M z+?{C5{w4?aOYrE5#oF`V(+@BhU1)XA<5(BrnwgKV`Ar%2r>LQ_ zr&`7+frJ3Z#X4bI=!WgmFk17F=Rxt@`?v9SAcG>Qfas{XT7I1$UGHpmHFhbf{VU?~ z&xsW({J%+kVGe5bkG@*AWEE=m9hT=-*bO`poM1B*ulNY2BP)bqFo3`l$|b<9Er zW}LauOhe;Zaws;hh>|GeExsfv{a{N24sS3)5et&Art%W^TH2-Ch%pStJL~G{O4%KI z6f5AV>_uk9)d07wTuc8Cp0=+=3)j7Mr0si3h9UC%+a}L0wl#HlU6IoZko;X7*}S^__ep~z zOf_K%nLZFcWuFxsZ&#-zw3?Z%xx199CW4z)<3T2qcxKt0ZsxasQ4WjP-Q}m-``%*! zbhEc4I-O>FNK)4_vp<|Ck0A6j4}UYfH*9RqDw7Bzfl`sRPVyzck`Fq9@&|e&K+?*2 z0)$+_Oi?La8-red9&8$XGM(@-;zf57w~MQS8RFwl8C9@k3(WTVF(cTr&)hdY9Cp@a zF`?mwqsIhp+&)rvmKFD${;T~&DTuoC8s-WCffQLAy6t;;^p%8<&sr&>ty)&E1cxl) zSY)j$gmuexEALB6EyXSTNe{@jPB{ItPXvjkq;d4=m<(>K$JVbX>)#{rtKq@lZLa@a z^!aDq@dxBYc;Av9@NuQSd@y_xvzdSgiO={qjg@-+LMOK=7#A|Sx-A-etIJcx$&uk= zq5BGtIU|E~Ami)3Ea=PH0_t@*IMrVPWyqOL&m=tU<=FP0nX=2m7|dAOW<`V;6V)qg ziE;DN02v0ynnAcB^twOT-(*phSgAIA@QG< zYuAV^Ay4^tJ`w+Z`=I9K59i{4K7jv7jy)!ao=b@cQbm4{3q^+(d2w%DAF|V#(7HYl z?5R0qtMgIyqWQ9Mb5bVmlL)ShV|+4&ah4+&n8MiOys(IKpx?xAz!hqvY3-I3W*j}e`kShc#5AgK&6if642@%9-ILe zq0G!R2dapQ?H;fjoX_KUSjqsWy<*$*-p21XuQu1x8YVs%hL_T723uc@#7~&)pK;C- zJEEnvRm_gu=wF}dkTklyF|_dW8eZsE*kPxq&3lDh^WEAGt_G-nFWTkzGAfi-`zpxt z$FU$ie?@0S-yQc3y?)_Wv>3Q}3LQPw667C5aN}hAdamxiHh93obNkXzzM4+6PP3Tg zzL|&3ULOvQ@74R{`^h&bz|Gn1llI=AM&Z16<;@q9-^*v8K>vXR`(IHG{X5EG0Jp5- z-vlo-n$JM?8I=or-2^I^JbSKPjK5yJ;{QkChvGVx$FUPXJT?k)` zo6mW6cO)R{>ADg@_P!gs@a?5{PupL;-F2$g znD9B~YWMcRO?inunjYq^mohbzkN)&x(m;>QHWN|}eN2Ast;~=_T1eWtm2U=1)?tV- zG8VU#<2R#jCOZ0eVmteTR~ja^wt5<12w6Tv)Xj6N={v|d9>GaZgEImtCG=qV=YGUG z|5ziedtszwMgTCFVG}EV z=bMFq^IN};=9WKu9o`nN@#1o;Xl;sE-E_sJP4LOfRxVQ#-g&7v3=}j78fUb19-6|f zsz+?P4CTnGr<~<3UWN|T=moim73AHHvHE9Dz<)pvx_*hJvRWbXAD)L8z$GVa@CJorqko5BDc{b8RjaT z7c3ukrnGFi=H%ys=qc&m+FV+@s0qwa^fcXEYpNit5+B%yp1Z9ym}Y`5AL%x zLJgi_vf)BIajB^?FzuWsWCaFsKTx%kN;F|r+f{%@Yhk4GjWWhHGxwxI%TV6E#|8={ zc~S3q&4*@6IV0N+ZEW3%oN92mafJL>f57-FGZ`%zi{V4=^I7TmkzGBV$?Zy?&tevt zCZumy7M0dal{8+wQ&_8rOe4J08c7b`9;ZM!*S+tEnZM3f|9xjpw)eZU^i-%9pzvNY zeehgB|8!OTKNCOy7qju7QI7XD$&U9l5&Rdy3j^A*bK|cl$NihQL?Oj(-SfD!Qi_ra zvN$w22T_g^rk2DKiLfWS02PD=oFPr(aKN9!FAM0(^4N=t!^QcdF7}cUd99 zPwIlp5zq@5CInD~Yv~QuC5G46B=eo=1JP*(0z|7~VLt~3t5+T;FCPZyr=-dcrX}*h z?>1`w^5ur9pKn~=o~pier4A!DIdo5MV=dynv-QmWZ<&T+S9I|v ztCJ&nd3ayL{aRi(uI&r$;`aHa5?Q}TM))BB0)Rb1zJ@>5c8|gL$SCa1YEuO`v6`9L z5}8iCPje7b6o!4^XpFH=wqO+-l!7rBO*}XoEE>lTM+-@cBVdfVj`MZ0JouD>($n}C z4UDGx*^x4bI>Xtqe$E@)CiO__GBg~-qw`%+%ZAs|sN1$T@A#pHMvsB6SJ_cNmlmja zYDLJIhY%sulCkZmK-8nnQDAZ3PWlfXFt*Xx+kPt5w;jD(=wK9|J8tRB=?f$T6e0U) z|5LhDRCK+!hFR}et&UsB2%?ALR4+m#F#%m3(#I1fu$(Kr(|5t38RIPTsW0)|0ehFJ z$o;uB%XsnkY?t3-@jrR|nah2VHL>G6LE(OoKV@6-{8)*%RPL|3bne88qonO_a3#d4 z5|pFxG2ehB3$-L=BGG_9Tk#YhN}P`&07+t*rR?W4=EO2OWJ|o?*os<%Db!w5+oM!I zkFtZcOXa%$WNUPimJ}?uc@+JWB7a%{hS7ve2!rxiSQheAptHU;@=3Imz7B>7fUfZ8 z=+Xd-loGo?`j@u0dM^#O#oynu3G=nT#?h8#@{g6+Vpx`-*VTGFfDapV(BQ@ zjafPE@%D|vfsw~EXCKNKsLO(Eim`{ilq5&YC~8#9>kTK(Heiv60>C&Tln)RJdTwfV zXWzi&wL>d$OW3O79l0H&ONq7ryNwq2+Wt=+f3(X1P#NwesiP|_joq4fa{>NFBuO|$Tt+of3 zaCpR$tMfG9>^qRsFf4r^o7EG#!`>?7oH7`zy2y?Yk1uBX8f~qF994F#ALl! zdkO|suRW`C#2xSSbRP?@93>*m0DB6Jl*Te6=HNzh+JvPd+K#`+s1#(h#qF~8nXGb* z<^>7HQK*3sMkP~WW$)!%HeBi>SE|4s`up_tvFLy9T>CvF|McUJASbxKPI|E8Z-U%m ze(k?0%W+o@i3+)i2v`!JkJ=}S&BUVMfjmQ-R44?>H}2&{1a`c{-?KR$=F{UG$N8xV zmlW>Q%U0ZPW0Vpti$m%cSfRn5g{7#Rjf?~ylf{U^U3IZoO;JZ{SgKAzzS&MlMk%eN zI9)2o6@^v8oc&DNwb$*@`VrFACtHWg{}`;+N5>pQuSiE}u*ou2m*=79y44gtZx3Gx zrA)X_q|Ts!tnl4JT)L$t{5WRu+z-|g2|rM3@YCz%LRr+snWPX)#^o!HiGJ77T@d*^ zU@zSwA~g(Pf2Y9UBWg6FGKv@cK0=uxPD2^+cL7Zpq!|DXpn(#g3&8tkmq{B_j2S$5 z(9q!X6Y zOk4mh@*Q1edITK>_se0^#g};q3|kZ!B?#`Lbs`Zkgn%XljF!GHaQj37BYx}M)z6Y& ztam^69h}a!ee89^v-8bS8e3-^i=b#1xy_{kUid^JWt7;D{$bq=lQ@(P<^zo*S)h}M z{aem%=KL}Mb_1*CEq&R$ko{G>!T61`VvPIe{r_Ou_)kaLzrW$1sT@?+#_8eT1i2DH z?Z4?=0_-Qbx=Z0qm=+a)O-R7uI}v&aYWJYC3@DAB-WW)sC9pcp_MtqW)L9~&idw4{ z*AxdSrn=nYS}b0~kT2Wp921gNjKEG3;Qj#)+X^#wn3(mt2>S8B(BE@n~(M#{n_zTQi*-lq59wp7N$yI(^)Hf&z4arUS8=90dRwC~ip zIJD$66tSN1Y5xQMv_nOc^Q{}N_lDhgCoO&Bw%Bj1Zhr5-|NAs7pFpf(d}w5+*7Klm z@N8rfPos_|%bz2PFm!pwXdcEWb(&vNEKeFFk~S+sr&Cz7LP<1Rb|MH2aBVdS8;xVH z^9|GcQ=r$QWDin8YC1Zh!6_0Y?;~P*QTZ{8*eVK}(^NyiR`)7ZfnXd9L;N(OQ54LN zer3c6*4C18p#<}S(w|$@>Yr!S1-KwnO;j|L89sTNyooB(!if-0B`*%=V;~BJ8(DuB zY2*E!P<%KQ;8x|J<+f_n?ZIR0Ss!*UEQ7zCJv*%n{&+dPUJG+1bQsYvf>BZr4PPQR zyW1VulWzQA^zdHFCoYpa1_R9}cLf(?TkA^g(0P@OZeRXI>cW4fa_hHA4-!fP$^X{7 zG{7a>oS^mpMYchJgm=&3DUA893ElIYIu|}GTU#|S*s0L~;0l&vfMh0>>Z2ndh{6fL zwHbkTcAq4KK9!7lx{F9gblkNqg2GmcQ9-$UzBpBA%C>2#y>_t(^S#Idu>3fpKn|zX z&AEmiOJH!ZP@h*(VgKH~9#~P{P z=}Ag+EAXFR#}E;_q&gQIb7tkUO}$CZu}V|*JyYa6xyyp`_Mx2_76l8zvpZC7m0DCi zSCLgnCM8&ia!pfQdWhFq6c#HN)isOlqZ;>M-kTY5FO`^G7iMC?JU!aCF5qNS<}28) zPT~vu1(|@%DB5o6n|XT<1{r*q9;N`eR2GM%*;WUwSF5$IYzQRK`0Qe+!n9xMqv z30kD?Y-GsQ@{LMv-nY zN=TsN2#S`MRxY-nKF!JB?YOO*gOmDy+XwyknDqbu#vhP_ufHIUh;_`g`~^9g4Q`F( zKV(}07C^prf|MT6oN3Ru^C4`)0>1NK%5+u~ePMA>b$Lzqpr#d#oKeq0x#+IvQkCQ8;SBOb^|y+pFTO4ySM!^-PvWYBNueNX1_Z-K1$(7j=18n-nZ-s@d!!%+q9gDO+ zdg@;mV1EzUKPOgRJjuqn)F#5bM=}axS}SEPB+q44f!f-iP2w{Qxnw#(O=LmJVE@fQ+p?Oq=D&jQnaj3&b%Q1udYnXaJKj;vVmEae{nxgo zXQ9uk#~Os_ev-$~_|1S)9c~qcn?xk=_@v2VE!Xrz&vdNL#1-zhk~%17=xke&$BH=BX?SH1>`3_CjH0=PiV%RFJhlamdQxqI=WGa=0uUFt>}d$f$g7t7gtip z=6;kL<#p~7Xbue7{Q6VzAO-zRc&{%R{NE`F{t3DDPbPLe9%otZL_R849>VjAnCX>O z7~2PsW#O_qaECa0ik4JyGDOCNh_gO_Yj!-amz^XetP`><`)zl}WMF_-sYURC=1H?O zSe`Bn!vnD};buWW<8FmIy3icJ6KXJHvwR^fwj^hDXO0~#aZ#x&Spf|5ZaG48(zl#` z1=;181FE@xZI@F@7ijX%K6k6bT8~{e-9>0&Y} z==6ySrEgohpFlJb{Nlo#1}SUl9# zUw_z3Djjj{zHta)RW;_S^v}d@%RQIg_4!_Vd3^1Juhv%W%8j9)D_RozFSM+#zxWnj z-JCxumEOCs$3f6sbhFn$!hG(4mG;2qtJ3QBdGJXDuh|#^65^@Ne1#+XbeVC4?7RoQ zJ1}!zQ-2m8KE}y7GBUayLCZ`lvfI$Zd5a=usxP^ zR&=e&Qqn0*v)85NLQrD$v0N*m9Pvv}C0`^^OO5WSIrvC{Zd53 z(!Nzk$o7N>UWQIPTYbsaXxn1L3dPn+?z^goGo)!%|?36ftNha;U;pIy2d!L*dUff(VYkQ|_ zxqPFCwO6UFbLrg(A7mRVeZh60y#l`$_yOmwUqi0D)BT zq3jQlIkL8i#iac@OP3FOoWJdmT}*`G{D`%|ZwmPZU7tBFD-A=;z`XIrC5GhMkc^~s$5POk-zGS80s(S|&VE}|+F?Qmm zcsj3ssvo<}vyy8>5nQrq@SX}`wWd{Kj0w!iY2-7Cm_`Gf`tsF6Ov2!Z7z>5-+mYU1z+ zHeQ#bOUy+dDQT5gJ0J{E_RPDTEq^kDFJB2w#^w|@WJ*DZ#O6T}8MB53EERj8#?>xBGI9)1NtVGC=ZXDK((FbjS*) zkudH&o1pyp>>(YvWZB`2ksY-MMj53qQ-XAb+IQR@oNv^;0VQ^+oKHZw>FuIEIcA?f zPq60Ke7y@@grf0S>N(>cD;;|(<7t(SY$JSLsywqJ3Z@ZyA%{EijvM(Hh{k zw_~Rz(C06GS5>Ywz0T|Eaao&qSxolz4$&V+z3yao8@pR$`=T1l#TO9)HBy{zJ6S`G zGI7<|UWdz!f{^iVTp}eZy9UU2?*)XPab8TV>0029=c# z4&VutWwe3@`J6my{^LnBc@G0BllfY@RQGb?1^25Rl!y@GD3o8o1RR5b_wayNp_vq$ zWCy2^Q_14?XIg_3&E$m%t`qwd^v0dFrE&5BGTL5X!14Br|;=6&tt@9>CoK%V3LK;*WH$ zhUexQhrF+NgA`x3_B!W07QW>(Xr}o;n zlQ;GHWbF#O?y+Sg+w^C)U6)+fTNUxX><38LZo31s1p7FVx^p6DOFr~sun0z~U#$Y7 zKbE5Al~{SJt(Yv}W9XR`W{?Y-OUg7*GWP6+dHn#ksVm@F&LmOfXfNb+XK&hh5n*xT zo|-IXCv1#N>ffac#Ri2g!>@-dTGS!}gZ7<6ozmxZp#_gZNclMohF=;_zBwNjjhVTm zUJ{O>_VAlI+duzU_30v9oia5c(umF(cb29{!O@{Wr2O;lL`H?(v;{uxYUDz%xLUF# z3cn(^XSID`k2eDXHn$_Q^=xBXmXHt&atI9*OiW7ze*st2VVYds@Ma{l5|3QbO)8H* z9;3b_yIpj?FtN4zUyXJ12jrmZQznjGBHg&Zq8!GLU+3si^M8XJkOKe*Ei6$-J|R)h ziWo$CKhZYD;^wP70*?XF z%<-!NOa~)niBR5=;WSbhk~mOm6r6+tLmNmP6|s$7C{Rw>J>h6jNbqp-7> z;@a-WPYjnoMh6f)Dr7d& z9_Sz_X^kAG0y8ll9h$GC4E;(kAM3eRjXx&Q7R1MO#A_MN@gW24QJ!x1h4!|N6{Gc) zLcl?A?A;@4B705#nRDiUE6)7^IpK8qN=iCFh zw@&Gue(Zt>j0d=)beBnXBGHJJ^G0CYsGc$>+*b$RH0tlT>@|R^%!^>9YWBlWE<^;V zMmwONTNXbqWwL*{p#Yy4dEhhuRPNacaT%xp4g})2ox!ncR_u|0m%@O+b}h50PKH$m zUcLUfc1>s{xtQmtj(Hn4!h&i@$0ink5wf6nOFU@XfyJh1~_4 zE_dA;9?b=uZuD$z`?9j&K;&EI@niaHF7_%biwDkYt4OFwQcR?3(UqbK&Bpq!e?1-DqGj!?Z8DM>K8Msghe~&8MVXnVnJMzhkT)Rb(vk%% zEp59}rVcM((NYU{)hi2m7;{t2EcM2K3&Y|Spi*%CUe#cWnR;aPS1n>xs7siGw$-B~ z!nVviUms>~ZC?M^Y0LZ@F#ZL(FDCX0|6!*jt0#y(8Xdqz;2*gh5+1zB31G9^m66QE z-2C7)ssaw8=$tfS#8WluS4u(+L{JksWx_wtxRpJp*}AOAb7JM|>%o*L(!>spouufa z+YRO;ZobF4;B-pu1wgLK7yXEeAcqkC?txyRezWJ9oPzFoALy9Ujl=D3Uz<<&xf^0IR_ilsSqa^oiJvQUm|QPbJ@9yT$R``sH)s$TsrX zwAnPFNm^~K-^p#?jJ9q{sVz*A&%ObDi%>algT-ef>(IE&$aCT<-)b^Y&4Ga1ulI*v8eI`UIL6CP(kim4j}C7n__O z4byjm4(GJPMs*L^uCpHx-R>(V@jPbkK%OblyZ`Hz`5bd)Z<}C8O~Lac>-C}k;!R6` z!R{}}y&zd8Je&TbcZtiSlexez>ALp&8GkmC+<bIvdtLwPlm+!uh zFja4#dWU`B6pl;n4i`$lbe2HuBw5(#ge0O&>f3|q*Lvn>=j$za>84Nt-(Y}0 z+SYLbdwrMxS+u``M4yCX@_|5psTfNz#j>%svEl5kyKt#fi)#`Y(>@bF{Pp~;P88M% zPiWKX$|P(Mej{HGb*mGwlNkb^-F9rQ7rD0FdNcOXd6#;dopx>C_N`6Vvq59qmc#C> z?m>k#Mm^98`ROQN1l?bgh6bS|5ZDjPYX6tyzP}*w&p!PDIRMI!?>iDtfq|6=dGqnc{BegBn8fDi)&2$2$chtL!d zH3_{+HxxDWD$+!-hTf%D0qI4GR0S(tx>OZJr8hxEMG+Nlwy*EG=bp3A*k_#IKI6Xk z-rxFzWF;$WkgU&|&z$r5K665(d#|V^kJfndfV6|$DAZ)wFg-n+!d@WkbLrX7+e9~x zls6Hl1{kW!F&YhM9B-#tMZg- znaB&0kpwE}4gm$?k_1gtO#vG!nKna3(Qvvz5)=dhS`h4z8OS);4dmoZrTLpp@Gu5t zc@QL`JLe^7h5QC`mwo)G; zfA$AC%N!c?_A~k3BT<~>ACNzMw&(J!2g2M$TgUIV$fdOYJ^6`ujcVzvmFKU&ZT6n? zYgQim`SNRBNA07{ny=sdFTHuWvbTTq)8ne2uT`!ozWeZI?|8M$*PQn+zrWcXICACZ zIm)%KkH2~Ucwr9VF{|PZtM%S_|5cy5b&dP4hvRSLAS7MOOMfHkR|$T6shkY=|5Rww z>u=C_KPYmi2`Eh)3h@fOC46Lo_7N@upCCS10unGqgE;&2NVm$YG3zIkd{Qi|7$x6W zYU`nnOUGQ6SIH?S?MO?D@R|g)U9eQo54o@I_3_l?CReqj(pA#ZnzK8^#f7$zf?r2Oe7uniB57Qh3%rgjM;uHj=n zN{Kq#%8{H%ZE>LATRjl#1OmlraD&^>f>~vPk)k+6k3K?_<$B1IMZ6B@h)0)8;D+m` zxTGd*PIhZzc{U|DmJ>T0Tpp??Rj#%t$gZSFppGV`^&(XwP-O_=tc34%Q^H-grEvYR zQ)mQ9Ik^%PqW2`sW`Z3xz^ihRz7&p=SHUlUTq19l1B=pRp+D}=;}MrIf0@Abms}3@1w?upmWV>1~-Mfdj=m!cad$f5G?y;*X%RqpR-j+AF>e=<0qIjGC`C^ zw;R+0xR_nGwi`xl7OG$PN1IzEn0*S&ldycS=fOnL0cDsyMusqgeCX5TSMI&LFX#RK z(w7~D-qe@U^%qM5Lnnm`3l6)cG9?`;?t9<-YG$eL*5t-mkCVc*eo_LBfiMYZXlg(R zZ&^|g6~YPXoa}N*rUaP-+yE&{ z0|0nWI2X6D4Ye>iwBLc=Hu^@eETcv?j}IJ&VQtsd@oAz0pmUsNGN5QG@R5&una9O_ zs+}2r5s7U&COtwJ<$+c)GqV2(vLZJ;R_J%Bf_}MhYOk~%-DkIH*Xl$Q0vu+`6;J6> z=jojam)f3W@1R1V_@+Yk5OyHaPEmkw&Cir!@ZzSY;R# z4)`0i{f-{!<7=;pb8fW#oQjhGN*tDB1Lb8Be#v06EQx`MShY(achGA9wcO|7H(O9e zTs$kJ010TF2-S>YA`*egl6-zZ7DU0;U5t?sK^Y^aFIAe*Ds7PUU7b-{TZY!rz3`OJ zWIkcc$n)ZYa>HgW_ty_U?Qb6yXjyo(?}&c;;l;`CxDzl-_ri$Eg8R>oKJV{B4vSp3 zz3>>Yx_esYYPIQ)mi%}5ihlf+myTd^o=A($UreLqNBb{}AsIn4eMd=#>LC_SrD20$ z&FKCI$aqvc1q#Gh-~e)45*5zKXk!>oKv3LtsZLayuu~&ziGquWZoWx}i!y5{s00E* zgtDj{C4>wPbva5`4Pp?1;8nSh45Ff9I9fD)_QxPp*X zT_Wb1(hhR@2}C@^5Da6AjRy{E5PaGYy0D7o&o_(K7=leDs@mh zp}(1`e)bh+CO!Xw0t8{$?tOL4C&p(k*XXgKkHd|4^+s| znvvlcYBRY#Qk=I79p8!oK(zKK?E~4LYn@9-A*o?6X7SzI@paqlh3`CsOVyU7;ZH!| z_K$TRR=cKz+9A|sxDu48Mu7!=0?U?}aW|{50QZv8p{d-b9JLwg72XLn!(eummN)VW zuR(6ZKYii_2cg;q{oxZnrw7~9rP!y0a-Y&=`v>1Y{c7j;(%tWru)`+?Fmsp<4IdLY zN2BFGi&mS zk27nwb=a8t+Zbb3dS?)`XvWFOt-^y@w33!q2nZ+_tal$f^S5{Rb39fTE#f26^vsS( zYHK$oHQaf5=-O{7%eK{s@%8lRco|g)1F6%%J`5KDF^4Jgax9?Rg_t{?4yR{Me$#X6 zwJ)G?WM`o;itL~^_5+;@44v${G}0u*0}PW+VF`Q8d zU8$egxh!f-ofp&*)lqSPGN?^>tS?KeSkHEk12{VgHAz%>(Z1{*zL@70k;k7dTM8dq zmbP{2_ns!9#*C2AyCyyeB5@=ovNBH6N(AMea!0=?4m$3(kkR>ZtVoYWFE8|oIle7x zyCZO;)GXQ3A?&&GyO~ghLbz&j*FldX3XK7y5wwb)UJI_kYxp9{cCV@+tKukQ*i zkf8bL#c7e^J5+Dl+lQ0TDHL0bxsgQ_4rFk5wpH(zAXtIw50@ddLqxeGAK{$cd*b3? z^6bJQ=&;y2z*bKS75!s?H0X1R<)(dMQhk{>Mwdm+IqJq8QOCI&Lw`aj=Z!9*;rOJ6 zp&IR=oI2I3N%~>BB4ICN`G@utzP`p@5F})ZItcL?1*|%~C-2DkP|ULHFL*0TMF}Y! zh@Refd{FI4UZ%6~^4@!iveJNOiXAo5iq}td?47(CN&*3h97RU%4wBG^VXN6ns5`G~Lli??|H= z(*uTvl^NrCUh6)xWF@eL1v@FA+lZ`D2f`T;-QX^l8bMch&zPItHu$8t=$V31C?O{z zD)icnUmDZu`<71hvv?(Rv_^vrd+c|T40l-N_8P|X{rAUeKij?Uza-eSFb>gP+^Buu zvN`9O@u11g;VJ6+3j;udE#v8dPV*$gsMjjTa;&YI*B-V6>93ESOdrv>-ZiBD{A!>d zwme}vZ}C-|3i+1xH$z0=$#1b?$6W7~6@5;%F{rmQXgE1XF}K*CA7|XZH}XEcsxa}>-2HmD>51Tzh9)B8A|Dz^kE~|&3tr3YbX06O|J_Ob zKac}Q;z%Q%7dvJ(08UOo2*3$2kP}w0^s2jgG<1A0SQvl;0zBnz!7*hL*$y!=&~gJ- zdO!GdPo`#T_C)gLy^)Qeb`da~Kusjj>h1(BC{6OASrk@@Q#6e+V&hryXQlEdBCLzE zdz8Y96)=zRCI~ylByb~3FO)GTTs#CWIjQV!ptWtNOK+Jx^=Cx0+t8C|wzp%g>T17(`eC+21&MSHHY29G@%{*{=DKHgNBQnh zEWXNOl}opFduxC6MQxdf*4iRkIFHgIx=AW^iTmAc7cl_vOk)VIpHyM$-`>ucRu+9V zV*t@;QJQRhRf21Mz~R~R-U3ieN*t!qZBqLMLVE=$?n{g~5Ee}<5Mu%S?}*N=TD349 z<%KDXDIQ=Xpo;}GNwG%ysfA=^2N(4IA@mqdQ(tCc6rgMvhYCRu_+$HOmW&) zGUW_^L_F~drZg4o5%fiPl&hj-z?Eq z?^E45qKc?KemT+g+fs7dJN`vGE#XzgA7f?|KFxn0wEXhrAlv(-F`*zA!bvomXvWBto5% zDTaJ-a{U_cHNY&w-Ax zf3u9MIHN*Wzc_TpG-w_6)*ZGRKZJSRz}S7Jh5l(8Xu^R1LonWSu1GfsKp`oUIN+x_!vrH7e7@Z2rhp0k9 z5AsN^>%#lC$GgYP5{^C};9ks~;13VE{IzU#?7~9R%B95S!v~L1SjJNJ9&P4ayZ0qG z?;uv_oP|%o!EyPD!(exhuZt(IX_S@ZZ60HHEw!CXATgL4l+C zYXsB0Z{}RPVr+V=d2v#zJUPAW!3pC`=Xd*GnjhrM`e(c*#z6MBoK;VNWd~@ za2SFS3DiJ$TvntiI56(CZku>F7hYIav+#;k`A?6BgW~R@si9aYri_AlT;{9Z8}{!M zW5_iMca3c49+_EOo-^n{kBZ0*7Kr&!Xccf}%_PqEN%+LdgKak^CC7B7)Tie*Sas92knl(2} zJHdIUJxulV-&)(Sy_yHu>PKZ>A{@Lp&Ox-xn3lpSB-7PnKA}`^*&A4yj71;}pZDLF zbC9amZmcUmXwL{y!^#$PUT0zQy^*J@9cuC^a#hpkNeC(=8l6-bbFXhIM!dM9frr8J zoC}Q-%Q0AZFXd9kTJ(D`QIrBAo4C+9?7A-2>y1w%wdw$U=U^^<4k= z_mg%tVz*vKS)5vN-aPv`cy?z=YF};R-tfywOoCRfu7mErhGG4W{!nwhgERtIy6V{V z^f+;w03XY8J*i3kWQ*%@hTq>e7MFTFlR0wuzrwe691h?wct&cPh8z8T>|zoG%EBSPYxq1<}N=}lH5Bq6L#1@0)sEy`GD z;eUD0GiVhFnCpPlLZfVGe70kmiS*dry?g!V}p_uU%#DxIBMf z;^*;*$5U&U=hVd%wYZ2Y2OR#Fim`tn2V0?AIb1jXWE)o-!V#csF_7cm9|Ac7eAVa} z-@`9U0J>g#p@;}pk?=nca7bF-BB(%%bskJuHtMSN6^N}#amMutr{6o9#N!eal`z3( zf<}(Wp;M##x*V9TyoPyMTug(e#SDEUz}2wU1|7mr z-R;L0w7V6*80K!^wl@~khg7JEs#uUGD}o2#+kg7T5>#H)qGF<{MON_6gH310X|J=F ziHz}TL2|AJXGQM0tllqR>xL;(lmm`A9LLCgs)VECb4){SR`Ll?MTcZtC0{lkkdlm5 zY11pV<%)I(l}&6sZqVLAu(R-)7G|;~-8v#}%LF&Ui638Y3zudgg~2e`aI<6+>C~%A|9cCOQ_LASq7Ism}aSorr)#XSsxqk4GXi&3*=(YWU*c;9- zTHfp*F*?2CnYF)5uVQ>boojd9cl(s_(F>}VecV1-?LVPbhm5!@U)$$9-tt|$|3A*p z{2o|Wh$BL{p-`(?co|aYG)06#3H4r(_&Z4g(ysy_OrUiZI38mbSD{u#Xu9N=L~9;M zXPuf(ytA301S*7-z6v`?36%cc{sHP0R3Zd{!GLO|g6fN(GeZuR`JBd!e`^-@3qPxm zCTpOSTuYdO<=8}O8IYfETizMMq|`mC0EaFmO4$^rJ%&vKU=&6g?AfhHyp(#Stf>M< zv<<)VrIWjz zMx)MuE0Gm<2Wh4Za5TJGtSon{x-+?05p#My<7$^)U4c%TEHv0lRCa>`Gz?Y-*S5IPai^^Nw&t z69c*9i2iE_818jh=!>q10jkL9GP&%WH=F3UoZ`0 zNk+GKG62K=#Wqy;_RCMgG-^)C&V-<0Ws$XD<7P&D4iC2*0J3Y{qPoB;kk6Dp=(&7GPL#T0krdi)icF zf%U|ehbJx<5ys{$H?QrlJbu0PO7{JGvzFY8IR>g%`tm~Dg-pfHW>U0#lTI3Sx>~I{ zTP~PZY>IUrzdzn6J18)Ap{QYM^KAwV1RO`_t`*PD=Xk_%Cjn$`ZQsp#T9!sCaflQ_ zq&adh0m)3lwDQx>a;QK!fDnE42h{_#EfiW=3iI0Rslp>2z(%BGt$(7ucw!#z|YxFA*`+-X}V|soo`|qut zGi+yu_*Q(cyigFYxyZImEUhalpJa_)jaxrwqZI zI4AZeasXXmf@b*O_4-1{y4Rq$V@obvP9rjviO7nt>sODC%JLD`Hj$Sww@Em{WiMYr z&{PzXS)&E}h1AA&R3L$P1rDFIiZ|G_PH!(w@nr*kk;T`BQdvg2rqH3mInJV%1-=wE zzlMi_tNTpbB-K zv+Y-E7&Z-r|VV3;GEr%DN22?TiCc` za2*A?mnjKCgxOqS)2&Foo>JMn6b&Kt%MGA;lrVZN_t}747-qCyVxX4be>rYLe!{ka zYnY+NaevP=15-B$3sm^p>2-$@9<6S~<>`FA>eygic(MRVHohHC#O6q$k6}UqRKeQsVQq`x-8+Qc*I|) z&d7hByW4T@A7~=aUYWs|+^LjDH(&r>z}N0)=#ks1Ase1Cj>e^SM z`@7oqjjS$5$_cJ{D$6|jkxs{W%lI4=9CVRna;(grrU@r28%$B8SObGfG^SF)6}Y#g z%In-dQ?%+7IJe4H7-x=YeS$mo5~x`qDLH2?E?@vCrnl zbpAryP%LJnYROW5k-!3vu2!DNYr_?tA9xH`IXpLRNcThXHqHud`{@{{GWv z)Q~fdtU@B==lw~J=lqo*Ov&y8tFHHK*A|IoPt|N+4PYgbp0;|-LlgwBJu8$Rvq^(; zlH544%&AD6k%vAkgJ=l1jyt<=``0Ki@}EcT&m({Pa@1owH(EvszmelJf}!O6McRHN zM?cnQNZW9Jif2MLX!X3$Xfn0)qta)AuOawz`W0ZLir^$c>kU%eKK`_GOy(7t2oORy zQixldReJ0`T2n#Hh&h>+qk6;%vt@0WyVV+QCNX{Xas6`2w~n7D z%w4P6E6*>P-MDsp?_}w(f`s4wTua}b=RFUHU<}WDgAiAU_=!{r*UR*osqYyzADf@< zmA9z5ml5Ot z8M@3rf%~181Gafdy>DBBXMZCnV9AI)@UM{z2f*wAg&II{rUbb35Z(J5T#`Dd#9L%I z*5Lp)UUPJ|BG^oLBg~vbcHnYUttzm7bkj$M=88DHu)795gHc&Ia5~)R+UY z-Qr5{!LF3-tqnO!`@UsfU{lY2b2EDH-q7c~hOX8Vq_j)^;CyWRm$9LMDc!CQ#)ia* ziXWnoUdcf_?L&B|I1IvVBzaoVSC}Ul9?De6iU@k5Bcu@-Z(}Ye5rrsYz+)-8uAzE2 z;qWX}R$H%2g}64AK`le6Gn*-KZSw_r7kif8e+*DAtLsm{%k_-!3NGO7ri>=6tvWH~xocNpX@!bBnG~6$ zg(dQ7f@O|osxut6Iv%LxE=?hOuYFV0IsF*z(!}!`%Q2u@4=Z!)ZtoXT4g<@n|9)2Ue_rmt!n5DL zTnwrINOrKvZ{)ZI7$m(t!L;92jtLM1IJ0w4UvLOYUVVK4;=`3>K@zCjN`i=MbY;nq z&W#$8p7A2vL!}x%Rkr40!P4wP5t__IhKeH2DlaQZj;)hSJq+Mx+NSgIkE``ObFZ3E4w~Z?sH9MfBBXp0R`*91Q!0 zl;^r#}Ex-f3zJ+e^8Sc9(iOh!g*OB7dDJY8LD1fE< za3Y!}JW(s162rxaOjM)FDfes!-V1xu-@C+Jxi4;Lp*uwD2+^_nm_P#T1{V<<@Wmvc z+iSKXsXnW&Ikqt=XZ6vogkq7D3em7(yOdEms4vAO!z67k;jy6r_6+o^>_X81KC3vs zu5agwg=J!OU=mNZBWK44H<+C{l zR~gLgbD7*m6Zj!e0s={3=i`W?ILzuPi11ijER_j<>dO?K-LM0z zKcYuiASQd1l}X%0)v&!6dSM5ORDyE4m=)fmff&eInuu;7yWzr=40a7KI8l_tmK;k1 zKmx2*q6HrYkmiT;#sh?pzj-Qpc(1nA^Mcj?zNFhf1nzGGYn>ASDg8zo?o_#kCdHj+ zLx2r&&J1b^Z&})}(Rk7F3HK3JbaSVq&JPi<)13(QquEG9bI;0L5QVs$h;(Y@)_@c^ z466PN%5U{wJI$14cIQHa_gnDEbN8|}PC%}<3utpttPpxI&t7bkrd5elt3+|1h=i zbl&iMopZDuO&+(Z2@Q&mvp*`{Zo&~sl8iky@X^=AZZaMv(Ms1u1wWUWM&lCf))=g`F>IvIs|L!{0zbmHLUd-OJ{e?i*KW z$aeI4H+*3XuB|!0ByytV)6p=F$|G?*w@L62(v6rJg8de^1672HI;5*bOU!b1F|`km zw8vzfgriNGQiN&6J>j|*G!AR@+?*q+ldn}X3l30p*PWvoolByH8bWw%+}&t}iszrS z82LB@RB!}0nlCGoB%E?aMFW0P(gKc%4AFX2`c+6gZD77)y0amyLO(+NEGzjm!>Q%~ zN|;z<*sUBE``aa+d6xlJdI_lUw(Iy$y^r7Q?>lta5aR{aL7*-JKuC`d2pg29$86t| zWyh3~7kbs9txoQ&VZG{|1J~$U;}QcQ-4u1uyl#eIGG3jrE9=s6x^wL?Sgd;hY(Fa! z9a5qb`XB4`ei=E)`OhSiVv4Ka$;c-(q)?AFFC#JjEtYf+cWQzV$IYY?3b68v>eJSA z?I3J66(@|(qfU-68@o!Gj+9baJQ**=`SD(q8SXsKD`DU@f4u%$vW}~ndveKG2vek^ zAR0{Qea+@Iz$_Rr&|XCEOEPO_INE8@@d;;6?OYYShCX|EYTg|cl36Ap5SMSn=85KQ zEJ3G)CK-bS;PUJSvnbOm<}xkX5NM*JUTBW=Pn4{O0xpZzOz_lAp+}WYW-X?l0foux z)8A}(isf~>YYv|$3P90^@gjn}1+y)tYkNOdz8dE#>KsMqz2Z?_V*{AH+_FB43o}kF zjCvQpL-yY_Fxp{-qqUE!{7}xie)rC`>tE0Gp!Z)s>KMCXqQ-A?m0LdfX~>}R8}HZM zEpH#}Kf7`zi`}ptfQe|Hm(_K!FE9bQpfyZI%^j_*&6z3&usmG2E8O2#KRuR_Ou_og z_0(NmU`M%}cQ`+S%XXe1iYIAIa~GGj^~HOO`1Bg`d*!$QripBBB<`^`*Rolfyy+8Y zWUre#vR57n&mgvoFBnFZz^?Ka{Zwr>7(~ejvgo2mvZ(2qBE2Ypr0EVrQuHoc`fVC% zB_+*`A?%y0f3l~r+^SYQ@9Ny=R3CU}c;u1hV|E+fD{pcRyI;HuKmEG-q>R3`q=ilJ zZtk%|rN=Ti&Za7#@hBNhupQFuQ4jx6OmVnMChS-lPIYyJI}o;xxiX1b>A}>wwuCQy zm^Oyg!ip!b}h8`4gt8CjF&wIK<@?)W8@f9OMHRIJTy@r^j?{{eDFfgH>7z6*`|_qN_sY9l zR=M+cIUN@2#O_OuyxqRA&}`?rw$og}K@F$kF}+Y6z+3c{YlL3DW3C#o(m0zc2CGBp zZWH#R5h^tKHE;_0x{F}R0GL}c0%0F+NcPKmTn6QmsS3@P4xc5R%#)!7=O`efS1Y!} z$$pY}pV5(~aFEG-UpQl&Ou94(?jBbxs*NOg1{~WU$jKSU z)QHL9lZxX2#lQm;T?6u;p!xDq0MK|9)^o0ZYC2(rxRo}V_8`v0v+wq zQJUkzKIDQqKr1git0#*=;$oZ{9$ z8p@wJHa6`-;`8B$EpVQ}9(zZ=ZluIjnYO|iRh^5S!x9HNI*>^|y6icKAPVhPR>Xn| z3%JV!0i+GdcyLqjJn!qA=7+gt6xj+7Ync$7ITcJavz^$a!$ZcC1=Qk+#-YZm8Wg5m zXx|k1#M}$IS(6Ny(b;!bx=R>S+0N2(u0#%m)T0PWOsl)YtfEH)Sq4U0goH6ef=X^6 zyH4fiNgffL8#23qTPY!qF#Z($p{1fOo5luRT4335J_s&&$RH1z32q2ym-ngeoGU(37T+N&?-tZK zTMUDc;eg3}t`s;ddqDsdG7tt5ycOKw$umfBbBOKGWw94R&CSj)o zqzOF`WswA&Mox5hyc){P?u)y;5sKAZUOhoKekxQgv?~lG96|&aG7ldGpg|q9tA#7N zD%q(fOfDSA_Sgde5JA%D9oB?V>jdm`k!M+GpLF$nEp&FoB%RPn5B0qt_9by5@L@&r zb;G5c)_8DOZrVAvVg!3+p3Kx0t+YA)n-j`s2)X0dyO-WXWe?O{`pN(J{x{sV&-~vT z&;AMa>7R3o-&XD}S*x@4lFx4|$8WR*K0rPHCvt!=0LV9B4_)>$7915LSO73!a6+7+ zbUF8*|!5efq*_e{FK_ z_QY+WF{iQ{J!}F{Dh~pWClSEFNfAK``=dA2P9oCFu{Ne7Py#a`!r|)tlYXahwB(F( zc{tk_#Hg2UM~QfHtQxE-KD>6M#`#dfM{yraJNWW|w0L7m2U96tv#haTxFCGnB;7C+ zEpK;7Fwv+{U$^3Ze@%Y?m`wtojmc2(S1c=I0duIxXL8J(Bmt&?vlr|pE}6k z*m^CVfur8QCZ!r3oVV?2YPS+4-JQQaBR(s+9C`bR(^%#EjQ2d>_IIBXhSPi8PEx-~ zEQ}&HKJRQNoO&@mDqub3Z=yhwEpfS}|4LGrU86h&AnhR7C-WL)*JkD zX!)m{ zpP^evhHpB)QtcS|vae{f>$4}77|jk{d7_VQ8puIc*uAE9rPbHu0a&J90?*63Uaj&# zC9~$@5%$$NVQwue_fr$oTAb-@sWtg>eEOH2KHaxvo$|UBT)x~3BexGci7mPPB=dBEl?J-8Wq3gBM*@;hQdMu^>M5{5)LwD z=G&wIG0j}_grds7 zM!bGc|JZS}%Jn5kp#VREBVr(sr{g4}{!^vZ_*e0D=UIt*F)=TDL^M~#&Q->T zJGlg270zJi!*S{^7RtNtTz5KgM74q!eKLCBY4zHNLf?Q41DPsDbX19N$^iMum`TKU zYtt>aH33k@@O9%?8Y*tNVr>Bp?R}S%C?oII44(APvN8)$c1U6^h2*bqr0+U>jNdg) zsn!{kbGzd)`Pakm7jnpLb+?D?UJCz$+}y^rjD5_X$bsOF*;s<9Xm#QBjo_$mn}hKr zd=m$wpeFHy@&P0ID#0b2GMmaJvOa`Gmd(g>VAvyvP_r&kF&@pPr)H#Me>SUtx}1DV zH-$1K%g$Hx?TO4A?q-aBxzHOCMI+7F80+#YDOT}4Ifv=Jk9t!K8$=*%helnd^_GWj zE|%m!*fp?SZ#V6zs8=!@66|U%G%h=<@=^H&y{eX)jp#g z*YkKYE~n)gI;F+Vu%*gTjP;W?a$43@opx@S9Wrw|Z55qsseW8EC51P!q(os3n-gG0 zlFmjOz}C5jBJ8)!%7A6qIO3)O47d0Q| z(|!-EXt|56TIGj2)-wb|*%F~(2U7bMzM8f!ESkV4hGESm8#?K;KmMTa!BTWJb13`9^7LbjY0G!?)bluv)gLDOPsqXe+EY?&dY!8?6#nS&j$r&FE78Pm z(2r~U&<0|@zG!lEIO(UOkHV*l(TdacM+{D+Wf*9eEror8GzmWu)k<}s?WwUpAN}i9 zF8XUD^^g9$U&sO5mOhW<*OWf~9$4|;)<4!fOmF}45C^cvV-YZ-Y#j54PPLKGN6+wn z7d`VhQQvg_;Y}}OPUP^60Id7$PH?fp zLtH7r6+w}9>m$y!Gt2Q-*uEcjR-=FJCV7P9csL-%^BS+CEhGGbHA_C;9xQ%3i5|b5tK!xm4=>@wy*Q1~zRw0WK3d%F-85THEh(4@!|m z$@L@NE<_a(8R^5CzBOirvE>TBdVPh2T9^Lsi~;6?rCXUOZvIJ5J=eIYmFIj_MNJ|J z{C9`c#q=HK)K4Oc_}Ghb$U(Jf-5miZwa{CqBud2S>Klp(eUE$op1E#qth*saE5KZf z{<0D4Da;6W9HKUDEVWyyEasF%fg&gCDTz`sEv4!hqhEVQ^gVrdYqlJ7qKmX(j=8>Z z+E~4aQWg&=>1dL=+LV>i&J{%C9km zIA7qf2jI#Dv9Fz_D#{wMCz)F{pni9VE*TvM1~O zU|Hd$NJ7gVzDLtBX))+#9+NOs-hqf}vz66N+q!5aeCE*Z2Ok@QL3Q=Fxzh607191; zH}n0z-@I9SHSS~>&f`pT=b_k-LLuh!oF z5y*LL=Hc$n`v3^Q{_)X}`|iEhAX@6?Q7_$}@1K?543m4$ap~#P%wi(a<9yiHn+M8g z34()(gJ1dp?6(JjWo;_?_VaBHEVolZ9R-udonr!>RD^I?-rek*1xb(G!)N9hPk&Rn zg|Xoam*cGpt7POYX-VU14AG4$G+-Lj9gD;Rvd+{w1Kq zKN6QVE04{xe!7hd9_2P==|ovIRuB79eXccq^z-8Lz2F^@uUb4#rQI?3IrrqjY*Gi( z=hk44f_A`>{S~bbI58iy?{9Cd$aC@PuFW#w4uhp*&Mtl5ca?pQRIoMaS z-uIwOAI?;i`yhqdDBBE@NavhBCxEX6ozMyrcFkZHjTIST0Fs)0@Y%^&syvl9Q*1Ot z3@ad!#KkOrkjK3;Ck((OUx#_mWASL1mUIAzDFJP7!@B7k23XSoH1Lg7ee}7r=R@KI z@A*#eg$p*D-ol}p)qaAKbN6o-qj`FvY?!!Hp7mLw(vh6 zK|-4?ZXWHC@Bd-|Ekj@eih_SM36#Y@ew%v4RD?=By!z_wZV-mZnrQ_aulTDLQWszsN{7e={dRdDRvFYqmA?!WsXcI^%M!c5-0_sZ6B z|Jxq~kBr}B|9Vy6T9ot#UZ?X~*8W;PKUjE=5)Dn>nLWU|L_49thuZ)8xi0gVnoeTf zHXOG7(W+w%#Sz&z3$xO2nSV$=w3Nw;la*IeQ=1jk%D~}>K}w$P8iVAM+HV;&r!Vk& zmrHsURj+~Zcn zO+0^}pz)gj>EndAA;%P4J%)B9Bo7A^m3-0K>`Do3z72kFd9@+v&E50&x4yie9=x*i z7$wD@C#DvMjQwUdbwM@!$o$-VUb%a-k)=)Y+L`v-DgFl1B5106y7ZCtwap_uy{ zvwHknHTp9p8hu*-o`C}(*&Gs`)B$i#rbjt@(w(qMGcV~>TC&2yrJ+I*ow})al_8#o zx!PpmAwL|rq1YvkLxP|)de^SW?_fmpb(N-XUbIXqIQ}Wn#f|q z%#y=s$z$xusJq)04(U68;5O6(C%6*o5=Epbv#S}*z-fr^C5^6oI&&I0LCrZL1FPiN zXQI4$?iqNfS<|z+S$oe0Y1?kU!L(6b4Nqj1AR_BJ9K~J=c>`}Kg>~9iQ{34mtt^lG zV$zabW9&=$P8UCqv7h9VLWzHzvEsEJl?u1w@QLNMp1gJ^py{w$d30eZpY%t4_g@D~ zv50>WiLwZ)3dx?Y6&c>&jo?TDpfQT3BPK)P)MO^BjxM4)qX`*e?36lHci|my8CN6p z5+d))bd=-lK$mR*THWoow1IsgyK{UUYdDm6o0Sm+i=u!nUaHE6ryaWv2#d{z&}%}P zrE0jr76*-Ga-R+tAtp;ZKh+0*9gi*V`VQH6`B+VL|a>9ep+sUjI|7%&|XIo)(uZ$OnoG zD?VX(vS8dfZXlP~gSX}V2czIWa?Jh<@Bbl}`vM`2`K$HN`TCV4;hkbQihNI@@BTtg zPg_d}L_fFOi;-etbXblAQ0xB!Lq=uQ^+Q7amA__Yu zg=WG8Xf`lguqhgjHBT@Z2I>B|$X2h^sFq@_VzJ8@w;`NvX~l8GtUG=~Q9N*FTd|MT zm*Ziu9la=-xI=LA!*hAccN&=^^SJIE^fFlhT~PeNZ!25;NW83O=h?U;=+3&Mh+O$(NQA3^no@A5{1pWg z`;l3)Ku#9!esFSXjwERtk#(sxD~gxBuPh4c&Mn?|=T^2_!8@m^VVmS+ZDe-QA$LSZ zc!ozh4g@j*F&h@>1mNpZ1GCh`gCx#9V>RbOTHpd2K}ANl)ag2Ao)WRDB%ezaH70kf zlyjKz&JJv{P_5IZ|JJJf7pVB}{KzjO2ig8WGWW*~(-HeaNRkIrPw=<-)$1+_Tm@Yt{@**34S-o6p+6viJUO zaclnDx_ZN>ikk);u7jQDQ?H7L^Ju#a$)HUPM>Ne%^FsWNa%Qn3cp8=eSh%a8(4r{& zxpOqctqR8}%9ZnGqIk$tAVb1pc~i*9A?|0p8aXLLu@ATdOzT5?W-}LFm$h1@R zQQs5B+wh#)T^B{8A7(=!7^m}M99OK~D=JArNao=WY@VtThdd4p;3Z_bOH5P-BXiqy zUt3h6n!^QE9wzHBGhcbwVTZOrWq>rK6(XSRO(6(`CrrDA$(T}MNWK*E8*U6Hf#!Ks zx-`Fz=7bqZ^7SnGG%{KRh3BDx+!aTE^(kMtP6W5^>E3;>*EXA@Ae=F>)U{_g;OwpYgYmQ;3Xo=Vv1a&47hmmPva{!naLGaveABSq*@ODw?>o;7i)!Ap=V?M``gvl@inN4BFczXnB z9rT(@9}}Xp{Vo{n?bz~dZ`i9|hpi%E5M|(M8aCTb*;W*htvHHNvN^QqpJikTwxtb| z{jQS`iBD)9%O5X16d3Rr=c}UkV2gs=uL>tJ0$tAbhYT{4}WHN zUXPME{G6Z|($oCp8CBv;_$2~exW>T*lY$RabSj7oF~PQBllz8_!F_WQO>{dY0w)H9 z!M?O~p~D_F&bU_a_nI+ZI-QThRTAb+8-3C4gRVotM~g+xC?QkQc=80Lik^fb=R`zI zY0LdYxEbw)$66BQv*8!m0*Mn4aBFaDDdcvRKTUU!(uxq_4kc4-4e` zzXAZjWdZuJG6QfpN;vqvg&o#NryT%e0l>uT6q`nXZ?N+++6{PwPTot>0`Hff_N`yP zlPJ>=B9yqn(`~b@bVIQ;)ymv&jduKa_QuBDCn28by&o?hZV|eZVX11njOD+BG_9>( z7s&Z;UsB{C%h>4$hX0k1o z#M9q7ubS8k;Oigcr&-^)e&zi&3#i%sRlfEji_npaO z{g}V)&f2(^|37#1{)HS&+WgqA2LL#oyky#!4`80}GcCT#Zd0}bKl?C1@$8Gz_adq% zP!$9-?SXfd2u25|7SQj(TZSw?$=@QB(wOpQzxMmou;mp@@w@kJd5Cj6YFmZfX4P3-4PB#~%`RO% z4gJr*yg2nR;nzypY?)!jU3aEvA!TyLOh!~Am8em;goi$ByWT6%mUQ&+W_;4@%Rws* zp5Bkg%8hwRBK}`o31^XGpg1@d3LrS|fL#@$`bfd~2fqon z$nD0F2<9w$B^H0$fP=LOOX3$ovsgvCQr7f)tZzsuG>C-SFoBh_tB$J}nAi{UCR6+L zmKM$_EWsR4#JPZlA4A`O6gzxSv#d?hn>v(F8Z z0W88jkP;QX*fVxm+Cm&|opSoEx)g5KFxzCLQN-3>d6vFSH=1pnn897hHspAA-qq(j zLN)K}cb|rU=5)J1wpCv`zE>GPMw{_-sw3X%Uv{2tj%00rA=7cUVjyRkmgjAeE+A%l^9QF>t~+!WGjNxKzB0MuhAgaJBI}h^HMsi zZ>_$Q;xHlx8pzoxkYQ$AQkf|_y5uVuez*AM&5GX3nD@yBz3ff~zKl$X!(+kp{ZZR* zO}(mV-o^Q9M$CoJq!%4jX!VSFvO{@(@7g^r89$) zI_3{_uRQo5qDtnq?+NSw$@925vK%Rm>Hp+2ZQ&tme(TAH8g6y>teo+cqYd?Q_gycK zS;nwiaYug-`^dWJgbxOXR8=J*8Z#OxMRG7V`nL~7KHwsS3uKZl3XEm&?la5h2R){@ z?un<%GP(pQ5c&cNrZ&I&HL+C_zLYBi65+|$Mb*>kdFT`-SVXH!x1YMyoXnH|1>ef( z1JP*n4z{$-kr0K^%It0^_8JIWZL;LqyDSij%Q#T1-P*;tvxP_}?G=Du1RPsYfu?=Z zP=Eg(NxC4pSoK-1M2F1oa=EQ^7PmhQ@+RUYRMmmJ0>oD7aW3sNMTR8K-rJ; z_d23lyw+6xxC`?2*Sh%zN(&=4raL~3xNS%An+iUm?UTM-(@4@nb0)T!3`VZM;rY*> zjj|E?-)+B< zZI(WdPI@Ckpw=FZA?asTphU|a%j|6(*7sShbdF^tL3JAOwQWwLy+Nk>J$G3rr!m(v zu22=mQyNbON0lCVL$y`m_;svALbgBaZ#oVrOuTT{!rXa53J(NdKuaejofeDCvz4z@;M0x`k?NTxH zzDtVcF_o0O)c-8&^}j>ypWlBY$GhD}egG+@Q2$15j~qh5Dk?tvZ{)ZD=7aZImB8b4 z56+7`7w&R_Kvs+JXMGj;R?ifoTS%)G)*V}%OscEq#57EY@pmWXO2cryN5A4R{8Tgq zN9*Uuy25j@!T3!9s~~C~Mlv~1Ho~^kNQVj*CB%gb;k2^jb)(hQLiCE+Mll7cC5Vr} zQ~CxU`8K4a$PL@_s0yey8tY5H`7x=BIRIAZi`u{S{SOXj{fZoj>4emDT8~7HZ|Z_9 z2J+az{{D;p>}FU>7A1zH4yN5w8?@*+hOJehjei~@Jg*a1%R2LvpKN{{Yo+}V=891cG7%b#4`*hVmk0#TTY)C)2x@HJgyF?myUGO%^Xjjr34@73UuI&ek&G%FZ48FE0aqE$%_UmbH&O>R)ore zzqRFY<)=c@OfaZ@nxt{#vm z;`gq=X>sIL_zgvKev*H3xANjZ;N9E@wqFLG4!;=u<*4^z_x;N++qduO3H<8=27e>R zw|(QteaN%ke}aPd@Ngrq(NW@umGQ&W2W4mQr~k8!l~S2iH`~`U$BAO^&bkm z=Gc}TH8wfuc%H$(`gy4F-Tbep&Z8@*B$Ip_Pfm=jzH?6Aa2ShHnt9m0y>%1Tmg{!= zN@LyVYxL{#bJ@kEpZ#71<|LYGRlqz=R8UtiyQSi@y`@Xy;%oM03J1%CvVyf88WyYg zi*L)yf2qElu@V!B_-rHN>fx=&OcYZyAil5n5M80a~tkiGR5f@g&6F$TEs*Rk17oN5w933rGDvn^0Ia)I}_a0*F|j%`K6 zb^Zv@W&N-`w$HJUACj|u8~c$YWOuka@?2@`>3SihX4Ruq0fZn35^E;y!4);41;cZI z!0E>}#_w!iQVh4R@(7IMpk3UqlO0>W_<1ELK6_F3Ixg){-sTl-q)BG{oscwDf%d&K zW}6Ym^}@ed_9<7^9(kUafZdQDKT?+VBQC)n7}iH$lnKh5|ZJ? zm`JkM>(?M&AKp83=_NDDj8srkzS?`|$Lw@25kDNmVzdNgkYWHfKuHRreBep$9D#&1 zdkJySczdDz&VjQIU$@xY{aR`)J!-$R{QSc4y6|DuFhfk{u;R%_-3gpLI=MQR{KIXI zx2>?0^Gi#H%XVrX?6^ZpF0X;$2qcfFq_j_MP}AGS_t&G2#~gPVI!M5oOhp*bS=I|S z-;aFya_`93!vcq!)&lpIhO@4RJ$!lF!anKFebASSFp)caKUpu=-?;wz`B?a~6W7G# zD1VWsC=?1niYw7MbRK=8=E4HgRlNd9QT}|8%43tAjWm(RYte=n`a(!x2p#u0XE2eL z$5+I}1i_Q2fS`&BYI_JTFwU;!*gCMblIE2QsAyDz`?k(lZ{j^}_C8(tqil>OqlB+C zCmGImdlKR2J(MEP8u>W$pH!g zDDsW_lu5kPM2An5+pVejguy){oH-4CPvX|f*HmUcI?jYgDtRfyLWyc6yH}CY}4nKa0_}K z<9ht9HaraX{N4{?Z++!=^$no;V8bI}a z6%G|qdTenDI0F=GB2AEKbFvszCDW!~%*h|P$8N~o zv*qj~D~b+aQRE~{466Xq`*Qbn%s0AF60YLgbyhZb^%%-yF_n|GG>yY|qZ2TyiEf-M zRxI9~JFa1b9b=UZQt)DbnEg3I_=HMKlbVc>kv{%5*FE-Qv(dcGA8WYS!w*3Cr__&i zKxA^fhme@%-xYhlXZ_hiJH!8p{qf(($(Y+b3?>0CA)UFSY~%_! zbtK2>pfg2RM3V3zFbTi{&`WRk-2!-<^1Fv#2>ZGjOH+Jat;j2ZgGd-sY-Un?=4b+w zf~3L~z;1D`Wcq~+piuKkZT>%Ob-PHs5FBPi@HDbPg2Rp)d;Jh1uwIQ*`RVQO%8?dj z_8eIRHBhCJSar?8ecS~gyQCr@qgRlAz_U(k%zAyZ6Q{S~uKLyW|>q zMs|a2zq{h&7hvdhpxGtbLnvs{BIsK1<&4_wr5jH+k@7Cy?(Zf3Y|L-BemChC5&)3m zS-bqLW2_w{h<&YBrO}Edt701zEy8-8H9f#?cf~%EH3#-+qLxh}BZ2+Dy=c1UYY2Jq zXy9k|4Ldo^wy$bLq0!NyJ%2uv#d@8P;Q9JBH05*ln5KuAp5=QqA!otlG}y1m_A|^M zGpXtU&bcz=Q4Ii0Y@r9Rpm0q`)_W!Yk6>@3P`od|n0nROPY{Q3VSF1C66i_OJ7ZR4 zvlR)vM`axnqXwe^RVdEYo&~xGhbSr*R0NuM1rmUv47NZrPpUV?;~bWO!9Wl?zVPb-LHe4 zp$>K;Cug3_rHSV{FK-`+G5`RbNWX#rC35DqHALFYVm)6|XvCVVOnt=c+Vf93Q4uor z-bN7{-PPq%WK>h1DGK|@`k=+FQ>8)oPu=u&h0wty6tuXvo4osVFDCda<->DU zR8Q#cH@+zRe_gNnYb?icll&mQ_#DGtdT%RIhUoASp~V~E1B$4)g2iV=6BJQD+&r!z z01yFX!g!UpFNcR}q|uPkTM28Y;mLu$BmlJ*Ubl%iqPedk6r@opdEmZjxzq$huNK}_ zZ;!*1o^%Z5Y`i#@l%|m&=VF+OheKys4Y6<^_(0XJlgs?MU{W zJGA_)$K79Io;&V&A#-K& z5kmTN1>R4a3(h~d>35=)T3t(O(>V+&YTNKoJo(OF*f8~p_M)Z^-*niCt=Zw~p70E_ z{x2J>Ba`L)k+%w{=&-fU?^kVK-jki`TGp_;9Ni>iR`w1Xp?Yk(B~YL^ruU%81J0qN zF1I~&9CnwDB4Ud=?N!q7Vbp;P0WQ~z`?u`z3`q@7G-gCpp*^7*^^BreQ5ebvKUaQn z_}UY_b~h+YsZ-|+Z6Pt)hF}j?E19IiwZMA1*3w*fX$U7A3&PVOqOwwC;-bt+sAkoS zSR+AHpIu!&m#U{GRl=_&D9Y6z$25WF6OLmKXW2h;S($EmhPZmxC`VK2%i67jkAK|! z(+Dmvv*8!Sg@*^=FNb2r#@zUwLTNAvF^*ioBZ;) zdMX&XI};{*uDiVQm!VF)+70PkJV%qLJ$k7PiUmCyrOLCHUXvvHv2{*{)T*JoCwh+mDZBX)sxVqC;RW&C0l3d4xEI zp(AUASAa`M$nwU;_4*&9_0@^NMD}Ua^Fyh|AEgurE?&lbq~{bDA#$@yaGOLbASSDq zWF!WEiWw0ILRoVmjXlKW@SZbVXhK+j{5fKL7^4 zi-mQ{UJ(q7a`#%7J{n7tF-u~)Xx9Q~jJ>8zIe=m}V zI3V_3TTW;EjohD6B;rMkzVeL3;`zX$$UPWY90m=?c!M!%GEmTHh%AJ-rsR1fZH>2O z@dzsQU`ATEq{zAT_MKQRB#lc8y&4ajI}j%Xqwavs?f&S*EGycw0ZGNJRvoeefZ6-IGI zoe*j@5~VvZ;EwE4k=F{_Xj@_^Q)nwx*7-}WgGXR5_^LsJOduW+NRhLzl6Wz@eLRrE z5~b*2?-$E~ga!t21Kqz_#+)z?b3Z)R@W{D-|3(us+uXyJzu~7#Y_w=!&=ot} z#fgE+wQ~owk&g?k!VfJbZXA3$^oPXz(~B3kR9f#|3wjjz*7-)T)CK#*q?dx#GA_X9eU4eMU7a|%!O9WC*Vj!?}q`jN47h^gMHBb2#Pau}bNUL1i< z(RVl^87b>?*d`0P5xk)B%2={vFr#Z7W+WWUWqQ@{tmD;vw;NFpGS^2fc6MHMJ(`GN z?a1)W+&x%W|MJmwAw%s&^ABRnRWF+7eo!Xgn|vU~GM(tJhn^in?xCL^)DmPW^#%5i zC?fs(R{PFbWk~fI^rs+^j^x$;5q*j@9c3b4JW8Jg7s0{ya1kUI1FrzB0^oQ_ASwGq zNGlY>E(Q??=f)s_AK#Drdsa+Xo7Lo^&2#S^?+r?yZSq4u%KLQ;>+XgbsAG!*3h!Rd z#pJBO87Jx~DuU8y%G4IBKUE)Z%OCuss!{2N1U&CW(zSQBPa*Ac=fXSTsTEq zdQ{fOO>d+}-aK6W!7KeK>(Q1gGup%9*z4%<7w>f*9Vw1F|M2>9(id`q!KZMOUk9lo z^@$&p!m(ae5^8nHZljvvWf^ZJ%Hj~V^{*pZJQqB$ZHRxHhwJ}I;BVx>gZxJfl%JfY z9;4UjVXDz$F8o|VZ|I0>Md!XaJcyr8PH#L|s+utR9POD?0&ydQ&GO_9unSR>Flbrn zKD9d#(Ljgz{3%oXoe1Z=ro~hJvCkUL{Ly5Kb0--}2Ed(^6>D`?5D77o<{q5>`RjzD zFZ3ssM;pqHNeG#)$b~0loxNf4?MA^gKTggh+tR)0ibmlal4GtU=6zDvlii*{b?)`@ zm*St#MOr5^1OG@VKXl;gv_97V)b@+?6LWLNw&^m*_tB^oBU9i$5Bbc15>~OAuY>$4 zZc(D|R2_?1tmYZgPAMYtBI3R2^o8iRSl_8U8T&vewJCViqZ$!Ao}S;Ado%7m*W`!33e^yr!KJoFg`6L>$3LMzbxlkdhfUw z*QXmNWMw7!sI`wL3DN`4rc$vvoXo)^AnFcmfWYOX4yq&IYo3!{2tZ6@t1hZogbLP{o~%z4zz>HsQ0u z+wPy;XQV?p%3U5z9fsYCP1FRvW+N(J&vS8Rovzy=J zru40_qnNA%E$^29cqEJN(v%S@7;|aTF;%~JKsmi9{fp(QS@|W$Lhwn^fPTT#6_H2H z6$-utYp*@};);r?&DBZ{K9tk#anC9Lo7ZnC(H~vxx+Sb#Y3i?TGU&MT*BR z7!}nbhF8~o#$_{++D*`sGQ{CDiq0sz`W=EMhmFlPKclmj9FKvL_1fatFUpB1`NR-9RV zmzL;xN2)W|ZJ#DTl~Zeup{KaB&3vU$mWf}?b&PMyz7vIJwa_ZKp@JP5YN!%jcp~I{uVQKP+|ls59)*ISWVFAuktUXNQT`U8;Yt*F_Uo_*mDuq)S3O(s03$sV0yj!+dIz${ix zkgA@s@;We){c71;{E~#Ycr`J+?F@l{-^`OJ(ekA?#Lj7o%JdE);1DEzVNfJ9rS(lN zlBT6_nnS>W`B`wG4}eI5fn-XfK%T_LQ{w$Bw1EV-0Q82awOcyII$2S{oqP;N1$Ba3 zR+vT5XoYIH3&N5)WeZUoWw`VCoqtNMSY9(S<@%Y>b)9hT2`W_j)gmpze6)$9w|btW z4&~A7kFNk))Wr51haK1_3Cz#k$%d2M82-FGg7@>=eija|3EXvjWx2KAoqFk$b-@G4 zPQ-H`Hc6BJd}(L@KY{ueY`>A?+rCAn#^3g2{4;wPMX2#^{f8Vn9tma7xA61a{L(Z= zmp_S@Z#dy2M)0GI^JA2J!mK+6{Ip_KFLxPCl9eH7?ZwXyLP2%hplTo_v;(GMzu2Rv zLj3eg8l@!xS9Fy-^IeblYd=cxG=rwF1x2BKN2;~zGoo$M@U}P$-bNL=&Taqpo1g88 zmDV~Px1>wjw(`Q&>(3YO%?ozkPC_Z}FEHrH>!=jG{~+&X*b#++lzG1!%QTco^O4w_ zrS+;$+gopU`+4SL8SW!5LV7=kjkJ2X%*t3~P93Gl3HI}bggEnnn7lw7Lz~oPE2f)- z&mkej@nhK5!J zxG=Y1Az0!!#H4;N2Bjc)A+KI0Jgm^4Bc7!CIfRQt9`;%H$-SWHV8|HMKEsI0l8Rn&ou4bt&}sD z-N;B&SqesQz^UlpmwNLXIZk%XxGDY8{}42k>gHr4$HOM@_k}Qo}c2oVTDi)wVh7r%S~6dxuFQ>fr_QQu{0C}QJx~&wF!@)QHFW-i|G0|z14)c7GVyL ziJAL^i!bBVS8DU~hS!hn+d0+u@kfqYdiF2UW5=__##ObER|8Mv^qw3a971cWikN)n z>bvZMsGROscJjV z(ghX8`-&-DMC$HQkWb>X_T8n^;TgnoOqOg zq#mV&`lWmrZGc^eyCiP(IZUoP;K_IaLHtJujE2_>*QfKk;Es967xOa@@x}H-Ws@pI z@ic>k@qxIz7RLfa4@$ahDvY`Xz)(3;4PF^i&yqSmvSeNQ(Gq`jlGiIF}h z9}oG+Z!94r&j`)?$UM)$5BrQQspm!F`z6bL+_D~YbZG0c7d}?pG7tNXcvr*9iJt03 z#4Ths-#2S*?Tw8OGC@pal9qbaNdIyhyt^ln#CE@A>-u(SLEv2c7z)LZ(48{KFA#*K zoU@3SfKdF*+pQbxQ7y1~ALw4SMQE{J0(RMkXi3dqSec*dP@9sL7ri8a<#pV)AkLW9 zmG}{-$#d5?h&ZxIIomrU5#ske4CFK6Qzr~$zK#7 zgu8|v)*bmtAJd1IV|QMEdK$YEb%hxXfEG^O<@ZnJ?9^q*@>6zl0!N$#M{@9Uo+*Qs zp0hc&L-=nBaF2>QRT{0TcY1|4!gGIx4KB6csz940b5fnq%K$1-l?gdTtqfXkoJwqJ ziUl$|);bfcXaayL9|XB*wepVU!FdN`%?uaxMtkA$V=IR-5-qfaeNT8O02V|eF?vhH z1wsni7^mx5h*POhtye~eUl)ICJRaI5S*Oo8Ag-EeL@Rba^(6o$!FOO!zNyq2kD$`l z{;<`6cORENXg;iL4(dqW3b6<*@u-wfTJa{7EuaT_^=ZfZtVm-)?;I{wezO|cFm16| zI(6x6kCnx9;m$$1^VfH`W*?joT5>F&a>;qIE$F&@L1T?4PcmnA-0;+vfTK8l=2eft z`B3q*&rXeP3V*wt{X!_aocQ0t_Lm*}3%OH2{zC3JNhBM}u5x}EMC9Fa>vaWQ2ByeG5)x8 zZr@D>XY>>I@wdMOheNI&+fc&9clxQ z?#2oE&Pl17Wx)?Mc1uykkPm7@SA4?;3f7aySwc!D`W3=IVCSxdk4K5e;Kns{M`Jt!w2og%08omPN%3O z<1nP~91~pZ?J0=Jwc))#uMel6q`3)3S6@Ib6hVa}l*t+0Nr&+mB-jn_5H%cIk)s&O zw1wiookN?E5u?3EQYj@nL*AQ@;~+Sax2%HDetacF7*NO2Nsp_u@K&wbLg6MTZ{i<1&>X*%hPfP0G*7wn**9LZ-@l$-@}Dy^ zgM(Q|Vh$jOYcnS-e;UecZCUm`^s`ZsGL&vKHWe>$3j27>8~#~S)5~n)x#E{6`$XD; z+e9towe5O6$-q(GgQAc3>Tr6unTKmxpw44LUM-a<8tro``PnvjeE>OdCAjA&Il0@_ z@%;1BZY$oq=NEQ=?tiZ8Zu|3sLucf!&85AwZ!QjV zklW+r2Le5l3l0^(k#o4qp~<`DWg6dAM#pEa0kIGsQhUB{uWi|AD4kJd@hD{_5mA&j zm~3na>LoFbhAyBIHX9t`MT(w+TFb?Q9j<3!d>PcnB&5$#G{4#iGH<3l#V@5bZk$I@ zLE%ctaCAeSjiE3NDd9GWc|OF>RPqY+lO4(4=iV5B-^4m*+}M%-V7ubV`uXtmm#;Cb zj~mk62bCBzBl)UUaRu_h&FL4yE}COf^>!(dBI5CH?_Dcw zRPp&1^u4_Kk+O5brR`XrGFO-7{S*rd^+ESZMYXd&MOOEaM>A7P-k-g{{*7EbPmM~l zd1gAkcFxo|Bb4*Hjoc1f`~f9D|wlug)x4x~!ZLLbeNAQO;)C z+GXyS$UHAXF^x4Tt>pC(OJ*v7MFs2DrGR9Z2w2pBM3Y|3ks69rF4G?H`bwH1${^=@ zkvrcoy57=to(66_Bqc0=F`5v|rSaJ#zAAiPt?o`W6OOj^0`{T(F2P~F z&I7#n@k{jR=gBO>HuI`bRHr)4I~3c{%ZZ(NgD( zV5brId9QwoHqha9?uM(-#4VenhxQz(y=5QuILS({(ev~mZie4+{Y-vv%L^t`F&u8< z3fB`!vC?kQ6K-m{=j74kx}jKort!k5Q+BRR%$Jy_88M78*Y(=(`b~e{@$&eW;5l2< z&}z+lJKi4KcGf>$HtjN*=e+IaS?f*L8@OZo%zN)}A^vL=3ER;9MviBDnrxX~a*p)R zj1}=`$LhuSd-?!JI<~6^dp_&Yx8ljt3C4>nC>^t+g{t&p`Q1P#`(vT{n<3O*TId2f zx8H~$U;Hu93l?41`^p;G)nN~vzlJ9Hb4jSl52FcjrL>sKQWB*+}F+;Oa@gPqT zenUNZHSi zlXz-3ANli0Zaf7j&P7A!l-8COlVJ){VP~LE4@vdQZ~Rig+3}^c0r!=5^DH7v-iQ5$ zA38ew?ImE}+q|FC`$w$2u8wQZTn)a0t2qcC%!#T)IO zD31>dMy^mlg;V9#CcPHZ$}n4Z@;hg5jdA9PrD+`?N!Zas?^CyK;*BOmNJ=*=9)puj zzBULEHB+yJ$Mfp5$6$!_EhmFJ)JpFBT4H_EC90}y7gJ8Hm0WU3b~V;H$Vr~U30{}NP&;@%Tlmh6atwk#7c}13D_LvZp`1(ch z#p;T!dL%#eiEtJIHOj?w-bDMlVPP-~PF@TqgaVy5IHohF%Y_wWx~pN~daNY41g*OF zdEO@*bLedT0L@p-_2KHPBiR%+X0zU21)2RlPL3m8hWSWis6Z1fLiEg1!Cn~^w~I}0 zPENC9M$O6RM3f=NwmAv0f^o4ZUN@FW*h>+I)JDJrrkBn!U1q0XgXKc1a)6=p0kwbF z%LOFpPW&*gWb$Vn5z@>{)27IKe?){9zGxWuH=_0rgTImE`~uT6ukM*-FNXXjNg~aS z=XY*;-I?CZiV-GjZ%zL%?_A-1tY4;Re5=li;fs|BCl#nc*&(D>S_+T=n@U`Jh zjc!yYSfO?G0;*aHEoAZX`;YIt*KWe9#-G(K>ArRZ9|YUsiuAOwB&2T*8#T%K-4(=Ry zNVs);z&S6F3uN$E(7rN{DE(F}uleM^Iv(XWa=hCg^eB)!BiO%@lX%Rj6dY{$4|0SX zyN9>ywa(#x=*i^EF~|AU;J&?d8KLY`UKOgMsMI7Jf-*{y7DSKA=n+X+u&geRI0feB zgK9nPHr7i-IeO*C9R*an#hBT4(n(y;45-J~W7BR)CxEGH#&BtV#u&fUf|^tMyE$*P z<7L*bW%oCd(a@VN9xT?qjAJ`Ze`t-Hmvek)-rnq?I)nn2;>tyO(&uXYupwY87`iyc ztk_1d$tz#=twQp{r@AMWpIL-3FcR7z!*au;we7&SUWz>ryT;xm#vSRIkTIOVfi&r- zPQ_9J86i*=J-3>aFI1{TAeS6k6%3>#AW;g~KpL`_lbOos59rtEmuD8*0GK(1&T57t z^+4>aK4Kl#p4zKa0id5KcMy?9-4zBGNqU1hgzLOhTblTX9Qe1~fC~=i&Od~Kw@!KZ z%J{2ppFR8L-R|gfJ%jCU&zj3wzq*w^uy!33UY*-r(0JjJgMkRDj37ZcORdHzq{$SZ zuciX6NuY<~UjfT~{hT@GL7fj18u<-V6i;ha9c|BF2SfeF7?;ssV-my5Sn*Gs0%QXD2l&ApAFK@Cp@?K01A_=W&#X> zmqaocAa#BLkeLi$Ev3eh6E&{D32UZArAkE>f1IbiiY}bT0y(+a0Ej;^5oU+z!6EIi zW)V)-iEBG6{>&5;2Mm(WgS(vd?R>+a^RF&EC9EW!ppzEp8Y0LqL~15X!=TirEl=GE zUd@l0qKiSWqUahptjZScug9$*Y!W+AEu+^DUO}1+@`{25dFh&SdtXk^VA~h3=KlLo z{EZw3yMmX6a@Q2~Z{+rT=TKlHH}ZGKiUNTWrc*C9woTWiwhoYUaAAyM=2RXT`)XC1 z(%UEhiMW3tA+Un8ZXv@6nr99Q)b@u$V^QeGWvNI%ZchWx*-G_VfWhdcGiJ}xe7P#r zrt&qJsa>KdA79htTs%~8JU1nSH$hmKC|2B=ZG=-DxaAPjYn|#@HF1XRlz;#FX5KC` z;4*8J5hK`(&E{Pq$R!E$-WUNDx;%`@UO&dKAY8@R&*`P?CmRyZ{G}b-?2t0NvRIUN z!^*(DBF1~XAL|iOljL2k>NX%J&s{;3-7^Hjs>%T20G-H95A};fk_Tu@XB6S&-q?P= z1WF`~Un1kMB>}B9D!-&JU@3S?Njc++pn_RZm#5c4Y*EUqgiSppGFTH)F$+ei5l3R< z5s-{3Rf1p0(5o3vWr}+nr#COuT1_-?mfRthm!UxCPE7?PHh6(_NwdO-OHQW+Yb!so z#;30Oc3+@kUTP$NO5Y}6YR^ueEWO1sk43SCrkcA4E0!@;un@%rTnLxQy#3}!)B<)g zE{>Z4^YkzmK8LFBQ{VdFn~LzZuOhv3c(!hz<&NyhRKbF+UVa;=^K z=k^%+f&T3?pZ~FPZU_~=aAn3nW4UYqz|-QiHZ9Z$Pw~C3gbf~EQ96U)7NAtnfbAA9 zYmX4IS<^2yuG=9nE(r=X9}k&0yDCFCJ3;q=3mtl#g9frzJn<>)Fl%a1w)UK;Z>JuWY#cjkIa0#Ug8yapTeE2fnm&y7lVY~O2?Ckj%K9rC1K%mQ|F?`+p z15a9UQiE*be00+HC(4Qba+)p(+7@czVv$L&`GGRjPFHwu3&)dcOAfuOzP z!sTt+*9V|@GT`x<**xfDamvvj9d7Tml-5T=KZYG`sgNxCw@ak{)yY9%AINv>D#m>Y zt8jGy43ZFnX<-Is{)_mb1hb28yF;m4S zpBu`}`9o2Q2jd!-;H1r0Q;u=rf+;y%Z#688_}S}2`!KNvZ!DIS_l{rS{={%FOp<7q=4 z%bKhSdNGn+Ch6zRikY%gyG*cVqm7~2wkgZEo?8^Fm>PKMOA#g1djCQ?gcB)qL%iEM zpKpV)Is(iE?nlYMLneUE3)pwo0VW`IA)zn|VB@35f)SFzzW8+$>9HbFkE|T569|~h z)!Dq(OiKE z34R$4Bh{1?%zR)15KxB}WX?tm4oeQ9GL@>_lOCz1i%vW+ao!`W1t%ienG+ynMR7CK z-#oiS8l4R1G8V^!gHdq;(==K&`Vx7K)6u;lmINwO@Cd1s`Oq;lQLgO*&XTFENl-G~ zQ&=638pEYsw>2mUb_)?aSs`4aA*UC7Y;fj$mThvEKt+@at14Uo!tg;p;|qxS{lseS z0CrDRAM2@#^!rV-B3QzihGI#7F4p5CTi?~GntS?oWHQU8zD!o}kk(cA%|GNF`ug+y z`hL5+^Ed18f9Hn#&-2GWkxTnbaga%50d6dgaj4AU11m7|+#oD6u}y-`4zU6{IRM7u z{hMU?Yt9!`(;w93obOrFD<88=mi;u2?y(40PkFBz;}@rLWATN<233?1QSW$7vH2Ct z;;=ZQotPD*018N^wvKvLf8`p6+Gyv3?6pOd!!uwXnCXS!U?J^`LW8^&+Sj*rZX zX+)&}uH#Ux^{uv~SFQ^U2~e_1oqg~Ng2^X6fS(4Gk~JLN$E7g~3d+6~SBaBtD)CIp z(fjH|Z-K6iMhrv!N;brCY%bW~LiSI$S8pEIBcKi@0kK_|^~@d#cX73y8k>{2gB|6~(P& zUtfA=_v#7A;KOHWvCKP-VNL}`uV%d!3ANq`l%niZim|ipYzIV|0sETD$`NHTr&G41 zP`AT-HWjV#=Ec`e9J23QoRe?TJ&95>v&W%d3|iHnGbyrVws|T&>^UzlrO7x&AqIee+2LtTv=D6nEGREy*t-hl9Db8@$n(h9O0pv zqQzV5Xl~7I`7|kROWFA)>O!yd!Jf0*Z@*TOoHJ+_+8&>iHY3tQ){J1Moe`ktU|iB| z*TQ|kL7ABYxRN^ez7{?4{86THx$IkLmPgK1T8Q9{+4o2;Q8zw{H1nx@1wZ&3En*;v z6Jbp6D^)tKGOufm_q3=zlR~1H>)g68jk?Tf!jrKK)-ZOD@oK$PGj<6rQ69HsJ5$YU z*LL{r1z40=>grsc_0!?`xi2kl=NUH_7ynq2`1RBgvzd;ohA&p19MF|Gn0?yckbU-t zi;$3za928~Wo#LM3C=$_mLMXknW+>>;be*)wd#>>IlIvZ zjnHFJH2e3mhRBRGITr^FDZB+jT3=NVpK2N&>6g~UgOyS+4`!5bs@i8v=DTm?doI|# zrc}#RRLY6D*nC*I0+dGHDAdwVU!G(3wLV@Ou#ts1NUhKx z20z^4(dBjWHF4j&ZD*ZgikNsyYILo(StZ{Q?2xv4R&UMEF0@m#vDK=G#DpfIvqh9H z3}|zUKJ2sCK%B$mIKar{FtkG8Bn^qZp_chTcH(BK_?V!~5s{ZyYH5Bs#%G?5GMel3 zRV?U!CWOc>D{G`QXG`=pr9Q!9F5OCimi_6~fX=sWq}5lh+%i#~0RjI=PRc%+L@)wC zHm<5UAjGAUr^OetE7{AGQY}E)6>(G=;AS20$Zeqd%I5uGH!WyH;2@qmp`}}j4_R%; zfG2hCVh16w;ni#cGE;jj!8p@TfSUJjdW|sQY=X zX0{2#C^rsww{olI+pdR|kKpGM-MOgYM?yE9wAE0q<*}6EG%E45C2p^o^=LkxkVOP? z!yx5Rb%cGO0*pq_xQHIrI&=t%8sJtNUt3Q#aq_)QBaQXjWxwaIU$VBJl|}WS0<`(= zm(N5}%CFfAGj1q)Fpcj@Vf>*o=$fETdZ#;pw5!;NVkm*!<29I~?k<;lJ11Si&izJQ zs7qa+(=a8|OVFUq&zBY+=o5*VzddMg7k_f<#A5c5vxX&G%k}%S5!0)U)_hq(0k3m- z2Jy(IpU-X zcj;wT!^-X_we)|q9Q_w^VAu@R)=1}M^#Qs_8dL^w=i`!7ehwNi2Rxpka{+l80A#0s zpi^lhAYnC2tJQ{xh|cZ<9XGr>`0o0&YuX!In1s(yf#xx={M+*|%MkH<$g@T-rEe%( z4+XrjcRt)y&?plGr*rc`rZ&tmx)0Q{4&=D!fvPH-REy%qR72(4I9*E@OZ2UgaZ1=9hyinF4PnV`J^4d)_TPnA}2d~7+D^H}690qWWRs(NkxMD6Wnq{q0 ztoc7H&xlV3W9;cJ$SrOu^N`}mHuuI901|Xlkdsk&D6qojg66Yq&C<`60Jc|0X`(RV=mgeyIm9{6J znR`!cdq1kNnt`%_ZRrn&gZ44QBLtjlT^>G6GLUVyN^uDGi5di$=8qJiQDLiz#Ww~A ztb`uj15pdc%9oFNC5dDPw=_1kp&0ePhixoc%Ld2`qC-x}3~~L~iE+b?nuVfp>oytdhEui2p6Y z3q;NQqgyqPesAVTz*ui)vQojbTNebu?+tkPLos7YX!VfT)RG%`g%|H&{U!||9~=vM zkXP-S-IoSZ4;3^7@Q0Bt()lM)^%ikStzCG{Q)?15bEHG6Zh1-r{UO>-!MEW8_*zBU z@L4yf7yS*dP`&)2K#t874&AOBxebAaD+SI)`LM`NOZ0$Vc!^7m)5*!k?!&5kr$r-V z4=AE*b%L zHdM}pkU5=&Go;6=Ti=|tdUTNmlH$8*$|&0y2-5V}W|WQ9*Nr-Ya~TbBkQ>eZBllwn zG!^MMC1iws+y&W}w9Cszxuw}X!tLD(l6wAVZ({HQpYt(+7ZGjQ0bf4mS>-ML!`2fr#<%P zgAHh@9fcr(38E?_ie^C3ho;{{9X_vG;^bgl%hMB|wwQZ|Ow8SQ(`)y`o=jiYtlf`j zW;_l52rjK8+#AQwFUdiC)hZGNGR)P?+>LKnwZg}|&#Oo2QNiWp8wF(iSS#N+kr$MA z#7q9!dwj8&t$Um0$1brq+OmrbOG*3n74@?}mANxC&kHy@=!A()<90&)DU0te+C7i70P!vKpUvUlftIcn2YaHM6XquB?X%J~ z#sn3e*Yk=tEPULG2kgDlWcj)^3li{!vz}hb++})tl(dKC5@ zX+A>3?)ZC0Mx_00%1m(b5CJRW9wk*jcIg0oqBwi(%dqcpDrHQg)|u4W$TByNDx_6< zq*%Q6xTy4+WmdNb*#5msQ!#;arR2={GcsS2b@A_%!#@SR_`*lGeLH^dK_u`zh_GG6 zYxpT}mTq2Dw=eGwm2-LQyWCLekMhrU^~}BBo$S8+qY?CJsT@NAsg?oca3I3TKt)z3ciZAtSGrb~;6ml0!x#CSD~F#gEo*h$Ivms7v-CPD zhW~gScY|J}jY8-ZW^2v}v$nF-Mt)Ih+nuYysqloBW|%s%Ff_R8#JNHpA%{k@sZp&L zK@;>X5u^RipsSqpDgb(SV-YC&Eg`dHg-iY06NLu>-@mSN9X&Sj$?k&7qYuhl+A-sg z?iwrQ9Gw+Vcy6hG3r)2V_#ww9d+W=y%nB%_{-xCZ&2Tgvy7nP|LoP-g1WUbJ*Zy<% z&cmE57UlbtKT5lrg@+6T0Vn^}xm$mJx4fYaM34$^(bmt5_UWHSmjT;r=?*tu4w-|2!GM+?Vm zPI@`q4}G^V((j_Z>gN**RL>@rb3QP>&QQ~N)qCS=)@==*7ec2s&iR}hlfJreB`9E} zK>{2*r8N@Tpe}3ySq{dAnGCImi%UyxL~b;$IA{e#U*gVFC<*>DY3c-R3yj$x^!>1U zXoHZIRt8q=sLVmOBf8F{rAJ+tBgew>-Li|Pi|X$3Wf#4+p(PKzO8P?aS~=`AHPmnP zOh^7b<(i6aY>VlU-RZ77VpcE-V&6Xm@fUKa9g(2^qHuM451jCeKQ!ZXdpE6#v+O*% zUlyyNY4_EAL~`uw1E@kFs6!-i1d zGM`{}m7%bIKZ>Ph;eClap zpnd!^@12E>H=0VJbbzwkbtw8eA=|gP0blAET4<% zj=2bu%d=~lwVrD13+zyuY;9HmzSOt5QT~#%6Tj775zT&fb<5q|-;W#(^=&N#U=5n; z?+nIjxoICJKV;phfhFz zJb&QoniTtEj~6FdK5L2Q!19aDMIx(xrYuHySmByj7ztGU3Vh&z2rEofTJhMBQjooR#){R}cs@FA)}?Qe#hNbLRU@SsCY5yXa}i1{d~v z$VnDgZNjjQwk8b5Y;%RBt<_TRR^Ms)^w$`TCa_P`zgvj^&w+J^7P7Y+W%;+c+<%gs z#&KK42j$ld4y$5l{5BQ)-dmXTh0H69moPq*N9l9-L?0BGY#4s6HS3&&HJ4858w$y; zt*H-@}S zLpd#a&Yfd3vvG2k?aphyFKs&lZ1Feb-d-rYdSv%2yPnY73pZ-JLK@U(7 z>cyF?MLS=bZ}s-AozCIv7W(f@U;jye|Nl<^54FIb$gx@be=6tyLoNP){h#@T9M6A3 zPDWyVNv>b_Z&7_Dk;el3Zp|}*Kk8>Xmrrv>ujrbLS>@VThtUkXZov@hr=by9@pdKR zP;P?DN&TU7Df?|6Ye{9&(h8GAb{wEmsMOWHbDS<{hA8YELkhJ8kun!amwumrGj>nP zeK(=BOO{^GG2r}*7`TP1A8uo+N|ZBRRz9s%Q&(S2;H8$@O{JLgFWetfSIVMz?G)|1 z-`U*NnmuBan@*ysVa6YxT}V%!2^N8Q>*1;-5Nw^c_nk9FT)un>+yMh96;#%!lg)U% zROV7)WPIVzLz5Mx-X#39a}I~pCXey^Crzu{@;yF{-ii7^c-aKkNRFh=Z&q~ZTtXZc z$*u^)k>#N%c{#LBHB^n7&K9=-Whe;W6T~?{9qJ_iNjk~@^-%rS4e-}o&Mx?7!5Ph3 zR{&0CCwO^SJpPR8TpT|JuyYD?L8r)kN}w^@!ifna94Ts8dxb~$mU}+&b+~L=(WcMw zyLO6p-0E9g-YtA;c^`Fti@YwLnq1DM64A-6C6GsCNT8Y%BSCZ!G6h!61jM13)irV( zo>TC>#a>&L=9?$9BxU%XH<+(}SpDhTqF`jDR4;U7{loj5rCo%_oVERlXDmM{HXU`_ug%76|TLz>zpSe z;_~EjjXvQ&liS*bZnM6gFt!=NC0$M#DVY1`@6hjD+)rw^r>DZVid z@IG}bG{SD2!|zM@(VDD}y!ib>XG^}y>*oZ>)T!^&H+8V|l02a59Dm$RAZ>KxsHkD} zi)LGbvk^G(#a&6!^Yu4-k0&tf3=JixGFJzr1`&)}obV-BNU}UxoZC2h*p- zO7E1(>~VK!Z07jFak*Fn?zzaXS?T_u`?t(h{45%WOeBx{S7(#Ypbq!!=QFQ-H!f)- z1~(}%*wfx!gOOJ=Y&dsfx$z}>zZv5iQ^YZm@AW{wXJI`@dU%S?6sk!bz^n8Kt9WuH zze)4AlM?5ZkO>{7&3&06oa`XPE2p11n_(xhDf4^otLU}5Ie-5hb)4jsMdK*dH-U*c ztqyKEOg7-EFQ|#bDgD>~iocKpHMGQ01*|1mZZwe+wk!C+Wp191t)~MyYLBalXR>qw zpmQG6`OypFK$3EglWF3<-f>b!Bub|2dR3PcZ0KWeXQ_|sX)75%tD;K?-^7>;&DI9j zgk|0fJVW$7sG7XZc|yeKrc8$ashy20c7E=!T+ZJtsFxYiI;Ve7YBfK2!us2_Zo9?D z0@p8}-#Wn0!67-6Y*6a46uzgnyKVf4`g^I1X871Qw~kE{b~WCV$UNTcQo;T{HCOdv z?8epg>>s~x*N+`Osu8@Q{MKLKt^Epb-E$!UIvR+!Ei&1z8J`P!E0T7F2oDSTe)Qn? zNl}TnLvNoT!n-7X-1r)Cdr$J7$NheCF1KfZ6{_Uh(I3h|9Pg;dycrT_-tMwDKfs5L`pZm+8DfAcZR1M5;z5X-a2e>8nrg$Olv3R zV!ahoj+0FleAo&n$&hTVT3dh~o%`VfzeaTDPgmaWk{sZ5Y@r{n$&n-#yu?)zwRrnO zlmegm%$<9ULY^CUDr>Ftj9XS&0?ibzjuDRDv#cHc)P{m zlFD)61oMxt5>M3{32gXCUJZ-~Ho?vnALttalS&d&lWrQ1UKTOWKsJhbI_ZrB`Q zTmJQ$&MEVDxp}vw{=Ju0#tE&*wpRk@T*fM-xHF3^@~RPqlfr&PgPmEuX1A~H%Tse+ z_n-0gpZ+ehPr>4`s7TE7$3+3piVU(VC7gfzMkRjVvAFi;+hGm|l)-#SU#{n3t+$~jD`pX z2fYvJhoWwBM4Ib1uKBhuP(YHi$?7ti0+Qz>&mY>XcYF(OBKp~M*0vN0 zxvlTjctIX3rVJlLNw96w<0m^misb2?zAlBCemP1LvkqFq5uD;KRqYQ4U*DN*IhAG>a-PTFT2 z@hEQ;V_v(l$Z)2~Q>he(XuNB_1!(i|-HMFx1H4P|OFy^ylbl^nEIn)*n{HF9fu6fx zEoiVhHYf>#9IbG8KYSK`5*7bvlj@Xh{mbo7*aGJ8wpg2+1n0 zNYWjTr!_Ob1RhVGQwfpA`?P=uQNR$Vpx{9*xK86~MFRv3#848mQTCd<2>=C+$1s*P zv`ihgFjuDW~Zfvlay3)H=7fZNuO00_s!_m8lDQD{vMe7WHh4UqG*3> z@AMDOhg$ud+Da74`PJ&WBbiG6jVYD#ihPGMm0S%3m#f#gzQeM^R6Db1Rwr7n( zOsk6^0aSHtesr~Wz5fkUd5voSCevJVc(x|kL_q~-4-GMphu(6u;h*s)v)V|xQa&R_ z;N88qXHapr1B?3k^W4ufT#rxi_FUnVjPufUuK6wHz?{e4D{rkt>w4Y{@#CPJV|n!T z7o9zN{3yGkcbh$l2VoZDs8hLH^_NiJJAV**^mX|M>&?Q%cYb?ZbBiuZ!a-0W*pF() zG7c^zfjZI+Qe%;dnPJUS5CH~dmPds^7z2z(9!{SjO4jJr;qchT*pIQXiKm@6xi~S$ zqiK-^xmJNl1FX_#8hw?gua+~kI@bz*4wSDhKM297`wb0l4%|*pKMf)+bKe{68XZ;` zAAD6#G{pzkBs-;RSY-Hyn`CFjx{;gVV|aJfjqTR=MV*?>?ahKqX(=)fog$Y%a0`OO z0jQunpaY5@rjDg{Rh;3vvB>9i=CviSDwU~~H{p5vOrNzzS*yg!hHdAL{!dZ@F-utq z_x0~;CQ*`JOS9boNr$idpfxNvGY_Gw+^bWJfA+D|DG0xBRn(($C%8T{)~BKTay!$& zG*sZ$&NTY$_>&(R)TqF$np0jgs9EHbubU~zM`w34&DnPfP}dGMpNm3!@} znqMb(71?(_iTNpoWB9TDq3i9xn#}#`nBAN4=mNEwKsUGcNPb#$WMuMMBzTA*eMs-69|p#&Kz#;D6(k|yWM8(1 z(h&WYMI6ca!=%&9WNVxF2q~D`)+pU|PgixoWTY{}%eLoi2vHFpeEr^2{gWbMZ)9rI zya8^eR)Mv(4YVL!2(S=AI;SgM3$<{y5Pq*Fo@v*AIGwVMA1HJXG{rV%o}q) zpq8s}!sP_qY_bR13+%nbnNCQswI9xe@d)5Q1*cGku zr9MbFE;+}_J~^Psk{rCqgz^yuG53n{`GttARD5!>HfuqezqecCM#+_qbA>5C&ON&+ zSwoXf>A9lKc}|}?!`(c! z!olZ!#!PFYxNy}qIz3WcgQCsm4$R$Gj)P?hPcF3>IWDyBiWQeiy!`s}cDg@N^DLel zV!uS-@9Zl2yH%opBDeF_&~ESb@l}Jy#a<}n9ae~goj7g8`pXkc20+R9<_kdP%@5KhNZsw`SVXH8dMayN^jOKNfuXCaCj16*X#*8O9`MU4-0 zFL;Tpy-aL>Dthbgo3SvCfYU~A2p{)XS6n z-_JbhbB$Y1Zs_^)GVp@PcHgos@i>s#xVu~Q0Xs&KRy&?K@MQO=X~3pwz)!3Fo%Uo# z#z1StXug6(3oN#MXL*lsoXht2fda74T<0G)ppl&3?Jrk~htMd5nTj*1eYU)RwSIjQ!x#)Z#uUHDb*Pz;XK$ZE*@*f)P%d&w1U+bEIwWHysS(4gF{n70-QI7&|rAP zed^I$#g>r%gG)Q#dTxrDl-@Xyb>tD;azU)U^mR~)qNR*#+cq%d@W4F&4DTSSR7W)| zF6H6v_{04Z;dssM6W9^`6O=<@I>w4eVg#Lwoqqf`g6{uS2lX$x_6s=x_JeX47DHn{ zksDVHfN&D3TDp(_c>XV)5p^BZS7iY?p1dSY4JqTX`XX}7(i z1*vnK%QdzkkzR~kP&fXe4@m{Yb$r&SPZ2U8dA_}vb%itu<{GG8q8QwW!O6lN^Cv%# zGynf9|sKp#I5)!!o7O?WZJuzB=OaA%Dhu z6(GhhSVtpPWAtkSkfHIh^3h@F5U_PfUxM#UdcfBH@Ihz*t0KtaS&YD(uOiWpoon9D z2+37B{yed>fppbOEQ>|O(mjFgO$J~3|t+kEY~## z2Z(Cui6D8!9L88{5Zu{3#Ui!*8+hPGuR$}LWMSgRWWy$4F8 z*5*Yr8Y?STUubvEXU@pP|Cq};RKf~IHkI~=wchf)Cj~1)!i=Ud3cC+rcB|eFJuLCQ@?%60^$@`k*exC^E-~QN7 zd}Y6h6#0+cnN@M|+;V&U%3c-G=0jq!E9Ey_nVWH#bu#9eI|gTk%}pp51XbuYVHzbx z8T^-t2`hRQmkt@;`vece!c6(A zLG+Y3{V65EA&NEB823c>fq^6q@=BLSNp~^UyZlQTtQ&vK_K3`^+cm`jdlcnkxT|ct zu{fBA?}(MRhwOneVAs)IYgi(iXIAhgEP z)@so#T2^Kn0vJkhMGOou%kzB!;IWW2ThiQU?E|Y~ew42?=@9MOLN>j6?t4Y0*W^Hm zW@%*k2FqVD=4U5tsqV@~FOOA(=jZzpuIJ`g?GD={jwh=x)Z{3;Jd_WK&=OLQ_tsUs zb9eli$*vZv{zi5j%#s2ud zhz0--IGo8*bWzTZMDT7k#o9E6^T1{OHhFRg=Yo5^!Mt#gFa+I zqBEL%)IOv%ISpniq*#K%NYObliBTECS%v&|xE8bIJwm6sQ=X{{L#>q`)((ie%Fa2^!}$6HqE+D1L;=3_+4`sf`vH4< zP;@RJNR#iTk)1#JgcN!#@`r?<9o`FaU4q^g*hg|Sa8u5z9+cdx?;Goc)$5e~WbS;t z%ARn@{P%%S`I*VLPgF*Kh*g7NE z$Jt-ZpINLz+$y|5VXVLAa(roxC*2z%>49Cmn^5g)yz>K9?&E?>WR$_w4*3%x`(XvM zS@)9O0I^K*UiMaOI=UF6A`Eg%S;f{Oi#^zyKbez7C#vvU5iYNe9&*qaw3%}-%R_S_ z40_vJvVA~DUoBtJ73iJ!3Elc;sX@@d4>le35WjQ`@0TZbMLEu2X?f!0xn`HxCs#9- z-1}XO6FlS%9f#YTJB0QKloYjWgjZQNw;oW}7EPiCKfCiG`TFa%XqH`F6+0J8Pe&?DIpO@|KbFU$@Swb@}Fki?U_xYGwMB)n5;Z|yFca3n# z(ds@IZ^zD!H1?*;68`j%0YwP0U+ph}&N^ zSGowN91}D*XE|*Y+tip?Tqix!mIUVqBhst6fF)FE0F7!CilIr%m^A8C_!3MBDKv^t z#xs1X(NkFMK%lp!&nwefaRk5t!mNunT`Z3VmGhQo$qPC^bjYxpl0_}&ppLJO?VT3X zSyn(X1X-1~JvZiytd+w@hfyz9$AfdHFyjZ3y+?B}fq|oeOc@j)BylN>*E%Y)e(`wtVp(P`O3n~j7;V_ zR&Fe4miXX8s8yHPi>oT?inE){T?ymy0>_Nj?Ap!T_>4B567DB^E;*Vf5&R15GupD& zjvH;ImW%O(FMVxFD7S={#fm3AQu$ieOwv)PH9&&B=Hkhp5f}tu^mZ=5w$?x#PFvOr-xS)si%|aH7_d3!&*9-Esi_Rg%zvRb^ylwQ_ewSyV~g4iCAu8T0@* za8t_%FZm(Rz7w5w)gNX_D=x?3RDDTsHPKdVEC5c!f~sjyyJWF0eQ*DQ}kGFPL^Xn#a5#%VH^CN$O^QMag zK-mQib&*D>AQUJP{uoEhRfGDI0kHV6@p`~G1||K_b7rDcN=oYB){g3hCX_6rcPcq{ z|K8={+_9%5_hWBA%?(O~cxH)Jgnf9vE}poOm2Td_GcO(Z`Z74e(rYDH=q5Eg*p;1*ecko?gz>#*T|u@K_+xXpZoEtLv@sFa$LSRvWsz%XQgcERUn-hdU7Mov`FBD% zL216Q)0yFb3;sID-z}Iftsp4yZbhTtJY`bECl#>&teu6Ep}G+pOAGdLB=)s5 zh=o5{saPpku8;0+>(*CL86B%X+p*jsY$oMj7GyGKYa&~*Ecij#EHKtxyx!5fe5}4I zMPKt;!I(R2d3H-qx-hWU1fN#0+|T|E!LlHK_QEuYik0$DSK{O1_nife0a6M4PuFdX zYje703VNhJHzkJg-!O-qK@abLWiAoI92Z84Do~mcmSq=4-`)|gR4O1nKz&Q2e(Mw# z%#FRc*VfK8Rrp~0is{2PislWbNkw%3NMzv`Pwa!#C+*itud}34U~gAT!+1-N+Gjm$ zudDZQ8%=xS z1@hg{05GiEO#vi;!8P{cvClx_8MNe??~q;Mr(uq@-L>am&rt?W?|uezWL6k{siJ)6 z2N^&Qe_MrbLskv77^j&3XyL;ze<}7l<)3RP%e58M$T^W}X*ow0m#m zobr4)86K#w+h`q$cIwy6B0s&}A)atS;DCb`_FYezX0pLFUlz3p3#Qsr^G6D+brm7C z=kCs+L*LESn+C-ej1=a#&mv9cO7;qP_~866j-6y=(gD5o>NAR5EgiXXMYOlaC^q4u z3aYzpkJP72m*W<`U3;BmCn;gKD|rE4Nm@#^~z zle;rsfxA0bxwaD<_S|V`>2&2rgT6Euop;Ozff^5+LK?soWg*Ha+L08n&1?(y+{{EL z@dcK770)hd&~-b_-q_Uje!OV!H*HZA{KW?#*kWQ;vwpLny%EP8_xd7yl~d9#k}VNS zZHaeujh=I%80JDUeE#i17v-|Q($B_e#T3OFOLI9+R+xOAsL(;VBwp&JzEM7~96Z0g zyL)PDx4S^GRoW%X#Kp0;<;aE=bkT7@mP4ty-6VUSIufyK-Q3pbLaE7e#$Hk^Y{gza z^|qz5-$_=1&%eP}skj4DIKNytckxpRrKQ2%*Vo0^5?kNe;do%T)xXDuG@!pTMB_WG3 zU>GQcW{$H5-EH4%8hkgV+3SV!v-tJHd-t08w+6jh(hT_!ugmS3erSs!>hUISUp{KG z_O#2~id5HTfO4sL;SZT>4YF$iFWN9+(@85K(GQ@|t8FF2&;px{b|jgeY9YAedxf@i zEx$QTI*3#p%n13}HyUe%g<0S58kuVz>ZE1jh>?I=Y?xXCKpYd} zORgu+07674Sj~W_2JBZAO@;DjV^~1oR(ov`oIPPjkngz;T|zx79lWBMeEB|X zw8@M2@@2Q|5b^TRa{mZUd<(!Hy{Z;g@4ONvfT3+?@ajRFy^610eqMz4J-}4ih+H z;1?R+xHyV6PAKZ}ZEOP#kbV!QI4OuVt2L+aSR41qJxHk-OF7?j*5Yk$P^h$3tT3j- zbS;ay`Lq`gaIDlfJ@ky9*$ff{dOfxuRc^nUU9!+&G~!=qxZYguq(2hKGyM-TLky_+{o9DOPn;kqY&kB7dN^iE)O zv5i8V_awW)e_XIjJb-o8&3%ob&E5$Vi`}}>hS_fE+Yi2kN;svSak%zqSZ;K=hD@nbQCATJ^jW_u>pp4wTpMl_!|$1wu>%^#Wl-cIhsqdX2uf$$~LzmgrOgZX`Dh$sHRE znf-p>-u@uGc56QgViw`?fHK})szx~8d1tC2QHhf|koo$~0ZZ-npuFJn8k{J>YTciw zk22B-I0Kp^$ZFb)p)dG~*fSbF`SNs8Sral$=MD;r!NUPg>rtc=9pwwOIFD#gIZ%dR zU^f%ngH3Z{j_Yq)P)>gr-~87D^nd=uU&!(9Oi}Kn_RX&T4LMN`dET&e)?a=(G@&Ux zz44d;p*WjRCpwx{)(D4?rEd)PJl2?!ABemnwIGD04){@I33J}q=*$$9O$7pHkPOE$ zhLobf>zo{^;vmylN{Wh%cn#n?1T{hc7MN;6!r-oCl5cUQv6O)u4IgP=eiWVMUNho) zFt089(bk5u=+n|m-%oCK9Jmzye0F{zT_%4dB;0o&Yz)I#XjH(IXy;7;3(}g($=JoM ztmW1V?FCQu3rJBSd-LL_17CGMQIDN#0KtG@`yC2-zRSB0kj-Ku6vpK7|?G zYW^~>Il((PFLM00)c!2g^CFc6?rPLSb*cP&M%zxEHbZ1h6P-yuBM(7x^ER)djq3p- zvs2MlEeyAi+D&Df@De06MsSW8Wj{!cQD<6vSdx5oCS;08H>N@Zv^j6A`uI_x}BkCVyLA(!U;m%tb%!R-Vemjrd2s*hXgN&C}Pt0q7Ohw_XuqbSs+5SP;Y^$ zR}kwQRcj5oDFoUYBaU()p{(Um5BTX5S%r0c8AGBytdL7qYB$*_rd@sKAYTgCrTT58 zv!7~|g2>${_Pt3Y58(F87)}xE2QeDek6<_rz<@Pc7gdS!y{_@pf4WWPWG5;`QRn5b z0IwRNXUV6|gy|qYl!A_`9-#8A-e(AcMQb>o#+(?y4K&D@n%C2Q$NT~oPYKa>uB zHDkuS-bkU>;y4L4Zf=;;YFa3dJ{W*lpnwi1FyJ_H%8u9@`Oa?UWvHrhv@nC%$kQfg z6aRK#^3Lzdf+qBm%dr%JNW*_K@O~|qa55L;28jC^!)dL-7gl9w zPdKsE(WF$^6sTMp2csyjl5h&r+j~9C2;KIsy2jR=tK7IN83Ke;$QE2Dp&%Sf7es=!$s8HW-zAbG_Sw%!a{?$vYTX%PnV;-N2C;sNMDR*sO!B1tXQnSzPpsW%#kaGhZY)H- zxJ#}Yi+natX&!gLv&i^N4k2hRhX9HfWC1dQ(W~V6ULJ_Z-Mgcib+tox=Q2Ot<2B|t z;`5G?);DC8XQDP9c}Em$a|{|DHUywL#gV1S6I2#4nAWVtDS#ly0q$92$q{J^8lUR=*4*y$pKYxbOC<}=G-bIB{F{VU*);vy{<0qUt?X~c(AZ~wMfD}uIOO;J z2C&0lzpMu|2oQ?|fjR+guKYoYQ6+|Q$qv_IRhgj zph`K68ugA6-Fx$y(`t(~c-Ga~`qN$MwPCoNFJHV)SDmN{AA#1tD`-Et<-Z ztg{}8n{x>2P{hZn%gzqMh@~f{)3TWkjJ0HYAJ_nf^%*iHmV9I2zO1zAi$OCwZXdI}!z3Z)ez)nc` zGF$4R?C8xf$=&ZAv;z+?A_^sha=JaFQE7j_eJ&2nhY$xQpkNTS6G0RPJ}e~D&6@$m z{jVLpuaw0djgKmueDFX&pDyO%Wp%6c->i50lej;Zp`&)HDN{v{#{O19Q!JTXoBF69 z`LA&mU_qchDjKG|MbgQB#A03nw97#2yDxm5!vsSv3{bd@VR{L3V-^TO>hH^PD8;Gl zWqrjAwMgq}T=$U%ZY&0boT`H4tHd3NRu3!~HTbH?A-uhG?ST&ou2B8R_%bK~;;o(m zNIRIVfXAhZlpgY>_!$1d%9H1>4n0!8i!ywnyZe6Z+2O9=Jzr=v+I45}hMY5frLh#; zG_xGA|6_Ng?0)C7kFh_GytZCUq5Zz~y{3-+dfx|SMNl!fzt4sfP&T*aX989O?R7My z_~}z!sQ<;>dq6d{b&LKxg+M}p&_gv8>0$x_1GXd-DM5N~3B9REQB;)BTR=JiLFrwj zhysezJ4jVgQM!OwP_PSsj^}*i-gn>k-TVG;jC5D>|(#(l_Q@L*%kP?x^5tBZjO5UA#@0fP*#;fBmvIj~eJn}XJ3<(9zW0RcQJ z+YK`#*9MPf<6uS01KI;ggzT+>k-jw0Sc9d8GwkisM633oB~s8Xn(&Pcst9dStMCx$XG5 zn*%{)YaRUe&w@w4TkBk^Ejl(LwK(;XnpypS>-GO@%Ku+~{Iz;GOEQAAx{m#&SNE;4 zN^+goq5p*(t_OUq=7c)xrwUw3MGcC@Ip9JKftX%6)B_PE1B>p3M$x(e62o;a$n%>n z9w}J&_LfTfusKBA?|Hi_hC?qS$VhGXTN zhkhk5CI7f2oFqya-aFnZrjTu1)7$+EI(*-K7Z#|?W9l2=D&@V#7%9RTA^o~M?OyxD z2j_-sXd5{h8BB=Q*csqLfNcli!Dps)nb1&9nXv5ew@iAc5G;B8;n=G1Cy5;O)Cevu zC}|R-wJ0_GiOly2pH-YX5qUj3o$ssbsgy3IGg>NKTFT+7Hdra7K_n4~B#;*QwbC^+ za+y$XIbOn89~nvY;J%7Sj{1;!ksy=}fCIaDROA}x)UUr3{i+wYis|(4a?X615U=?| z>!5AmuiamcX9Q3tCN{!K0`5h0oq~-1C<|KDUaXLrvM!KOuZBoCXttd7ZAV5RMTH8m zMhja?ax3abVNB#wgtS2*8kOvz>&HRCxh4j2n$Tk5d{C$uK39f8%2Y;{aUf*kCMR)5 zlvP@xVLfF`oPNGd{%;dX{a0xJMh>~$MjGY4ckv&locLR~(wXyG9jmv~`XS5~2ms+q zHjieDw84NO{@uaAh~!ic_gFiX-loeQE{Vc3$+&c>16Ne|UE4wk*Raapp8E(#rY6Os zZEWi{Q)ctob5%{V-|{|2*wLq7UVC2^U;9PJcHu49o>L*>h;qp)6eMU`*!zyA&ypi@ zLBD)=clF+Z590EoMk;x(qW#MOb8jYGa_sXRD_4iRqYNIx5X_}>FL3c6Od#BH8HZ;w zAoR?*i_f0vbmyh0yevB==ssF;k+4*;m#?$}*TQ;X6v~dRcG6bBE9@s?CQz&+JTXpO zW#+kMqLGpvCh~qbbPf)$h-LVwWK?71In>3ClpT}XlNh$5luyz|bBB;oS|`Ph4|j22 zr5B^e2C{_|eA)OjB}8pAB10%4Zf@9ibL}w|0&(ObmQNMcT-Q9stNx}Zy=m&i87m&H zm^rmSSFE>01QTkLF7M{QVaqZeQbK5Grtfm8oiHR?E0|PG|HgcK56WqpR1#`^J znq;CJjv5%)>6MfgyhZjQ-0w!D9c9s%C-K5~{?xc6vof z${hU2FcgU_2x)c)6og$Q3`Ih6sL7q3Bp0 zBn5TX;0GZWl`r&D^;i$M+!IPlMb;qenH6&%C_JjB@2-tL-e>l*ML5){;u@qW`{6J0Jl$r#ziL!dE<`!+I5f(0zyEeUfD2oH=0}QdswjI{Fn(@-T=A1_ zP0E~cpm3gkblmOq-8j{7Lgc;{E+rjF{JEX-w6m<&M{9`*+9CR3E4*<^IyXKZV3Ixa za!F{5oM;XRH!}%K(TJyXbW5>BAYmvFoWjO}Wh2}rnKHb<1Z=aYiJJ%hTLvuFh$NCy z=hd}&Ri|C6GQ8+Sfj)aWvq|Td4}1S!Iu(J$s3;Ogilg+4Ow+!N_TQFq1WQcnYdlf3 zV};tTI8hYWIL)*x$~|P4RU3JlU(`R2YLGkXPz^zZ7k?DJF)(U&LMpvs;QQ3a^+uH+ z&Sp*hLrU4lKKS{7+OFUiRX=~m4&KOWNPe-F8w&^l|EF9my5tTx-Mc+Rzt z9kFeq7AVGETK>ix^J4!A#vPnOG36^<)5fH;;}gI()gcSgHZkSv2(JT8NVuBO zbB?BLeco(hS9rEnGvDRJOT7-Y_Ev&*->eboD)kT49w`aL6sF~zDN6P@xqYfO<(`P> z+pCgy){WGJJqCp*C0<7N=r-8<%?!OQ+`O?bR$`;tLt1CT|7|XR+PAJ6zuxo)-0Rxm zF!lnbZy3SUKqYW8@KuNXW8*K*S+d*jKT`NTc4;TBYy~bmo(@Bh&pdhk!@)BQ{W^5? z{Iw?%-)QGsz7flRMw;{5B}3mN)>4H;!-^DqiUX*s%Cxk{P-zZNUZfTbPVS!F3p#KC zG>I^Wa5 zEQe7-7SMjcfTI{*2llo^&+3Y&uy5W4{u<13k-D&-tJFe4V+h!hK!@<_OmNU7kV$Qo}j6R_z=U*1ZxJEV0 zgWvCa%q0KOE7*0WwRCrSCb`k4bk~~ETl1_k>`m_}oAp~azIgc5_*Cy^H;P$JTc3H~ zD2DhK=~BOugKfVh4g2m@vHoStiQ?cq#%Cby|5!eNehW!X7mNFWHk~fTfTux}doJ1w zzUtO2N~?1+fe8k48Yr#Z?#UZBT;OLTvUM@k&&0UqgC*@FlyWmbJvno1JU1wob8R{7 zreHdQv?k1nSXWsQb{1SUX{pi0`adp1IyiHqi-oaqY9{cQ=MYuD6A8atqE%+6pJOLf5tL9P_lbb;;q(v^P|*x|Y+(!V%()YxLB3%wONMo0<@suUE1^ z`0%%fdn=GPUOb-4A$^mdGQ1P?diP1Rdvvi1pnd!1X#sP>Ya#VQ5paOPend%W9m$?3 zB%~on2IY6F~k zm={ES7Le0==EYC=`PxWFM?UNKzg9QGgbe)y1vPaVf_GNiZp}(JTx2&6m@Lpuj$bkN z^x5uug$Wl+2v~epI$H`I*xPE)Vq4Mkd+`66I{TM;?tlCbzmWqT}zQU z*eNfz3sohY(jHtexT=I{$^*<|B}sxfCan>Y+D_(!h+y~!YN$?ygf_X_h~vRs|pU%fdzO^$1b@@IbPMYAj!aTN}a-Y`5)Sh+`d;VrlZp^=j{`2o7B z)ORhZ9XG!N67*lU-Q044{&AC94Nje19h_tTWqzUjii**l1P@P7iODZIch7~DJ|Fkn z*yz*Qx!2ezb~L{~$a&n9V%i5O|K&7+3p|#Z5IzAW!fKl@Rf2M2Z0M)id%dUo?gVepv%@)a&&m88>yM0Yf5*lK4h_53tcxL{*K&yl_>N3$krA=irojfVSdWgB zUeq`!!eUwJHT%>|Mkx(Y2Zaj`OKylmPLRKv-{;VAE+NmG9#Rn2OLev|J949{hHeXcpp!-lR%(T$<$#p_Jr(N)w=1^=tn(Rf;Qu)Rp{!OYKLmftRw+&&pO zI*%2cPH(*#ApzDE>kq&|RiM>w?-#%RI-KdsTcs+M9(ys3zDUm^9PT_EYd*V-KUuF4 z&mV(-R5C9eyCSacb_ zT>7fFCiIH071B8^*tMZH1NYOlH0wWtSKra*bF7e#i0GE+#U810S=)Oxe^44ZPe3h`=yu5?Lg^n z?>hU@+k9fLVy67twfW3-j*1@8lyCYBvkzo541=oiTPSyDZYy8PVwS!#3t)*G#n=in zkKQ~L+*K)>hWIQyyO6|0Z?qWTppQ5 zjw2yZg>2dmWWMNlrp1vcd3clr+XXh`h3GIo33#+|x9o>`=VcJj@^MXry3`Hr0tza^@5H1a};5h1j*j_O!z8-Xn%U=|#Z2zltmjWJ0LGvc!WH zP$67{dqq1tzfv0?lArzJKmN;nch^NS5tEz7%xaR>Ug%edw+!2@Dysai7tFt<9AtZk zG$|$AyC-9Rmp<%MgCFHML!keqSS!nU07wE<>ZmV6xXPq^Ig#|t?5j|=ru_ZQJ9qV4 zH)YOV5}pK+L;Qs=eXo4->3%`dSy!#ftOC93+7_X{HD19hsgW&tDrNPXxe=lzJOyAD zr>3p@fv?mH7D^+NE37B;Xet6_81n$HiB02YB!XoxAu&(EgFdaPtjbRAN1G6#n?q5YGHD#d9y&I$ zV;Br8_D&XnNpi3iTJmEZI-RA71?HHjX(aeMo;Glu;}}*VkkX~@!pkctp`!{}s3<_` zF)4k0u?Cd9s9_f5FlJc=30O#%)xc#1 z8mZy6Tq@SGBhWV3qFxu>+u9kTLL#3c^NtY2MMZ6GJZY7f0`NebF+BXayCHfSI|LUs zF?EwZo6^j18x^OEnm(4Cx?)ZqA=XKem~oWMaGz?t8~ioQcp)3la4=vcjaKc$~Kc43GvG@R7g zG;`|f@Y0nuRd}4fV(**d}`BSmIdZ);?c6{PBaHQU$RvvDs5% zXO+rpb6n>Ur}>T0g&_^u?(mx^6y6^Jz<4-A=H?Q#3L-!?XeeTp{+#}Sf8vR5bn$nQ zhPs%Ek6*hwd0^CPei8vQUsxi63Yt#P#ipL@R~2yvEJeJC`-A$f8=>W(JRZ_8%sVeB zaBI1dWMDsr_DO&nnl3!FSrLc+sFA{?8v>EUszw$!tb3P~z#$Z`^+gF^yo>8WK3Fqa zTFLYsvFJ zN#1WM2mXv88C73wm;4JkF?YE5={FeSUs8@00MRSOo8UzOumt`iXIz8>drKvHqI>kL z?C#~72b`?(KEfgr=8`=pXO3g%=g2Dq-?v^b^;F}nugIRxP3d2tE*J1y#)-#xubz_3 zPUFKBqzcvyVA)c{VTnaoeYZK4tM0SUqoa|+65QGo-t`$nNp8`DF$wMb{vyOv5)mSx zVm6FqtyQI>fl-q|_pB~YRn^%8)`Q*8)gLw9JaEQ5=gi?$>52R+dgp6zR zfjSAnD_)YlS!=jqfTfxR#c5H|@z{$ObijSN!YNw&EGvCvVLxz2onpBjJB9y#5)=zmY@iwctOY zc&~r2VD-0R73qL*Hf{WI`R}McXs07QjWSt4pBr3SI)`(KT zt7XEkn(x*qf{Vj03N&D14tQbqs=Kt?jDU?>J>2c~!5B3LX}#6WKh<6CmB|7bi2?%2X6@M_YPo8l5vTEj^fp zcLlj89(kkH(`3;;4u$8(!F<-9y0@O3Rz6(@s_9j_S*OrrndK>{`Z(ogjc~VD_~(5T9rzlXXP%a0{_Z0Pi@vd`eES3%DHPm z{mgTp;a7EBMuiLs5$eHbp~n?CkKm(>bayaG1`RTqN#`nviufl@Q|<>N_uAFfh^L!p z%urezZ*_e;ET#8gQ6#bXy|xq5CXM~YqO{Y&#E8s|2Rsywx~W!rnW72f%XE*1D5%ea~tZ-UW8S z36H*W8vpUyKN?=0+57mFZo2t5OCL4UL6*@{rXlqt!mhX4UcURNq~lf0x;Zh;a#23<0^7f9R*$GqSIA}2EgJGY-q6F z2il386iIG{Q3S;<5X^F+Kz4-IAQ5(+VnNgB{tNzTlb=h~;ULAN6#n~aH7e!-4!o0fNHj)T2 zZha1#3^A<@OaO(GEZPwwMBxOXdwsP)Af%g-0>?1w3|?V%$|o=<71`BOz+t!Y2EKCLjKxRYMs0vt?ny9g<_$s2*y%Zc?=Fd#j+tuIaB>8O;)Gj zU1yaa$jusFcP52!5bH%Gf+1{38Nh7pY_g((VWrxAWyKU~T>lgEq|lx)`{jW?r3!;h zmxvjrQqJYP!?|v0C@Py%lx%X!DZ&|K4fdyp^8J(!%?V;iB(d1GXqXGy{p@>5g3Yh( zcBggDG@d7%`9tTpaX#`Z=vqbb^il{Y zxws9au19CDfSE&?WPB%JlNQl!8F9o}$C?tz0T)1FQ`1EtuzY}3OO6iipyDLJ6>x6> zDRz%6vHqRQJC9ozy9B@N{jV~TJq*Q8*>AO==tU7dw!8=V&@XHSMP=_i@7*;aVqGh0 z{32q~PRE2j{A!}5eE%SPH@oLxS4vB(;U;{CP6Pl_+*W-#Xsk2KZJ@+uYs#(Qq*p-> zL3ETGh%o`nh(XFw5oIjUl6Jxv8w)=Y2dDT)672CdO0Hy5YJZ=yHF}Qe4f%jFb2BwH zX}3>D$43_tJ?H7#(aSh5rQY_e1yNOD3=^HAB&$y{5lT&f1?i)ox_}iyu_KjNjaca5 z87yHxABS6-ihLd#t-K|)M*?KGwx`_t(~avF+w6x5U$*+xO0vgrN7Gpf6=6;MX_^oo zzH*moFOz9FJwgTtF72QL1sGHTk_ZBa+eq%z+@Dk{RY&s(c|F;@sN7e&Ot(Q1CY=ZF zgv5-Ts?)6dW88M{sXp90?|g4t`x}{fzcVxe7{c)J72iGL_M}`p0PJgntBd`G+#fAT zAjFT70A|m(V2{Ba_5!-{u|6O^q>VW^R6$RVJD5|!redNzZ$uxrFtl#TA{@zE@z@mH z)yA1Ubty)!Yk!N_C6xe|5hVwGr{svTb8n95E5Gk|yQ$<3?u_-uqJ3oLpR4r*cA*w8 zY{s$F_IlA0<1Q9VZN5fiW@)574RDbq|LjQhQh3Y!K`4*c_FuLgF<#Vew@0$`%?|o~ z2%uHYJex`rvOJRXtFYjqa^BrMvhAb2k^X|P-aGGpdizBe#v57YdW76{p|9((jut6_ zSJG?|80cc7YeAslCfZ$CR6EFo3_|C^=p+b?&dbsMNg0YnL=Vu)T4r9k05FGwzR|I4q^TYe4p%J=7ueyjT<=<)9`SsGCt^Eaua`jj=V&O=p45I$-HIHAgJdb8- zzUf=EjO9fksH9I|VH|43Qd&&D#;wIWNx$zgjoEPj%&&ojNmjjMc_S0vgQl6-xWg5z$jL`=RwS0DE?daD#%u52luf;p-t za4lHZW2H)I#!qpn$^GiY+G#8zpP(S1$L7$a#3QJjb`IY`<Kg z=N;^IR`Poka6(%$%(2^K?o1K)J1;ui1f=<+l{Xd=62bM08x95p-o0~r2lJwP7J0>a zp@2L>Gxsr)@CbZOys+<6b)*4F6B9$KS|tH5HH^ zMdrA*TT@w?dxg`sj=vikc0?%u-v1YdO#0!bQix~S!jWw{7BKj+?h$|o)h87Q3a2P> z;!p)0a|@RT6qDa z)cLH4{V_UUR3|z81GEeE%nb1<1KI!T4)|k?$4<(A?N%uLDJxI^Qgu#0OP-~rt zuRA+yWffD3?l&U8zqK0<{P>M`?N@Nv!}n#!8@FFqI$g>io!_ReTcw}m{Y;H1)enSz z5qEnKHuARqd3D>?otM9o&l`6!m?IT|4|C1h4$Q%zS7olaP$RJ~3mAi5i~B`6G^4R2 z=qDYEXE6*(Srq`}tMFFM)J;91srN=$eq)SA)#It9a z?`+KMet*2HywmV@zxUC$#bIn=Mw>-S^Gn~-^{l?qL-)Q8ZuD#zQaw-II%aCEb7Q0# z^}^D?v~Yg0j=q{w==eNy=RA>dw9L5dw$A-afeVH|21hb zuJoP(`d;SKEg$8HURy0|xuLiJin~9N+YTc=f-pntZ0Ld}dx<2r!K^A=fm$7zt+VZ@ zqzhPoX8&xYXgdc|k-cn~^QgMlk%5Iq3@-&w!s$cVxNsNCd!^&uRy6#cebjBMlf=ty$W?nz`p*fM9EGaGR52cw! zKD#((-5;^o2!iazR`xn{E&4zFXjSJ_X|1AogZ6;^O1;6+$%Kg_1xA4eU%AgY6=6SS z^yaCb7fSEO{7SW{Ca0_>6j$=C41XNFvGL`wp1pgyYUK~`&8+Ja`=&A#&5nofZ6RS* z8mRyASgFrh!IkvaCxVH_>rajI#|H|YY&yJ4rpSC8^;o)?V#WI{Jx9+q&G?@2$9-dc zp6-|SuN>%hYoBuEq)SH))BK<^ga{#6L`XfUm5&PduGXUS6(*UkU?s0HK6q#i6q@x8 zhvsx`oL8?ePAWpsuCK1V?MD9^bTv(7#K>$GJvrErRidIDt!{VA6xo;KF_rKgz5_0OvxpsfrQNyRJrZ;9#!BsTbbatr>5nD9Gj_lyN zmntCRan|%DpNyoO`M6)Fd3;t0 zN!?*M9EjjhvH=;+W(>JN$sTWuAGs{v=xK-3u95KTKrH^kb>Qk z`i(!vc;^dfBNK1_Ps_?Q^ud3=mK5=?g#H+HNdBfvS&Sl6cp^Gks9-e{DJv-660>?c4 zGv*Fe_uxe>53z+DYL0q-ZxK#N;Pz;t2{(b=B0(|jFc+k7TY&cxC|9z)a0@+X;Wa|D_lG1fpo4CTV(9r%2pF`S2J%3kit%FGSYd zO4&5zhyYyV^b_q~?}Y8{#$tDiGM?WeRot1si&zq5f8Bi^c=-NahoJA+jtzM^qt@c6 zyxn+K%64^N#)}v37J9eaJ?pm5_dM`TlPhsb5GlKRzw}5Dan%^6BgWsMICsz zo_a?0g*1-;pz2r=J}*v#2jb49>cwqY++{?7`3DpxN2Af~uo#Si&6fHM&3mICToC=< zjAeZJ}C)-k8|1sgrtrT8xLfBl}st{(GjbAYFPu+@8qKSM6sdrFDg zA<}=TRI#i3T|}wwUDdi9;TPk`LpTPmH%WVj>@B=;X6XCn93A0tTQ85Qs#59$RqMNo zliz}}@8X5ty|tIRsiq-v@pg^#PDWJlS4Y_vFGb7C()l?@D`)OjQ=-Dwp6=U~xB23i z(DQIY*Xrez+xczVjH@p=_dHw>Brc|A21sYrb74D!=tz(a{=3|AIJu!PPpo%AGN&JW znm%63Ul#oCT3GAZ&2LK-n6U%cLQ1w#0hyGca!6&htCRc=61(_JJqIUL;#hvd>Y{Cp z%8_z;KVvX2gx_F$CB=_%+sn}IR7Z-gpsK9T!Si9;$L()i7v7i+y>ROrGhaYZ{KR|V z%ulxzFEgdI7`)u@q^0u;GtCDwGiDoOUW;HXip$+9zBltnhu&2Ww0-sPqRkU2)Yi!l z#=GCW9z$H0Rn)wL8fRb6P%q`0f2qu9(c~^^_&K>{wz@wnI5W#6dTTKBc*CaV`*k;t z%E=m)I`f8yl;p_UwfzjQmmWAp=uQ^GgC(_uAk&X^e0HY`q+=rp-TBsPm zNFZE)zE2k=N-gT953E=D4&*l7sfHe|P-!%2Qsx=cg9D?B4i^my6rP#zG7y`)&~6qB0W=E3|p;se$sHGcq?npbMQ3mgipx0SdqKm)VhDGU0!eoBjM7fch1^O zrPlL}o`B`@gIc3^zFL?s4{|8fJyp*CC~;G_i&_PL*IaVzNyO&PyL@GHwRA^?;D*OH z*q=2t?MMFzEt9WIIsG6(X1EORVsaoBJHhn6Xn})CF&IiJHhR4*lVT$r2TYFG|6F2? zl**zQP{C52vDiYnfwE8X+{6Ly@(b4tVNr59kNbY^70(4ejmu&&&8~N?wz56yFXBip zphZ2`qPaw~a(~q)GWz@5JG1$Rgd78^r+&S9ebHPYVofGsPXlBw+wHok3<*g3OY0uj zkiLw5zBT3iMsx7fV;hh{%%{_*&hF~!h8%H=6HS^9b@1X8PwaR3;KoXF$)EqW2J?P- zZtJyo_pz4FG6(HZi9(?tEytqX7nZ%}4L#ibN=ti-9OOFug3fS*diAdKb23gN4oH^k zs9pdm9=-o2PxWrJqr-wg_XYE)TB#$6Ly~7NWjPzp)yL8=`N=+j^1XcIAIAH?1xWrx zj=z;O2zfEq?oc2Y_lGT~u~%&q=nBfBi%y{c5KfCl^)l92eQ=+YBB&3W^LpXCIOqnT8!IRX-TzNnVQ11>fN?(OjU6xy0z& zAViLGICCCTGU_#|?`Th@cIxdsWFaz5Vc2HUQs{xmD-@v*XXo@{cQj|$&aIs{8V%d| z_NwWkrFpvLLW@~niFszhS}XjVU7LrCQ2L`DM>&oY=*6ULIf=@kTAyBSd(#(+UD$2! z;N0wf3lxBy7X93YwLZ4XANK75kD1mL#fSGrK4i?axAnjI))`UH!m_jb26Jn*!YJBT zcKLKdbUL-=$osFvmi>4SlH-r(Q|gK=B$v7!dtO@5nNAU*cV8}bSYGH4;iHv}txVPW z2i{gKqs?cWclC}-Z!eNaYxe-bneF&9IBGNMCr--XFeRl5f0SC-Qe_;giAK{cqa*y9nc=X1p{-)?-($4QI$p7ryI%oo3OkWA9&JLJ;Ff5yzv3ADeve$0K$5 zYGhNQjjeWw@$-{9*lY=YHZ{w}7?0TNaOYl^R|M%*rxvCVt|S zI_R#~zH;+|Ww60SVK&)Rg#J89^eB65>Bk(y?!C4_!;_9BHgiG}q66pQitv($>h zl%gWPd6KC~oqu6nJ#|rs+!JvE5iO+1ib!M^;1pI6IFLrL5KXJ|f7;?QQ0&q<(5Rc3 znC_M&A}BqQtFEk}?mf{n&=}2;n8;!z!p>)utH9^LB$&+nd)fCJIe?{?WGHrt2sr3( zbrv82+oppWEwg_p-rvos_Z)Mgo#-(Nr|HukucTq1+ot`tKzoN5^$M8U&W&XQEj*QR z)ik8n?Pm&u3bEcyI4FmXfkj|4_*E8Ji~02;5|~!KJ@r$)K{szKf$F2Oq#4`CmXTl) zB+uQPH!Kc`$j%8Ns)Z!-{Nu^nj%9Y))i_)>-!GdoTX)|hZ{cWx#h`*`fPbMwQ> z_C7{$ssFF?91Ux~3&AIxnHdJoSuVs>i@9fuUH7wE)ZOK8&DE%^yHdm zene6J?$Q*`*7@x!Veiwl6MUrENoi;r#-p;0N}sj_!Bu8kKy>cGsM07|5-V0%b{@j-+6-ZsS?Nz0P^rN zJ_rLjnMR9=9`&f{wfB=i;)#pK2M;{kQK8*F$|;3S-HJ!3ReJ#r(|}o5EwYaZq{WH) zdr;-eLOjm{S*aTOvYV$X!15h(>}Ad}Y->flkgm};KJH+N;x2f-q#jGK=Ui)isqjc+ zQ|X0^D|70h@8)Ye2ru97{+!Y;xU*5cYw_jv;_=;c${)`;^Y|b*^Mg`fo8B92W8PA< z4Y>5f;QhT*r4K^Oq_}>MDSuShA0x}-*A4*3RXJ~Jmet}3A5}ZPskHG)CQ;sqQyBb= zAt;3dIoPu(tR2Z3ozC8YsYs@cFed>e)Du za-vLzS4aurLYMo%>?E0@K>B)}Km`H;7y@)GB@Ru)BFLcd`F4B)7OQRJRsxG!K_H^( zgHvzp?QSMqJht;t*#f((A}k+veD4u|A79!?XQW$R21=-}Ka7`5HCnF_$YWxq*kR!C z4$Gg^F&iRZ6LC!FqH|xzATt;Zp^WNt%K3O;r~BvRS(s(<(R9nOum__<=k|ww5czxd zrTz`@Z{(2M*<{K!=6J(ju3&KqxbVsM+A;?hLjb@dK2`78kr5+YPX9!l7D1fx z&J?#AvR2g1C`Zs=6brX|u}@9U=^D!}B=_EzK=CT@u@MkTgVzaqF_ywK!#o1yFpaT) zr>rrt;4#(B2ATw8sQ1P2vJ-I9orMtyd^7)rF3Pvr&L>xnss<`m-Wv|vV`b&g@{K=c z&qEdewh_l&fd4pz4)jY!R#_?kr=zEXj9SNd6Vu>bsYhycH&b6JCm+~ zb~-35xgc~>gXscFj)I*;(P9c&J@ShD@4}i80n#yOFn#I{8w(!<47uZzhf3#w=8#&F zqJ-9Rb@LqSCy9-bN99q!6A}tr@ z{(+o4E1z*7OZz{N0|QSpT~wwYYjnt}nmkusQ^d_F;s}o10F|B0$(_t6z=`AzzDcaa zSo9v0nF=Y{D)Ss5N^18agT{{xU80nx>F)cuVj~z8wZB)m39UIn-N&vnv7e7@IdI-Y zLZw9Lz%}QKY2s%-J-G+ z>TG$M{=SdMf2#mfdV4xRFIm<@wHeA_j4{^_TefX)MS*tbWy4mN> z8(EX4>I>6iS)Vk%y?$_%dwW)-;X_-7{v)Y3V^4%ylM6DT3KMI(xeZioYtZ09(;BBZ zwumx#KDe=Ioo?YytM_~cv)X@s%zX1%%#39FVdIZCj(^22BnjFH1a&fXQANt8F~TzLTC{(1UwobnIUKcB~x$ z@BmlbbOVdrHeX&Os zXs5rw2z&PIk+&&~^Vi|4zcTv=_}kK7WIVe%*%ViL)F3rcsqmZQr|naZPwL7s)02;s zKJiSv4Gv0E)(m6^T~`k}6?1Ksd&#GEuVj@7@mcOV<9ayY@wG!SxmvAt>s|{6(kc}J z9!^)~1Yv%GFS`yUB5c07oo@j*Hmr(eI2bCqj~t#T2-dLC`dOy;k$DcacE2fct@uGg zXx&&6FmKm&G;gbA(xtkF=Z z)3!z&$7>puI@|##K5hnx4G{v+m;|;7&S#=ScgBj5q>SQ-9|trwN~i#v*Mh9%ZZ?^B z7I;(9oH${PtiD?qpy-{TS!|=r=*4+^r#!UQl)tl8A2ESSkk0YtUu>`^nEDJWb5R-m zj|jcj)FjpUY*o5d4~_?#;<4X?kD>tZn8bndY@8(VM2X9WB^8%A)f$whUa$MT;kz`} zBWHleF+%dNBjt5)5W%m*%+LwVukb9x$R1Qse%MSI%-^^bcr8&`f9iGi%PWsT%a^6O zWXJ$ebi&@k$n#R@uJPIXFC2G&2)NRrs89gJxl$3hoB!%fW0R-Tl)Q%q24Jb71F?A0 zNPpyFjQj!G0^507g6;G4+}$4?$_U-S02-*ZVO>yq#3_O&q4R*qv*N*LXq(Dv&iVg)SksS$XQt75{)hBb=>vVrY&-R=v<4<@HP#kj@Q<4-fvi%>k3VtI8*oY}*Csd(j7*7P!{1FM;hZ#d^qK z31DNpmjsbCJ0U1mY1-mF+%>B!;P7p=;e)jsE5%Ce#`WyM6`uh%$fnaQ^+LB3a)v7G z6}S>oxxyiBK`dk~rM`#YC$KM$r@v0W}XO;(FZuT=hUnoLfLS}n7 zOQd5zW3Ij#IrdDa7ramuaJGmuM;LV5-PkQP@zLJ9J~QlBLYBP65Pzk6 zWueE~?&<#OUq$;lEG(_6q3=F;&_U3vV>!fy&hRpx0S0)|h_5=F$5c&F%Q1-OM4GOI zWcEzvpvQU-hUIhVST?OI@jitNGXlS5F+0erpIXKpFn&AaY@LsJS(SAJ;2CC;e-uw!LOJkq`*o>; zDQ%;z_R1&nKb%m$sU8X&?0y=P%iC&@Ye7{D!3I8r9a-=V;)BP~u_7w6>_ejQbgLyyhr zrgI{Y;A&Vl@-!azLwm1hwsvKtB}OtQokQ1`oeR;fWjf}cQc$XVNY;3W3$s-m>Svk8frJ4k*X$r$7j za};bCS}%J)r0IhrbgOr}XoMNE4^LEY~1-F_~e#4g|QfpQ3ZxJRPlDmvRS!b6#k~C_2Z%j8SHr%4d z#y<&OFn^@_%S(6fEl8*)ebFy#nx4V)~8DmlTb@GmZE?Dim5BYSV6Mo7{h#~ zb=C_K9a5PjLIyt`gF$0%(9t;w?0}Sos104Kf}TY$Vcup+2_qr~&V$VN+xDaMFc~K^ zK-|IyCA^^77UObQ2x^5g$b%OBey3C@kJE!N2kP7}V4=$cH~l^;|2Im<{NG{xOUO-- z#`a1I{~_eWW?8X}_XOf!#O>2u03Zf;U!<7xeuJf);J?6c6nV4Uy{s}a(3&gH(RS?O zV0r@Csnjp5vT#NTKbhlKP=h6|jc3v&8|C;(4B5`y+CwW?m}CTeICxkCkp!Gj=R1~! zPC;YNz0(9)ncb;0<7;@Y$2o>MvA@biRPgl$hG2JTT!4dKycZPYD_z{rUqHD!$4&H- z=_Lfv(IiAYVc%<;gAjTOLvmdYB9cjlhI z&hgB>J3HBVHk(Yc`g@;Fff zPCW$-hiCM|oVN@t9<+d!vE-j{s~X7eP-QQ~1at!Aub+<#7hNZEh|{N{tR_D%#~o%O zpO0WU!_Bx!R50w4L?@Uj8_r@Z@t6>fGHQxCqzLvAmGxei-sD}0&-J@_=F^I{{uK`! zoVO&->Ayiq{zszzuV;QC2mWxMc3pMDkl^ZH`CZD%NHvF-@&W=WOo3SrDIWlcb;2l7 z1-JI(R$6$+-iUhPdZF0udM5u&Jwd~+R~kQ;+`&(eAN4+hn8D1ObJ{gxC#SFq?vu*J ziUgm>F(Ic(&UoDb=gOy0$U}vmQi!+}oOf>`Bb?H~Yb(k7!LaLZ^UPaY@5FIzFzZQx zEQH7`U}w4MzT$^{Pi3nUu(qpZQMUGlSzdUZgsgPkXfP+NNhjc7dx5$tsV)?GM!bK= z9plMRGGV$;;rJ=D)8m)Q%lcg-Ziz8hgY=-zEtb@R5sN3{lh66E1*ozff zxm-aYT6QAU(pq%k^Qt^bj}%|X0#T`b8i0x-QW7SPVD&&EM?hRn1sCGvV@a>6p7g}h zVSG{(S1PqJF|idc=Wx%jFTp`~H$JX-%WBlt z)@{18XrPMQ2#cu)jBzz02dfq8P@40_#!=S1A9A1UdRf+LBGQ1z%1E2a0L=_98}DgV zh|5?ew+*RWgouIX@RG~lSB^S?0t1EM_%n49E;=$Da%C6AbuM#8bc4W4{%8L>zIJbI z&FsI@lkk59>_1-c3pue5!!+B|+~Iw{kyChuMC;GvdB2epw6@8vs9Oh3-W{zSish-j zaChD#sTj^te0Hf_2CVlsE;r|?%7=D!y?}u_2Td>;vAgM`-{aFLM0WFdXadrDGHE0^ z5GRqakQDAa9~`|~Xv8XxB~mhVHqnAzXW8qBcOF3{Yx{@wU%DY#@0opk{T9OA3-37n z5wj7ed$zUS$`3q!*gyW_2D<^4Lhxct5$T6sp_TF((UVBM(=p*M?T(emc)8w-hzA7jHkj}>uUV&AorcCcuHdB;1FmJ z*v^ouov_v2l%}Y@?e6g&;ZcWhbIFRCH-H<$B7al<+6G0ek5Nc#bBH zV3km35$eV~duxTNe@T2N-9l0L9SNj=8c!cK7Bq)BGG*UhBgdvc-G z-|`eTRzDG4SwgdkT~}LrBh;eN`g!O9%a;v}?ny@{eVSofUtH_3+qg-i?q5a7uP+@s z?qR~{-iT+YwH7Jt*%@9}Z@R^Dv!Pgd>-gA~+qG}zce6A>1#Y2x%Le3kS=W}|$gm7I zv4DD<#)Xg7(dCbiEAUGwJG(sKCrbzspL3h7Nx_rVR+%M;FLW*?e6kv67!#!7AWsRO zE#8aF_;pIdoFXr)5qwK*eXMK;OjI4lFxr zl0UeEBV4X@K_Ml`dAaed<$aCM+$)7Gv*)0_UQ$ba0Z(UBsJBnFOQ!c%j2x3wMXNTtggC5z`#_m&H}UT~>u~hL*&zJg zkZ#w#Pu|Eo_le{HdBhx5Cq;=N*bngjRH-j37HG%g!uU-+!V7T+fELHNA4OlJN+TTi zNUlHbAaWMnw0B(c>RRQd+msEjmr}Q@>C`Q;la`Xc_QqMXv_w2}r14eUzK=_G52b!B z6``FkGk%cye`?wFzcc?2L4vRg1L*^j-Ju|X z8BfJl!k7FgRAIp?{ei57?7ol3HR8>LrG&R0vBIzwq}4PJ=~mJZC9_F=akFM1v$Sz^ zhMK}*BNt(rXG!Rsv!DBWlLCY_q<0i(x_AWnryY-bmr)hqxmfC!Rfp;dB!tWCUazyb z3B!DHV_~0i>fno6{}o*W6zy~iz*ex?k{A2Jm6h4AU6cN~-gcjhd-KeA__)PwuTHm}n1Z_4 z?M*(~3I+aB)>o>YUg?*4wBr==XiEt>w!0~eD4A`Qc_#0rBPYbdg4?-Wc#J#X(X;pY zTd9+nxO4FjYQlHi0wKn7bFr}`)eV9@7khjw=|^zbkFl_KKlhLyzxK7Fv9)^})&xz` zNTi)x$9+bAG)qfId3kxZxzHk$lf7l6We1YI(?nwYX%02{(eFgZ2Ja{rb>7~7Acnd5 zwZb=!P5X7<;Ao2Yg7FRKBH2s!he?}5GDl*YXqV-M)e1axRJHNGI@pinp3kZRZ0|@? zgHbhp*Gawo;VN$;Qogjw$m7j&UZmNk&t&eq?Jb;g-;Q12O{ri1p@=@lwT;ugqJph% zFdSUqoJ_KMF&nDw(CBjO*r`%`y-krQP0Nih&Q!M7JPW+QGT&{}(f*M0LQ387MKD44 zZZ{;cQPwnmtiNgZXtH1YJGcK3mG-Ys`i~j^LJsvIckji-C`#b(xtyYL&HY^gESukR zIg@TxDP;&+m0J-R2clM`^?ueDYya5$Zmak!664~TRow=0ZG6r)nAto!xzBLGJk!0D zl2F!uFmP37i(zH-bCq!WMkjmC>VVEOl3B&7J3^MHGw8>sJ75uq;`Ge}zR7b=N_R}U zms+epleTH!-u0F~+x->!m$(MfHly1yl@`U zEZ<9A+n98u|0CG7I#>Oj?K0dhkJ}Y{7?eMxL6OXML)vB8wn(N<{5*D&+zUp@`Ld|& zyi{Ttw>7viACu+eB{(~nV$UEQ6pS(|1P6H~{p2`)`NXp?Qkd(uo$Bk%0&BH01)t*f zdv0b9f7Z&dws;}=a~OYQcKWWSwzdn+#amiNMxxTi3-dq7i~p~z|3XfD1pp!h?+CmN zzgDaQFJp~hi2IG)|4irczy8zzKmJ4R!2d_?4|x#(@BEBk$cg=nlv6$Wg1i2j1n;+$ zLv1q&^wjWhb$`2M+OAeuIe&zRk<58uBD5nQ0?^0EK-0sAzbizyh~9XUp?lZAgG|)DkWaZc;#Y33ch<=CjyS%(kNj0P zZ8eF%U@kH8%7n|!*`K6PowQs&or0uwn|29FUuz>Do>(KzpMJ8jX{@5l=z_f1y1v|e zWIs_QI`xFh)#5|G6J4;&W63f<3_zWSP$?plj;9YcKZ;h~xdz>~#^(4S>R+$zh~uFA zT2zl+uA2TU746$yx$VY}V+G#*dWzFW$6-%-K;086u-8;LTG*>K_F{N?(PAY&;o9}S z?ohm#d2ZJU-^@*MDB`1?A}1Tq4cT72wreu^Lg<0F#YbNs9lQF@p#5eFda4-7=4yUO zA>KF@p^?L6INYR1^HjhRFuy`Q(^2OU3%=%D;kHCLMVKIqh{jL}Q!=8VC|0TWPVmdp z0G6%Zm)mKPbbqSW+i+cZ<5JrqoHp|^BfKD~KK|`jX0C@qya=EcPM8Yl(PX8dQ7jo* znyNPpQz0UeS>v;{FTk0;It~$4VOnT=>VK$>y8!54dhxL3*=IKP_*}~|)2Cb4#Md4z zet!33-CEPdTRUu(^781W_v8@=LED!0SB8zrT_+y=lluMsE84%16ZE~Xcl;6b^Sxhj z=(xEJ8xLOnIsBFSU<_pf60@pZr-*z}y1F%;sCiY*`Q(!-$ewe|x5iWci zZIyX6bJcCXH)cjF-gqMDl$b&Ht!Qs(+tJ(hZpVCfnVdFzF5^CiHoo2%a%;A#n8Fr~ z+@^C*knG-e0P}20u_fe*M!3c9NUIz2fv>F!f%YecpD@!0jbL>rUbgx1Z)o2(LfRd3@ zF{dqq*yMSzX}ArB`mA3oj3dZ>!V&k*)TV3ec|oUo6SbmxpC{raP=a*R z*@eM{oCpj4v-~*WaiI$a-V+?d5EWWOzSVvpMUqb4Pi){2yBISPO<4G8=R}y*J~+lk zo>~BNw`jgqg+5Cb;->~Oz^#s)#DI#vX#>NgpmANM!Fw;hm1YN|Cj7Bof#t6lYedQCvf4rNhxO=_&~0enhD&VfxiuZ>s%0nwIA zI~f{mkdYrYFG@5a*bZ=FRTU-KMBdy!dS`&w=Lw>ZF}|BLg>GMui_YV>PW^H2uYX86 z*ejYdERHG=1fsYK0dmHAM&1vZg5fVIN4BLbY*iID%i@yAyb=jB6culrIHKVMLX6@j zZKVBBGEhk%VI_Py{9%M#$;EoLk=w_1lK~9Yl1FB0v8lu=s2ax9xbZ5oSLp!$4uF>+ zgv+j?q6fwNHR#Vv?1Fhox>0b->?uc4L(Ccf0dIg|VCX4%w@N3PH8qmDX_q!8Io9{k zGT$B}9>4D6Rsni{9saSXPw3x>db&M!Pir4*%l9FlRmzp^1H$R1H+9FY8eaNczj#n{pO2R(cw}>z}fG`A!xQDN}CJCV=&5GFCtbW zEDcNr#ScDNy{R@cC=q-&oZ45pIP7q;%f;IXd9yN*@#rwSq8I()b4 zXRc3!g-l9c4Ha?qce{Q2!n?;jy-@dyKLm}`Cv?Ld>v2Z>jgJJk==1Eax{iBPk$+fR z$#2CfX7BF#ZwX#Fe<6LP*Z)9HFqZ?1Qvm?hZXA4%iCSW+0%IBc3Tp3iQiCYez;3u; znhHJkD1n2bIGE7YPzPjAVe*Dzdg~;Q!RQdlfZ<{a#+zPjhs@-}J_RQr@yFfxJb;NC z8b63_J$g(el*0?n)CZ-co87FQ>A374(|kq5-sBqq-Fk2cSpY%(57@ax&)>)=Ey@XQ-Ddg=2Bso`m2LVufNf<`_~O zrL9Pp71ZXY(hpz=!4QHGf^VY~L5v4GsFwBz}KJ9uKJ?o%i=TN62cP+Or;eJVn@5x;!i&>YxZM81=*7W7i z5q7`A<-|XFtCu-XrV zB)BG!z%<*CAll2+KxtwSbVW;MFfTMvcKyDc-@*X9urXetSz8BMtRA(FoHLIVHma;H z-9jYJ)v2^vJLu*Z7r+rPCMPKYIgn?s8=-tIO}Blq{KKG%>1|NJ!uhSrOV6Zie>y+Ne`YVa#P#NbnyYIDG2A;&m%6Q53n3-OnJ%_lSdTr(d%= zc?P>0t=^=4%f;Ob9?)Z?DYipy{J^z)(en90Eknx{U$-2R`SLvU{-10~{UzkYK0;~Z ziQTiUzll@cE2Oa}&iZfS2pBrqUYH=+PAu3!@F2n)>lleZMU+Ggm&OZ#F3l!&V~mBe zcD9?&byXvdWcYI5i#VqF%}nuM9e_ZE2MIlWa6rtAAY)DrCUpc^tgrB3INP;2+zt>E zpVzTJ_bHK1MTnvB@PbUyGl4hJ;1)}6TYVL2y(==MI(Fkb)!i-4M=mNR?D_Fo@G#aS zk}pl{JR=wNvd}94P0spp1Gm@ z?G1zHub;~L6zTT4Eu7gmQikkdzn3z}Ji;_Iu@&nHB<6}PML3BHqYg;`5bq~z?zqav z)^F}WCz+t@4i$3%ewEwe+Lz;NfBmN&p1^0M!aD^BkkXa;P|aG*u- z+4u}+ud2F8-v@WGsK^^PtZN-9O(tKdlh4=I9(rzF`;oO-uC&nNdD$~$>z20{b|(-q z%ohVOCpuqknR+3=d>)%&|H6D?wTZGwogATSgxZ@wz8-A8*Hy(2Nxaj; zZJ|pt7kE%8-7g#+1)>;es3t+kG+<-65$7o)TZN*p_RNkCQcu?U2?8?Ppl^hX5zZ*vO|0S$)q$qlIL>ggDAxUAKx$i606TCm z=7{Ug(E|ua0LA@gH^ZVC+(Mx32nSh59`3y;Zh|)IVo2CK4^-pzkEAOj%|k6p*4bKn z1*B17fSS7AR7CM5iL$mKW$NzBGm_Iw!LbM9&R<-%Dm~yA7^pWx4s4n`RzKZO!Hc5p zA*8|@yQp5(;R8MfQefRCe;JM}#fWNQjF%`=R0bbcEQs=4Jpe;^$?sbjp2&(A_YYaC zzWhhqr+*{&hDL{699j7rxpA19_#VB#Z6pL>c;gLK%7!8$;7*LbK~aM_MV1Hfj8^-%E5w!piZA315{fhzP>HmJdFh;mpi^s~J}O>0Mc*{QklwR7)A;*~ou$ zlrQey{c<&6w{2*~%ZgBC2z(m^6(p$^ssy%S#7eUmTM0%WnlqXp4JUmN0>(BuCB>>h zE+;xsC?wMD{;Wc0m-t&{<7tXd&x?v-2AkKvpy!qxRf;uqg@b@R zjRmS0-8~4pM9>cEXSZ9#y42;a##TOks~kaHnzO(&ip5(&wtfr zzmNleSfKHzFCLEmjhs@Wke1Va2KD#q0VF670YFw<%#KcJ2V1;W^GG3DLC_TwSWys7 zN5|7W$maZ&i1WK8(rmw2v-*xVk)@km-v(IE<{G-8Eu15gfIxs7tJdSPSwG!tu~BPu z1@Wvn6P2Xm&_I?|1GrCg5u0qvHAls=DqgY`Qci4foas3A?R?Q{L|*Ul7ClwFlNLO^ z`QgJzm-Q|xPc02<=dXIQXNy8`4sy1`b{&@6_v)6^vRo6{<48wSiLkc`T<0@U&;2ew zTKl^8qXKvgtizbG@txi=r4`o{vtpRNs_WetE}T5vd~wgh(X(2Zef$Wg z%^4ny0^R|r=CNQ{h^?E;2695BONW>xm{ZcIl_$-TLzM+jNboaSjiURKS>}iaU<-kY z>p-T~Dz8dIAnCrfF?SmRg(e?h~&Gzy>2LB^8>@Va*KHQ>f{od|2#Z&HC!Oi@LkJ$K13#7Tl@H8`o>mgk9{?-?E`b`n+#2jMaohkKNhb!^b8%F zcb*=uBUtV?fiLgTwi>f~Y3za&c_ZGhp-#?R_AG~;xZu{=eV3pOkK2A?4>81lo?4MX z%(Wl`E51Z!$UG1YQ3Bi`I4Nluj;9M|mUrJQ-w}huRDiO^je-FwfaP-ljbT&}S@ug# zF!_($L*C7{m%Xh+y$bR8X%*o_A~2l!-78b(P5k3S?hmYQ#pcAmeGI{+ zmT6aL1&SvNYd5&8$aGD(;MB(u!m46LX8pH7-J5Yi2{<^)IXWWl`Z<+&*i}t9&#jVp z^K!VU$@ZE6MlQNyVPyj~Ly}!vP^I66-{HUP_We&>x&8w=L7$Ov^NV*M|3+@zE10&- zKg@DJU913{3J`QPjCK-;M-LEI{K+gZAxYrn5oe#W5DOT^)e`?A9%(-h+GzLe%Kp-2 zK}!bVOvxAFC$RelW$g}?uBVODRfwwW>$XYy`*pB%Yw7UIfwYw9#v~n#Azr1sXr=V> zNKrpl{%tM{0PU!ncc>`q0d}2}yRmj;t+MgM0YRag?7y~s-M7z=9Y2@GYQA8=J6i9H z%KUytzk>1l-X)##<8SlE{8NJsA9oYRSb+V?(U=P|@jDJi^+z7xe^9IV*?_c_gOS_i zAx4@gWQaffEjUAu*@{37!kErz7{Jgnx4d}5=6rh7!&Bi-hwXqFghuxv8*1P?^$H4{ zSV4fZ;Vz2oLkVnQ5n#fZxlIUVrJTSPO<-e^s>UJ`%sv-u>849Pkr4 zfo#Lk^fn)SC>Z^&E(hEH>O#rSp{-Qrqi8^!u~NJhM{j_PcTQ%InVvC2Vja@nB95hu zN-~|QtcZ^}Tsq+o4siHr?=8(Lnl-y%5!n8jWLObE}lCzxK47 zWX}ig+;lX!Y;V(uyj#M%zKvRq*F3jCt7gmCTO$vo@Rk+}NPqVm1`=j%7o36R~8 zU~vRMAdXHD#T4>pwf9cRsz9x|8G9bpJIOvk@=aw1>5V zmej<7s#>2Z_Tf4t#Q9Z9%EH_uyxlRjEbw5UjQq^8TzE2>8=x2*5RpoSqYP5m^}Nd^UAqZMq;m-?mquh!0n7Gzb|z@Zon6fV@2E$-o;Ot_7@5QQw= z)b!fJc>SS!r*^!&e$%7nZkx(mtvI5ccCuQl#e~}48F~948ojNEjg#Ytk1Ss8`zP)r$2Hv-{Gt$ztJpj@*4|;h>3M z4&=Y}SkjQqd*%7!mGP|qb3*F#aNo&_Xa?-4i^rMH!60<=x65vmL&yr_>!W=gAKgb} z%Zwjp{c*bW7jp0qt+ese7lZ!JDOCP0p}b*_HS;%e2mo+K8d^n?l&mS}GsNIiBmhac zk2O!-7t+VHJBOE)=S3-Na+cw-eG zf5hm0Qf-~3nU^Tsx&@R|AD2|GWt*!RFoQ9#d)s|F$1en8RwON_ zAqL)C%F0x%vsQGO4d3f2FNLI%Q2or9drSma5vWR{=JtqS{=ZnOipT|0&Pz{?P`KpVIXga^fF4 z&H0c^JoMkoheE;fVUL*rHHrW`D51G<6KquSict(xE+Vg8WVua-&v2G?&=Rp?Y@t}` zwVvxsyZ*!pbdbf5;Ni6`d(|YLRXuw)KO%hgS@F9PU5cLAuDiQjYu`;e*Cx@R-SHjI zn%jn5>PObHovH2J@TSXjVxQOBx{rp%D0pE>Pti^P;xVP*+{48|_MtC(B;=!B-g&(( z$}32@>{yU!4;u$!cF5eSzpoW^xiI&#)(KgMV+yhN4}9Gpwrh4DVeg0%-RSVvFK*(z zeMYNj2v$v=U?Ek#APh56wAEBIodItY{bu5m*=mupQOa>HvEVVr{fqO)RPiZZq_cD1 zsnsVPzz1j}afH@np=%=}Lr0k!S@nQqmBW#9tvXtdlvtTvDi_{C>hpBC;kGx6pITCWS3ZVh%cKjYQlEVYC0NS=>+H{)yZZ zGY81U9)XtsmHMy_CQz*VgP6aOBkJNd)ddmxJ|H8F=tK=6d28n`pu4C^S{_^;gzadn zSem42HC_e+9+oAj@#tUNFSt&}i1fcnbk(I2C-iKRsTa}vPF@Pk*OmAX)}-&>9>}Xq zGYNcQm8*CumCKhpXRpw<@5*bIs_RpwCx_~y`nEl9@Z07;<9HtY_{xfY6A|8D)e_ki zmbtjt%+69X(Apm~Mc4M@=DbkwC(M}M_Frvev=$Yuo|XOZB8K5L-RHDjUFDL4MAQxU zH97(wKRJ6AbvTDR94+Knrb^H518YMPldDyPtHoe(8&iYil2nnsDr!;V=;40a<2#ST zAB;rv3s8d-gpnGmm9)|k@B5cdjCk`@)}>5lUrEDbNGp{=4RRt7WIj|%Stk(<1)&RV z`KBSqxmA^!Rw9nduLvg4FC|&+%<(b=i=SyRWH&i6+)JbO2#Nrx5CEaV*V$%||LU#% z_Bp#>juAZya+W+9nf7jZ8<=TM1wpH6J^inH7YWQbS%{PSnZOOI{k5;|?(cRmcet5c zIrZx0D;B zUH^9uFF|Kajemz6G!O3Nu%y|_)2vwP9T(!xNr)Ek2YDG8h@k`~ZxF=@s=-y|iz*RE z`#da>b4D&5!Vq$Mk16UsEs{H%>m#a3^$Ku&rlx*LhzMV&R~UNz_UQX70xfap6?C76PDh!H#$n(1^5}aX6P}(6+x)eH zIq%}L`~BL>MV-b&%dW95sI9H!{l_X~N90e`rR)gLRM)eGHuYz-O@hJEp0})W&t!%4 zD~ERGz+omDXN?B;C$bGNOI`{~!s67tJ3L;&5dIr8jC>@+09r?SsAU|y-PrjU>3%E) zrB66OzSC%MK=mlaD6K=$j9ih(N0H+baTp?qv;sjxacoaaa3veHJ2bT}bXY@rCwB?Q zi(TJqTpeL%pgPSZP}=(B^&DM-Xmjsw=OT?m=JqQ_>FWD-{q-Sx*UeDfk^Sv5$)3I6 z5n%r*RUUO>GJK+eDj`vln8@MHKs&NQySTw3@c#ETnF~|Cr&nYEM!!nPC3_l%EVrQn z5Iw|3ii&0mB>{vakd6PW{E24yx8W5$gXm|}u0K)2{eGOiO&e+HgY3&P^=@3!hRkmm?AplM77O1g?>j7-Qu~ z>0FN7#o`l{AS(i3=|{ZE53nDku5H~4y82cmUZG7U!`!8Db|6ZVh`M7mGRzNTiWx~G z!>7)sHDp^-p@}jmj@qKVb2oL)b`XZvmDffpW{l3Y`MHaXqh^k&YwIh{7xD7W)tGB; z)d?PTe&xD3bM4E=(Y3)pm9&3|xPL?LnweeVy@{N^6|1NS?%yFt=vH=%C0!+MVZ6gR znJ(u~ni3YK#Y%1aBsF_j#z;E&@iP04RsofPC?P#&Edg!PbI5!`zm?h$o7kJ-7C^J^ zw7u*YzDZ%9&?M+A7|uTRuDGpSojzsM^Ze>ms#*2w$t|vT9RSicD~0Tq)T<%K1%yEltZ#zt=WF;pMvx`^LNwEVu|SmgynJ&SLV%K4V_?vyykets;l z?_|1%n$#<^n@=MRUs%=~!7+E&H@=Mv!9KFc&GhDBCH<3KPydLpw20ukgQh69zC4oyhH`+Zrsq>e*<+stTkU9w%%E4<^+fm1|&2^ zo%6i&^U?|PaAmsQ&TYc@IbK&a`6ce@KopCnr74t8>dbz&vf=!^RQo@cGuY=AvK)h%qM=&<={p_}y1Z z(g~=|A_-Bq@|~>~rQeM0JN5AN6?;z?ks}Q2yEbz^hm}0y7YCi+*4EzqFm)sSdI`8% zLWSa!(m7-62DlC2{XN;r-7X7-9=LBLLH_EIyVuW^PzmxH2ok%nHg~~*0Zeu=Vj<8 z0R+3kv-}ch;Rq29Ed3-gd7TWsGADjlQrp5=?~wQCWF^Ux<__Cjwc|LCTl2*UKg z%?1Mld31lDOo}Q@3S>sAON5Fi8JICES$D=w&;bF976T*Hbm>b1TjU=+kNYX=en)7& z{TaM;aOLk6YqE%n`2K$?R+5X{=64)I_b`!TMqUvj^9h9EFflN1fUPYH5+^d=yCV!~ zxER*i{PLZjc|)ZNlMNEdh4d=QM8S9xhi`e;oTe9pz%y9}W)03cQ*w8=^Z6IsDr}|G z@=s#;U{&-};f3X~S1HxtjFS;2N$nkHpND^Qxk$nkjE~ra`Ebkg;&*l}1+hm~sp-s< zoJ==$tYgqhx^e!~)Gz+0lpV#2*QZU*?XIsr_fFEcux4Q(4AX0YwemV8S?xVP!v(1Z zRJ(VV?5RGOQ4wBJ3L2>f%D8?2E9ny&%S3aR_hL{xN))v)&y-8cYq6CcSTR_czCT9n zAQm`^DT0(v1!IP9VkP02DRqpZD%Vw(4XfszmLYVSpgh=V$4_@NA}YX853WrEa7X)7g>v<=H}w(xOd{p~ZXv%^-(ni+=y-2~Df1 zP6{3_z0hoHn3Q>eDa8g3LNn``kmRYIXAV9FA!NLCtE|fUFxoow*ME}S`@MR&Z$?kN zcaZU$IOU^4%Hn%;nSa|z{E_c%T<#KhN>a#`ItZHi7KA~}aX3(g5-tXKKzCU5>pAZr zWHU_Tqy6GrqbX-rr;7Qy7_XXsz~yZr=f&rTaqtF^7P?+ZjF{1WXEVy7e)6Dl{$wsP}m;OQCk!PIU057wjL*FqN^c*7ZEM2ihQS|A)TnLVnviet17z|Y?&pSgl}d6 zdn>;bt=kH^vrVxL&ry>@;fzL)BFDr8eHEbcWRO8bzaUgF0M145=`HavfcvuvG#E{4{iJ2-0Y53Q6iRJ;quH~a;2SQ z25Q`3v7XuHD4UnZ5!9!(0$ckP%Y5RfOALE`2--VAoc54CFQ=)GWAFg;1id>ZZz;mH zO$m?(@T&4AoL~I8q-^0rE2H7aX3f9^>!W{Kro&Ic_V2gf$W7D6AonK;eK-1jV%i{C0$gE-YzJS!`|hSSW}RbmKQOSa%lQ(@QQn?Bb@!%vtLVi+;)3!~(0OB7w5#I&kr z%9@L+%)66B7u9(@3qiD#3_|xlA{DDl>#F}C4kPk$5~o!h30O8<{!a@)xz)%765j#{wOEk3^Y7$Jg#txxoYyz)=zM)qr3n5`) zj+PtF8CqvR32xu^nYG10?@H`fhjCxcnF*PVxCRM4fcm00)W$LAs^yb1NZ>bTJ>lhz zfh${SaGAj1HjM{2^s89y@!27Lc)FYXWcxv)n{B>&^kiNeZML!M1rLL1WHiS&*aVd8 zk0{K_a*sbac-U!|$scbA{-;@PmgWGtKl?Xw>->LaK3FpUMou1x!_OQbyhc=OJnkR_ zt?$#w86j+^4nk@5BS}MSMTHVTZ0Akl?bY?5qvesGPnTmWToT$45~3@pTO!vjlidA! z`rK@_mG&|dBr}<9&?MW%*C-VgU9+1TJ+5z>xQ2lu*b*MQ^3Q$Vyy5t%54+xI2CT)- zTF8t^j&5`;^;Q^qZBdUG)wlMEl-PQ#I{tVC*S=EBY4T3l34zBKhqc)3_+rX_PC`g) zEp?{AgIiNuHFNcT`ys^)H|_>Rch<{mB@7^~}R9W0ps~K$HvDnLHEkhG+DoI}{!_LpZ`kDZt2e0xCHmaGUCP}e<`eOV2nULDE z6ho0@Sv!UdxIoJc27+ivs!2)dMRQQKx5K06%%wnZB(sj7qjf09y*o#e!er{#oN|n> zrX`_4Y#5+knGWWJ3vAJWOh_VI0t-co(Xm*cylRM$xxt1*CuQfMI8iS}O+609aOs<- z-6y}Jf1ID|Z%OxC%FR)o5=)L${Jmh^1tEyNq5Km$1Z8}CerOr}@^|ux-(9eqc1q^m zP9n9n&oZ#}Z5HcUR4|TX_4XS=x0A~I4G~2fDdxl@8U_|Qq?whC6nE0maPlh?S0jlcj!?A9Su)%|P z6$}^UA&P+tGb&=Tdgc@2H1kk4O5+X@f5c1WpA(06Y}xb!avzx^O>E#$ViI4&ng>DRB_ujtdm z>l3E+iM8avsu1M#k>io?0VtW4lTWgkS5B{HvlEd6i3V^tusOtl)`0-MMCE1=kAcEb;U&ky50)~tnT*~lhSDNulDE)p0Z|Z@@2=dF=#orDCMPyb z;uv;=X`XlkVuCpZX=u@gFiz!jUzAjNDwtsNWlOuAFO0MxF^rsWs-RS?LT5q{!ps(& zTozOW0=Iza)Z8$;3PMh+$oMIw3j9M@^~KGbrM)d9Zo!5UWX@%E$PT`}A3u|SWThE$ zxy7g2>)5@fDNmRJkaj)2tZaq85s~ZKxn9u&ZhQ zFz1o0&9=!ZAhh>j$Q@^5YC#l}6tUZLolksHd&$d1qnxDyId{V~tHY??+MN1h>y^*l zKz5FCgP*L}(uvLI*>ZO`s(Z}W60S7wLhMBZKZ}@tJ~u@<1U%;DDDiFj5O-Hk(Kq#E z^gB26C1|a@q#_i8#p`i5;|oEOc)9?J3^oO0h%TBX3xU!TJG-v4f`no-{5Ea1iT*Yi zXIL_>jV4qiO@}?f5i79j-9#hm;$o1oNS5?CVS+PkRwGUrMG@{IAwuAs*Z+&T_W){Y zjoO8GDoF?sAVBD$g^r<06BBv~5UNPggc6E{CJNXRdY4WBOQ-^((i9O(DAG}?AU2Sq zVnb1notxu1=gxP(@6LDsnSbWq^Ujc+Hs`-!mH-6J5@Gg{_0g=HEG?^L zsoXK9kgn2euA&ttBZoRlqyqZNSbF}qmx6}?gu6$Qev4ucJcq>aRc}FBD&EaDxSLKE z_lHUfCzH!;9+ll=aL^YWOFc#wHNIXoe|A?5{VFiG`k3*G?W=kv(r6NAKbGi{f0H%Jt2=(Gki+XZ*hoguHFrJI^IAb}7O%6Xx!t82Ur--zZ^ zR-J$el+9{CjIwW+ir3H@n=zvS_{=O2lh8CDDbJ=zLrL$J3D>8Ey+CSD5n)8=A>Ny>`$*9C^~Zea_F;SzDW`L$6>0SE*FhodxM6NS$aBJqt?MREY>&NvREH-#TQX zggX!T-S76>W)i;?^Ii5|3cBA`j_=cwm7A5{5D#O&v-(PSYf6n3*XWyUmxA}2*PQW|n@e_F4v~a;mGr`kWW$H`)19fLST`xqR|HI^v z;(?2|CQ>8(v&t`b7)^dndT0VThTZghl<}g^C;>gSI?C&j*$CW^Z1e5Nw(ngtuglj3 za?bmaX#1TnUf6Ie#Qt#b+UB2KwWm*L&HhCIA~1Z%Qk23^9fm-Xwc<;)`U7N1kTcLra#zdm z@kHDKQ?;V(eTYQF{o$T^Rt|G8DBVpL--l5{AJfYxI$%1hGBOZTlrxB)wDHr%>+%8( zxTo`!lwkBROIm~?Lq<*u5uISCJOM8;@|y4r=SoVi*Z<_VG48#aBVjyMs=42u`k`Gz z4+RqcC`c7>=CDbEXDTAEehCsG+Vk*^6VM8XFLfz@Qw=M9M&GUPq=1@qxOiXlGM& z-mMuN<^To>s91ee+!pwV{1GpRVQ#3U{>vm?e?t!P>6ztpjqzyIKjFh9a)&^q?>|;9 zi17>%%ojLaJ(79DThTK)%Ui6tjGE}O4F)j%>o#?xyLz8|n=oXfIxPLRb=ufzb}Ey2EA_cJYwu|Pf})uvB=vpwI>Qk@xpY{MGO+)gy*dwt3%D3oxaW_m8=+s!l`P0y!NySmguiuj)y_@FOFAsdrra4#lc#3zV6Eod;Mh9=`3-jvPpO&kuOqJSKojvf;G=iE4=&d42dvS-@$k;et9^qrzr~vq1Mb$Y9yA zH1NJAew~=-?q36PvX+w_h?D3j;%YG|45&FsSno~=LJR>!zjhOhE=w3gylTYv^k@nK}U06SYa7H?3xAX^^|oEe$g=I$_+t<}sGTo|hwK z`vmLuy-aH8C{R?$@JG!()U*h^8?L!CBfXCMhm8!^u&Ov5JONx`<_j?=I=GUGn2AJ8 zOwQw0!qREoFa*={<%n_tKu{)#)Qb$|oCYRlzfBzyf1k2D(m&2|0+b3aB57m^h%;~v zmyBNJEB6Dp9L6W0%9AE%`q}`L}^)t1S&|{J^{i)*z;=$sAEqVs+VtBpy z8V?XqS>eHV7ce$n+l)K(_54n8>r!TlY~>Kautx|DvQOvj0)beh;zgIhBlg1E?Y^jC z#C*p1(1j8RyhYgE@}xD&Gb+0f;1YaZ?uHOB*KHB;ne1VawPBB?Uw9zI2~(s3-{&Mz z3H88hDe$_(wBM65E+Ogn;=>g>{*6KFZz~7?^xo1{Npj#H$0{FZ{bH%AG9A5U76~x_M1%K>)Vo?5%PiuLjfyB%a-|3$j-R+ob9(Bc2 z$7?k9fM$46m6-Y@kRre=kHsB2xm&%C0&Df{%ei64Ev6}Dbf;D(T# z+E(Rhix$P3_tJylNkt94te6L#r@InyNH_^qnrR zu{8kNl4!I-W(GW;h(%s1Jdna}Vz3a6glc*=I~I&xv!`OhYka^iVW&AT{gj-`tA##5 zzw8Ezt5%3ve-ZB}Ljf>hSlNSk5+hTsEyN?%E}6uo2i-wqqR3xRz|kB8U1``G4)&dT zodRMsKHB3Qa!Bvpy)EB=kMhl*VETLfh8zHwcN+g3`R7Z&t8L`Fv`tJdGI`VAQeOZv zUEed>Q$!dFq^f~=x#!|k~jeOK4= zXgszMbFuBGI4c9;s5ea&b`#A0ggn*6+Me%i&$k!FscLTMbgjA67%&*nW=`x)*#>VJ zeK~dDocYGGYSyjE7dKzdr+q)F!7gz*eObFZ{#G+epuXMRPp3ZS46d7Ve^1!V^|2z; z@CMUDF<%FLhWA&;(2bcL*W#9I3LU>b{gaf<()ok;_)BXk5Ww)xhQ|AeLP&$j*Yhel zJ}POtB!TL_A>$VOvVbIpCVv_eHQW#`g^m%mu&c-8`9jtZsI4AyngGH5k<-BSQT&Hz z<@>{v4{G9lpbk8I-s~?c_hdn7!gO(!Guf62|~?=M zy&4I9_QvgsG39)F>6f>Tm#tUj=X6KoG^flR9Xl!Ew*C{xUB@2TBPE^uZTNmS)!s4Qzy00JaX@iO?6Uh@czz>f*1?ba&yvP)vZpM&~v zw(IWFQ_zSIItQJGlaeF`!}OBD1Z8O)(}$t3fels=U>^#kPl3wp2_#8L-I)k*6iki5 zX)Qp*T?BDz#6Xg9fij*?gJ@iyrk@%l2h39M7jv{`E8E5IB0;snYVpM~r?`tsst#Fk z{-;!~c-So5Ou>5~SzN9@Drxf8o^!9fy(cK*NEFklezmS8O5niAoV##C-}Td%Ek*s3 z(>Ni3p%^0*_pvGNdS5=h_mJ23q5~&h7OVdd{daJh{?*1j$pzpTBO3~NL_09)k$7n~E?v`1UQ(T(klYgq8{9f7Z zou^P57i>_ra`j@+8T%7TJ8)SZkIG!9KaXcNnF+_+{dt=Yoce+T+z$O|=K${DU7v@m zm|iz?9-VJM2KOLsC~VB{4kSKG>)s*l@$wRS+b@f5VW#621Ksw zo6mE;m8(0k@hoFgU2^P(lUe2Il{@-+IjlilWCLwIRONjth=f_nK=ut$5uQ52dOY@J zlj!NHT#}J>4LBnug)mwZpNG=Se@8I!8*-4<8PeTtu{7}CR!)AH zPg&?lNYBDmF9fwx7!H8)T+*yJD=*o{uF<&~YfQ;g5V1OAww#l?F@Nde0v})n4y)he zrldrKgEK3GqSKrzx~VZe%~~?Mk$FY9FUS-Y4#(3mF%G}1)4N{vNy8S#-HrQN zd`76gVNJs6v@|rG*>?SgYnt3Zlk;;!-apCL&|sPDamp-sBw$}$c*0)SzB7apJ6h)X z;~7?wA9K@ozQy{M;?B$(Y!|fnG!N-B-MERqm|+_EQy}YG#q3UEccCZ}9AJDzw?@Ty zNq5s4;{IMpmyA`?fY253JyahpI8IOi2L|DM_%net`D9!1WQIUaJq}#&h$i?7!=s3{ zKAF#vs?5|4uHMYEKL4TlhCZ?Uhnw7f&O|SrT_ZC=8f(;%^oiv+g>&GL@*-r4DySz# zk&wBzUlrayA1E72@`Sl>*PXc*gs-lF3n=Q@#oX`17(N)jaPsqq;T%3t8lrUgl4}0q ze%2mab;YcOTkaG#;%Xg@;^l3Efs(}slV+GC=CIqzF|MHkX11ZJ;zD=xqnmv_A=J1? zK~T)Dz*d8HFhql;ka&Wu8JE@YVc^Kqvc^4^Gr}`pz_+&A&BG4rcI*(hJ)GztbwV6E z-8&V&6mFPlSXsFc=jb2VII9`+-EpRN`FP+=-JQ=RjZV3rG~LT27QE{SY2R!j+{5-Z z`X&=nzuAPr<&qNY^U%0NX@jgjxLoS0Vm_^JqO;bUsJD4?{0{s?spmZ}>vOf4|A(rJ zzvyzXx}9T?M-w6ecnJ~^1nd^zBM8OX^c1(saWJ_i2r&=uMQ?M7=3fn>1yuriVwmO(e>GAuvd%K_N!pghr}Ty7xC})}y6r&b&8!2%ncc*Ca6LR*Rhs$K zqQ9mD;VBt8#pFUoECnJKlQS!cut&OQ93MB{?-AwXgeJECbXLz8hzL0= z={trv%#%PwPChg-@QwXqYxUCMP88o=>knZj9?um&d@OxtTJRjW!FFjpkn!P__@Z>d zR8gCu{NQz0frPMrA3H}E?yci_!I^}F5c?K*n@jDNk2PQUDI3e`p4n4s)9v}(kJP-w zu0Q(dSI~BM&^;s=#UG?K%~=)&#`3U4;|(<>;x!_d^%212q4W857pS8s4}D}`nF0z! zx>04WN9TuIgKAu{!@;&N$?_W()_eJj8E<*(Qf|`gB`n~6m#P=vLkGL$J|kkHK>EhP z2oxyzViMmj_6;M$PY3DW-@Fp_oO|s$dg-?5O%o}$|HSO7&hfosQ*+fp+4ljTJerekC>N~N0-C|9fCa0e2@FS?{yNdP$<{dcKuik(H3&( zuGWwN?M2xG=RcMu?(FFC7?9=n?%Q@F=6K0BWSmw0&==+J+Xl6UUKUx*ZY#PgT--Qy zQgvk8JE3$+-dE^2)KsCd@AjyD>VVf9rar&J%hWXB%uj3_**fl@zy@#OYyA9Y>MjwvqSZa=ZKY6F? z-Yq|?pK;rMy-})AkL(CvN-N@IjZgDdCm^DEkZqY zvAi5XmP8ECW1v18gYIJr#{H*UkWmwChteE2bb$%-?~SRydmltFjM)^iHf$2*gA2}K zh;#OnRaQ?~T#^C$^{YN1D>r(6d3JKDWjQZv*5}6g7MF$)?m%JfVZT;K`9N$5zX2zHk3<1<(d3^jTIXB_$=pU@(Fu3WY*rd4qREp{Z(W8ai6n z9y;C9qfjrb4&K_j-0^hf?$&7YwFzp2LsC|Sh8C5>sj2~y$z)63cO>zSzn^6Bo-YsN zna+Ru@BR1ROF0p;L+Vi)Z>jT_HnoGc*4MwHhh*MsdP{okhrc}09SZPJZvv}{eME6(=qIF2tJ!6vA9%*ti4A(VlU&b?g>+od8 zvwD@QF~Gnr+ySThGCXZLQlIhm_{v2g%SBQMeNBlUi7KuhbCXMEovS-gU@1;ols-Gr zpy51MdTiC{alT_q^}Ao&wVrlI;QBh%wNJ?Wnk)Bvj}YiQBw~BOMO^HfXKK%-F4F*rEU;M@=V=Rvs$ z0#>}Sn%T+Z#I%*ZIo}za60Y$rZY-u36wKn2wVS;qE(pEr(E94xmy5GcQiTYM+r`Y! ztb95VIp8@n0Gb)29okr7oK3z;;*uJ~4CkOArRzVZ+13;g7>5;*IC<9B_`cXq-qK|2 z#qZelyI%jlXM^rHF+kp8?T_(cFDPv_H!d&A^SfA<*ym;e+Da&@)I#TDL- zBn$9KP_`j*P;xv6O!GmDaHvHU!JsT@sbl-C5%1Xfd=1F* z#X#$Hu3=b8sdlkPfpb?3AtROG6P+nTPl7=q0GkQ~A4C|pMYj9yzJGT7OgZC^w0Oq@ z^G~|IUrsYWpRCXoJj2*-b7Hr{&#gy>xEs$9z1#HgSs`*h_kt|4oD|*d4@(5GJ@Z{+ zy)U>qY5Ue+a5Zr+J^KewnOu4b3 zm0VECAFC( z7qg?>vQQ;}V_(TFbBaj7RU65`{pFqEuI)NUlrXlEs~U&ZWi?&*`JTkL;PD<$zlym% ze)|32#60H#=|7CWt(=sT_d%WrjxY67A@?-kvxCnE;x+w!_Jo z(bHUr(U-^Kx|4Srat<5VIlC>3s3~S&Q<9@WIbmuQ(`l<>**8sGqjgvuc)7eURQlVR3a3+?=48!k_E*YzF?4|Y>6I;o3k^9W-$SR z{pCUtWaqx9SK?P6T3mB%K6qm%hQ+~|q1vvE`9hDrRHYwOA|$tT%XOy8xcfWW=G#E5iaf`Rp+O6#C~E^5pHG z`LUJtGei5C5Ku;5`X)rz#dlUu*LvTNz{zPB{+#RqB}6iKDQSt@lvf1JfeL^jVBG1h z`kwrv{RYj`XusQO z2vdc$UPT?iXqb{Z@-ARPPVIZX*TV1W55xErkE@z~6=zCzcCaTrJDu&sSq)0jVK>NM z;uT7flohIt>Z_|Q!BQQj&xW=?{<)su+2;L~6!ZD0`ju-I@@X_XhqE`D1E_C=7ln3N z>6#k8Xck~C_yzXnB3J#*nPF`%uwI4iU%%|kePj~SCIMXtyTB^XoN9D| z2VRZ-C@C8kccsy!O9S?&_Lx>$@7IkxbW7D%br*eO$A5OSf34*Vr!09ylEjSw zPNy+%Ew@_%X)5^6hI|0nL*n)S6+>3)uSd2!^p^nz4^oAAvXg3rx~2ZMbug2WU-$-Q zplxsRf{D|>Nf39Fzj~%5pM?qMCKTZA%-56p2F8c)C?95-;z^*WzQJ_9r0i@=7(tC5 zEpVsrc=NEmfm)7#p9^}t7$z-Fxvx2X*J4<)3I0-2NYwVBMrg=8msxUOM`LN2zCXH z-^oQKko?yEz9%YMi+qbpzW{jX*2kSy@8<3wgD9F6GC=IDZiROk`jA05%y_@g{_vrU zAfjhP)IcsXj)*rgGy%l~@yYXpB@vAPm7^YP*T~ui-(wLRw}0jZRt!!TQ({UU=2`{C>0k1THj_z|`L=KAFcURA`tr1vZ)f->lb8vL*y;+Oa zmE9te**32&+`pG95nl^cBCfW!?y>ⅆQ9>_FuKj6@TnF{L0+OI>+%9 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 R%khuSKA?umD35j_000#2z&-!~ literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Intro03.mp3 b/op3_demo/Data/mp3/Intro03.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..cc307405fe02326ed503a498c962148015e67b6f GIT binary patch literal 196858 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�(Q9&xgX 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 P-2W(|KRf(uCGdX$c*;QH literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Introduction.mp3 b/op3_demo/Data/mp3/Introduction.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..87c699dcc96d99ceceb9862af61ae0b8010b3d61 GIT binary patch literal 244819 zcmeFZWl&ttyYD*;?(XhRa8GaogS)#E+#!OyySoGrPH=bE1Sb&O0t5&USeN8&fAsc1Hk$8^yKO3sT<=Rmm=pbS-9AZj*X3t zHSqGq#`^U1Fx1P-%N-eya~Bnh;$q82%Vd6nt)a5AGMcT<98oYlokwwjcZ$ytHutS4 zym|fZNc_c-$|VR5?S3HoO$d^#Mr#6aZ9d3A_80y)j0zSgQ3kW_%5)JT$8dEWO(vcUbcd$%M^ zVDy`b$D)5oruj2MSTg~EaYBoH`eipc|C-?%jlk2zh4bY%;Ck&weyBfwzDsm~ z`L1CQ)-)GpSAt%BJzpxc_lH`)r77@YIZT@Dvc5Dw>8~9O3qgXa=>m~I%>%C`8;i#Y zvD{W367u5yq#d8?1n%vrdnP z5Ik-dB_x1@q5Itwhml9;hL`f*Ar>keE-fv^;BfDR!L!RDqmvZwoZX?-+E~Xt_h_Y6 z+Zn!2@2{uVKA{|648BMar|fMh8221(WDiAS?2K@$xZM1vL(X;I*ZX8BFP0~*pamg3~IeV&*M$u!t?O-bUgA~8G@WD7O!j& zt8=>ZxuUqdTkrlxA$65YW|8-of8gje3HH+7!#!tik-wGF&=4J8Iw7Md{AgEyu9tOj zyWBCeurK;DtYjW-K8PTiyz*P<%6aI6`J?{TMMP7OUDx_Usx^Uz=HFp{QunlZ8-5#W zGH>do;NoVYJ@Z0V>S2X4C|o@QCzd+44GYbaRZkwLJ2u=q;JJ*J7{5%U5W7b0*s8p@ zD|4e;cP0t>e3-6ohM`s%0<|0-W%lzve_vE97upwkf!r`lA}*?elyy9P4?SHJi(=0F zfg(ybcZ(&(*3r45eJR0|VGrR{)y&0kp}Frd)AOC>?@XSjBkZ}Idu~}W%wi2*NPtwW z3hI!%R<`-F?A-pvVWL<-d!aNF_R>{i+H4YBohs?K*K@Yfb6!kzv7&v`-j-e*TIZBh~BhRoP!ZwODyzNa^E)o4Po_$L2_XzjQ2jKHZoSKJ^t(;9dx zE#jQ>s*&FJL`|H8Aosi@SFX#!&Se~1fvno)%`}-%i^=3!N27VetD3rn;*#N@V0;*s z@*2(!5oP^kF|vFHg%h9*e)!?#8v<0jm|IG#`7S6Z026mx=l2?Jq4lP^nbe_UaGTEl zPgjR0mNlNhX}LmEyb4sE=f{(qacOnzn6baHe<#(+0upnIvW2S*#8I%_6s|BEu4W?$ z@XU#P(yl(_`i->`60FR>o%tvd{oOSq^)aOCSCRklkabD;GSB$TbylhRSZ9}9#F&k| z1y>*^=Lndd3<@VtF>w1M&1Zs#5}$c-spo1%q4>gp=1sb`M<$xQamU`b7Y^ss7VRnR zLc>PZ!P$^U;2SH|+-T8vDJJkDTNABNaGz`4 zcQQD*4YDkv3%APyzV!~Cb{jk?vYcVBH=E%Z(Lyn<{j{nvk}kaonwk>GZJSLdvjhIX zlaL14hn*Ox<%}s8u4eC41Yyjq${w|P0N~;FW;K`C@OoTpBNwwhFWcXU33J z4~h_NvA3+CkwLzuC#s-Rm7DGDqvxLOZpIzLwK4KfPZGVm@gT<4Lh=a{X;VZx}pibU8U|Nq&NyLc#JI5|QY!OOP9)BSJ>C|Ams7#qxbtoKgC(-e90bx4{mIWS4%=lwri%oc|te}K|HR!me(9Vn3~+^(xgfe zw|MlP@-njyYC5WltEV}FuP={BqhY)RWsV!XCq&}`z*YxXe1B9ZM*&6;;eAi=3mR1y z5|~O=>9GtSDrHl@v}-D=gs+xxOGq0Pm{F1F@G>&6y=rRO-MWUFS{wjA!6tJSJ^`<- zrt0jani>@z3ky?xujHvhXsD+^RJ5n7_Jb@cDmIU58=*G)5Wb>>k_-=rkPru-*1z7M zQB5aMr5{xHQw04l|NMXJU;QsX{oh>xg>wdhVC6tB?ce?Oe}3b?GTeVMo7O*;`;RL3 zpA7e}MHQq9qP(Lk8#Ei1cz$Yh$0D*k_}h>}#3$7AlsrfiP5`z=f(h&aR#O5kc1<}r zRr7&+JR$R#{kMt*L__`k=r6+nQJP_lGBFINnRs1LAZ&=(OJ1W!^s`9sGU&4Uma3kJ zwD!^eWf*;m9mrVt|KMQ6L7)k?i39q|oUZ}mrY;3k$ZkE>D6lUVzO={B^~PH~t@-{R z<#-o40~jQ~E%rTmQhLBnDAXlVzFe^N4BP=|Hx|uo_9YE_^ifF@sDXv8i3CXrS6|Ud zu?wlcz2>QlF6@PV*uOP(z0tva*C zwTM59nDre5!(`_oY|?ZuDbxJu&>TFL$}V_H5*J>KyLPw%Yg&D@YLJGFKjXY5x1+~V zo`aEyAjKC376}G}X2lygG0+g;n6lr_8VZtV6mZ6HxMYA5;I|iK;FLiwmz2qHx_q{F zyZj^t;PB+Z!&$ypiSD%0ScJrMPHGfGU;+39nR%=9^?XqscH$yKW`YPaio`jn<@|+D z5yDI|3SgL1m-hx_(&4EXVFbxpOEfvzlFgH`DjH(GA3pLjzGSRt4`{7umC}KMZ6E1N zOe5h;*TM@YWEaeTBzknqhyk0q7(vNeidpbCOzRug6=jA+GRXa(Ut%P{!TpI*_D;a(phaoRL4~7XYHO(Q zTwAtpYH~+Rpq~jx2SFfe_q7_Nkefa{yol=q^Imp^ zN*>XjPJOxICG5D$6P{Xl&r9aG%tFnf6bG>(Mhdk}#-rsP(vdmE4;Gt*!eLTssIT+; zLAn_jd=SM!8I{P1tjq<{$i&hxAq~P#w%g^Mai@hH-gAqQ!qnE<)+(dbKYwJtj(NC~ zqvoXA1!G7YetyEVXwzSFTr5g7gJ)h*|7mSes2IhiYot4${N7>wACr9({%*J}5MkgX zu(&;%YaN;zk%OeZ<|#@*#?m-oRxjMyQ^-*w5;azobVx6>uR<+C1cjrf9I)T>>W3K1 zMO+^(|EWGg#&Gp&W#Nt{62}++kyu?F&JOuO%j8Ff&g3>!=rlL%Y4cl2RDAEPQTeKo z*6}epOEk-i0CyIhcfxHyMU_?zgLAdBTeAku774T|)ZRaqDk6kbUf^-8)%Ho)<{nf} zfOFr{Jh&PAo!w@`m2E)Yj2+QBX07_M{%|5lY$Aa_qJVcXrUIovEyvB!kT}6hpe`ovs*AdJJQ(HcJ6_H{Z>Aao!(J9%k{a%KkQ7gGZS%`go@NH|-)RVTh zf$&}xTZooQ1B+hOK9`W6H=L$TkfrE+=zw<>H&OYi!eX`i+w zw?m(W-A{FNV5mu)juMV;ip^$eoOUMv+xTZU`i5w4?B?CO*>$LJ47Bx0UlAt08?NbL zy%qmh7)Oi7pD>YFl!HA ztBO~4by^#mbzc|i_>rvCH+qFb*A<7pM1)Soj(H04Vln3r!=-%yB*_dQ^UwyOtl$A|Q46X0WksUk}$mp)gAS7?!YaD~gURF=A@QOFn+4Ury= z71c`7MfkrMn-3m^(+F;w!<8rpV+2Fhv{T1_HNOmo@l#Pz&)Opv4(!+m>LEEd1eC~n z%~0krdBvJ!+yZQzPDEqWF~^k+ETzETLuv|6rF1G9?2=;nZ{UHH=L~pwP4aPmzcKSXFmYI`9xwhC za5!(LY2%>qX1cf;L_?a!$j48j0WqNUs2^k$j(=qI-U6~MfB!~qm78k6B&xS!%rNTS z{Y=1XnaVcv!}pQ>{+-9$>k5I<%FrQB(eG>PQIs;=-eKWT;S?xIw7ZPQWgCLk{Y-GW z6H(gn3EvI6{0gB)gasq_npp(?8iNr7j*TK*6O32|jeycrL0LHW@8Y>EAYzfKH^AAi zvh)$*RT3f19aTzc50nZvBjU*H^Ywk+utTusYsZJ?LkcPON-46Aj^~sQcH>l%Sl6>N zrwik!qtawmPy9zl$6hM!6(PfL!*DVrY*sX&LNioj`G@nT@J}%1DHTl^%T(zIsCP@Fjx|b?X7JQHlM~VdD=!p zaS3r@keG6{AnGYE9es8Br>nHNv8)YiC2a%SHC4oA8B-q=&YkjF|NExT1c7N_O1EQ@ zEujphPeC9?X`^9I{V_2fGR3!=(zNOyuQa~ABGb>~XZYoL6e#JSQDc-P;wxPIb7lA- zOUc;@czAZ+&3ae86q%L^*8NK*5Ck*V-X3bXV9M<7@5X);1j$nwsMa1t zDmE2|4Su`=g@*RBJiHm~RHz4s(QO3@JCHUl+ceeE&qT{*lN;vPGf0oXzOi%V_yusV z(fP$$4F%^&^N4@h3hlftS;d`wm_6UuUAN7gK|ar4_rw!*7#L9ukxQj2EuS@-$q_izD6pIKl0z*b<*+&9%FS47{V|u zN?r%r8PDoo%jK#B)eq}A%qO?yxHP<_LZ?>Bn$TT%;s5YOmj+H~t9RwOHvL_5dbF z#m`&C7e{3^x0T!(uR=y$0!kl`U|JM}o=)*)SB-$B7_E z)f`(v40iO_%DCZR1$I)TcOFIaTmlzy4>L?9ZWB3T5W3{&yUdRr z4m_s|$_InlPa`Y7cKPx&Nv__f8@|EYzL(|t+Be(k#S`%O+3lj}LcPMX3h zaj@zS%9TmJH>AXLMVB)GkdBTkk<7tu9jyozZb5jRpxY!P0{nH_(1wGMXbjfEJ%X80 zt-g_%Fj>$vF$scQ^_Wym=k7Snf(-kfyMsJkMyWzG@8q|aQu z3rhlwrXy7&(~>F|g-D9XN+;VW%Cc6EFxa7R-mkKa2Pwb%fYjqq_0tJAxeP51)(-rE z%j;^Jsc7?Wz!m@iq%TXE&?dHPLdgsG16}Vwe7L{U+iBK$B@hv8VE} z3Dv@rm|n{uO2yGsuO2*$fHxC{18 z8s8Iz3e#M^-Nb_%JUZ53^PLM+I1XBxpa=c|g!bnn8^vkamI!9^GJQ~d&sD#Z^y*Il7S zfX^g?VhMtq1oaB93$djtTqnAU{9^gF@w>n8W7p##VWJ75qP{h&{~9MvZv(k#+FW7b z*r~1Lkr`)`q~r-5p_gqz{?-D8BiIV;%tNBKCL};;Sv7QI#YSYM9IO4KoZ3%kzGu?YojD0h#7Jv4x+7v2_hJJU)NN zsmDSpA2xiJ0CjGKXb9U+EFZSHu*}i4HC6?M7?=^2n(mS{r$XMT=hrBF`q|(Wd(h=* z(fg$VSG%eu14HF4nC{W*-WdW2|-s)w6oYZ!c4=#3C6mTL0pt@st}$4W&FJw z#gSyv#rp9u%G&n~+xA%!<9dkqBn%;E$dYL$ZH4h<8h17-jp7bjM2^ma+x?L#Sa>k^ z+))}r+q>Z?*e;&TP&hY=zSZ@09}|u@p}GkJxrSD^6Ux3H=!04$jQu%bz(&Fi;Mtd%u#d0~GHXJxmA|&44p_)nZBg!b@QLBIe zv5ZFoE6v%=!O++mXCVByG8LXb(OG(bIS`0o{Fbdx^|6oer?V&@OhH+rDjbG#SUCy7 z=z(eOjt&j7fsR5@xNyorR03n1w+Ec1=G4pM=th~DjD=1!b59gDx$GN>AGiDg%j0}t zww}R7mf83;;?rbFyk;pq0vhjlR*V)6pRPD-pJaqXPA~%=qvPReHCl{(2r^H3%p1?0 zl@w;VnPuWuKhW>o73;&^dY5)z#U}5Wp*=i@bMGhP`uL6Pr{)&j2-$~d+@!-m7$yp3 zep|TT=X}_n`)N?iWl*wyMuEclDW|>_;@HC^{wg<_z-`A-HuJ2O$bMxE`SOj?;;##C`t z_9puGh@N}4^w8%B?~d=!l6TsDt24q(ut4zG^k4B|o>^u3^$v?CTZ*i71G2AEYkL)5 zqg`HQjVJvxcU4lcaz7i&hrM?-iOdmTh_E^sxzEq{)VfavUbPX2qf#zw2;0 zaIm@Ep=3~;;--Ji#$(<_78K-WmH7EniFVcUNSCtuv&NqS=SW4Vb!s&Cmq*bttnSG6Dk?Oc{#YK*a%F2o<6SK25*Z?NEE21 z7R49J0lyX8dhVdT>DFVZ+){TPH>XQA?R$a74>ysqvQ#^Y~fsDNc z1zcAK7S;HiZ_XZp;fJ;BoN+p;pZJahP5G8KpY)ETvM%^v2q~ zsf0%LfKJM5$;%I3Y=8;1udfGXe?jO>k%|U?i;gbstbeq?>c`2-mFI{Kz798D zs%Z_ZHhSkJ@xjkAK9V(IamoIhSM_a&ab{*_?n+)2pO8xmXlyy(aJ0Q?7~?&pl(sPT z#WpW+`;^hERlHraM4JkY^ zY_c!^Sw1h+)e<^9S_joL*)UcT0 zQ)Ic6(%{6hAP_NCxf~DYS3xS4E55YhXYD0OPdZn2ecFXqtf`8!;y}X+?j}pwoM?{4 zoAYIk%Oc&&v$(x$u8-d*SEMUjU!iP$>3E+={@A@`GwSbWVYBS?OdahFp{_a^e-3fX zgj(*BYAnk~bW@RNai;gF7}c9S&^zE4o1)n6{zCZD31oHrw;QBF-;t@}4rufQ1;MBW za=1vj&T(eBj@@k}k3EX(l6-1Fv_U@#|xTk6S_A|E74=Takf?2IWM3l<24!aYh@ z66nrlkAhmC6SF&ThGu)WZ(zqsBWDxASZF8&y)gOGQMv*BBgk%NB)s2J3|A0v(z3D3 zF8d(knyxZg{=)hupNaRZT{TN-8_uiQT6){ssy3i-p(2I| zHLY1bFvo`P)Q;}t5_jH6R~7T=r%YnpCb0Wizh$-VF<7R*)!5`9(rpBj(tAfcueNtO z9vrOx27H^l+WgASd}jeiSS*P?d@SIQA&QGnW@=@n&uR$Wsm<3P{!Iu~j=Mn>@b zzDm3#R2@2T@MvU-4*1OaG#*{t~TG7JEFfBCK*YJoiC2if6)8$xa-C942a zZU&hcO5TSpaid5_wVOicSWpKx0q^n12rY_7=w}QR7!$=oZ|(P*#P;-1;YjH9)yF=6 z*98-INcg*)I@wbBLZr!Nbdm7##STy^;Kie0s>n!~k0dPiNwvVq!qza+UG zoxFs){7P~(lA)ZI@9p|PzM;Si)w4-MyICemz=`-(4Fr3Agr@gPwZgl%L3D=X@L`%- zQ8_rDm|orz?QKk82v;^U&inSC0*Kft?@M@6laJ< zJw}D$nc!LN4OHe_Bc{+LZ9C)fn~^`VyWMFoa&qF=j>~uM(HRz*1wIF6<3tf9BqD&E^0Phqw3mM}hn$1aOqRLg6jezqGaS4-=wDc?1 zPuVx_Uv9bUIXIHDqvlOQ%IDDXO!Bk; zKycbk_<&$NJVJtHgI#Y#(bI765rmPNJM0MLZU%ughrK?l7xTrujzcJ z@fIuc`k_ZD<8x$V9cg2~7j`DcbZvw5Hq~~F$}~%{r6K_rf`NJhjihR9kUMdAEyefC z8@vYf^2NngyWjQSqQb;uh!*fZ3=oZuD4D#yLz3&Zq}ju>jnqmNpsSL3JB}Atg&|)g_z~c)hSI5E=8QY32S&jk0pS zs4IL#4})SUj>tak2&9dUVPx2~!z*Fi_sXj>MCC-21F8rqUv0D;g}xC53o^t~5=Sug zju(ms*&cJ0a+774hp#9^S97Hsy)|qZ%wqof{p>0tJ^ClLWp`B$R5%@;s>-GO3?JC# zT#3mcCWxFZAi7{5N!sk7{!n{5xO>uqq-d{;*7(igL9KFW%)!~U2EkVM_u9Bh^*P0- zdN74+1}7ICrhmSJv&qZO(q<2Igd@LUR(W}edWZMzCGGjJDQagngOk~FKLh;jE2G+_ zxV$Y8@xPaeM8IpEhaoCQI0IJv$)fcLrS1vXROH4Y4B^x{pm0PK5|#U6GrHi_3SDEJ z&A4CY3#y85K6K;lQN(hLT|F;5aWD_U<4B9VZs>d`rD66Pc#T68-?D=?@c+M#_RIxtLepZYm^y z>l^Nokz-%$v@rb!b0Kc^PUgfqALG|@L|kXp>TS)Zj--<&DBLTu%e;-ef$>l4*!#xc zQ29)24X(_yH;P)|if6hIwRW1(Bb&Z~#r=n>IR8#A}|BTKtU z6)e)tWsG02V05GrW-{F#TT-w6ZrCC7#?91vuqW77*G9@v%PCNd@4vvob%zT@=%hOG zI6DKknlcr6OLmp5j{=*m=T{FG2DF3qq?rJ@^G%ZLu>5FLCIe~?h8A3HK>DqGC#KBM z`i}^RuDpcbY8*IW$-s6c#Muq&XiMkM8RUV5O*w=cVb~M`kqt$?k${O1`+{<{&Qp1Y zXeNhs&K3|sCWUuWO(px5TI>mgVv4Xd*2dGGsq^BA7vYR4EeSSW3YPPp41nXUR)1ds z;ECkw9T$tG*INs6v_uXsYAvG)Awy5_*HzH+t@2m(I*iP846DB;)b@12zu38jg9tY= zqm%U+oYH`UM)-agGm7z_tCaS~mp3m{E9F)_e1tWgh**ZqLS&Y~%j7m`afcUp%$<}v zL5{)Uvy6m1vRq~4BaK;GySt|<3bq(`O)H=U|&cbk4L8~If4jw zc!ik>VkX7aJi}oslESlfbPC0AS7d)k6VvoLgwQFo&6o7oEQytP^5H9uAM165DkCNM z)l#)_(@}iDn-G;z_x8qj#4DC(Leve6F)vRnue?t%FCo@=<-hge`jr4SMLx$luj>c^ z&38V3;p+C~88*Ofc61G14t9F0Am*{WAmykMf?VMU^gP|IaeT(|6K_rrBdOEg^@upJ+du`iBy zS_FEi4~%Ou<4o793pX}WqwPuT&|xB@W{jr4?~IFxGWi?jUaWCpPc~Uydhbg-@k9(f z1At{=>Gu$O{gacqyiMI`xC9x^IHuUFrDWf67SNMtf)_45SEC;Fi1;4342=}5U~0RR zb+7&-*7)Or#F|~wRQA}lNNVjKSn>!5RA1u_xRgf z@CWXZ%1Tk&ptCksV#}*kQ3xsOv+I{R+xtJgRE<0UPsv^97w_aw(_c!DjaEWqe) zzFlj<=Mhaw%ZB<8OAFDCYiVblbbNXL6p6Q{wD2H{K>I+rejD+Q)!X|g5PSCI0LC(U zJ!mQOh3toMb4@=gV5Z9^MmwA6_3!%R375rZpK@EEd$f#r@KZuC9m+Cm&B_LbIMC*B+FMokE6Q zyPz0vXrDyF6klkELZ#_5fKF-kkjl|C`!dRz4z5zlPZu&wqal@?Eu{Q4s9ch>;!?y$ zB2@Y9$h0*Zm3;DC@eMdmweqQAVXoD2GPk`G!or@k5h`b3p%OtgLBZ(BJu(ZS&vGa; z@)^I;5KPs+K3#k%=xkq&%iA|m0`lw$2HqOYR8;iM-?CYYIA z)+@j9U!MK6)ZEa4P9Qd5xM2Ghk05DZYNg!eSM`MQ!k%9+@r+&w~kql)G(dIc}gS%Wb=)hU)gZ;$i3N ztAwNTd)AXF+R35zW82H^2`-Qrk{HMNpg^wf2v##sq0&E;rw(zWTqb6U2^Oldsw7ma9ScQ ztEcgnx(4lO$v7G|-?sS!J?^iaF94f{6CHEOH1kN5x|t8DFbUX&ZbD(#ffVMc zl|Mg>)5f9ll2%f7Sez(W+!#v6>{}=Ey(f^3G=C^P@^V}8)=4=Rg5`v#X~7}DBh5<- zFF0l9;#QdT!}A1=tl0`xx5IF_j394ccJ<8%FBw?J6ES>4OSy@uVpH=yGVc=38d`x? zh^?j<>-%&sc`bZap7X7q*~OH0Ql3_;`_$;AecY?GB{t9gdu|8P2qZWfZY(OYREL_8 z!;ttTwv0mDJRz>vLR?-U1$0V9CrULp5UOBRd*R!fn%16>+I-nVesP>24?`8aD<5Yz zf}NjsDm3@~LJyo>0pj(z13(*1m`9GVAxBh?+-;y^hF1>)cWchMRiI73sB$kgT0x1@}M}HmlZ5r zeZa2VS;!wUaoqy)zEcDrQkYQrv#&HD5I9GaoKKo7J)&t)(UXS!O%pp^-M`%F2-iBQo4IPnlj;6dUdkK7sE z#mdU?DFFp!BmuAzum}OtaM*`dbw4$34Z4@w<+5vp?YhKGRWlHgdIt)zICar<;A3Xr zg9<=7();9sc_Q2!OEnvcfn~O>N@AX6{1UyOUW?9NL->aK9R@kv1LS&}On=}>jvM`u zrz|hKEIW>C1}YpNJ%|G~$tnl4#c}V_NFjrNkm%CvHEb8mbJO9vxrvNYd)r|hogQ%; zXo|o+1ucudEvLW`k#|$2hiSo0=m|pOs32*FofF_;inB}B50uB18veN}jgf*Z&1dNN z=2-k{IweW&qufd+gT#e|qWy_}ToO;Hvswpt&rR~w=9UCs+`M7Bz(<=|0VWDB;0Y7> znJF$heDVJ-eSM(R-${Xqwgo-egONas5;9sabZIEa9HVrGOm0lAbS#xe8b7CLJ`Gus zult(nV`2R)$r^TBqe&Y=kRueSCp@Pl%WEYKF#G<#?I5q>Tvee%futkV`>Krc@gZ|< z-^VTTEY&2^Afm6wA|C*5epP%qI5^)KDIT;PYJLbfy2-=W4h+_5zeOCL6j;5%`29m>21M57KAHm>XhQO3{etm0Qv|v zp~Bp1?g7+txs?5WH~Ev|;CZ8Hh^v`fvzpbMg1ha0cmJkJMqZkhkYVsX`-%Ix;f_ok zI+5t_g+Gzg_X}$PPUx6lI@=L!bfaG2jFit##k>N`=VzMa07^*k5izN`5po4nXH@s~vJYg7p@rW|&V zOi*3-Qhz0{7pW7EIS=s$Uz@Z+V%4?o?##3Qi?i-y$H!SrfB7I_A_fc-jng*EjaH`+ zFuy!N!hEn-poAa=ZW;3TZ!!RQ<%S^@lygai3ndh1?9qJL0?r&OAp|ufbXr)U)$T0) z3q^|cRMpM=O+$92kat34=wz~*4{`%6D0z}3ekIk_3}1(2vvf`OHh(8BS=#vPC`Gyrh%+2COa z{JUSGYCh;nf#TN5-!GlDI(gazMMtZD~&7Yrh)JGMB0F4 zzV&zNl*v6w_l1V3ZP}q_*T=k(g?*cbv_@Hl^ibG@^ft7ule>CGOEw|p-f=vM9vJh6 z=d2H5(m5{&MZD(M*cMZxwDdQw{a0Ha{6BlPkrit5m0@^l_S2k;tX*h1DaXY3@NFh|T}>f-5fYX<+7P0xnYzFbE? z`;q#uB=K!k3Qz_SX<{p&B}u*pOs7~^HDsnKX&ly0ur7HCW6N6PSKoX-nT?VWNyzMl zLnQEo6^c77?;A=={$usaRNU1T?Y$ZHaxN%ZM$?_5QPS&6;4QJ%r0Ln`dIXlB! z3IBhNoaazBn$P8#!`%t7)NmgUa7{QyBF(xoYn-KUA*i0KjGh^_Es&hw8f5&80NNZq zkzI_YZn&gI@d@G0)Pe&766hyopI#oZ@NexDcsj6D=cE~2H!YzJVWO?d^2(h2@(g@Y zUj<1ci4+WjjX}$Og+xw_VG`|n^<0foA0t_Px|^z3KCWf7avz7;xl!R$V&Z35u0f+( zLn$TM*4+=!e%SC1Z;)}`98Nr-kl9>+>rRi4FJcbnAi&hjlrumLEkiG;*R)_qmd834 zSQKEim+Fg<{JW-(w84ulyEz-N%ep59bkHQMIm@Y`1i(wUNX4vB)N>EJM%px3JA7;8 z{_PJD{T!`h`ToPO^{I~kllMU(f8q0zrMeks+gDOKFlU%Ok@(<5eE)r`l4$NSK;<^vP9cy(Q6coUcn4UhXu(Rlc1&LsfSph=2?|NYWukn$(eSb!Yz>F z6bh6x9P!3Ix{FPeaZiS|^rn{1ywZ`2#T ztE|t)?(g*o$8VneRe0Eev&J{sjeRt8$zanR{YCi?swjKqsr=WG#%j&CeBu9W+nm$C z>tBk|Rqxcoh(zJE#=k6$({a4@?6=}tgbuJ3Jh18go=$5 z4qeLzvw%2{`;W)O_fZANawz05xdSrrz+|*vlCZ#`{EVHag-GL>i)|(o;eF-zJ8q>) zgG4_N%u77D=LXQaz|5gU*CyQW(CsMq>sppcg2Y*^qY;BjWMi=rLd2;&zeGcoJEV!O z?Kkuddtzfr8knyAoXcuU!1OL@LiG0Mws9Q+#Fr3qMXm{B__MZee$!Jc7YmP*6D?Dh2u_P>-IGts z&h`2;fAghNMH|v!lrmu?3wFIk{nQtS>1WX;{;rhIj((pS*FFSpTmECYGs-z9 z-;`YhmqsK)SolAkKcYvFQJSLD>gT9fKG#ns_%n2i@8!gb9g7{e+OvQJYqePwtN8S$ zbb}>|VWOSP;N;Rc3x>5w<&aIg1n&n)nBF(H`Rf^C#5qfqm#7MX=F1MgJT^T4bHw&9om!A8 zsmm^g`$|fskp%NB?OwWzIU`L3}oh@JYtDqb!L~F}H z+%(JskKh&L=+%Q4M>FIxtZYcVe84dM=h`QtZ?@*Te#;0ykSYTgnTfrYBilXABC}Ax ztL6|FGaA>w*~pu4Xzoh%xNjR1L(3x^Jo2`a&$4x=88ArkgTj3f6e&xUSo48t6@2}; z*%x-TFO1ru%I<~m|9sU~d zJ(Sku`d*W)OtWVQy;qQ^p*6ZaF?{%IgZcR(lvJd)(5c>czuZP$24MaJEIWasqZg{ZxRh`*%0v+X8DKu#Mye3f6l7j%{ zKwAc0cf61KG?l|L2Cts)%lR~^WbiBzz2R)l;EeNuw^Fa49JxH-0vFHaaYOhb8H$Ia ze(45t)lJkx(^BzhS!X$GmC_z`b%s<5sQYOR}G=C5cO0ns!_P z(G{OyH{9WJACM0|j6!>2L&8EWh@6}J$k(!}Z5?NFLt%WGRD?6&V2wD|UL2ZP;@><{ z_Ex(Ihensqs(_*^YWmBQXfc9!X$3WxCw`&Hf=0pQ>PKi)UsDWl?BxxhG@8&<>_{e~ zK(4JZzDf&8_`f_g?2>`n=B1WCREGNets9rg$)~u7JL)(N2J;H#@JqT^&&KetzqN33 zaDP8u1<{DYUQXP}tHydQ-1B@q!gL>kKmCTmToPDKy+sFCH>x;DbttB=wl~BO)H

@*nD);T~OPPR&I`-s3Q@-zvVEeEYlu^@82y9@%4>Vhy zz;Dd4_)NOGepObyl>??R=+><-6=PR-FLxMomH!V-R{_*k+jN5#C|+EHJH_4I-QC^Y z-QA13YjG>k;_j}+U5b>V`NKQke>0OzW-^m=&+c;{+1<0t^rcf~A1-GF#BbZ}?T6l; zoa}plK6GJBu+-%nSxy+&QV|O;`@7aC6LBp(!kFS%@@jik_~>d!V_~o25T|=>a(H=% zIo_Ug#K4NJ;akIBzjrm&T7~PmK$Wc=^(=;aQF+LCpYK;64_l;yRvdUG3juSw01!(N z0y>9ne(P<{LB#{vPy5Kz-?)9ZB7!Ya$}=wVPVmz27pk%NPH(-&E^vv^&*u0)w| zqLujYp`6d-QZy2L&?H+Kiw>^S-nck1LUDTo1YE`GTW~KgOWF!?vZ&`^Tm6+35k|wf z=AE8rL63Ln4m>SllzV<&kBg%3b~Ao>X{SO=hCK_S8|(hJ#{K~=lGwF=4V({AaL+Ol zr;0>qjNuu)X3u2XIF!uY&@7rPe&oPA&r2D!Or}gEIITKhS6ln9g zcc%3 z37udcZ+>nBl}$Z#-m08n(s*QwO6s6|W$>iF(o(iCp-R(|EV>92WI7Bga+Le-7Gyl%N$LT;|cU!($R14)bnFDEVW*4F4cig8}N-z3hRBN#;66~ zffO;`gl}(a>K9WhciP~1kw&q$NY-CyyZs;9(R0cytjiz7RTH!7>~ZuXf9}mHFh>5uG*b_~?lL2;%dc zmVbg+D2x{eHQLKA`EO6odOrA%-&8*6@*8b{C{ntFp4R zZu)|buA4ko^G#l*x{6iK6r<7-bTMwjU9AHyl6$aGo6i6b^b>0xqca?BBMvOS71*z! z^G3{SIYq zx|o!tv!^g3gVmu*s%x4c%{tplbN2h(wz*n250_-{^k6bL2mDN1<*|T}|8y+m5cdu` z8$Iw=R+=Jxxqd#)qp0}nTk?!MO_5%yWyw|XNvxd+G9Vt-vUU#_HObItL}`?i|d}3lX8J;=+|Q zC~1^112-o(Fnk&n?-jQ18qXb_(RrRaCDD}@y|xDXh955Xn>fd!aCsiO>$iZhQf3mK zzobhc)vVuHT1|A<&`5_Y$*Frtm3V5CzEYt&V=S5!0%L2?lEW!uw|sexxlM~*JsH)i zm|T`obkG@e3~tl6b5x}-e^FfFGNY=9xxaj4eK{G1)0*OxPE~$rjTd(bQM-B3oivWU(cAAbW?ZCzR zr7b=r=3Iex>$}FVEx8MwvMPqxhls$Lcddrahl{+OWUXkfMWge??3&44xSL+gJ*WZggsnIXV&iIyA^%Kzm(6*7V~Me~qER6ih z)04KtEiRVQn^AKNg;KQwrL(TnUG+Uy@J>I#`Ei(Gb(&6k0n)$WxAqz*JcvT{DP+?j z^9(P|EpnKre6gAEgZXkq_3YSUO{|0XQi^x}I`1W@HdSOo)$lh})lt3HZYV>3Un@3V zF@8Iz{P#I_&6s7h#Ok`q00@tgxXbbE)JV1rl^1amk4gQ`(mt3JTNK+2-m9Kul7494 zgNCV*zO>5pX_Hnhj-H$-Dl|w5313&VUFXB)SZD@%TZINb5sK>F;tP8FGj^md=D(Hr zUSq2USbA94`|z7pWQYl_qU*&;^M`EznP*K;USFsDu^wt+NqyR_3ms7Z7MC7>{#z&zIKsZ`C4zo3Exg*wCjC z(m+IE%%-W3T*+x8Z8eO=CKn3S>yA?A4 z1XB_{(L?(3l;eiQ$P(7onr&$=wXS>c0S=eA6mlt}A7SSkUeZrp4A_woI9Fi2(+`<$ zw{!ZAFp8!}Y?j~l5A!SS{4x__ferF&qSEF%#8q>$qP&72kofa^YrsO?Sq(~c&@mbP zktB0gALyWjq}*7f5u;~$Mu)O<{iTbRZG|jFHOUGZ20%wjfsK)%`=ZXJNNl|&ERQfT zuT*YPxkm56h;7m?S1!Eu&574VzxVLN3HQU0IDhPKKbj>ldr9$cXEUrn#A1&70}Y&6(Bf7u&>axNo$rFD|}V z+kxKtF3-ih)iuw>-F>7+crf}ypgxG>2hwAWDMYL41v$M80+KSjag*X5wi3OU7A!7v zk3k@b*7eJ$an!YO%;Vo%%xOX+LYvrY4T2AnN=48ZgK#)8%-TFBtNJ+lWx9G>kbM+y zkvBg@t0Yz%u)5InMnTsMQD+a)+}oz2@!E(58Wn)S4i1rNPp

ztYyKy1H8z0e1vm-Iy!z)0E<@ zZl>KPcXA! zY3ZehDI`qMudf*UWJy&k9o|o~F4{gysbcx%8lq3GPux;0@>a+K(W}21YV@ON`yxI_ zOjxUM&Tm|ja4c>^p-V@d#?h~WTYPeT$dxKKuy&7wU2bhM7F!&1pC~{Cyi|X#(`@0U|bc5_dkkKOdMqdP_1U^+Z zSsPvkCWV)t(Ekn-w)6jyRdiN@_o)$@b0i|f6?te_`9}BE8(0iNxH}fY6PVdEWl-o6 zez=N-^X7w$lC1J}v4l(26Gi~IoB`k#nNskA9mWnduD6BJit8Pf zTLdh^VaH%r?MCdI=*|C_f?tWV5j ztl-U#;5#No^zZq82K345I3B${-72`Nwjz+jG9WVXS!L!tP06 zY;wstW|;kPOV38JX?WQ)>zvZO)rutzZ7~XjZGS zEtBuL*34S1hp~yV0B{M++)TmDbUY3RkDC#2{*1Bk_au|jNIsvYTs-gR1fXk4;?`be z;?%#~7u{xDy5IG15H*8Du-}CAY1YWoC#n5e@)(KUH8aTD&3XThtht^nRJuQZj!+WB zBQq2`@B_U+Uv(eDh8BO-t(D~$aM#&taoZ8mn8B0wf?v$96yA=-Vx&D?8=+eQYfJx- zL(x_$m32bVG0tHc#^5Ds8*lkfxKEiSV^d8fLw6BIJM)z=36+k0b3SOAFy6ab) zW0v6F@~F>;=&$?9KjtTX`&FPkzYtlRqNK9list5J3Ykq(<}uq|o0xJtAi-3O3O3X8 zn$e$f_@VmptK?$u4by(BKcBJHq9!!K0N6ZAgy)fS@`r#hk$A9V>}k)pnN>jURWf0HQ}J2yFu$^}=1aN+c~8$aPHbH=2u31~*T$CsPg81lRjiL?A> zf`p(VLj0o?X>#!^%AeY`0X4U3HK-*rYtMaX?zPxa$7J0`^4tW+6Ke7rQevw@9ZEyh z4}n|Yo}W^m?{bwvaMBLwDh?mnQi>*66l}jZQp~sX!K)nB$HN{$c}%KEJvkKHQ9%ol z^=Ah$d5&;4oxF}ADTtz-N|+Ot`D@)3PaE2K1b4*RsGR1_Cc)(Es^z>%#xCBC(?!0Z zlkTWP#=a7nHV`dhIFXVrb{8{YR&s&9NX_3 zWgZI;q?1m3>C8-z3sp7$PEDQ?U1UB}OLc#$ythcMnl%|R(AD_uMZ#JJu~opgq9IGY@y(xS=3aK^{gBagYU_td z>Ly#f-rEM;O95iAfi!z+>Gap=maYZ@17S&|b0s;-9>YuECvuUt%eDuVI;@b2z?tvW zS5>llLvd4^?e`J{;)O-F1dua?<(lbCNG}U4Vo6z>Ut{{C;#Vkh>`&nrBQ;`>Mxk>U z|LpbgiB<=)cW%4-rG7_i?e$0RXd0}4CzhY^!TnK4^vehEnN5};x(0q->~{d#P4vki z{^&@bAWBoUZW+8n`h9|ntYxW>0=99J@f9&9M(#fa^9gyCcLaqxFxqH2 z1lSlS(2lHj_}9^zM{qG1a#Y8N`-}={Cf3xXif(LQ2=2VIipZ*rFw=Ql)ociFPGYTg zBSDpRkc;Krh-d${(J#-fH>?5*Y1j?3`F^D?Jrwf<`tnd??K|uZ$(TbKUmj)W*xddm zIQn4W9DBZrN^iaUgPoVq!_vlbatSQQc}+{M-QDS`;oE!I)BfW0u0F5FG`Rlsl-tT? z)k5p$kncM6URmXp*74YwMJown-%BAYD>Kuz>QPls7xl}Km)k@zKe0FV7c0_b=wZva zVERc`K{s5_lDe4yoZ?dt$y9~pN|wUB19V+q$i++9Muyo*%y#Zy*to@tDAMJc1VRz^ zhsi!;mFdpq6I{K=11!!}qzJejIw{J$=JWo!)Gs;aaQ$Q| zd_|tP&d7vv1k*qE-t_)TXey-&HMu#Pq6Wy0VIbjG@8k&Q`qiX7mi_U3?r*!A$JUc% z@guvuDQ! zch#mAt;#3A!=0svI;Yy#qO!{u?~F)t*E zhwhjs#qDD|9=WWi{-p*O>8_Lfq`qQqoyzfzf`uus|E%jmz0k3+O-+*XX`?Y@(Kr~G zvv-1gMF@9F_x$SC2^PsMHVSN3El^)ew_*< zbm?#f;_<&Fl-I)Q3y^0g zJz8dKI2o<}9;JiNh|3dYW0|k=)Rc)y=H$ms@O(tQ82~ht@K%eo^CV-I*Xa54BH#cP zYSR4-zai0#2KA+`q%ZlXI&zhzc`R-f>C8MBl}Rni&lra78;kYG=@M08+OIu^zIZS3 zTPS|B$9^6GQrI3Z)H{4`g4>02jH39KE~ZBBxknzq@7Yx3;gkuW8 z{YW~1?^{6DkqK?^@g$oB%akXk%`Wc{RD^yhntnz_ha<~pwAM8>3g@Fo+g|2Mz;kXc z>P!ZapzYG zb@DY!K(*R#!^OH7G;GP5ZOoWgO{QJy1Q)mV^6v7Shc8Fe(HPAa^N9MxNP4nzUs@HrwU$HG{648-&H>N7aJl%5vJ#%y zXoT-BPIE$bvDx)(*!-E^qqkfe8aXf4C&BpUV43|cREV&g=Wow2*tM*XodU|(2&(-D z_Tvpls{Oxt2M%JGP|4y&3>K+zuS^?{dHGdO*t8t?(OvIrD0ls=GMNuo*u~Qpu$~^ z39M(Xoj{UEYCspko=yqb`ZOyWskB&9Vq9V7BRRwG5yp^>Lo3I{Yo?x@Uvk6lvdXS) zUY|UdwP*cHCnHR6+a1$~V~87Pk=D?UooLjCis*FVjphG0;`PR$3GZzSi% z-WHb&0fsTPW_q7q)g4H<8YL317cOmxk5);GuAi-JH%H?skbVjFYWAS*Rq&Cwe|F~ z=8#7`w}b91{pY!BX9nS}-m_F_i?)K4xsM1g~aah=|{Aaf6zY@s465@01uQ_T>nRiGNRL(I}_Gm&ft|1DQ8)H$;0a>^!W zgvtwOUDyu>reVJS5xda8wE1BbF4XuA&8D#>Fg#XEr{u2m?AXSyD|*_2Z1EE4!d?sX zLcr;veiiY_)O*q27@O%u`7M241=psGdO!`lnN2~%qbAqBHYm`z>UuZW;ivmUv+QYS z@La?5lWG=fqS!DS1<5g(EsMB7R=u*9rvL$-BCDyWFjJaui-(JbrkwV%v4~pyPvB?LL)br2iABv+Oe7MDaNdyIlZ9w}zlYA+G-l+~{E`ztIqP*zCETIunxa)N@% z%361EaG>ftLQKJ6pykoAv*GmmT!-jm?!hF5iTw7tUzU}{7m-g~zpSYT1Mre3!{t!r z-~M!=A8|-1(IegvV8JjHi++jah{}&84%$DN0sfJ0DKL5RX@t1sT^XYgaKFH@8AApA zScMo2fyTfVaQ$;UoGlx=SbI5FMp~MKEABS06=o3GY^SX8R)L-HQV*%jzN}(3z}i6B z?`Vj3&-sNc5mOJbS_ytElSvC$T{fESDIq4k8khSaWqCU9L?WdSR85fO;pX4X-hBl# z>BqP3DW0nArnzf88d8S-DlhS-x(48yb)D^g=PGab?B}IB3QfBy{&|baRP1Ot>jhWQb8= z#nG$p`r(*5WmD=4Y!I8MAL&mULFw7rc5S1Zqxvyes7MNfbJI8o;jW+Fk**i`5%!eh zQh#ePjy$;F?A3ik3Mw$xmBO&s=}F^lpeQ-_h-@GAL6sVvp|JvyxeSmQV;b^*)B+;YCLWaCU-h5Z@0<+=2b-kwehMI zayrJ$z95IUhw}SB%PL@+b+B9ZfP6BK@=U{Nq8Lks*Pw=CI4&XJW|&$?&w4C0B$>-p zN?$X20tZTFHIjSQws+M!2_8nZ5xgYJ1~Xd8ooKPxg|xXwnQ4K7LSvVdfKhhMw5$E? zN?wWH_GGe?a%xWL9g|bRJ<)Bl!jL>+IB>hP9^2<&rOp}$eS=0%#QLNY?Hv4DoeZ;R zKYXkb+DawHXQxQ1BG2e2z%S*Zr4vA> zZ;HwJ+I`VJS~Fn9COaeWcOV&FJ}-K|OoBkYW}p(cppSFm`ir+p`_qBvd75pFCfr9X zg}COzk`(qfeK!oRxzw|*+l6)GtB>h!X`6<()EPZDpS&t=P;cswH2P5_Jzw;tr7;F3 z2=}fCC`j6Tp36wq1zdc2X%U&LJ||~AQSI`HG{152U(aQR_S7j?z$d9= z(!6V9y@%Hrkp%dJ3=UNk6W{_HkwGmj%`f*@W7G&oS_OrCou)>}l;1szNfS=}&i2@( z@Or9(>UcTnc@w02^(Q@!d($z}EqKDPSTLzBvqJUx*7kFTF!wx%-3@V3DSo{NzrQe^*fjN0W=xcd#og!l====m}NZj;V`0jcL1>Mie=bY2SL>6$Ld z2qSM^cE$;Bc?gnig+g7nfYS5X!2w)RiMEVU8}*Ot{fQT1MZq+yyM;?30B7&a9@SQ zSagd@lQOpdM8*96z~|N{fw_nsy7_EXlOjDG#g@$CM1THVQNhC9KtJ<9_g0J|Yw|{T z5I2!Kz*@L;ZWtRo_#&zjnSm9|A%IbIVQg7CoCo{1$h*`F(NFa|22|5}AHbeXdEFlB z!EVL45yEXzFWg+x@+e8YFT&-vALg%9RS{crkI5r18Bo_j(m`RB4nc;s3!imXBj6rn zqF3R_jb#GAcuk2+6V6P}^oE+}5)8@+}eT&mUI0 zqrao=Yhq(h;xqW2kV^)#C>*Kl7$In^+Cnm#7UMdxYJcJq9$|XWKLo6YkZM?uA1TKp zgMhoBC&pR}vKrq?BFOtgVMKD@4;i&Bj-Sk&qiIo@ly@GrVZ|?bpSx_+32s5-TR}3wR%$j`&ge#ijHsyx-E>i z^^PQ2;r=(Z@Fnpe!{$mZ<6$%7+lzS|iBK$Fij_KjPvSxVFnCRm>Qa2-=X1|51pr3~ zxZeznOOruN!=Y824cztswjVc zz4Sx2RXdfgF}=%1%EYo!jWqZ)m;bCQ{zr>p5)Z%DdTtNAz%dt)wsNXibcFD!G)I1l z&@;V+$f0UW$8hNe9*p0G4ACn^ra6kn70o?xLd~6 zwk+BO^lV4qq!c4EY{&s%(X(Qw2zz5uT0=@mDcsJ6L%=pe&%J|H0>Td78mXky8S!gc z;9w>8c*m=M-Lo6)xJm3w;OQ^+r(iEhyOniB#(uTMWtuny8J+&yF(tqKkh!z|sVZ1H zB-Uz@lPiY%eUWyx2$+e{fxPy2oMy?7RmDc;HS){UZU&qjj@y!%u&~Uqe2V|*)swyg z-nA_PFBbNz1?U1w{krp0gJ1T ze|83SXcYIP?-S+0WDrdJn=;jR%t5i5RB7re!y8+Y&M*?}$*-p&yOz=UJ@YQvbtQj{ zN5x*hNGz&xnNeR}G^+0M#zS7f4S|gbn)}LrWpfCbsw&G39FwJ1e=hp&9svh%e84TH z_0zu3XR;X&XAd+S<_*pTE_mYpcsZuc>^{u9)yp|^|EQXco7QCwD_z>S%(n0}Q`jIu zRLK$tNlDa+9T;53dT#~CRJLe(A#5v_1JPiWDMd58-QN3}anxu+4Nv*pyWgKs9jTtG z{hF@*c5~#OX<%haO}zQ@Mng62TSMKa-lFh;J=pei5HZ?dJ`1{xI_u}Zc9+(`H7AuD zmZuBn1aqBf#tda(ZQQSPsuumAM{&9Sx04rx3_ zlZeg6T3L-wHg$ke{%Z>NB;`d^jRB?Kd)b3jS&9{L!lJs$RN}dBBQB@s(z)2G_M_r+43phkPeZf{|rC*Aj? zIif4rY(VvIxc?Lw{+S}^5i^x5K&}I9FYvNtDLcR&qCN^2h_I8X+F`E+_g2^jG0V?p zkzmM$aJ+N=YeRE|GJENHo*D*khXwDr()RLApUfLiUS50aaZF_{065dJ&1rs^z}CS# z|F7ZxnFp!`lnvje_QTvng1!_{-pv+%1z0R3CelzdPe!K7P{Py{t-S4#`qWK`) z2PRH&b|!Hf7;f0$ZAl0t%szTVI3mh7ESw&40D;yw!RliWS^*Ieq1(1@J#^@h{{B$3 zk8hNINSOatZHg5I#ht0l4NH3`4K?c6sNZr}-c2a*lmgJ92{@GpxvTTw`qT_h)NngBOYNCRVny{#>` zX~7K|jRqlvgdPr~`v*iI@ZMgbzQJAya#%=YD8gAEudjzNFflRQ!kdNg3Jym6kr(D0 z?i&{6>q8;f+i@2WJe8QC>F~-1M1DOVA;4ufY=V+j|hqPbBB3-EfC5cbERKld+g%f2s+e)5^fQ|S zqFgaTSDKR5w3op0zQGKoAffe7`I~>v+KN3HH`z;L;q;g*=h~OBO;Fm3EDi~ZA-FDLv zNtBq{Q$vP*uqctzM-aq_tna)$4UFtB zsJ`ey7Hz1mKHeD`A!<=~e6@;*lOjZ@9H?JGjR1Bcs z?Spz~!v*s7Jdqp4A<#{NZW1&NsKp5!EI_^U(Y58GQ8!Rah0O5%BDS6%nO%Cl3-e4S z1YJ>&(pX1_Vsdi?)X^vIAU$cg{*-jA$fY|rSYgN&xv7Y1l92~rj_92zKKjnP{abeA zM9vsY5pMmOG0TIq)lYkKOzsH{8ZA?>NvQ*J(v)HU<=AoN8Nk^fUhT)Zr|3%6Ume2U zU%j^U2`nSd1r%R3>Nt1JLr~cI~sX z*t4%Ng=uA+!1^0{4X17G8kb}^=?h9KGw`|AhQ&%g`l~mRVW_2Pu z&C-fUr)+5ee4<0Ga{939CN!Y3^*~iNidRJfmfTDbvC{S0i|1V zQ9h|w)=QT__|Aty5^`bzrveFOiHrClk-4q3%#w znA@stTgS6mLf8nJC*4v?D@`jmF|#tTargXu3u&k{cVYijK7X9H>&=h~?aWLm_0V%p zv@VfbTdNG@H#ZZKRkumYq0S(Cw9;9XO{?GrYp|-Z7sa{=zdS@hFm#>C{<=wNL?RXN zEJsx4TYX)yQ;W|Yu=lH-k7iu%&il>j8UU*Shh$9nH=T;UoQiluP%Rl;a8i8XV$jeY z6yr3>zcF-J3tQPyX-$I2#Ni*GWBgtVghq63+jRG+uuV0M8;jg)@*11V%hupf(K_Z* zB#XqpxfA`BLJrq6^jpY%LQLU2x;I!m7FKirGXSHHVxFou=PeK3Vi^NA8LSa`!nrDs zUV;{+;9w<`R2lB^YwId^1v+haR;!E3TR?-~8Uoc+-EMx5FTHBuh_yVvMF$#~nIF`a z|D+wjyb%=*`x0@dZgneLg~%tV#ebMRdcp)*TJbfI5!GPE>V@ZB%5Qym=8Sev?3(me zOXi{0A`f<6S8P&`*tU18E5_}yAZHx_Upk%!0ziwt!T>8bv)+EX1SZ3IaQ+B%sYt;| z9L!nD%*BlM>%Nooi5y4rW9$6r7v`7FzDr3jfmC;B80uv9I~-kFno*ymme8%`rQA=; zN~g?@j?hht>tU?z1R5@puM{6ZRmf7QkVtUq(h#UWIL%HTaCV{kn>e_~_%2rD;;!n7 zuucJ`b6{<>`ok;q!YzibOGC^VG#FmI239SAA)N`|kdbT?!8rYh2N#79+bPkW>0|e@4@fLjO?>J>1{hL&8j!-QXnd9!|$ugz3RHH@amEQ*)1qn z*aunt`pUI&H@ARg=2&v&9LdDrdC*m+g$=I@o4D6XvB`0*yEH7my))e>mh0cO%62gN zp`m~CWMM9;#W##gATK7VlnuhPq;!c zUlRqYYxdamdS?f+_@3{0?6BST=l&@sKv(|v65M2Xg=Z0ma^c=P@{@`^?H+D=$Eko+GHpJ0&y;4mc`i6hLx8%meLb{EM z?P@)r`*3Va3;i{Zfz4iZrzCzhaGS%%F(CL^Y+;UI5?QObL~Ew54)FjIr)~Lq<~N9z z5q9{|N)r|Ji(FJ{1CJh&$18p)1}c=8h3sJqT9%eZb)K!Q+) z;g&vmL%n(~9~>6M;?xxSbtpVh20v~E3wt~5x(yPOQoZ2oC%dKOWZxIp@(NEXRkTUM zvG90iHj#d|WFktwf@WJIBy${{FRz#GqcK;MHoqNf)i+WbOx1Kp-84bA9bGRP`SJE6 zYR$Ejg$YvR(~b9zFeQvXp9P)q@R#R#mh0Q3`}{fwH=rmEtA96)J^1u;aX^hBj|5DQ zKGnEzvD&Rb&Q#D!hX?RSrOWv5JO(6gfDPS2ctwAF3i%TOG0XrS8#S?Dw7poYY zaI|flTINcY!>Ir>chZ=W8%c2`}aT4FCWD literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Yes go.mp3 b/op3_demo/Data/mp3/Yes go.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d3ebfb204ff05ed2f72843bc6de972953bf70669 GIT binary patch literal 7174 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%0DOQYDj-VgdBFFKxUy7*n%O#dA* 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 literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/Announce mic test.mp3 b/op3_demo/Data/mp3/test/Announce mic test.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4940e78f729d49539f7c15c3dcf97db8638b3b2d GIT binary patch literal 21123 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 QpQI!=sOv5wJxncS0LK-96951J literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/Button test mode.mp3 b/op3_demo/Data/mp3/test/Button test mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d2d5ca0bd566c92da334c9c0387526cd148290ae GIT binary patch literal 11249 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 literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/Mode button long pressed.mp3 b/op3_demo/Data/mp3/test/Mode button long pressed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..01c0353ced649de44d961d4d2ff5d685dfa1596a GIT binary patch literal 12817 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 literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/Mode button pressed.mp3 b/op3_demo/Data/mp3/test/Mode button pressed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fc565087e42566a78340304755a362d96d7f5514 GIT binary patch literal 11406 zcmeI22T)UA`{zS|fb=dPB~$@vp(sJn(2La2d#|EM2N6Q=(tGbs0Rce)DT09XE=Z9g zy(=m`cawK#_MO?;cYpit&b;%Vo!^;xl9O}Kx%r&${ho85xrvIrC@u(7z$CglItrMI z7$($Y)D@t2#jKq?J)qup?jBCAPobiMa0x*%D37D3=QBwmAs-(f!6(l|ZSA}TUELjo zcy(2DMKB{-F`=l5w2)U&*VNF_Mat-^Xlht!=^?c=brdW#HPnoBwG?2OPK20n_p^E` zBJx;QMokv;i47Anaxz*9YBCmbnwSCq(@AtxbQN@s6p)y1_?Qq8hTW6XR9DATA7aAL z&=4f&`pnPW$-&VRDq~~y%+AFMs^sqK^$e;bC?m)Zg~8$C0@zVdD;F2&fA8mR=V9mW zZD*@1r>TKC2?P`Rt~ORKz=`EB2>%$z+7KiU27^Fz8Da~#_;`$}r0@xi z(IPh`i^PlQfzd*`j904->ouW5EK8zB|vCB`!1A|@{%3oAQy9-d*f|C{{uI?D9Ybj95;p9&%k8t zLAGI#*W!4xpsrwEGCwMA(_#%W6|n+f6H;L`t501UL?8jIYG(53z6Ow9V;hkB9;1k%c-a7zO&~KMi?ci&>Ui-lT9G$;sK=jF8 z6?VYU_6x%BWLd(~Y(&USDKpj_XIMW$e;j)p)GZtjaUjt)-2Z@;?q);er_2Y3Is3(1 zi0{k;Y>>R$DLN%LiYP2Ik2x~q3eax}i3m2>o<1pilboqy*wf`^RVFl1>Rc@sroBrj z%M@yC0RYtr?pcU`D90X(p0^m_!G+;?zXC4rJFnrH9Qn~ZQ_6=jfOyi&(E$1?)phs@ zJhPl?C-7M;Em!#JF*(KRK8hZ?b!YElZ+A5{@nvc z;1U4dvpvOHE`UqNeEx2?R^X=+dCL`AVJG}ZKKsL${9K%#ji-`-1h{6JEqH0EU`FG{ zAA^XqpiX0;kkCi(kM#pr20RxdUW@WYw(gBb1@#6mHGED0Yaui~{3^$tv!AaDZ_|~~ zg^~8H{~DOZv7kc|!HA%w`B@0uRQ&Bt-G<)Fv! zY7kWTd*=MQ6P(Ijn^}+Mz(7Szd{`QvmA4JOym&xKI&o8F`bTlfx4_FoT?wc>^*4hR zpAElp>x62>wzG0pHCC-Rr|JL@7RLX>V+BDjhjs~wZCkeGv{87nXnL|seT3%aPDp=O zS=*|Qh127@0t*7D9F-=ad&W;4X!?=~^ZQ76$wdl?F zN!qDmC$Kazo1tGY)X`Z0aRr+fB|(nepCm%NQ5;7&XT<_)0bgCPcv-lEihftG$_%i8({pD$&3usj_N zcjUyvsY6dTck=zhE~{OAoRCq9{BHV3z@Ijw!_Os5P+00G0|{=$Mgt8Ml=3bTY7H&R z@Zm3{iX{oM3jUbKXF1{xvK0{9T0qfJyzYz94bLL?;&9vI@@uK&5eSK{_~m#MJk`%F zMK=jtSG^swz<6zj>&C}bUtyh6U&Hcx$eA~X3mVu$oj)?1vX}Py$v)C}@&rw}MC~zx zwVV;l$=X4_G2~loXP!WO9c{p+@Iy}Svstr|woVRxYd(h(u9?DJ9&OMo)@l+4udwth zFr|1b#W$-mH;Q(%nxkL~q3uYY`@^}g-Gm#4znUt(y~xyt?o>5y?Oo2*U6!UKO4<<9 zc-)~S$TE6!5zDxY0R(`epOhNz%xvA2ZMhcCRkTi1syo8{ZWZ!0iQ#n67Pap6c&u

Ch!Z_1D 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 HM{55KPD_fT literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/Self test ready mode.mp3 b/op3_demo/Data/mp3/test/Self test ready mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0b3a9c1be3c3aa24d8b929b709f8d6f14823bf22 GIT binary patch literal 12660 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%0AC4Mx~ z0v=5=jjmd9kf!})m-AR2I{^E6?nQjXS(5&bRye%XKs8lwhMpr74G$HEB!1_zuyBEq z$}oUZ`PJ_)iPJtNnv5#a8C8q3pFso48l{VK4vKJBt`}@qnYEfLnqs|^nHYyDqs1QH z#~ZWD+ey4=&!c>@EU#xaFIi-emP-VB1I`kiwdW$pC2;rywK(cWrP86_H~ut^iD{^1 zx7<9PfG&?IO^HzwExBZmH6FcLs(PfPSd7OnC9Jlng8&O8Dw>*@uHQBaW$qk;jnfjn zD_210rAm>J=Gbv!(3)&KS197jaN?HwyvZIEMf%##cd?CID0{lFzCMo6W_z6tm7cV* z*io)qqlq$K)5IrL{f9%N4pO*xKpwz-rrfxOfYRW~0)XShXiTqCukY(bR*B-Bo3)oSVoK}yas2xukBN>&PggrC!vwO8w-V8qN-vJDs zl=rj_!?=>h5a}bgbmtT}NH`b+`pMU)&Z<&IsCEN7iqs)MU4yl0U? zUvzcs?p8oSg=3l4aA|#<$=B-O)EZ}I#utFc+`j4g`2=ojE-l$;Pu=0%kR(!bg}e!1vSra&V<{NF5?!^8gzKgsKRk!yM2FIu+s{+_U8C9YZ3b*2Y;3Yy-i6j$6N5yn231FsOBbIF zwgQeYEMaLPY!Vu1@{nAl<>nZEq;8r~X>+DA5Ev-L>H_wNemtdaUrbtnEeTqcXqzjD5Hi#!ylL=xwPl`BTB$YjJr7D9R4MJw{j+^Iue`$wLdIiPw9OCyIZ+a3ST@f`MU z%4c30=^#9(;Xe)_R=nUinG_*&gBLcIX6f&5HTr*K?J+iX@u{zgbld;7*=E$bxpA|) zp{tEdw#SYJ{z$kJhWNE93-u^ziH_huC&9cvj34Ak2B~{K_DCGy(4m7COme9K>YOuv zr6Eoo!$pBv795=WGomI_#TWBgfK?D=A2@>nGSlUbcVWHnQbbN3VIXAFQuA| z9jjd0AJU7LNVprO2*65#e^fwlxs3{A@z*%8y**f899ME-%X$bOSm-g3!se??ZoOr$ zN{1!*G&gm!rgI+G4z!pZ#e5LDx>UV~ZQA$BHO*r!toMyimoJ!sHf43-biy9T_nlT($Mf6{rPq`D7e89MH)wWU2r1KorWx?cxgAdFIR z=cKrmUo9>h8Akp*p}c~snSw_b9Ca-}$$+9^X1{XIou7$0^$pL;u)O{z^GhV329dh= z8F9N)>4X&SmK99;6KKkF9r#D^paWR|XXW^L$ z8(J54JhjbX?55HeGv+E0H0xDrTnk1ZH0f;4E~U(hf+3(nE6V|e+$p_WL?slYLD;x4 zLuc3^^RaKkN9%$)D`x?PMYG0lYQC&&Q!y30A|6KTiM=M5REwiv24tU8srUUuF5)4f z$w>=X_!Xc9N5GSqv#U2UVp5^WWz2Uj>Dm2ZELX z|8@j1-Ep)%-VYcnoGqpGtX`w$8-C&9licTbM*X)7mOF z$KTXSoDiGs>sLjEcs3juaC|yqaUgZ_28Gw6{S60$VOe41TxIuxal z^5vi_CVMe=AX^4?1HvU}x@c%!X=i}L3+IeU-1)zXj{KYKsZDV4|Ta6We)C+?ybUJ7xGocxd4lhnO7@=*^HL#MI_4HS0^T z7l0f_JLG7ZYd2;jWL*gz6&e3~xWAM8m`-|(qB5Po+KcQDnm6hx06?ZIXxgDdM&Pf( z6t-9~xhAvHPDhOeE~euKIyJE{7hw zxPJQsfq=E&BH=C=F$f3XeHia~pCaHe5n^YINHaewGvn|@NX1@;NpwBJi#DvsmBi)X zKfJ`fUBx;$K`IxYAHUtB!WYU7Wem7k<7DPMYR`@O_LYDj+gOG& zR>QH@79o&GGs3c;J!b>_KI0~1W|hsx>ycgE5WbTj`5-MkfJ)3JsiW943<-BYAMQ5W z-H#_@)tgDAya(V#T+PC&Z9(M}E){b!=2(!@h03QK>$hAOXfHeU#B7)8!x*xMV}r7Y zS6+R#s&MH6B+r-@uPA)WW+^QwlW3{+9)3&L1|MW)cQ`ojw4~G1dZtFn#SALcW%8kp zP)>7XrF~%Nm?{hvPC&=Uq=J^%)NlBXUVa$inEk1e_1;`cB9L1MAuEft+$lqv;hKzp zVs1xA!P5^~)w>qso0nhgM%#qXQxI{<X}f{ z&@BMtO@>i=Y~40%3W?Ujn~LMXkG}igucLE&OH0bb-^&PfI@0t%w_y8gtO^MOnp?+= zWTwvV%SH{D_YiXx^*5-!M`H}0d3ooKkJ^PR#fLI}e|`I>2lsv{X>xjaT6+AHfy_`mc`bdBb>IIPQ1@uJGTle*WRLMdAVQR}Dv=<52$2LH?;u}B~ zJQ)>j{bhTw6LEzR4QvBJiUrZ7hRJzj7ZJB~$0lT8R_b8&vF+5Ayw6qNATert?&vsp zZ00Pn7$Gi&xnI6f=ZiQP!F)K?#_*|FLO*GWy%CTmq|OrWf1K1!;FxUovgPUOrWLvb z)Av73G3Z-GkX9~xObc*$r9bp7&Bx}&#?RER4iRr^FecoU-clc)$0Om|fCHpA1#&4t z`uu)nb;pQBL77D*z2GaY`>HDNVAWzGzCH#iCYGb^CwwI$dDJCoJQMtCsmWinj#~Cu ziJ$EJO!7ZtQJhIRnbWsBuKhqi3S{Zg83b$;JRg4oRhXII|62JZ5-1`N5&fUnzy;4u$iPH_3=pf2}F*ss%|Mn-<&OFymnc8*)#-It^*#!PQnLI2J6k)W9qCxBMBIp&z z=Q0Ndf+>TBkvrIcU1n%bIkpVUWnW35#ka&W)YkO!;lW&5(Io$GVR{{`-^<@MpfsdnfU?;YxKsmq?v0gC%1MQr77-CSFHLP8|Q&NJSbzxbz> zcI8E2>j}$30){g=@3bglw}B~CK;hX|g@yXtS{GTwq*n%6(EEpYB7WD|HL~Ba1|x+# zVd#hN!)-9uO$Kojl$DjkCmh$Tb7DnKG}E)#s6ym-$>pMK-TdSU8i6BQUa@Sw9=^0? z0pd*U;5=62E?TZdja^>*$O~hkr%er($X6?`}?h-wO|%ORKS2)_SfR`vjAH34VVTq>~`83$+>8h-qI zYaA29dJi$BPB2H`AW0N9Ai=;_Z@KNYTiPUiewiTv>6RPbMaks}59g?uF%WdaUAV1J z5v1BFiEZYo))x1>XT*<{)B8?=w-=3$;kYE0W(=d`eLvuy0#WMZd`b>>_3@{=^4NxU z0BYy>28^b_@{GFo55$cv}}%6c$75-sSqBQmNNz#mhS-TrYsE|>n@lW*CC zGDoxSC$vYL>Y+@YY>G=L z60wD^HA~D$%h(Y7mT-^nern$E78AeS-vGi(y2kGjWi3g%*ega9VusS&m)H=xNsVY< zxpDVEbDW~ZwQslJfA*#nBrO=;e`}fnLa&=V@VP7d>&Xa$&2iPr>9*)^815dZ^VY>;2a6-`*F2K#WuQ3Oou;?}9x~sINQSZcksP zh!U{^t$p7~=cGBe#cSx8_hp9m{$dg%P~`J*7_c|KyJ>T4J#-!8)CP=O(17<~Rh6E( zJLg_Mj2xi(w4Z)`Nue&7H{I5DXm%bcj>fY$fZ7T@K`M9kq=azJLWsaJlC*@eLJzNU zyg^0eIykrgCrr=e%2pp<_a1RHiLiZYe*L8`3s!A#VE@=*A?C>TzQ=%LUDiROC(oty zc@(UAzL1A!b~!8z7K{5#{c#_Qc9h;s<&IT*iQYtISwB?ZwzEk5$_aN25O=pjimTc95Gp0&AIWAF;# zKQ}0+u*ImG++}hK+JO+zr$}VSVwxkQCBro{@2@bz?6QnQ@W8BRx2ex%urKgfp)^r1 z2aPD_7v;)TRz+%!bBY5Uc-R*Q*eAx*VPcPp;sgkq**{B5(s@72uy2mYWe1{c`q{_h zG~t16i&$A&%;_Qt>>l^-5^s7x1GNN{>ekAKp}CMFgGB-laq5=ljEFTN!da7VqDwJAcufeu{i;t{B;}DDEmT!o`_Oz z&D>Oz-AE%-!hQ4S2XKs?6ukx6nTg(DmfUJH67Gg|PKKA>Ke`t{DgGr~9;C9s!!1Zk zxd~k#j0{HnF*Y-709l>Y>DI&ko=N_`dH8?WLc$#}aE|&(*v?!1@4n~1nC&5HXf@%E z{A1O_->Ojl$>5N}z4||8`~MNu{~mDvvfSUk|L-E b)_-aW{+H$cmia#=+&}e1^7n80uW9`o&HvZW literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/Start button long pressed.mp3 b/op3_demo/Data/mp3/test/Start button long pressed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1562ae99d1ddfe60f5d7ee24f212df27f638c8ac GIT binary patch literal 13443 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 literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/Start button pressed.mp3 b/op3_demo/Data/mp3/test/Start button pressed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a4348bde7185277a28591fd42d805bb2a3411d24 GIT binary patch literal 12033 zcmeI2Wl&sCzW#>+26uwX;O->BLU7lC!5s#N;F=)8-GjTk1ql#Hu%LmU!4nePLkIx^ z=Q6+jS8e^b>ejt`U+jym?W&&Br>48-Gtc+wb54I}l;wm_LH7lWtE;0Uf8P+kuWHij z^3X@ZRt{dCP#=Vcr^7Q>s1UEH2(K`d-QLT~O^lDv*VmWV#ZAZt;lumP!;X(bS6Nr^ zekA>URnUZ)%gL*2YUt>~q;-`wHO#f(FfC0Td2>w-HA7u3d4c;*nD^Dg-_li3&`DQX zP3HcL;l4`CN^8lhNt?@R-VgYPNpzHT<#i3^VfWq8@2eocz++iWb@lt^)B9>*U;vVR z=H~C=U}x_ImA1BYLpWPP6+NDLyFqn$rFprb0-~Z1d61)^md?)5zxDG#cp^M}5H`B9 zni}_$K<=yFGiys{;M`&Ygo~BmZ$PN90FrhgI|6{cAuJkq@QC2kTehFe6*(@r@%5~I zjKVF=_%?t<^vHa8B7gs&h~2h2Cj_=U7=jLkgjjInradi4+V}vh|K50ed(s>Dw%omh zndQl!jnj-1tnNPG%XBg+&7DE#50p-va36-KZ@6j9CZ_8T28BihleM(br#d`veW4(Ze+K1-F7IbD4NCY*(9NsAvEkL@nl+wKOiFg3&S8nwATxQo*wUTK7tXT z<|h9BSoyLk-1l12FQ+K^yJZnXUwHWOs)U5VXhvLV`!-}-r| zzl1%>J#>~&Ddu6M;dmdhUR&FO17&ecdhZvWxuAl~(v0jqRSSGslxiO{bdHDkvBb8|!Y~UWqd7AN9PzLx@-NSch$4wXw%BYO+ zt$bz1EB=R2uHw>&y>^*X)u8&vfiwR^OU)b0L?%#Ha}xX8K~o|%sYUWi-@a|~Aet}@ zQk0Mu<%o!$h@~;4<)qnHu@A_k)0)4t7U$?V&26~dCR!DL&Asg22sTHI-f-pmUWM3Y zy)?g#y3L5=X%-AfY%n=(`x*^z{q`n#a+*`qH+mC+n)ud~%F9;EYm1#V*Do}Bb#4Qz zYrRb1q%eEOq?(#Ie>ItCCe}|u?^jv~*yOO)#e6DkJW*4;K)_+vzZ}uLad*3muHRVL zwjbwE=W}(ykcbqHo9QS1<}V?Ph@8(eedVR-icV_3e^TJr(Xcjj$BG8(x4CMeiF%Dm ze00DWf7*M<;BdIsEerCa;h^TshPXkGmuZVu!XtOgHv~@x0-q6q@gbDb$IA6%B^sAM z)QP`rEcR>iAL8#9f{Ae;FKfqhvwc)T-PblpK5fy+vRm4arQjkglL9?iYmTI@BDxQ^ za^7ysG{b+;L;r$kq)9#h;3=O1r~D5kpt zx{lgYcSl7nST<&7nPM-LRhf2rocTE5xGvfQ_>W3dvI{~K*|y%aZ&?h7#Op<%IB1i$ zaj6zpz{b{)aN;xvAMf-P2vO-G`fhQ5TeXkD%H{;0!d?%1aReSCs#RgXiu2WZ>!sd} zbD*Td4-$?*>}BqwY8Fxy@grak`_YlIeC!RQ9!UM>99?8m zUyn8}UsU8DwiI@grHcb9&8+KIBl5<)`IGD3*#j8(vVd` zP-DWy-5t_$`a(a+a`cn@K!Lx#lTN@)XS*hu4?T+M8sQx;hTELBhI!BrU1Z#P9*dci zm&q%JY|te$il-4W{23Z{=e?6WVks{_Z^ulcVDSv@yA_aVw=0`)IsEOCzkLq;t=t9p z{l4l64mQy)pb5Sju@{u8Q@lt!!JdGj8{|}z+_`|NzQ<@?uU%1KgD{`zYe-`9fAGMq zL<&a+m4j^SkFcZoc4nrgl_&18*Ji`#>PA_uikB1Xg)(}EwGJ?}-dPgveiJKgPi(N` zQga?#xe*styGmTp$n_KriV#@YQWPk-&cI*GSE)ZWIidz|Szz-<(F|S;Bcz0XS}ZIp;RL%# zI2O8Zy;lX&ic{kRXyF-f?Qf#j7u|)iM;g=T+jPFsFSm!=h5b*z&>b$2Pt`c`rt>NL z_W{7oo`+!V5@oW8-=|;y(Q9`g3Ntw6TAf(r|$H)7-==)hhvd& zqV!C?7eSWlfkFvfCd`%?zLvxo*b=|mr;stZb*X0MN{4SUC2sPTla1FLk7Zlk zVAs#EXM6md+IjLK+?HH|9kF%S^dQxn%$|LG@!2*?AIh&Lji`(TtsaND$DfaM?1-`T zMyaW1@H+~kc`}FAg1b4mCx8=qTiTR@7}>gpEmC%Yu>isDN*7h+$7nr;CmkTMz5hIXYKCfEbFXj1GYus^|Uc%-2!d2*KD_o72B z``v!zK8jw&O%ROchu~R78g0~vW^{W{>g%_a;twVov?;?kC50!J|=o)qr19p;(<@Hyw%QJaxv-6nT*L(fD+U?1?@3Mrf!of_n- zz%aIJ`cmJT{ezC$ung6h+@}(mmLvr)r<-QdP0yHl%-E3jorPU0ZoDEgu*}!%XfS)2 z!umM4jcbx)%>F%(wFV{5$POzNy2bBoyG`()!c}28*4WESJkBs9V>UGi7{fm!_4X-K?2Mup>clx59BjLR0ncB|^ zq!f3KP@aBei+-u?4SK*7j$wPfHe#g?#oS3Kq>|e{6*_#MSaSr|!nu}C6tbg?x2Dz* zmXFoFO)xLLew*Be|GLo=9VHSY?ENM#e^IiZ)e|D#%Ai+PuI`@KoZBS~uJH@Hy$d{s zag7tqbONz(o=fK)(J>v$`IakxC(kV|k#ji&e&X=AASqY`WI3#0t-X!|2^U3Qy1Z>> zFqR3O=TzU)eqk7{0B#lbwV)w<{ib+a>}>)k%2R$zX}M5=DvJ`Wk)MY->GiO=HV(r_ z+pua!SVl??kcFw;8!2=l&^HE4uNP2(b^OSvveg4*pBCqw z5o&2^l@_C;y?lA~5M7mbrbf9t+%G=ij(cEka9r^=0EMm0FIH5z<+z>h5utw zbySMR@^FZCH+if~Vja(%o?SWSSxFI=_!13M;vE-9fd5F^?;Oz*j6&?nwMZ_jrW076 zkWj0J2K+cnI}m4Ug|=&7X72fms_&Ob;p&Or_coX*MKX@~Gmm{!OByQf`6NAXJ?})m zkl=m%aryQI03-rNW&r#jn8@cm^xpA*p5~!{s)mN%>E%;VqJ}NNL#4v9e3q?GH`0rh2!*agM5)xx(WRlVFS8cP;et7$Uw;wXN;GFJZ zRr~+5LCk}bM>fxy{|wthENHSXoGl3{+y<3gdsn=B=5l6hU%VPEU;J8Q??0dCT3@#s z`Nge&P`mnZ$C>tn(`qZM+ObBjx6eD5+RR`;G^aYeJ+AHQbvC?Jkiz(dLx6pSs|^Af z)l(?Sv4z?8G|kOWz>&9Gk`SJWvHp))tnt-98;gI=;?t8ErU04bGENYP7B4RH!`biE z;|7^_p&?u+bXm!q{#R;Ajq(Kr>yCplSCy5$mhXxr9cjx$yJ7Fzg`Yc4KRLAa`n3~} z2}6w>dAHDO*qFmAs7mzvO%A4o!b_Wid^^&oUjqv2Uh1!?6~B(B^kP5_9m5^4mOw)a zcLr72Hh`N*fz~RCZ>|?F-vXICD=Begcq*?YMOh|&VOHE;Kz5&O=6~{kVTZb_l0 z!&l~UXzPm*L7ZH))22_hlihlr9lpK5G0C6&pl6TLAZ0IMuPC?Lg2x~u*ZaHXAh5Fm z;u+g=+qY{-x;YVU`1rzpH*Jq`p;&38#YPnma=f1jLG$AmM(*9nZcZN>1MBpx8UpCq|0V zjU@G#(lmI#TIXXN97`iqNhK3F;N8~%a20V=fuE9t@arbSvT%FOG1R4h@G}g3hYh$> z4YkLYF2OWfGPb33uNhk7acnJJB$^a|(l?)h`hJUu7CzCFW4!WBuo|vFY{?-d57=e2NV--FZ-& zrC>APv*eJgv5U}7EQ!_n$w&jIvC4kX$KERHalBmCT{dh-OeW7^yjZMc&6SJcsQ^hUH}%7J50u7M`WY+ALdR$Zi#~_b^!^MqI+X9%;Y;}R`N~OA zTs=3tsM1m*D*eq!lL)2Of~l3Nazg&Lfp;SVLBo|;gLNRUH&1ClzI;SLKd-2Dq3L<$ z2u$ztb)!+KT)ROw1tqkIy)dToXDblN%Z_9!BOAb@REQ z0jMdY2MSFFb)bYiYDtlBo-mZV!IZ$YsYdog^#m|#aqaxa~_ zW${pp^XYz*==v7X*2XWInDjfnjR;-(IPNwV0QSdjt`|lW(tH90v)41(XQHPg;?fP# zO-!T{>5XrrBe#sObFpG{yCN0OT&_Ymz7XI{&&as6V{ekVvwB004l6rfyb&89lpK+c zZ4Vmj6F=%T=iy*w@K6`usNmTbT9tVI#MI;%2`5QkdN-}-AKOumTaUNrKE9~*33?RM zF+>6P@hBOh>bJ(7aS~+_RU{xLLYUtjX^$e|G@-cQwSs%N0Q-iIV`Co!ro+9pDlAbL zykPUc?lT;JOl5c7LGMcOgBb>*Nru8Cb+6ZEc>`!rt4q=>20TPSEz6{aZxv({~{vm0( ze#VK9ae&;LE1C$7kziA?IwKk(M)~!^NL3=*Kn(fXne}WodU(g8z5wT{JPki3K!))qwGHQVe00>8+xniztIr zZoE~}Ya@7aL&IAYQAj|odM)$+?8-}yb$-^MgfeyC-W5TfL)kIpKp)BC$^0r@ zQ!y7BZ|s5>p8|i%_+`DaS-;Wb}5JOY;#R1 zg{}F`;pEYY#l?$Sk)Su7u0T4=7cePkH#c!q@9guQB$Hb4qb8@AZ~fpkCzFQ3aCS#i z5d%`g0oVJCk#TD4IqsNYSxDhJ$gqaJ`*bKk+^2n;iS$xR2m3%+@Y{Ggw` z4@r2EFvS^xO5w?&)lo@<~Nh`cz@;{p2;zjw}gOLvU z-9&;e^$gTRqx6zU>T1*jDmU_mgfeXKcRtqeeZrYA5*3UB3X!6~g}fnXy0-mMz&pN9 z0SW%-5^+y_Vy*Xs|P>C^^$B5BpgLgfBcJ0}K9v76% z($A_uNho+_f;%mvJw_@zTsmNOTsU0yfOP6kUL&|FRUvP=BJ(sp&nY%JxxVo%Mb%_zYy z#Ig~C^z|$yR-<|mOF`@9!GOL|dXDlM+JRE1v;X(^Go!2~{9=|y31agtUb=@ykHp$; z_Vo5mq6mqsp{ySgNMMb#A`^Kd>HU@hoNn9kYOViB^0~VrsR)*Y}~P{?xwnDdqgwr_dtl=%^q{^}Tt2 zcjCE10u#s3p+%MmKJ%Qx3@!mC&l}$56+vOn{_onEi&jdGK4yk4HcoAha7E|S35u5( z>kL%Bvy3w9tVlRc#+&u~1WsfhL*D2UiS`dm(ihaJ&B7~>sM;G%3^S_apcbX421PO- zuoyBRx<7!z@7syDsD2tk-Bv^4(3z;lphdw#;K%(M*Z{K0+zxg=nCe)R(Loq23Wi?W zTx(R3Vd0aKDB^1RT3~{uI#^bmafgXQykMDecn(C>7^Lz3XG+-$Ho{|Daww4m8>bcL zm9~Xy)oy>~A$aNX@NWw^A~Bw%;}YNxnTYo25}AERh(9vv1Dt-D%TNB4UU9alLq2r&KIP|5tRCZNvD1Rt4*lNw=O0X2^ov~JX7ilsj?_d&%om`=hjirL< z&Z}^m{&62xiwRjeZn7gEsf3`UX6n-M4uP<30qNySkNt%84y(N4GB$cv=hlWkH#-e&Dzy)})2HNea!!G@vBUi}S=vD= zL51C!zN0!a#z@M59oL2izxv8=HwLfLDH+3tN8+f^Bd42}antJTcUL9IlAU}B<`*Zu zB{mbwsA!QPzf}9ZDOV+ z==jJBlN&RND>F$)(v*K_bF$hSddt{9m@H_#@EY%v_I$lkH>2OEs*ToTKJHFOw>_`- zPOzV|*49WkNA90w7k!cTU_C@x`xRkeW(*0cZiT8;3MZW{rzr-IhLhM)wD<=@WR;ak zI(n0SA}YrJHlS}uIo`nCP9+hzWE0~O8_B8N*w0qSA~u+q-tzz(mWVE_X5O+;VHl!{ z#k|bdhS0DR2ExO6;eI&BA60Mb(}>1^bH0 z*NocszwQqTtk20N%#)-*GyZL485tDz;hP()?{9LXV(Z5?v{BVrR2nw7%C>#GU3To6 zhw}X4y1;F8NJVJVyWgtdYCyX{a%f6F>3%r?cjAJb_lJF#y;%=i0b$X;kra#<|j*J=?|&uvka!s8Bzxw#n<;IuNT%~ z=?X~8Nzm((^_WkwgCs=g2%cmU|7g?R_Nh%dj8IlO+J`&Tt$h0AB@h+TZ>0c5W7ZeR z5&d|(A`Sq-$~XW}lgY(YF0W>&h=*Szj**d9wVEmgxxhq|hgBJg#LggCQp~=yapFtX zRCYhAXYe^97i6LNnOt%qe(3qDcvVDMJezI(h zroUfg?lCWC-)(jQ{VocpvkJPIGpk( z$&~@(qowUU(Mn)Z5p(AbUp>`TJz9F^{pW_UQ|0SWFi8Xp!7 zB~%dcw6O~w{Ve7Bs%gHir#w&K6;Jd2U3hlg_H}r7U1Aq2w(%B~_C$nx<&-c@90l@t8tzRGt_MYrg)-Tgspr-a`v2)NnnLYrx zFwK_I6M97I@`rOfA{dT_B0~%VQIISNu7OsdxJ!f#;MHQ0@INo#C-AU!{o;Lt&5n#} zKAq0T zT1NE@fGiGkBN%n*0~S2nurtuM(5r{>pMLyw*ecA+*4Nv&@T6slqOT<30bzA!fAqrG zab0b+&Q!dEb6B_pTFdvNV)hf>IEo`@&Rvc4$sUgoKI$S{r)H20)?}Ek`g0x() zSUlNiW|ANHq0vhvH}~^+;|j>l9*!I>B;zluLXUT2r(Gj z`@*K(%o3=w)2ym?{BvIN{6h2M&UZARUd>ae%z}9EJL$PGcu3oIHaUBp{CjIT=hqic z@OkGyebwYCwZ*07#HBoXXFz;%_5IW0`A)OjF3ZCZ<__&eYq%i*M2b*cmv7uJ2dfDt zI-TBj{b33eJs}e8i+hp#C__Rbv{>h*^aL}silCfuz3SkvQYr#>wYTO^Z;flr&*AJF zBJb3iV}*nQI@aL2`)7%%HQ&|P2T-u>Kj`mg>eo&I_Wdst*-0PYk?n)nez8{6GobmQ zzE=)lZvRqY4ZouSd(@a8+|c7$;PMmS!Qt1%U8X#Gz`kA@Eo|y(Emcz~?3*nTPLyUQ z(Y?Sj5`CDosCJ)~miHjtd2h$>h4r{~D{z7Rx#Tji<)rzjiwiZNyuX>*)!=H$zsI7A zR~;`d&DyHz_nO`f z2;ybZYEE$md%H~FmVO)ngsy7Lti1#Z=jve@L}R3?7&4Y@i_uAzXL|ED?riT9DhJp+MImG1wN1NtAw z{Ri&v68%%k{fmXGL0Zo3e;d|+G2A~TT+M&r{$shnEAW48{rgz%U%VXtb0PUZI__S$ Xf0rBUe=PTR5B&Q?_3z*5U(@<8fhmVx literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/Start button test mode.mp3 b/op3_demo/Data/mp3/test/Start button test mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9bf71e9c61aaba19b4c54a407ac26492848500e4 GIT binary patch literal 13600 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 O;{QmvzZd)W?EM#DM8&)S literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/Start mic test mode.mp3 b/op3_demo/Data/mp3/test/Start mic test mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fca8044fca8d469c8bfe7c27c49149eb16fca457 GIT binary patch literal 13287 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 literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/Start recording.mp3 b/op3_demo/Data/mp3/test/Start recording.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..39d336c9123a633c15ed568dc776b4c6bb0dc1ec GIT binary patch literal 9839 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 literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/test/User button pressed.mp3 b/op3_demo/Data/mp3/test/User button pressed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f4e19d0adf40da874c09328cbc70ac81100ca411 GIT binary patch literal 12190 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 literal 0 HcmV?d00001 diff --git a/op3_demo/include/op3_demo/action_demo.h b/op3_demo/include/op3_demo/action_demo.h new file mode 100644 index 0000000..303acfd --- /dev/null +++ b/op3_demo/include/op3_demo/action_demo.h @@ -0,0 +1,130 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef ACTION_DEMO_H_ +#define ACTION_DEMO_H_ + +#include +#include + +#include +#include +#include +#include + +#include "op3_demo/op_demo.h" +#include "robotis_controller_msgs/JointCtrlModule.h" +#include "op3_action_module_msgs/IsRunning.h" + +namespace robotis_op +{ + +class ActionDemo : public OPDemo +{ + public: + ActionDemo(); + ~ActionDemo(); + + void setDemoEnable(); + void setDemoDisable(); + + protected: + enum ActionCommandIndex + { + BrakeActionCommand = -2, + StopActionCommand = -1, + }; + + enum ActionStatus + { + PlayAction = 1, + PauseAction = 2, + StopAction = 3, + }; + + const int SPIN_RATE; + const int DEMO_INIT_POSE; + + void processThread(); + void callbackThread(); + + void process(); + void startProcess(const std::string &set_name = "default"); + void resumeProcess(); + void pauseProcess(); + void stopProcess(); + + void handleStatus(); + + void parseActionScript(const std::string &path); + bool parseActionScriptSetName(const std::string &path, const std::string &set_name); + + bool playActionWithSound(int motion_index); + + void playMP3(std::string &path); + void stopMP3(); + + void playAction(int motion_index); + void stopAction(); + void brakeAction(); + bool isActionRunning(); + + void setModuleToDemo(const std::string &module_name); + + void actionSetNameCallback(const std_msgs::String::ConstPtr& msg); + void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); + + ros::Publisher module_control_pub_; + ros::Publisher motion_index_pub_; + ros::Publisher play_sound_pub_; + + ros::Subscriber buttuon_sub_; + + ros::ServiceClient is_running_client_; + + std::map action_sound_table_; + std::vector play_list_; + + std::string script_path_; + std::string play_list_name_; + int play_index_; + + bool start_play_; + bool stop_play_; + bool pause_play_; + + int play_status_; +}; + +} /* namespace robotis_op */ + +#endif /* ACTION_DEMO_H_ */ diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h new file mode 100644 index 0000000..632da76 --- /dev/null +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -0,0 +1,136 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef BALL_FOLLOWER_H_ +#define BALL_FOLLOWER_H_ + +#include +#include + +#include +#include +#include +#include +#include + +#include "robotis_controller_msgs/JointCtrlModule.h" +#include "ball_detector/circleSetStamped.h" +#include "op3_walking_module_msgs/WalkingParam.h" +#include "op3_walking_module_msgs/GetWalkingParam.h" + +namespace robotis_op +{ + +// following the ball using walking +class BallFollower +{ + public: + enum + { + NotFound = 0, + OnRight = 1, + OnLeft = 2, + }; + + BallFollower(); + ~BallFollower(); + + bool processFollowing(double x_angle, double y_angle, double ball_size); + void waitFollowing(); + void startFollowing(); + void stopFollowing(); + + int getBallPosition() + { + return approach_ball_position_; + } + + protected: + const double CAMERA_HEIGHT; + const int NOT_FOUND_THRESHOLD; + const double FOV_WIDTH; + const double FOV_HEIGHT; + const double MAX_FB_STEP; + const double MAX_RL_TURN; + const double MIN_FB_STEP; + const double MIN_RL_TURN; + const double UNIT_FB_STEP; + const double UNIT_RL_TURN; + + const double SPOT_FB_OFFSET; + const double SPOT_RL_OFFSET; + const double SPOT_ANGLE_OFFSET; + + void currentJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg); + void setWalkingCommand(const std::string &command); + void setWalkingParam(double x_move, double y_move, double rotation_angle, bool balance = true); + bool getWalkingParam(); + + bool debug_print_; + + //ros node handle + ros::NodeHandle nh_; + + //image publisher/subscriber + ros::Publisher module_control_pub_; + ros::Publisher head_joint_pub_; + ros::Publisher head_scan_pub_; + ros::Publisher set_walking_command_pub_; + ros::Publisher set_walking_param_pub_; + ; + ros::Publisher motion_index_pub_; + ros::ServiceClient get_walking_param_client_; + + ros::Subscriber ball_position_sub_; + ros::Subscriber ball_tracking_command_sub_; + ros::Subscriber current_joint_states_sub_; + + // (x, y) is the center position of the ball in image coordinates + // z is the ball radius + geometry_msgs::Point ball_position_; + op3_walking_module_msgs::WalkingParam current_walking_param_; + + int count_not_found_; + int count_to_kick_; + int accum_ball_position_; + bool on_tracking_; + int approach_ball_position_; + double current_pan_, current_tilt_; + double current_x_move_, current_r_angle_; + int kick_motion_index_; + double hip_pitch_offset_; + ros::Time prev_time_; + +}; +} + +#endif /* BALL_FOLLOWER_H_ */ diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/op3_demo/include/op3_demo/ball_tracker.h new file mode 100644 index 0000000..5fc1181 --- /dev/null +++ b/op3_demo/include/op3_demo/ball_tracker.h @@ -0,0 +1,123 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef BALL_TRACKING_H_ +#define BALL_TRACKING_H_ + +#include +#include + +#include +#include +#include +#include +#include + +#include "robotis_controller_msgs/JointCtrlModule.h" +#include "ball_detector/circleSetStamped.h" +#include "op3_walking_module_msgs/WalkingParam.h" +#include "op3_walking_module_msgs/GetWalkingParam.h" + +namespace robotis_op +{ + +// head tracking for looking the ball +class BallTracker +{ + public: + BallTracker(); + ~BallTracker(); + + bool processTracking(); + + void startTracking(); + void stopTracking(); + + void setUsingHeadScan(bool use_scan); + + double getPanOfBall() + { + // left (+) ~ right (-) + return current_ball_pan_; + } + double getTiltOfBall() + { + // top (+) ~ bottom (-) + return current_ball_tilt_; + } + double getBallSize() + { + return current_ball_bottom_; + } + + protected: + const double FOV_WIDTH; + const double FOV_HEIGHT; + const int NOT_FOUND_THRESHOLD; + const bool DEBUG_PRINT; + + void ballPositionCallback(const ball_detector::circleSetStamped::ConstPtr &msg); + void ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); + void currentJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg); + void publishHeadJoint(double pan, double tilt); + void scanBall(); + + //ros node handle + ros::NodeHandle nh_; + + //image publisher/subscriber + ros::Publisher module_control_pub_; + ros::Publisher head_joint_pub_; + ros::Publisher head_scan_pub_; + + ros::Publisher motion_index_pub_; + + ros::Subscriber ball_position_sub_; + ros::Subscriber ball_tracking_command_sub_; + ros::Subscriber current_joint_states_sub_; + + // (x, y) is the center position of the ball in image coordinates + // z is the ball radius + geometry_msgs::Point ball_position_; + + bool use_head_scan_; + int count_not_found_; + bool on_tracking_; + double current_head_pan_, current_head_tilt_; + double current_ball_pan_, current_ball_tilt_; + double current_ball_bottom_; + ros::Time prev_time_; + +}; +} + +#endif /* BALL_TRACKING_H_ */ diff --git a/op3_demo/include/op3_demo/button_test.h b/op3_demo/include/op3_demo/button_test.h new file mode 100644 index 0000000..a858577 --- /dev/null +++ b/op3_demo/include/op3_demo/button_test.h @@ -0,0 +1,101 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef BUTTON_TEST_H_ +#define BUTTON_TEST_H_ + +#include + +#include +#include +#include +//#include +//#include + +#include "op3_demo/op_demo.h" +//#include "op3_demo/face_tracker.h" + +#include "robotis_controller_msgs/SyncWriteItem.h" + +namespace robotis_op +{ + +class ButtonTest : public OPDemo +{ + public: + ButtonTest(); + ~ButtonTest(); + + void setDemoEnable(); + void setDemoDisable(); + + protected: + const int SPIN_RATE; + + void processThread(); + void callbackThread(); + + void process(); + +// void playMotion(int motion_index); + void setRGBLED(int blue, int green, int red); + void setLED(int led); + + void playSound(const std::string &path); + + void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); +// void facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg); + +// void setModuleToDemo(const std::string &module_name); + +// FaceTracker face_tracker_; + +// ros::Publisher module_control_pub_; +// ros::Publisher motion_index_pub_; + ros::Publisher rgb_led_pub_; + ros::Publisher play_sound_pub_; + + ros::Subscriber buttuon_sub_; +// ros::Subscriber faceCoord_sub_; + +// geometry_msgs::Point face_position_; + +// bool is_tracking_; +// int tracking_status_; + std::string default_mp3_path_; + int led_count_; + int rgb_led_count_; +}; + +} /* namespace robotis_op */ + +#endif /* BUTTON_TEST_H_ */ diff --git a/op3_demo/include/op3_demo/face_tracker.h b/op3_demo/include/op3_demo/face_tracker.h new file mode 100644 index 0000000..75389ee --- /dev/null +++ b/op3_demo/include/op3_demo/face_tracker.h @@ -0,0 +1,116 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef FACE_TRACKING_H_ +#define FACE_TRACKING_H_ + +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace robotis_op +{ + +// head tracking for looking the ball +class FaceTracker +{ + public: + enum TrackingStatus + { + NotFound = -1, + Waiting = 0, + Found = 1, + + }; + + FaceTracker(); + ~FaceTracker(); + + int processTracking(); + + void startTracking(); + void stopTracking(); + + void setUsingHeadScan(bool use_scan); + void setFacePosition(geometry_msgs::Point &face_position); + + double getPanOfFace() + { + return current_face_pan_; + } + double getTiltOfFace() + { + return current_face_tilt_; + } + + protected: + const double FOV_WIDTH; + const double FOV_HEIGHT; + const int NOT_FOUND_THRESHOLD; + + void facePositionCallback(const geometry_msgs::Point::ConstPtr &msg); + void faceTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); + void publishHeadJoint(double pan, double tilt); + void scanFace(); + + //ros node handle + ros::NodeHandle nh_; + + //image publisher/subscriber + ros::Publisher module_control_pub_; + ros::Publisher head_joint_pub_; + ros::Publisher head_scan_pub_; + + ros::Subscriber face_position_sub_; + ros::Subscriber face_tracking_command_sub_; + + // (x, y) is the center position of the ball in image coordinates + // z is the face size + geometry_msgs::Point face_position_; + + bool use_head_scan_; + int count_not_found_; + bool on_tracking_; + double current_face_pan_, current_face_tilt_; + + int dismissed_count_; + +}; +} + +#endif /* FACE_TRACKING_H_ */ diff --git a/op3_demo/include/op3_demo/mic_test.h b/op3_demo/include/op3_demo/mic_test.h new file mode 100644 index 0000000..aea0295 --- /dev/null +++ b/op3_demo/include/op3_demo/mic_test.h @@ -0,0 +1,105 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef MIC_TEST_H_ +#define MIC_TEST_H_ + +#include +#include + +#include +#include +#include + +#include "op3_demo/op_demo.h" + +#include "robotis_controller_msgs/SyncWriteItem.h" + +namespace robotis_op +{ + +class MicTest : public OPDemo +{ + public: + enum Mic_Test_Status + { + Ready = 0, + AnnounceRecording = 1, + MicRecording = 2, + PlayingSound = 3, + DeleteTempFile = 4, + DemoCount = 5 + }; + + MicTest(); + ~MicTest(); + + void setDemoEnable(); + void setDemoDisable(); + + protected: + const int SPIN_RATE; + + void processThread(); + void callbackThread(); + + void process(); + + void announceTest(); + void recordSound(int recording_time); + void recordSound(); + void playTestSound(const std::string &path); + void playSound(const std::string &file_path); + void deleteSoundFile(const std::string &file_path); + + void startTimer(double wait_time); + void finishTimer(); + + void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); + + std::string recording_file_name_; + std::string default_mp3_path_; + + ros::Publisher play_sound_pub_; + ros::Subscriber buttuon_sub_; + + ros::Time start_time_; + double wait_time_; + bool is_wait_; + int record_pid_; + int play_pid_; + int test_status_; +}; + +} /* namespace robotis_op */ + +#endif /* MIC_TEST_H_ */ diff --git a/op3_demo/include/op3_demo/op_demo.h b/op3_demo/include/op3_demo/op_demo.h new file mode 100644 index 0000000..d68adf5 --- /dev/null +++ b/op3_demo/include/op3_demo/op_demo.h @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef OP_DEMO_H_ +#define OP_DEMO_H_ + +namespace robotis_op +{ + +class OPDemo +{ + public: + enum Motion_Index + { + InitPose = 1, + WalkingReady = 9, + //GetUpFront = 81, + //GetUpBack = 82, + //RightKick = 83, + //LeftKick = 84, + GetUpFront = 122, + GetUpBack = 123, + RightKick = 121, + LeftKick = 120, + Ceremony = 85, + }; + + OPDemo() + { + } + virtual ~OPDemo() + { + } + + virtual void setDemoEnable() + { + } + virtual void setDemoDisable() + { + } + + protected: + bool enable_; +}; + +} /* namespace robotis_op */ + +#endif /* OP_DEMO_H_ */ diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h new file mode 100644 index 0000000..d0d17ce --- /dev/null +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -0,0 +1,126 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef SOCCER_DEMO_H +#define SOCCER_DEMO_H + +#include +#include +#include +#include + +#include "op3_demo/op_demo.h" +#include "op3_demo/ball_tracker.h" +#include "op3_demo/ball_follower.h" +#include "robotis_math/robotis_linear_algebra.h" + +namespace robotis_op +{ + +class SoccerDemo : public OPDemo +{ + public: + enum Stand_Status + { + Stand = 0, + Fallen_Forward = 1, + Fallen_Behind = 2, + }; + + enum Robot_Status + { + Waited = 0, + TrackingAndFollowing = 1, + ReadyToKick = 2, + ReadyToCeremony = 3, + ReadyToGetup = 4, + }; + + SoccerDemo(); + ~SoccerDemo(); + + void setDemoEnable(); + void setDemoDisable(); + + protected: + const double FALLEN_FORWARD_LIMIT; + const double FALLEN_BEHIND_LIMIT; + const int SPIN_RATE; + + void processThread(); + void callbackThread(); + + void setBodyModuleToDemo(const std::string &body_module, bool with_head_control = true); + void setModuleToDemo(const std::string &module_name); + void parseJointNameFromYaml(const std::string &path); + bool getJointNameFromID(const int &id, std::string &joint_name); + bool getIDFromJointName(const std::string &joint_name, int &id); + int getJointCount(); + bool isHeadJoint(const int &id); + void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); + void demoCommandCallback(const std_msgs::String::ConstPtr& msg); + void imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg); + + void startSoccerMode(); + void stopSoccerMode(); + + void process(); + void handleKick(int ball_position); + bool handleFallen(int fallen_status); + + void playMotion(int motion_index); + + BallTracker ball_tracker_; + BallFollower ball_follower_; + + ros::Publisher module_control_pub_; + ros::Publisher motion_index_pub_; + ros::Subscriber buttuon_sub_; + ros::Subscriber demo_command_sub_; + ros::Subscriber imu_data_sub_; + std::map id_joint_table_; + std::map joint_id_table_; + + bool debug_code_; + int wait_count_; + bool on_following_ball_; + bool restart_soccer_; + bool start_following_; + bool stop_following_; + bool stop_fallen_check_; + int robot_status_; + int stand_state_; + double present_pitch_; +}; + +} // namespace robotis_op +#endif // SOCCER_DEMO_H diff --git a/op3_demo/include/op3_demo/vision_demo.h b/op3_demo/include/op3_demo/vision_demo.h new file mode 100644 index 0000000..f652335 --- /dev/null +++ b/op3_demo/include/op3_demo/vision_demo.h @@ -0,0 +1,93 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#ifndef VISION_DEMO_H_ +#define VISION_DEMO_H_ + +#include + +#include +#include +#include +#include + +#include "op3_demo/op_demo.h" +#include "op3_demo/face_tracker.h" + +#include "robotis_controller_msgs/SyncWriteItem.h" + +namespace robotis_op +{ + +class VisionDemo : public OPDemo +{ + public: + VisionDemo(); + ~VisionDemo(); + + void setDemoEnable(); + void setDemoDisable(); + + protected: + const int SPIN_RATE; + + void processThread(); + void callbackThread(); + + void process(); + + void playMotion(int motion_index); + void setRGBLED(int blue, int green, int red); + + void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); + void facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg); + + void setModuleToDemo(const std::string &module_name); + + FaceTracker face_tracker_; + + ros::Publisher module_control_pub_; + ros::Publisher motion_index_pub_; + ros::Publisher rgb_led_pub_; + + ros::Subscriber buttuon_sub_; + ros::Subscriber faceCoord_sub_; + + geometry_msgs::Point face_position_; + + bool is_tracking_; + int tracking_status_; +}; + +} /* namespace robotis_op */ + +#endif /* VISION_DEMO_H_ */ diff --git a/op3_demo/launch/ball_tracker.launch b/op3_demo/launch/ball_tracker.launch new file mode 100644 index 0000000..94126b5 --- /dev/null +++ b/op3_demo/launch/ball_tracker.launch @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch new file mode 100644 index 0000000..15ce10d --- /dev/null +++ b/op3_demo/launch/demo.launch @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/op3_demo/launch/face_detection_op3.launch b/op3_demo/launch/face_detection_op3.launch new file mode 100644 index 0000000..155b3cd --- /dev/null +++ b/op3_demo/launch/face_detection_op3.launch @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/op3_demo/launch/self_test.launch b/op3_demo/launch/self_test.launch new file mode 100644 index 0000000..dea379d --- /dev/null +++ b/op3_demo/launch/self_test.launch @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/op3_demo/package.xml b/op3_demo/package.xml new file mode 100644 index 0000000..d7f5134 --- /dev/null +++ b/op3_demo/package.xml @@ -0,0 +1,69 @@ + + + op3_demo + 0.1.0 + + op3 default demo + It includes three demontrations(soccer demo, vision demo, action script demo) + + + + + + kayman + + + + + + BSD + + + + + + + + + + + + kayman + + + + + + + + + + + + + + catkin + + roscpp + roslib + sensor_msgs + ball_detector + op3_walking_module_msgs + cmake_modules + robotis_math + + roscpp + roslib + sensor_msgs + ball_detector + op3_walking_module_msgs + cmake_modules + robotis_math + + + + + + + + \ No newline at end of file diff --git a/op3_demo/script/action_script.yaml b/op3_demo/script/action_script.yaml new file mode 100644 index 0000000..33a7501 --- /dev/null +++ b/op3_demo/script/action_script.yaml @@ -0,0 +1,23 @@ +# combination action page number and mp3 file path +action_and_sound: + 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Thank you.mp3" + 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Introduction.mp3" + 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Wow.mp3" + 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Yes go.mp3" + 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Sit down.mp3" + 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Stand up.mp3" + 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Clap please.mp3" + 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" + 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Bye bye.mp3" +# 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" + 110 : "" + 111 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro01.mp3" + 115 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro02.mp3" + 118 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro03.mp3" + +# play list +prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] +default: [4, 110, 111, 115, 118, 24, 54, 27, 38] + +# example of play list +#certification: [101] \ No newline at end of file diff --git a/op3_demo/script/action_script_bk.yaml b/op3_demo/script/action_script_bk.yaml new file mode 100644 index 0000000..a18155d --- /dev/null +++ b/op3_demo/script/action_script_bk.yaml @@ -0,0 +1,18 @@ +# combination action page number and mp3 file path +action_and_sound: + 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Thank you.mp3" + 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Introduction.mp3" + 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Wow.mp3" + 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Yes go.mp3" + 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Sit down.mp3" + 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Stand up.mp3" + 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Clap please.mp3" + 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" + 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Bye bye.mp3" + 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" + +# play list +default: [4, 41, 24, 23, 15, 1, 54, 27, 38] + +# example of play list +certificatino: [101] \ No newline at end of file diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp new file mode 100644 index 0000000..19d329c --- /dev/null +++ b/op3_demo/src/action/action_demo.cpp @@ -0,0 +1,430 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include "op3_demo/action_demo.h" + +namespace robotis_op +{ + +ActionDemo::ActionDemo() + : SPIN_RATE(30), + DEMO_INIT_POSE(8), + play_index_(0), + start_play_(false), + stop_play_(false), + pause_play_(false), + play_status_(StopAction) +{ + enable_ = false; + + ros::NodeHandle nh(ros::this_node::getName()); + + std::string default_path = ros::package::getPath("op3_demo") + "/script/action_script.yaml"; + script_path_ = nh.param("action_script", default_path); + + std::string default_play_list = "default"; + play_list_name_ = nh.param("action_script_play_list", default_play_list); + + parseActionScript (script_path_); + + boost::thread queue_thread = boost::thread(boost::bind(&ActionDemo::callbackThread, this)); + boost::thread process_thread = boost::thread(boost::bind(&ActionDemo::processThread, this)); +} + +ActionDemo::~ActionDemo() +{ + // TODO Auto-generated destructor stub +} + +void ActionDemo::setDemoEnable() +{ + setModuleToDemo("action_module"); + + usleep(10 * 1000); + + enable_ = true; + + ROS_INFO("Start ActionScript Demo"); + + playAction(DEMO_INIT_POSE); + + startProcess(play_list_name_); +} + +void ActionDemo::setDemoDisable() +{ + stopProcess(); + + enable_ = false; + + play_list_.resize(0); +} + +void ActionDemo::process() +{ + // check current status + //handleStatus(); + + switch (play_status_) + { + case PlayAction: + { + if (play_list_.size() == 0) + { + ROS_WARN("Play List is empty."); + return; + } + + // action is not running + if (isActionRunning() == false) + { + // play + bool result_play = playActionWithSound(play_list_.at(play_index_)); + + ROS_INFO_COND(!result_play, "Fail to play action script."); + + // add play index + int index_to_play = (play_index_ + 1) % play_list_.size(); + play_index_ = index_to_play; + } + else + { + // wait + return; + } + break; + } + + case PauseAction: + { + stopMP3(); + stopAction(); + + break; + } + + case StopAction: + { + stopMP3(); + stopAction(); + + break; + } + + default: + break; + } +} + +void ActionDemo::handleStatus() +{ + if (start_play_ == true) + { + play_status_ = PlayAction; + start_play_ = false; + } + + if (pause_play_ == true) + { + play_status_ = PauseAction; + pause_play_ = false; + } + + if (stop_play_ == true) + { + play_status_ = StopAction; + stop_play_ = false; + } +} + +void ActionDemo::startProcess(const std::string &set_name) +{ + parseActionScriptSetName(script_path_, set_name); + + start_play_ = true; + play_status_ = PlayAction; +} + +void ActionDemo::resumeProcess() +{ + start_play_ = true; + play_status_ = PlayAction; +} + +void ActionDemo::pauseProcess() +{ + pause_play_ = true; + play_status_ = PauseAction; +} + +void ActionDemo::stopProcess() +{ + stop_play_ = true; + play_index_ = 0; + play_status_ = StopAction; +} + +void ActionDemo::processThread() +{ + //set node loop rate + ros::Rate loop_rate(SPIN_RATE); + + //node loop + while (ros::ok()) + { + if (enable_ == true) + process(); + + //relax to fit output rate + loop_rate.sleep(); + } +} + +void ActionDemo::callbackThread() +{ + ros::NodeHandle nh(ros::this_node::getName()); + + // subscriber & publisher + module_control_pub_ = nh.advertise("/robotis/enable_ctrl_module", 0); + motion_index_pub_ = nh.advertise("/robotis/action/page_num", 0); + play_sound_pub_ = nh.advertise("/play_sound_file", 0); + + buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &ActionDemo::buttonHandlerCallback, this); + + is_running_client_ = nh.serviceClient("/robotis/action/is_running"); + + while (nh.ok()) + { + ros::spinOnce(); + + usleep(1000); + } +} + +void ActionDemo::parseActionScript(const std::string &path) +{ + YAML::Node doc; + + try + { + // load yaml + doc = YAML::LoadFile(path.c_str()); + } catch (const std::exception& e) + { + ROS_ERROR_STREAM("Fail to load action script yaml. - " << e.what()); + ROS_ERROR_STREAM("Script Path : " << path); + return; + } + + // parse action_sound table + YAML::Node sub_node = doc["action_and_sound"]; + for (YAML::iterator yaml_it = sub_node.begin(); yaml_it != sub_node.end(); ++yaml_it) + { + int action_index = yaml_it->first.as(); + std::string mp3_path = yaml_it->second.as(); + + action_sound_table_[action_index] = mp3_path; + } + + // default action set + if (doc["default"]) + play_list_ = doc["default"].as >(); +} + +bool ActionDemo::parseActionScriptSetName(const std::string &path, const std::string &set_name) +{ + + YAML::Node doc; + + try + { + // load yaml + doc = YAML::LoadFile(path.c_str()); + } catch (const std::exception& e) + { + ROS_ERROR("Fail to load yaml."); + return false; + } + + // parse action_sound table + if (doc[set_name]) + { + play_list_ = doc[set_name].as >(); + return true; + } + else + return false; +} + +bool ActionDemo::playActionWithSound(int motion_index) +{ + std::map::iterator map_it = action_sound_table_.find(motion_index); + if (map_it == action_sound_table_.end()) + return false; + + playAction(motion_index); + playMP3(map_it->second); + + ROS_INFO_STREAM("action : " << motion_index << ", mp3 path : " << map_it->second); + + return true; +} + +void ActionDemo::playMP3(std::string &path) +{ + std_msgs::String sound_msg; + sound_msg.data = path; + + play_sound_pub_.publish(sound_msg); +} + +void ActionDemo::stopMP3() +{ + std_msgs::String sound_msg; + sound_msg.data = ""; + + play_sound_pub_.publish(sound_msg); +} + +void ActionDemo::playAction(int motion_index) +{ + std_msgs::Int32 motion_msg; + motion_msg.data = motion_index; + + motion_index_pub_.publish(motion_msg); +} + +void ActionDemo::stopAction() +{ + std_msgs::Int32 motion_msg; + motion_msg.data = StopActionCommand; + + motion_index_pub_.publish(motion_msg); +} + +void ActionDemo::brakeAction() +{ + std_msgs::Int32 motion_msg; + motion_msg.data = BrakeActionCommand; + + motion_index_pub_.publish(motion_msg); +} + +// check running of action +bool ActionDemo::isActionRunning() +{ + op3_action_module_msgs::IsRunning is_running_srv; + + if (is_running_client_.call(is_running_srv) == false) + { + ROS_ERROR("Failed to get action status"); + return true; + } + else + { + if (is_running_srv.response.is_running == true) + { + return true; + } + } + + return false; +} + +void ActionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) +{ + if (enable_ == false) + return; + + if (msg->data == "start") + { + switch (play_status_) + { + case PlayAction: + { + pauseProcess(); + break; + } + + case PauseAction: + { + resumeProcess(); + break; + } + + case StopAction: + { + resumeProcess(); + break; + } + + default: + break; + } + } + else if (msg->data == "mode") + { + + } +} + +void ActionDemo::setModuleToDemo(const std::string &module_name) +{ +// robotis_controller_msgs::JointCtrlModule control_msg; +// +// // todo : remove hard coding +// for (int ix = 1; ix <= 20; ix++) +// { +// std::string joint_name; +// +// if (getJointNameFromID(ix, joint_name) == false) +// continue; +// +// control_msg.joint_name.push_back(joint_name); +// control_msg.module_name.push_back(module_name); +// } +// +// // no control +// if (control_msg.joint_name.size() == 0) +// return; +// +// module_control_pub_.publish(control_msg); +// std::cout << "enable module : " << module_name << std::endl; + + std_msgs::String control_msg; + control_msg.data = "action_module"; + + module_control_pub_.publish(control_msg); + std::cout << "enable module : " << module_name << std::endl; +} + +} /* namespace robotis_op */ diff --git a/op3_demo/src/ball_tracker_node.cpp b/op3_demo/src/ball_tracker_node.cpp new file mode 100644 index 0000000..62ed643 --- /dev/null +++ b/op3_demo/src/ball_tracker_node.cpp @@ -0,0 +1,133 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include "op3_demo/ball_tracker.h" + +enum Demo_Status +{ + Ready = 0, + DesireToTrack = 1, + DesireToStop = 2, + Tracking = 3, + DemoCount = 4, +}; +int current_status = Ready; + +void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); + + +//node main +int main(int argc, char **argv) +{ + //init ros + ros::init(argc, argv, "ball_tracker_node"); + ros::NodeHandle nh("~"); + ros::Publisher module_control_pub_ = nh.advertise("/robotis/enable_ctrl_module", 0); + ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + + //create ros wrapper object + robotis_op::BallTracker tracker; + + // set head_control_module + std_msgs::String control_msg; + control_msg.data = "head_control_module"; + + usleep(1000 * 1000); + + module_control_pub_.publish(control_msg); + + // start ball tracking + tracker.startTracking(); + current_status = Tracking; + + //set node loop rate + ros::Rate loop_rate(30); + + //node loop + while (ros::ok()) + { + switch (current_status) + { + case DesireToTrack: + tracker.startTracking(); + current_status = Tracking; + break; + + case DesireToStop: + tracker.stopTracking(); + current_status = Ready; + break; + + case Tracking: + tracker.processTracking(); + break; + + default: + break; + } + + //execute pending callback + ros::spinOnce(); + + //relax to fit output rate + loop_rate.sleep(); + } + + //exit program + return 0; +} + +void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) +{ + if (msg->data == "mode_long") + { + + } + else if (msg->data == "start_long") + { + // it's using in op3_manager + // torque on and going to init pose + } + + if (msg->data == "start") + { + if (current_status == Ready) + current_status = DesireToTrack; + else if (current_status == Tracking) + current_status = DesireToStop; + } + else if (msg->data == "mode") + { + + } + +} diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp new file mode 100644 index 0000000..6647942 --- /dev/null +++ b/op3_demo/src/demo_node.cpp @@ -0,0 +1,334 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include +#include + +#include "op3_demo/soccer_demo.h" +#include "op3_demo/action_demo.h" +#include "op3_demo/vision_demo.h" +#include "robotis_math/robotis_linear_algebra.h" +#include "robotis_controller_msgs/SyncWriteItem.h" + +enum Demo_Status +{ + Ready = 0, + SoccerDemo = 1, + VisionDemo = 2, + ActionDemo = 3, + DemoCount = 4, +}; + +void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); +void goInitPose(); +void playSound(const std::string &path); +void setLED(int led); +bool checkManagerRunning(std::string& manager_name); + +const int SPIN_RATE = 30; + +ros::Publisher init_pose_pub; +ros::Publisher play_sound_pub; +ros::Publisher led_pub; + +std::string default_mp3_path = ""; +int current_status = Ready; +int desired_status = Ready; +bool apply_desired = false; + +//node main +int main(int argc, char **argv) +{ + //init ros + ros::init(argc, argv, "demo_node"); + + //create ros wrapper object + robotis_op::OPDemo *current_demo = NULL; + robotis_op::SoccerDemo *soccer_demo = new robotis_op::SoccerDemo(); + robotis_op::ActionDemo *action_demo = new robotis_op::ActionDemo(); + robotis_op::VisionDemo *vision_demo = new robotis_op::VisionDemo(); + + ros::NodeHandle nh(ros::this_node::getName()); + + init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); + play_sound_pub = nh.advertise("/play_sound_file", 0); + led_pub = nh.advertise("/robotis/sync_write_item", 0); + ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + + default_mp3_path = ros::package::getPath("op3_demo") + "/Data/mp3/"; + + ros::start(); + + //set node loop rate + ros::Rate loop_rate(SPIN_RATE); + + // wait for starting of manager + std::string manager_name = "/op3_manager"; + while (ros::ok()) + { + ros::Duration(1.0).sleep(); + + if (checkManagerRunning(manager_name) == true) + { + break; + ROS_INFO("Succeed to connect"); + } + ROS_WARN("Waiting for op3 manager"); + } + + // init procedure + playSound(default_mp3_path + "Demonstration ready mode.mp3"); + setLED(0x01 | 0x02 | 0x04); + + //node loop + while (ros::ok()) + { + // process + if (apply_desired == true) + { + switch (desired_status) + { + case Ready: + { + + if (current_demo != NULL) + current_demo->setDemoDisable(); + + current_demo = NULL; + + goInitPose(); + + ROS_INFO("[Go to Demo READY!]"); + break; + } + + case SoccerDemo: + { + if (current_demo != NULL) + current_demo->setDemoDisable(); + + current_demo = soccer_demo; + current_demo->setDemoEnable(); + + ROS_INFO("[Start] Soccer Demo"); + break; + } + + case VisionDemo: + { + if (current_demo != NULL) + current_demo->setDemoDisable(); + + current_demo = vision_demo; + current_demo->setDemoEnable(); + ROS_INFO("[Start] Vision Demo"); + break; + } + case ActionDemo: + { + if (current_demo != NULL) + current_demo->setDemoDisable(); + + current_demo = action_demo; + current_demo->setDemoEnable(); + ROS_INFO("[Start] Action Demo"); + break; + } + + default: + { + break; + } + } + + apply_desired = false; + current_status = desired_status; + } + else + { + if (current_status != desired_status) + { +// // sound out desired status +// switch (desired_status) +// { +// case SoccerDemo: +// playSound(default_path + "Autonomous soccer mode.mp3"); +// break; +// +// case VisionDemo: +// playSound(default_path + "Vision processing mode.mp3"); +// break; +// +// case ActionDemo: +// playSound(default_path + "Interactive motion mode.mp3"); +// break; +// +// default: +// break; +// } + } + } + + //execute pending callbacks + ros::spinOnce(); + + //relax to fit output rate + loop_rate.sleep(); + } + + //exit program + return 0; +} + +void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) +{ + // in the middle of playing demo + if (current_status != Ready) + { + if (msg->data == "mode_long") + { + // go to mode selection status + desired_status = Ready; + apply_desired = true; + + playSound(default_mp3_path + "Demonstration ready mode.mp3"); + setLED(0x01 | 0x02 | 0x04); + } + else if (msg->data == "user_long") + { + // it's using in op3_manager + // torque on and going to init pose + } + } + // ready to start demo + else + { + if (msg->data == "start") + { + // select current demo + desired_status = (desired_status == Ready) ? desired_status + 1 : desired_status; + apply_desired = true; + + // sound out desired status + switch (desired_status) + { + case SoccerDemo: + playSound(default_mp3_path + "Start soccer demonstration.mp3"); + break; + + case VisionDemo: + playSound(default_mp3_path + "Start vision processing demonstration.mp3"); + break; + + case ActionDemo: + playSound(default_mp3_path + "Start motion demonstration.mp3"); + break; + + default: + break; + } + + ROS_INFO("= Start Demo Mode : %d", desired_status); + } + else if (msg->data == "mode") + { + // change to next demo + desired_status = (desired_status + 1) % DemoCount; + desired_status = (desired_status == Ready) ? desired_status + 1 : desired_status; + + // sound out desired status and changign LED + switch (desired_status) + { + case SoccerDemo: + playSound(default_mp3_path + "Autonomous soccer mode.mp3"); + setLED(0x01); + break; + + case VisionDemo: + playSound(default_mp3_path + "Vision processing mode.mp3"); + setLED(0x02); + break; + + case ActionDemo: + playSound(default_mp3_path + "Interactive motion mode.mp3"); + setLED(0x04); + break; + + default: + break; + } + + ROS_INFO("= Demo Mode : %d", desired_status); + } + } +} + +void goInitPose() +{ + std_msgs::String init_msg; + init_msg.data = "ini_pose"; + + init_pose_pub.publish(init_msg); +} + +void playSound(const std::string &path) +{ + std_msgs::String sound_msg; + sound_msg.data = path; + + play_sound_pub.publish(sound_msg); +} + +void setLED(int led) +{ + robotis_controller_msgs::SyncWriteItem syncwrite_msg; + syncwrite_msg.item_name = "LED"; + syncwrite_msg.joint_name.push_back("open-cr"); + syncwrite_msg.value.push_back(led); + + led_pub.publish(syncwrite_msg); +} + +bool checkManagerRunning(std::string& manager_name) +{ + std::vector node_list; + ros::master::getNodes(node_list); + + for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); node_list_idx++) + { + if (node_list[node_list_idx] == manager_name) + return true; + } + + ROS_ERROR("Can't find op3_manager"); + return false; +} diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp new file mode 100644 index 0000000..1a4c465 --- /dev/null +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -0,0 +1,331 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include "op3_demo/ball_follower.h" + +namespace robotis_op +{ + +BallFollower::BallFollower() + : nh_(ros::this_node::getName()), + FOV_WIDTH(26.4 * M_PI / 180), + FOV_HEIGHT(21.6 * M_PI / 180), + count_not_found_(0), + count_to_kick_(0), + on_tracking_(false), + approach_ball_position_(NotFound), + kick_motion_index_(83), + CAMERA_HEIGHT(0.46), + NOT_FOUND_THRESHOLD(50), + MAX_FB_STEP(35.0 * 0.001), + MAX_RL_TURN(15.0 * M_PI / 180), + MIN_FB_STEP(5.0 * 0.001), + MIN_RL_TURN(5.0 * M_PI / 180), + UNIT_FB_STEP(0.5 * 0.001), + UNIT_RL_TURN(0.5 * M_PI / 180), + SPOT_FB_OFFSET(0.0 * 0.001), + SPOT_RL_OFFSET(0.0 * 0.001), + SPOT_ANGLE_OFFSET(0.0 * M_PI / 180), + hip_pitch_offset_(7.0), + current_pan_(-10), + current_tilt_(-10), + current_x_move_(0.005), + current_r_angle_(0), + debug_print_(false) +{ + current_joint_states_sub_ = nh_.subscribe("/robotis/goal_joint_states", 10, &BallFollower::currentJointStatesCallback, + this); + + set_walking_command_pub_ = nh_.advertise("/robotis/walking/command", 0); + set_walking_param_pub_ = nh_.advertise("/robotis/walking/set_params", 0); + get_walking_param_client_ = nh_.serviceClient( + "/robotis/walking/get_params"); + + prev_time_ = ros::Time::now(); + +} + +BallFollower::~BallFollower() +{ + +} + +void BallFollower::startFollowing() +{ + on_tracking_ = true; + ROS_INFO("Start Ball following"); + + setWalkingCommand("start"); + + bool result = getWalkingParam(); + if (result == true) + { + hip_pitch_offset_ = current_walking_param_.hip_pitch_offset; + } + else + { + hip_pitch_offset_ = 7.0 * M_PI / 180; + } +} + +void BallFollower::stopFollowing() +{ + on_tracking_ = false; + approach_ball_position_ = NotFound; + count_to_kick_ = 0; + accum_ball_position_ = 0; + ROS_INFO("Stop Ball following"); + + setWalkingCommand("stop"); +} + +void BallFollower::currentJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg) +{ + double pan, tilt; + int get_count = 0; + + for (int ix = 0; ix < msg->name.size(); ix++) + { + if (msg->name[ix] == "head_pan") + { + pan = msg->position[ix]; + get_count += 1; + } + else if (msg->name[ix] == "head_tilt") + { + tilt = msg->position[ix]; + get_count += 1; + } + + if (get_count == 2) + break; + } + + // check variation + current_pan_ = pan; + current_tilt_ = tilt; +} + +// x_angle : ball position (pan), y_angle : ball position (tilt) +bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_size) +{ + ros::Time curr_time = ros::Time::now(); + ros::Duration dur = curr_time - prev_time_; + double delta_time = dur.nsec * 0.000000001 + dur.sec; + prev_time_ = curr_time; + + count_not_found_ = 0; + int ball_position_sum = 0; + + // check of getting head joints angle + if (current_tilt_ == -10 && current_pan_ == -10) + { + ROS_ERROR("Failed to get current angle of head joints."); + setWalkingCommand("stop"); + + on_tracking_ = false; + approach_ball_position_ = NotFound; + return false; + } + + ROS_INFO_COND(debug_print_, " ============== Head | Ball ============== "); + ROS_INFO_STREAM_COND(debug_print_, + "== Head Pan : " << (current_pan_ * 180 / M_PI) << " | Ball X : " << (x_angle * 180 / M_PI)); + ROS_INFO_STREAM_COND(debug_print_, + "== Head Tilt : " << (current_tilt_ * 180 / M_PI) << " | Ball Y : " << (y_angle * 180 / M_PI)); + + approach_ball_position_ = NotFound; + + // clac fb + double distance_to_ball = CAMERA_HEIGHT * tan(M_PI * 0.5 + current_tilt_ - hip_pitch_offset_ - ball_size); + + double ball_y_angle = (current_tilt_ + y_angle) * 180 / M_PI; + double ball_x_angle = (current_pan_ + x_angle) * 180 / M_PI; + + if (distance_to_ball < 0) + distance_to_ball *= (-1); + + double fb_goal, fb_move; + double distance_to_kick = 0.25; + + // check whether ball is correct position. + if ((distance_to_ball < distance_to_kick) && (fabs(ball_x_angle) < 25.0)) + //if ((ball_y_angle < -65) && (fabs(current_pan_) < 25)) + { + count_to_kick_ += 1; + + ROS_INFO_STREAM_COND(debug_print_, + "head pan : " << (current_pan_ * 180 / M_PI) << " | ball pan : " << (x_angle * 180 / M_PI)); + ROS_INFO_STREAM_COND(debug_print_, + "head tilt : " << (current_tilt_ * 180 / M_PI) << " | ball tilt : " << (y_angle * 180 / M_PI)); + ROS_INFO_STREAM_COND(debug_print_, "foot to kick : " << accum_ball_position_); + + ROS_INFO("In range [%d]", count_to_kick_); + + //if (fabs(x_angle) < 10 * M_PI / 180) + //{ + if (count_to_kick_ > 20) + { + setWalkingCommand("stop"); + on_tracking_ = false; + + // check direction of the ball + if (accum_ball_position_ > 0) + { + ROS_INFO("Ready to kick : left"); // left + approach_ball_position_ = OnLeft; + } + else + { + ROS_INFO("Ready to kick : right"); // right + approach_ball_position_ = OnRight; + } + + return true; + } + else if (count_to_kick_ > 15) + { + if (ball_x_angle > 0) + //if( current_pan_ > 0) + accum_ball_position_ += 1; + else + accum_ball_position_ -= 1; + + // send message + setWalkingParam(MIN_FB_STEP, 0, 0); + + return false; + } + //} + } + else + { + count_to_kick_ = 0; + accum_ball_position_ = 0; + } + + fb_goal = fmin(distance_to_ball * 0.1, MAX_FB_STEP); + if ((distance_to_ball * 0.1 / 2) < current_x_move_) + { + fb_goal = fmin(current_x_move_ - UNIT_FB_STEP, fb_goal); + fb_move = fmax(fb_goal, MIN_FB_STEP); + } + else + { + fb_goal = fmin(current_x_move_ + UNIT_FB_STEP, fb_goal); + fb_move = fmax(fb_goal, MIN_FB_STEP); + } + + ROS_INFO("distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", distance_to_ball, fb_move, delta_time); + ROS_INFO("=============================================="); + + // calc rl angle + double rl_goal, rl_angle; + if (fabs(current_pan_) * 180 / M_PI > 5.0) + { + double rl_offset = fabs(current_pan_) * 0.3; + //double rl_offset = fabs(ball_x_angle) * 0.3; + rl_goal = fmin(rl_offset, MAX_RL_TURN); + rl_goal = fmax(rl_goal, MIN_RL_TURN); + rl_angle = fmin(fabs(current_r_angle_) + UNIT_RL_TURN, rl_goal); + + if (current_pan_ < 0) + rl_angle *= (-1); + } + + // send message + setWalkingParam(fb_move, 0, rl_angle); + + return false; +} + +void BallFollower::waitFollowing() +{ + count_not_found_++; + + if (count_not_found_ > NOT_FOUND_THRESHOLD * 0.5) + setWalkingParam(0.0, 0.0, 0.0); +} + +void BallFollower::setWalkingCommand(const std::string &command) +{ + // get param + if (command == "start") + { + getWalkingParam(); + setWalkingParam(MIN_FB_STEP, 0, 0, true); + } + + std_msgs::String _command_msg; + _command_msg.data = command; + set_walking_command_pub_.publish(_command_msg); + + ROS_INFO_STREAM("Send Walking command : " << command); +} + +void BallFollower::setWalkingParam(double x_move, double y_move, double rotation_angle, bool balance) +{ + current_walking_param_.balance_enable = balance; + current_walking_param_.x_move_amplitude = x_move + SPOT_FB_OFFSET; + current_walking_param_.y_move_amplitude = y_move + SPOT_RL_OFFSET; + current_walking_param_.angle_move_amplitude = rotation_angle + SPOT_ANGLE_OFFSET; + + set_walking_param_pub_.publish(current_walking_param_); + + current_x_move_ = x_move; + current_r_angle_ = rotation_angle; +} + +bool BallFollower::getWalkingParam() +{ + op3_walking_module_msgs::GetWalkingParam walking_param_msg; + + if (get_walking_param_client_.call(walking_param_msg)) + { + current_walking_param_ = walking_param_msg.response.parameters; + + // update ui + ROS_INFO("Get walking parameters"); + + return true; + } + else + { + ROS_ERROR("Fail to get walking parameters."); + + return false; + } + +} + +} + diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp new file mode 100644 index 0000000..db47c0d --- /dev/null +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -0,0 +1,261 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include "op3_demo/ball_tracker.h" + +namespace robotis_op +{ + +BallTracker::BallTracker() + : nh_(ros::this_node::getName()), + //FOV_WIDTH(35.2 * M_PI / 180), + FOV_WIDTH(26.4 * M_PI / 180), + FOV_HEIGHT(21.6 * M_PI / 180), + NOT_FOUND_THRESHOLD(50), + use_head_scan_(true), + count_not_found_(0), + on_tracking_(false), + current_head_pan_(-10), + current_head_tilt_(-10), + current_ball_pan_(0), + current_ball_tilt_(0), + current_ball_bottom_(0), + DEBUG_PRINT(false) +{ + head_joint_pub_ = nh_.advertise("/robotis/head_control/set_joint_states_offset", 0); + head_scan_pub_ = nh_.advertise("/robotis/head_control/scan_command", 0); + + ball_position_sub_ = nh_.subscribe("/ball_detector_node/circle_set", 1, &BallTracker::ballPositionCallback, this); + ball_tracking_command_sub_ = nh_.subscribe("/ball_tracker/command", 1, &BallTracker::ballTrackerCommandCallback, + this); + // todo : remove + current_joint_states_sub_ = nh_.subscribe("/robotis/goal_joint_states", 10, &BallTracker::currentJointStatesCallback, + this); + +} + +BallTracker::~BallTracker() +{ + +} + +void BallTracker::ballPositionCallback(const ball_detector::circleSetStamped::ConstPtr &msg) +{ + for (int idx = 0; idx < msg->circles.size(); idx++) + { + if (ball_position_.z >= msg->circles[idx].z) + continue; + + ball_position_ = msg->circles[idx]; + } +} + +void BallTracker::ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg) +{ + if (msg->data == "start") + { + startTracking(); + } + else if (msg->data == "stop") + { + stopTracking(); + } + else if (msg->data == "toggle_start") + { + if (on_tracking_ == false) + startTracking(); + else + stopTracking(); + } +} + +void BallTracker::startTracking() +{ + on_tracking_ = true; + ROS_INFO("Start Ball tracking"); +} + +void BallTracker::stopTracking() +{ + on_tracking_ = false; + ROS_INFO("Stop Ball tracking"); +} + +void BallTracker::setUsingHeadScan(bool use_scan) +{ + use_head_scan_ = use_scan; +} + +// todo : remove +void BallTracker::currentJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg) +{ + double pan, tilt; + int get_count = 0; + + // pan : right (-) , left (+) + // tilt : top (+), bottom (-) + for (int ix = 0; ix < msg->name.size(); ix++) + { + if (msg->name[ix] == "head_pan") + { + // convert direction for internal variable(x / pan) + pan = -msg->position[ix]; + get_count += 1; + } + else if (msg->name[ix] == "head_tilt") + { + tilt = msg->position[ix]; + get_count += 1; + } + + if (get_count == 2) + break; + } + + // check variation + if (current_head_pan_ == -10 || fabs(pan - current_head_pan_) < 5 * M_PI / 180) + current_head_pan_ = pan; + if (current_head_tilt_ == -10 || fabs(tilt - current_head_tilt_) < 5 * M_PI / 180) + current_head_tilt_ = tilt; +} + +bool BallTracker::processTracking() +{ + if (on_tracking_ == false) + { + ball_position_.z = 0; + count_not_found_ = 0; + current_head_pan_ = -10; + current_head_tilt_ = -10; + return false; + } + + // check ball position + if (ball_position_.z <= 0) + { + count_not_found_++; + + if (count_not_found_ > NOT_FOUND_THRESHOLD) + { + scanBall(); + count_not_found_ = 0; + } + + return false; + } + + // if ball is found + // convert ball position to desired angle(rad) of head + // ball_position : top-left is (-1, -1), bottom-right is (+1, +1) + // offset_rad : top-left(+, +), bottom-right(-, -) + double x_error = -atan(ball_position_.x * tan(FOV_WIDTH)); + double y_error = -atan(ball_position_.y * tan(FOV_HEIGHT)); + + ball_position_.z = 0; + count_not_found_ = 0; + + if (DEBUG_PRINT == true) + { + std::cout << "--------------------------------------------------------------" << std::endl; + std::cout << "Ball position : " << ball_position_.x << " | " << ball_position_.y << std::endl; + std::cout << "Target angle : " << (x_error * 180 / M_PI) << " | " << (y_error * 180 / M_PI) << std::endl; + std::cout << "Head angle : " << (current_head_pan_ * 180 / M_PI) << " | " << (current_head_tilt_ * 180 / M_PI) + << std::endl; + } + + ros::Time curr_time = ros::Time::now(); + ros::Duration dur = curr_time - prev_time_; + double delta_time = dur.nsec * 0.000000001 + dur.sec; + prev_time_ = curr_time; + + double p_gain = 0.7, d_gain = 0.02; + double x_error_diff = (x_error - current_ball_pan_) / delta_time; + double y_error_diff = (y_error - current_ball_tilt_) / delta_time; + double x_error_target = x_error * p_gain + x_error_diff * d_gain; + double y_error_target = y_error * p_gain + y_error_diff * d_gain; + + if (DEBUG_PRINT == true) + { + std::cout << "--------------------------------------------------------------" << std::endl; + std::cout << "error : " << (x_error * 180 / M_PI) << " | " << (y_error * 180 / M_PI) << std::endl; + std::cout << "error_diff : " << (x_error_diff * 180 / M_PI) << " | " << (y_error_diff * 180 / M_PI) << " | " + << delta_time << std::endl; + std::cout << "error_target : " << (x_error_target * 180 / M_PI) << " | " << (y_error_target * 180 / M_PI) + << " | P : " << p_gain << " | D : " << d_gain << std::endl; + } + + // move head joint + publishHeadJoint(x_error_target, y_error_target); + + // args for following ball + current_ball_pan_ = x_error; + current_ball_tilt_ = y_error; + current_ball_bottom_ = -atan(ball_position_.z * tan(FOV_HEIGHT)); + + return true; +} + +void BallTracker::publishHeadJoint(double pan, double tilt) +{ + double min_angle = 1 * M_PI / 180; + if (fabs(pan) < min_angle && fabs(tilt) < min_angle) + return; + + sensor_msgs::JointState head_angle_msg; + + head_angle_msg.name.push_back("head_pan"); + head_angle_msg.name.push_back("head_tilt"); + + head_angle_msg.position.push_back(pan); + head_angle_msg.position.push_back(tilt); + + head_joint_pub_.publish(head_angle_msg); +} + +void BallTracker::scanBall() +{ + if (use_head_scan_ == false) + return; + + // check head control module enabled + // ... + + // send message to head control module + std_msgs::String scan_msg; + scan_msg.data = "scan"; + + head_scan_pub_.publish(scan_msg); + // ROS_INFO("Scan the ball"); +} + +} + diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp new file mode 100644 index 0000000..c3fc7cf --- /dev/null +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -0,0 +1,517 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include "op3_demo/soccer_demo.h" + +namespace robotis_op +{ + +SoccerDemo::SoccerDemo() + : FALLEN_FORWARD_LIMIT(60), + FALLEN_BEHIND_LIMIT(-60), + SPIN_RATE(30), + debug_code_(false), + //enable_(false), + wait_count_(0), + on_following_ball_(false), + restart_soccer_(false), + start_following_(false), + stop_following_(false), + stop_fallen_check_(false), + robot_status_(Waited), + stand_state_(Stand), + present_pitch_(0) +{ + //init ros + enable_ = false; + + ros::NodeHandle nh(ros::this_node::getName()); + + std::string default_path = ros::package::getPath("op3_gui_demo") + "/config/demo_config.yaml"; + std::string path = nh.param("demo_config", default_path); + parseJointNameFromYaml(path); + + boost::thread queue_thread = boost::thread(boost::bind(&SoccerDemo::callbackThread, this)); + boost::thread process_thread = boost::thread(boost::bind(&SoccerDemo::processThread, this)); +} + +SoccerDemo::~SoccerDemo() +{ + +} + +void SoccerDemo::setDemoEnable() +{ + enable_ = true; + + startSoccerMode(); + + // handle enable procedure + // ball_tracker_.startTracking(); + // ball_follower_.startFollowing(); + + // wait_count_ = 1 * SPIN_RATE; +} + +void SoccerDemo::setDemoDisable() +{ + setModuleToDemo("base_module"); + + // handle disable procedure + ball_tracker_.stopTracking(); + ball_follower_.stopFollowing(); + + enable_ = false; + wait_count_ = 0; + on_following_ball_ = false; + restart_soccer_ = false; + start_following_ = false; + stop_following_ = false; + stop_fallen_check_ = false; +} + +void SoccerDemo::process() +{ + // ball tracking + bool is_tracked; + + is_tracked = ball_tracker_.processTracking(); + + // check to start + if (start_following_ == true) + { + ball_tracker_.startTracking(); + ball_follower_.startFollowing(); + start_following_ = false; + + wait_count_ = 1 * SPIN_RATE; // wait 1 sec + } + + // check to stop + if (stop_following_ == true) + { + //ball_tracker_.stopTracking(); + ball_follower_.stopFollowing(); + stop_following_ = false; + + wait_count_ = 0; + } + + if (wait_count_ <= 0) + { + // ball following + if (on_following_ball_ == true) + { + if (is_tracked) + ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall(), ball_tracker_.getBallSize()); + else + ball_follower_.waitFollowing(); + } + + // check fallen states + switch (stand_state_) + { + case Stand: + { + // check restart soccer + if (restart_soccer_ == true) + { + restart_soccer_ = false; + startSoccerMode(); + break; + } + + // check states for kick + int ball_position = ball_follower_.getBallPosition(); + if (ball_position != robotis_op::BallFollower::NotFound) + { + ball_follower_.stopFollowing(); + handleKick(ball_position); + } + break; + } + // fallen state : Fallen_Forward, Fallen_Behind + default: + { + ball_follower_.stopFollowing(); + handleFallen(stand_state_); + break; + } + } + } + else + { + wait_count_ -= 1; + } + +} + +void SoccerDemo::processThread() +{ + bool result = false; + + //set node loop rate + ros::Rate loop_rate(SPIN_RATE); + + ball_tracker_.startTracking(); + + //node loop + while (ros::ok()) + { + if (enable_ == true) + process(); + + //relax to fit output rate + loop_rate.sleep(); + } +} + +void SoccerDemo::callbackThread() +{ + ros::NodeHandle nh(ros::this_node::getName()); + + // subscriber & publisher + module_control_pub_ = nh.advertise("/robotis/set_joint_ctrl_modules", 0); + motion_index_pub_ = nh.advertise("/robotis/action/page_num", 0); + + buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &SoccerDemo::buttonHandlerCallback, this); + demo_command_sub_ = nh.subscribe("/ball_tracker/command", 1, &SoccerDemo::demoCommandCallback, this); + imu_data_sub_ = nh.subscribe("/robotis/open_cr/imu", 1, &SoccerDemo::imuDataCallback, this); + + while (nh.ok()) + { + ros::spinOnce(); + + usleep(1000); + } +} + +void SoccerDemo::setBodyModuleToDemo(const std::string &body_module, bool with_head_control) +{ + robotis_controller_msgs::JointCtrlModule control_msg; + + std::string head_module = "head_control_module"; + std::map::iterator joint_iter; + + for (joint_iter = id_joint_table_.begin(); joint_iter != id_joint_table_.end(); ++joint_iter) + { + // check whether joint name contains "head" + if (joint_iter->second.find("head") != std::string::npos) + { + if (with_head_control == true) + { + control_msg.joint_name.push_back(joint_iter->second); + control_msg.module_name.push_back(head_module); + } + else + continue; + } + else + { + control_msg.joint_name.push_back(joint_iter->second); + control_msg.module_name.push_back(body_module); + } + } + + // no control + if (control_msg.joint_name.size() == 0) + return; + + module_control_pub_.publish(control_msg); + std::cout << "enable module of body : " << body_module << std::endl; +} + +void SoccerDemo::setModuleToDemo(const std::string &module_name) +{ + robotis_controller_msgs::JointCtrlModule control_msg; + std::map::iterator joint_iter; + + for (joint_iter = id_joint_table_.begin(); joint_iter != id_joint_table_.end(); ++joint_iter) + { + control_msg.joint_name.push_back(joint_iter->second); + control_msg.module_name.push_back(module_name); + } + + // no control + if (control_msg.joint_name.size() == 0) + return; + + module_control_pub_.publish(control_msg); + std::cout << "enable module : " << module_name << std::endl; +} + +void SoccerDemo::parseJointNameFromYaml(const std::string &path) +{ + YAML::Node doc; + try + { + // load yaml + doc = YAML::LoadFile(path.c_str()); + } catch (const std::exception& e) + { + ROS_ERROR("Fail to load id_joint table yaml."); + return; + } + + // parse id_joint table + YAML::Node _id_sub_node = doc["id_joint"]; + for (YAML::iterator _it = _id_sub_node.begin(); _it != _id_sub_node.end(); ++_it) + { + int _id; + std::string _joint_name; + + _id = _it->first.as(); + _joint_name = _it->second.as(); + + id_joint_table_[_id] = _joint_name; + joint_id_table_[_joint_name] = _id; + } +} + +// joint id -> joint name +bool SoccerDemo::getJointNameFromID(const int &id, std::string &joint_name) +{ + std::map::iterator _iter; + + _iter = id_joint_table_.find(id); + if (_iter == id_joint_table_.end()) + return false; + + joint_name = _iter->second; + return true; +} + +// joint name -> joint id +bool SoccerDemo::getIDFromJointName(const std::string &joint_name, int &id) +{ + std::map::iterator _iter; + + _iter = joint_id_table_.find(joint_name); + if (_iter == joint_id_table_.end()) + return false; + + id = _iter->second; + return true; +} + +int SoccerDemo::getJointCount() +{ + return joint_id_table_.size(); +} + +bool SoccerDemo::isHeadJoint(const int &id) +{ + std::map::iterator _iter; + + for (_iter = joint_id_table_.begin(); _iter != joint_id_table_.end(); ++_iter) + { + if (_iter->first.find("head") != std::string::npos) + return true; + } + + return false; +} + +void SoccerDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) +{ + if (enable_ == false) + return; + + if (msg->data == "start") + { + if (on_following_ball_ == true) + stopSoccerMode(); + else + startSoccerMode(); + } +} + +void SoccerDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) +{ + if (enable_ == false) + return; + + if (msg->data == "start") + { + if (on_following_ball_ == true) + stopSoccerMode(); + else + startSoccerMode(); + } + else if (msg->data == "stop") + { + stopSoccerMode(); + } +} + +// check fallen states +void SoccerDemo::imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg) +{ + if (enable_ == false) + return; + + if (stop_fallen_check_ == true) + return; + + Eigen::Quaterniond orientation(msg->orientation.w, msg->orientation.x, msg->orientation.y, msg->orientation.z); + Eigen::MatrixXd rpy_orientation = robotis_framework::convertQuaternionToRPY(orientation); + rpy_orientation *= (180 / M_PI); + + ROS_INFO_COND(debug_code_, "Roll : %3.2f, Pitch : %2.2f", rpy_orientation.coeff(0, 0), rpy_orientation.coeff(1, 0)); + + double pitch = rpy_orientation.coeff(1, 0); + + double alpha = 0.4; + if (present_pitch_ == 0) + present_pitch_ = pitch; + else + present_pitch_ = present_pitch_ * (1 - alpha) + pitch * alpha; + + if (present_pitch_ > FALLEN_FORWARD_LIMIT) + stand_state_ = Fallen_Forward; + else if (present_pitch_ < FALLEN_BEHIND_LIMIT) + stand_state_ = Fallen_Behind; + else + stand_state_ = Stand; +} + +void SoccerDemo::startSoccerMode() +{ + setBodyModuleToDemo("walking_module"); + + usleep(10 * 1000); + + ROS_INFO("Start Soccer Demo"); + on_following_ball_ = true; + start_following_ = true; +} + +void SoccerDemo::stopSoccerMode() +{ + ROS_INFO("Stop Soccer Demo"); + on_following_ball_ = false; + stop_following_ = true; +} + +void SoccerDemo::handleKick(int ball_position) +{ + usleep(1000 * 1000); + + // change to motion module + setModuleToDemo("action_module"); + + usleep(1500 * 1000); + + if (handleFallen(stand_state_) == true) + return; + + // kick motion + switch (ball_position) + { + case robotis_op::BallFollower::OnRight: + std::cout << "Kick Motion [R]: " << ball_position << std::endl; + playMotion(RightKick); + break; + + case robotis_op::BallFollower::OnLeft: + std::cout << "Kick Motion [L]: " << ball_position << std::endl; + playMotion(LeftKick); + break; + + default: + break; + } + + // todo : remove this in order to play soccer repeatedly + on_following_ball_ = false; + + usleep(2000 * 1000); + + if (handleFallen(stand_state_) == true) + return; + + // ceremony + //std::cout << "Go Ceremony!!!" << std::endl; + //playMotion(Ceremony); + + //restart_soccer_ = true; +} + +bool SoccerDemo::handleFallen(int fallen_status) +{ + if (fallen_status == Stand) + { + return false; + } + + // change to motion module + setModuleToDemo("action_module"); + + usleep(600 * 1000); + + // getup motion + switch (fallen_status) + { + case Fallen_Forward: + std::cout << "Getup Motion [F]: " << std::endl; + playMotion(GetUpFront); + break; + + case Fallen_Behind: + std::cout << "Getup Motion [B]: " << std::endl; + playMotion(GetUpBack); + break; + + default: + break; + } + + usleep(500 * 1000); + + if (on_following_ball_ == true) + restart_soccer_ = true; + + // reset state + on_following_ball_ = false; + + return true; +} + +void SoccerDemo::playMotion(int motion_index) +{ + std_msgs::Int32 motion_msg; + motion_msg.data = motion_index; + + motion_index_pub_.publish(motion_msg); +} + +} diff --git a/op3_demo/src/soccer_demo_node.cpp b/op3_demo/src/soccer_demo_node.cpp new file mode 100644 index 0000000..6332c7b --- /dev/null +++ b/op3_demo/src/soccer_demo_node.cpp @@ -0,0 +1,504 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include +#include +#include +#include + +#include "op3_demo/ball_tracker.h" +#include "op3_demo/ball_follower.h" +#include "robotis_math/robotis_linear_algebra.h" + +enum Motion_Index +{ + GetUpFront = 81, + GetUpBack = 82, + RightKick = 83, + LeftKick = 84, + Ceremony = 85, +}; + +enum Stand_Status +{ + Stand = 0, + Fallen_Forward = 1, + Fallen_Behind = 2, +}; + +enum Robot_Status +{ + Waited = 0, + TrackingAndFollowing = 1, + ReadyToKick = 2, + ReadyToCeremony = 3, + ReadyToGetup = 4, +}; + +const double FALLEN_FORWARD_LIMIT = 60; +const double FALLEN_BEHIND_LIMIT = -60; +const int SPIN_RATE = 30; + +void callbackThread(); + +void setBodyModuleToDemo(const std::string &body_module); +void setModuleToDemo(const std::string &module_name); +void parseJointNameFromYaml(const std::string &path); +bool getJointNameFromID(const int &id, std::string &joint_name); +bool getIDFromJointName(const std::string &joint_name, int &id); +void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); +void demoCommandCallback(const std_msgs::String::ConstPtr& msg); +void imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg); + +void startSoccerMode(); +void stopSoccerMode(); + +void handleKick(int ball_position); +bool handleFallen(int fallen_status); + +void playMotion(int motion_index); + +ros::Publisher module_control_pub; +ros::Publisher motion_index_pub; +ros::Subscriber buttuon_sub; +ros::Subscriber demo_command_sub; +ros::Subscriber imu_data_sub; +std::map id_joint_table; +std::map joint_id_table; + +int wait_count = 0; +bool on_following_ball = false; +bool restart_soccer = false; +bool start_following = false; +bool stop_following = false; +bool stop_fallen_check = false; +int robot_status = Waited; +int stand_state = Stand; +double present_pitch = 0; + +bool debug_code = false; + +//node main +int main(int argc, char **argv) +{ + //init ros + ros::init(argc, argv, "soccer_demo_node"); + + //create ros wrapper object + robotis_op::BallTracker tracker; + robotis_op::BallFollower follower; + + ros::NodeHandle nh(ros::this_node::getName()); + + std::string _default_path = ros::package::getPath("op3_gui_demo") + "/config/demo_config.yaml"; + std::string _path = nh.param("demo_config", _default_path); + parseJointNameFromYaml(_path); + + boost::thread queue_thread = boost::thread(boost::bind(&callbackThread)); + + bool result = false; + + //set node loop rate + ros::Rate loop_rate(SPIN_RATE); + + tracker.startTracking(); + + //node loop + while (ros::ok()) + { + // ball tracking + bool is_tracked; + is_tracked = tracker.processTracking(); + + if (start_following == true) + { + tracker.startTracking(); + follower.startFollowing(); + start_following = false; + + wait_count = 1 * SPIN_RATE; // wait 1 sec + } + + if (stop_following == true) + { + follower.stopFollowing(); + stop_following = false; + + wait_count = 0; + } + + if (wait_count <= 0) + { + // ball following + if (on_following_ball == true) + { + if (is_tracked) + follower.processFollowing(tracker.getPanOfBall(), tracker.getTiltOfBall(), tracker.getBallSize()); + else + follower.waitFollowing(); + } + + // check fallen states + switch (stand_state) + { + case Stand: + { + // check restart soccer + if (restart_soccer == true) + { + restart_soccer = false; + startSoccerMode(); + break; + } + + // check states for kick + int ball_position = follower.getBallPosition(); + if (ball_position != robotis_op::BallFollower::NotFound) + { + follower.stopFollowing(); + handleKick(ball_position); + } + break; + } + + // fallen state : Fallen_Forward, Fallen_Behind + default: + { + follower.stopFollowing(); + handleFallen(stand_state); + break; + } + } + } + else + { + wait_count -= 1; + } + + //execute pending callbacks + ros::spinOnce(); + + //relax to fit output rate + loop_rate.sleep(); + } + + //exit program + return 0; +} + +void callbackThread() +{ + ros::NodeHandle nh(ros::this_node::getName()); + + // subscriber & publisher + module_control_pub = nh.advertise("/robotis/set_joint_ctrl_modules", 0); + motion_index_pub = nh.advertise("/robotis/action/page_num", 0); + buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + demo_command_sub = nh.subscribe("/ball_tracker/command", 1, demoCommandCallback); + imu_data_sub = nh.subscribe("/robotis/open_cr/imu", 1, imuDataCallback); + + while (nh.ok()) + { + ros::spinOnce(); + + usleep(1000); + } +} + +void setBodyModuleToDemo(const std::string &body_module) +{ + robotis_controller_msgs::JointCtrlModule control_msg; + + //std::string body_module = "action_module"; + std::string head_module = "head_control_module"; + + // todo : remove hard coding + for (int ix = 1; ix <= 20; ix++) + { + std::string joint_name; + + if (getJointNameFromID(ix, joint_name) == false) + continue; + + control_msg.joint_name.push_back(joint_name); + if (ix <= 18) + control_msg.module_name.push_back(body_module); + else + control_msg.module_name.push_back(head_module); + + } + + // no control + if (control_msg.joint_name.size() == 0) + return; + + module_control_pub.publish(control_msg); + std::cout << "enable module of body : " << body_module << std::endl; +} + +void setModuleToDemo(const std::string &module_name) +{ + robotis_controller_msgs::JointCtrlModule control_msg; + + // todo : remove hard coding + for (int ix = 1; ix <= 20; ix++) + { + std::string joint_name; + + if (getJointNameFromID(ix, joint_name) == false) + continue; + + control_msg.joint_name.push_back(joint_name); + control_msg.module_name.push_back(module_name); + } + + // no control + if (control_msg.joint_name.size() == 0) + return; + + module_control_pub.publish(control_msg); + std::cout << "enable module : " << module_name << std::endl; +} + +void parseJointNameFromYaml(const std::string &path) +{ + YAML::Node doc; + try + { + // load yaml + doc = YAML::LoadFile(path.c_str()); + } catch (const std::exception& e) + { + ROS_ERROR("Fail to load id_joint table yaml."); + return; + } + + // parse id_joint table + YAML::Node _id_sub_node = doc["id_joint"]; + for (YAML::iterator _it = _id_sub_node.begin(); _it != _id_sub_node.end(); ++_it) + { + int _id; + std::string _joint_name; + + _id = _it->first.as(); + _joint_name = _it->second.as(); + + id_joint_table[_id] = _joint_name; + joint_id_table[_joint_name] = _id; + } +} + +// joint id -> joint name +bool getJointNameFromID(const int &id, std::string &joint_name) +{ + std::map::iterator _iter; + + _iter = id_joint_table.find(id); + if (_iter == id_joint_table.end()) + return false; + + joint_name = _iter->second; + return true; +} + +// joint name -> joint id +bool getIDFromJointName(const std::string &joint_name, int &id) +{ + std::map::iterator _iter; + + _iter = joint_id_table.find(joint_name); + if (_iter == joint_id_table.end()) + return false; + + id = _iter->second; + return true; +} + +void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) +{ + if (msg->data == "start") + { + if (on_following_ball == true) + stopSoccerMode(); + else + startSoccerMode(); + } +} + +void demoCommandCallback(const std_msgs::String::ConstPtr &msg) +{ + if (msg->data == "start") + { + if (on_following_ball == true) + stopSoccerMode(); + else + startSoccerMode(); + } + else if (msg->data == "stop") + { + stopSoccerMode(); + } +} + +// check fallen states +void imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg) +{ + if (stop_fallen_check == true) + return; + + Eigen::Quaterniond orientation(msg->orientation.w, msg->orientation.x, msg->orientation.y, msg->orientation.z); + Eigen::MatrixXd rpy_orientation = robotis_framework::convertQuaternionToRPY(orientation); + rpy_orientation *= (180 / M_PI); + + double pitch = rpy_orientation.coeff(1, 0); + + if (present_pitch == 0) + present_pitch = pitch; + else + present_pitch = present_pitch * 0.5 + pitch * 0.5; + + if (present_pitch > FALLEN_FORWARD_LIMIT) + stand_state = Fallen_Forward; + else if (present_pitch < FALLEN_BEHIND_LIMIT) + stand_state = Fallen_Behind; + else + stand_state = Stand; +} + +void startSoccerMode() +{ + setBodyModuleToDemo("walking_module"); + + usleep(10 * 1000); + + ROS_INFO("Start Soccer Demo"); + on_following_ball = true; + start_following = true; +} + +void stopSoccerMode() +{ + ROS_INFO("Stop Soccer Demo"); + on_following_ball = false; + stop_following = true; +} + +void handleKick(int ball_position) +{ + usleep(500 * 1000); + + // change to motion module + // setBodyModuleToDemo("action_module"); + setModuleToDemo("action_module"); + + usleep(1000 * 1000); + + if (handleFallen(stand_state) == true) + return; + + // kick motion + switch (ball_position) + { + case robotis_op::BallFollower::OnRight: + std::cout << "Kick Motion [R]: " << ball_position << std::endl; + playMotion(RightKick); + break; + + case robotis_op::BallFollower::OnLeft: + std::cout << "Kick Motion [L]: " << ball_position << std::endl; + playMotion(LeftKick); + break; + + default: + break; + } + + on_following_ball = false; + + usleep(2000 * 1000); + + if (handleFallen(stand_state) == true) + return; + + // ceremony + std::cout << "Go Ceremony!!!" << std::endl; + playMotion(Ceremony); +} + +bool handleFallen(int fallen_status) +{ + if (fallen_status == Stand) + { + return false; + } + + // change to motion module + setModuleToDemo("action_module"); + + usleep(600 * 1000); + + // getup motion + switch (fallen_status) + { + case Fallen_Forward: + std::cout << "Getup Motion [F]: " << std::endl; + playMotion(GetUpFront); + break; + + case Fallen_Behind: + std::cout << "Getup Motion [B]: " << std::endl; + playMotion(GetUpBack); + break; + + default: + break; + } + + usleep(500 * 1000); + + if (on_following_ball == true) + restart_soccer = true; + + // reset state + //stand_state = Stand; + on_following_ball = false; + + return true; +} + +void playMotion(int motion_index) +{ + std_msgs::Int32 motion_msg; + motion_msg.data = motion_index; + + motion_index_pub.publish(motion_msg); +} diff --git a/op3_demo/src/test/button_test.cpp b/op3_demo/src/test/button_test.cpp new file mode 100644 index 0000000..7421d98 --- /dev/null +++ b/op3_demo/src/test/button_test.cpp @@ -0,0 +1,268 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include "op3_demo/button_test.h" + +namespace robotis_op +{ + +ButtonTest::ButtonTest() + : SPIN_RATE(30), + led_count_(0), + rgb_led_count_(0) +// is_tracking_(false), +// tracking_status_(FaceTracker::Waiting) +{ + enable_ = false; + + ros::NodeHandle nh(ros::this_node::getName()); + + boost::thread queue_thread = boost::thread(boost::bind(&ButtonTest::callbackThread, this)); + boost::thread process_thread = boost::thread(boost::bind(&ButtonTest::processThread, this)); + + default_mp3_path_ = ros::package::getPath("op3_demo") + "/Data/mp3/test/"; +} + +ButtonTest::~ButtonTest() +{ + // TODO Auto-generated destructor stub +} + +void ButtonTest::setDemoEnable() +{ + // change to motion module +// setModuleToDemo("action_module"); + +// usleep(100 * 1000); + +// playMotion(InitPose); + +// usleep(1500 * 1000); + +// setModuleToDemo("head_control_module"); + +// usleep(10 * 1000); + + enable_ = true; +// face_tracker_.startTracking(); + + ROS_INFO("Start Button Test"); + +} + +void ButtonTest::setDemoDisable() +{ + +// face_tracker_.stopTracking(); +// is_tracking_ = false; +// tracking_status_ = FaceTracker::Waiting; + enable_ = false; +} + +void ButtonTest::process() +{ + //bool is_tracked = face_tracker_.processTracking(); +// int tracking_status = face_tracker_.processTracking(); + +//if(is_tracking_ != is_tracked) +// if(tracking_status_ != tracking_status) +// { +// switch(tracking_status) +// { +// case FaceTracker::Found: +// setRGBLED(0x1F, 0x1F, 0x1F); +// break; +// +// case FaceTracker::NotFound: +// setRGBLED(0, 0, 0); +// break; +// +// default: +// break; +// } +// } + +// if(tracking_status != FaceTracker::Waiting) +// tracking_status_ = tracking_status; + +//is_tracking_ = is_tracked; +// std::cout << "Tracking : " << tracking_status << std::endl; +} + +void ButtonTest::processThread() +{ + //set node loop rate + ros::Rate loop_rate(SPIN_RATE); + + //node loop + while (ros::ok()) + { + if (enable_ == true) + process(); + + //relax to fit output rate + loop_rate.sleep(); + } +} + +void ButtonTest::callbackThread() +{ + ros::NodeHandle nh(ros::this_node::getName()); + + // subscriber & publisher +// module_control_pub_ = nh.advertise("/robotis/enable_ctrl_module", 0); +// motion_index_pub_ = nh.advertise("/robotis/action/page_num", 0); + rgb_led_pub_ = nh.advertise("/robotis/sync_write_item", 0); + play_sound_pub_ = nh.advertise("/play_sound_file", 0); + + buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &ButtonTest::buttonHandlerCallback, this); +// faceCoord_sub_ = nh.subscribe("/faceCoord", 1, &ButtonTest::facePositionCallback, this); + + while (nh.ok()) + { + ros::spinOnce(); + + usleep(1 * 1000); + } +} + +// button test +void ButtonTest::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) +{ + if (enable_ == false) + return; + + if (msg->data == "mode") + { + playSound(default_mp3_path_ + "Mode button pressed.mp3"); + } + else if (msg->data == "start") + { + // RGB led color test + playSound(default_mp3_path_ + "Start button pressed.mp3"); + int rgb_selector[3] = { 1, 0, 0 }; + setRGBLED((0x1F * rgb_selector[rgb_led_count_ % 3]), (0x1F * rgb_selector[(rgb_led_count_ + 1) % 3]), + (0x1F * rgb_selector[(rgb_led_count_ + 2) % 3])); + rgb_led_count_ += 1; + } + else if (msg->data == "user") + { + // Monochromatic led color test + playSound(default_mp3_path_ + "User button pressed.mp3"); + setLED(0x01 << (led_count_++ % 3)); + } + else if (msg->data == "mode_long") + { + playSound(default_mp3_path_ + "Mode button long pressed.mp3"); + } + else if (msg->data == "start_long") + { + playSound(default_mp3_path_ + "Start button long pressed.mp3"); + } + else if (msg->data == "user_long") + { + playSound(default_mp3_path_ + "User button long pressed.mp3"); + } +} + +//void ButtonTest::setModuleToDemo(const std::string &module_name) +//{ +// std_msgs::String control_msg; +// control_msg.data = module_name; +// +// module_control_pub_.publish(control_msg); +// std::cout << "enable module : " << module_name << std::endl; +//} +// +//void ButtonTest::facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg) +//{ +// if (enable_ == false) +// return; +// +// // face is detected +// if (msg->data.size() >= 10) +// { +// // center of face +// face_position_.x = (msg->data[6] + msg->data[8] * 0.5) / msg->data[2] * 2 - 1; +// face_position_.y = (msg->data[7] + msg->data[9] * 0.5) / msg->data[3] * 2 - 1; +// face_position_.z = msg->data[8] * 0.5 + msg->data[9] * 0.5; +// +// face_tracker_.setFacePosition(face_position_); +// } +// else +// { +// face_position_.x = 0; +// face_position_.y = 0; +// face_position_.z = 0; +// return; +// } +//} +// +//void ButtonTest::playMotion(int motion_index) +//{ +// std_msgs::Int32 motion_msg; +// motion_msg.data = motion_index; +// +// motion_index_pub_.publish(motion_msg); +//} + +void ButtonTest::setRGBLED(int blue, int green, int red) +{ + int led_full_unit = 0x1F; + int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); + robotis_controller_msgs::SyncWriteItem syncwrite_msg; + syncwrite_msg.item_name = "LED_RGB"; + syncwrite_msg.joint_name.push_back("open-cr"); + syncwrite_msg.value.push_back(led_value); + + rgb_led_pub_.publish(syncwrite_msg); +} + +void ButtonTest::setLED(int led) +{ + robotis_controller_msgs::SyncWriteItem syncwrite_msg; + syncwrite_msg.item_name = "LED"; + syncwrite_msg.joint_name.push_back("open-cr"); + syncwrite_msg.value.push_back(led); + + rgb_led_pub_.publish(syncwrite_msg); +} + +void ButtonTest::playSound(const std::string &path) +{ + std_msgs::String sound_msg; + sound_msg.data = path; + + play_sound_pub_.publish(sound_msg); +} + +} /* namespace robotis_op */ diff --git a/op3_demo/src/test/mic_test.cpp b/op3_demo/src/test/mic_test.cpp new file mode 100644 index 0000000..aeec922 --- /dev/null +++ b/op3_demo/src/test/mic_test.cpp @@ -0,0 +1,295 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include "op3_demo/mic_test.h" + +namespace robotis_op +{ + +MicTest::MicTest() + : SPIN_RATE(30), + is_wait_(false), + wait_time_(-1), + test_status_(Ready), + record_pid_(-1), + play_pid_(-1) +{ + enable_ = false; + + ros::NodeHandle nh(ros::this_node::getName()); + + boost::thread queue_thread = boost::thread(boost::bind(&MicTest::callbackThread, this)); + boost::thread process_thread = boost::thread(boost::bind(&MicTest::processThread, this)); + + recording_file_name_ = ros::package::getPath("op3_demo") + "/Data/mp3/test/mic-test.wav"; + default_mp3_path_ = ros::package::getPath("op3_demo") + "/Data/mp3/test/"; + + start_time_ = ros::Time::now(); +} + +MicTest::~MicTest() +{ + // TODO Auto-generated destructor stub +} + +void MicTest::setDemoEnable() +{ + wait_time_ = -1; + test_status_ = AnnounceRecording; + enable_ = true; + + ROS_INFO("Start Mic test Demo"); + +} + +void MicTest::setDemoDisable() +{ + finishTimer(); + + test_status_ = Ready; + enable_ = false; +} + +void MicTest::process() +{ + // check status + // timer + if (wait_time_ > 0) + { + ros::Duration dur = ros::Time::now() - start_time_; + + // check timer + if (dur.sec >= wait_time_) + { + finishTimer(); + } + } + else if (wait_time_ == -1.0) + { + // handle test process + switch (test_status_) + { + case Ready: + // do nothing + break; + + case AnnounceRecording: + announceTest(); + test_status_ = MicRecording; + break; + + case MicRecording: + recordSound(); + test_status_ = PlayingSound; + break; + + case PlayingSound: + playTestSound(recording_file_name_); + test_status_ = DeleteTempFile; + break; + + case DeleteTempFile: + deleteSoundFile(recording_file_name_); + test_status_ = Ready; + break; + + default: + break; + } + } + +} + +void MicTest::processThread() +{ + //set node loop rate + ros::Rate loop_rate(SPIN_RATE); + + //node loop + while (ros::ok()) + { + if (enable_ == true) + process(); + + //relax to fit output rate + loop_rate.sleep(); + } +} + +void MicTest::callbackThread() +{ + ros::NodeHandle nh(ros::this_node::getName()); + + // subscriber & publisher + buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &MicTest::buttonHandlerCallback, this); + play_sound_pub_ = nh.advertise("/play_sound_file", 0); + + while (nh.ok()) + { + ros::spinOnce(); + + usleep(1 * 1000); + } +} + +void MicTest::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) +{ + if (enable_ == false) + return; + + if (msg->data == "start") + { + // restart mic test + if (test_status_ != Ready) + return; + + test_status_ = AnnounceRecording; + } + else if(msg->data == "user") + { + is_wait_ = true; + } +} + +void MicTest::announceTest() +{ + // play mic test sound + playSound(default_mp3_path_ + "Announce mic test.mp3"); + + //startTimer(3.0); + usleep(3.4 * 1000 * 1000); +} + +void MicTest::recordSound(int recording_time) +{ + ROS_INFO("Start to record"); + // arecord -D plughw:1,0 -f S16_LE -c1 -r22050 -t raw -d 5 | lame -r -s 22.05 -m m -b 64 - mic-input.mp3 + // arecord -D plughw:1,0 -f S16_LE -c1 -r22050 -t wav -d 5 test.wav + + playSound(default_mp3_path_ + "Start recording.mp3"); + + usleep(1.5 * 1000 * 1000); + + if (record_pid_ != -1) + kill(record_pid_, SIGKILL); + + record_pid_ = fork(); + + switch (record_pid_) + { + case -1: + fprintf(stderr, "Fork Failed!! \n"); + ROS_WARN("Fork Failed!! \n"); + //done_msg.data = "play_sound_fail"; + //g_done_msg_pub.publish(done_msg); + break; + + case 0: + { + std::stringstream ss; + ss << "-d " << recording_time; + execl("/usr/bin/arecord", "arecord", "-Dplughw:1,0", "-fS16_LE", "-c1", "-r22050", "-twav", ss.str().c_str(), + recording_file_name_.c_str(), (char*) 0); + break; + } + + default: + break; + } + + startTimer(recording_time); +} + +void MicTest::recordSound() +{ + recordSound(5); +} + +void MicTest::playTestSound(const std::string &path) +{ + ROS_INFO("Start to play recording sound"); + + playSound(default_mp3_path_ + "Start playing.mp3"); + + usleep(1.3 * 1000 * 1000); + + if (play_pid_ != -1) + kill(play_pid_, SIGKILL); + + play_pid_ = fork(); + + switch (play_pid_) + { + case -1: + fprintf(stderr, "Fork Failed!! \n"); + ROS_WARN("Fork Failed!! \n"); + break; + + case 0: + execl("/usr/bin/aplay", "aplay", path.c_str(), (char*) 0); + break; + + default: + break; + } + + startTimer(5); +} + +void MicTest::playSound(const std::string &path) +{ + std_msgs::String sound_msg; + sound_msg.data = path; + + play_sound_pub_.publish(sound_msg); +} + +void MicTest::deleteSoundFile(const std::string &file_path) +{ + remove(file_path.c_str()); + ROS_INFO("Delete temporary file"); +} + +void MicTest::startTimer(double wait_time) +{ + start_time_ = ros::Time::now(); + wait_time_ = wait_time; + //is_wait_ = true; +} + +void MicTest::finishTimer() +{ + //is_wait_ = false; + wait_time_ = -1; +} + +} /* namespace robotis_op */ diff --git a/op3_demo/src/test_node.cpp b/op3_demo/src/test_node.cpp new file mode 100644 index 0000000..8837c19 --- /dev/null +++ b/op3_demo/src/test_node.cpp @@ -0,0 +1,380 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include +#include +#include + +#include "op3_demo/soccer_demo.h" +#include "op3_demo/action_demo.h" +#include "op3_demo/vision_demo.h" +#include "op3_demo/button_test.h" +#include "op3_demo/mic_test.h" +#include "robotis_math/robotis_linear_algebra.h" +#include "robotis_controller_msgs/SyncWriteItem.h" + +enum Demo_Status +{ + Ready = 0, + ButtonTest = 1, + MicTest = 2, + SoccerDemo = 3, + VisionDemo = 4, + ActionDemo = 5, + DemoCount = 6, +}; + +void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); +void goInitPose(); +void playSound(const std::string &path); +void setLED(int led); +bool checkManagerRunning(std::string& manager_name); + +const int SPIN_RATE = 30; + +ros::Publisher init_pose_pub; +ros::Publisher play_sound_pub; +ros::Publisher led_pub; + +std::string default_mp3_path = ""; +int current_status = Ready; +int desired_status = Ready; +bool apply_desired = false; + +//node main +int main(int argc, char **argv) +{ + //init ros + ros::init(argc, argv, "self_test_node"); + + //create ros wrapper object + robotis_op::OPDemo *current_demo = NULL; + robotis_op::SoccerDemo *soccer_demo = new robotis_op::SoccerDemo(); + robotis_op::ActionDemo *action_demo = new robotis_op::ActionDemo(); + robotis_op::VisionDemo *vision_demo = new robotis_op::VisionDemo(); + robotis_op::ButtonTest *button_test = new robotis_op::ButtonTest(); + robotis_op::MicTest *mic_test = new robotis_op::MicTest(); + + ros::NodeHandle nh(ros::this_node::getName()); + + init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); + play_sound_pub = nh.advertise("/play_sound_file", 0); + led_pub = nh.advertise("/robotis/sync_write_item", 0); + ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + + default_mp3_path = ros::package::getPath("op3_demo") + "/Data/mp3/"; + + ros::start(); + + //set node loop rate + ros::Rate loop_rate(SPIN_RATE); + + // wait for starting of manager + std::string manager_name = "/op3_manager"; + while (ros::ok()) + { + ros::Duration(1.0).sleep(); + + if (checkManagerRunning(manager_name) == true) + { + break; + ROS_INFO("Succeed to connect"); + } + ROS_WARN("Waiting for op3 manager"); + } + + // init procedure + playSound(default_mp3_path + "test/Self test ready mode.mp3"); + setLED(0x01 | 0x02 | 0x04); + + //node loop + while (ros::ok()) + { + // process + if (apply_desired == true) + { + switch (desired_status) + { + case Ready: + { + + if (current_demo != NULL) + current_demo->setDemoDisable(); + + current_demo = NULL; + + goInitPose(); + + ROS_INFO("[Go to Demo READY!]"); + break; + } + + case SoccerDemo: + { + if (current_demo != NULL) + current_demo->setDemoDisable(); + + current_demo = soccer_demo; + current_demo->setDemoEnable(); + + ROS_INFO("[Start] Soccer Demo"); + break; + } + + case VisionDemo: + { + if (current_demo != NULL) + current_demo->setDemoDisable(); + + current_demo = vision_demo; + current_demo->setDemoEnable(); + ROS_INFO("[Start] Vision Demo"); + break; + } + case ActionDemo: + { + if (current_demo != NULL) + current_demo->setDemoDisable(); + + current_demo = action_demo; + current_demo->setDemoEnable(); + ROS_INFO("[Start] Action Demo"); + break; + } + case ButtonTest: + { + if (current_demo != NULL) + current_demo->setDemoDisable(); + + current_demo = button_test; + current_demo->setDemoEnable(); + ROS_INFO("[Start] Button Test"); + break; + } + case MicTest: + { + if (current_demo != NULL) + current_demo->setDemoDisable(); + + current_demo = mic_test; + current_demo->setDemoEnable(); + ROS_INFO("[Start] Mic Test"); + break; + } + + + default: + { + break; + } + } + + apply_desired = false; + current_status = desired_status; + } + else + { + if (current_status != desired_status) + { +// // sound out desired status +// switch (desired_status) +// { +// case SoccerDemo: +// playSound(default_path + "Autonomous soccer mode.mp3"); +// break; +// +// case VisionDemo: +// playSound(default_path + "Vision processing mode.mp3"); +// break; +// +// case ActionDemo: +// playSound(default_path + "Interactive motion mode.mp3"); +// break; +// +// default: +// break; +// } + } + } + + //execute pending callbacks + ros::spinOnce(); + + //relax to fit output rate + loop_rate.sleep(); + } + + //exit program + return 0; +} + +void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) +{ + // in the middle of playing demo + if (current_status != Ready) + { + if (msg->data == "mode_long") + { + // go to mode selection status + desired_status = Ready; + apply_desired = true; + + playSound(default_mp3_path + "test/Self test ready mode.mp3"); + setLED(0x01 | 0x02 | 0x04); + } + else if (msg->data == "user_long") + { + // it's using in op3_manager + // torque on and going to init pose + } + } + // ready to start demo + else + { + if (msg->data == "start") + { + // select current demo + desired_status = (desired_status == Ready) ? desired_status + 1 : desired_status; + apply_desired = true; + + // sound out desired status + switch (desired_status) + { + case SoccerDemo: + playSound(default_mp3_path + "Start soccer demonstration.mp3"); + break; + + case VisionDemo: + playSound(default_mp3_path + "Start vision processing demonstration.mp3"); + break; + + case ActionDemo: + playSound(default_mp3_path + "Start motion demonstration.mp3"); + break; + + case ButtonTest: + playSound(default_mp3_path + "test/Start button test mode.mp3"); + break; + + case MicTest: + playSound(default_mp3_path + "test/Start mic test mode.mp3"); + break; + + default: + break; + } + + ROS_INFO("= Start Demo Mode : %d", desired_status); + } + else if (msg->data == "mode") + { + // change to next demo + desired_status = (desired_status + 1) % DemoCount; + desired_status = (desired_status == Ready) ? desired_status + 1 : desired_status; + + // sound out desired status and changign LED + switch (desired_status) + { + case SoccerDemo: + playSound(default_mp3_path + "Autonomous soccer mode.mp3"); + setLED(0x01); + break; + + case VisionDemo: + playSound(default_mp3_path + "Vision processing mode.mp3"); + setLED(0x02); + break; + + case ActionDemo: + playSound(default_mp3_path + "Interactive motion mode.mp3"); + setLED(0x04); + break; + + case ButtonTest: + playSound(default_mp3_path + "test/Button test mode.mp3"); + setLED(0x01 | 0x02); + break; + + case MicTest: + playSound(default_mp3_path + "test/Mic test mode.mp3"); + setLED(0x01 | 0x04); + break; + + default: + break; + } + + ROS_INFO("= Demo Mode : %d", desired_status); + } + } +} + +void goInitPose() +{ + std_msgs::String init_msg; + init_msg.data = "ini_pose"; + + init_pose_pub.publish(init_msg); +} + +void playSound(const std::string &path) +{ + std_msgs::String sound_msg; + sound_msg.data = path; + + play_sound_pub.publish(sound_msg); +} + +void setLED(int led) +{ + robotis_controller_msgs::SyncWriteItem syncwrite_msg; + syncwrite_msg.item_name = "LED"; + syncwrite_msg.joint_name.push_back("open-cr"); + syncwrite_msg.value.push_back(led); + + led_pub.publish(syncwrite_msg); +} + +bool checkManagerRunning(std::string& manager_name) +{ + std::vector node_list; + ros::master::getNodes(node_list); + + for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); node_list_idx++) + { + if (node_list[node_list_idx] == manager_name) + return true; + } + + ROS_ERROR("Can't find op3_manager"); + return false; +} diff --git a/op3_demo/src/vision/face_tracker.cpp b/op3_demo/src/vision/face_tracker.cpp new file mode 100644 index 0000000..d90be33 --- /dev/null +++ b/op3_demo/src/vision/face_tracker.cpp @@ -0,0 +1,208 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include "op3_demo/face_tracker.h" + +namespace robotis_op +{ + +FaceTracker::FaceTracker() + : nh_(ros::this_node::getName()), + FOV_WIDTH(26.4 * M_PI / 180), + FOV_HEIGHT(21.6 * M_PI / 180), + NOT_FOUND_THRESHOLD(50), + use_head_scan_(false), + count_not_found_(0), + on_tracking_(false) +{ + head_joint_pub_ = nh_.advertise("/robotis/head_control/set_joint_states_offset", 0); + head_scan_pub_ = nh_.advertise("/robotis/head_control/scan_command", 0); + + face_position_sub_ = nh_.subscribe("/face_position", 1, &FaceTracker::facePositionCallback, this); + face_tracking_command_sub_ = nh_.subscribe("/face_tracker/command", 1, &FaceTracker::faceTrackerCommandCallback, + this); +} + +FaceTracker::~FaceTracker() +{ + +} + +void FaceTracker::facePositionCallback(const geometry_msgs::Point::ConstPtr &msg) +{ + if (msg->z < 0) + return; + + face_position_ = *msg; +} + +void FaceTracker::faceTrackerCommandCallback(const std_msgs::String::ConstPtr &msg) +{ + if (msg->data == "start") + { + startTracking(); + } + else if (msg->data == "stop") + { + stopTracking(); + } + else if (msg->data == "toggle_start") + { + if (on_tracking_ == false) + startTracking(); + else + stopTracking(); + } +} + +void FaceTracker::startTracking() +{ + on_tracking_ = true; + ROS_INFO("Start Face tracking"); +} + +void FaceTracker::stopTracking() +{ + on_tracking_ = false; + ROS_INFO("Stop Face tracking"); +} + +void FaceTracker::setUsingHeadScan(bool use_scan) +{ + use_head_scan_ = use_scan; +} + +void FaceTracker::setFacePosition(geometry_msgs::Point &face_position) +{ + if (face_position.z > 0) + { + face_position_ = face_position; + } +} + +int FaceTracker::processTracking() +{ + if (on_tracking_ == false) + { + face_position_.z = 0; + count_not_found_ = 0; + //return false; + return Waiting; + } + + // check ball position + if (face_position_.z <= 0) + { + count_not_found_++; + + if (count_not_found_ == NOT_FOUND_THRESHOLD) + { + scanFace(); + //count_not_found_ = 0; + return NotFound; + } + else if (count_not_found_ > NOT_FOUND_THRESHOLD) + { + return NotFound; + } + else + { + return Waiting; + } + + //return false; + } + + // if face is detected + double x_error = -atan(face_position_.x * tan(FOV_WIDTH)); + double y_error = -atan(face_position_.y * tan(FOV_HEIGHT)); + + face_position_.z = 0; + count_not_found_ = 0; + + double p_gain = 0.7, d_gain = 0.45; + double x_error_diff = x_error - current_face_pan_; + double y_error_diff = y_error - current_face_tilt_; + double x_error_target = x_error * p_gain + x_error_diff * d_gain; + double y_error_target = y_error * p_gain + y_error_diff * d_gain; + + // move head joint + publishHeadJoint(x_error_target, y_error_target); + + current_face_pan_ = x_error; + current_face_tilt_ = y_error; + + // return true; + return Found; +} + +void FaceTracker::publishHeadJoint(double pan, double tilt) +{ + double min_angle = 1 * M_PI / 180; + if (fabs(pan) < min_angle && fabs(tilt) < min_angle) + { + dismissed_count_ += 1; + return; + } + std::cout << "Target angle[" << dismissed_count_ << "] : " << pan << " | " << tilt << std::endl; + + dismissed_count_ = 0; + + sensor_msgs::JointState head_angle_msg; + + head_angle_msg.name.push_back("head_pan"); + head_angle_msg.name.push_back("head_tilt"); + + head_angle_msg.position.push_back(pan); + head_angle_msg.position.push_back(tilt); + + head_joint_pub_.publish(head_angle_msg); +} + +void FaceTracker::scanFace() +{ + if (use_head_scan_ == false) + return; + + // check head control module enabled + // ... + + // send message to head control module + std_msgs::String scan_msg; + scan_msg.data = "scan"; + + head_scan_pub_.publish(scan_msg); + // ROS_INFO("Scan the ball"); +} + +} + diff --git a/op3_demo/src/vision/vision_demo.cpp b/op3_demo/src/vision/vision_demo.cpp new file mode 100644 index 0000000..acc0e80 --- /dev/null +++ b/op3_demo/src/vision/vision_demo.cpp @@ -0,0 +1,247 @@ +/******************************************************************************* + * Copyright (c) 2016, ROBOTIS CO., LTD. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of ROBOTIS nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************/ + +/* Author: Kayman Jung */ + +#include "op3_demo/vision_demo.h" + +namespace robotis_op +{ + +VisionDemo::VisionDemo() + : SPIN_RATE(30), + is_tracking_(false), + tracking_status_(FaceTracker::Waiting) +{ + enable_ = false; + + ros::NodeHandle nh(ros::this_node::getName()); + + boost::thread queue_thread = boost::thread(boost::bind(&VisionDemo::callbackThread, this)); + boost::thread process_thread = boost::thread(boost::bind(&VisionDemo::processThread, this)); +} + +VisionDemo::~VisionDemo() +{ + // TODO Auto-generated destructor stub +} + +void VisionDemo::setDemoEnable() +{ + // change to motion module + setModuleToDemo("action_module"); + + usleep(100 * 1000); + + playMotion(InitPose); + + usleep(1500 * 1000); + + setModuleToDemo("head_control_module"); + + usleep(10 * 1000); + + enable_ = true; + face_tracker_.startTracking(); + + ROS_INFO("Start Vision Demo"); + +} + +void VisionDemo::setDemoDisable() +{ + + face_tracker_.stopTracking(); + is_tracking_ = false; + tracking_status_ = FaceTracker::Waiting; + enable_ = false; +} + +void VisionDemo::process() +{ + //bool is_tracked = face_tracker_.processTracking(); + int tracking_status = face_tracker_.processTracking(); + + //if(is_tracking_ != is_tracked) + if(tracking_status_ != tracking_status) + { +// if(is_tracked == true) +// setRGBLED(0x1F, 0, 0); +// else +// setRGBLED(0x1F, 0x1F, 0); + switch(tracking_status) + { + case FaceTracker::Found: + setRGBLED(0x1F, 0x1F, 0x1F); + break; + + case FaceTracker::NotFound: + setRGBLED(0, 0, 0); + break; + + default: + break; + } + } + + if(tracking_status != FaceTracker::Waiting) + tracking_status_ = tracking_status; + + //is_tracking_ = is_tracked; + std::cout << "Tracking : " << tracking_status << std::endl; +} + +void VisionDemo::processThread() +{ + //set node loop rate + ros::Rate loop_rate(SPIN_RATE); + + //node loop + while (ros::ok()) + { + if (enable_ == true) + process(); + + //relax to fit output rate + loop_rate.sleep(); + } +} + +void VisionDemo::callbackThread() +{ + ros::NodeHandle nh(ros::this_node::getName()); + + // subscriber & publisher + module_control_pub_ = nh.advertise("/robotis/enable_ctrl_module", 0); + motion_index_pub_ = nh.advertise("/robotis/action/page_num", 0); + rgb_led_pub_ = nh.advertise("/robotis/sync_write_item", 0); + + buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &VisionDemo::buttonHandlerCallback, this); + faceCoord_sub_ = nh.subscribe("/faceCoord", 1, &VisionDemo::facePositionCallback, this); + + while (nh.ok()) + { + ros::spinOnce(); + + usleep(1 * 1000); + } +} + +void VisionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) +{ + if (enable_ == false) + return; + + if (msg->data == "start") + { +// switch (play_status_) +// { +// case PlayAction: +// { +// pauseProcess(); +// break; +// } +// +// case PauseAction: +// { +// resumeProcess(); +// break; +// } +// +// case StopAction: +// { +// resumeProcess(); +// break; +// } +// +// default: +// break; +// } + } + else if (msg->data == "mode") + { + + } +} + +void VisionDemo::setModuleToDemo(const std::string &module_name) +{ + std_msgs::String control_msg; + control_msg.data = module_name; + + module_control_pub_.publish(control_msg); + std::cout << "enable module : " << module_name << std::endl; +} + +void VisionDemo::facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg) +{ + if (enable_ == false) + return; + + // face is detected + if (msg->data.size() >= 10) + { + // center of face + face_position_.x = (msg->data[6] + msg->data[8] * 0.5) / msg->data[2] * 2 - 1; + face_position_.y = (msg->data[7] + msg->data[9] * 0.5) / msg->data[3] * 2 - 1; + face_position_.z = msg->data[8] * 0.5 + msg->data[9] * 0.5; + + face_tracker_.setFacePosition(face_position_); + } + else + { + face_position_.x = 0; + face_position_.y = 0; + face_position_.z = 0; + return; + } +} + +void VisionDemo::playMotion(int motion_index) +{ + std_msgs::Int32 motion_msg; + motion_msg.data = motion_index; + + motion_index_pub_.publish(motion_msg); +} + +void VisionDemo::setRGBLED(int blue, int green, int red) +{ + int led_full_unit = 0x1F; + int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); + robotis_controller_msgs::SyncWriteItem syncwrite_msg; + syncwrite_msg.item_name = "LED_RGB"; + syncwrite_msg.joint_name.push_back("open-cr"); + syncwrite_msg.value.push_back(led_value); + + rgb_led_pub_.publish(syncwrite_msg); +} + +} /* namespace robotis_op */ diff --git a/robotis_op3_demo/CMakeLists.txt b/robotis_op3_demo/CMakeLists.txt new file mode 100644 index 0000000..d88f653 --- /dev/null +++ b/robotis_op3_demo/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 2.8.3) +project(robotis_op3_demo) +find_package(catkin REQUIRED) +catkin_metapackage() \ No newline at end of file diff --git a/robotis_op3_demo/package.xml b/robotis_op3_demo/package.xml new file mode 100644 index 0000000..112c0e7 --- /dev/null +++ b/robotis_op3_demo/package.xml @@ -0,0 +1,24 @@ + + + robotis_op3_demo + 0.1.0 + + ROS packages for the robotis_op3_demo (meta package) + + + BSD + Kayman + Pyo + + + + + + catkin + ball_detector + op3_demo + + + + + \ No newline at end of file From 3a6a2680286492986730d46715117726294e3214 Mon Sep 17 00:00:00 2001 From: Kayman Date: Mon, 5 Jun 2017 13:27:34 +0900 Subject: [PATCH 002/172] changed method of handling start button in the action demo --- op3_demo/src/action/action_demo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index 19d329c..10c7f88 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -127,7 +127,7 @@ void ActionDemo::process() case PauseAction: { stopMP3(); - stopAction(); + brakeAction(); break; } From 50378f052f1db6eb008d04b5d37c3210535dfefd Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 8 Jun 2017 09:19:28 +0900 Subject: [PATCH 003/172] cleaned up the code. --- .../include/ball_detector/ball_detector.h | 1 - ball_detector/src/ball_detector_node.cpp | 1 - op3_demo/CMakeLists.txt | 158 +++--------------- op3_demo/include/op3_demo/action_demo.h | 5 +- op3_demo/include/op3_demo/ball_follower.h | 2 +- op3_demo/include/op3_demo/ball_tracker.h | 3 - op3_demo/include/op3_demo/button_test.h | 17 -- op3_demo/include/op3_demo/op_demo.h | 4 - op3_demo/include/op3_demo/soccer_demo.h | 6 +- op3_demo/package.xml | 47 +----- op3_demo/script/action_script.yaml | 26 +-- op3_demo/src/action/action_demo.cpp | 58 +------ op3_demo/src/demo_node.cpp | 42 ++--- op3_demo/src/soccer/ball_follower.cpp | 33 ++-- op3_demo/src/soccer/ball_tracker.cpp | 74 ++------ op3_demo/src/soccer/soccer_demo.cpp | 30 ++-- op3_demo/src/soccer_demo_node.cpp | 20 +-- op3_demo/src/test/button_test.cpp | 91 ---------- op3_demo/src/test/mic_test.cpp | 9 - op3_demo/src/test_node.cpp | 24 --- 20 files changed, 105 insertions(+), 546 deletions(-) diff --git a/ball_detector/include/ball_detector/ball_detector.h b/ball_detector/include/ball_detector/ball_detector.h index da8338e..578d9be 100644 --- a/ball_detector/include/ball_detector/ball_detector.h +++ b/ball_detector/include/ball_detector/ball_detector.h @@ -33,7 +33,6 @@ #ifndef _BALL_DETECTOR_H_ #define _BALL_DETECTOR_H_ -//std #include #include diff --git a/ball_detector/src/ball_detector_node.cpp b/ball_detector/src/ball_detector_node.cpp index a7036cd..d54bb4e 100644 --- a/ball_detector/src/ball_detector_node.cpp +++ b/ball_detector/src/ball_detector_node.cpp @@ -47,7 +47,6 @@ int main(int argc, char **argv) //node loop while (ros::ok()) { - //if new image , do things if (detector.newImage()) { diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index 7d126c5..1a1913c 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -1,9 +1,12 @@ +################################################################################ +# CMake +################################################################################ cmake_minimum_required(VERSION 2.8.3) project(op3_demo) -## Find catkin macros and libraries -## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) -## is used, also find other catkin packages +################################################################################ +# Packages +################################################################################ find_package(catkin REQUIRED COMPONENTS roscpp roslib @@ -14,136 +17,41 @@ find_package(catkin REQUIRED COMPONENTS robotis_math ) -## System dependencies are found with CMake's conventions find_package(Eigen REQUIRED) -## Uncomment this if the package has a setup.py. This macro ensures -## modules and global scripts declared therein get installed -## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html -# catkin_python_setup() +################################################################################ +# Declare ROS messages, services and actions +################################################################################ -################################################ -## Declare ROS messages, services and actions ## -################################################ +################################################################################ +# Declare ROS dynamic reconfigure parameters +################################################################################ -## To declare and build messages, services or actions from within this -## package, follow these steps: -## * Let MSG_DEP_SET be the set of packages whose message types you use in -## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). -## * In the file package.xml: -## * add a build_depend tag for "message_generation" -## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET -## * If MSG_DEP_SET isn't empty the following dependency has been pulled in -## but can be declared for certainty nonetheless: -## * add a run_depend tag for "message_runtime" -## * In this file (CMakeLists.txt): -## * add "message_generation" and every package in MSG_DEP_SET to -## find_package(catkin REQUIRED COMPONENTS ...) -## * add "message_runtime" and every package in MSG_DEP_SET to -## catkin_package(CATKIN_DEPENDS ...) -## * uncomment the add_*_files sections below as needed -## and list every .msg/.srv/.action file to be processed -## * uncomment the generate_messages entry below -## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) - -## Generate messages in the 'msg' folder -# add_message_files( -# FILES -# Message1.msg -# Message2.msg -# ) - -## Generate services in the 'srv' folder -# add_service_files( -# FILES -# Service1.srv -# Service2.srv -# ) - -## Generate actions in the 'action' folder -# add_action_files( -# FILES -# Action1.action -# Action2.action -# ) - -## Generate added messages and services with any dependencies listed here -# generate_messages( -# DEPENDENCIES -# sensor_msgs -# ) - -################################################ -## Declare ROS dynamic reconfigure parameters ## -################################################ - -## To declare and build dynamic reconfigure parameters within this -## package, follow these steps: -## * In the file package.xml: -## * add a build_depend and a run_depend tag for "dynamic_reconfigure" -## * In this file (CMakeLists.txt): -## * add "dynamic_reconfigure" to -## find_package(catkin REQUIRED COMPONENTS ...) -## * uncomment the "generate_dynamic_reconfigure_options" section below -## and list every .cfg file to be processed - -## Generate dynamic reconfigure parameters in the 'cfg' folder -# generate_dynamic_reconfigure_options( -# cfg/DynReconf1.cfg -# cfg/DynReconf2.cfg -# ) - -################################### -## catkin specific configuration ## -################################### -## The catkin_package macro generates cmake config files for your package -## Declare things to be passed to dependent projects -## INCLUDE_DIRS: uncomment this if you package contains header files -## LIBRARIES: libraries you create in this project that dependent projects also need -## CATKIN_DEPENDS: catkin_packages dependent projects also need -## DEPENDS: system dependencies of this project that dependent projects also need +################################################################################ +# Catkin specific configuration +################################################################################ catkin_package( INCLUDE_DIRS include -# LIBRARIES ball_tracker CATKIN_DEPENDS roscpp sensor_msgs -# DEPENDS system_lib ) -########### -## Build ## -########### - -## Specify additional locations of header files -## Your package locations should be listed before other locations -# include_directories(include) +################################################################################ +# Build +################################################################################ include_directories( include ${catkin_INCLUDE_DIRS} ${Eigen_INCLUDE_DIRS} ) -## Declare a C++ library -# add_library(ball_tracking -# src/${PROJECT_NAME}/ball_tracking.cpp -# ) - -## Add cmake target dependencies of the library -## as an example, code may need to be generated before libraries -## either from message generation or dynamic reconfigure -# add_dependencies(ball_tracking ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - -## Declare a C++ executable add_executable(ball_tracker_node src/ball_tracker_node.cpp src/soccer/ball_tracker.cpp ) -## Add cmake target dependencies of the executable -## same as for the library above add_dependencies(ball_tracker_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) -## Specify libraries to link a library or executable target against target_link_libraries(ball_tracker_node ${catkin_LIBRARIES} yaml-cpp @@ -155,11 +63,8 @@ add_executable(soccer_demo_node src/soccer/ball_follower.cpp ) -## Add cmake target dependencies of the executable -## same as for the library above add_dependencies(soccer_demo_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) -## Specify libraries to link a library or executable target against target_link_libraries(soccer_demo_node ${catkin_LIBRARIES} yaml-cpp @@ -175,11 +80,8 @@ add_executable(op_demo_node src/vision/face_tracker.cpp ) -## Add cmake target dependencies of the executable -## same as for the library above add_dependencies(op_demo_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) -## Specify libraries to link a library or executable target against target_link_libraries(op_demo_node ${catkin_LIBRARIES} yaml-cpp @@ -197,19 +99,16 @@ add_executable(self_test_node src/test/mic_test.cpp ) -## Add cmake target dependencies of the executable -## same as for the library above add_dependencies(self_test_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) -## Specify libraries to link a library or executable target against target_link_libraries(self_test_node ${catkin_LIBRARIES} yaml-cpp ) -############# -## Install ## -############# +################################################################################ +# Install +################################################################################ # all install targets should use catkin DESTINATION variables # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html @@ -242,15 +141,6 @@ target_link_libraries(self_test_node # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} # ) -############# -## Testing ## -############# - -## Add gtest based cpp test target and link libraries -# catkin_add_gtest(${PROJECT_NAME}-test test/test_ball_tracking.cpp) -# if(TARGET ${PROJECT_NAME}-test) -# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) -# endif() - -## Add folders to be run by python nosetests -# catkin_add_nosetests(test) +################################################################################ +# Test +################################################################################ \ No newline at end of file diff --git a/op3_demo/include/op3_demo/action_demo.h b/op3_demo/include/op3_demo/action_demo.h index 303acfd..f990ac5 100644 --- a/op3_demo/include/op3_demo/action_demo.h +++ b/op3_demo/include/op3_demo/action_demo.h @@ -73,6 +73,7 @@ class ActionDemo : public OPDemo const int SPIN_RATE; const int DEMO_INIT_POSE; + const bool DEBUG_PRINT; void processThread(); void callbackThread(); @@ -118,10 +119,6 @@ class ActionDemo : public OPDemo std::string play_list_name_; int play_index_; - bool start_play_; - bool stop_play_; - bool pause_play_; - int play_status_; }; diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 632da76..bb5d862 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -75,6 +75,7 @@ class BallFollower } protected: + const bool DEBUG_PRINT; const double CAMERA_HEIGHT; const int NOT_FOUND_THRESHOLD; const double FOV_WIDTH; @@ -95,7 +96,6 @@ class BallFollower void setWalkingParam(double x_move, double y_move, double rotation_angle, bool balance = true); bool getWalkingParam(); - bool debug_print_; //ros node handle ros::NodeHandle nh_; diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/op3_demo/include/op3_demo/ball_tracker.h index 5fc1181..751309e 100644 --- a/op3_demo/include/op3_demo/ball_tracker.h +++ b/op3_demo/include/op3_demo/ball_tracker.h @@ -87,7 +87,6 @@ class BallTracker void ballPositionCallback(const ball_detector::circleSetStamped::ConstPtr &msg); void ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); - void currentJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg); void publishHeadJoint(double pan, double tilt); void scanBall(); @@ -103,7 +102,6 @@ class BallTracker ros::Subscriber ball_position_sub_; ros::Subscriber ball_tracking_command_sub_; - ros::Subscriber current_joint_states_sub_; // (x, y) is the center position of the ball in image coordinates // z is the ball radius @@ -112,7 +110,6 @@ class BallTracker bool use_head_scan_; int count_not_found_; bool on_tracking_; - double current_head_pan_, current_head_tilt_; double current_ball_pan_, current_ball_tilt_; double current_ball_bottom_; ros::Time prev_time_; diff --git a/op3_demo/include/op3_demo/button_test.h b/op3_demo/include/op3_demo/button_test.h index a858577..2647911 100644 --- a/op3_demo/include/op3_demo/button_test.h +++ b/op3_demo/include/op3_demo/button_test.h @@ -38,11 +38,8 @@ #include #include #include -//#include -//#include #include "op3_demo/op_demo.h" -//#include "op3_demo/face_tracker.h" #include "robotis_controller_msgs/SyncWriteItem.h" @@ -66,31 +63,17 @@ class ButtonTest : public OPDemo void process(); -// void playMotion(int motion_index); void setRGBLED(int blue, int green, int red); void setLED(int led); void playSound(const std::string &path); void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); -// void facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg); -// void setModuleToDemo(const std::string &module_name); - -// FaceTracker face_tracker_; - -// ros::Publisher module_control_pub_; -// ros::Publisher motion_index_pub_; ros::Publisher rgb_led_pub_; ros::Publisher play_sound_pub_; - ros::Subscriber buttuon_sub_; -// ros::Subscriber faceCoord_sub_; -// geometry_msgs::Point face_position_; - -// bool is_tracking_; -// int tracking_status_; std::string default_mp3_path_; int led_count_; int rgb_led_count_; diff --git a/op3_demo/include/op3_demo/op_demo.h b/op3_demo/include/op3_demo/op_demo.h index d68adf5..55e1785 100644 --- a/op3_demo/include/op3_demo/op_demo.h +++ b/op3_demo/include/op3_demo/op_demo.h @@ -43,10 +43,6 @@ class OPDemo { InitPose = 1, WalkingReady = 9, - //GetUpFront = 81, - //GetUpBack = 82, - //RightKick = 83, - //LeftKick = 84, GetUpFront = 122, GetUpBack = 123, RightKick = 121, diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index d0d17ce..c7cf790 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -72,9 +72,10 @@ class SoccerDemo : public OPDemo void setDemoDisable(); protected: - const double FALLEN_FORWARD_LIMIT; - const double FALLEN_BEHIND_LIMIT; + const double FALL_FORWARD_LIMIT; + const double FALL_BACK_LIMIT; const int SPIN_RATE; + const bool DEBUG_PRINT; void processThread(); void callbackThread(); @@ -110,7 +111,6 @@ class SoccerDemo : public OPDemo std::map id_joint_table_; std::map joint_id_table_; - bool debug_code_; int wait_count_; bool on_following_ball_; bool restart_soccer_; diff --git a/op3_demo/package.xml b/op3_demo/package.xml index d7f5134..b376b44 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -6,52 +6,18 @@ op3 default demo It includes three demontrations(soccer demo, vision demo, action script demo) - - - - - kayman - - - - - BSD - - - - - - - - - - - kayman + Pyo - - - - - - - - - - - - - catkin - + catkin roscpp roslib sensor_msgs ball_detector op3_walking_module_msgs cmake_modules - robotis_math - + robotis_math roscpp roslib sensor_msgs @@ -59,11 +25,4 @@ op3_walking_module_msgs cmake_modules robotis_math - - - - - - - \ No newline at end of file diff --git a/op3_demo/script/action_script.yaml b/op3_demo/script/action_script.yaml index 33a7501..077e820 100644 --- a/op3_demo/script/action_script.yaml +++ b/op3_demo/script/action_script.yaml @@ -1,19 +1,19 @@ # combination action page number and mp3 file path action_and_sound: - 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Thank you.mp3" - 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Introduction.mp3" - 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Wow.mp3" - 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Yes go.mp3" - 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Sit down.mp3" - 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Stand up.mp3" - 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Clap please.mp3" - 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" - 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Bye bye.mp3" -# 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" + 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Thank you.mp3" + 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Introduction.mp3" + 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Wow.mp3" + 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Yes go.mp3" + 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Sit down.mp3" + 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Stand up.mp3" + 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Clap please.mp3" + 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" + 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Bye bye.mp3" +# 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" 110 : "" - 111 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro01.mp3" - 115 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro02.mp3" - 118 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro03.mp3" + 111 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro01.mp3" + 115 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro02.mp3" + 118 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro03.mp3" # play list prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index 10c7f88..ecb9255 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -38,10 +38,8 @@ namespace robotis_op ActionDemo::ActionDemo() : SPIN_RATE(30), DEMO_INIT_POSE(8), + DEBUG_PRINT(false), play_index_(0), - start_play_(false), - stop_play_(false), - pause_play_(false), play_status_(StopAction) { enable_ = false; @@ -62,7 +60,6 @@ ActionDemo::ActionDemo() ActionDemo::~ActionDemo() { - // TODO Auto-generated destructor stub } void ActionDemo::setDemoEnable() @@ -73,7 +70,7 @@ void ActionDemo::setDemoEnable() enable_ = true; - ROS_INFO("Start ActionScript Demo"); + ROS_INFO_COND(DEBUG_PRINT, "Start ActionScript Demo"); playAction(DEMO_INIT_POSE); @@ -91,9 +88,6 @@ void ActionDemo::setDemoDisable() void ActionDemo::process() { - // check current status - //handleStatus(); - switch (play_status_) { case PlayAction: @@ -145,50 +139,25 @@ void ActionDemo::process() } } -void ActionDemo::handleStatus() -{ - if (start_play_ == true) - { - play_status_ = PlayAction; - start_play_ = false; - } - - if (pause_play_ == true) - { - play_status_ = PauseAction; - pause_play_ = false; - } - - if (stop_play_ == true) - { - play_status_ = StopAction; - stop_play_ = false; - } -} - void ActionDemo::startProcess(const std::string &set_name) { parseActionScriptSetName(script_path_, set_name); - start_play_ = true; play_status_ = PlayAction; } void ActionDemo::resumeProcess() { - start_play_ = true; play_status_ = PlayAction; } void ActionDemo::pauseProcess() { - pause_play_ = true; play_status_ = PauseAction; } void ActionDemo::stopProcess() { - stop_play_ = true; play_index_ = 0; play_status_ = StopAction; } @@ -294,7 +263,7 @@ bool ActionDemo::playActionWithSound(int motion_index) playAction(motion_index); playMP3(map_it->second); - ROS_INFO_STREAM("action : " << motion_index << ", mp3 path : " << map_it->second); + ROS_INFO_STREAM_COND(DEBUG_PRINT, "action : " << motion_index << ", mp3 path : " << map_it->second); return true; } @@ -399,27 +368,6 @@ void ActionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) void ActionDemo::setModuleToDemo(const std::string &module_name) { -// robotis_controller_msgs::JointCtrlModule control_msg; -// -// // todo : remove hard coding -// for (int ix = 1; ix <= 20; ix++) -// { -// std::string joint_name; -// -// if (getJointNameFromID(ix, joint_name) == false) -// continue; -// -// control_msg.joint_name.push_back(joint_name); -// control_msg.module_name.push_back(module_name); -// } -// -// // no control -// if (control_msg.joint_name.size() == 0) -// return; -// -// module_control_pub_.publish(control_msg); -// std::cout << "enable module : " << module_name << std::endl; - std_msgs::String control_msg; control_msg.data = "action_module"; diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp index 6647942..f37a09f 100644 --- a/op3_demo/src/demo_node.cpp +++ b/op3_demo/src/demo_node.cpp @@ -55,6 +55,7 @@ void setLED(int led); bool checkManagerRunning(std::string& manager_name); const int SPIN_RATE = 30; +const bool DEBUG_PRINT = false; ros::Publisher init_pose_pub; ros::Publisher play_sound_pub; @@ -100,13 +101,14 @@ int main(int argc, char **argv) if (checkManagerRunning(manager_name) == true) { break; - ROS_INFO("Succeed to connect"); + ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } ROS_WARN("Waiting for op3 manager"); } // init procedure playSound(default_mp3_path + "Demonstration ready mode.mp3"); + // turn on R/G/B LED setLED(0x01 | 0x02 | 0x04); //node loop @@ -127,7 +129,7 @@ int main(int argc, char **argv) goInitPose(); - ROS_INFO("[Go to Demo READY!]"); + ROS_INFO_COND(DEBUG_PRINT, "[Go to Demo READY!]"); break; } @@ -139,7 +141,7 @@ int main(int argc, char **argv) current_demo = soccer_demo; current_demo->setDemoEnable(); - ROS_INFO("[Start] Soccer Demo"); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Soccer Demo"); break; } @@ -150,7 +152,7 @@ int main(int argc, char **argv) current_demo = vision_demo; current_demo->setDemoEnable(); - ROS_INFO("[Start] Vision Demo"); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Vision Demo"); break; } case ActionDemo: @@ -160,7 +162,7 @@ int main(int argc, char **argv) current_demo = action_demo; current_demo->setDemoEnable(); - ROS_INFO("[Start] Action Demo"); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Action Demo"); break; } @@ -173,30 +175,6 @@ int main(int argc, char **argv) apply_desired = false; current_status = desired_status; } - else - { - if (current_status != desired_status) - { -// // sound out desired status -// switch (desired_status) -// { -// case SoccerDemo: -// playSound(default_path + "Autonomous soccer mode.mp3"); -// break; -// -// case VisionDemo: -// playSound(default_path + "Vision processing mode.mp3"); -// break; -// -// case ActionDemo: -// playSound(default_path + "Interactive motion mode.mp3"); -// break; -// -// default: -// break; -// } - } - } //execute pending callbacks ros::spinOnce(); @@ -257,7 +235,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) break; } - ROS_INFO("= Start Demo Mode : %d", desired_status); + ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); } else if (msg->data == "mode") { @@ -265,7 +243,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) desired_status = (desired_status + 1) % DemoCount; desired_status = (desired_status == Ready) ? desired_status + 1 : desired_status; - // sound out desired status and changign LED + // sound out desired status and changing LED switch (desired_status) { case SoccerDemo: @@ -287,7 +265,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) break; } - ROS_INFO("= Demo Mode : %d", desired_status); + ROS_INFO_COND(DEBUG_PRINT, "= Demo Mode : %d", desired_status); } } } diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index 1a4c465..723e9bb 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -60,7 +60,7 @@ BallFollower::BallFollower() current_tilt_(-10), current_x_move_(0.005), current_r_angle_(0), - debug_print_(false) + DEBUG_PRINT(false) { current_joint_states_sub_ = nh_.subscribe("/robotis/goal_joint_states", 10, &BallFollower::currentJointStatesCallback, this); @@ -157,10 +157,10 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ return false; } - ROS_INFO_COND(debug_print_, " ============== Head | Ball ============== "); - ROS_INFO_STREAM_COND(debug_print_, + ROS_INFO_COND(DEBUG_PRINT, " ============== Head | Ball ============== "); + ROS_INFO_STREAM_COND(DEBUG_PRINT, "== Head Pan : " << (current_pan_ * 180 / M_PI) << " | Ball X : " << (x_angle * 180 / M_PI)); - ROS_INFO_STREAM_COND(debug_print_, + ROS_INFO_STREAM_COND(DEBUG_PRINT, "== Head Tilt : " << (current_tilt_ * 180 / M_PI) << " | Ball Y : " << (y_angle * 180 / M_PI)); approach_ball_position_ = NotFound; @@ -179,20 +179,17 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ // check whether ball is correct position. if ((distance_to_ball < distance_to_kick) && (fabs(ball_x_angle) < 25.0)) - //if ((ball_y_angle < -65) && (fabs(current_pan_) < 25)) { count_to_kick_ += 1; - ROS_INFO_STREAM_COND(debug_print_, + ROS_INFO_STREAM_COND(DEBUG_PRINT, "head pan : " << (current_pan_ * 180 / M_PI) << " | ball pan : " << (x_angle * 180 / M_PI)); - ROS_INFO_STREAM_COND(debug_print_, + ROS_INFO_STREAM_COND(DEBUG_PRINT, "head tilt : " << (current_tilt_ * 180 / M_PI) << " | ball tilt : " << (y_angle * 180 / M_PI)); - ROS_INFO_STREAM_COND(debug_print_, "foot to kick : " << accum_ball_position_); + ROS_INFO_STREAM_COND(DEBUG_PRINT, "foot to kick : " << accum_ball_position_); ROS_INFO("In range [%d]", count_to_kick_); - //if (fabs(x_angle) < 10 * M_PI / 180) - //{ if (count_to_kick_ > 20) { setWalkingCommand("stop"); @@ -201,12 +198,12 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ // check direction of the ball if (accum_ball_position_ > 0) { - ROS_INFO("Ready to kick : left"); // left + ROS_INFO_COND(DEBUG_PRINT, "Ready to kick : left"); // left approach_ball_position_ = OnLeft; } else { - ROS_INFO("Ready to kick : right"); // right + ROS_INFO_COND(DEBUG_PRINT, "Ready to kick : right"); // right approach_ball_position_ = OnRight; } @@ -215,7 +212,6 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ else if (count_to_kick_ > 15) { if (ball_x_angle > 0) - //if( current_pan_ > 0) accum_ball_position_ += 1; else accum_ball_position_ -= 1; @@ -225,7 +221,6 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ return false; } - //} } else { @@ -245,15 +240,15 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ fb_move = fmax(fb_goal, MIN_FB_STEP); } - ROS_INFO("distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", distance_to_ball, fb_move, delta_time); - ROS_INFO("=============================================="); + ROS_INFO_COND(DEBUG_PRINT, "distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", distance_to_ball, fb_move, + delta_time); + ROS_INFO_COND(DEBUG_PRINT, "=============================================="); // calc rl angle double rl_goal, rl_angle; if (fabs(current_pan_) * 180 / M_PI > 5.0) { double rl_offset = fabs(current_pan_) * 0.3; - //double rl_offset = fabs(ball_x_angle) * 0.3; rl_goal = fmin(rl_offset, MAX_RL_TURN); rl_goal = fmax(rl_goal, MIN_RL_TURN); rl_angle = fmin(fabs(current_r_angle_) + UNIT_RL_TURN, rl_goal); @@ -289,7 +284,7 @@ void BallFollower::setWalkingCommand(const std::string &command) _command_msg.data = command; set_walking_command_pub_.publish(_command_msg); - ROS_INFO_STREAM("Send Walking command : " << command); + ROS_INFO_STREAM_COND(DEBUG_PRINT, "Send Walking command : " << command); } void BallFollower::setWalkingParam(double x_move, double y_move, double rotation_angle, bool balance) @@ -314,7 +309,7 @@ bool BallFollower::getWalkingParam() current_walking_param_ = walking_param_msg.response.parameters; // update ui - ROS_INFO("Get walking parameters"); + ROS_INFO_COND(DEBUG_PRINT, "Get walking parameters"); return true; } diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp index db47c0d..6584bd8 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -37,15 +37,12 @@ namespace robotis_op BallTracker::BallTracker() : nh_(ros::this_node::getName()), - //FOV_WIDTH(35.2 * M_PI / 180), FOV_WIDTH(26.4 * M_PI / 180), FOV_HEIGHT(21.6 * M_PI / 180), NOT_FOUND_THRESHOLD(50), use_head_scan_(true), count_not_found_(0), on_tracking_(false), - current_head_pan_(-10), - current_head_tilt_(-10), current_ball_pan_(0), current_ball_tilt_(0), current_ball_bottom_(0), @@ -57,10 +54,6 @@ BallTracker::BallTracker() ball_position_sub_ = nh_.subscribe("/ball_detector_node/circle_set", 1, &BallTracker::ballPositionCallback, this); ball_tracking_command_sub_ = nh_.subscribe("/ball_tracker/command", 1, &BallTracker::ballTrackerCommandCallback, this); - // todo : remove - current_joint_states_sub_ = nh_.subscribe("/robotis/goal_joint_states", 10, &BallTracker::currentJointStatesCallback, - this); - } BallTracker::~BallTracker() @@ -101,13 +94,13 @@ void BallTracker::ballTrackerCommandCallback(const std_msgs::String::ConstPtr &m void BallTracker::startTracking() { on_tracking_ = true; - ROS_INFO("Start Ball tracking"); + ROS_INFO_COND(DEBUG_PRINT, "Start Ball tracking"); } void BallTracker::stopTracking() { on_tracking_ = false; - ROS_INFO("Stop Ball tracking"); + ROS_INFO_COND(DEBUG_PRINT, "Stop Ball tracking"); } void BallTracker::setUsingHeadScan(bool use_scan) @@ -115,47 +108,12 @@ void BallTracker::setUsingHeadScan(bool use_scan) use_head_scan_ = use_scan; } -// todo : remove -void BallTracker::currentJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg) -{ - double pan, tilt; - int get_count = 0; - - // pan : right (-) , left (+) - // tilt : top (+), bottom (-) - for (int ix = 0; ix < msg->name.size(); ix++) - { - if (msg->name[ix] == "head_pan") - { - // convert direction for internal variable(x / pan) - pan = -msg->position[ix]; - get_count += 1; - } - else if (msg->name[ix] == "head_tilt") - { - tilt = msg->position[ix]; - get_count += 1; - } - - if (get_count == 2) - break; - } - - // check variation - if (current_head_pan_ == -10 || fabs(pan - current_head_pan_) < 5 * M_PI / 180) - current_head_pan_ = pan; - if (current_head_tilt_ == -10 || fabs(tilt - current_head_tilt_) < 5 * M_PI / 180) - current_head_tilt_ = tilt; -} - bool BallTracker::processTracking() { if (on_tracking_ == false) { ball_position_.z = 0; count_not_found_ = 0; - current_head_pan_ = -10; - current_head_tilt_ = -10; return false; } @@ -183,14 +141,9 @@ bool BallTracker::processTracking() ball_position_.z = 0; count_not_found_ = 0; - if (DEBUG_PRINT == true) - { - std::cout << "--------------------------------------------------------------" << std::endl; - std::cout << "Ball position : " << ball_position_.x << " | " << ball_position_.y << std::endl; - std::cout << "Target angle : " << (x_error * 180 / M_PI) << " | " << (y_error * 180 / M_PI) << std::endl; - std::cout << "Head angle : " << (current_head_pan_ * 180 / M_PI) << " | " << (current_head_tilt_ * 180 / M_PI) - << std::endl; - } + ROS_INFO_STREAM_COND(DEBUG_PRINT, "--------------------------------------------------------------"); + ROS_INFO_STREAM_COND(DEBUG_PRINT, "Ball position : " << ball_position_.x << " | " << ball_position_.y); + ROS_INFO_STREAM_COND(DEBUG_PRINT, "Target angle : " << (x_error * 180 / M_PI) << " | " << (y_error * 180 / M_PI)); ros::Time curr_time = ros::Time::now(); ros::Duration dur = curr_time - prev_time_; @@ -203,15 +156,13 @@ bool BallTracker::processTracking() double x_error_target = x_error * p_gain + x_error_diff * d_gain; double y_error_target = y_error * p_gain + y_error_diff * d_gain; - if (DEBUG_PRINT == true) - { - std::cout << "--------------------------------------------------------------" << std::endl; - std::cout << "error : " << (x_error * 180 / M_PI) << " | " << (y_error * 180 / M_PI) << std::endl; - std::cout << "error_diff : " << (x_error_diff * 180 / M_PI) << " | " << (y_error_diff * 180 / M_PI) << " | " - << delta_time << std::endl; - std::cout << "error_target : " << (x_error_target * 180 / M_PI) << " | " << (y_error_target * 180 / M_PI) - << " | P : " << p_gain << " | D : " << d_gain << std::endl; - } + + ROS_INFO_STREAM_COND(DEBUG_PRINT, "--------------------------------------------------------------"); + ROS_INFO_STREAM_COND(DEBUG_PRINT, "error : " << (x_error * 180 / M_PI) << " | " << (y_error * 180 / M_PI)); + ROS_INFO_STREAM_COND(DEBUG_PRINT, + "error_diff : " << (x_error_diff * 180 / M_PI) << " | " << (y_error_diff * 180 / M_PI) << " | " << delta_time); + ROS_INFO_STREAM_COND(DEBUG_PRINT, + "error_target : " << (x_error_target * 180 / M_PI) << " | " << (y_error_target * 180 / M_PI) << " | P : " << p_gain << " | D : " << d_gain); // move head joint publishHeadJoint(x_error_target, y_error_target); @@ -254,7 +205,6 @@ void BallTracker::scanBall() scan_msg.data = "scan"; head_scan_pub_.publish(scan_msg); - // ROS_INFO("Scan the ball"); } } diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index c3fc7cf..3801cd4 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -36,11 +36,10 @@ namespace robotis_op { SoccerDemo::SoccerDemo() - : FALLEN_FORWARD_LIMIT(60), - FALLEN_BEHIND_LIMIT(-60), + : FALL_FORWARD_LIMIT(60), + FALL_BACK_LIMIT(-60), SPIN_RATE(30), - debug_code_(false), - //enable_(false), + DEBUG_PRINT(false), wait_count_(0), on_following_ball_(false), restart_soccer_(false), @@ -74,12 +73,6 @@ void SoccerDemo::setDemoEnable() enable_ = true; startSoccerMode(); - - // handle enable procedure - // ball_tracker_.startTracking(); - // ball_follower_.startFollowing(); - - // wait_count_ = 1 * SPIN_RATE; } void SoccerDemo::setDemoDisable() @@ -113,13 +106,13 @@ void SoccerDemo::process() ball_follower_.startFollowing(); start_following_ = false; - wait_count_ = 1 * SPIN_RATE; // wait 1 sec + wait_count_ = 1 * SPIN_RATE; } // check to stop if (stop_following_ == true) { - //ball_tracker_.stopTracking(); + ball_tracker_.stopTracking(); ball_follower_.stopFollowing(); stop_following_ = false; @@ -386,7 +379,7 @@ void SoccerDemo::imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg) Eigen::MatrixXd rpy_orientation = robotis_framework::convertQuaternionToRPY(orientation); rpy_orientation *= (180 / M_PI); - ROS_INFO_COND(debug_code_, "Roll : %3.2f, Pitch : %2.2f", rpy_orientation.coeff(0, 0), rpy_orientation.coeff(1, 0)); + ROS_INFO_COND(DEBUG_PRINT, "Roll : %3.2f, Pitch : %2.2f", rpy_orientation.coeff(0, 0), rpy_orientation.coeff(1, 0)); double pitch = rpy_orientation.coeff(1, 0); @@ -396,9 +389,9 @@ void SoccerDemo::imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg) else present_pitch_ = present_pitch_ * (1 - alpha) + pitch * alpha; - if (present_pitch_ > FALLEN_FORWARD_LIMIT) + if (present_pitch_ > FALL_FORWARD_LIMIT) stand_state_ = Fallen_Forward; - else if (present_pitch_ < FALLEN_BEHIND_LIMIT) + else if (present_pitch_ < FALL_BACK_LIMIT) stand_state_ = Fallen_Behind; else stand_state_ = Stand; @@ -427,7 +420,8 @@ void SoccerDemo::handleKick(int ball_position) usleep(1000 * 1000); // change to motion module - setModuleToDemo("action_module"); + //setModuleToDemo("action_module"); + setBodyModuleToDemo("action_module"); usleep(1500 * 1000); @@ -451,7 +445,6 @@ void SoccerDemo::handleKick(int ball_position) break; } - // todo : remove this in order to play soccer repeatedly on_following_ball_ = false; usleep(2000 * 1000); @@ -460,10 +453,9 @@ void SoccerDemo::handleKick(int ball_position) return; // ceremony - //std::cout << "Go Ceremony!!!" << std::endl; //playMotion(Ceremony); - //restart_soccer_ = true; + restart_soccer_ = true; } bool SoccerDemo::handleFallen(int fallen_status) diff --git a/op3_demo/src/soccer_demo_node.cpp b/op3_demo/src/soccer_demo_node.cpp index 6332c7b..76d1f39 100644 --- a/op3_demo/src/soccer_demo_node.cpp +++ b/op3_demo/src/soccer_demo_node.cpp @@ -41,10 +41,12 @@ enum Motion_Index { - GetUpFront = 81, - GetUpBack = 82, - RightKick = 83, - LeftKick = 84, + InitPose = 1, + WalkingReady = 9, + GetUpFront = 122, + GetUpBack = 123, + RightKick = 121, + LeftKick = 120, Ceremony = 85, }; @@ -64,8 +66,8 @@ enum Robot_Status ReadyToGetup = 4, }; -const double FALLEN_FORWARD_LIMIT = 60; -const double FALLEN_BEHIND_LIMIT = -60; +const double FALL_FORWARD_LIMIT = 60; +const double FALL_BACK_LIMIT = -60; const int SPIN_RATE = 30; void callbackThread(); @@ -386,9 +388,9 @@ void imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg) else present_pitch = present_pitch * 0.5 + pitch * 0.5; - if (present_pitch > FALLEN_FORWARD_LIMIT) + if (present_pitch > FALL_FORWARD_LIMIT) stand_state = Fallen_Forward; - else if (present_pitch < FALLEN_BEHIND_LIMIT) + else if (present_pitch < FALL_BACK_LIMIT) stand_state = Fallen_Behind; else stand_state = Stand; @@ -417,7 +419,6 @@ void handleKick(int ball_position) usleep(500 * 1000); // change to motion module - // setBodyModuleToDemo("action_module"); setModuleToDemo("action_module"); usleep(1000 * 1000); @@ -489,7 +490,6 @@ bool handleFallen(int fallen_status) restart_soccer = true; // reset state - //stand_state = Stand; on_following_ball = false; return true; diff --git a/op3_demo/src/test/button_test.cpp b/op3_demo/src/test/button_test.cpp index 7421d98..f5c2d61 100644 --- a/op3_demo/src/test/button_test.cpp +++ b/op3_demo/src/test/button_test.cpp @@ -39,8 +39,6 @@ ButtonTest::ButtonTest() : SPIN_RATE(30), led_count_(0), rgb_led_count_(0) -// is_tracking_(false), -// tracking_status_(FaceTracker::Waiting) { enable_ = false; @@ -54,68 +52,23 @@ ButtonTest::ButtonTest() ButtonTest::~ButtonTest() { - // TODO Auto-generated destructor stub } void ButtonTest::setDemoEnable() { - // change to motion module -// setModuleToDemo("action_module"); - -// usleep(100 * 1000); - -// playMotion(InitPose); - -// usleep(1500 * 1000); - -// setModuleToDemo("head_control_module"); - -// usleep(10 * 1000); - enable_ = true; -// face_tracker_.startTracking(); ROS_INFO("Start Button Test"); - } void ButtonTest::setDemoDisable() { - -// face_tracker_.stopTracking(); -// is_tracking_ = false; -// tracking_status_ = FaceTracker::Waiting; enable_ = false; } void ButtonTest::process() { - //bool is_tracked = face_tracker_.processTracking(); -// int tracking_status = face_tracker_.processTracking(); -//if(is_tracking_ != is_tracked) -// if(tracking_status_ != tracking_status) -// { -// switch(tracking_status) -// { -// case FaceTracker::Found: -// setRGBLED(0x1F, 0x1F, 0x1F); -// break; -// -// case FaceTracker::NotFound: -// setRGBLED(0, 0, 0); -// break; -// -// default: -// break; -// } -// } - -// if(tracking_status != FaceTracker::Waiting) -// tracking_status_ = tracking_status; - -//is_tracking_ = is_tracked; -// std::cout << "Tracking : " << tracking_status << std::endl; } void ButtonTest::processThread() @@ -139,13 +92,10 @@ void ButtonTest::callbackThread() ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher -// module_control_pub_ = nh.advertise("/robotis/enable_ctrl_module", 0); -// motion_index_pub_ = nh.advertise("/robotis/action/page_num", 0); rgb_led_pub_ = nh.advertise("/robotis/sync_write_item", 0); play_sound_pub_ = nh.advertise("/play_sound_file", 0); buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &ButtonTest::buttonHandlerCallback, this); -// faceCoord_sub_ = nh.subscribe("/faceCoord", 1, &ButtonTest::facePositionCallback, this); while (nh.ok()) { @@ -194,47 +144,6 @@ void ButtonTest::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) } } -//void ButtonTest::setModuleToDemo(const std::string &module_name) -//{ -// std_msgs::String control_msg; -// control_msg.data = module_name; -// -// module_control_pub_.publish(control_msg); -// std::cout << "enable module : " << module_name << std::endl; -//} -// -//void ButtonTest::facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg) -//{ -// if (enable_ == false) -// return; -// -// // face is detected -// if (msg->data.size() >= 10) -// { -// // center of face -// face_position_.x = (msg->data[6] + msg->data[8] * 0.5) / msg->data[2] * 2 - 1; -// face_position_.y = (msg->data[7] + msg->data[9] * 0.5) / msg->data[3] * 2 - 1; -// face_position_.z = msg->data[8] * 0.5 + msg->data[9] * 0.5; -// -// face_tracker_.setFacePosition(face_position_); -// } -// else -// { -// face_position_.x = 0; -// face_position_.y = 0; -// face_position_.z = 0; -// return; -// } -//} -// -//void ButtonTest::playMotion(int motion_index) -//{ -// std_msgs::Int32 motion_msg; -// motion_msg.data = motion_index; -// -// motion_index_pub_.publish(motion_msg); -//} - void ButtonTest::setRGBLED(int blue, int green, int red) { int led_full_unit = 0x1F; diff --git a/op3_demo/src/test/mic_test.cpp b/op3_demo/src/test/mic_test.cpp index aeec922..dd0edfd 100644 --- a/op3_demo/src/test/mic_test.cpp +++ b/op3_demo/src/test/mic_test.cpp @@ -58,7 +58,6 @@ MicTest::MicTest() MicTest::~MicTest() { - // TODO Auto-generated destructor stub } void MicTest::setDemoEnable() @@ -68,7 +67,6 @@ void MicTest::setDemoEnable() enable_ = true; ROS_INFO("Start Mic test Demo"); - } void MicTest::setDemoDisable() @@ -185,15 +183,12 @@ void MicTest::announceTest() // play mic test sound playSound(default_mp3_path_ + "Announce mic test.mp3"); - //startTimer(3.0); usleep(3.4 * 1000 * 1000); } void MicTest::recordSound(int recording_time) { ROS_INFO("Start to record"); - // arecord -D plughw:1,0 -f S16_LE -c1 -r22050 -t raw -d 5 | lame -r -s 22.05 -m m -b 64 - mic-input.mp3 - // arecord -D plughw:1,0 -f S16_LE -c1 -r22050 -t wav -d 5 test.wav playSound(default_mp3_path_ + "Start recording.mp3"); @@ -209,8 +204,6 @@ void MicTest::recordSound(int recording_time) case -1: fprintf(stderr, "Fork Failed!! \n"); ROS_WARN("Fork Failed!! \n"); - //done_msg.data = "play_sound_fail"; - //g_done_msg_pub.publish(done_msg); break; case 0: @@ -283,12 +276,10 @@ void MicTest::startTimer(double wait_time) { start_time_ = ros::Time::now(); wait_time_ = wait_time; - //is_wait_ = true; } void MicTest::finishTimer() { - //is_wait_ = false; wait_time_ = -1; } diff --git a/op3_demo/src/test_node.cpp b/op3_demo/src/test_node.cpp index 8837c19..b1ab4a2 100644 --- a/op3_demo/src/test_node.cpp +++ b/op3_demo/src/test_node.cpp @@ -201,30 +201,6 @@ int main(int argc, char **argv) apply_desired = false; current_status = desired_status; } - else - { - if (current_status != desired_status) - { -// // sound out desired status -// switch (desired_status) -// { -// case SoccerDemo: -// playSound(default_path + "Autonomous soccer mode.mp3"); -// break; -// -// case VisionDemo: -// playSound(default_path + "Vision processing mode.mp3"); -// break; -// -// case ActionDemo: -// playSound(default_path + "Interactive motion mode.mp3"); -// break; -// -// default: -// break; -// } - } - } //execute pending callbacks ros::spinOnce(); From e8ead30ee79bd6849d47c5e9ee07784a9b7ea50d Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 8 Jun 2017 09:24:57 +0900 Subject: [PATCH 004/172] cleaned up the code. --- ball_detector/CMakeLists.txt | 121 ++++++++--------------------------- ball_detector/package.xml | 15 +---- 2 files changed, 27 insertions(+), 109 deletions(-) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index ed50e03..a25b556 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -1,9 +1,12 @@ +################################################################################ +# CMake +################################################################################ cmake_minimum_required(VERSION 2.8.3) project(ball_detector) -## Find catkin macros and libraries -## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) -## is used, also find other catkin packages +################################################################################ +# Packages +################################################################################ find_package(catkin REQUIRED COMPONENTS cv_bridge geometry_msgs @@ -15,121 +18,55 @@ find_package(catkin REQUIRED COMPONENTS message_generation ) -## System dependencies are found with CMake's conventions -# find_package(Boost REQUIRED COMPONENTS system) - - -## Uncomment this if the package has a setup.py. This macro ensures -## modules and global scripts declared therein get installed -## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html -# catkin_python_setup() - -################################################ -## Declare ROS messages, services and actions ## -################################################ - -## To declare and build messages, services or actions from within this -## package, follow these steps: -## * Let MSG_DEP_SET be the set of packages whose message types you use in -## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). -## * In the file package.xml: -## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET -## * If MSG_DEP_SET isn't empty the following dependencies might have been -## pulled in transitively but can be declared for certainty nonetheless: -## * add a build_depend tag for "message_generation" -## * add a run_depend tag for "message_runtime" -## * In this file (CMakeLists.txt): -## * add "message_generation" and every package in MSG_DEP_SET to -## find_package(catkin REQUIRED COMPONENTS ...) -## * add "message_runtime" and every package in MSG_DEP_SET to -## catkin_package(CATKIN_DEPENDS ...) -## * uncomment the add_*_files sections below as needed -## and list every .msg/.srv/.action file to be processed -## * uncomment the generate_messages entry below -## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) - -## Generate messages in the 'msg' folder +################################################################################ +# Declare ROS messages, services and actions +################################################################################ add_message_files( FILES circleSetStamped.msg ) -## Generate services in the 'srv' folder -# add_service_files( -# FILES -# Service1.srv -# Service2.srv -# ) - -## Generate actions in the 'action' folder -# add_action_files( -# FILES -# Action1.action -# Action2.action -# ) - -## Generate added messages and services with any dependencies listed here generate_messages( DEPENDENCIES geometry_msgs std_msgs ) -#dynamic reconfigure cfg file +################################################################################ +# Declare ROS dynamic reconfigure parameters +################################################################################ generate_dynamic_reconfigure_options(cfg/detector_params.cfg) -################################### -## catkin specific configuration ## -################################### -## The catkin_package macro generates cmake config files for your package -## Declare things to be passed to dependent projects -## INCLUDE_DIRS: uncomment this if you package contains header files -## LIBRARIES: libraries you create in this project that dependent projects also need -## CATKIN_DEPENDS: catkin_packages dependent projects also need -## DEPENDS: system dependencies of this project that dependent projects also need + +################################################################################ +# Catkin specific configuration +################################################################################ catkin_package( INCLUDE_DIRS include -# LIBRARIES ball_detector CATKIN_DEPENDS cv_bridge geometry_msgs image_transport roscpp rospy std_msgs dynamic_reconfigure -# DEPENDS system_lib ) -########### -## Build ## -########### - -## Specify additional locations of header files -## Your package locations should be listed before other locations -# include_directories(include) +################################################################################ +# Build +################################################################################ include_directories( include ${catkin_INCLUDE_DIRS} ) -## Declare a cpp library -#add_library(ball_detector -# src/BallDetector.cpp -# src/${PROJECT_NAME}/BallDetector.cpp -#) - -## Declare a cpp executable add_executable(ball_detector_node src/ball_detector.cpp src/ball_detector_node.cpp) -## Add cmake target dependencies of the executable/library -## as an example, message headers may need to be generated before nodes -# add_dependencies(ball_detector_node ball_detector_generate_messages_cpp) add_dependencies(ball_detector_node ${PROJECT_NAME}_gencfg) -## Specify libraries to link a library or executable target against target_link_libraries(ball_detector_node ${catkin_LIBRARIES} yaml-cpp ) -############# -## Install ## -############# +################################################################################ +# Install +################################################################################ # all install targets should use catkin DESTINATION variables # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html @@ -162,15 +99,7 @@ target_link_libraries(ball_detector_node # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} # ) -############# -## Testing ## -############# -## Add gtest based cpp test target and link libraries -# catkin_add_gtest(${PROJECT_NAME}-test test/test_ball_detector.cpp) -# if(TARGET ${PROJECT_NAME}-test) -# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) -# endif() - -## Add folders to be run by python nosetests -# catkin_add_nosetests(test) +################################################################################ +# Test +################################################################################ \ No newline at end of file diff --git a/ball_detector/package.xml b/ball_detector/package.xml index e6f4b56..62618a7 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -7,17 +7,11 @@ It requires and input image and publish, at frame rate, a marked image and a stamped array of circle centers and radius. - - kayman - BSD - - - kayman + Pyo - catkin - + catkin cv_bridge geometry_msgs image_transport @@ -26,7 +20,6 @@ std_msgs dynamic_reconfigure message_generation - cv_bridge geometry_msgs image_transport @@ -35,8 +28,4 @@ std_msgs dynamic_reconfigure message_runtime - - - - From 46e4272d7f25292bf528aa5a9b0903073214d0bb Mon Sep 17 00:00:00 2001 From: Zerom Date: Mon, 19 Jun 2017 15:25:17 +0900 Subject: [PATCH 005/172] Changing file permissions --- ball_detector/cfg/detector_params.cfg | 0 ball_detector/cfg/detector_params_blue.cfg | 0 ball_detector/cfg/detector_params_red.cfg | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 ball_detector/cfg/detector_params.cfg mode change 100644 => 100755 ball_detector/cfg/detector_params_blue.cfg mode change 100644 => 100755 ball_detector/cfg/detector_params_red.cfg diff --git a/ball_detector/cfg/detector_params.cfg b/ball_detector/cfg/detector_params.cfg old mode 100644 new mode 100755 diff --git a/ball_detector/cfg/detector_params_blue.cfg b/ball_detector/cfg/detector_params_blue.cfg old mode 100644 new mode 100755 diff --git a/ball_detector/cfg/detector_params_red.cfg b/ball_detector/cfg/detector_params_red.cfg old mode 100644 new mode 100755 From 288370a8dc449a0563b7ab20a33378284b79a70a Mon Sep 17 00:00:00 2001 From: Kayman Date: Mon, 10 Jul 2017 20:56:23 +0900 Subject: [PATCH 006/172] changed op3_demo --- op3_demo/include/op3_demo/ball_follower.h | 3 ++ op3_demo/src/soccer/ball_follower.cpp | 41 ++++++++++++++++------- op3_demo/src/soccer/soccer_demo.cpp | 6 ++-- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index bb5d862..bc7f97b 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -130,6 +130,9 @@ class BallFollower double hip_pitch_offset_; ros::Time prev_time_; + double curr_period_time_; + double accum_period_time_; + }; } diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index 723e9bb..e6192ed 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -46,7 +46,7 @@ BallFollower::BallFollower() kick_motion_index_(83), CAMERA_HEIGHT(0.46), NOT_FOUND_THRESHOLD(50), - MAX_FB_STEP(35.0 * 0.001), + MAX_FB_STEP(25.0 * 0.001), MAX_RL_TURN(15.0 * M_PI / 180), MIN_FB_STEP(5.0 * 0.001), MIN_RL_TURN(5.0 * M_PI / 180), @@ -54,12 +54,14 @@ BallFollower::BallFollower() UNIT_RL_TURN(0.5 * M_PI / 180), SPOT_FB_OFFSET(0.0 * 0.001), SPOT_RL_OFFSET(0.0 * 0.001), - SPOT_ANGLE_OFFSET(0.0 * M_PI / 180), + SPOT_ANGLE_OFFSET(0.0), hip_pitch_offset_(7.0), current_pan_(-10), current_tilt_(-10), current_x_move_(0.005), current_r_angle_(0), + curr_period_time_(0.6), + accum_period_time_(0.0), DEBUG_PRINT(false) { current_joint_states_sub_ = nh_.subscribe("/robotis/goal_joint_states", 10, &BallFollower::currentJointStatesCallback, @@ -90,10 +92,12 @@ void BallFollower::startFollowing() if (result == true) { hip_pitch_offset_ = current_walking_param_.hip_pitch_offset; + curr_period_time_ = current_walking_param_.period_time; } else { hip_pitch_offset_ = 7.0 * M_PI / 180; + curr_period_time_ = 0.6; } } @@ -228,27 +232,35 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ accum_ball_position_ = 0; } - fb_goal = fmin(distance_to_ball * 0.1, MAX_FB_STEP); - if ((distance_to_ball * 0.1 / 2) < current_x_move_) + double next_movement = current_x_move_; + double distance_to_walk = distance_to_ball - distance_to_kick; + if(distance_to_walk < 0) + distance_to_walk = 0.0; + + fb_goal = fmin(distance_to_walk * 0.1, MAX_FB_STEP); + + accum_period_time_ += delta_time; + if (accum_period_time_ > (curr_period_time_ * 0.25)) { - fb_goal = fmin(current_x_move_ - UNIT_FB_STEP, fb_goal); - fb_move = fmax(fb_goal, MIN_FB_STEP); - } - else - { - fb_goal = fmin(current_x_move_ + UNIT_FB_STEP, fb_goal); - fb_move = fmax(fb_goal, MIN_FB_STEP); + accum_period_time_ = 0.0; + if ((distance_to_walk * 0.1 / 2) < current_x_move_) + next_movement -= UNIT_FB_STEP; + else + next_movement += UNIT_FB_STEP; } + fb_goal = fmin(next_movement, fb_goal); + fb_move = fmax(fb_goal, MIN_FB_STEP); + ROS_INFO_COND(DEBUG_PRINT, "distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", distance_to_ball, fb_move, delta_time); ROS_INFO_COND(DEBUG_PRINT, "=============================================="); // calc rl angle - double rl_goal, rl_angle; + double rl_goal = 0.0, rl_angle = 0.0; if (fabs(current_pan_) * 180 / M_PI > 5.0) { - double rl_offset = fabs(current_pan_) * 0.3; + double rl_offset = fabs(current_pan_) * 0.2; rl_goal = fmin(rl_offset, MAX_RL_TURN); rl_goal = fmax(rl_goal, MIN_RL_TURN); rl_angle = fmin(fabs(current_r_angle_) + UNIT_RL_TURN, rl_goal); @@ -260,6 +272,9 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ // send message setWalkingParam(fb_move, 0, rl_angle); + // for debug + ROS_INFO("distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", distance_to_ball, fb_move, delta_time); + return false; } diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 3801cd4..6b3bfde 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -420,8 +420,7 @@ void SoccerDemo::handleKick(int ball_position) usleep(1000 * 1000); // change to motion module - //setModuleToDemo("action_module"); - setBodyModuleToDemo("action_module"); + setModuleToDemo("action_module"); usleep(1500 * 1000); @@ -446,6 +445,7 @@ void SoccerDemo::handleKick(int ball_position) } on_following_ball_ = false; + restart_soccer_ = true; usleep(2000 * 1000); @@ -454,8 +454,6 @@ void SoccerDemo::handleKick(int ball_position) // ceremony //playMotion(Ceremony); - - restart_soccer_ = true; } bool SoccerDemo::handleFallen(int fallen_status) From 464ef98717b9f3732f5fadf95e29e4dae1aca0ea Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 13 Jul 2017 16:43:12 +0900 Subject: [PATCH 007/172] cleanup unused files. modified tracking gains. --- op3_demo/CMakeLists.txt | 25 -- op3_demo/include/op3_demo/ball_follower.h | 5 +- op3_demo/include/op3_demo/op_demo.h | 1 + op3_demo/include/op3_demo/soccer_demo.h | 1 + op3_demo/launch/ball_tracker.launch | 10 - op3_demo/launch/demo.launch | 8 +- op3_demo/launch/self_test.launch | 4 +- op3_demo/src/ball_tracker_node.cpp | 133 ------ op3_demo/src/demo_node.cpp | 3 + op3_demo/src/soccer/ball_follower.cpp | 85 ++-- op3_demo/src/soccer/ball_tracker.cpp | 7 +- op3_demo/src/soccer/soccer_demo.cpp | 14 +- op3_demo/src/soccer_demo_node.cpp | 504 ---------------------- 13 files changed, 76 insertions(+), 724 deletions(-) delete mode 100644 op3_demo/launch/ball_tracker.launch delete mode 100644 op3_demo/src/ball_tracker_node.cpp delete mode 100644 op3_demo/src/soccer_demo_node.cpp diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index 1a1913c..dc1fdea 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -45,31 +45,6 @@ include_directories( ${Eigen_INCLUDE_DIRS} ) -add_executable(ball_tracker_node - src/ball_tracker_node.cpp - src/soccer/ball_tracker.cpp -) - -add_dependencies(ball_tracker_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - -target_link_libraries(ball_tracker_node - ${catkin_LIBRARIES} - yaml-cpp -) - -add_executable(soccer_demo_node - src/soccer_demo_node.cpp - src/soccer/ball_tracker.cpp - src/soccer/ball_follower.cpp -) - -add_dependencies(soccer_demo_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - -target_link_libraries(soccer_demo_node - ${catkin_LIBRARIES} - yaml-cpp -) - add_executable(op_demo_node src/demo_node.cpp src/soccer/soccer_demo.cpp diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index bc7f97b..9921056 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -95,8 +95,9 @@ class BallFollower void setWalkingCommand(const std::string &command); void setWalkingParam(double x_move, double y_move, double rotation_angle, bool balance = true); bool getWalkingParam(); - - + void calcFootstep(double target_distance, double target_angle, double delta_time, + double& fb_move, double& rl_angle); + //ros node handle ros::NodeHandle nh_; diff --git a/op3_demo/include/op3_demo/op_demo.h b/op3_demo/include/op3_demo/op_demo.h index 55e1785..938091a 100644 --- a/op3_demo/include/op3_demo/op_demo.h +++ b/op3_demo/include/op3_demo/op_demo.h @@ -48,6 +48,7 @@ class OPDemo RightKick = 121, LeftKick = 120, Ceremony = 85, + ForGrass = 20, }; OPDemo() diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index c7cf790..38abd9a 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -111,6 +111,7 @@ class SoccerDemo : public OPDemo std::map id_joint_table_; std::map joint_id_table_; + bool is_grass_; int wait_count_; bool on_following_ball_; bool restart_soccer_; diff --git a/op3_demo/launch/ball_tracker.launch b/op3_demo/launch/ball_tracker.launch deleted file mode 100644 index 94126b5..0000000 --- a/op3_demo/launch/ball_tracker.launch +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index 15ce10d..c96b5b9 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -2,7 +2,7 @@ - + @@ -17,7 +17,9 @@ - - + + + + diff --git a/op3_demo/launch/self_test.launch b/op3_demo/launch/self_test.launch index dea379d..0f34bca 100644 --- a/op3_demo/launch/self_test.launch +++ b/op3_demo/launch/self_test.launch @@ -2,7 +2,7 @@ - + @@ -17,7 +17,7 @@ - + diff --git a/op3_demo/src/ball_tracker_node.cpp b/op3_demo/src/ball_tracker_node.cpp deleted file mode 100644 index 62ed643..0000000 --- a/op3_demo/src/ball_tracker_node.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include "op3_demo/ball_tracker.h" - -enum Demo_Status -{ - Ready = 0, - DesireToTrack = 1, - DesireToStop = 2, - Tracking = 3, - DemoCount = 4, -}; -int current_status = Ready; - -void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); - - -//node main -int main(int argc, char **argv) -{ - //init ros - ros::init(argc, argv, "ball_tracker_node"); - ros::NodeHandle nh("~"); - ros::Publisher module_control_pub_ = nh.advertise("/robotis/enable_ctrl_module", 0); - ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); - - //create ros wrapper object - robotis_op::BallTracker tracker; - - // set head_control_module - std_msgs::String control_msg; - control_msg.data = "head_control_module"; - - usleep(1000 * 1000); - - module_control_pub_.publish(control_msg); - - // start ball tracking - tracker.startTracking(); - current_status = Tracking; - - //set node loop rate - ros::Rate loop_rate(30); - - //node loop - while (ros::ok()) - { - switch (current_status) - { - case DesireToTrack: - tracker.startTracking(); - current_status = Tracking; - break; - - case DesireToStop: - tracker.stopTracking(); - current_status = Ready; - break; - - case Tracking: - tracker.processTracking(); - break; - - default: - break; - } - - //execute pending callback - ros::spinOnce(); - - //relax to fit output rate - loop_rate.sleep(); - } - - //exit program - return 0; -} - -void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) -{ - if (msg->data == "mode_long") - { - - } - else if (msg->data == "start_long") - { - // it's using in op3_manager - // torque on and going to init pose - } - - if (msg->data == "start") - { - if (current_status == Ready) - current_status = DesireToTrack; - else if (current_status == Tracking) - current_status = DesireToStop; - } - else if (msg->data == "mode") - { - - } - -} diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp index f37a09f..0ab4bae 100644 --- a/op3_demo/src/demo_node.cpp +++ b/op3_demo/src/demo_node.cpp @@ -189,6 +189,9 @@ int main(int argc, char **argv) void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) { + if(apply_desired == true) + return; + // in the middle of playing demo if (current_status != Ready) { diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index e6192ed..18f0524 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -46,11 +46,11 @@ BallFollower::BallFollower() kick_motion_index_(83), CAMERA_HEIGHT(0.46), NOT_FOUND_THRESHOLD(50), - MAX_FB_STEP(25.0 * 0.001), + MAX_FB_STEP(35.0 * 0.001), MAX_RL_TURN(15.0 * M_PI / 180), MIN_FB_STEP(5.0 * 0.001), MIN_RL_TURN(5.0 * M_PI / 180), - UNIT_FB_STEP(0.5 * 0.001), + UNIT_FB_STEP(1.0 * 0.001), UNIT_RL_TURN(0.5 * M_PI / 180), SPOT_FB_OFFSET(0.0 * 0.001), SPOT_RL_OFFSET(0.0 * 0.001), @@ -139,6 +139,44 @@ void BallFollower::currentJointStatesCallback(const sensor_msgs::JointState::Con current_tilt_ = tilt; } +void BallFollower::calcFootstep(double target_distance, double target_angle, double delta_time, + double& fb_move, double& rl_angle) +{ + // clac fb + double next_movement = current_x_move_; + if (target_distance < 0) + target_distance = 0.0; + + double fb_goal = fmin(target_distance * 0.1, MAX_FB_STEP); + accum_period_time_ += delta_time; + if (accum_period_time_ > (curr_period_time_ / 4)) + { + accum_period_time_ = 0.0; + if ((target_distance * 0.1 / 2) < current_x_move_) + next_movement -= UNIT_FB_STEP; + else + next_movement += UNIT_FB_STEP; + } + fb_goal = fmin(next_movement, fb_goal); + fb_move = fmax(fb_goal, MIN_FB_STEP); + ROS_INFO_COND(DEBUG_PRINT, "distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", target_distance, fb_move, + delta_time); + ROS_INFO_COND(DEBUG_PRINT, "=============================================="); + + // calc rl angle + double rl_goal = 0.0; + if (fabs(target_angle) * 180 / M_PI > 5.0) + { + double rl_offset = fabs(target_angle) * 0.2; + rl_goal = fmin(rl_offset, MAX_RL_TURN); + rl_goal = fmax(rl_goal, MIN_RL_TURN); + rl_angle = fmin(fabs(current_r_angle_) + UNIT_RL_TURN, rl_goal); + + if (target_angle < 0) + rl_angle *= (-1); + } +} + // x_angle : ball position (pan), y_angle : ball position (tilt) bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_size) { @@ -169,7 +207,6 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ approach_ball_position_ = NotFound; - // clac fb double distance_to_ball = CAMERA_HEIGHT * tan(M_PI * 0.5 + current_tilt_ - hip_pitch_offset_ - ball_size); double ball_y_angle = (current_tilt_ + y_angle) * 180 / M_PI; @@ -178,8 +215,8 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ if (distance_to_ball < 0) distance_to_ball *= (-1); - double fb_goal, fb_move; - double distance_to_kick = 0.25; + //double distance_to_kick = 0.25; + double distance_to_kick = 0.22; // check whether ball is correct position. if ((distance_to_ball < distance_to_kick) && (fabs(ball_x_angle) < 25.0)) @@ -232,48 +269,16 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ accum_ball_position_ = 0; } - double next_movement = current_x_move_; + double fb_move = 0.0, rl_angle = 0.0; double distance_to_walk = distance_to_ball - distance_to_kick; - if(distance_to_walk < 0) - distance_to_walk = 0.0; - fb_goal = fmin(distance_to_walk * 0.1, MAX_FB_STEP); - - accum_period_time_ += delta_time; - if (accum_period_time_ > (curr_period_time_ * 0.25)) - { - accum_period_time_ = 0.0; - if ((distance_to_walk * 0.1 / 2) < current_x_move_) - next_movement -= UNIT_FB_STEP; - else - next_movement += UNIT_FB_STEP; - } - - fb_goal = fmin(next_movement, fb_goal); - fb_move = fmax(fb_goal, MIN_FB_STEP); - - ROS_INFO_COND(DEBUG_PRINT, "distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", distance_to_ball, fb_move, - delta_time); - ROS_INFO_COND(DEBUG_PRINT, "=============================================="); - - // calc rl angle - double rl_goal = 0.0, rl_angle = 0.0; - if (fabs(current_pan_) * 180 / M_PI > 5.0) - { - double rl_offset = fabs(current_pan_) * 0.2; - rl_goal = fmin(rl_offset, MAX_RL_TURN); - rl_goal = fmax(rl_goal, MIN_RL_TURN); - rl_angle = fmin(fabs(current_r_angle_) + UNIT_RL_TURN, rl_goal); - - if (current_pan_ < 0) - rl_angle *= (-1); - } + calcFootstep(distance_to_walk, current_pan_, delta_time, fb_move, rl_angle); // send message setWalkingParam(fb_move, 0, rl_angle); // for debug - ROS_INFO("distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", distance_to_ball, fb_move, delta_time); + //ROS_INFO("distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", distance_to_ball, fb_move, delta_time); return false; } diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp index 6584bd8..da8ade2 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -101,6 +101,10 @@ void BallTracker::stopTracking() { on_tracking_ = false; ROS_INFO_COND(DEBUG_PRINT, "Stop Ball tracking"); + + double x_error = -atan(ball_position_.x * tan(FOV_WIDTH)); + double y_error = -atan(ball_position_.y * tan(FOV_HEIGHT)); + publishHeadJoint(x_error, y_error); } void BallTracker::setUsingHeadScan(bool use_scan) @@ -150,7 +154,8 @@ bool BallTracker::processTracking() double delta_time = dur.nsec * 0.000000001 + dur.sec; prev_time_ = curr_time; - double p_gain = 0.7, d_gain = 0.02; + // double p_gain = 0.75, d_gain = 0.05; + double p_gain = 0.7, d_gain = 0.05; double x_error_diff = (x_error - current_ball_pan_) / delta_time; double y_error_diff = (y_error - current_ball_tilt_) / delta_time; double x_error_target = x_error * p_gain + x_error_diff * d_gain; diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 6b3bfde..675e094 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -61,6 +61,8 @@ SoccerDemo::SoccerDemo() boost::thread queue_thread = boost::thread(boost::bind(&SoccerDemo::callbackThread, this)); boost::thread process_thread = boost::thread(boost::bind(&SoccerDemo::processThread, this)); + + is_grass_ = nh.param("grass_demo", false); } SoccerDemo::~SoccerDemo() @@ -103,12 +105,16 @@ void SoccerDemo::process() if (start_following_ == true) { ball_tracker_.startTracking(); + // for debug ball_follower_.startFollowing(); start_following_ = false; wait_count_ = 1 * SPIN_RATE; } + //for debug + //return; + // check to stop if (stop_following_ == true) { @@ -432,12 +438,12 @@ void SoccerDemo::handleKick(int ball_position) { case robotis_op::BallFollower::OnRight: std::cout << "Kick Motion [R]: " << ball_position << std::endl; - playMotion(RightKick); + playMotion(is_grass_ ? RightKick + ForGrass : RightKick); break; case robotis_op::BallFollower::OnLeft: std::cout << "Kick Motion [L]: " << ball_position << std::endl; - playMotion(LeftKick); + playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); break; default: @@ -473,12 +479,12 @@ bool SoccerDemo::handleFallen(int fallen_status) { case Fallen_Forward: std::cout << "Getup Motion [F]: " << std::endl; - playMotion(GetUpFront); + playMotion(is_grass_ ? GetUpFront + ForGrass : GetUpFront); break; case Fallen_Behind: std::cout << "Getup Motion [B]: " << std::endl; - playMotion(GetUpBack); + playMotion(is_grass_ ? GetUpBack + ForGrass : GetUpBack); break; default: diff --git a/op3_demo/src/soccer_demo_node.cpp b/op3_demo/src/soccer_demo_node.cpp deleted file mode 100644 index 76d1f39..0000000 --- a/op3_demo/src/soccer_demo_node.cpp +++ /dev/null @@ -1,504 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include -#include -#include -#include - -#include "op3_demo/ball_tracker.h" -#include "op3_demo/ball_follower.h" -#include "robotis_math/robotis_linear_algebra.h" - -enum Motion_Index -{ - InitPose = 1, - WalkingReady = 9, - GetUpFront = 122, - GetUpBack = 123, - RightKick = 121, - LeftKick = 120, - Ceremony = 85, -}; - -enum Stand_Status -{ - Stand = 0, - Fallen_Forward = 1, - Fallen_Behind = 2, -}; - -enum Robot_Status -{ - Waited = 0, - TrackingAndFollowing = 1, - ReadyToKick = 2, - ReadyToCeremony = 3, - ReadyToGetup = 4, -}; - -const double FALL_FORWARD_LIMIT = 60; -const double FALL_BACK_LIMIT = -60; -const int SPIN_RATE = 30; - -void callbackThread(); - -void setBodyModuleToDemo(const std::string &body_module); -void setModuleToDemo(const std::string &module_name); -void parseJointNameFromYaml(const std::string &path); -bool getJointNameFromID(const int &id, std::string &joint_name); -bool getIDFromJointName(const std::string &joint_name, int &id); -void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); -void demoCommandCallback(const std_msgs::String::ConstPtr& msg); -void imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg); - -void startSoccerMode(); -void stopSoccerMode(); - -void handleKick(int ball_position); -bool handleFallen(int fallen_status); - -void playMotion(int motion_index); - -ros::Publisher module_control_pub; -ros::Publisher motion_index_pub; -ros::Subscriber buttuon_sub; -ros::Subscriber demo_command_sub; -ros::Subscriber imu_data_sub; -std::map id_joint_table; -std::map joint_id_table; - -int wait_count = 0; -bool on_following_ball = false; -bool restart_soccer = false; -bool start_following = false; -bool stop_following = false; -bool stop_fallen_check = false; -int robot_status = Waited; -int stand_state = Stand; -double present_pitch = 0; - -bool debug_code = false; - -//node main -int main(int argc, char **argv) -{ - //init ros - ros::init(argc, argv, "soccer_demo_node"); - - //create ros wrapper object - robotis_op::BallTracker tracker; - robotis_op::BallFollower follower; - - ros::NodeHandle nh(ros::this_node::getName()); - - std::string _default_path = ros::package::getPath("op3_gui_demo") + "/config/demo_config.yaml"; - std::string _path = nh.param("demo_config", _default_path); - parseJointNameFromYaml(_path); - - boost::thread queue_thread = boost::thread(boost::bind(&callbackThread)); - - bool result = false; - - //set node loop rate - ros::Rate loop_rate(SPIN_RATE); - - tracker.startTracking(); - - //node loop - while (ros::ok()) - { - // ball tracking - bool is_tracked; - is_tracked = tracker.processTracking(); - - if (start_following == true) - { - tracker.startTracking(); - follower.startFollowing(); - start_following = false; - - wait_count = 1 * SPIN_RATE; // wait 1 sec - } - - if (stop_following == true) - { - follower.stopFollowing(); - stop_following = false; - - wait_count = 0; - } - - if (wait_count <= 0) - { - // ball following - if (on_following_ball == true) - { - if (is_tracked) - follower.processFollowing(tracker.getPanOfBall(), tracker.getTiltOfBall(), tracker.getBallSize()); - else - follower.waitFollowing(); - } - - // check fallen states - switch (stand_state) - { - case Stand: - { - // check restart soccer - if (restart_soccer == true) - { - restart_soccer = false; - startSoccerMode(); - break; - } - - // check states for kick - int ball_position = follower.getBallPosition(); - if (ball_position != robotis_op::BallFollower::NotFound) - { - follower.stopFollowing(); - handleKick(ball_position); - } - break; - } - - // fallen state : Fallen_Forward, Fallen_Behind - default: - { - follower.stopFollowing(); - handleFallen(stand_state); - break; - } - } - } - else - { - wait_count -= 1; - } - - //execute pending callbacks - ros::spinOnce(); - - //relax to fit output rate - loop_rate.sleep(); - } - - //exit program - return 0; -} - -void callbackThread() -{ - ros::NodeHandle nh(ros::this_node::getName()); - - // subscriber & publisher - module_control_pub = nh.advertise("/robotis/set_joint_ctrl_modules", 0); - motion_index_pub = nh.advertise("/robotis/action/page_num", 0); - buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); - demo_command_sub = nh.subscribe("/ball_tracker/command", 1, demoCommandCallback); - imu_data_sub = nh.subscribe("/robotis/open_cr/imu", 1, imuDataCallback); - - while (nh.ok()) - { - ros::spinOnce(); - - usleep(1000); - } -} - -void setBodyModuleToDemo(const std::string &body_module) -{ - robotis_controller_msgs::JointCtrlModule control_msg; - - //std::string body_module = "action_module"; - std::string head_module = "head_control_module"; - - // todo : remove hard coding - for (int ix = 1; ix <= 20; ix++) - { - std::string joint_name; - - if (getJointNameFromID(ix, joint_name) == false) - continue; - - control_msg.joint_name.push_back(joint_name); - if (ix <= 18) - control_msg.module_name.push_back(body_module); - else - control_msg.module_name.push_back(head_module); - - } - - // no control - if (control_msg.joint_name.size() == 0) - return; - - module_control_pub.publish(control_msg); - std::cout << "enable module of body : " << body_module << std::endl; -} - -void setModuleToDemo(const std::string &module_name) -{ - robotis_controller_msgs::JointCtrlModule control_msg; - - // todo : remove hard coding - for (int ix = 1; ix <= 20; ix++) - { - std::string joint_name; - - if (getJointNameFromID(ix, joint_name) == false) - continue; - - control_msg.joint_name.push_back(joint_name); - control_msg.module_name.push_back(module_name); - } - - // no control - if (control_msg.joint_name.size() == 0) - return; - - module_control_pub.publish(control_msg); - std::cout << "enable module : " << module_name << std::endl; -} - -void parseJointNameFromYaml(const std::string &path) -{ - YAML::Node doc; - try - { - // load yaml - doc = YAML::LoadFile(path.c_str()); - } catch (const std::exception& e) - { - ROS_ERROR("Fail to load id_joint table yaml."); - return; - } - - // parse id_joint table - YAML::Node _id_sub_node = doc["id_joint"]; - for (YAML::iterator _it = _id_sub_node.begin(); _it != _id_sub_node.end(); ++_it) - { - int _id; - std::string _joint_name; - - _id = _it->first.as(); - _joint_name = _it->second.as(); - - id_joint_table[_id] = _joint_name; - joint_id_table[_joint_name] = _id; - } -} - -// joint id -> joint name -bool getJointNameFromID(const int &id, std::string &joint_name) -{ - std::map::iterator _iter; - - _iter = id_joint_table.find(id); - if (_iter == id_joint_table.end()) - return false; - - joint_name = _iter->second; - return true; -} - -// joint name -> joint id -bool getIDFromJointName(const std::string &joint_name, int &id) -{ - std::map::iterator _iter; - - _iter = joint_id_table.find(joint_name); - if (_iter == joint_id_table.end()) - return false; - - id = _iter->second; - return true; -} - -void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) -{ - if (msg->data == "start") - { - if (on_following_ball == true) - stopSoccerMode(); - else - startSoccerMode(); - } -} - -void demoCommandCallback(const std_msgs::String::ConstPtr &msg) -{ - if (msg->data == "start") - { - if (on_following_ball == true) - stopSoccerMode(); - else - startSoccerMode(); - } - else if (msg->data == "stop") - { - stopSoccerMode(); - } -} - -// check fallen states -void imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg) -{ - if (stop_fallen_check == true) - return; - - Eigen::Quaterniond orientation(msg->orientation.w, msg->orientation.x, msg->orientation.y, msg->orientation.z); - Eigen::MatrixXd rpy_orientation = robotis_framework::convertQuaternionToRPY(orientation); - rpy_orientation *= (180 / M_PI); - - double pitch = rpy_orientation.coeff(1, 0); - - if (present_pitch == 0) - present_pitch = pitch; - else - present_pitch = present_pitch * 0.5 + pitch * 0.5; - - if (present_pitch > FALL_FORWARD_LIMIT) - stand_state = Fallen_Forward; - else if (present_pitch < FALL_BACK_LIMIT) - stand_state = Fallen_Behind; - else - stand_state = Stand; -} - -void startSoccerMode() -{ - setBodyModuleToDemo("walking_module"); - - usleep(10 * 1000); - - ROS_INFO("Start Soccer Demo"); - on_following_ball = true; - start_following = true; -} - -void stopSoccerMode() -{ - ROS_INFO("Stop Soccer Demo"); - on_following_ball = false; - stop_following = true; -} - -void handleKick(int ball_position) -{ - usleep(500 * 1000); - - // change to motion module - setModuleToDemo("action_module"); - - usleep(1000 * 1000); - - if (handleFallen(stand_state) == true) - return; - - // kick motion - switch (ball_position) - { - case robotis_op::BallFollower::OnRight: - std::cout << "Kick Motion [R]: " << ball_position << std::endl; - playMotion(RightKick); - break; - - case robotis_op::BallFollower::OnLeft: - std::cout << "Kick Motion [L]: " << ball_position << std::endl; - playMotion(LeftKick); - break; - - default: - break; - } - - on_following_ball = false; - - usleep(2000 * 1000); - - if (handleFallen(stand_state) == true) - return; - - // ceremony - std::cout << "Go Ceremony!!!" << std::endl; - playMotion(Ceremony); -} - -bool handleFallen(int fallen_status) -{ - if (fallen_status == Stand) - { - return false; - } - - // change to motion module - setModuleToDemo("action_module"); - - usleep(600 * 1000); - - // getup motion - switch (fallen_status) - { - case Fallen_Forward: - std::cout << "Getup Motion [F]: " << std::endl; - playMotion(GetUpFront); - break; - - case Fallen_Behind: - std::cout << "Getup Motion [B]: " << std::endl; - playMotion(GetUpBack); - break; - - default: - break; - } - - usleep(500 * 1000); - - if (on_following_ball == true) - restart_soccer = true; - - // reset state - on_following_ball = false; - - return true; -} - -void playMotion(int motion_index) -{ - std_msgs::Int32 motion_msg; - motion_msg.data = motion_index; - - motion_index_pub.publish(motion_msg); -} From 54433c57cd39d8fabf77ed86cfc53e7ea32f4b63 Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 18 Jul 2017 11:37:02 +0900 Subject: [PATCH 008/172] cleanup the code. improved robotis op3 default demo. --- ball_detector/src/ball_detector.cpp | 169 ++++++----------------- op3_demo/include/op3_demo/ball_tracker.h | 11 +- op3_demo/include/op3_demo/soccer_demo.h | 11 +- op3_demo/launch/demo.launch | 4 +- op3_demo/src/demo_node.cpp | 14 ++ op3_demo/src/soccer/ball_follower.cpp | 6 +- op3_demo/src/soccer/ball_tracker.cpp | 73 +++++++--- op3_demo/src/soccer/soccer_demo.cpp | 80 ++++++++++- op3_demo/src/vision/vision_demo.cpp | 6 - 9 files changed, 215 insertions(+), 159 deletions(-) diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index bbe4f8d..77b00b9 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -39,12 +39,12 @@ namespace robotis_op { BallDetector::BallDetector() -: nh_(ros::this_node::getName()), - it_(this->nh_), - enable_(true), - params_config_(), - init_param_(false), - not_found_count_(0) + : nh_(ros::this_node::getName()), + it_(this->nh_), + enable_(true), + params_config_(), + init_param_(false), + not_found_count_(0) { has_path_ = nh_.getParam("yaml_path", param_path_); @@ -127,7 +127,7 @@ bool BallDetector::newImage() void BallDetector::process() { - if(enable_ == false) + if (enable_ == false) return; if (cv_img_ptr_sub_ != NULL) @@ -145,7 +145,7 @@ void BallDetector::process() void BallDetector::publishImage() { - if(enable_ == false) + if (enable_ == false) return; //image_raw topic @@ -171,7 +171,7 @@ void BallDetector::publishImage() void BallDetector::publishCircles() { - if(enable_ == false) + if (enable_ == false) return; if (circles_.size() == 0) @@ -198,10 +198,6 @@ void BallDetector::publishCircles() //publish message circles_pub_.publish(circles_msg_); - - //ball_detecting process time - //ros::Duration _process_dur = ros::Time::now() - sub_time_; - //ROS_INFO_STREAM("== Ball detecting processing time : " << _process_dur); } void BallDetector::enableCallback(const std_msgs::Bool::ConstPtr &msg) @@ -211,7 +207,7 @@ void BallDetector::enableCallback(const std_msgs::Bool::ConstPtr &msg) void BallDetector::imageCallback(const sensor_msgs::ImageConstPtr & msg) { - if(enable_ == false) + if (enable_ == false) return; try @@ -272,7 +268,7 @@ void BallDetector::dynParamCallback(ball_detector::detectorParamsConfig &config, void BallDetector::cameraInfoCallback(const sensor_msgs::CameraInfo & msg) { - if(enable_ == false) + if (enable_ == false) return; camera_info_msg_ = msg; @@ -284,27 +280,27 @@ void BallDetector::printConfig() return; std::cout << "Detetctor Configuration:" << std::endl << " gaussian_blur_size: " - << params_config_.gaussian_blur_size << std::endl << " gaussian_blur_sigma: " - << params_config_.gaussian_blur_sigma << std::endl << " canny_edge_th: " << params_config_.canny_edge_th - << std::endl << " hough_accum_resolution: " << params_config_.hough_accum_resolution << std::endl - << " min_circle_dist: " << params_config_.min_circle_dist << std::endl << " hough_accum_th: " - << params_config_.hough_accum_th << std::endl << " min_radius: " << params_config_.min_radius - << std::endl << " max_radius: " << params_config_.max_radius << std::endl << " filter_h_min: " - << params_config_.filter_threshold.h_min << std::endl << " filter_h_max: " - << params_config_.filter_threshold.h_max << std::endl << " filter_s_min: " - << params_config_.filter_threshold.s_min << std::endl << " filter_s_max: " - << params_config_.filter_threshold.s_max << std::endl << " filter_v_min: " - << params_config_.filter_threshold.v_min << std::endl << " filter_v_max: " - << params_config_.filter_threshold.v_max << std::endl << " use_second_filter: " - << params_config_.use_second_filter << std::endl << " filter2_h_min: " - << params_config_.filter2_threshold.h_min << std::endl << " filter2_h_max: " - << params_config_.filter2_threshold.h_max << std::endl << " filter2_s_min: " - << params_config_.filter2_threshold.s_min << std::endl << " filter2_s_max: " - << params_config_.filter2_threshold.s_max << std::endl << " filter2_v_min: " - << params_config_.filter2_threshold.v_min << std::endl << " filter2_v_max: " - << params_config_.filter2_threshold.v_max << std::endl << " ellipse_size: " - << params_config_.ellipse_size << std::endl << " filter_image_to_debug: " << params_config_.debug - << std::endl << std::endl; + << params_config_.gaussian_blur_size << std::endl << " gaussian_blur_sigma: " + << params_config_.gaussian_blur_sigma << std::endl << " canny_edge_th: " << params_config_.canny_edge_th + << std::endl << " hough_accum_resolution: " << params_config_.hough_accum_resolution << std::endl + << " min_circle_dist: " << params_config_.min_circle_dist << std::endl << " hough_accum_th: " + << params_config_.hough_accum_th << std::endl << " min_radius: " << params_config_.min_radius + << std::endl << " max_radius: " << params_config_.max_radius << std::endl << " filter_h_min: " + << params_config_.filter_threshold.h_min << std::endl << " filter_h_max: " + << params_config_.filter_threshold.h_max << std::endl << " filter_s_min: " + << params_config_.filter_threshold.s_min << std::endl << " filter_s_max: " + << params_config_.filter_threshold.s_max << std::endl << " filter_v_min: " + << params_config_.filter_threshold.v_min << std::endl << " filter_v_max: " + << params_config_.filter_threshold.v_max << std::endl << " use_second_filter: " + << params_config_.use_second_filter << std::endl << " filter2_h_min: " + << params_config_.filter2_threshold.h_min << std::endl << " filter2_h_max: " + << params_config_.filter2_threshold.h_max << std::endl << " filter2_s_min: " + << params_config_.filter2_threshold.s_min << std::endl << " filter2_s_max: " + << params_config_.filter2_threshold.s_max << std::endl << " filter2_v_min: " + << params_config_.filter2_threshold.v_min << std::endl << " filter2_v_max: " + << params_config_.filter2_threshold.v_max << std::endl << " ellipse_size: " + << params_config_.ellipse_size << std::endl << " filter_image_to_debug: " << params_config_.debug + << std::endl << std::endl; } void BallDetector::saveConfig() @@ -364,23 +360,6 @@ void BallDetector::filterImage() if (!in_image_.data) return; - /* - cv::Mat imgCrCb, imgCr; - cv::cvtColor(in_image_, imgCrCb, cv::COLOR_BGR2YCrCb); - std::vector _channels; - cv::split(imgCrCb, _channels); - imgCr = _channels[2]; - - cv::inRange(imgCr, params_config_.filter_h_min, params_config_.filter_h_max, imgCr); - cv::erode(imgCr, imgCr, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(5, 5)) ); - cv::dilate(imgCr, imgCr, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(5, 5)) ); - - cv::dilate(imgCr, imgCr, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(5, 5)) ); - cv::erode(imgCr, imgCr, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(5, 5)) ); - - cv::cvtColor(imgCr, in_image_, cv::COLOR_GRAY2RGB); - */ - cv::Mat img_hsv, img_filtered; cv::cvtColor(in_image_, img_hsv, cv::COLOR_RGB2HSV); @@ -394,15 +373,6 @@ void BallDetector::filterImage() // mask cv::Mat img_mask; - // mophology : open and close - //int ellipse_size = 30; - //int dilate_size = params_config_.max_radius; // dilate_size = ellipse_size * 10 - //cv::erode(img_filtered, img_mask, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(ellipse_size, ellipse_size))); - //cv::dilate(img_mask, img_mask, - // cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(dilate_size, dilate_size))); - - //makeFilterMask(img_filtered, img_mask, ellipse_size); - // check hsv range cv::Mat img_filtered2; inRangeHsv(img_hsv, params_config_.filter2_threshold, img_filtered2); @@ -410,8 +380,6 @@ void BallDetector::filterImage() makeFilterMaskFromBall(img_filtered, img_mask); cv::bitwise_and(img_filtered2, img_mask, img_filtered2); - // mophology(img_filtered2, img_filtered2, params_config_.ellipse_size); - // or cv::bitwise_or(img_filtered, img_filtered2, img_filtered); } @@ -437,7 +405,7 @@ void BallDetector::makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, { for (int j = 0; j < source_width; j++) { - uint8_t pixel = source_img.at(i, j); + uint8_t pixel = source_img.at < uint8_t > (i, j); if (pixel == 0) continue; @@ -452,7 +420,7 @@ void BallDetector::makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, if (mask_j < 0 || mask_j >= source_width) continue; - mask_img.at(mask_i, mask_j, 0) = 255; + mask_img.at < uchar > (mask_i, mask_j, 0) = 255; } } } @@ -464,51 +432,22 @@ void BallDetector::makeFilterMaskFromBall(const cv::Mat &source_img, cv::Mat &ma // source_img. mask_img = cv::Mat::zeros(source_img.rows, source_img.cols, CV_8UC1); - if(circles_.size() == 0) + if (circles_.size() == 0) return; // channel : 1 if (source_img.channels() != 1) return; - // for (int i = 0; i < circles_.size(); i++) - // { - // if (circles_[i][0] != -1) - // { - // // _center = cv::Point(cvRound(circles_[_i][0]), cvRound(circles_[_i][1])); - // int center_x = cvRound(circles_[i][0]); - // int center_y = cvRound(circles_[i][1]); - // int radius = cvRound(circles_[i][2]) * 1.5; - // - // for (int mask_i = center_y - radius; mask_i <= center_y + radius; mask_i++) - // { - // if (mask_i < 0 || mask_i >= source_img.rows) - // continue; - // - // int mask_offset = abs(mask_i - center_y) * 0.5; - // - // for (int mask_j = center_x - radius + mask_offset; mask_j <= center_x + radius - mask_offset; mask_j++) - // { - // if (mask_j < 0 || mask_j >= source_img.cols) - // continue; - // - // mask_img.at(mask_i, mask_j, 0) = 255; - // } - // } - // - // } - // } - cv::Mat img_labels, stats, centroids; - int numOfLables = cv::connectedComponentsWithStats(source_img, img_labels, - stats, centroids, 8,CV_32S); + int numOfLables = cv::connectedComponentsWithStats(source_img, img_labels, stats, centroids, 8, CV_32S); for (int j = 1; j < numOfLables; j++) { int area = stats.at(j, cv::CC_STAT_AREA); int left = stats.at(j, cv::CC_STAT_LEFT); - int top = stats.at(j, cv::CC_STAT_TOP); + int top = stats.at(j, cv::CC_STAT_TOP); int width = stats.at(j, cv::CC_STAT_WIDTH); - int height = stats.at(j, cv::CC_STAT_HEIGHT); + int height = stats.at(j, cv::CC_STAT_HEIGHT); int center_x = left + width * 0.5; int center_y = top + height * 0.5; @@ -526,7 +465,7 @@ void BallDetector::makeFilterMaskFromBall(const cv::Mat &source_img, cv::Mat &ma if (mask_j < 0 || mask_j >= source_img.cols) continue; - mask_img.at(mask_i, mask_j, 0) = 255; + mask_img.at < uchar > (mask_i, mask_j, 0) = 255; } } } @@ -588,40 +527,31 @@ void BallDetector::houghDetection(const unsigned int imgEncoding) cv::cvtColor(in_image_, gray_image, CV_RGB2GRAY); //Reduce the noise so we avoid false circle detection - cv::GaussianBlur(gray_image, gray_image, cv::Size(params_config_.gaussian_blur_size, params_config_.gaussian_blur_size), + cv::GaussianBlur(gray_image, gray_image, + cv::Size(params_config_.gaussian_blur_size, params_config_.gaussian_blur_size), params_config_.gaussian_blur_sigma); - //double hough_accum_th = (not_found_count_ < NOT_FOUND_TH) ? - // params_config_.hough_accum_th : params_config_.hough_accum_th * 0.5; double hough_accum_th = params_config_.hough_accum_th; - // std::cout << "Not found : " << not_found_count_ << ", value : " << hough_accum_th << std::endl; //Apply the Hough Transform to find the circles cv::HoughCircles(gray_image, circles_current, CV_HOUGH_GRADIENT, params_config_.hough_accum_resolution, params_config_.min_circle_dist, params_config_.canny_edge_th, hough_accum_th, params_config_.min_radius, params_config_.max_radius); - //set found circles to circles set. Apply some condition if desired. - //for (int ii = 0; ii < circles_current.size(); ii++) - //{ - // circles_.push_back(circles_current.at(ii)); - // // std::cout << "circle " << ii << ": (" << circles.at(ii)[0] << "," << circles.at(ii)[1] << ")" << std::endl; - //} - - if(circles_current.size() == 0) + if (circles_current.size() == 0) not_found_count_ += 1; else not_found_count_ = 0; double alpha = 0.2; - for(int ix = 0; ix < circles_current.size(); ix++) + for (int ix = 0; ix < circles_current.size(); ix++) { cv::Point2d center = cv::Point(circles_current[ix][0], circles_current[ix][1]); double radius = circles_current[ix][2]; - for(int prev_ix = 0; prev_ix < prev_circles.size(); prev_ix++) + for (int prev_ix = 0; prev_ix < prev_circles.size(); prev_ix++) { cv::Point2d prev_center = cv::Point(prev_circles[prev_ix][0], prev_circles[prev_ix][1]); double prev_radius = prev_circles[prev_ix][2]; @@ -629,13 +559,11 @@ void BallDetector::houghDetection(const unsigned int imgEncoding) cv::Point2d diff = center - prev_center; double radius_th = std::max(radius, prev_radius) * 0.75; - if(sqrt(diff.dot(diff)) < radius_th) + if (sqrt(diff.dot(diff)) < radius_th) { - if(abs(radius - prev_radius) < radius_th) + if (abs(radius - prev_radius) < radius_th) { - // std::cout << "circle - raw " << ix << ": (" << circles_current.at(ix)[0] << "," << circles_current.at(ix)[1] << ")" << std::endl; circles_current[ix] = circles_current[ix] * alpha + prev_circles[prev_ix] * (1 - alpha); - // std::cout << "circle - lpf " << ix << ": (" << circles_current.at(ix)[0] << "," << circles_current.at(ix)[1] << ")" << std::endl; } break; @@ -659,11 +587,6 @@ void BallDetector::drawOutputImage() for (ii = 0; ii < circles_.size(); ii++) { { - // cv::Point _center = cv::Point(cvRound(circles_[ii][0]), cvRound(circles_[ii][1])); - // int _radius = cvRound(circles_[ii][2]); - // cv::circle( out_image_, _center, 5, cv::Scalar(0,0,255), -1, 8, 0 );// circle center in green - // cv::circle( out_image_, _center, _radius, cv::Scalar(0,0,255), 3, 8, 0 );// circle outline in red - int this_radius = cvRound(circles_[ii][2]); if (this_radius > radius) { diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/op3_demo/include/op3_demo/ball_tracker.h index 751309e..5c95762 100644 --- a/op3_demo/include/op3_demo/ball_tracker.h +++ b/op3_demo/include/op3_demo/ball_tracker.h @@ -54,10 +54,17 @@ namespace robotis_op class BallTracker { public: + enum TrackingStatus + { + NotFound = -1, + Waiting = 0, + Found = 1, + + }; BallTracker(); ~BallTracker(); - bool processTracking(); + int processTracking(); void startTracking(); void stopTracking(); @@ -83,6 +90,7 @@ class BallTracker const double FOV_WIDTH; const double FOV_HEIGHT; const int NOT_FOUND_THRESHOLD; + const int WAITING_THRESHOLD; const bool DEBUG_PRINT; void ballPositionCallback(const ball_detector::circleSetStamped::ConstPtr &msg); @@ -107,6 +115,7 @@ class BallTracker // z is the ball radius geometry_msgs::Point ball_position_; + int tracking_status_; bool use_head_scan_; int count_not_found_; bool on_tracking_; diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index 38abd9a..85f5837 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -42,6 +42,8 @@ #include "op3_demo/ball_tracker.h" #include "op3_demo/ball_follower.h" #include "robotis_math/robotis_linear_algebra.h" +#include "op3_action_module_msgs/IsRunning.h" +#include "robotis_controller_msgs/SyncWriteItem.h" namespace robotis_op { @@ -99,26 +101,33 @@ class SoccerDemo : public OPDemo bool handleFallen(int fallen_status); void playMotion(int motion_index); + void setRGBLED(int blue, int green, int red); + bool isActionRunning(); BallTracker ball_tracker_; BallFollower ball_follower_; ros::Publisher module_control_pub_; ros::Publisher motion_index_pub_; + ros::Publisher rgb_led_pub_; ros::Subscriber buttuon_sub_; ros::Subscriber demo_command_sub_; ros::Subscriber imu_data_sub_; + + ros::ServiceClient is_running_client_; + std::map id_joint_table_; std::map joint_id_table_; bool is_grass_; int wait_count_; - bool on_following_ball_; + bool on_following_ball_; bool restart_soccer_; bool start_following_; bool stop_following_; bool stop_fallen_check_; int robot_status_; + int tracking_status_; int stand_state_; double present_pitch_; }; diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index c96b5b9..335a948 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -1,9 +1,9 @@ - + - + diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp index 0ab4bae..1be5377 100644 --- a/op3_demo/src/demo_node.cpp +++ b/op3_demo/src/demo_node.cpp @@ -53,6 +53,7 @@ void goInitPose(); void playSound(const std::string &path); void setLED(int led); bool checkManagerRunning(std::string& manager_name); +void dxlTorqueChecker(); const int SPIN_RATE = 30; const bool DEBUG_PRINT = false; @@ -60,6 +61,7 @@ const bool DEBUG_PRINT = false; ros::Publisher init_pose_pub; ros::Publisher play_sound_pub; ros::Publisher led_pub; +ros::Publisher dxl_torque_pub; std::string default_mp3_path = ""; int current_status = Ready; @@ -83,6 +85,7 @@ int main(int argc, char **argv) init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); led_pub = nh.advertise("/robotis/sync_write_item", 0); + dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); default_mp3_path = ros::package::getPath("op3_demo") + "/Data/mp3/"; @@ -223,14 +226,17 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) switch (desired_status) { case SoccerDemo: + dxlTorqueChecker(); playSound(default_mp3_path + "Start soccer demonstration.mp3"); break; case VisionDemo: + dxlTorqueChecker(); playSound(default_mp3_path + "Start vision processing demonstration.mp3"); break; case ActionDemo: + dxlTorqueChecker(); playSound(default_mp3_path + "Start motion demonstration.mp3"); break; @@ -313,3 +319,11 @@ bool checkManagerRunning(std::string& manager_name) ROS_ERROR("Can't find op3_manager"); return false; } + +void dxlTorqueChecker() +{ + std_msgs::String check_msg; + check_msg.data = "check"; + + dxl_torque_pub.publish(check_msg); +} diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index 18f0524..31ff5d4 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -46,9 +46,9 @@ BallFollower::BallFollower() kick_motion_index_(83), CAMERA_HEIGHT(0.46), NOT_FOUND_THRESHOLD(50), - MAX_FB_STEP(35.0 * 0.001), + MAX_FB_STEP(40.0 * 0.001), MAX_RL_TURN(15.0 * M_PI / 180), - MIN_FB_STEP(5.0 * 0.001), + MIN_FB_STEP(0.0 * 0.001), MIN_RL_TURN(5.0 * M_PI / 180), UNIT_FB_STEP(1.0 * 0.001), UNIT_RL_TURN(0.5 * M_PI / 180), @@ -177,7 +177,7 @@ void BallFollower::calcFootstep(double target_distance, double target_angle, dou } } -// x_angle : ball position (pan), y_angle : ball position (tilt) +// x_angle : ball position (pan), y_angle : ball position (tilt), ball_size : angle of ball radius bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_size) { ros::Time curr_time = ros::Time::now(); diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp index da8ade2..3f4cde0 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -40,12 +40,14 @@ BallTracker::BallTracker() FOV_WIDTH(26.4 * M_PI / 180), FOV_HEIGHT(21.6 * M_PI / 180), NOT_FOUND_THRESHOLD(50), + WAITING_THRESHOLD(5), use_head_scan_(true), count_not_found_(0), on_tracking_(false), current_ball_pan_(0), current_ball_tilt_(0), current_ball_bottom_(0), + tracking_status_(NotFound), DEBUG_PRINT(false) { head_joint_pub_ = nh_.advertise("/robotis/head_control/set_joint_states_offset", 0); @@ -112,13 +114,15 @@ void BallTracker::setUsingHeadScan(bool use_scan) use_head_scan_ = use_scan; } -bool BallTracker::processTracking() +int BallTracker::processTracking() { + int tracking_status = Found; + if (on_tracking_ == false) { ball_position_.z = 0; count_not_found_ = 0; - return false; + return NotFound; } // check ball position @@ -126,24 +130,56 @@ bool BallTracker::processTracking() { count_not_found_++; - if (count_not_found_ > NOT_FOUND_THRESHOLD) + if (count_not_found_ < WAITING_THRESHOLD) + { + if(tracking_status_ == Found || tracking_status_ == Waiting) + tracking_status = Waiting; + else + tracking_status = NotFound; + } + else if (count_not_found_ > NOT_FOUND_THRESHOLD) { scanBall(); count_not_found_ = 0; + tracking_status = NotFound; } - - return false; + else + { + tracking_status = NotFound; + } + } + else + { + count_not_found_ = 0; } // if ball is found // convert ball position to desired angle(rad) of head // ball_position : top-left is (-1, -1), bottom-right is (+1, +1) // offset_rad : top-left(+, +), bottom-right(-, -) - double x_error = -atan(ball_position_.x * tan(FOV_WIDTH)); - double y_error = -atan(ball_position_.y * tan(FOV_HEIGHT)); + double x_error = 0.0, y_error = 0.0, ball_size = 0.0; - ball_position_.z = 0; - count_not_found_ = 0; + switch (tracking_status) + { + case NotFound: + tracking_status_ = tracking_status; + return tracking_status; + + case Waiting: + x_error = current_ball_pan_ * 0.7; + y_error = current_ball_tilt_ * 0.7; + ball_size = current_ball_bottom_; + break; + + case Found: + x_error = -atan(ball_position_.x * tan(FOV_WIDTH)); + y_error = -atan(ball_position_.y * tan(FOV_HEIGHT)); + ball_size = ball_position_.z; + break; + + default: + break; + } ROS_INFO_STREAM_COND(DEBUG_PRINT, "--------------------------------------------------------------"); ROS_INFO_STREAM_COND(DEBUG_PRINT, "Ball position : " << ball_position_.x << " | " << ball_position_.y); @@ -154,19 +190,20 @@ bool BallTracker::processTracking() double delta_time = dur.nsec * 0.000000001 + dur.sec; prev_time_ = curr_time; - // double p_gain = 0.75, d_gain = 0.05; - double p_gain = 0.7, d_gain = 0.05; + // double p_gain = 0.7, d_gain = 0.05; + double p_gain = 0.75, d_gain = 0.04; double x_error_diff = (x_error - current_ball_pan_) / delta_time; double y_error_diff = (y_error - current_ball_tilt_) / delta_time; double x_error_target = x_error * p_gain + x_error_diff * d_gain; double y_error_target = y_error * p_gain + y_error_diff * d_gain; - ROS_INFO_STREAM_COND(DEBUG_PRINT, "--------------------------------------------------------------"); ROS_INFO_STREAM_COND(DEBUG_PRINT, "error : " << (x_error * 180 / M_PI) << " | " << (y_error * 180 / M_PI)); - ROS_INFO_STREAM_COND(DEBUG_PRINT, + ROS_INFO_STREAM_COND( + DEBUG_PRINT, "error_diff : " << (x_error_diff * 180 / M_PI) << " | " << (y_error_diff * 180 / M_PI) << " | " << delta_time); - ROS_INFO_STREAM_COND(DEBUG_PRINT, + ROS_INFO_STREAM_COND( + DEBUG_PRINT, "error_target : " << (x_error_target * 180 / M_PI) << " | " << (y_error_target * 180 / M_PI) << " | P : " << p_gain << " | D : " << d_gain); // move head joint @@ -175,9 +212,13 @@ bool BallTracker::processTracking() // args for following ball current_ball_pan_ = x_error; current_ball_tilt_ = y_error; - current_ball_bottom_ = -atan(ball_position_.z * tan(FOV_HEIGHT)); + current_ball_bottom_ = ball_size; - return true; + ball_position_.z = 0; + //count_not_found_ = 0; + + tracking_status_ = tracking_status; + return tracking_status; } void BallTracker::publishHeadJoint(double pan, double tilt) diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 675e094..aa9a4e4 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -48,6 +48,7 @@ SoccerDemo::SoccerDemo() stop_fallen_check_(false), robot_status_(Waited), stand_state_(Stand), + tracking_status_(BallTracker::Waiting), present_pitch_(0) { //init ros @@ -92,14 +93,17 @@ void SoccerDemo::setDemoDisable() start_following_ = false; stop_following_ = false; stop_fallen_check_ = false; + + tracking_status_ = BallTracker::Waiting; } void SoccerDemo::process() { // ball tracking bool is_tracked; + int tracking_status; - is_tracked = ball_tracker_.processTracking(); + tracking_status = ball_tracker_.processTracking(); // check to start if (start_following_ == true) @@ -130,10 +134,26 @@ void SoccerDemo::process() // ball following if (on_following_ball_ == true) { - if (is_tracked) - ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall(), ball_tracker_.getBallSize()); - else - ball_follower_.waitFollowing(); + switch(tracking_status) + { + case BallTracker::Found: + ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall(), 0.0); + if(tracking_status_ != tracking_status) + setRGBLED(0x1F, 0x1F, 0x1F); + break; + + case BallTracker::NotFound: + ball_follower_.waitFollowing(); + if(tracking_status_ != tracking_status) + setRGBLED(0, 0, 0); + break; + + default: + break; + } + + if(tracking_status != tracking_status_) + tracking_status_ = tracking_status; } // check fallen states @@ -171,7 +191,6 @@ void SoccerDemo::process() { wait_count_ -= 1; } - } void SoccerDemo::processThread() @@ -201,11 +220,14 @@ void SoccerDemo::callbackThread() // subscriber & publisher module_control_pub_ = nh.advertise("/robotis/set_joint_ctrl_modules", 0); motion_index_pub_ = nh.advertise("/robotis/action/page_num", 0); + rgb_led_pub_ = nh.advertise("/robotis/sync_write_item", 0); buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &SoccerDemo::buttonHandlerCallback, this); demo_command_sub_ = nh.subscribe("/ball_tracker/command", 1, &SoccerDemo::demoCommandCallback, this); imu_data_sub_ = nh.subscribe("/robotis/open_cr/imu", 1, &SoccerDemo::imuDataCallback, this); + is_running_client_ = nh.serviceClient("/robotis/action/is_running"); + while (nh.ok()) { ros::spinOnce(); @@ -405,6 +427,14 @@ void SoccerDemo::imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg) void SoccerDemo::startSoccerMode() { + setModuleToDemo("action_module"); + + usleep(10 * 1000); + + playMotion(WalkingReady); + + usleep(1500 * 1000); + setBodyModuleToDemo("walking_module"); usleep(10 * 1000); @@ -491,7 +521,10 @@ bool SoccerDemo::handleFallen(int fallen_status) break; } - usleep(500 * 1000); + while(isActionRunning() == true) + usleep(100 * 1000); + + usleep(650 * 1000); if (on_following_ball_ == true) restart_soccer_ = true; @@ -510,4 +543,37 @@ void SoccerDemo::playMotion(int motion_index) motion_index_pub_.publish(motion_msg); } +void SoccerDemo::setRGBLED(int blue, int green, int red) +{ + int led_full_unit = 0x1F; + int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); + robotis_controller_msgs::SyncWriteItem syncwrite_msg; + syncwrite_msg.item_name = "LED_RGB"; + syncwrite_msg.joint_name.push_back("open-cr"); + syncwrite_msg.value.push_back(led_value); + + rgb_led_pub_.publish(syncwrite_msg); +} + +// check running of action +bool SoccerDemo::isActionRunning() +{ + op3_action_module_msgs::IsRunning is_running_srv; + + if (is_running_client_.call(is_running_srv) == false) + { + ROS_ERROR("Failed to get action status"); + return true; + } + else + { + if (is_running_srv.response.is_running == true) + { + return true; + } + } + + return false; +} + } diff --git a/op3_demo/src/vision/vision_demo.cpp b/op3_demo/src/vision/vision_demo.cpp index acc0e80..ac205fa 100644 --- a/op3_demo/src/vision/vision_demo.cpp +++ b/op3_demo/src/vision/vision_demo.cpp @@ -86,16 +86,10 @@ void VisionDemo::setDemoDisable() void VisionDemo::process() { - //bool is_tracked = face_tracker_.processTracking(); int tracking_status = face_tracker_.processTracking(); - //if(is_tracking_ != is_tracked) if(tracking_status_ != tracking_status) { -// if(is_tracked == true) -// setRGBLED(0x1F, 0, 0); -// else -// setRGBLED(0x1F, 0x1F, 0); switch(tracking_status) { case FaceTracker::Found: From c010310ef36a92ce6010ebf3e0b1954a7f185c92 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 19 Jul 2017 15:09:51 +0900 Subject: [PATCH 009/172] modified soccer demo. --- op3_demo/include/op3_demo/ball_follower.h | 1 + op3_demo/src/soccer/ball_follower.cpp | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 9921056..86b10fe 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -82,6 +82,7 @@ class BallFollower const double FOV_HEIGHT; const double MAX_FB_STEP; const double MAX_RL_TURN; + const double IN_PLACE_FB_STEP; const double MIN_FB_STEP; const double MIN_RL_TURN; const double UNIT_FB_STEP; diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index 31ff5d4..294cf7e 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -48,7 +48,8 @@ BallFollower::BallFollower() NOT_FOUND_THRESHOLD(50), MAX_FB_STEP(40.0 * 0.001), MAX_RL_TURN(15.0 * M_PI / 180), - MIN_FB_STEP(0.0 * 0.001), + IN_PLACE_FB_STEP(0.0 * 0.001), + MIN_FB_STEP(5.0 * 0.001), MIN_RL_TURN(5.0 * M_PI / 180), UNIT_FB_STEP(1.0 * 0.001), UNIT_RL_TURN(0.5 * M_PI / 180), @@ -216,7 +217,7 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ distance_to_ball *= (-1); //double distance_to_kick = 0.25; - double distance_to_kick = 0.22; + double distance_to_kick = 0.15; // check whether ball is correct position. if ((distance_to_ball < distance_to_kick) && (fabs(ball_x_angle) < 25.0)) @@ -258,7 +259,7 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ accum_ball_position_ -= 1; // send message - setWalkingParam(MIN_FB_STEP, 0, 0); + setWalkingParam(IN_PLACE_FB_STEP, 0, 0); return false; } @@ -297,7 +298,7 @@ void BallFollower::setWalkingCommand(const std::string &command) if (command == "start") { getWalkingParam(); - setWalkingParam(MIN_FB_STEP, 0, 0, true); + setWalkingParam(IN_PLACE_FB_STEP, 0, 0, true); } std_msgs::String _command_msg; From 937682bc50bd52a740d7b80841e333448890f0c2 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 19 Jul 2017 16:12:54 +0900 Subject: [PATCH 010/172] modified launch file for non-grass demo --- op3_demo/launch/demo.launch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index 335a948..29b9f67 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -19,7 +19,7 @@ - + From 2bf662fda0e529852a1c27518e8bb171f3eb86b2 Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 20 Jul 2017 08:37:55 +0900 Subject: [PATCH 011/172] modified gain for face tracking. --- op3_demo/src/vision/face_tracker.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/op3_demo/src/vision/face_tracker.cpp b/op3_demo/src/vision/face_tracker.cpp index d90be33..2345b81 100644 --- a/op3_demo/src/vision/face_tracker.cpp +++ b/op3_demo/src/vision/face_tracker.cpp @@ -149,7 +149,7 @@ int FaceTracker::processTracking() face_position_.z = 0; count_not_found_ = 0; - double p_gain = 0.7, d_gain = 0.45; + double p_gain = 0.6, d_gain = 0.25; double x_error_diff = x_error - current_face_pan_; double y_error_diff = y_error - current_face_tilt_; double x_error_target = x_error * p_gain + x_error_diff * d_gain; @@ -205,4 +205,3 @@ void FaceTracker::scanFace() } } - From 585876077873a86a23de0724374c046577db7533 Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 20 Jul 2017 09:24:11 +0900 Subject: [PATCH 012/172] modified the gain of face_tracking --- op3_demo/src/vision/face_tracker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op3_demo/src/vision/face_tracker.cpp b/op3_demo/src/vision/face_tracker.cpp index 2345b81..08a624c 100644 --- a/op3_demo/src/vision/face_tracker.cpp +++ b/op3_demo/src/vision/face_tracker.cpp @@ -149,7 +149,7 @@ int FaceTracker::processTracking() face_position_.z = 0; count_not_found_ = 0; - double p_gain = 0.6, d_gain = 0.25; + double p_gain = 0.5, d_gain = 0.25; double x_error_diff = x_error - current_face_pan_; double y_error_diff = y_error - current_face_tilt_; double x_error_target = x_error * p_gain + x_error_diff * d_gain; From a4040b08172c8b6ef45c313e0075ec8bcc6826a6 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 9 Aug 2017 17:22:46 +0900 Subject: [PATCH 013/172] modified a file to fit changed motion file. --- ball_detector/cfg/detector_params.cfg | 0 ball_detector/cfg/detector_params_blue.cfg | 0 ball_detector/cfg/detector_params_red.cfg | 0 op3_demo/include/op3_demo/op_demo.h | 2 +- op3_demo/src/soccer/soccer_demo.cpp | 1 - 5 files changed, 1 insertion(+), 2 deletions(-) mode change 100755 => 100644 ball_detector/cfg/detector_params.cfg mode change 100755 => 100644 ball_detector/cfg/detector_params_blue.cfg mode change 100755 => 100644 ball_detector/cfg/detector_params_red.cfg diff --git a/ball_detector/cfg/detector_params.cfg b/ball_detector/cfg/detector_params.cfg old mode 100755 new mode 100644 diff --git a/ball_detector/cfg/detector_params_blue.cfg b/ball_detector/cfg/detector_params_blue.cfg old mode 100755 new mode 100644 diff --git a/ball_detector/cfg/detector_params_red.cfg b/ball_detector/cfg/detector_params_red.cfg old mode 100755 new mode 100644 diff --git a/op3_demo/include/op3_demo/op_demo.h b/op3_demo/include/op3_demo/op_demo.h index 938091a..ee699b0 100644 --- a/op3_demo/include/op3_demo/op_demo.h +++ b/op3_demo/include/op3_demo/op_demo.h @@ -47,7 +47,7 @@ class OPDemo GetUpBack = 123, RightKick = 121, LeftKick = 120, - Ceremony = 85, + Ceremony = 27, ForGrass = 20, }; diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index aa9a4e4..394c3a1 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -109,7 +109,6 @@ void SoccerDemo::process() if (start_following_ == true) { ball_tracker_.startTracking(); - // for debug ball_follower_.startFollowing(); start_following_ = false; From b92467cbfd4245dbb5db35b4dc7cb2334291df28 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 9 Aug 2017 17:49:51 +0900 Subject: [PATCH 014/172] changed minor parameters --- op3_demo/src/soccer/ball_follower.cpp | 4 ++-- op3_demo/src/vision/face_tracker.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index 294cf7e..c5b0e84 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -48,7 +48,7 @@ BallFollower::BallFollower() NOT_FOUND_THRESHOLD(50), MAX_FB_STEP(40.0 * 0.001), MAX_RL_TURN(15.0 * M_PI / 180), - IN_PLACE_FB_STEP(0.0 * 0.001), + IN_PLACE_FB_STEP(-3.0 * 0.001), MIN_FB_STEP(5.0 * 0.001), MIN_RL_TURN(5.0 * M_PI / 180), UNIT_FB_STEP(1.0 * 0.001), @@ -217,7 +217,7 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ distance_to_ball *= (-1); //double distance_to_kick = 0.25; - double distance_to_kick = 0.15; + double distance_to_kick = 0.22; // check whether ball is correct position. if ((distance_to_ball < distance_to_kick) && (fabs(ball_x_angle) < 25.0)) diff --git a/op3_demo/src/vision/face_tracker.cpp b/op3_demo/src/vision/face_tracker.cpp index 08a624c..2345b81 100644 --- a/op3_demo/src/vision/face_tracker.cpp +++ b/op3_demo/src/vision/face_tracker.cpp @@ -149,7 +149,7 @@ int FaceTracker::processTracking() face_position_.z = 0; count_not_found_ = 0; - double p_gain = 0.5, d_gain = 0.25; + double p_gain = 0.6, d_gain = 0.25; double x_error_diff = x_error - current_face_pan_; double y_error_diff = y_error - current_face_tilt_; double x_error_target = x_error * p_gain + x_error_diff * d_gain; From 4b6a82ce7e677a7337c098b4becac84b14194dca Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 9 Aug 2017 20:09:36 +0900 Subject: [PATCH 015/172] fixed minor bug about playing action in action demo. --- op3_demo/include/op3_demo/action_demo.h | 1 - op3_demo/src/action/action_demo.cpp | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/op3_demo/include/op3_demo/action_demo.h b/op3_demo/include/op3_demo/action_demo.h index f990ac5..e53b9c4 100644 --- a/op3_demo/include/op3_demo/action_demo.h +++ b/op3_demo/include/op3_demo/action_demo.h @@ -72,7 +72,6 @@ class ActionDemo : public OPDemo }; const int SPIN_RATE; - const int DEMO_INIT_POSE; const bool DEBUG_PRINT; void processThread(); diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index ecb9255..b257ef5 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -37,7 +37,6 @@ namespace robotis_op ActionDemo::ActionDemo() : SPIN_RATE(30), - DEMO_INIT_POSE(8), DEBUG_PRINT(false), play_index_(0), play_status_(StopAction) @@ -72,7 +71,7 @@ void ActionDemo::setDemoEnable() ROS_INFO_COND(DEBUG_PRINT, "Start ActionScript Demo"); - playAction(DEMO_INIT_POSE); + playAction(InitPose); startProcess(play_list_name_); } From a6159ad727c0332fcf14a5c5c61fda5fe6360568 Mon Sep 17 00:00:00 2001 From: Kayman Date: Mon, 14 Aug 2017 16:48:46 +0900 Subject: [PATCH 016/172] added missing depend --- op3_demo/CMakeLists.txt | 7 ++++--- op3_demo/package.xml | 8 +++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index dc1fdea..53f21c4 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -13,6 +13,7 @@ find_package(catkin REQUIRED COMPONENTS sensor_msgs ball_detector op3_walking_module_msgs + robotis_controller_msgs cmake_modules robotis_math ) @@ -45,7 +46,7 @@ include_directories( ${Eigen_INCLUDE_DIRS} ) -add_executable(op_demo_node +add_executable(op_demo_node src/demo_node.cpp src/soccer/soccer_demo.cpp src/soccer/ball_tracker.cpp @@ -62,7 +63,7 @@ target_link_libraries(op_demo_node yaml-cpp ) -add_executable(self_test_node +add_executable(self_test_node src/test_node.cpp src/soccer/soccer_demo.cpp src/soccer/ball_tracker.cpp @@ -118,4 +119,4 @@ target_link_libraries(self_test_node ################################################################################ # Test -################################################################################ \ No newline at end of file +################################################################################ diff --git a/op3_demo/package.xml b/op3_demo/package.xml index b376b44..3e3c524 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -10,19 +10,21 @@ kayman Pyo - catkin + catkin roscpp roslib sensor_msgs ball_detector + robotis_controller_msgs op3_walking_module_msgs cmake_modules - robotis_math + robotis_math roscpp roslib sensor_msgs ball_detector + robotis_controller_msgs op3_walking_module_msgs cmake_modules robotis_math - \ No newline at end of file + From 76489376bfcc1a9b75663bb934dfddf7a2a8d227 Mon Sep 17 00:00:00 2001 From: zerom Date: Tue, 22 Aug 2017 09:31:03 +0900 Subject: [PATCH 017/172] Changing file permissions --- ball_detector/cfg/detector_params.cfg | 0 ball_detector/cfg/detector_params_blue.cfg | 0 ball_detector/cfg/detector_params_red.cfg | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 ball_detector/cfg/detector_params.cfg mode change 100644 => 100755 ball_detector/cfg/detector_params_blue.cfg mode change 100644 => 100755 ball_detector/cfg/detector_params_red.cfg diff --git a/ball_detector/cfg/detector_params.cfg b/ball_detector/cfg/detector_params.cfg old mode 100644 new mode 100755 diff --git a/ball_detector/cfg/detector_params_blue.cfg b/ball_detector/cfg/detector_params_blue.cfg old mode 100644 new mode 100755 diff --git a/ball_detector/cfg/detector_params_red.cfg b/ball_detector/cfg/detector_params_red.cfg old mode 100644 new mode 100755 From bea1e9993bad2247f54ebf3988c8590b3c0d3bde Mon Sep 17 00:00:00 2001 From: Yoshimaru Tanaka Date: Wed, 20 Sep 2017 19:49:40 +0900 Subject: [PATCH 018/172] Added dependency of op3_action_module_msgs in CMakeLists.txt. --- op3_demo/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index dc1fdea..d8b3523 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -13,6 +13,7 @@ find_package(catkin REQUIRED COMPONENTS sensor_msgs ball_detector op3_walking_module_msgs + op3_action_module_msgs cmake_modules robotis_math ) @@ -118,4 +119,4 @@ target_link_libraries(self_test_node ################################################################################ # Test -################################################################################ \ No newline at end of file +################################################################################ From 59b786a27bf61f6c0c2194bed62426e52d57bc1a Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 11 Oct 2017 17:09:11 +0900 Subject: [PATCH 019/172] added missing package in find_package() --- ball_detector/CMakeLists.txt | 34 +--------------------------------- op3_demo/CMakeLists.txt | 2 ++ op3_demo/package.xml | 4 ++++ 3 files changed, 7 insertions(+), 33 deletions(-) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index a25b556..1e4219f 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -57,7 +57,7 @@ add_executable(ball_detector_node src/ball_detector.cpp src/ball_detector_node.cpp) -add_dependencies(ball_detector_node ${PROJECT_NAME}_gencfg) +add_dependencies(ball_detector_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) target_link_libraries(ball_detector_node ${catkin_LIBRARIES} @@ -68,38 +68,6 @@ target_link_libraries(ball_detector_node # Install ################################################################################ -# all install targets should use catkin DESTINATION variables -# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html - -## Mark executable scripts (Python etc.) for installation -## in contrast to setup.py, you can choose the destination -# install(PROGRAMS -# scripts/my_python_script -# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) - -## Mark executables and/or libraries for installation -# install(TARGETS ball_detector ball_detector_node -# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) - -## Mark cpp header files for installation -# install(DIRECTORY include/${PROJECT_NAME}/ -# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} -# FILES_MATCHING PATTERN "*.h" -# PATTERN ".svn" EXCLUDE -# ) - -## Mark other files for installation (e.g. launch and bag files, etc.) -# install(FILES -# # myfile1 -# # myfile2 -# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} -# ) - - ################################################################################ # Test ################################################################################ \ No newline at end of file diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index dc1fdea..ed60190 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -13,6 +13,8 @@ find_package(catkin REQUIRED COMPONENTS sensor_msgs ball_detector op3_walking_module_msgs + op3_action_module_msgs + robotis_controller_msgs cmake_modules robotis_math ) diff --git a/op3_demo/package.xml b/op3_demo/package.xml index b376b44..fd1b229 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -15,14 +15,18 @@ roslib sensor_msgs ball_detector + robotis_controller_msgs op3_walking_module_msgs + op3_action_module_msgs cmake_modules robotis_math roscpp roslib sensor_msgs ball_detector + robotis_controller_msgs op3_walking_module_msgs + op3_action_module_msgs cmake_modules robotis_math \ No newline at end of file From 8b350ee645d47e67f80419c4b0329a452059cc89 Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 26 Oct 2017 19:51:28 +0900 Subject: [PATCH 020/172] Changed license from BSD to Apache2.0 --- LICENSE | 227 ++++++++++++++++-- .../include/ball_detector/ball_detector.h | 42 ++-- .../ball_detector/ball_detector_config.h | 42 ++-- ball_detector/package.xml | 2 +- ball_detector/src/ball_detector.cpp | 42 ++-- ball_detector/src/ball_detector_node.cpp | 42 ++-- op3_demo/include/op3_demo/action_demo.h | 42 ++-- op3_demo/include/op3_demo/ball_follower.h | 46 ++-- op3_demo/include/op3_demo/ball_tracker.h | 42 ++-- op3_demo/include/op3_demo/button_test.h | 42 ++-- op3_demo/include/op3_demo/face_tracker.h | 42 ++-- op3_demo/include/op3_demo/mic_test.h | 42 ++-- op3_demo/include/op3_demo/op_demo.h | 42 ++-- op3_demo/include/op3_demo/soccer_demo.h | 42 ++-- op3_demo/include/op3_demo/vision_demo.h | 42 ++-- op3_demo/package.xml | 2 +- op3_demo/src/action/action_demo.cpp | 42 ++-- op3_demo/src/demo_node.cpp | 42 ++-- op3_demo/src/soccer/ball_follower.cpp | 42 ++-- op3_demo/src/soccer/ball_tracker.cpp | 42 ++-- op3_demo/src/soccer/soccer_demo.cpp | 42 ++-- op3_demo/src/test/button_test.cpp | 42 ++-- op3_demo/src/test/mic_test.cpp | 42 ++-- op3_demo/src/test_node.cpp | 42 ++-- op3_demo/src/vision/face_tracker.cpp | 42 ++-- op3_demo/src/vision/vision_demo.cpp | 42 ++-- robotis_op3_demo/package.xml | 4 +- 27 files changed, 529 insertions(+), 676 deletions(-) diff --git a/LICENSE b/LICENSE index 5298325..c0ee812 100644 --- a/LICENSE +++ b/LICENSE @@ -1,26 +1,201 @@ -Software License Agreement (BSD License) - -Copyright (c) 2014, ROBOTIS Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of ROBOTIS nor the names of its contributors may be - used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY ROBOTIS "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL ROBOTIS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/ball_detector/include/ball_detector/ball_detector.h b/ball_detector/include/ball_detector/ball_detector.h index 578d9be..bb65988 100644 --- a/ball_detector/include/ball_detector/ball_detector.h +++ b/ball_detector/include/ball_detector/ball_detector.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/ball_detector/include/ball_detector/ball_detector_config.h b/ball_detector/include/ball_detector/ball_detector_config.h index 7182697..6062145 100644 --- a/ball_detector/include/ball_detector/ball_detector_config.h +++ b/ball_detector/include/ball_detector/ball_detector_config.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/ball_detector/package.xml b/ball_detector/package.xml index 62618a7..91ee2a7 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -7,7 +7,7 @@ It requires and input image and publish, at frame rate, a marked image and a stamped array of circle centers and radius. - BSD + Apache License 2.0 kayman Pyo diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index 77b00b9..c41c716 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/ball_detector/src/ball_detector_node.cpp b/ball_detector/src/ball_detector_node.cpp index d54bb4e..7edfae6 100644 --- a/ball_detector/src/ball_detector_node.cpp +++ b/ball_detector/src/ball_detector_node.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/include/op3_demo/action_demo.h b/op3_demo/include/op3_demo/action_demo.h index e53b9c4..bae084b 100644 --- a/op3_demo/include/op3_demo/action_demo.h +++ b/op3_demo/include/op3_demo/action_demo.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 86b10fe..9e12ffc 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ @@ -97,8 +83,8 @@ class BallFollower void setWalkingParam(double x_move, double y_move, double rotation_angle, bool balance = true); bool getWalkingParam(); void calcFootstep(double target_distance, double target_angle, double delta_time, - double& fb_move, double& rl_angle); - + double& fb_move, double& rl_angle); + //ros node handle ros::NodeHandle nh_; diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/op3_demo/include/op3_demo/ball_tracker.h index 5c95762..2304a43 100644 --- a/op3_demo/include/op3_demo/ball_tracker.h +++ b/op3_demo/include/op3_demo/ball_tracker.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/include/op3_demo/button_test.h b/op3_demo/include/op3_demo/button_test.h index 2647911..127c978 100644 --- a/op3_demo/include/op3_demo/button_test.h +++ b/op3_demo/include/op3_demo/button_test.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/include/op3_demo/face_tracker.h b/op3_demo/include/op3_demo/face_tracker.h index 75389ee..a5b3ae8 100644 --- a/op3_demo/include/op3_demo/face_tracker.h +++ b/op3_demo/include/op3_demo/face_tracker.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/include/op3_demo/mic_test.h b/op3_demo/include/op3_demo/mic_test.h index aea0295..7cd025a 100644 --- a/op3_demo/include/op3_demo/mic_test.h +++ b/op3_demo/include/op3_demo/mic_test.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/include/op3_demo/op_demo.h b/op3_demo/include/op3_demo/op_demo.h index ee699b0..25641a0 100644 --- a/op3_demo/include/op3_demo/op_demo.h +++ b/op3_demo/include/op3_demo/op_demo.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index 85f5837..d18343f 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/include/op3_demo/vision_demo.h b/op3_demo/include/op3_demo/vision_demo.h index f652335..b50918d 100644 --- a/op3_demo/include/op3_demo/vision_demo.h +++ b/op3_demo/include/op3_demo/vision_demo.h @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/package.xml b/op3_demo/package.xml index 10ebf2e..68baa53 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -6,7 +6,7 @@ op3 default demo It includes three demontrations(soccer demo, vision demo, action script demo) - BSD + Apache License 2.0 kayman Pyo diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index b257ef5..68b84ff 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp index 1be5377..fd6742a 100644 --- a/op3_demo/src/demo_node.cpp +++ b/op3_demo/src/demo_node.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index c5b0e84..f59a23e 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp index 3f4cde0..b7d9ad2 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 394c3a1..d63622e 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/src/test/button_test.cpp b/op3_demo/src/test/button_test.cpp index f5c2d61..415d182 100644 --- a/op3_demo/src/test/button_test.cpp +++ b/op3_demo/src/test/button_test.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/src/test/mic_test.cpp b/op3_demo/src/test/mic_test.cpp index dd0edfd..e1f6757 100644 --- a/op3_demo/src/test/mic_test.cpp +++ b/op3_demo/src/test/mic_test.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/src/test_node.cpp b/op3_demo/src/test_node.cpp index b1ab4a2..3ed2aa3 100644 --- a/op3_demo/src/test_node.cpp +++ b/op3_demo/src/test_node.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/src/vision/face_tracker.cpp b/op3_demo/src/vision/face_tracker.cpp index 2345b81..572eec2 100644 --- a/op3_demo/src/vision/face_tracker.cpp +++ b/op3_demo/src/vision/face_tracker.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/op3_demo/src/vision/vision_demo.cpp b/op3_demo/src/vision/vision_demo.cpp index ac205fa..5058ada 100644 --- a/op3_demo/src/vision/vision_demo.cpp +++ b/op3_demo/src/vision/vision_demo.cpp @@ -1,32 +1,18 @@ /******************************************************************************* - * Copyright (c) 2016, ROBOTIS CO., LTD. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of ROBOTIS nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ /* Author: Kayman Jung */ diff --git a/robotis_op3_demo/package.xml b/robotis_op3_demo/package.xml index 112c0e7..bba5f7c 100644 --- a/robotis_op3_demo/package.xml +++ b/robotis_op3_demo/package.xml @@ -6,7 +6,7 @@ ROS packages for the robotis_op3_demo (meta package) - BSD + Apache License 2.0 Kayman Pyo @@ -21,4 +21,4 @@ - \ No newline at end of file + From 9559b06983f6364ce4c32504d8d767b01df4c8f6 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 8 Nov 2017 17:53:39 +0900 Subject: [PATCH 021/172] first commit for walking demo. --- .../launch/ball_detector_from_usb_cam.launch | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/ball_detector/launch/ball_detector_from_usb_cam.launch b/ball_detector/launch/ball_detector_from_usb_cam.launch index 2ae61c6..1535edd 100644 --- a/ball_detector/launch/ball_detector_from_usb_cam.launch +++ b/ball_detector/launch/ball_detector_from_usb_cam.launch @@ -1,14 +1,15 @@ - + - - - + + + + @@ -16,6 +17,8 @@ + - + @@ -34,4 +37,3 @@ - From 72afe216cc310b2f0de1a09240b0d89e612c279c Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 23 Feb 2018 14:14:32 +0900 Subject: [PATCH 022/172] added msg and srv for web setting tool applied test code --- ball_detector/CMakeLists.txt | 9 ++++++++- .../include/ball_detector/ball_detector.h | 4 ++++ ball_detector/msg/BallDetectorParams.msg | 16 ++++++++++++++++ ball_detector/src/ball_detector.cpp | 19 +++++++++++++++++++ ball_detector/srv/GetParameters.srv | 3 +++ ball_detector/srv/SetParameters.srv | 3 +++ 6 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 ball_detector/msg/BallDetectorParams.msg create mode 100644 ball_detector/srv/GetParameters.srv create mode 100644 ball_detector/srv/SetParameters.srv diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index 1e4219f..6e4d658 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -24,6 +24,13 @@ find_package(catkin REQUIRED COMPONENTS add_message_files( FILES circleSetStamped.msg + BallDetectorParams.msg +) + +add_service_files( + FILES + GetParameters.srv + SetParameters.srv ) generate_messages( @@ -70,4 +77,4 @@ target_link_libraries(ball_detector_node ################################################################################ # Test -################################################################################ \ No newline at end of file +################################################################################ diff --git a/ball_detector/include/ball_detector/ball_detector.h b/ball_detector/include/ball_detector/ball_detector.h index bb65988..ad147a5 100644 --- a/ball_detector/include/ball_detector/ball_detector.h +++ b/ball_detector/include/ball_detector/ball_detector.h @@ -27,6 +27,7 @@ //ros dependencies #include #include +#include #include #include #include @@ -70,6 +71,8 @@ class BallDetector void dynParamCallback(ball_detector::detectorParamsConfig &config, uint32_t level); void enableCallback(const std_msgs::Bool::ConstPtr &msg); + void paramCommandCallback(const std_msgs::String::ConstPtr &msg); + void printConfig(); void saveConfig(); void setInputImage(const cv::Mat & inIm); @@ -86,6 +89,7 @@ class BallDetector ros::NodeHandle nh_; ros::Subscriber enable_sub_; + ros::Subscriber param_command_sub_; //image publisher/subscriber image_transport::ImageTransport it_; diff --git a/ball_detector/msg/BallDetectorParams.msg b/ball_detector/msg/BallDetectorParams.msg new file mode 100644 index 0000000..e72a4ad --- /dev/null +++ b/ball_detector/msg/BallDetectorParams.msg @@ -0,0 +1,16 @@ +# This represents the parameters of ball_detector + +uint32 gaussian_blur_size # only odd number, 1 - 11 +float32 gaussian_blur_sigma # 1 - 5 +float32 canny_edge_th # 50 - 200 +float32 hough_accum_resolution # 1 - 8 +float32 hough_accum_th # 10 - 200 +float32 min_circle_dist # 10 - 200 +uint32 min_radius # 10 - 200 +uint32 max_radius # 100 - 600 +uint32 filter_h_min # 0 - 359 +uint32 filter_h_max +uint32 filter_s_min # 0 - 255 +uint32 filter_s_max +uint32 filter_v_min # 0 - 255 +uint32 filter_v_max diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index c41c716..3b54a6c 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -79,6 +79,7 @@ BallDetector::BallDetector() enable_sub_ = nh_.subscribe("enable", 1, &BallDetector::enableCallback, this); image_sub_ = it_.subscribe("image_in", 1, &BallDetector::imageCallback, this); camera_info_sub_ = nh_.subscribe("cameraInfo_in", 100, &BallDetector::cameraInfoCallback, this); + param_command_sub_ = nh_.subscribe("param_command", 1, &BallDetector::paramCommandCallback, this); //initializes newImageFlag new_image_flag_ = false; @@ -260,6 +261,24 @@ void BallDetector::cameraInfoCallback(const sensor_msgs::CameraInfo & msg) camera_info_msg_ = msg; } +void BallDetector::paramCommandCallback(const std_msgs::String::ConstPtr &msg) +{ + if(msg->data == "debug") + { + params_config_.debug = true; + saveConfig(); + } + else if(msg->data == "normal") + { + params_config_.debug = false; + saveConfig(); + } + else if(msg->data == "reset") + { + // load default parameters and apply + } +} + void BallDetector::printConfig() { if (init_param_ == false) diff --git a/ball_detector/srv/GetParameters.srv b/ball_detector/srv/GetParameters.srv new file mode 100644 index 0000000..eea6f98 --- /dev/null +++ b/ball_detector/srv/GetParameters.srv @@ -0,0 +1,3 @@ + +--- +BallDetectorParams returns diff --git a/ball_detector/srv/SetParameters.srv b/ball_detector/srv/SetParameters.srv new file mode 100644 index 0000000..0cb13ed --- /dev/null +++ b/ball_detector/srv/SetParameters.srv @@ -0,0 +1,3 @@ +BallDetectorParams params +--- +BallDetectorParams returns From 40d99493da3b2b325b6a4db61093e6bde6deeef7 Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 23 Feb 2018 14:16:52 +0900 Subject: [PATCH 023/172] changed some for web setting --- ball_detector/launch/ball_detector_from_usb_cam.launch | 3 +-- op3_demo/launch/demo.launch | 6 +++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ball_detector/launch/ball_detector_from_usb_cam.launch b/ball_detector/launch/ball_detector_from_usb_cam.launch index 1535edd..0809458 100644 --- a/ball_detector/launch/ball_detector_from_usb_cam.launch +++ b/ball_detector/launch/ball_detector_from_usb_cam.launch @@ -17,8 +17,7 @@ - + - + + + + + From 72933c92ea084ffbe68ddedeb5ae44d01f3d27d8 Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 23 Feb 2018 16:24:03 +0900 Subject: [PATCH 024/172] added service for setting ball_detector params --- .../include/ball_detector/ball_detector.h | 10 +++- ball_detector/src/ball_detector.cpp | 48 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/ball_detector/include/ball_detector/ball_detector.h b/ball_detector/include/ball_detector/ball_detector.h index ad147a5..e8fff30 100644 --- a/ball_detector/include/ball_detector/ball_detector.h +++ b/ball_detector/include/ball_detector/ball_detector.h @@ -37,6 +37,8 @@ #include "ball_detector/circleSetStamped.h" #include "ball_detector/ball_detector_config.h" #include "ball_detector/detectorParamsConfig.h" +#include "ball_detector/GetParameters.h" +#include "ball_detector/SetParameters.h" namespace robotis_op { @@ -72,6 +74,8 @@ class BallDetector void enableCallback(const std_msgs::Bool::ConstPtr &msg); void paramCommandCallback(const std_msgs::String::ConstPtr &msg); + bool setParamCallback(ball_detector::SetParameters::Request &req, ball_detector::SetParameters::Response &res); + bool getParamCallback(ball_detector::GetParameters::Request &req, ball_detector::GetParameters::Response &res); void printConfig(); void saveConfig(); @@ -89,7 +93,6 @@ class BallDetector ros::NodeHandle nh_; ros::Subscriber enable_sub_; - ros::Subscriber param_command_sub_; //image publisher/subscriber image_transport::ImageTransport it_; @@ -116,6 +119,11 @@ class BallDetector std::string param_path_; bool has_path_; + // web setting + ros::Subscriber param_command_sub_; + ros::ServiceServer get_param_client_; + ros::ServiceServer set_param_client_; + //flag indicating a new image has been received bool new_image_flag_; diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index 3b54a6c..0d387db 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -88,6 +88,10 @@ BallDetector::BallDetector() callback_fnc_ = boost::bind(&BallDetector::dynParamCallback, this, _1, _2); param_server_.setCallback(callback_fnc_); + // web setting + set_param_client_ = nh_.advertiseService("set_param", &BallDetector::setParamCallback, this); + get_param_client_ = nh_.advertiseService("get_param", &BallDetector::getParamCallback, this); + //sets config and prints it params_config_ = detect_config; init_param_ = true; @@ -279,6 +283,50 @@ void BallDetector::paramCommandCallback(const std_msgs::String::ConstPtr &msg) } } +bool BallDetector::setParamCallback(ball_detector::SetParameters::Request &req, ball_detector::SetParameters::Response &res) +{ + params_config_.gaussian_blur_size = req.params.gaussian_blur_size; + params_config_.gaussian_blur_sigma = req.params.gaussian_blur_sigma; + params_config_.canny_edge_th = req.params.canny_edge_th; + params_config_.hough_accum_resolution = req.params.hough_accum_resolution; + params_config_.min_circle_dist = req.params.min_circle_dist; + params_config_.hough_accum_th = req.params.hough_accum_th; + params_config_.min_radius = req.params.min_radius; + params_config_.max_radius = req.params.max_radius; + params_config_.filter_threshold.h_min = req.params.filter_h_min; + params_config_.filter_threshold.h_max = req.params.filter_h_max; + params_config_.filter_threshold.s_min = req.params.filter_s_min; + params_config_.filter_threshold.s_max = req.params.filter_s_max; + params_config_.filter_threshold.v_min = req.params.filter_v_min; + params_config_.filter_threshold.v_max = req.params.filter_v_max; + + saveConfig(); + + res.returns = req.params; + + return true; +} + +bool BallDetector::getParamCallback(ball_detector::GetParameters::Request &req, ball_detector::GetParameters::Response &res) +{ + res.returns.gaussian_blur_size = params_config_.gaussian_blur_size; + res.returns.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; + res.returns.canny_edge_th = params_config_.canny_edge_th; + res.returns.hough_accum_resolution = params_config_.hough_accum_resolution; + res.returns.min_circle_dist = params_config_.min_circle_dist; + res.returns.hough_accum_th = params_config_.hough_accum_th; + res.returns.min_radius = params_config_.min_radius; + res.returns.max_radius = params_config_.max_radius; + res.returns.filter_h_min = params_config_.filter_threshold.h_min; + res.returns.filter_h_max = params_config_.filter_threshold.h_max; + res.returns.filter_s_min = params_config_.filter_threshold.s_min; + res.returns.filter_s_max = params_config_.filter_threshold.s_max; + res.returns.filter_v_min = params_config_.filter_threshold.v_min; + res.returns.filter_v_max = params_config_.filter_threshold.v_max; + + return true; +} + void BallDetector::printConfig() { if (init_param_ == false) From d1248b8e84f7a0c8b8d4aa93ca8f42ef8380766a Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 23 Feb 2018 20:33:09 +0900 Subject: [PATCH 025/172] added function of reset param changed default parameter value --- ball_detector/CMakeLists.txt | 1 + .../include/ball_detector/ball_detector.h | 5 + .../launch/ball_detector_params_default.yaml | 16 +-- ball_detector/package.xml | 4 +- ball_detector/src/ball_detector.cpp | 110 +++++++++++++++--- 5 files changed, 110 insertions(+), 26 deletions(-) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index 6e4d658..a79af76 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -8,6 +8,7 @@ project(ball_detector) # Packages ################################################################################ find_package(catkin REQUIRED COMPONENTS + roslib cv_bridge geometry_msgs image_transport diff --git a/ball_detector/include/ball_detector/ball_detector.h b/ball_detector/include/ball_detector/ball_detector.h index e8fff30..6e0a3ef 100644 --- a/ball_detector/include/ball_detector/ball_detector.h +++ b/ball_detector/include/ball_detector/ball_detector.h @@ -26,6 +26,7 @@ //ros dependencies #include +#include #include #include #include @@ -76,6 +77,8 @@ class BallDetector void paramCommandCallback(const std_msgs::String::ConstPtr &msg); bool setParamCallback(ball_detector::SetParameters::Request &req, ball_detector::SetParameters::Response &res); bool getParamCallback(ball_detector::GetParameters::Request &req, ball_detector::GetParameters::Response &res); + void resetParameter(); + void publishParam(); void printConfig(); void saveConfig(); @@ -120,6 +123,8 @@ class BallDetector bool has_path_; // web setting + std::string default_setting_path_; + ros::Publisher param_pub_; ros::Subscriber param_command_sub_; ros::ServiceServer get_param_client_; ros::ServiceServer set_param_client_; diff --git a/ball_detector/launch/ball_detector_params_default.yaml b/ball_detector/launch/ball_detector_params_default.yaml index 7310922..a97969a 100644 --- a/ball_detector/launch/ball_detector_params_default.yaml +++ b/ball_detector/launch/ball_detector_params_default.yaml @@ -1,16 +1,16 @@ gaussian_blur_size: 7 -gaussian_blur_sigma: 2.52 -canny_edge_th: 100.5 +gaussian_blur_sigma: 2.0 +canny_edge_th: 100 hough_accum_resolution: 1 -min_circle_dist: 28.5 -hough_accum_th: 26.6 -min_radius: 25 -max_radius: 150 +min_circle_dist: 100 +hough_accum_th: 28 +min_radius: 20 +max_radius: 300 filter_h_min: 350 filter_h_max: 20 -filter_s_min: 90 +filter_s_min: 220 filter_s_max: 255 -filter_v_min: 86 +filter_v_min: 30 filter_v_max: 255 use_second_filter: true filter2_h_min: 30 diff --git a/ball_detector/package.xml b/ball_detector/package.xml index 91ee2a7..79f988f 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -11,7 +11,8 @@ kayman Pyo - catkin + catkin + roslib cv_bridge geometry_msgs image_transport @@ -20,6 +21,7 @@ std_msgs dynamic_reconfigure message_generation + roslib cv_bridge geometry_msgs image_transport diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index 0d387db..55aa21e 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -25,12 +25,12 @@ namespace robotis_op { BallDetector::BallDetector() - : nh_(ros::this_node::getName()), - it_(this->nh_), - enable_(true), - params_config_(), - init_param_(false), - not_found_count_(0) + : nh_(ros::this_node::getName()), + it_(this->nh_), + enable_(true), + params_config_(), + init_param_(false), + not_found_count_(0) { has_path_ = nh_.getParam("yaml_path", param_path_); @@ -79,7 +79,6 @@ BallDetector::BallDetector() enable_sub_ = nh_.subscribe("enable", 1, &BallDetector::enableCallback, this); image_sub_ = it_.subscribe("image_in", 1, &BallDetector::imageCallback, this); camera_info_sub_ = nh_.subscribe("cameraInfo_in", 100, &BallDetector::cameraInfoCallback, this); - param_command_sub_ = nh_.subscribe("param_command", 1, &BallDetector::paramCommandCallback, this); //initializes newImageFlag new_image_flag_ = false; @@ -89,8 +88,11 @@ BallDetector::BallDetector() param_server_.setCallback(callback_fnc_); // web setting + param_pub_ = nh_.advertise("current_params", 1); + param_command_sub_ = nh_.subscribe("param_command", 1, &BallDetector::paramCommandCallback, this); set_param_client_ = nh_.advertiseService("set_param", &BallDetector::setParamCallback, this); get_param_client_ = nh_.advertiseService("get_param", &BallDetector::getParamCallback, this); + default_setting_path_ = ros::package::getPath(ROS_PACKAGE_NAME) + "/launch/ball_detector_params_default.yaml"; //sets config and prints it params_config_ = detect_config; @@ -145,15 +147,15 @@ void BallDetector::publishImage() cv_img_pub_.header.frame_id = image_frame_id_; switch (img_encoding_) { - case IMG_RGB8: - cv_img_pub_.encoding = sensor_msgs::image_encodings::RGB8; - break; - case IMG_MONO: - cv_img_pub_.encoding = sensor_msgs::image_encodings::MONO8; - break; - default: - cv_img_pub_.encoding = sensor_msgs::image_encodings::MONO8; - break; + case IMG_RGB8: + cv_img_pub_.encoding = sensor_msgs::image_encodings::RGB8; + break; + case IMG_MONO: + cv_img_pub_.encoding = sensor_msgs::image_encodings::MONO8; + break; + default: + cv_img_pub_.encoding = sensor_msgs::image_encodings::MONO8; + break; } getOutputImage(cv_img_pub_.image); image_pub_.publish(cv_img_pub_.toImageMsg()); @@ -307,7 +309,7 @@ bool BallDetector::setParamCallback(ball_detector::SetParameters::Request &req, return true; } -bool BallDetector::getParamCallback(ball_detector::GetParameters::Request &req, ball_detector::GetParameters::Response &res) +bool BallDetector:: getParamCallback(ball_detector::GetParameters::Request &req, ball_detector::GetParameters::Response &res) { res.returns.gaussian_blur_size = params_config_.gaussian_blur_size; res.returns.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; @@ -327,6 +329,80 @@ bool BallDetector::getParamCallback(ball_detector::GetParameters::Request &req, return true; } +void BallDetector::resetParameter() +{ + + YAML::Node doc; + + try + { + // load yaml + doc = YAML::LoadFile(default_setting_path_.c_str()); + + // parse + params_config_.gaussian_blur_size = doc["gaussian_blur_size"].as(); + params_config_.gaussian_blur_sigma = doc["gaussian_blur_sigma"].as(); + params_config_.canny_edge_th = doc["canny_edge_th"].as(); + params_config_.hough_accum_resolution = doc["hough_accum_resolution"].as(); + params_config_.min_circle_dist = doc["min_circle_dist"].as(); + params_config_.hough_accum_th = doc["hough_accum_th"].as(); + params_config_.min_radius = doc["min_radius"].as(); + params_config_.max_radius = doc["max_radius"].as(); + params_config_.filter_threshold.h_min = doc["filter_h_min"].as(); + params_config_.filter_threshold.h_max = doc["filter_h_max"].as(); + params_config_.filter_threshold.s_min = doc["filter_s_min"].as(); + params_config_.filter_threshold.s_max = doc["filter_s_max"].as(); + params_config_.filter_threshold.v_min = doc["filter_v_min"].as(); + params_config_.filter_threshold.v_max = doc["filter_v_max"].as(); + params_config_.use_second_filter = doc["use_second_filter"].as(); + params_config_.filter2_threshold.h_min = doc["filter2_h_min"].as(); + params_config_.filter2_threshold.h_max = doc["filter2_h_max"].as(); + params_config_.filter2_threshold.s_min = doc["filter2_s_min"].as(); + params_config_.filter2_threshold.s_max = doc["filter2_s_max"].as(); + params_config_.filter2_threshold.v_min = doc["filter2_v_min"].as(); + params_config_.filter2_threshold.v_max = doc["filter2_v_max"].as(); + params_config_.ellipse_size = doc["ellipse_size"].as(); + params_config_.debug = doc["filter_debug"].as(); + + // gaussian_blur has to be odd number. + if (params_config_.gaussian_blur_size % 2 == 0) + params_config_.gaussian_blur_size -= 1; + if (params_config_.gaussian_blur_size <= 0) + params_config_.gaussian_blur_size = 1; + + printConfig(); + saveConfig(); + + publishParam(); + } catch (const std::exception& e) + { + ROS_ERROR_STREAM("Failed to Get default parameters : " << default_setting_path_); + return; + } +} + +void BallDetector::publishParam() +{ + ball_detector::BallDetectorParams params; + + params.gaussian_blur_size = params_config_.gaussian_blur_size; + params.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; + params.canny_edge_th = params_config_.canny_edge_th; + params.hough_accum_resolution = params_config_.hough_accum_resolution; + params.min_circle_dist = params_config_.min_circle_dist; + params.hough_accum_th = params_config_.hough_accum_th; + params.min_radius = params_config_.min_radius; + params.max_radius = params_config_.max_radius; + params.filter_h_min = params_config_.filter_threshold.h_min; + params.filter_h_max = params_config_.filter_threshold.h_max; + params.filter_s_min = params_config_.filter_threshold.s_min; + params.filter_s_max = params_config_.filter_threshold.s_max; + params.filter_v_min = params_config_.filter_threshold.v_min; + params.filter_v_max = params_config_.filter_threshold.v_max; + + param_pub_.publish(params); +} + void BallDetector::printConfig() { if (init_param_ == false) From e1f3607568848be117a314b2906ebc3b33b92f83 Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 23 Feb 2018 20:41:24 +0900 Subject: [PATCH 026/172] fixed some line --- ball_detector/src/ball_detector.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index 55aa21e..945654b 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -282,6 +282,7 @@ void BallDetector::paramCommandCallback(const std_msgs::String::ConstPtr &msg) else if(msg->data == "reset") { // load default parameters and apply + resetParameter(); } } From c064c779e1158eb73240c5ea8e59666d7ef601e5 Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 23 Feb 2018 21:03:49 +0900 Subject: [PATCH 027/172] added missing parameter --- ball_detector/launch/ball_detector_params_default.yaml | 4 ++-- ball_detector/msg/BallDetectorParams.msg | 1 + ball_detector/src/ball_detector.cpp | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ball_detector/launch/ball_detector_params_default.yaml b/ball_detector/launch/ball_detector_params_default.yaml index a97969a..be36dee 100644 --- a/ball_detector/launch/ball_detector_params_default.yaml +++ b/ball_detector/launch/ball_detector_params_default.yaml @@ -12,7 +12,7 @@ filter_s_min: 220 filter_s_max: 255 filter_v_min: 30 filter_v_max: 255 -use_second_filter: true +use_second_filter: false filter2_h_min: 30 filter2_h_max: 355 filter2_s_min: 0 @@ -20,4 +20,4 @@ filter2_s_max: 40 filter2_v_min: 200 filter2_v_max: 255 ellipse_size: 1 -filter_debug: false \ No newline at end of file +filter_debug: false diff --git a/ball_detector/msg/BallDetectorParams.msg b/ball_detector/msg/BallDetectorParams.msg index e72a4ad..cd1c210 100644 --- a/ball_detector/msg/BallDetectorParams.msg +++ b/ball_detector/msg/BallDetectorParams.msg @@ -14,3 +14,4 @@ uint32 filter_s_min # 0 - 255 uint32 filter_s_max uint32 filter_v_min # 0 - 255 uint32 filter_v_max +uint32 ellipse_size # 1 - 9 diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index 945654b..a38c2b7 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -302,6 +302,7 @@ bool BallDetector::setParamCallback(ball_detector::SetParameters::Request &req, params_config_.filter_threshold.s_max = req.params.filter_s_max; params_config_.filter_threshold.v_min = req.params.filter_v_min; params_config_.filter_threshold.v_max = req.params.filter_v_max; + params_config_.ellipse_size = req.params.ellipse_size; saveConfig(); @@ -326,6 +327,7 @@ bool BallDetector:: getParamCallback(ball_detector::GetParameters::Request &req, res.returns.filter_s_max = params_config_.filter_threshold.s_max; res.returns.filter_v_min = params_config_.filter_threshold.v_min; res.returns.filter_v_max = params_config_.filter_threshold.v_max; + res.returns.ellipse_size = params_config_.ellipse_size; return true; } @@ -400,6 +402,7 @@ void BallDetector::publishParam() params.filter_s_max = params_config_.filter_threshold.s_max; params.filter_v_min = params_config_.filter_threshold.v_min; params.filter_v_max = params_config_.filter_threshold.v_max; + params.filter_v_max = params_config_.ellipse_size; param_pub_.publish(params); } From 390866a7557ca2e8f49430f890056fa9ed204953 Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 23 Feb 2018 21:04:24 +0900 Subject: [PATCH 028/172] changed default params --- ball_detector/launch/ball_detector_params.yaml | 14 +++++++------- .../launch/ball_detector_params_default.yaml | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ball_detector/launch/ball_detector_params.yaml b/ball_detector/launch/ball_detector_params.yaml index 86bd8e9..dd4c366 100644 --- a/ball_detector/launch/ball_detector_params.yaml +++ b/ball_detector/launch/ball_detector_params.yaml @@ -6,18 +6,18 @@ min_circle_dist: 100 hough_accum_th: 28 min_radius: 20 max_radius: 300 -filter_h_min: 350 -filter_h_max: 20 -filter_s_min: 230 +filter_h_min: 247 +filter_h_max: 221 +filter_s_min: 220 filter_s_max: 255 filter_v_min: 30 filter_v_max: 255 use_second_filter: false filter2_h_min: 40 filter2_h_max: 345 -filter2_s_min: 0 -filter2_s_max: 44 +filter2_s_min: 1 +filter2_s_max: 45 filter2_v_min: 90 filter2_v_max: 255 -ellipse_size: 3 -filter_debug: false \ No newline at end of file +ellipse_size: 5 +filter_debug: true \ No newline at end of file diff --git a/ball_detector/launch/ball_detector_params_default.yaml b/ball_detector/launch/ball_detector_params_default.yaml index a97969a..439d4f1 100644 --- a/ball_detector/launch/ball_detector_params_default.yaml +++ b/ball_detector/launch/ball_detector_params_default.yaml @@ -10,9 +10,9 @@ filter_h_min: 350 filter_h_max: 20 filter_s_min: 220 filter_s_max: 255 -filter_v_min: 30 +filter_v_min: 80 filter_v_max: 255 -use_second_filter: true +use_second_filter: false filter2_h_min: 30 filter2_h_max: 355 filter2_s_min: 0 From a6480f8c802b4b37f4b0029e34704753ba44491c Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 23 Feb 2018 21:14:05 +0900 Subject: [PATCH 029/172] fixed typo --- ball_detector/src/ball_detector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index a38c2b7..fb37112 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -402,7 +402,7 @@ void BallDetector::publishParam() params.filter_s_max = params_config_.filter_threshold.s_max; params.filter_v_min = params_config_.filter_threshold.v_min; params.filter_v_max = params_config_.filter_threshold.v_max; - params.filter_v_max = params_config_.ellipse_size; + params.ellipse_size = params_config_.ellipse_size; param_pub_.publish(params); } From a4eec6160ee8ffe838acce98457b9ed4cfcec012 Mon Sep 17 00:00:00 2001 From: Kayman Date: Mon, 26 Feb 2018 19:38:33 +0900 Subject: [PATCH 030/172] changed a launch file in order to move the camera setting to op3_camera_setting package --- .../launch/ball_detector_from_usb_cam.launch | 28 ++++++------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/ball_detector/launch/ball_detector_from_usb_cam.launch b/ball_detector/launch/ball_detector_from_usb_cam.launch index 0809458..e84838b 100644 --- a/ball_detector/launch/ball_detector_from_usb_cam.launch +++ b/ball_detector/launch/ball_detector_from_usb_cam.launch @@ -4,33 +4,23 @@ - - - - - - - - - - - - - + + + + + + + + + From 6de2df04572e77dfc96a4bc471ee1f60da150d35 Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 27 Feb 2018 10:24:54 +0900 Subject: [PATCH 031/172] added callback function for control on the web --- op3_demo/include/op3_demo/action_demo.h | 2 + op3_demo/include/op3_demo/vision_demo.h | 1 + op3_demo/src/action/action_demo.cpp | 17 ++++++++ op3_demo/src/demo_node.cpp | 55 +++++++++++++++++++++++++ op3_demo/src/soccer/soccer_demo.cpp | 2 +- op3_demo/src/vision/vision_demo.cpp | 39 +++++++----------- 6 files changed, 92 insertions(+), 24 deletions(-) diff --git a/op3_demo/include/op3_demo/action_demo.h b/op3_demo/include/op3_demo/action_demo.h index bae084b..f96e6ef 100644 --- a/op3_demo/include/op3_demo/action_demo.h +++ b/op3_demo/include/op3_demo/action_demo.h @@ -88,12 +88,14 @@ class ActionDemo : public OPDemo void actionSetNameCallback(const std_msgs::String::ConstPtr& msg); void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); + void demoCommandCallback(const std_msgs::String::ConstPtr &msg); ros::Publisher module_control_pub_; ros::Publisher motion_index_pub_; ros::Publisher play_sound_pub_; ros::Subscriber buttuon_sub_; + ros::Subscriber demo_command_sub_; ros::ServiceClient is_running_client_; diff --git a/op3_demo/include/op3_demo/vision_demo.h b/op3_demo/include/op3_demo/vision_demo.h index b50918d..75d90ac 100644 --- a/op3_demo/include/op3_demo/vision_demo.h +++ b/op3_demo/include/op3_demo/vision_demo.h @@ -56,6 +56,7 @@ class VisionDemo : public OPDemo void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); void facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg); + void demoCommandCallback(const std_msgs::String::ConstPtr &msg); void setModuleToDemo(const std::string &module_name); diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index 68b84ff..c14339b 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -37,6 +37,8 @@ ActionDemo::ActionDemo() std::string default_play_list = "default"; play_list_name_ = nh.param("action_script_play_list", default_play_list); + demo_command_sub_ = nh.subscribe("/robotis/demo_command", 1, &ActionDemo::demoCommandCallback, this); + parseActionScript (script_path_); boost::thread queue_thread = boost::thread(boost::bind(&ActionDemo::callbackThread, this)); @@ -360,4 +362,19 @@ void ActionDemo::setModuleToDemo(const std::string &module_name) std::cout << "enable module : " << module_name << std::endl; } +void ActionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) +{ + if (enable_ == false) + return; + + if (msg->data == "start") + { + resumeProcess(); + } + else if (msg->data == "stop") + { + pauseProcess(); + } +} + } /* namespace robotis_op */ diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp index fd6742a..19b0643 100644 --- a/op3_demo/src/demo_node.cpp +++ b/op3_demo/src/demo_node.cpp @@ -41,6 +41,8 @@ void setLED(int led); bool checkManagerRunning(std::string& manager_name); void dxlTorqueChecker(); +void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg); + const int SPIN_RATE = 30; const bool DEBUG_PRINT = false; @@ -73,6 +75,7 @@ int main(int argc, char **argv) led_pub = nh.advertise("/robotis/sync_write_item", 0); dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + ros::Subscriber mode_command_sub = nh.subscribe("/robotis/command_mode", 1, demoModeCommandCallback); default_mp3_path = ros::package::getPath("op3_demo") + "/Data/mp3/"; @@ -313,3 +316,55 @@ void dxlTorqueChecker() dxl_torque_pub.publish(check_msg); } + +void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) +{ + // In demo mode + if (current_status != Ready) + { + if (msg->data == "ready") + { + // go to mode selection status + desired_status = Ready; + apply_desired = true; + + playSound(default_mp3_path + "Demonstration ready mode.mp3"); + setLED(0x01 | 0x02 | 0x04); + } + } + // In ready mode + else + { + if(msg->data == "soccer") + { + desired_status = SoccerDemo; + apply_desired = true; + + // play sound + dxlTorqueChecker(); + playSound(default_mp3_path + "Start soccer demonstration.mp3"); + ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); + } + else if(msg->data == "vision") + { + desired_status = VisionDemo; + apply_desired = true; + + // play sound + dxlTorqueChecker(); + playSound(default_mp3_path + "Start vision processing demonstration.mp3"); + ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); + } + else if(msg->data == "action") + { + desired_status = ActionDemo; + apply_desired = true; + + // play sound + dxlTorqueChecker(); + playSound(default_mp3_path + "Start motion demonstration.mp3"); + ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); + } + } +} + diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index d63622e..c361764 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -208,7 +208,7 @@ void SoccerDemo::callbackThread() rgb_led_pub_ = nh.advertise("/robotis/sync_write_item", 0); buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &SoccerDemo::buttonHandlerCallback, this); - demo_command_sub_ = nh.subscribe("/ball_tracker/command", 1, &SoccerDemo::demoCommandCallback, this); + demo_command_sub_ = nh.subscribe("/robotis/demo_command", 1, &SoccerDemo::demoCommandCallback, this); imu_data_sub_ = nh.subscribe("/robotis/open_cr/imu", 1, &SoccerDemo::imuDataCallback, this); is_running_client_ = nh.serviceClient("/robotis/action/is_running"); diff --git a/op3_demo/src/vision/vision_demo.cpp b/op3_demo/src/vision/vision_demo.cpp index 5058ada..fbe9060 100644 --- a/op3_demo/src/vision/vision_demo.cpp +++ b/op3_demo/src/vision/vision_demo.cpp @@ -141,29 +141,7 @@ void VisionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) if (msg->data == "start") { -// switch (play_status_) -// { -// case PlayAction: -// { -// pauseProcess(); -// break; -// } -// -// case PauseAction: -// { -// resumeProcess(); -// break; -// } -// -// case StopAction: -// { -// resumeProcess(); -// break; -// } -// -// default: -// break; -// } + } else if (msg->data == "mode") { @@ -171,6 +149,21 @@ void VisionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) } } +void VisionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) +{ + if (enable_ == false) + return; + + if (msg->data == "start") + { + + } + else if (msg->data == "stop") + { + + } +} + void VisionDemo::setModuleToDemo(const std::string &module_name) { std_msgs::String control_msg; From 2549fe19b9cab43c646fbcaa5fdff29255a8d7cc Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 27 Feb 2018 10:27:39 +0900 Subject: [PATCH 032/172] changed topic name --- op3_demo/src/demo_node.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp index 19b0643..91429c1 100644 --- a/op3_demo/src/demo_node.cpp +++ b/op3_demo/src/demo_node.cpp @@ -75,7 +75,7 @@ int main(int argc, char **argv) led_pub = nh.advertise("/robotis/sync_write_item", 0); dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); - ros::Subscriber mode_command_sub = nh.subscribe("/robotis/command_mode", 1, demoModeCommandCallback); + ros::Subscriber mode_command_sub = nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); default_mp3_path = ros::package::getPath("op3_demo") + "/Data/mp3/"; @@ -256,7 +256,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) case ActionDemo: playSound(default_mp3_path + "Interactive motion mode.mp3"); - setLED(0x04); + setLED(0x04);ball_tracker break; default: From 9dcb075e329d229091ac16ff70a22dcef77465bb Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 27 Feb 2018 10:28:19 +0900 Subject: [PATCH 033/172] changed parameter setting value --- .../launch/ball_detector_params.yaml | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ball_detector/launch/ball_detector_params.yaml b/ball_detector/launch/ball_detector_params.yaml index dd4c366..b7c5ec4 100644 --- a/ball_detector/launch/ball_detector_params.yaml +++ b/ball_detector/launch/ball_detector_params.yaml @@ -6,18 +6,18 @@ min_circle_dist: 100 hough_accum_th: 28 min_radius: 20 max_radius: 300 -filter_h_min: 247 -filter_h_max: 221 -filter_s_min: 220 +filter_h_min: 350 +filter_h_max: 20 +filter_s_min: 222 filter_s_max: 255 -filter_v_min: 30 +filter_v_min: 65 filter_v_max: 255 use_second_filter: false -filter2_h_min: 40 -filter2_h_max: 345 -filter2_s_min: 1 -filter2_s_max: 45 -filter2_v_min: 90 +filter2_h_min: 30 +filter2_h_max: 355 +filter2_s_min: 0 +filter2_s_max: 40 +filter2_v_min: 200 filter2_v_max: 255 -ellipse_size: 5 -filter_debug: true \ No newline at end of file +ellipse_size: 2 +filter_debug: false \ No newline at end of file From af6206c321344021518f20a5f7c4eb129e44e486 Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 27 Feb 2018 10:32:56 +0900 Subject: [PATCH 034/172] fixed minor bug --- op3_demo/src/demo_node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp index 91429c1..8039aff 100644 --- a/op3_demo/src/demo_node.cpp +++ b/op3_demo/src/demo_node.cpp @@ -256,7 +256,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) case ActionDemo: playSound(default_mp3_path + "Interactive motion mode.mp3"); - setLED(0x04);ball_tracker + setLED(0x04); break; default: From f8e7806adb60b55cf4befb0edb47260d827408b2 Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 27 Feb 2018 10:59:27 +0900 Subject: [PATCH 035/172] changed delay to wait for changing module --- op3_demo/src/action/action_demo.cpp | 2 +- op3_demo/src/soccer/soccer_demo.cpp | 4 ++-- op3_demo/src/vision/vision_demo.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index c14339b..67bb393 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -53,7 +53,7 @@ void ActionDemo::setDemoEnable() { setModuleToDemo("action_module"); - usleep(10 * 1000); + usleep(100 * 1000); enable_ = true; diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index c361764..d4f2410 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -414,7 +414,7 @@ void SoccerDemo::startSoccerMode() { setModuleToDemo("action_module"); - usleep(10 * 1000); + usleep(100 * 1000); playMotion(WalkingReady); @@ -422,7 +422,7 @@ void SoccerDemo::startSoccerMode() setBodyModuleToDemo("walking_module"); - usleep(10 * 1000); + usleep(20 * 1000); ROS_INFO("Start Soccer Demo"); on_following_ball_ = true; diff --git a/op3_demo/src/vision/vision_demo.cpp b/op3_demo/src/vision/vision_demo.cpp index fbe9060..7de7362 100644 --- a/op3_demo/src/vision/vision_demo.cpp +++ b/op3_demo/src/vision/vision_demo.cpp @@ -52,7 +52,7 @@ void VisionDemo::setDemoEnable() setModuleToDemo("head_control_module"); - usleep(10 * 1000); + usleep(20 * 1000); enable_ = true; face_tracker_.startTracking(); From 6fe214d9b050b814d0b31dd23f86fa96d61eae9f Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 27 Feb 2018 11:14:05 +0900 Subject: [PATCH 036/172] fixed wrong path of yaml --- op3_demo/src/soccer/soccer_demo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index d4f2410..bd887b7 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -42,7 +42,7 @@ SoccerDemo::SoccerDemo() ros::NodeHandle nh(ros::this_node::getName()); - std::string default_path = ros::package::getPath("op3_gui_demo") + "/config/demo_config.yaml"; + std::string default_path = ros::package::getPath("op3_gui_demo") + "/config/gui_config.yaml"; std::string path = nh.param("demo_config", default_path); parseJointNameFromYaml(path); From 251b9c8e197f09071de64ea916dbd8701a96a3ff Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 27 Feb 2018 17:16:15 +0900 Subject: [PATCH 037/172] changed action stop --- op3_demo/include/op3_demo/action_demo.h | 1 + op3_demo/src/action/action_demo.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/op3_demo/include/op3_demo/action_demo.h b/op3_demo/include/op3_demo/action_demo.h index f96e6ef..bac1eab 100644 --- a/op3_demo/include/op3_demo/action_demo.h +++ b/op3_demo/include/op3_demo/action_demo.h @@ -55,6 +55,7 @@ class ActionDemo : public OPDemo PlayAction = 1, PauseAction = 2, StopAction = 3, + ReadyAction = 4, }; const int SPIN_RATE; diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index 67bb393..76a238c 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -110,6 +110,8 @@ void ActionDemo::process() stopMP3(); brakeAction(); + play_status_ = ReadyAction; + break; } @@ -118,6 +120,8 @@ void ActionDemo::process() stopMP3(); stopAction(); + play_status_ = ReadyAction; + break; } From f9e9dc0cd6780a69fd39f4ab8717f5da1a8d9391 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 28 Feb 2018 10:12:58 +0900 Subject: [PATCH 038/172] changed op3_demo launch file --- ball_detector/launch/ball_detector_params.yaml | 6 +++--- op3_demo/launch/demo.launch | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/ball_detector/launch/ball_detector_params.yaml b/ball_detector/launch/ball_detector_params.yaml index b7c5ec4..d6310e1 100644 --- a/ball_detector/launch/ball_detector_params.yaml +++ b/ball_detector/launch/ball_detector_params.yaml @@ -8,9 +8,9 @@ min_radius: 20 max_radius: 300 filter_h_min: 350 filter_h_max: 20 -filter_s_min: 222 +filter_s_min: 220 filter_s_max: 255 -filter_v_min: 65 +filter_v_min: 80 filter_v_max: 255 use_second_filter: false filter2_h_min: 30 @@ -19,5 +19,5 @@ filter2_s_min: 0 filter2_s_max: 40 filter2_v_min: 200 filter2_v_max: 255 -ellipse_size: 2 +ellipse_size: 1 filter_debug: false \ No newline at end of file diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index 17db508..391a9f3 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -18,8 +18,7 @@ - - + From f0f3b2f98de3dd15cb6bcfff4337e7f2faf27863 Mon Sep 17 00:00:00 2001 From: Yoonseok Pyo Date: Fri, 2 Mar 2018 16:13:44 +0900 Subject: [PATCH 039/172] Create .travis.yml --- .travis.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..ee670e4 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,35 @@ +# This config file for Travis CI utilizes ros-industrial/industrial_ci package. +# For more info for the package, see https://github.com/ros-industrial/industrial_ci/blob/master/README.rst + +dist: trusty +sudo: required +services: + - docker +language: generic +python: + - "2.7" +compiler: + - gcc +notifications: + email: + on_success: always + on_failure: always + recipients: + - pyo@robotis.com +env: + matrix: + - ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu USE_DEB=true + - ROS_DISTRO="kinetic" PRERELEASE=true PRERELEASE_DOWNSTREAM_DEPTH=0 +matrix: + allow_failures: + - env: ROS_DISTRO="kinetic" PRERELEASE=true PRERELEASE_DOWNSTREAM_DEPTH=0 +branches: + only: + - master + - develop + - kinetic-devel +install: + - git clone https://github.com/ros-industrial/industrial_ci.git .ci_config +script: + - source .ci_config/travis.sh + From fe3117af0c5a113102fcc16bf73c91ebdd4b671e Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 13 Mar 2018 21:00:38 +0900 Subject: [PATCH 040/172] decreased the count of copying image. added command to face_tracker_node. --- .../include/ball_detector/ball_detector.h | 3 + ball_detector/src/ball_detector.cpp | 135 ++++++++++++++++-- ball_detector/src/ball_detector_node.cpp | 1 + op3_demo/include/op3_demo/face_tracker.h | 1 + op3_demo/include/op3_demo/vision_demo.h | 3 +- op3_demo/launch/face_detection_op3.launch | 1 + op3_demo/src/test_node.cpp | 4 + op3_demo/src/vision/face_tracker.cpp | 5 +- op3_demo/src/vision/vision_demo.cpp | 12 +- 9 files changed, 152 insertions(+), 13 deletions(-) diff --git a/ball_detector/include/ball_detector/ball_detector.h b/ball_detector/include/ball_detector/ball_detector.h index 6e0a3ef..b246ff3 100644 --- a/ball_detector/include/ball_detector/ball_detector.h +++ b/ball_detector/include/ball_detector/ball_detector.h @@ -83,13 +83,16 @@ class BallDetector void printConfig(); void saveConfig(); void setInputImage(const cv::Mat & inIm); + void setInputImage(const cv::Mat & inIm, cv::Mat &in_filter_img); void getOutputImage(cv::Mat & outIm); void filterImage(); + void filterImage(const cv::Mat &in_filter_img, cv::Mat &out_filter_img); void makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, int range); void makeFilterMaskFromBall(const cv::Mat &source_img, cv::Mat &mask_img); void inRangeHsv(const cv::Mat &input_img, const HsvFilter &filter_value, cv::Mat &output_img); void mophology(const cv::Mat &intput_img, cv::Mat &output_img, int ellipse_size); void houghDetection(const unsigned int imgEncoding); + void houghDetection2(const cv::Mat &input_hough); void drawOutputImage(); //ros node handle diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index fb37112..df4fe80 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -125,14 +125,25 @@ void BallDetector::process() if (cv_img_ptr_sub_ != NULL) { - //sets input image - setInputImage(cv_img_ptr_sub_->image); + cv::Mat img_hsv, img_filtered; - // test image filtering - filterImage(); + // set input image + setInputImage(cv_img_ptr_sub_->image, img_hsv); + + // image filtering + filterImage(img_hsv, img_filtered); //detect circles - houghDetection(this->img_encoding_); + houghDetection2(img_filtered); + +// // set input image +// setInputImage(cv_img_ptr_sub_->image); + +// // image filtering +// filterImage(); + +// //detect circles +// houghDetection(this->img_encoding_); } } @@ -184,8 +195,8 @@ void BallDetector::publishCircles() // left(-1), right(+1) for (int idx = 0; idx < circles_.size(); idx++) { - circles_msg_.circles[idx].x = circles_[idx][0] / in_image_.cols * 2 - 1; // x (-1 ~ 1) - circles_msg_.circles[idx].y = circles_[idx][1] / in_image_.rows * 2 - 1; // y (-1 ~ 1) + circles_msg_.circles[idx].x = circles_[idx][0] / out_image_.cols * 2 - 1; // x (-1 ~ 1) + circles_msg_.circles[idx].y = circles_[idx][1] / out_image_.rows * 2 - 1; // y (-1 ~ 1) circles_msg_.circles[idx].z = circles_[idx][2]; // radius } @@ -482,6 +493,14 @@ void BallDetector::setInputImage(const cv::Mat & inIm) out_image_ = in_image_.clone(); } +void BallDetector::setInputImage(const cv::Mat & inIm, cv::Mat &in_filter_img) +{ + cv::cvtColor(inIm, in_filter_img, cv::COLOR_RGB2HSV); + + if (params_config_.debug == false) + out_image_ = inIm.clone(); +} + void BallDetector::getOutputImage(cv::Mat & outIm) { this->drawOutputImage(); @@ -522,6 +541,42 @@ void BallDetector::filterImage() cv::cvtColor(img_filtered, in_image_, cv::COLOR_GRAY2RGB); } +void BallDetector::filterImage(const cv::Mat &in_filter_img, cv::Mat &out_filter_img) +{ + if (!in_filter_img.data) + return; + + inRangeHsv(in_filter_img, params_config_.filter_threshold, out_filter_img); + + // mophology : open and close + mophology(out_filter_img, out_filter_img, params_config_.ellipse_size); + + if (params_config_.use_second_filter == true) + { + // mask + cv::Mat img_mask; + + // check hsv range + cv::Mat img_filtered2; + inRangeHsv(in_filter_img, params_config_.filter2_threshold, img_filtered2); + + makeFilterMaskFromBall(out_filter_img, img_mask); + cv::bitwise_and(img_filtered2, img_mask, img_filtered2); + + // or + cv::bitwise_or(out_filter_img, img_filtered2, out_filter_img); + } + + mophology(out_filter_img, out_filter_img, params_config_.ellipse_size); + +// cv::cvtColor(img_filtered, in_image_, cv::COLOR_GRAY2RGB); + + //draws results to output Image + if (params_config_.debug == true) + cv::cvtColor(out_filter_img, out_image_, cv::COLOR_GRAY2RGB); +// out_image_ = in_image_.clone(); +} + void BallDetector::makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, int range) { // source_img. @@ -707,6 +762,68 @@ void BallDetector::houghDetection(const unsigned int imgEncoding) } } +void BallDetector::houghDetection2(const cv::Mat &input_hough) +{ +// cv::Mat gray_image; + std::vector circles_current; + std::vector prev_circles = circles_; + + //clear previous circles + circles_.clear(); + + // If input image is RGB, convert it to gray +// if (imgEncoding == IMG_RGB8) +// cv::cvtColor(input_hough, gray_image, CV_RGB2GRAY); + + + //Reduce the noise so we avoid false circle detection + cv::GaussianBlur(input_hough, input_hough, + cv::Size(params_config_.gaussian_blur_size, params_config_.gaussian_blur_size), + params_config_.gaussian_blur_sigma); + + double hough_accum_th = params_config_.hough_accum_th; + + + //Apply the Hough Transform to find the circles + cv::HoughCircles(input_hough, circles_current, CV_HOUGH_GRADIENT, params_config_.hough_accum_resolution, + params_config_.min_circle_dist, params_config_.canny_edge_th, hough_accum_th, + params_config_.min_radius, params_config_.max_radius); + + if (circles_current.size() == 0) + not_found_count_ += 1; + else + not_found_count_ = 0; + + double alpha = 0.2; + + for (int ix = 0; ix < circles_current.size(); ix++) + { + cv::Point2d center = cv::Point(circles_current[ix][0], circles_current[ix][1]); + double radius = circles_current[ix][2]; + + for (int prev_ix = 0; prev_ix < prev_circles.size(); prev_ix++) + { + cv::Point2d prev_center = cv::Point(prev_circles[prev_ix][0], prev_circles[prev_ix][1]); + double prev_radius = prev_circles[prev_ix][2]; + + cv::Point2d diff = center - prev_center; + double radius_th = std::max(radius, prev_radius) * 0.75; + + if (sqrt(diff.dot(diff)) < radius_th) + { + if (abs(radius - prev_radius) < radius_th) + { + circles_current[ix] = circles_current[ix] * alpha + prev_circles[prev_ix] * (1 - alpha); + } + + break; + } + } + + circles_.push_back(circles_current[ix]); + } +} + void BallDetector::drawOutputImage() { cv::Point center_position; @@ -714,8 +831,8 @@ void BallDetector::drawOutputImage() size_t ii; //draws results to output Image - if (params_config_.debug == true) - out_image_ = in_image_.clone(); +// if (params_config_.debug == true) +// out_image_ = in_image_.clone(); for (ii = 0; ii < circles_.size(); ii++) { diff --git a/ball_detector/src/ball_detector_node.cpp b/ball_detector/src/ball_detector_node.cpp index 7edfae6..5560d56 100644 --- a/ball_detector/src/ball_detector_node.cpp +++ b/ball_detector/src/ball_detector_node.cpp @@ -39,6 +39,7 @@ int main(int argc, char **argv) detector.process(); detector.publishImage(); detector.publishCircles(); + } //execute pending callbacks diff --git a/op3_demo/include/op3_demo/face_tracker.h b/op3_demo/include/op3_demo/face_tracker.h index a5b3ae8..0671b24 100644 --- a/op3_demo/include/op3_demo/face_tracker.h +++ b/op3_demo/include/op3_demo/face_tracker.h @@ -24,6 +24,7 @@ #include #include +#include #include #include #include diff --git a/op3_demo/include/op3_demo/vision_demo.h b/op3_demo/include/op3_demo/vision_demo.h index 75d90ac..470962d 100644 --- a/op3_demo/include/op3_demo/vision_demo.h +++ b/op3_demo/include/op3_demo/vision_demo.h @@ -64,7 +64,8 @@ class VisionDemo : public OPDemo ros::Publisher module_control_pub_; ros::Publisher motion_index_pub_; - ros::Publisher rgb_led_pub_; + ros::Publisher rgb_led_pub_; + ros::Publisher face_tracking_command_pub_; ros::Subscriber buttuon_sub_; ros::Subscriber faceCoord_sub_; diff --git a/op3_demo/launch/face_detection_op3.launch b/op3_demo/launch/face_detection_op3.launch index 155b3cd..afc5f12 100644 --- a/op3_demo/launch/face_detection_op3.launch +++ b/op3_demo/launch/face_detection_op3.launch @@ -17,5 +17,6 @@ + diff --git a/op3_demo/src/test_node.cpp b/op3_demo/src/test_node.cpp index 3ed2aa3..6671097 100644 --- a/op3_demo/src/test_node.cpp +++ b/op3_demo/src/test_node.cpp @@ -193,6 +193,10 @@ int main(int argc, char **argv) //relax to fit output rate loop_rate.sleep(); + + // for debug + if (checkManagerRunning(manager_name) == false) + return 0; } //exit program diff --git a/op3_demo/src/vision/face_tracker.cpp b/op3_demo/src/vision/face_tracker.cpp index 572eec2..36a32a4 100644 --- a/op3_demo/src/vision/face_tracker.cpp +++ b/op3_demo/src/vision/face_tracker.cpp @@ -34,8 +34,7 @@ FaceTracker::FaceTracker() head_scan_pub_ = nh_.advertise("/robotis/head_control/scan_command", 0); face_position_sub_ = nh_.subscribe("/face_position", 1, &FaceTracker::facePositionCallback, this); - face_tracking_command_sub_ = nh_.subscribe("/face_tracker/command", 1, &FaceTracker::faceTrackerCommandCallback, - this); + //face_tracking_command_sub_ = nh_.subscribe("/robotis/demo_command", 1, &FaceTracker::faceTrackerCommandCallback, this); } FaceTracker::~FaceTracker() @@ -73,12 +72,14 @@ void FaceTracker::faceTrackerCommandCallback(const std_msgs::String::ConstPtr &m void FaceTracker::startTracking() { on_tracking_ = true; + ROS_INFO("Start Face tracking"); } void FaceTracker::stopTracking() { on_tracking_ = false; + ROS_INFO("Stop Face tracking"); } diff --git a/op3_demo/src/vision/vision_demo.cpp b/op3_demo/src/vision/vision_demo.cpp index 7de7362..ea91bd8 100644 --- a/op3_demo/src/vision/vision_demo.cpp +++ b/op3_demo/src/vision/vision_demo.cpp @@ -55,6 +55,11 @@ void VisionDemo::setDemoEnable() usleep(20 * 1000); enable_ = true; + + std_msgs::Bool command; + command.data = enable_; + face_tracking_command_pub_.publish(command); + face_tracker_.startTracking(); ROS_INFO("Start Vision Demo"); @@ -68,6 +73,10 @@ void VisionDemo::setDemoDisable() is_tracking_ = false; tracking_status_ = FaceTracker::Waiting; enable_ = false; + + std_msgs::Bool command; + command.data = enable_; + face_tracking_command_pub_.publish(command); } void VisionDemo::process() @@ -95,7 +104,7 @@ void VisionDemo::process() tracking_status_ = tracking_status; //is_tracking_ = is_tracked; - std::cout << "Tracking : " << tracking_status << std::endl; + //std::cout << "Tracking : " << tracking_status << std::endl; } void VisionDemo::processThread() @@ -122,6 +131,7 @@ void VisionDemo::callbackThread() module_control_pub_ = nh.advertise("/robotis/enable_ctrl_module", 0); motion_index_pub_ = nh.advertise("/robotis/action/page_num", 0); rgb_led_pub_ = nh.advertise("/robotis/sync_write_item", 0); + face_tracking_command_pub_ = nh.advertise("/face_tracking/command", 0); buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &VisionDemo::buttonHandlerCallback, this); faceCoord_sub_ = nh.subscribe("/faceCoord", 1, &VisionDemo::facePositionCallback, this); From 6a7a8159e74daf429be3a5a098b0b088dcd7dfb3 Mon Sep 17 00:00:00 2001 From: Yoonseok Pyo Date: Fri, 16 Mar 2018 16:55:00 +0900 Subject: [PATCH 041/172] Update .travis.yml --- .travis.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index ee670e4..07bc3c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ # This config file for Travis CI utilizes ros-industrial/industrial_ci package. # For more info for the package, see https://github.com/ros-industrial/industrial_ci/blob/master/README.rst -dist: trusty sudo: required +dist: trusty services: - docker language: generic @@ -18,11 +18,8 @@ notifications: - pyo@robotis.com env: matrix: - - ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu USE_DEB=true - - ROS_DISTRO="kinetic" PRERELEASE=true PRERELEASE_DOWNSTREAM_DEPTH=0 -matrix: - allow_failures: - - env: ROS_DISTRO="kinetic" PRERELEASE=true PRERELEASE_DOWNSTREAM_DEPTH=0 + - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian +# - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=debian OS_CODE_NAME=jessie branches: only: - master From e5503b75446a357e09474c7554e661f7154da286 Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 22 Mar 2018 16:33:10 +0900 Subject: [PATCH 042/172] changed a method to setting module added parameters of gain for ball_tracking changed variables of camera FOV --- .../launch/ball_detector_params.yaml | 4 +- op3_demo/include/op3_demo/action_demo.h | 4 +- op3_demo/include/op3_demo/ball_tracker.h | 9 +- op3_demo/include/op3_demo/soccer_demo.h | 4 + op3_demo/include/op3_demo/vision_demo.h | 4 +- op3_demo/launch/demo.launch | 2 + op3_demo/launch/self_test.launch | 9 +- op3_demo/src/action/action_demo.cpp | 24 ++- op3_demo/src/soccer/ball_follower.cpp | 4 +- op3_demo/src/soccer/ball_tracker.cpp | 107 ++++++----- op3_demo/src/soccer/soccer_demo.cpp | 174 +++++++++--------- op3_demo/src/test_node.cpp | 93 +++++++++- op3_demo/src/vision/face_tracker.cpp | 2 +- op3_demo/src/vision/vision_demo.cpp | 31 ++-- 14 files changed, 308 insertions(+), 163 deletions(-) diff --git a/ball_detector/launch/ball_detector_params.yaml b/ball_detector/launch/ball_detector_params.yaml index d6310e1..2992b70 100644 --- a/ball_detector/launch/ball_detector_params.yaml +++ b/ball_detector/launch/ball_detector_params.yaml @@ -7,8 +7,8 @@ hough_accum_th: 28 min_radius: 20 max_radius: 300 filter_h_min: 350 -filter_h_max: 20 -filter_s_min: 220 +filter_h_max: 15 +filter_s_min: 200 filter_s_max: 255 filter_v_min: 80 filter_v_max: 255 diff --git a/op3_demo/include/op3_demo/action_demo.h b/op3_demo/include/op3_demo/action_demo.h index bac1eab..32a9435 100644 --- a/op3_demo/include/op3_demo/action_demo.h +++ b/op3_demo/include/op3_demo/action_demo.h @@ -29,6 +29,7 @@ #include "op3_demo/op_demo.h" #include "robotis_controller_msgs/JointCtrlModule.h" +#include "robotis_controller_msgs/SetModule.h" #include "op3_action_module_msgs/IsRunning.h" namespace robotis_op @@ -86,7 +87,7 @@ class ActionDemo : public OPDemo bool isActionRunning(); void setModuleToDemo(const std::string &module_name); - + void callServiceSettingModule(const std::string &module_name); void actionSetNameCallback(const std_msgs::String::ConstPtr& msg); void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); void demoCommandCallback(const std_msgs::String::ConstPtr &msg); @@ -99,6 +100,7 @@ class ActionDemo : public OPDemo ros::Subscriber demo_command_sub_; ros::ServiceClient is_running_client_; + ros::ServiceClient set_joint_module_client_; std::map action_sound_table_; std::vector play_list_; diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/op3_demo/include/op3_demo/ball_tracker.h index 2304a43..0d3cfac 100644 --- a/op3_demo/include/op3_demo/ball_tracker.h +++ b/op3_demo/include/op3_demo/ball_tracker.h @@ -26,6 +26,7 @@ #include #include #include +//#include #include #include "robotis_controller_msgs/JointCtrlModule.h" @@ -39,7 +40,7 @@ namespace robotis_op // head tracking for looking the ball class BallTracker { - public: +public: enum TrackingStatus { NotFound = -1, @@ -72,7 +73,7 @@ class BallTracker return current_ball_bottom_; } - protected: +protected: const double FOV_WIDTH; const double FOV_HEIGHT; const int NOT_FOUND_THRESHOLD; @@ -92,6 +93,8 @@ class BallTracker ros::Publisher head_joint_pub_; ros::Publisher head_scan_pub_; + // ros::Publisher error_pub_; + ros::Publisher motion_index_pub_; ros::Subscriber ball_position_sub_; @@ -107,7 +110,9 @@ class BallTracker bool on_tracking_; double current_ball_pan_, current_ball_tilt_; double current_ball_bottom_; + double x_error_sum_, y_error_sum_; ros::Time prev_time_; + double p_gain_, d_gain_, i_gain_; }; } diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index d18343f..f65d81b 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -30,6 +30,8 @@ #include "robotis_math/robotis_linear_algebra.h" #include "op3_action_module_msgs/IsRunning.h" #include "robotis_controller_msgs/SyncWriteItem.h" +#include "robotis_controller_msgs/JointCtrlModule.h" +#include "robotis_controller_msgs/SetJointModule.h" namespace robotis_op { @@ -70,6 +72,7 @@ class SoccerDemo : public OPDemo void setBodyModuleToDemo(const std::string &body_module, bool with_head_control = true); void setModuleToDemo(const std::string &module_name); + void callServiceSettingModule(const robotis_controller_msgs::JointCtrlModule &modules); void parseJointNameFromYaml(const std::string &path); bool getJointNameFromID(const int &id, std::string &joint_name); bool getIDFromJointName(const std::string &joint_name, int &id); @@ -101,6 +104,7 @@ class SoccerDemo : public OPDemo ros::Subscriber imu_data_sub_; ros::ServiceClient is_running_client_; + ros::ServiceClient set_joint_module_client_; std::map id_joint_table_; std::map joint_id_table_; diff --git a/op3_demo/include/op3_demo/vision_demo.h b/op3_demo/include/op3_demo/vision_demo.h index 470962d..3ebdc46 100644 --- a/op3_demo/include/op3_demo/vision_demo.h +++ b/op3_demo/include/op3_demo/vision_demo.h @@ -30,6 +30,7 @@ #include "op3_demo/face_tracker.h" #include "robotis_controller_msgs/SyncWriteItem.h" +#include "robotis_controller_msgs/SetModule.h" namespace robotis_op { @@ -59,6 +60,7 @@ class VisionDemo : public OPDemo void demoCommandCallback(const std_msgs::String::ConstPtr &msg); void setModuleToDemo(const std::string &module_name); + void callServiceSettingModule(const std::string &module_name); FaceTracker face_tracker_; @@ -70,9 +72,9 @@ class VisionDemo : public OPDemo ros::Subscriber buttuon_sub_; ros::Subscriber faceCoord_sub_; + ros::ServiceClient set_joint_module_client_; geometry_msgs::Point face_position_; - bool is_tracking_; int tracking_status_; }; diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index 391a9f3..aa5098b 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -23,6 +23,8 @@ + + diff --git a/op3_demo/launch/self_test.launch b/op3_demo/launch/self_test.launch index 0f34bca..c5ca857 100644 --- a/op3_demo/launch/self_test.launch +++ b/op3_demo/launch/self_test.launch @@ -17,7 +17,14 @@ + + + - + + + + + diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index 76a238c..4f14679 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -53,8 +53,6 @@ void ActionDemo::setDemoEnable() { setModuleToDemo("action_module"); - usleep(100 * 1000); - enable_ = true; ROS_INFO_COND(DEBUG_PRINT, "Start ActionScript Demo"); @@ -69,7 +67,7 @@ void ActionDemo::setDemoDisable() stopProcess(); enable_ = false; - + ROS_WARN("Set Action demo disable"); play_list_.resize(0); } @@ -181,6 +179,7 @@ void ActionDemo::callbackThread() buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &ActionDemo::buttonHandlerCallback, this); is_running_client_ = nh.serviceClient("/robotis/action/is_running"); + set_joint_module_client_ = nh.serviceClient("/robotis/set_present_ctrl_modules"); while (nh.ok()) { @@ -359,11 +358,22 @@ void ActionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) void ActionDemo::setModuleToDemo(const std::string &module_name) { - std_msgs::String control_msg; - control_msg.data = "action_module"; + callServiceSettingModule(module_name); + ROS_INFO_STREAM("enable module : " << module_name); +} - module_control_pub_.publish(control_msg); - std::cout << "enable module : " << module_name << std::endl; +void ActionDemo::callServiceSettingModule(const std::string &module_name) +{ + robotis_controller_msgs::SetModule set_module_srv; + set_module_srv.request.module_name = module_name; + + if (set_joint_module_client_.call(set_module_srv) == false) + { + ROS_ERROR("Failed to set module"); + return; + } + + return ; } void ActionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index f59a23e..eec94e9 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -23,7 +23,7 @@ namespace robotis_op BallFollower::BallFollower() : nh_(ros::this_node::getName()), - FOV_WIDTH(26.4 * M_PI / 180), + FOV_WIDTH(35.2 * M_PI / 180), FOV_HEIGHT(21.6 * M_PI / 180), count_not_found_(0), count_to_kick_(0), @@ -216,7 +216,7 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ "head tilt : " << (current_tilt_ * 180 / M_PI) << " | ball tilt : " << (y_angle * 180 / M_PI)); ROS_INFO_STREAM_COND(DEBUG_PRINT, "foot to kick : " << accum_ball_position_); - ROS_INFO("In range [%d]", count_to_kick_); + ROS_INFO("In range [%d | %d]", count_to_kick_, accum_ball_position_); if (count_to_kick_ > 20) { diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp index b7d9ad2..cbd4e87 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -22,22 +22,32 @@ namespace robotis_op { BallTracker::BallTracker() - : nh_(ros::this_node::getName()), - FOV_WIDTH(26.4 * M_PI / 180), - FOV_HEIGHT(21.6 * M_PI / 180), - NOT_FOUND_THRESHOLD(50), - WAITING_THRESHOLD(5), - use_head_scan_(true), - count_not_found_(0), - on_tracking_(false), - current_ball_pan_(0), - current_ball_tilt_(0), - current_ball_bottom_(0), - tracking_status_(NotFound), - DEBUG_PRINT(false) + : nh_(ros::this_node::getName()), + FOV_WIDTH(35.2 * M_PI / 180), + FOV_HEIGHT(21.6 * M_PI / 180), + NOT_FOUND_THRESHOLD(50), + WAITING_THRESHOLD(5), + use_head_scan_(true), + count_not_found_(0), + on_tracking_(false), + current_ball_pan_(0), + current_ball_tilt_(0), + x_error_sum_(0), + y_error_sum_(0), + current_ball_bottom_(0), + tracking_status_(NotFound), + DEBUG_PRINT(false) { + ros::NodeHandle param_nh("~"); + p_gain_ = param_nh.param("p_gain", 0.4); + i_gain_ = param_nh.param("i_gain", 0.0); + d_gain_ = param_nh.param("d_gain", 0.0); + + ROS_INFO_STREAM("Ball tracking Gain : " << p_gain_ << ", " << i_gain_ << ", " << d_gain_); + head_joint_pub_ = nh_.advertise("/robotis/head_control/set_joint_states_offset", 0); head_scan_pub_ = nh_.advertise("/robotis/head_control/scan_command", 0); + // error_pub_ = nh_.advertise("/ball_tracker/errors", 0); ball_position_sub_ = nh_.subscribe("/ball_detector_node/circle_set", 1, &BallTracker::ballPositionCallback, this); ball_tracking_command_sub_ = nh_.subscribe("/ball_tracker/command", 1, &BallTracker::ballTrackerCommandCallback, @@ -90,9 +100,10 @@ void BallTracker::stopTracking() on_tracking_ = false; ROS_INFO_COND(DEBUG_PRINT, "Stop Ball tracking"); - double x_error = -atan(ball_position_.x * tan(FOV_WIDTH)); - double y_error = -atan(ball_position_.y * tan(FOV_HEIGHT)); - publishHeadJoint(x_error, y_error); + current_ball_pan_ = 0; + current_ball_tilt_ = 0; + x_error_sum_ = 0; + y_error_sum_ = 0; } void BallTracker::setUsingHeadScan(bool use_scan) @@ -147,24 +158,26 @@ int BallTracker::processTracking() switch (tracking_status) { - case NotFound: - tracking_status_ = tracking_status; - return tracking_status; + case NotFound: + tracking_status_ = tracking_status; + current_ball_pan_ = 0; + current_ball_tilt_ = 0; + x_error_sum_ = 0; + y_error_sum_ = 0; + return tracking_status; - case Waiting: - x_error = current_ball_pan_ * 0.7; - y_error = current_ball_tilt_ * 0.7; - ball_size = current_ball_bottom_; - break; + case Waiting: + tracking_status_ = tracking_status; + return tracking_status; - case Found: - x_error = -atan(ball_position_.x * tan(FOV_WIDTH)); - y_error = -atan(ball_position_.y * tan(FOV_HEIGHT)); - ball_size = ball_position_.z; - break; + case Found: + x_error = -atan(ball_position_.x * tan(FOV_WIDTH)); + y_error = -atan(ball_position_.y * tan(FOV_HEIGHT)); + ball_size = ball_position_.z; + break; - default: - break; + default: + break; } ROS_INFO_STREAM_COND(DEBUG_PRINT, "--------------------------------------------------------------"); @@ -176,21 +189,34 @@ int BallTracker::processTracking() double delta_time = dur.nsec * 0.000000001 + dur.sec; prev_time_ = curr_time; - // double p_gain = 0.7, d_gain = 0.05; - double p_gain = 0.75, d_gain = 0.04; double x_error_diff = (x_error - current_ball_pan_) / delta_time; double y_error_diff = (y_error - current_ball_tilt_) / delta_time; - double x_error_target = x_error * p_gain + x_error_diff * d_gain; - double y_error_target = y_error * p_gain + y_error_diff * d_gain; + x_error_sum_ += x_error; + y_error_sum_ += y_error; + double x_error_target = x_error * p_gain_ + x_error_diff * d_gain_ + x_error_sum_ * i_gain_; + double y_error_target = y_error * p_gain_ + y_error_diff * d_gain_ + y_error_sum_ * i_gain_; - ROS_INFO_STREAM_COND(DEBUG_PRINT, "--------------------------------------------------------------"); + // std_msgs::Float64MultiArray x_error_msg; + // x_error_msg.data.push_back(x_error); + // x_error_msg.data.push_back(x_error_diff); + // x_error_msg.data.push_back(x_error_sum_); + // x_error_msg.data.push_back(x_error * p_gain_); + // x_error_msg.data.push_back(x_error_diff * d_gain_); + // x_error_msg.data.push_back(x_error_sum_ * i_gain_); + // x_error_msg.data.push_back(x_error_target); + // error_pub_.publish(x_error_msg); + + ROS_INFO_STREAM_COND(DEBUG_PRINT, "------------------------ " << tracking_status << " --------------------------------------"); ROS_INFO_STREAM_COND(DEBUG_PRINT, "error : " << (x_error * 180 / M_PI) << " | " << (y_error * 180 / M_PI)); ROS_INFO_STREAM_COND( - DEBUG_PRINT, - "error_diff : " << (x_error_diff * 180 / M_PI) << " | " << (y_error_diff * 180 / M_PI) << " | " << delta_time); + DEBUG_PRINT, + "error_diff : " << (x_error_diff * 180 / M_PI) << " | " << (y_error_diff * 180 / M_PI) << " | " << delta_time); ROS_INFO_STREAM_COND( - DEBUG_PRINT, - "error_target : " << (x_error_target * 180 / M_PI) << " | " << (y_error_target * 180 / M_PI) << " | P : " << p_gain << " | D : " << d_gain); + DEBUG_PRINT, + "error_sum : " << (x_error_sum_ * 180 / M_PI) << " | " << (y_error_sum_ * 180 / M_PI)); + ROS_INFO_STREAM_COND( + DEBUG_PRINT, + "error_target : " << (x_error_target * 180 / M_PI) << " | " << (y_error_target * 180 / M_PI) << " | P : " << p_gain_ << " | D : " << d_gain_ << " | time : " << delta_time); // move head joint publishHeadJoint(x_error_target, y_error_target); @@ -201,7 +227,6 @@ int BallTracker::processTracking() current_ball_bottom_ = ball_size; ball_position_.z = 0; - //count_not_found_ = 0; tracking_status_ = tracking_status; return tracking_status; diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index bd887b7..0565152 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -22,20 +22,20 @@ namespace robotis_op { SoccerDemo::SoccerDemo() - : FALL_FORWARD_LIMIT(60), - FALL_BACK_LIMIT(-60), - SPIN_RATE(30), - DEBUG_PRINT(false), - wait_count_(0), - on_following_ball_(false), - restart_soccer_(false), - start_following_(false), - stop_following_(false), - stop_fallen_check_(false), - robot_status_(Waited), - stand_state_(Stand), - tracking_status_(BallTracker::Waiting), - present_pitch_(0) + : FALL_FORWARD_LIMIT(60), + FALL_BACK_LIMIT(-60), + SPIN_RATE(30), + DEBUG_PRINT(false), + wait_count_(0), + on_following_ball_(false), + restart_soccer_(false), + start_following_(false), + stop_following_(false), + stop_fallen_check_(false), + robot_status_(Waited), + stand_state_(Stand), + tracking_status_(BallTracker::Waiting), + present_pitch_(0) { //init ros enable_ = false; @@ -66,8 +66,6 @@ void SoccerDemo::setDemoEnable() void SoccerDemo::setDemoDisable() { - setModuleToDemo("base_module"); - // handle disable procedure ball_tracker_.stopTracking(); ball_follower_.stopFollowing(); @@ -85,8 +83,10 @@ void SoccerDemo::setDemoDisable() void SoccerDemo::process() { + if(enable_ == false) + return; + // ball tracking - bool is_tracked; int tracking_status; tracking_status = ball_tracker_.processTracking(); @@ -101,9 +101,6 @@ void SoccerDemo::process() wait_count_ = 1 * SPIN_RATE; } - //for debug - //return; - // check to stop if (stop_following_ == true) { @@ -121,20 +118,20 @@ void SoccerDemo::process() { switch(tracking_status) { - case BallTracker::Found: - ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall(), 0.0); - if(tracking_status_ != tracking_status) - setRGBLED(0x1F, 0x1F, 0x1F); - break; + case BallTracker::Found: + ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall(), 0.0); + if(tracking_status_ != tracking_status) + setRGBLED(0x1F, 0x1F, 0x1F); + break; - case BallTracker::NotFound: - ball_follower_.waitFollowing(); - if(tracking_status_ != tracking_status) - setRGBLED(0, 0, 0); - break; + case BallTracker::NotFound: + ball_follower_.waitFollowing(); + if(tracking_status_ != tracking_status) + setRGBLED(0, 0, 0); + break; - default: - break; + default: + break; } if(tracking_status != tracking_status_) @@ -144,32 +141,32 @@ void SoccerDemo::process() // check fallen states switch (stand_state_) { - case Stand: + case Stand: + { + // check restart soccer + if (restart_soccer_ == true) { - // check restart soccer - if (restart_soccer_ == true) - { - restart_soccer_ = false; - startSoccerMode(); - break; - } - - // check states for kick - int ball_position = ball_follower_.getBallPosition(); - if (ball_position != robotis_op::BallFollower::NotFound) - { - ball_follower_.stopFollowing(); - handleKick(ball_position); - } + restart_soccer_ = false; + startSoccerMode(); break; } - // fallen state : Fallen_Forward, Fallen_Behind - default: + + // check states for kick + int ball_position = ball_follower_.getBallPosition(); + if (ball_position != robotis_op::BallFollower::NotFound) { ball_follower_.stopFollowing(); - handleFallen(stand_state_); - break; + handleKick(ball_position); } + break; + } + // fallen state : Fallen_Forward, Fallen_Behind + default: + { + ball_follower_.stopFollowing(); + handleFallen(stand_state_); + break; + } } } else @@ -212,6 +209,7 @@ void SoccerDemo::callbackThread() imu_data_sub_ = nh.subscribe("/robotis/open_cr/imu", 1, &SoccerDemo::imuDataCallback, this); is_running_client_ = nh.serviceClient("/robotis/action/is_running"); + set_joint_module_client_ = nh.serviceClient("/robotis/set_present_joint_ctrl_modules"); while (nh.ok()) { @@ -252,12 +250,15 @@ void SoccerDemo::setBodyModuleToDemo(const std::string &body_module, bool with_h if (control_msg.joint_name.size() == 0) return; - module_control_pub_.publish(control_msg); + callServiceSettingModule(control_msg); std::cout << "enable module of body : " << body_module << std::endl; } void SoccerDemo::setModuleToDemo(const std::string &module_name) { + if(enable_ == false) + return; + robotis_controller_msgs::JointCtrlModule control_msg; std::map::iterator joint_iter; @@ -271,10 +272,25 @@ void SoccerDemo::setModuleToDemo(const std::string &module_name) if (control_msg.joint_name.size() == 0) return; - module_control_pub_.publish(control_msg); + callServiceSettingModule(control_msg); std::cout << "enable module : " << module_name << std::endl; } +void SoccerDemo::callServiceSettingModule(const robotis_controller_msgs::JointCtrlModule &modules) +{ + robotis_controller_msgs::SetJointModule set_joint_srv; + set_joint_srv.request.joint_name = modules.joint_name; + set_joint_srv.request.module_name = modules.module_name; + + if (set_joint_module_client_.call(set_joint_srv) == false) + { + ROS_ERROR("Failed to set module"); + return; + } + + return ; +} + void SoccerDemo::parseJointNameFromYaml(const std::string &path) { YAML::Node doc; @@ -414,16 +430,10 @@ void SoccerDemo::startSoccerMode() { setModuleToDemo("action_module"); - usleep(100 * 1000); - playMotion(WalkingReady); - usleep(1500 * 1000); - setBodyModuleToDemo("walking_module"); - usleep(20 * 1000); - ROS_INFO("Start Soccer Demo"); on_following_ball_ = true; start_following_ = true; @@ -445,24 +455,24 @@ void SoccerDemo::handleKick(int ball_position) usleep(1500 * 1000); - if (handleFallen(stand_state_) == true) + if (handleFallen(stand_state_) == true || enable_ == false) return; // kick motion switch (ball_position) { - case robotis_op::BallFollower::OnRight: - std::cout << "Kick Motion [R]: " << ball_position << std::endl; - playMotion(is_grass_ ? RightKick + ForGrass : RightKick); - break; + case robotis_op::BallFollower::OnRight: + std::cout << "Kick Motion [R]: " << ball_position << std::endl; + playMotion(is_grass_ ? RightKick + ForGrass : RightKick); + break; - case robotis_op::BallFollower::OnLeft: - std::cout << "Kick Motion [L]: " << ball_position << std::endl; - playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); - break; + case robotis_op::BallFollower::OnLeft: + std::cout << "Kick Motion [L]: " << ball_position << std::endl; + playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); + break; - default: - break; + default: + break; } on_following_ball_ = false; @@ -487,23 +497,21 @@ bool SoccerDemo::handleFallen(int fallen_status) // change to motion module setModuleToDemo("action_module"); - usleep(600 * 1000); - // getup motion switch (fallen_status) { - case Fallen_Forward: - std::cout << "Getup Motion [F]: " << std::endl; - playMotion(is_grass_ ? GetUpFront + ForGrass : GetUpFront); - break; + case Fallen_Forward: + std::cout << "Getup Motion [F]: " << std::endl; + playMotion(is_grass_ ? GetUpFront + ForGrass : GetUpFront); + break; - case Fallen_Behind: - std::cout << "Getup Motion [B]: " << std::endl; - playMotion(is_grass_ ? GetUpBack + ForGrass : GetUpBack); - break; + case Fallen_Behind: + std::cout << "Getup Motion [B]: " << std::endl; + playMotion(is_grass_ ? GetUpBack + ForGrass : GetUpBack); + break; - default: - break; + default: + break; } while(isActionRunning() == true) diff --git a/op3_demo/src/test_node.cpp b/op3_demo/src/test_node.cpp index 6671097..259ea96 100644 --- a/op3_demo/src/test_node.cpp +++ b/op3_demo/src/test_node.cpp @@ -44,12 +44,17 @@ void goInitPose(); void playSound(const std::string &path); void setLED(int led); bool checkManagerRunning(std::string& manager_name); +void dxlTorqueChecker(); + +void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg); const int SPIN_RATE = 30; +const bool DEBUG_PRINT = true; ros::Publisher init_pose_pub; ros::Publisher play_sound_pub; ros::Publisher led_pub; +ros::Publisher dxl_torque_pub; std::string default_mp3_path = ""; int current_status = Ready; @@ -75,7 +80,9 @@ int main(int argc, char **argv) init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); led_pub = nh.advertise("/robotis/sync_write_item", 0); + dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + ros::Subscriber mode_command_sub = nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); default_mp3_path = ros::package::getPath("op3_demo") + "/Data/mp3/"; @@ -93,7 +100,7 @@ int main(int argc, char **argv) if (checkManagerRunning(manager_name) == true) { break; - ROS_INFO("Succeed to connect"); + ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } ROS_WARN("Waiting for op3 manager"); } @@ -120,7 +127,7 @@ int main(int argc, char **argv) goInitPose(); - ROS_INFO("[Go to Demo READY!]"); + ROS_INFO_COND(DEBUG_PRINT, "[Go to Demo READY!]"); break; } @@ -132,7 +139,7 @@ int main(int argc, char **argv) current_demo = soccer_demo; current_demo->setDemoEnable(); - ROS_INFO("[Start] Soccer Demo"); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Soccer Demo"); break; } @@ -143,7 +150,7 @@ int main(int argc, char **argv) current_demo = vision_demo; current_demo->setDemoEnable(); - ROS_INFO("[Start] Vision Demo"); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Vision Demo"); break; } case ActionDemo: @@ -153,7 +160,7 @@ int main(int argc, char **argv) current_demo = action_demo; current_demo->setDemoEnable(); - ROS_INFO("[Start] Action Demo"); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Action Demo"); break; } case ButtonTest: @@ -163,7 +170,7 @@ int main(int argc, char **argv) current_demo = button_test; current_demo->setDemoEnable(); - ROS_INFO("[Start] Button Test"); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Button Test"); break; } case MicTest: @@ -173,7 +180,7 @@ int main(int argc, char **argv) current_demo = mic_test; current_demo->setDemoEnable(); - ROS_INFO("[Start] Mic Test"); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Mic Test"); break; } @@ -205,6 +212,9 @@ int main(int argc, char **argv) void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) { + if(apply_desired == true) + return; + // in the middle of playing demo if (current_status != Ready) { @@ -236,22 +246,27 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) switch (desired_status) { case SoccerDemo: + dxlTorqueChecker(); playSound(default_mp3_path + "Start soccer demonstration.mp3"); break; case VisionDemo: + dxlTorqueChecker(); playSound(default_mp3_path + "Start vision processing demonstration.mp3"); break; case ActionDemo: + dxlTorqueChecker(); playSound(default_mp3_path + "Start motion demonstration.mp3"); break; case ButtonTest: + dxlTorqueChecker(); playSound(default_mp3_path + "test/Start button test mode.mp3"); break; case MicTest: + dxlTorqueChecker(); playSound(default_mp3_path + "test/Start mic test mode.mp3"); break; @@ -259,7 +274,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) break; } - ROS_INFO("= Start Demo Mode : %d", desired_status); + ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); } else if (msg->data == "mode") { @@ -299,7 +314,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) break; } - ROS_INFO("= Demo Mode : %d", desired_status); + ROS_INFO_COND(DEBUG_PRINT, "= Demo Mode : %d", desired_status); } } } @@ -344,3 +359,63 @@ bool checkManagerRunning(std::string& manager_name) ROS_ERROR("Can't find op3_manager"); return false; } + +void dxlTorqueChecker() +{ + std_msgs::String check_msg; + check_msg.data = "check"; + + dxl_torque_pub.publish(check_msg); +} + +void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) +{ + // In demo mode + if (current_status != Ready) + { + if (msg->data == "ready") + { + // go to mode selection status + desired_status = Ready; + apply_desired = true; + + playSound(default_mp3_path + "Demonstration ready mode.mp3"); + setLED(0x01 | 0x02 | 0x04); + } + } + // In ready mode + else + { + if(msg->data == "soccer") + { + desired_status = SoccerDemo; + apply_desired = true; + + // play sound + dxlTorqueChecker(); + playSound(default_mp3_path + "Start soccer demonstration.mp3"); + ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); + } + else if(msg->data == "vision") + { + desired_status = VisionDemo; + apply_desired = true; + + // play sound + dxlTorqueChecker(); + playSound(default_mp3_path + "Start vision processing demonstration.mp3"); + ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); + } + else if(msg->data == "action") + { + desired_status = ActionDemo; + apply_desired = true; + + // play sound + dxlTorqueChecker(); + playSound(default_mp3_path + "Start motion demonstration.mp3"); + ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); + } + } +} + diff --git a/op3_demo/src/vision/face_tracker.cpp b/op3_demo/src/vision/face_tracker.cpp index 36a32a4..f9b3e24 100644 --- a/op3_demo/src/vision/face_tracker.cpp +++ b/op3_demo/src/vision/face_tracker.cpp @@ -23,7 +23,7 @@ namespace robotis_op FaceTracker::FaceTracker() : nh_(ros::this_node::getName()), - FOV_WIDTH(26.4 * M_PI / 180), + FOV_WIDTH(35.2 * M_PI / 180), FOV_HEIGHT(21.6 * M_PI / 180), NOT_FOUND_THRESHOLD(50), use_head_scan_(false), diff --git a/op3_demo/src/vision/vision_demo.cpp b/op3_demo/src/vision/vision_demo.cpp index ea91bd8..1062e5c 100644 --- a/op3_demo/src/vision/vision_demo.cpp +++ b/op3_demo/src/vision/vision_demo.cpp @@ -23,7 +23,6 @@ namespace robotis_op VisionDemo::VisionDemo() : SPIN_RATE(30), - is_tracking_(false), tracking_status_(FaceTracker::Waiting) { enable_ = false; @@ -44,18 +43,15 @@ void VisionDemo::setDemoEnable() // change to motion module setModuleToDemo("action_module"); - usleep(100 * 1000); - playMotion(InitPose); usleep(1500 * 1000); setModuleToDemo("head_control_module"); - usleep(20 * 1000); - enable_ = true; + // send command to start face_tracking std_msgs::Bool command; command.data = enable_; face_tracking_command_pub_.publish(command); @@ -70,7 +66,6 @@ void VisionDemo::setDemoDisable() { face_tracker_.stopTracking(); - is_tracking_ = false; tracking_status_ = FaceTracker::Waiting; enable_ = false; @@ -102,9 +97,6 @@ void VisionDemo::process() if(tracking_status != FaceTracker::Waiting) tracking_status_ = tracking_status; - - //is_tracking_ = is_tracked; - //std::cout << "Tracking : " << tracking_status << std::endl; } void VisionDemo::processThread() @@ -136,6 +128,8 @@ void VisionDemo::callbackThread() buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &VisionDemo::buttonHandlerCallback, this); faceCoord_sub_ = nh.subscribe("/faceCoord", 1, &VisionDemo::facePositionCallback, this); + set_joint_module_client_ = nh.serviceClient("/robotis/set_present_ctrl_modules"); + while (nh.ok()) { ros::spinOnce(); @@ -176,11 +170,22 @@ void VisionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) void VisionDemo::setModuleToDemo(const std::string &module_name) { - std_msgs::String control_msg; - control_msg.data = module_name; + callServiceSettingModule(module_name); + ROS_INFO_STREAM("enable module : " << module_name); +} - module_control_pub_.publish(control_msg); - std::cout << "enable module : " << module_name << std::endl; +void VisionDemo::callServiceSettingModule(const std::string &module_name) +{ + robotis_controller_msgs::SetModule set_module_srv; + set_module_srv.request.module_name = module_name; + + if (set_joint_module_client_.call(set_module_srv) == false) + { + ROS_ERROR("Failed to set module"); + return; + } + + return ; } void VisionDemo::facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg) From 22d0b5b59c00b92df1878c90cf043c984714ebdc Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 28 Mar 2018 15:09:23 +0900 Subject: [PATCH 043/172] changed default setting of ball_detector --- ball_detector/launch/ball_detector_params.yaml | 4 ++-- .../launch/ball_detector_params_default.yaml | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ball_detector/launch/ball_detector_params.yaml b/ball_detector/launch/ball_detector_params.yaml index 2992b70..49cc203 100644 --- a/ball_detector/launch/ball_detector_params.yaml +++ b/ball_detector/launch/ball_detector_params.yaml @@ -10,7 +10,7 @@ filter_h_min: 350 filter_h_max: 15 filter_s_min: 200 filter_s_max: 255 -filter_v_min: 80 +filter_v_min: 60 filter_v_max: 255 use_second_filter: false filter2_h_min: 30 @@ -19,5 +19,5 @@ filter2_s_min: 0 filter2_s_max: 40 filter2_v_min: 200 filter2_v_max: 255 -ellipse_size: 1 +ellipse_size: 2 filter_debug: false \ No newline at end of file diff --git a/ball_detector/launch/ball_detector_params_default.yaml b/ball_detector/launch/ball_detector_params_default.yaml index 4569b97..49cc203 100644 --- a/ball_detector/launch/ball_detector_params_default.yaml +++ b/ball_detector/launch/ball_detector_params_default.yaml @@ -1,5 +1,5 @@ gaussian_blur_size: 7 -gaussian_blur_sigma: 2.0 +gaussian_blur_sigma: 2 canny_edge_th: 100 hough_accum_resolution: 1 min_circle_dist: 100 @@ -7,10 +7,10 @@ hough_accum_th: 28 min_radius: 20 max_radius: 300 filter_h_min: 350 -filter_h_max: 20 -filter_s_min: 220 +filter_h_max: 15 +filter_s_min: 200 filter_s_max: 255 -filter_v_min: 80 +filter_v_min: 60 filter_v_max: 255 use_second_filter: false filter2_h_min: 30 @@ -19,5 +19,5 @@ filter2_s_min: 0 filter2_s_max: 40 filter2_v_min: 200 filter2_v_max: 255 -ellipse_size: 1 -filter_debug: false +ellipse_size: 2 +filter_debug: false \ No newline at end of file From aec0c193c5d8c9d09b787b38c2008307619c1174 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 28 Mar 2018 16:16:42 +0900 Subject: [PATCH 044/172] changed CMakeLists.txt --- ball_detector/CMakeLists.txt | 20 +++++++++++++++++++- op3_demo/CMakeLists.txt | 26 +++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index a79af76..09858b1 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -19,6 +19,23 @@ find_package(catkin REQUIRED COMPONENTS message_generation ) +## Resolve system dependency on yaml-cpp, which apparently does not +## provide a CMake find_package() module. +find_package(PkgConfig REQUIRED) +pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) +find_path(YAML_CPP_INCLUDE_DIR + NAMES yaml_cpp.h + PATHS ${YAML_CPP_INCLUDE_DIRS} +) +find_library(YAML_CPP_LIBRARY + NAMES YAML_CPP + PATHS ${YAML_CPP_LIBRARY_DIRS} +) +link_directories(${YAML_CPP_LIBRARY_DIRS}) + +if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") +add_definitions(-DHAVE_NEW_YAMLCPP) +endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") ################################################################################ # Declare ROS messages, services and actions ################################################################################ @@ -59,6 +76,7 @@ catkin_package( include_directories( include ${catkin_INCLUDE_DIRS} + ${YAML_CPP_INCLUDE_DIRS} ) add_executable(ball_detector_node @@ -69,7 +87,7 @@ add_dependencies(ball_detector_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin target_link_libraries(ball_detector_node ${catkin_LIBRARIES} - yaml-cpp + ${YAML_CPP_LIBRARIES} ) ################################################################################ diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index 4615615..b721d98 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -19,8 +19,25 @@ find_package(catkin REQUIRED COMPONENTS robotis_math ) -find_package(Eigen REQUIRED) +find_package(Eigen3 REQUIRED) +## Resolve system dependency on yaml-cpp, which apparently does not +## provide a CMake find_package() module. +find_package(PkgConfig REQUIRED) +pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) +find_path(YAML_CPP_INCLUDE_DIR + NAMES yaml_cpp.h + PATHS ${YAML_CPP_INCLUDE_DIRS} +) +find_library(YAML_CPP_LIBRARY + NAMES YAML_CPP + PATHS ${YAML_CPP_LIBRARY_DIRS} +) +link_directories(${YAML_CPP_LIBRARY_DIRS}) + +if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") +add_definitions(-DHAVE_NEW_YAMLCPP) +endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") ################################################################################ # Declare ROS messages, services and actions @@ -36,6 +53,7 @@ find_package(Eigen REQUIRED) catkin_package( INCLUDE_DIRS include CATKIN_DEPENDS roscpp sensor_msgs + DEPENDS EIGEN3 ) ################################################################################ @@ -44,7 +62,8 @@ catkin_package( include_directories( include ${catkin_INCLUDE_DIRS} - ${Eigen_INCLUDE_DIRS} + ${EIGEN3_INCLUDE_DIRS} + ${YAML_CPP_INCLUDE_DIRS} ) add_executable(op_demo_node @@ -80,7 +99,8 @@ add_dependencies(self_test_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXP target_link_libraries(self_test_node ${catkin_LIBRARIES} - yaml-cpp + ${Eigen3_LIBRARIES} + ${YAML_CPP_LIBRARIES} ) ################################################################################ From 25c569c91121caa6eff356850cf66b099437cb6d Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 28 Mar 2018 16:26:25 +0900 Subject: [PATCH 045/172] fixed CMakeLists.txt --- ball_detector/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index 09858b1..1456418 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -12,6 +12,7 @@ find_package(catkin REQUIRED COMPONENTS cv_bridge geometry_msgs image_transport + cmake_modules roscpp rospy std_msgs From a6ca620b7be33258673f2bcf5fede90758c85d10 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 28 Mar 2018 16:46:38 +0900 Subject: [PATCH 046/172] added cmake_modules for test. --- ball_detector/CMakeLists.txt | 2 +- ball_detector/package.xml | 2 ++ op3_demo/CMakeLists.txt | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index 1456418..a81a3d7 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -68,7 +68,7 @@ generate_dynamic_reconfigure_options(cfg/detector_params.cfg) ################################################################################ catkin_package( INCLUDE_DIRS include - CATKIN_DEPENDS cv_bridge geometry_msgs image_transport roscpp rospy std_msgs dynamic_reconfigure + CATKIN_DEPENDS cv_bridge cmake_modules geometry_msgs image_transport roscpp rospy std_msgs dynamic_reconfigure ) ################################################################################ diff --git a/ball_detector/package.xml b/ball_detector/package.xml index 79f988f..25ce8ce 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -19,6 +19,7 @@ roscpp rospy std_msgs + cmake_modules dynamic_reconfigure message_generation roslib @@ -28,6 +29,7 @@ roscpp rospy std_msgs + cmake_modules dynamic_reconfigure message_runtime diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index b721d98..d002446 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -52,7 +52,7 @@ endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") ################################################################################ catkin_package( INCLUDE_DIRS include - CATKIN_DEPENDS roscpp sensor_msgs + CATKIN_DEPENDS roscpp sensor_msgs cmake_modules DEPENDS EIGEN3 ) From 15ad67a9a1ce473ac8fd096db7b19319fc66ab65 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 28 Mar 2018 16:59:31 +0900 Subject: [PATCH 047/172] fixed CMakeLists.txt and package.xml --- ball_detector/CMakeLists.txt | 3 +-- ball_detector/package.xml | 31 ++++++++++++------------------- op3_demo/package.xml | 29 +++++++++++------------------ 3 files changed, 24 insertions(+), 39 deletions(-) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index a81a3d7..09858b1 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -12,7 +12,6 @@ find_package(catkin REQUIRED COMPONENTS cv_bridge geometry_msgs image_transport - cmake_modules roscpp rospy std_msgs @@ -68,7 +67,7 @@ generate_dynamic_reconfigure_options(cfg/detector_params.cfg) ################################################################################ catkin_package( INCLUDE_DIRS include - CATKIN_DEPENDS cv_bridge cmake_modules geometry_msgs image_transport roscpp rospy std_msgs dynamic_reconfigure + CATKIN_DEPENDS cv_bridge geometry_msgs image_transport roscpp rospy std_msgs dynamic_reconfigure ) ################################################################################ diff --git a/ball_detector/package.xml b/ball_detector/package.xml index 25ce8ce..e0d63a5 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -12,24 +12,17 @@ Pyo catkin - roslib - cv_bridge - geometry_msgs - image_transport - roscpp - rospy - std_msgs - cmake_modules - dynamic_reconfigure + roslib + cv_bridge + geometry_msgs + image_transport + roscpp + rospy + std_msgs + cmake_modules + dynamic_reconfigure + yaml-cpp message_generation - roslib - cv_bridge - geometry_msgs - image_transport - roscpp - rospy - std_msgs - cmake_modules - dynamic_reconfigure - message_runtime + message_runtime + message_runtime diff --git a/op3_demo/package.xml b/op3_demo/package.xml index 68baa53..ccc8d31 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -11,22 +11,15 @@ Pyo catkin - roscpp - roslib - sensor_msgs - ball_detector - robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs - cmake_modules - robotis_math - roscpp - roslib - sensor_msgs - ball_detector - robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs - cmake_modules - robotis_math + roscpp + roslib + sensor_msgs + ball_detector + robotis_controller_msgs + op3_walking_module_msgs + op3_action_module_msgs + cmake_modules + robotis_math + eigen + yaml-cpp From ad3be190eab099eb18dd05eab0e432982f9a3f97 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 28 Mar 2018 17:04:39 +0900 Subject: [PATCH 048/172] fixed wrong syntax --- ball_detector/package.xml | 2 +- op3_demo/package.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ball_detector/package.xml b/ball_detector/package.xml index e0d63a5..c612c4f 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -1,5 +1,5 @@ - + ball_detector 0.1.0 diff --git a/op3_demo/package.xml b/op3_demo/package.xml index ccc8d31..cff56e8 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -1,5 +1,5 @@ - + op3_demo 0.1.0 From 7106ae6bddabe8caf4aa362cd75be3fabd3da9ca Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 28 Mar 2018 17:22:08 +0900 Subject: [PATCH 049/172] test for dynamic reconfigure settting --- ball_detector/package.xml | 6 ++++-- op3_demo/package.xml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ball_detector/package.xml b/ball_detector/package.xml index c612c4f..47af0d6 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -1,7 +1,7 @@ ball_detector - 0.1.0 + 0.1.1 This package implements a circle-like shape detector of the input image. It requires and input image and publish, at frame rate, a marked image @@ -20,9 +20,11 @@ rospy std_msgs cmake_modules - dynamic_reconfigure yaml-cpp message_generation message_runtime message_runtime + dynamic_reconfigure + dynamic_reconfigure + dynamic_reconfigure diff --git a/op3_demo/package.xml b/op3_demo/package.xml index cff56e8..70af22d 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -1,7 +1,7 @@ op3_demo - 0.1.0 + 0.1.1 op3 default demo It includes three demontrations(soccer demo, vision demo, action script demo) From 8742227fa076b43469d73f61c751832a139e2859 Mon Sep 17 00:00:00 2001 From: Pyo Date: Wed, 28 Mar 2018 19:36:08 +0900 Subject: [PATCH 050/172] added gencfg to generate dynamic reconfigure --- ball_detector/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index 09858b1..d97925a 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -83,8 +83,7 @@ add_executable(ball_detector_node src/ball_detector.cpp src/ball_detector_node.cpp) -add_dependencies(ball_detector_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - +add_dependencies(ball_detector_node ${PROJECT_NAME}_gencfg ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) target_link_libraries(ball_detector_node ${catkin_LIBRARIES} ${YAML_CPP_LIBRARIES} From 3cb37bf37b1bd3fe2b0fdd1c6126ff0fca7ad15e Mon Sep 17 00:00:00 2001 From: Pyo Date: Wed, 28 Mar 2018 20:15:46 +0900 Subject: [PATCH 051/172] Update and rename detector_params.cfg to DetectorParams.cfg --- ball_detector/cfg/{detector_params.cfg => DetectorParams.cfg} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename ball_detector/cfg/{detector_params.cfg => DetectorParams.cfg} (97%) diff --git a/ball_detector/cfg/detector_params.cfg b/ball_detector/cfg/DetectorParams.cfg similarity index 97% rename from ball_detector/cfg/detector_params.cfg rename to ball_detector/cfg/DetectorParams.cfg index 2d61d6c..1d3e29c 100755 --- a/ball_detector/cfg/detector_params.cfg +++ b/ball_detector/cfg/DetectorParams.cfg @@ -30,4 +30,4 @@ gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) gen.add("ellipse_size",int_t , -1, "Ellipse size", 2, 1, 9) gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) -exit(gen.generate(PACKAGE, "ball_detector_node", "detectorParams")) +exit(gen.generate(PACKAGE, "ball_detector_node", "DetectorParams")) From f0051d7182270df293b4038ac9cea71cdf9872cb Mon Sep 17 00:00:00 2001 From: Pyo Date: Wed, 28 Mar 2018 20:16:30 +0900 Subject: [PATCH 052/172] Update and rename detector_params.cfg to DetectorParams.cfg --- ball_detector/cfg/{detector_params.cfg => DetectorParams.cfg} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename ball_detector/cfg/{detector_params.cfg => DetectorParams.cfg} (97%) diff --git a/ball_detector/cfg/detector_params.cfg b/ball_detector/cfg/DetectorParams.cfg similarity index 97% rename from ball_detector/cfg/detector_params.cfg rename to ball_detector/cfg/DetectorParams.cfg index 2d61d6c..1d3e29c 100755 --- a/ball_detector/cfg/detector_params.cfg +++ b/ball_detector/cfg/DetectorParams.cfg @@ -30,4 +30,4 @@ gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) gen.add("ellipse_size",int_t , -1, "Ellipse size", 2, 1, 9) gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) -exit(gen.generate(PACKAGE, "ball_detector_node", "detectorParams")) +exit(gen.generate(PACKAGE, "ball_detector_node", "DetectorParams")) From b14d9c5ad1d5c4ade055a6ba6685ad6f6d54a080 Mon Sep 17 00:00:00 2001 From: Pyo Date: Wed, 28 Mar 2018 20:18:19 +0900 Subject: [PATCH 053/172] Update ball_detector.h --- ball_detector/include/ball_detector/ball_detector.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ball_detector/include/ball_detector/ball_detector.h b/ball_detector/include/ball_detector/ball_detector.h index b246ff3..18cf79f 100644 --- a/ball_detector/include/ball_detector/ball_detector.h +++ b/ball_detector/include/ball_detector/ball_detector.h @@ -37,7 +37,7 @@ #include "ball_detector/circleSetStamped.h" #include "ball_detector/ball_detector_config.h" -#include "ball_detector/detectorParamsConfig.h" +#include "ball_detector/DetectorParamsConfig.h" #include "ball_detector/GetParameters.h" #include "ball_detector/SetParameters.h" @@ -71,7 +71,7 @@ class BallDetector //callbacks to camera info subscription void cameraInfoCallback(const sensor_msgs::CameraInfo & msg); - void dynParamCallback(ball_detector::detectorParamsConfig &config, uint32_t level); + void dynParamCallback(ball_detector::DetectorParamsConfig &config, uint32_t level); void enableCallback(const std_msgs::Bool::ConstPtr &msg); void paramCommandCallback(const std_msgs::String::ConstPtr &msg); @@ -154,8 +154,8 @@ class BallDetector cv::Mat in_image_; cv::Mat out_image_; - dynamic_reconfigure::Server param_server_; - dynamic_reconfigure::Server::CallbackType callback_fnc_; + dynamic_reconfigure::Server param_server_; + dynamic_reconfigure::Server::CallbackType callback_fnc_; }; } // namespace robotis_op From c7ad70b6a39ee98ba3156fa8e5f8c580edea3f17 Mon Sep 17 00:00:00 2001 From: Pyo Date: Wed, 28 Mar 2018 20:39:01 +0900 Subject: [PATCH 054/172] Update CMakeLists.txt --- ball_detector/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index d97925a..57f6e27 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -59,7 +59,7 @@ generate_messages( ################################################################################ # Declare ROS dynamic reconfigure parameters ################################################################################ -generate_dynamic_reconfigure_options(cfg/detector_params.cfg) +generate_dynamic_reconfigure_options(cfg/DetectorParams.cfg) ################################################################################ From 2122f8c493042fbaae8c36899bb686e083f6b5a8 Mon Sep 17 00:00:00 2001 From: Pyo Date: Wed, 28 Mar 2018 20:50:53 +0900 Subject: [PATCH 055/172] Update ball_detector.cpp --- ball_detector/src/ball_detector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index df4fe80..552c699 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -234,7 +234,7 @@ void BallDetector::imageCallback(const sensor_msgs::ImageConstPtr & msg) return; } -void BallDetector::dynParamCallback(ball_detector::detectorParamsConfig &config, uint32_t level) +void BallDetector::dynParamCallback(ball_detector::DetectorParamsConfig &config, uint32_t level) { params_config_.gaussian_blur_size = config.gaussian_blur_size; params_config_.gaussian_blur_sigma = config.gaussian_blur_sigma; From 04409995704db20e4cda5868bf4ffb842d8e063f Mon Sep 17 00:00:00 2001 From: Pyo Date: Fri, 30 Mar 2018 22:18:17 +0900 Subject: [PATCH 056/172] refacoring to release --- .travis.yml | 2 +- README.md | 34 ++++++ ball_detector/CMakeLists.txt | 64 +++++++--- ...params_blue.cfg => DetectorParamsBlue.cfg} | 2 +- ...r_params_red.cfg => DetectorParamsRed.cfg} | 2 +- .../ball_detector_params.yaml | 0 .../ball_detector_params_default.yaml | 0 .../ball_detector_params_op.yaml | 0 .../include/ball_detector/ball_detector.h | 27 +++-- ball_detector/launch/ball_detector.launch | 16 +-- .../launch/ball_detector_from_usb_cam.launch | 45 ++++---- .../launch/ball_detector_from_uvc.launch | 50 ++++---- ...cleSetStamped.msg => CircleSetStamped.msg} | 0 ball_detector/package.xml | 49 ++++---- .../{launch => rviz}/ball_detector.rviz | 0 ball_detector/src/ball_detector.cpp | 7 +- op3_demo/CMakeLists.txt | 109 +++++++++++------- .../mp3/Autonomous soccer mode.mp3 | Bin op3_demo/{Data => data}/mp3/Bye bye.mp3 | Bin op3_demo/{Data => data}/mp3/Clap please.mp3 | Bin .../mp3/Demonstration ready mode.mp3 | Bin op3_demo/{Data => data}/mp3/Headstand.mp3 | Bin .../mp3/Interactive motion mode.mp3 | Bin op3_demo/{Data => data}/mp3/Intro01.mp3 | Bin op3_demo/{Data => data}/mp3/Intro02.mp3 | Bin op3_demo/{Data => data}/mp3/Intro03.mp3 | Bin op3_demo/{Data => data}/mp3/Introduction.mp3 | Bin op3_demo/{Data => data}/mp3/Left kick.mp3 | Bin op3_demo/{Data => data}/mp3/No.mp3 | Bin op3_demo/{Data => data}/mp3/Oops.mp3 | Bin op3_demo/{Data => data}/mp3/Right kick.mp3 | Bin .../mp3/Sensor calibration complete.mp3 | Bin .../mp3/Sensor calibration fail.mp3 | Bin op3_demo/{Data => data}/mp3/Shoot.mp3 | Bin op3_demo/{Data => data}/mp3/Sit down.mp3 | Bin op3_demo/{Data => data}/mp3/Stand up.mp3 | Bin .../mp3/Start motion demonstration.mp3 | Bin .../mp3/Start soccer demonstration.mp3 | Bin .../Start vision processing demonstration.mp3 | Bin .../{Data => data}/mp3/System shutdown.mp3 | Bin op3_demo/{Data => data}/mp3/Thank you.mp3 | Bin .../mp3/Vision processing mode.mp3 | Bin op3_demo/{Data => data}/mp3/Wow.mp3 | Bin op3_demo/{Data => data}/mp3/Yes go.mp3 | Bin op3_demo/{Data => data}/mp3/Yes.mp3 | Bin op3_demo/{Data => data}/mp3/intro_test.mp3 | Bin .../mp3/test/Announce mic test.mp3 | Bin .../mp3/test/Button test mode.mp3 | Bin .../{Data => data}/mp3/test/Mic test mode.mp3 | Bin .../mp3/test/Mode button long pressed.mp3 | Bin .../mp3/test/Mode button pressed.mp3 | Bin .../mp3/test/Self test ready mode.mp3 | Bin .../mp3/test/Start button long pressed.mp3 | Bin .../mp3/test/Start button pressed.mp3 | Bin .../mp3/test/Start button test mode.mp3 | Bin .../mp3/test/Start mic test mode.mp3 | Bin .../{Data => data}/mp3/test/Start playing.mp3 | Bin .../mp3/test/Start recording.mp3 | Bin .../mp3/test/User button long pressed.mp3 | Bin .../mp3/test/User button pressed.mp3 | Bin op3_demo/include/op3_demo/action_demo.h | 6 +- op3_demo/include/op3_demo/ball_follower.h | 6 +- op3_demo/include/op3_demo/ball_tracker.h | 9 +- op3_demo/include/op3_demo/button_test.h | 4 +- op3_demo/include/op3_demo/face_tracker.h | 3 +- op3_demo/include/op3_demo/mic_test.h | 4 +- op3_demo/include/op3_demo/soccer_demo.h | 11 +- op3_demo/include/op3_demo/vision_demo.h | 9 +- op3_demo/launch/demo.launch | 2 - op3_demo/launch/face_detection_op3.launch | 20 ++-- op3_demo/launch/self_test.launch | 37 +++--- op3_demo/list/action_script.yaml | 23 ++++ .../{script => list}/action_script_bk.yaml | 20 ++-- op3_demo/package.xml | 50 ++++---- op3_demo/script/action_script.yaml | 23 ---- op3_demo/src/action/action_demo.cpp | 2 +- op3_demo/src/demo_node.cpp | 2 +- op3_demo/src/soccer/ball_tracker.cpp | 2 +- op3_demo/src/test/button_test.cpp | 2 +- op3_demo/src/test/mic_test.cpp | 4 +- op3_demo/src/test_node.cpp | 2 +- robotis_op3_demo/CMakeLists.txt | 2 +- robotis_op3_demo/package.xml | 23 ++-- 83 files changed, 382 insertions(+), 291 deletions(-) create mode 100644 README.md rename ball_detector/cfg/{detector_params_blue.cfg => DetectorParamsBlue.cfg} (96%) rename ball_detector/cfg/{detector_params_red.cfg => DetectorParamsRed.cfg} (96%) rename ball_detector/{launch => config}/ball_detector_params.yaml (100%) rename ball_detector/{launch => config}/ball_detector_params_default.yaml (100%) rename ball_detector/{launch => config}/ball_detector_params_op.yaml (100%) rename ball_detector/msg/{circleSetStamped.msg => CircleSetStamped.msg} (100%) rename ball_detector/{launch => rviz}/ball_detector.rviz (100%) rename op3_demo/{Data => data}/mp3/Autonomous soccer mode.mp3 (100%) rename op3_demo/{Data => data}/mp3/Bye bye.mp3 (100%) rename op3_demo/{Data => data}/mp3/Clap please.mp3 (100%) rename op3_demo/{Data => data}/mp3/Demonstration ready mode.mp3 (100%) rename op3_demo/{Data => data}/mp3/Headstand.mp3 (100%) rename op3_demo/{Data => data}/mp3/Interactive motion mode.mp3 (100%) rename op3_demo/{Data => data}/mp3/Intro01.mp3 (100%) rename op3_demo/{Data => data}/mp3/Intro02.mp3 (100%) rename op3_demo/{Data => data}/mp3/Intro03.mp3 (100%) rename op3_demo/{Data => data}/mp3/Introduction.mp3 (100%) rename op3_demo/{Data => data}/mp3/Left kick.mp3 (100%) rename op3_demo/{Data => data}/mp3/No.mp3 (100%) rename op3_demo/{Data => data}/mp3/Oops.mp3 (100%) rename op3_demo/{Data => data}/mp3/Right kick.mp3 (100%) rename op3_demo/{Data => data}/mp3/Sensor calibration complete.mp3 (100%) rename op3_demo/{Data => data}/mp3/Sensor calibration fail.mp3 (100%) rename op3_demo/{Data => data}/mp3/Shoot.mp3 (100%) rename op3_demo/{Data => data}/mp3/Sit down.mp3 (100%) rename op3_demo/{Data => data}/mp3/Stand up.mp3 (100%) rename op3_demo/{Data => data}/mp3/Start motion demonstration.mp3 (100%) rename op3_demo/{Data => data}/mp3/Start soccer demonstration.mp3 (100%) rename op3_demo/{Data => data}/mp3/Start vision processing demonstration.mp3 (100%) rename op3_demo/{Data => data}/mp3/System shutdown.mp3 (100%) rename op3_demo/{Data => data}/mp3/Thank you.mp3 (100%) rename op3_demo/{Data => data}/mp3/Vision processing mode.mp3 (100%) rename op3_demo/{Data => data}/mp3/Wow.mp3 (100%) rename op3_demo/{Data => data}/mp3/Yes go.mp3 (100%) rename op3_demo/{Data => data}/mp3/Yes.mp3 (100%) rename op3_demo/{Data => data}/mp3/intro_test.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Announce mic test.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Button test mode.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Mic test mode.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Mode button long pressed.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Mode button pressed.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Self test ready mode.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Start button long pressed.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Start button pressed.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Start button test mode.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Start mic test mode.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Start playing.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/Start recording.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/User button long pressed.mp3 (100%) rename op3_demo/{Data => data}/mp3/test/User button pressed.mp3 (100%) create mode 100644 op3_demo/list/action_script.yaml rename op3_demo/{script => list}/action_script_bk.yaml (72%) delete mode 100644 op3_demo/script/action_script.yaml diff --git a/.travis.yml b/.travis.yml index 07bc3c6..cbc9951 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ compiler: - gcc notifications: email: - on_success: always + on_success: change on_failure: always recipients: - pyo@robotis.com diff --git a/README.md b/README.md new file mode 100644 index 0000000..2387548 --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +## ROBOTIS OP3 + + +## ROS Packages for ROBOTIS OP3 Demo +|Version|Kinetic + Ubuntu Xenial|Melodic + Ubuntu Bionic| +|:---:|:---:|:---:| +|[![GitHub version](https://badge.fury.io/gh/ROBOTIS-GIT%2FROBOTIS-OP3-Demo.svg)](https://badge.fury.io/gh/ROBOTIS-GIT%2FROBOTIS-OP3-Demo)|[![Build Status](https://travis-ci.org/ROBOTIS-GIT/ROBOTIS-OP3-Demo.svg?branch=kinetic-devel)](https://travis-ci.org/ROBOTIS-GIT/ROBOTIS-OP3-Demo)|-| + +## ROBOTIS e-Manual for ROBOTIS OP3 +- [ROBOTIS e-Manual for ROBOTIS OP3](http://emanual.robotis.com/docs/en/platform/op3/introduction/) + +## Wiki for robotis_op3_demo Packages +- http://wiki.ros.org/robotis_op3_demo (metapackage) +- http://wiki.ros.org/ball_detector +- http://wiki.ros.org/op3_demo + +## Open Source related to ROBOTIS OP3 +- [robotis_op3](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3) +- [robotis_op3_msgs](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-msgs) +- [robotis_op3_common](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Common) +- [robotis_op3_tools](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Tools) +- [robotis_op3_demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) +- [robotis_framework](https://github.com/ROBOTIS-GIT/ROBOTIS-Framework) +- [robotis_controller_msgs](https://github.com/ROBOTIS-GIT/ROBOTIS-Framework-msgs) +- [robotis_utility](https://github.com/ROBOTIS-GIT/ROBOTIS-Utility) +- [robotis_math](https://github.com/ROBOTIS-GIT/ROBOTIS-Math) +- [dynamixel_sdk](https://github.com/ROBOTIS-GIT/DynamixelSDK) +- [OpenCR-Hardware](https://github.com/ROBOTIS-GIT/OpenCR-Hardware) +- [OpenCR](https://github.com/ROBOTIS-GIT/OpenCR) + +## Documents and Videos related to ROBOTIS OP3 +- [ROBOTIS e-Manual for ROBOTIS OP3](http://emanual.robotis.com/docs/en/platform/op3/introduction/) +- [ROBOTIS e-Manual for ROBOTIS Framework](http://emanual.robotis.com/docs/en/software/robotis_framework_packages/) +- [ROBOTIS e-Manual for Dynamixel SDK](http://emanual.robotis.com/docs/en/software/dynamixel/dynamixel_sdk/overview/) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index a79af76..647cfdd 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -1,30 +1,34 @@ ################################################################################ -# CMake +# Set minimum required version of cmake, project name and compile options ################################################################################ cmake_minimum_required(VERSION 2.8.3) project(ball_detector) ################################################################################ -# Packages +# Find catkin packages and libraries for catkin and system dependencies ################################################################################ find_package(catkin REQUIRED COMPONENTS - roslib - cv_bridge - geometry_msgs - image_transport roscpp - rospy + roslib std_msgs + sensor_msgs + geometry_msgs dynamic_reconfigure + cv_bridge + image_transport message_generation ) +################################################################################ +# Setup for python modules and scripts +################################################################################ + ################################################################################ # Declare ROS messages, services and actions ################################################################################ add_message_files( FILES - circleSetStamped.msg + CircleSetStamped.msg BallDetectorParams.msg ) @@ -36,21 +40,34 @@ add_service_files( generate_messages( DEPENDENCIES - geometry_msgs std_msgs + std_msgs + geometry_msgs ) ################################################################################ # Declare ROS dynamic reconfigure parameters ################################################################################ -generate_dynamic_reconfigure_options(cfg/detector_params.cfg) +generate_dynamic_reconfigure_options( + cfg/DetectorParams.cfg +) ################################################################################ -# Catkin specific configuration -################################################################################ +# Declare catkin specific configuration to be passed to dependent projects +################################################################################## catkin_package( INCLUDE_DIRS include - CATKIN_DEPENDS cv_bridge geometry_msgs image_transport roscpp rospy std_msgs dynamic_reconfigure + CATKIN_DEPENDS + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + message_runtime + DEPENDS Boost OpenCV ) ################################################################################ @@ -59,22 +76,39 @@ catkin_package( include_directories( include ${catkin_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ${OpenCV_INCLUDE_DIRS} + ${YAML_CPP_INCLUDE_DIRS} ) add_executable(ball_detector_node src/ball_detector.cpp - src/ball_detector_node.cpp) + src/ball_detector_node.cpp +) add_dependencies(ball_detector_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) target_link_libraries(ball_detector_node ${catkin_LIBRARIES} - yaml-cpp + ${Boost_LIBRARIES} + ${OpenCV_LIBRARIES} + ${YAML_CPP_LIBRARIES} ) ################################################################################ # Install ################################################################################ +install(TARGETS ball_detector_node + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) + +install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +) + +install(DIRECTORY config launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +) ################################################################################ # Test diff --git a/ball_detector/cfg/detector_params_blue.cfg b/ball_detector/cfg/DetectorParamsBlue.cfg similarity index 96% rename from ball_detector/cfg/detector_params_blue.cfg rename to ball_detector/cfg/DetectorParamsBlue.cfg index 2d61d6c..b9bd967 100755 --- a/ball_detector/cfg/detector_params_blue.cfg +++ b/ball_detector/cfg/DetectorParamsBlue.cfg @@ -30,4 +30,4 @@ gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) gen.add("ellipse_size",int_t , -1, "Ellipse size", 2, 1, 9) gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) -exit(gen.generate(PACKAGE, "ball_detector_node", "detectorParams")) +exit(gen.generate(PACKAGE, "ball_detector_node", "DetectorParamsBlue")) diff --git a/ball_detector/cfg/detector_params_red.cfg b/ball_detector/cfg/DetectorParamsRed.cfg similarity index 96% rename from ball_detector/cfg/detector_params_red.cfg rename to ball_detector/cfg/DetectorParamsRed.cfg index 4fa6a18..79d08a2 100755 --- a/ball_detector/cfg/detector_params_red.cfg +++ b/ball_detector/cfg/DetectorParamsRed.cfg @@ -30,4 +30,4 @@ gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) gen.add("ellipse_size",int_t , -1, "Ellipse size", 5, 1, 9) gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) -exit(gen.generate(PACKAGE, "ball_detector_node", "detectorParams")) +exit(gen.generate(PACKAGE, "ball_detector_node", "DetectorParamsRed")) diff --git a/ball_detector/launch/ball_detector_params.yaml b/ball_detector/config/ball_detector_params.yaml similarity index 100% rename from ball_detector/launch/ball_detector_params.yaml rename to ball_detector/config/ball_detector_params.yaml diff --git a/ball_detector/launch/ball_detector_params_default.yaml b/ball_detector/config/ball_detector_params_default.yaml similarity index 100% rename from ball_detector/launch/ball_detector_params_default.yaml rename to ball_detector/config/ball_detector_params_default.yaml diff --git a/ball_detector/launch/ball_detector_params_op.yaml b/ball_detector/config/ball_detector_params_op.yaml similarity index 100% rename from ball_detector/launch/ball_detector_params_op.yaml rename to ball_detector/config/ball_detector_params_op.yaml diff --git a/ball_detector/include/ball_detector/ball_detector.h b/ball_detector/include/ball_detector/ball_detector.h index b246ff3..96a9981 100644 --- a/ball_detector/include/ball_detector/ball_detector.h +++ b/ball_detector/include/ball_detector/ball_detector.h @@ -21,23 +21,26 @@ #include -#include -#include - -//ros dependencies #include #include #include #include -#include -#include #include #include #include +#include +#include + +#include +#include +#include +#include + +#include "ball_detector/DetectorParamsConfig.h" -#include "ball_detector/circleSetStamped.h" #include "ball_detector/ball_detector_config.h" -#include "ball_detector/detectorParamsConfig.h" + +#include "ball_detector/CircleSetStamped.h" #include "ball_detector/GetParameters.h" #include "ball_detector/SetParameters.h" @@ -71,7 +74,7 @@ class BallDetector //callbacks to camera info subscription void cameraInfoCallback(const sensor_msgs::CameraInfo & msg); - void dynParamCallback(ball_detector::detectorParamsConfig &config, uint32_t level); + void dynParamCallback(ball_detector::DetectorParamsConfig &config, uint32_t level); void enableCallback(const std_msgs::Bool::ConstPtr &msg); void paramCommandCallback(const std_msgs::String::ConstPtr &msg); @@ -112,7 +115,7 @@ class BallDetector int not_found_count_; //circle set publisher - ball_detector::circleSetStamped circles_msg_; + ball_detector::CircleSetStamped circles_msg_; ros::Publisher circles_pub_; //camera info subscriber @@ -154,8 +157,8 @@ class BallDetector cv::Mat in_image_; cv::Mat out_image_; - dynamic_reconfigure::Server param_server_; - dynamic_reconfigure::Server::CallbackType callback_fnc_; + dynamic_reconfigure::Server param_server_; + dynamic_reconfigure::Server::CallbackType callback_fnc_; }; } // namespace robotis_op diff --git a/ball_detector/launch/ball_detector.launch b/ball_detector/launch/ball_detector.launch index 05cc278..34a12ba 100644 --- a/ball_detector/launch/ball_detector.launch +++ b/ball_detector/launch/ball_detector.launch @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + diff --git a/ball_detector/launch/ball_detector_from_usb_cam.launch b/ball_detector/launch/ball_detector_from_usb_cam.launch index e84838b..44ecad5 100644 --- a/ball_detector/launch/ball_detector_from_usb_cam.launch +++ b/ball_detector/launch/ball_detector_from_usb_cam.launch @@ -1,28 +1,27 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/ball_detector/launch/ball_detector_from_uvc.launch b/ball_detector/launch/ball_detector_from_uvc.launch index 4ef7b43..5946129 100644 --- a/ball_detector/launch/ball_detector_from_uvc.launch +++ b/ball_detector/launch/ball_detector_from_uvc.launch @@ -1,30 +1,30 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/ball_detector/msg/circleSetStamped.msg b/ball_detector/msg/CircleSetStamped.msg similarity index 100% rename from ball_detector/msg/circleSetStamped.msg rename to ball_detector/msg/CircleSetStamped.msg diff --git a/ball_detector/package.xml b/ball_detector/package.xml index 79f988f..e383f47 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -1,33 +1,34 @@ - + ball_detector 0.1.0 - This package implements a circle-like shape detector of the input image. - It requires and input image and publish, at frame rate, a marked image - and a stamped array of circle centers and radius. + This package implements a circle-like shape detector of the input image. + It requires and input image and publish, at frame rate, a marked image + and a stamped array of circle centers and radius. - Apache License 2.0 - kayman + Apache 2.0 + Kayman Pyo - + http://wiki.ros.org/ball_detector + http://emanual.robotis.com/docs/en/platform/op3/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues catkin - roslib - cv_bridge - geometry_msgs - image_transport - roscpp - rospy - std_msgs - dynamic_reconfigure + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv + yaml-cpp message_generation - roslib - cv_bridge - geometry_msgs - image_transport - roscpp - rospy - std_msgs - dynamic_reconfigure - message_runtime + message_runtime + message_runtime + usb_cam + uvc_camera diff --git a/ball_detector/launch/ball_detector.rviz b/ball_detector/rviz/ball_detector.rviz similarity index 100% rename from ball_detector/launch/ball_detector.rviz rename to ball_detector/rviz/ball_detector.rviz diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index df4fe80..7dbba3c 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -16,7 +16,6 @@ /* Author: Kayman Jung */ -#include #include #include "ball_detector/ball_detector.h" @@ -72,7 +71,7 @@ BallDetector::BallDetector() //sets publishers image_pub_ = it_.advertise("image_out", 100); - circles_pub_ = nh_.advertise("circle_set", 100); + circles_pub_ = nh_.advertise("circle_set", 100); camera_info_pub_ = nh_.advertise("camera_info", 100); //sets subscribers @@ -92,7 +91,7 @@ BallDetector::BallDetector() param_command_sub_ = nh_.subscribe("param_command", 1, &BallDetector::paramCommandCallback, this); set_param_client_ = nh_.advertiseService("set_param", &BallDetector::setParamCallback, this); get_param_client_ = nh_.advertiseService("get_param", &BallDetector::getParamCallback, this); - default_setting_path_ = ros::package::getPath(ROS_PACKAGE_NAME) + "/launch/ball_detector_params_default.yaml"; + default_setting_path_ = ros::package::getPath(ROS_PACKAGE_NAME) + "/config/ball_detector_params_default.yaml"; //sets config and prints it params_config_ = detect_config; @@ -234,7 +233,7 @@ void BallDetector::imageCallback(const sensor_msgs::ImageConstPtr & msg) return; } -void BallDetector::dynParamCallback(ball_detector::detectorParamsConfig &config, uint32_t level) +void BallDetector::dynParamCallback(ball_detector::DetectorParamsConfig &config, uint32_t level) { params_config_.gaussian_blur_size = config.gaussian_blur_size; params_config_.gaussian_blur_sigma = config.gaussian_blur_sigma; diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index 4615615..1554f48 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -1,26 +1,51 @@ ################################################################################ -# CMake +# Set minimum required version of cmake, project name and compile options ################################################################################ cmake_minimum_required(VERSION 2.8.3) project(op3_demo) ################################################################################ -# Packages +# Find catkin packages and libraries for catkin and system dependencies ################################################################################ find_package(catkin REQUIRED COMPONENTS roscpp roslib + std_msgs sensor_msgs - ball_detector + geometry_msgs + robotis_controller_msgs op3_walking_module_msgs op3_action_module_msgs - robotis_controller_msgs cmake_modules robotis_math + ball_detector ) +find_package(Boost REQUIRED COMPONENTS thread) find_package(Eigen REQUIRED) +## Resolve system dependency on yaml-cpp, which apparently does not +## provide a CMake find_package() module. +## Insert your header file compatible specified path like '#include ' +find_package(PkgConfig REQUIRED) +pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) +find_path(YAML_CPP_INCLUDE_DIR + NAMES yaml_cpp.h + PATHS ${YAML_CPP_INCLUDE_DIRS} +) +find_library(YAML_CPP_LIBRARY + NAMES YAML_CPP + PATHS ${YAML_CPP_LIBRARY_DIRS} +) +link_directories(${YAML_CPP_LIBRARY_DIRS}) + +if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") +add_definitions(-DHAVE_NEW_YAMLCPP) +endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") + +################################################################################ +# Setup for python modules and scripts +################################################################################ ################################################################################ # Declare ROS messages, services and actions @@ -31,11 +56,23 @@ find_package(Eigen REQUIRED) ################################################################################ ################################################################################ -# Catkin specific configuration +# Declare catkin specific configuration to be passed to dependent projects ################################################################################ catkin_package( INCLUDE_DIRS include - CATKIN_DEPENDS roscpp sensor_msgs + CATKIN_DEPENDS + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + robotis_controller_msgs + op3_walking_module_msgs + op3_action_module_msgs + cmake_modules + robotis_math + ball_detector + DEPENDS Boost EIGEN3 ) ################################################################################ @@ -44,7 +81,9 @@ catkin_package( include_directories( include ${catkin_INCLUDE_DIRS} - ${Eigen_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ${EIGEN3_INCLUDE_DIRS} + ${YAML_CPP_INCLUDE_DIRS} ) add_executable(op_demo_node @@ -57,11 +96,16 @@ add_executable(op_demo_node src/vision/face_tracker.cpp ) -add_dependencies(op_demo_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +add_dependencies(op_demo_node + ${${PROJECT_NAME}_EXPORTED_TARGETS} + ${catkin_EXPORTED_TARGETS} +) target_link_libraries(op_demo_node ${catkin_LIBRARIES} - yaml-cpp + ${Boost_LIBRARIES} + ${Eigen3_LIBRARIES} + ${YAML_CPP_LIBRARIES} ) add_executable(self_test_node @@ -76,47 +120,32 @@ add_executable(self_test_node src/test/mic_test.cpp ) -add_dependencies(self_test_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +add_dependencies(self_test_node + ${${PROJECT_NAME}_EXPORTED_TARGETS} + ${catkin_EXPORTED_TARGETS} +) target_link_libraries(self_test_node ${catkin_LIBRARIES} - yaml-cpp + ${Boost_LIBRARIES} + ${Eigen3_LIBRARIES} + ${YAML_CPP_LIBRARIES} ) ################################################################################ # Install ################################################################################ +install(TARGETS op_demo_node self_test_node + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) -# all install targets should use catkin DESTINATION variables -# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html +install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +) -## Mark executable scripts (Python etc.) for installation -## in contrast to setup.py, you can choose the destination -# install(PROGRAMS -# scripts/my_python_script -# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) - -## Mark executables and/or libraries for installation -# install(TARGETS ball_tracking ball_tracking_node -# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) - -## Mark cpp header files for installation -# install(DIRECTORY include/${PROJECT_NAME}/ -# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} -# FILES_MATCHING PATTERN "*.h" -# PATTERN ".svn" EXCLUDE -# ) - -## Mark other files for installation (e.g. launch and bag files, etc.) -# install(FILES -# # myfile1 -# # myfile2 -# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} -# ) +install(DIRECTORY data launch list + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +) ################################################################################ # Test diff --git a/op3_demo/Data/mp3/Autonomous soccer mode.mp3 b/op3_demo/data/mp3/Autonomous soccer mode.mp3 similarity index 100% rename from op3_demo/Data/mp3/Autonomous soccer mode.mp3 rename to op3_demo/data/mp3/Autonomous soccer mode.mp3 diff --git a/op3_demo/Data/mp3/Bye bye.mp3 b/op3_demo/data/mp3/Bye bye.mp3 similarity index 100% rename from op3_demo/Data/mp3/Bye bye.mp3 rename to op3_demo/data/mp3/Bye bye.mp3 diff --git a/op3_demo/Data/mp3/Clap please.mp3 b/op3_demo/data/mp3/Clap please.mp3 similarity index 100% rename from op3_demo/Data/mp3/Clap please.mp3 rename to op3_demo/data/mp3/Clap please.mp3 diff --git a/op3_demo/Data/mp3/Demonstration ready mode.mp3 b/op3_demo/data/mp3/Demonstration ready mode.mp3 similarity index 100% rename from op3_demo/Data/mp3/Demonstration ready mode.mp3 rename to op3_demo/data/mp3/Demonstration ready mode.mp3 diff --git a/op3_demo/Data/mp3/Headstand.mp3 b/op3_demo/data/mp3/Headstand.mp3 similarity index 100% rename from op3_demo/Data/mp3/Headstand.mp3 rename to op3_demo/data/mp3/Headstand.mp3 diff --git a/op3_demo/Data/mp3/Interactive motion mode.mp3 b/op3_demo/data/mp3/Interactive motion mode.mp3 similarity index 100% rename from op3_demo/Data/mp3/Interactive motion mode.mp3 rename to op3_demo/data/mp3/Interactive motion mode.mp3 diff --git a/op3_demo/Data/mp3/Intro01.mp3 b/op3_demo/data/mp3/Intro01.mp3 similarity index 100% rename from op3_demo/Data/mp3/Intro01.mp3 rename to op3_demo/data/mp3/Intro01.mp3 diff --git a/op3_demo/Data/mp3/Intro02.mp3 b/op3_demo/data/mp3/Intro02.mp3 similarity index 100% rename from op3_demo/Data/mp3/Intro02.mp3 rename to op3_demo/data/mp3/Intro02.mp3 diff --git a/op3_demo/Data/mp3/Intro03.mp3 b/op3_demo/data/mp3/Intro03.mp3 similarity index 100% rename from op3_demo/Data/mp3/Intro03.mp3 rename to op3_demo/data/mp3/Intro03.mp3 diff --git a/op3_demo/Data/mp3/Introduction.mp3 b/op3_demo/data/mp3/Introduction.mp3 similarity index 100% rename from op3_demo/Data/mp3/Introduction.mp3 rename to op3_demo/data/mp3/Introduction.mp3 diff --git a/op3_demo/Data/mp3/Left kick.mp3 b/op3_demo/data/mp3/Left kick.mp3 similarity index 100% rename from op3_demo/Data/mp3/Left kick.mp3 rename to op3_demo/data/mp3/Left kick.mp3 diff --git a/op3_demo/Data/mp3/No.mp3 b/op3_demo/data/mp3/No.mp3 similarity index 100% rename from op3_demo/Data/mp3/No.mp3 rename to op3_demo/data/mp3/No.mp3 diff --git a/op3_demo/Data/mp3/Oops.mp3 b/op3_demo/data/mp3/Oops.mp3 similarity index 100% rename from op3_demo/Data/mp3/Oops.mp3 rename to op3_demo/data/mp3/Oops.mp3 diff --git a/op3_demo/Data/mp3/Right kick.mp3 b/op3_demo/data/mp3/Right kick.mp3 similarity index 100% rename from op3_demo/Data/mp3/Right kick.mp3 rename to op3_demo/data/mp3/Right kick.mp3 diff --git a/op3_demo/Data/mp3/Sensor calibration complete.mp3 b/op3_demo/data/mp3/Sensor calibration complete.mp3 similarity index 100% rename from op3_demo/Data/mp3/Sensor calibration complete.mp3 rename to op3_demo/data/mp3/Sensor calibration complete.mp3 diff --git a/op3_demo/Data/mp3/Sensor calibration fail.mp3 b/op3_demo/data/mp3/Sensor calibration fail.mp3 similarity index 100% rename from op3_demo/Data/mp3/Sensor calibration fail.mp3 rename to op3_demo/data/mp3/Sensor calibration fail.mp3 diff --git a/op3_demo/Data/mp3/Shoot.mp3 b/op3_demo/data/mp3/Shoot.mp3 similarity index 100% rename from op3_demo/Data/mp3/Shoot.mp3 rename to op3_demo/data/mp3/Shoot.mp3 diff --git a/op3_demo/Data/mp3/Sit down.mp3 b/op3_demo/data/mp3/Sit down.mp3 similarity index 100% rename from op3_demo/Data/mp3/Sit down.mp3 rename to op3_demo/data/mp3/Sit down.mp3 diff --git a/op3_demo/Data/mp3/Stand up.mp3 b/op3_demo/data/mp3/Stand up.mp3 similarity index 100% rename from op3_demo/Data/mp3/Stand up.mp3 rename to op3_demo/data/mp3/Stand up.mp3 diff --git a/op3_demo/Data/mp3/Start motion demonstration.mp3 b/op3_demo/data/mp3/Start motion demonstration.mp3 similarity index 100% rename from op3_demo/Data/mp3/Start motion demonstration.mp3 rename to op3_demo/data/mp3/Start motion demonstration.mp3 diff --git a/op3_demo/Data/mp3/Start soccer demonstration.mp3 b/op3_demo/data/mp3/Start soccer demonstration.mp3 similarity index 100% rename from op3_demo/Data/mp3/Start soccer demonstration.mp3 rename to op3_demo/data/mp3/Start soccer demonstration.mp3 diff --git a/op3_demo/Data/mp3/Start vision processing demonstration.mp3 b/op3_demo/data/mp3/Start vision processing demonstration.mp3 similarity index 100% rename from op3_demo/Data/mp3/Start vision processing demonstration.mp3 rename to op3_demo/data/mp3/Start vision processing demonstration.mp3 diff --git a/op3_demo/Data/mp3/System shutdown.mp3 b/op3_demo/data/mp3/System shutdown.mp3 similarity index 100% rename from op3_demo/Data/mp3/System shutdown.mp3 rename to op3_demo/data/mp3/System shutdown.mp3 diff --git a/op3_demo/Data/mp3/Thank you.mp3 b/op3_demo/data/mp3/Thank you.mp3 similarity index 100% rename from op3_demo/Data/mp3/Thank you.mp3 rename to op3_demo/data/mp3/Thank you.mp3 diff --git a/op3_demo/Data/mp3/Vision processing mode.mp3 b/op3_demo/data/mp3/Vision processing mode.mp3 similarity index 100% rename from op3_demo/Data/mp3/Vision processing mode.mp3 rename to op3_demo/data/mp3/Vision processing mode.mp3 diff --git a/op3_demo/Data/mp3/Wow.mp3 b/op3_demo/data/mp3/Wow.mp3 similarity index 100% rename from op3_demo/Data/mp3/Wow.mp3 rename to op3_demo/data/mp3/Wow.mp3 diff --git a/op3_demo/Data/mp3/Yes go.mp3 b/op3_demo/data/mp3/Yes go.mp3 similarity index 100% rename from op3_demo/Data/mp3/Yes go.mp3 rename to op3_demo/data/mp3/Yes go.mp3 diff --git a/op3_demo/Data/mp3/Yes.mp3 b/op3_demo/data/mp3/Yes.mp3 similarity index 100% rename from op3_demo/Data/mp3/Yes.mp3 rename to op3_demo/data/mp3/Yes.mp3 diff --git a/op3_demo/Data/mp3/intro_test.mp3 b/op3_demo/data/mp3/intro_test.mp3 similarity index 100% rename from op3_demo/Data/mp3/intro_test.mp3 rename to op3_demo/data/mp3/intro_test.mp3 diff --git a/op3_demo/Data/mp3/test/Announce mic test.mp3 b/op3_demo/data/mp3/test/Announce mic test.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Announce mic test.mp3 rename to op3_demo/data/mp3/test/Announce mic test.mp3 diff --git a/op3_demo/Data/mp3/test/Button test mode.mp3 b/op3_demo/data/mp3/test/Button test mode.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Button test mode.mp3 rename to op3_demo/data/mp3/test/Button test mode.mp3 diff --git a/op3_demo/Data/mp3/test/Mic test mode.mp3 b/op3_demo/data/mp3/test/Mic test mode.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Mic test mode.mp3 rename to op3_demo/data/mp3/test/Mic test mode.mp3 diff --git a/op3_demo/Data/mp3/test/Mode button long pressed.mp3 b/op3_demo/data/mp3/test/Mode button long pressed.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Mode button long pressed.mp3 rename to op3_demo/data/mp3/test/Mode button long pressed.mp3 diff --git a/op3_demo/Data/mp3/test/Mode button pressed.mp3 b/op3_demo/data/mp3/test/Mode button pressed.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Mode button pressed.mp3 rename to op3_demo/data/mp3/test/Mode button pressed.mp3 diff --git a/op3_demo/Data/mp3/test/Self test ready mode.mp3 b/op3_demo/data/mp3/test/Self test ready mode.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Self test ready mode.mp3 rename to op3_demo/data/mp3/test/Self test ready mode.mp3 diff --git a/op3_demo/Data/mp3/test/Start button long pressed.mp3 b/op3_demo/data/mp3/test/Start button long pressed.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Start button long pressed.mp3 rename to op3_demo/data/mp3/test/Start button long pressed.mp3 diff --git a/op3_demo/Data/mp3/test/Start button pressed.mp3 b/op3_demo/data/mp3/test/Start button pressed.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Start button pressed.mp3 rename to op3_demo/data/mp3/test/Start button pressed.mp3 diff --git a/op3_demo/Data/mp3/test/Start button test mode.mp3 b/op3_demo/data/mp3/test/Start button test mode.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Start button test mode.mp3 rename to op3_demo/data/mp3/test/Start button test mode.mp3 diff --git a/op3_demo/Data/mp3/test/Start mic test mode.mp3 b/op3_demo/data/mp3/test/Start mic test mode.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Start mic test mode.mp3 rename to op3_demo/data/mp3/test/Start mic test mode.mp3 diff --git a/op3_demo/Data/mp3/test/Start playing.mp3 b/op3_demo/data/mp3/test/Start playing.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Start playing.mp3 rename to op3_demo/data/mp3/test/Start playing.mp3 diff --git a/op3_demo/Data/mp3/test/Start recording.mp3 b/op3_demo/data/mp3/test/Start recording.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/Start recording.mp3 rename to op3_demo/data/mp3/test/Start recording.mp3 diff --git a/op3_demo/Data/mp3/test/User button long pressed.mp3 b/op3_demo/data/mp3/test/User button long pressed.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/User button long pressed.mp3 rename to op3_demo/data/mp3/test/User button long pressed.mp3 diff --git a/op3_demo/Data/mp3/test/User button pressed.mp3 b/op3_demo/data/mp3/test/User button pressed.mp3 similarity index 100% rename from op3_demo/Data/mp3/test/User button pressed.mp3 rename to op3_demo/data/mp3/test/User button pressed.mp3 diff --git a/op3_demo/include/op3_demo/action_demo.h b/op3_demo/include/op3_demo/action_demo.h index 32a9435..4231406 100644 --- a/op3_demo/include/op3_demo/action_demo.h +++ b/op3_demo/include/op3_demo/action_demo.h @@ -19,14 +19,14 @@ #ifndef ACTION_DEMO_H_ #define ACTION_DEMO_H_ -#include -#include - #include #include #include #include +#include +#include + #include "op3_demo/op_demo.h" #include "robotis_controller_msgs/JointCtrlModule.h" #include "robotis_controller_msgs/SetModule.h" diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 9e12ffc..7ec1d46 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -20,16 +20,16 @@ #define BALL_FOLLOWER_H_ #include -#include - #include #include #include #include #include +#include +#include #include "robotis_controller_msgs/JointCtrlModule.h" -#include "ball_detector/circleSetStamped.h" +#include "ball_detector/CircleSetStamped.h" #include "op3_walking_module_msgs/WalkingParam.h" #include "op3_walking_module_msgs/GetWalkingParam.h" diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/op3_demo/include/op3_demo/ball_tracker.h index 0d3cfac..5461494 100644 --- a/op3_demo/include/op3_demo/ball_tracker.h +++ b/op3_demo/include/op3_demo/ball_tracker.h @@ -20,17 +20,16 @@ #define BALL_TRACKING_H_ #include -#include - #include #include #include #include -//#include #include +#include +#include #include "robotis_controller_msgs/JointCtrlModule.h" -#include "ball_detector/circleSetStamped.h" +#include "ball_detector/CircleSetStamped.h" #include "op3_walking_module_msgs/WalkingParam.h" #include "op3_walking_module_msgs/GetWalkingParam.h" @@ -80,7 +79,7 @@ protected: const int WAITING_THRESHOLD; const bool DEBUG_PRINT; - void ballPositionCallback(const ball_detector::circleSetStamped::ConstPtr &msg); + void ballPositionCallback(const ball_detector::CircleSetStamped::ConstPtr &msg); void ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); void publishHeadJoint(double pan, double tilt); void scanBall(); diff --git a/op3_demo/include/op3_demo/button_test.h b/op3_demo/include/op3_demo/button_test.h index 127c978..84e8bee 100644 --- a/op3_demo/include/op3_demo/button_test.h +++ b/op3_demo/include/op3_demo/button_test.h @@ -19,14 +19,12 @@ #ifndef BUTTON_TEST_H_ #define BUTTON_TEST_H_ -#include - #include #include #include +#include #include "op3_demo/op_demo.h" - #include "robotis_controller_msgs/SyncWriteItem.h" namespace robotis_op diff --git a/op3_demo/include/op3_demo/face_tracker.h b/op3_demo/include/op3_demo/face_tracker.h index 0671b24..3289375 100644 --- a/op3_demo/include/op3_demo/face_tracker.h +++ b/op3_demo/include/op3_demo/face_tracker.h @@ -20,8 +20,6 @@ #define FACE_TRACKING_H_ #include -#include - #include #include #include @@ -29,6 +27,7 @@ #include #include #include +#include namespace robotis_op { diff --git a/op3_demo/include/op3_demo/mic_test.h b/op3_demo/include/op3_demo/mic_test.h index 7cd025a..144fe96 100644 --- a/op3_demo/include/op3_demo/mic_test.h +++ b/op3_demo/include/op3_demo/mic_test.h @@ -20,14 +20,12 @@ #define MIC_TEST_H_ #include -#include - #include #include #include +#include #include "op3_demo/op_demo.h" - #include "robotis_controller_msgs/SyncWriteItem.h" namespace robotis_op diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index f65d81b..a771eda 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -23,15 +23,18 @@ #include #include #include +#include +#include + +#include "op3_action_module_msgs/IsRunning.h" +#include "robotis_controller_msgs/SyncWriteItem.h" +#include "robotis_controller_msgs/JointCtrlModule.h" +#include "robotis_controller_msgs/SetJointModule.h" #include "op3_demo/op_demo.h" #include "op3_demo/ball_tracker.h" #include "op3_demo/ball_follower.h" #include "robotis_math/robotis_linear_algebra.h" -#include "op3_action_module_msgs/IsRunning.h" -#include "robotis_controller_msgs/SyncWriteItem.h" -#include "robotis_controller_msgs/JointCtrlModule.h" -#include "robotis_controller_msgs/SetJointModule.h" namespace robotis_op { diff --git a/op3_demo/include/op3_demo/vision_demo.h b/op3_demo/include/op3_demo/vision_demo.h index 3ebdc46..20cd1ad 100644 --- a/op3_demo/include/op3_demo/vision_demo.h +++ b/op3_demo/include/op3_demo/vision_demo.h @@ -19,19 +19,18 @@ #ifndef VISION_DEMO_H_ #define VISION_DEMO_H_ -#include - #include #include #include #include - -#include "op3_demo/op_demo.h" -#include "op3_demo/face_tracker.h" +#include #include "robotis_controller_msgs/SyncWriteItem.h" #include "robotis_controller_msgs/SetModule.h" +#include "op3_demo/op_demo.h" +#include "op3_demo/face_tracker.h" + namespace robotis_op { diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index aa5098b..2b5281c 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -1,7 +1,5 @@ - - diff --git a/op3_demo/launch/face_detection_op3.launch b/op3_demo/launch/face_detection_op3.launch index afc5f12..d42ab41 100644 --- a/op3_demo/launch/face_detection_op3.launch +++ b/op3_demo/launch/face_detection_op3.launch @@ -7,16 +7,16 @@ - - - - + args="$(arg face_cascade_name_0) + $(arg face_cascade_name_1) + $(arg face_cascade_name_2) + $(arg face_cascade_name_3) + $(arg face_cascade_name_4)" + output="screen"> + + + + diff --git a/op3_demo/launch/self_test.launch b/op3_demo/launch/self_test.launch index c5ca857..623004e 100644 --- a/op3_demo/launch/self_test.launch +++ b/op3_demo/launch/self_test.launch @@ -1,30 +1,29 @@ + + - - - - - + + - - + + - - + + - - + + - - + + - - - - - - + + + + + + diff --git a/op3_demo/list/action_script.yaml b/op3_demo/list/action_script.yaml new file mode 100644 index 0000000..21ce72b --- /dev/null +++ b/op3_demo/list/action_script.yaml @@ -0,0 +1,23 @@ +# combination action page number and mp3 file path +action_and_sound: + 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Thank you.mp3" + 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Introduction.mp3" + 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Wow.mp3" + 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Yes go.mp3" + 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Sit down.mp3" + 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Stand up.mp3" + 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Clap please.mp3" + 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" + 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Bye bye.mp3" +# 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" + 110 : "" + 111 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Intro01.mp3" + 115 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Intro02.mp3" + 118 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Intro03.mp3" + +# play list +prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] +default: [4, 110, 111, 115, 118, 24, 54, 27, 38] + +# example of play list +#certification: [101] \ No newline at end of file diff --git a/op3_demo/script/action_script_bk.yaml b/op3_demo/list/action_script_bk.yaml similarity index 72% rename from op3_demo/script/action_script_bk.yaml rename to op3_demo/list/action_script_bk.yaml index a18155d..bc401fb 100644 --- a/op3_demo/script/action_script_bk.yaml +++ b/op3_demo/list/action_script_bk.yaml @@ -1,15 +1,15 @@ # combination action page number and mp3 file path action_and_sound: - 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Thank you.mp3" - 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Introduction.mp3" - 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Wow.mp3" - 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Yes go.mp3" - 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Sit down.mp3" - 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Stand up.mp3" - 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Clap please.mp3" - 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" - 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Bye bye.mp3" - 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" + 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Thank you.mp3" + 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Introduction.mp3" + 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Wow.mp3" + 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Yes go.mp3" + 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Sit down.mp3" + 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Stand up.mp3" + 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Clap please.mp3" + 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" + 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Bye bye.mp3" + 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" # play list default: [4, 41, 24, 23, 15, 1, 54, 27, 38] diff --git a/op3_demo/package.xml b/op3_demo/package.xml index 68baa53..85bd36e 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -1,32 +1,36 @@ - + op3_demo 0.1.0 - op3 default demo + OP3 default demo It includes three demontrations(soccer demo, vision demo, action script demo) - Apache License 2.0 - kayman + Apache 2.0 + Kayman Pyo - + http://wiki.ros.org/op3_demo + http://emanual.robotis.com/docs/en/platform/op3/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues catkin - roscpp - roslib - sensor_msgs - ball_detector - robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs - cmake_modules - robotis_math - roscpp - roslib - sensor_msgs - ball_detector - robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs - cmake_modules - robotis_math + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + robotis_controller_msgs + op3_walking_module_msgs + op3_action_module_msgs + cmake_modules + robotis_math + ball_detector + boost + eigen + yaml-cpp + op3_manager + op3_camera_setting_tool + op3_web_setting_tool + ros_madplay_player + diff --git a/op3_demo/script/action_script.yaml b/op3_demo/script/action_script.yaml deleted file mode 100644 index 077e820..0000000 --- a/op3_demo/script/action_script.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# combination action page number and mp3 file path -action_and_sound: - 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Thank you.mp3" - 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Introduction.mp3" - 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Wow.mp3" - 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Yes go.mp3" - 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Sit down.mp3" - 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Stand up.mp3" - 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Clap please.mp3" - 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" - 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Bye bye.mp3" -# 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" - 110 : "" - 111 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro01.mp3" - 115 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro02.mp3" - 118 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro03.mp3" - -# play list -prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] -default: [4, 110, 111, 115, 118, 24, 54, 27, 38] - -# example of play list -#certification: [101] \ No newline at end of file diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index 4f14679..660390c 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -31,7 +31,7 @@ ActionDemo::ActionDemo() ros::NodeHandle nh(ros::this_node::getName()); - std::string default_path = ros::package::getPath("op3_demo") + "/script/action_script.yaml"; + std::string default_path = ros::package::getPath("op3_demo") + "/list/action_script.yaml"; script_path_ = nh.param("action_script", default_path); std::string default_play_list = "default"; diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp index 8039aff..300a90b 100644 --- a/op3_demo/src/demo_node.cpp +++ b/op3_demo/src/demo_node.cpp @@ -77,7 +77,7 @@ int main(int argc, char **argv) ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); - default_mp3_path = ros::package::getPath("op3_demo") + "/Data/mp3/"; + default_mp3_path = ros::package::getPath("op3_demo") + "/data/mp3/"; ros::start(); diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp index cbd4e87..355a21c 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -59,7 +59,7 @@ BallTracker::~BallTracker() } -void BallTracker::ballPositionCallback(const ball_detector::circleSetStamped::ConstPtr &msg) +void BallTracker::ballPositionCallback(const ball_detector::CircleSetStamped::ConstPtr &msg) { for (int idx = 0; idx < msg->circles.size(); idx++) { diff --git a/op3_demo/src/test/button_test.cpp b/op3_demo/src/test/button_test.cpp index 415d182..7a78c6a 100644 --- a/op3_demo/src/test/button_test.cpp +++ b/op3_demo/src/test/button_test.cpp @@ -33,7 +33,7 @@ ButtonTest::ButtonTest() boost::thread queue_thread = boost::thread(boost::bind(&ButtonTest::callbackThread, this)); boost::thread process_thread = boost::thread(boost::bind(&ButtonTest::processThread, this)); - default_mp3_path_ = ros::package::getPath("op3_demo") + "/Data/mp3/test/"; + default_mp3_path_ = ros::package::getPath("op3_demo") + "/data/mp3/test/"; } ButtonTest::~ButtonTest() diff --git a/op3_demo/src/test/mic_test.cpp b/op3_demo/src/test/mic_test.cpp index e1f6757..4e56954 100644 --- a/op3_demo/src/test/mic_test.cpp +++ b/op3_demo/src/test/mic_test.cpp @@ -36,8 +36,8 @@ MicTest::MicTest() boost::thread queue_thread = boost::thread(boost::bind(&MicTest::callbackThread, this)); boost::thread process_thread = boost::thread(boost::bind(&MicTest::processThread, this)); - recording_file_name_ = ros::package::getPath("op3_demo") + "/Data/mp3/test/mic-test.wav"; - default_mp3_path_ = ros::package::getPath("op3_demo") + "/Data/mp3/test/"; + recording_file_name_ = ros::package::getPath("op3_demo") + "/data/mp3/test/mic-test.wav"; + default_mp3_path_ = ros::package::getPath("op3_demo") + "/data/mp3/test/"; start_time_ = ros::Time::now(); } diff --git a/op3_demo/src/test_node.cpp b/op3_demo/src/test_node.cpp index 259ea96..8d4768d 100644 --- a/op3_demo/src/test_node.cpp +++ b/op3_demo/src/test_node.cpp @@ -84,7 +84,7 @@ int main(int argc, char **argv) ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); - default_mp3_path = ros::package::getPath("op3_demo") + "/Data/mp3/"; + default_mp3_path = ros::package::getPath("op3_demo") + "/data/mp3/"; ros::start(); diff --git a/robotis_op3_demo/CMakeLists.txt b/robotis_op3_demo/CMakeLists.txt index d88f653..b7e8eeb 100644 --- a/robotis_op3_demo/CMakeLists.txt +++ b/robotis_op3_demo/CMakeLists.txt @@ -1,4 +1,4 @@ cmake_minimum_required(VERSION 2.8.3) project(robotis_op3_demo) find_package(catkin REQUIRED) -catkin_metapackage() \ No newline at end of file +catkin_metapackage() diff --git a/robotis_op3_demo/package.xml b/robotis_op3_demo/package.xml index bba5f7c..7cf0810 100644 --- a/robotis_op3_demo/package.xml +++ b/robotis_op3_demo/package.xml @@ -1,24 +1,19 @@ - + robotis_op3_demo 0.1.0 ROS packages for the robotis_op3_demo (meta package) - - Apache License 2.0 + Apache 2.0 Kayman Pyo - - - - - + http://wiki.ros.org/robotis_op3_demo + http://emanual.robotis.com/docs/en/platform/op3/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues catkin - ball_detector - op3_demo - - - - + ball_detector + op3_demo + From afddde32825168337222375dadffcec2a04cf410 Mon Sep 17 00:00:00 2001 From: Pyo Date: Fri, 30 Mar 2018 22:22:47 +0900 Subject: [PATCH 057/172] refacoring to release --- ball_detector/CMakeLists.txt | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index 647cfdd..052a5ca 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -19,6 +19,28 @@ find_package(catkin REQUIRED COMPONENTS message_generation ) +find_package(Boost REQUIRED COMPONENTS thread) +find_package(OpenCV REQUIRED) + +## Resolve system dependency on yaml-cpp, which apparently does not +## provide a CMake find_package() module. +## Insert your header file compatible specified path like '#include ' +find_package(PkgConfig REQUIRED) +pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) +find_path(YAML_CPP_INCLUDE_DIR + NAMES yaml_cpp.h + PATHS ${YAML_CPP_INCLUDE_DIRS} +) +find_library(YAML_CPP_LIBRARY + NAMES YAML_CPP + PATHS ${YAML_CPP_LIBRARY_DIRS} +) +link_directories(${YAML_CPP_LIBRARY_DIRS}) + +if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") +add_definitions(-DHAVE_NEW_YAMLCPP) +endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") + ################################################################################ # Setup for python modules and scripts ################################################################################ From e4da8aa4a47fda6c1e569518fe9d214c7967440e Mon Sep 17 00:00:00 2001 From: Pyo Date: Fri, 30 Mar 2018 22:51:01 +0900 Subject: [PATCH 058/172] refacoring to release --- .robotis_op3_demo.rosinstall | 1 + .travis.yml | 3 ++- ball_detector/CMakeLists.txt | 2 +- ball_detector/package.xml | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 .robotis_op3_demo.rosinstall diff --git a/.robotis_op3_demo.rosinstall b/.robotis_op3_demo.rosinstall new file mode 100644 index 0000000..96ed216 --- /dev/null +++ b/.robotis_op3_demo.rosinstall @@ -0,0 +1 @@ +- git: {local-name: robotis_op3_tools, uri: 'https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Tools.git', version: master} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index cbc9951..9316a80 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,8 +18,9 @@ notifications: - pyo@robotis.com env: matrix: - - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian +# - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian # - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=debian OS_CODE_NAME=jessie + - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file $ROSINSTALL_FILENAME=".robotis_op3_demo.rosinstall" branches: only: - master diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index 052a5ca..d2acc5e 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -20,7 +20,7 @@ find_package(catkin REQUIRED COMPONENTS ) find_package(Boost REQUIRED COMPONENTS thread) -find_package(OpenCV REQUIRED) +find_package(OpenCV 3 REQUIRED) ## Resolve system dependency on yaml-cpp, which apparently does not ## provide a CMake find_package() module. diff --git a/ball_detector/package.xml b/ball_detector/package.xml index e383f47..52570a8 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -24,7 +24,7 @@ cv_bridge image_transport boost - opencv + opencv3 yaml-cpp message_generation message_runtime From 0b0581d29784de2fb16a3b1a4afa31a1c60ccbe9 Mon Sep 17 00:00:00 2001 From: Pyo Date: Fri, 30 Mar 2018 23:01:08 +0900 Subject: [PATCH 059/172] -added rosinstall for footstep_planner package --- .robotis_op3_demo.rosinstall | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.robotis_op3_demo.rosinstall b/.robotis_op3_demo.rosinstall index 96ed216..146fa30 100644 --- a/.robotis_op3_demo.rosinstall +++ b/.robotis_op3_demo.rosinstall @@ -1 +1,2 @@ -- git: {local-name: robotis_op3_tools, uri: 'https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Tools.git', version: master} \ No newline at end of file +- git: {local-name: robotis_op3_tools, uri: 'https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Tools.git', version: master} +- git: {local-name: humanoid_navigation, uri: 'https://github.com/ROBOTIS-GIT/humanoid_navigation.git', version: master} \ No newline at end of file From 21980c5f396fe0410dc61171f4d8b40951cd8246 Mon Sep 17 00:00:00 2001 From: Pyo Date: Fri, 30 Mar 2018 23:31:48 +0900 Subject: [PATCH 060/172] updated the CHANGELOG and version to release binary packages --- ball_detector/CHANGELOG.rst | 12 ++++++++++++ ball_detector/package.xml | 1 + op3_demo/CHANGELOG.rst | 12 ++++++++++++ op3_demo/CMakeLists.txt | 2 +- robotis_op3_demo/CHANGELOG.rst | 12 ++++++++++++ 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 ball_detector/CHANGELOG.rst create mode 100644 op3_demo/CHANGELOG.rst create mode 100644 robotis_op3_demo/CHANGELOG.rst diff --git a/ball_detector/CHANGELOG.rst b/ball_detector/CHANGELOG.rst new file mode 100644 index 0000000..5d3764c --- /dev/null +++ b/ball_detector/CHANGELOG.rst @@ -0,0 +1,12 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package ball_detector +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.1.0 (2018-03-30) +------------------ +* first release +* added launch files in order to move the camera setting to op3_camera_setting package +* added missing package in find_package() +* refacoring to release +* splited repositoryfrom ROBOTIS-OP3 +* Contributors: Kayman, Zerom, Pyo diff --git a/ball_detector/package.xml b/ball_detector/package.xml index 52570a8..2f2acf3 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -9,6 +9,7 @@ Apache 2.0 Kayman + Zerom Pyo http://wiki.ros.org/ball_detector http://emanual.robotis.com/docs/en/platform/op3/introduction/ diff --git a/op3_demo/CHANGELOG.rst b/op3_demo/CHANGELOG.rst new file mode 100644 index 0000000..62ead4d --- /dev/null +++ b/op3_demo/CHANGELOG.rst @@ -0,0 +1,12 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package op3_demo +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.1.0 (2018-03-30) +------------------ +* first release +* added launch files in order to move the camera setting to op3_camera_setting package +* added missing package in find_package() +* refacoring to release +* splited repositoryfrom ROBOTIS-OP3 +* Contributors: Kayman, Yoshimaru Tanaka, Pyo diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index 1554f48..42445a0 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -22,7 +22,7 @@ find_package(catkin REQUIRED COMPONENTS ) find_package(Boost REQUIRED COMPONENTS thread) -find_package(Eigen REQUIRED) +find_package(Eigen3 REQUIRED) ## Resolve system dependency on yaml-cpp, which apparently does not ## provide a CMake find_package() module. diff --git a/robotis_op3_demo/CHANGELOG.rst b/robotis_op3_demo/CHANGELOG.rst new file mode 100644 index 0000000..b65724b --- /dev/null +++ b/robotis_op3_demo/CHANGELOG.rst @@ -0,0 +1,12 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package robotis_op3_demo +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.1.0 (2018-03-30) +------------------ +* first release +* added launch files in order to move the camera setting to op3_camera_setting package +* added missing package in find_package() +* refacoring to release +* splited repositoryfrom ROBOTIS-OP3 +* Contributors: Kayman, Zerom, Yoshimaru Tanaka, Pyo From 014a28cd8f1118d94c153343a93c0878fe39cc84 Mon Sep 17 00:00:00 2001 From: Pyo Date: Mon, 2 Apr 2018 08:25:00 +0900 Subject: [PATCH 061/172] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2387548..51875b9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## ROBOTIS OP3 +# ROBOTIS OP3 ## ROS Packages for ROBOTIS OP3 Demo From 66f3b91ce95ea77910bd0b41b8d8158e87e51377 Mon Sep 17 00:00:00 2001 From: Kayman Date: Mon, 16 Apr 2018 17:47:15 +0900 Subject: [PATCH 062/172] merged with master added op3_bringup package --- .robotis_op3_demo.rosinstall | 2 + .travis.yml | 5 +- README.md | 34 ++ ball_detector/CHANGELOG.rst | 12 + ball_detector/CMakeLists.txt | 69 +++- ...params_blue.cfg => DetectorParamsBlue.cfg} | 2 +- ...r_params_red.cfg => DetectorParamsRed.cfg} | 2 +- .../ball_detector_params.yaml | 0 .../ball_detector_params_default.yaml | 0 .../ball_detector_params_op.yaml | 0 .../include/ball_detector/ball_detector.h | 21 +- ball_detector/launch/ball_detector.launch | 16 +- .../launch/ball_detector_from_usb_cam.launch | 45 ++- .../launch/ball_detector_from_uvc.launch | 50 +-- ball_detector/package.xml | 37 +- .../{launch => rviz}/ball_detector.rviz | 0 ball_detector/src/ball_detector.cpp | 5 +- op3_bringup/CMakeLists.txt | 195 ++++++++++ op3_bringup/launch/op3_bringup.launch | 15 + .../launch/op3_bringup_visualization.launch | 18 + op3_bringup/package.xml | 59 +++ op3_bringup/rviz/op3_bringup.rviz | 348 ++++++++++++++++++ op3_demo/CHANGELOG.rst | 12 + op3_demo/CMakeLists.txt | 89 +++-- op3_demo/include/op3_demo/action_demo.h | 6 +- op3_demo/include/op3_demo/ball_follower.h | 6 +- op3_demo/include/op3_demo/ball_tracker.h | 9 +- op3_demo/include/op3_demo/button_test.h | 4 +- op3_demo/include/op3_demo/face_tracker.h | 3 +- op3_demo/include/op3_demo/mic_test.h | 4 +- op3_demo/include/op3_demo/soccer_demo.h | 11 +- op3_demo/include/op3_demo/vision_demo.h | 9 +- op3_demo/launch/demo.launch | 2 - op3_demo/launch/face_detection_op3.launch | 20 +- op3_demo/launch/self_test.launch | 37 +- op3_demo/list/action_script.yaml | 23 ++ .../{script => list}/action_script_bk.yaml | 20 +- op3_demo/package.xml | 23 +- op3_demo/script/action_script.yaml | 23 -- op3_demo/src/action/action_demo.cpp | 2 +- op3_demo/src/demo_node.cpp | 2 +- op3_demo/src/soccer/ball_tracker.cpp | 2 +- op3_demo/src/test/button_test.cpp | 2 +- op3_demo/src/test/mic_test.cpp | 4 +- op3_demo/src/test_node.cpp | 2 +- robotis_op3_demo/CHANGELOG.rst | 12 + robotis_op3_demo/CMakeLists.txt | 2 +- robotis_op3_demo/package.xml | 23 +- 48 files changed, 1024 insertions(+), 263 deletions(-) create mode 100644 .robotis_op3_demo.rosinstall create mode 100644 README.md create mode 100644 ball_detector/CHANGELOG.rst rename ball_detector/cfg/{detector_params_blue.cfg => DetectorParamsBlue.cfg} (96%) mode change 100755 => 100644 rename ball_detector/cfg/{detector_params_red.cfg => DetectorParamsRed.cfg} (96%) mode change 100755 => 100644 rename ball_detector/{launch => config}/ball_detector_params.yaml (100%) rename ball_detector/{launch => config}/ball_detector_params_default.yaml (100%) rename ball_detector/{launch => config}/ball_detector_params_op.yaml (100%) rename ball_detector/{launch => rviz}/ball_detector.rviz (100%) create mode 100644 op3_bringup/CMakeLists.txt create mode 100644 op3_bringup/launch/op3_bringup.launch create mode 100644 op3_bringup/launch/op3_bringup_visualization.launch create mode 100644 op3_bringup/package.xml create mode 100644 op3_bringup/rviz/op3_bringup.rviz create mode 100644 op3_demo/CHANGELOG.rst create mode 100644 op3_demo/list/action_script.yaml rename op3_demo/{script => list}/action_script_bk.yaml (72%) delete mode 100644 op3_demo/script/action_script.yaml create mode 100644 robotis_op3_demo/CHANGELOG.rst diff --git a/.robotis_op3_demo.rosinstall b/.robotis_op3_demo.rosinstall new file mode 100644 index 0000000..146fa30 --- /dev/null +++ b/.robotis_op3_demo.rosinstall @@ -0,0 +1,2 @@ +- git: {local-name: robotis_op3_tools, uri: 'https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Tools.git', version: master} +- git: {local-name: humanoid_navigation, uri: 'https://github.com/ROBOTIS-GIT/humanoid_navigation.git', version: master} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 07bc3c6..9316a80 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,14 +12,15 @@ compiler: - gcc notifications: email: - on_success: always + on_success: change on_failure: always recipients: - pyo@robotis.com env: matrix: - - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian +# - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian # - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=debian OS_CODE_NAME=jessie + - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file $ROSINSTALL_FILENAME=".robotis_op3_demo.rosinstall" branches: only: - master diff --git a/README.md b/README.md new file mode 100644 index 0000000..51875b9 --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +# ROBOTIS OP3 + + +## ROS Packages for ROBOTIS OP3 Demo +|Version|Kinetic + Ubuntu Xenial|Melodic + Ubuntu Bionic| +|:---:|:---:|:---:| +|[![GitHub version](https://badge.fury.io/gh/ROBOTIS-GIT%2FROBOTIS-OP3-Demo.svg)](https://badge.fury.io/gh/ROBOTIS-GIT%2FROBOTIS-OP3-Demo)|[![Build Status](https://travis-ci.org/ROBOTIS-GIT/ROBOTIS-OP3-Demo.svg?branch=kinetic-devel)](https://travis-ci.org/ROBOTIS-GIT/ROBOTIS-OP3-Demo)|-| + +## ROBOTIS e-Manual for ROBOTIS OP3 +- [ROBOTIS e-Manual for ROBOTIS OP3](http://emanual.robotis.com/docs/en/platform/op3/introduction/) + +## Wiki for robotis_op3_demo Packages +- http://wiki.ros.org/robotis_op3_demo (metapackage) +- http://wiki.ros.org/ball_detector +- http://wiki.ros.org/op3_demo + +## Open Source related to ROBOTIS OP3 +- [robotis_op3](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3) +- [robotis_op3_msgs](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-msgs) +- [robotis_op3_common](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Common) +- [robotis_op3_tools](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Tools) +- [robotis_op3_demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) +- [robotis_framework](https://github.com/ROBOTIS-GIT/ROBOTIS-Framework) +- [robotis_controller_msgs](https://github.com/ROBOTIS-GIT/ROBOTIS-Framework-msgs) +- [robotis_utility](https://github.com/ROBOTIS-GIT/ROBOTIS-Utility) +- [robotis_math](https://github.com/ROBOTIS-GIT/ROBOTIS-Math) +- [dynamixel_sdk](https://github.com/ROBOTIS-GIT/DynamixelSDK) +- [OpenCR-Hardware](https://github.com/ROBOTIS-GIT/OpenCR-Hardware) +- [OpenCR](https://github.com/ROBOTIS-GIT/OpenCR) + +## Documents and Videos related to ROBOTIS OP3 +- [ROBOTIS e-Manual for ROBOTIS OP3](http://emanual.robotis.com/docs/en/platform/op3/introduction/) +- [ROBOTIS e-Manual for ROBOTIS Framework](http://emanual.robotis.com/docs/en/software/robotis_framework_packages/) +- [ROBOTIS e-Manual for Dynamixel SDK](http://emanual.robotis.com/docs/en/software/dynamixel/dynamixel_sdk/overview/) diff --git a/ball_detector/CHANGELOG.rst b/ball_detector/CHANGELOG.rst new file mode 100644 index 0000000..5d3764c --- /dev/null +++ b/ball_detector/CHANGELOG.rst @@ -0,0 +1,12 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package ball_detector +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.1.0 (2018-03-30) +------------------ +* first release +* added launch files in order to move the camera setting to op3_camera_setting package +* added missing package in find_package() +* refacoring to release +* splited repositoryfrom ROBOTIS-OP3 +* Contributors: Kayman, Zerom, Pyo diff --git a/ball_detector/CMakeLists.txt b/ball_detector/CMakeLists.txt index 57f6e27..d2acc5e 100644 --- a/ball_detector/CMakeLists.txt +++ b/ball_detector/CMakeLists.txt @@ -1,26 +1,30 @@ ################################################################################ -# CMake +# Set minimum required version of cmake, project name and compile options ################################################################################ cmake_minimum_required(VERSION 2.8.3) project(ball_detector) ################################################################################ -# Packages +# Find catkin packages and libraries for catkin and system dependencies ################################################################################ find_package(catkin REQUIRED COMPONENTS - roslib - cv_bridge - geometry_msgs - image_transport roscpp - rospy + roslib std_msgs + sensor_msgs + geometry_msgs dynamic_reconfigure + cv_bridge + image_transport message_generation ) +find_package(Boost REQUIRED COMPONENTS thread) +find_package(OpenCV 3 REQUIRED) + ## Resolve system dependency on yaml-cpp, which apparently does not ## provide a CMake find_package() module. +## Insert your header file compatible specified path like '#include ' find_package(PkgConfig REQUIRED) pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) find_path(YAML_CPP_INCLUDE_DIR @@ -36,12 +40,17 @@ link_directories(${YAML_CPP_LIBRARY_DIRS}) if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") add_definitions(-DHAVE_NEW_YAMLCPP) endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") + +################################################################################ +# Setup for python modules and scripts +################################################################################ + ################################################################################ # Declare ROS messages, services and actions ################################################################################ add_message_files( FILES - circleSetStamped.msg + CircleSetStamped.msg BallDetectorParams.msg ) @@ -53,21 +62,34 @@ add_service_files( generate_messages( DEPENDENCIES - geometry_msgs std_msgs + std_msgs + geometry_msgs ) ################################################################################ # Declare ROS dynamic reconfigure parameters ################################################################################ -generate_dynamic_reconfigure_options(cfg/DetectorParams.cfg) +generate_dynamic_reconfigure_options( + cfg/DetectorParams.cfg +) ################################################################################ -# Catkin specific configuration -################################################################################ +# Declare catkin specific configuration to be passed to dependent projects +################################################################################## catkin_package( INCLUDE_DIRS include - CATKIN_DEPENDS cv_bridge geometry_msgs image_transport roscpp rospy std_msgs dynamic_reconfigure + CATKIN_DEPENDS + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + message_runtime + DEPENDS Boost OpenCV ) ################################################################################ @@ -76,22 +98,39 @@ catkin_package( include_directories( include ${catkin_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ${OpenCV_INCLUDE_DIRS} ${YAML_CPP_INCLUDE_DIRS} ) add_executable(ball_detector_node src/ball_detector.cpp - src/ball_detector_node.cpp) + src/ball_detector_node.cpp +) + +add_dependencies(ball_detector_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) -add_dependencies(ball_detector_node ${PROJECT_NAME}_gencfg ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) target_link_libraries(ball_detector_node ${catkin_LIBRARIES} + ${Boost_LIBRARIES} + ${OpenCV_LIBRARIES} ${YAML_CPP_LIBRARIES} ) ################################################################################ # Install ################################################################################ +install(TARGETS ball_detector_node + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) + +install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +) + +install(DIRECTORY config launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +) ################################################################################ # Test diff --git a/ball_detector/cfg/detector_params_blue.cfg b/ball_detector/cfg/DetectorParamsBlue.cfg old mode 100755 new mode 100644 similarity index 96% rename from ball_detector/cfg/detector_params_blue.cfg rename to ball_detector/cfg/DetectorParamsBlue.cfg index 2d61d6c..b9bd967 --- a/ball_detector/cfg/detector_params_blue.cfg +++ b/ball_detector/cfg/DetectorParamsBlue.cfg @@ -30,4 +30,4 @@ gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) gen.add("ellipse_size",int_t , -1, "Ellipse size", 2, 1, 9) gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) -exit(gen.generate(PACKAGE, "ball_detector_node", "detectorParams")) +exit(gen.generate(PACKAGE, "ball_detector_node", "DetectorParamsBlue")) diff --git a/ball_detector/cfg/detector_params_red.cfg b/ball_detector/cfg/DetectorParamsRed.cfg old mode 100755 new mode 100644 similarity index 96% rename from ball_detector/cfg/detector_params_red.cfg rename to ball_detector/cfg/DetectorParamsRed.cfg index 4fa6a18..79d08a2 --- a/ball_detector/cfg/detector_params_red.cfg +++ b/ball_detector/cfg/DetectorParamsRed.cfg @@ -30,4 +30,4 @@ gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) gen.add("ellipse_size",int_t , -1, "Ellipse size", 5, 1, 9) gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) -exit(gen.generate(PACKAGE, "ball_detector_node", "detectorParams")) +exit(gen.generate(PACKAGE, "ball_detector_node", "DetectorParamsRed")) diff --git a/ball_detector/launch/ball_detector_params.yaml b/ball_detector/config/ball_detector_params.yaml similarity index 100% rename from ball_detector/launch/ball_detector_params.yaml rename to ball_detector/config/ball_detector_params.yaml diff --git a/ball_detector/launch/ball_detector_params_default.yaml b/ball_detector/config/ball_detector_params_default.yaml similarity index 100% rename from ball_detector/launch/ball_detector_params_default.yaml rename to ball_detector/config/ball_detector_params_default.yaml diff --git a/ball_detector/launch/ball_detector_params_op.yaml b/ball_detector/config/ball_detector_params_op.yaml similarity index 100% rename from ball_detector/launch/ball_detector_params_op.yaml rename to ball_detector/config/ball_detector_params_op.yaml diff --git a/ball_detector/include/ball_detector/ball_detector.h b/ball_detector/include/ball_detector/ball_detector.h index 18cf79f..96a9981 100644 --- a/ball_detector/include/ball_detector/ball_detector.h +++ b/ball_detector/include/ball_detector/ball_detector.h @@ -21,23 +21,26 @@ #include -#include -#include - -//ros dependencies #include #include #include #include -#include -#include #include #include #include +#include +#include + +#include +#include +#include +#include -#include "ball_detector/circleSetStamped.h" -#include "ball_detector/ball_detector_config.h" #include "ball_detector/DetectorParamsConfig.h" + +#include "ball_detector/ball_detector_config.h" + +#include "ball_detector/CircleSetStamped.h" #include "ball_detector/GetParameters.h" #include "ball_detector/SetParameters.h" @@ -112,7 +115,7 @@ class BallDetector int not_found_count_; //circle set publisher - ball_detector::circleSetStamped circles_msg_; + ball_detector::CircleSetStamped circles_msg_; ros::Publisher circles_pub_; //camera info subscriber diff --git a/ball_detector/launch/ball_detector.launch b/ball_detector/launch/ball_detector.launch index 05cc278..34a12ba 100644 --- a/ball_detector/launch/ball_detector.launch +++ b/ball_detector/launch/ball_detector.launch @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + diff --git a/ball_detector/launch/ball_detector_from_usb_cam.launch b/ball_detector/launch/ball_detector_from_usb_cam.launch index e84838b..44ecad5 100644 --- a/ball_detector/launch/ball_detector_from_usb_cam.launch +++ b/ball_detector/launch/ball_detector_from_usb_cam.launch @@ -1,28 +1,27 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/ball_detector/launch/ball_detector_from_uvc.launch b/ball_detector/launch/ball_detector_from_uvc.launch index 4ef7b43..5946129 100644 --- a/ball_detector/launch/ball_detector_from_uvc.launch +++ b/ball_detector/launch/ball_detector_from_uvc.launch @@ -1,30 +1,30 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/ball_detector/package.xml b/ball_detector/package.xml index 47af0d6..2f2acf3 100644 --- a/ball_detector/package.xml +++ b/ball_detector/package.xml @@ -1,30 +1,35 @@ ball_detector - 0.1.1 + 0.1.0 - This package implements a circle-like shape detector of the input image. - It requires and input image and publish, at frame rate, a marked image - and a stamped array of circle centers and radius. + This package implements a circle-like shape detector of the input image. + It requires and input image and publish, at frame rate, a marked image + and a stamped array of circle centers and radius. - Apache License 2.0 - kayman + Apache 2.0 + Kayman + Zerom Pyo - + http://wiki.ros.org/ball_detector + http://emanual.robotis.com/docs/en/platform/op3/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues catkin - roslib - cv_bridge - geometry_msgs - image_transport roscpp - rospy + roslib std_msgs - cmake_modules + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 yaml-cpp message_generation message_runtime message_runtime - dynamic_reconfigure - dynamic_reconfigure - dynamic_reconfigure + usb_cam + uvc_camera diff --git a/ball_detector/launch/ball_detector.rviz b/ball_detector/rviz/ball_detector.rviz similarity index 100% rename from ball_detector/launch/ball_detector.rviz rename to ball_detector/rviz/ball_detector.rviz diff --git a/ball_detector/src/ball_detector.cpp b/ball_detector/src/ball_detector.cpp index 552c699..7dbba3c 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/ball_detector/src/ball_detector.cpp @@ -16,7 +16,6 @@ /* Author: Kayman Jung */ -#include #include #include "ball_detector/ball_detector.h" @@ -72,7 +71,7 @@ BallDetector::BallDetector() //sets publishers image_pub_ = it_.advertise("image_out", 100); - circles_pub_ = nh_.advertise("circle_set", 100); + circles_pub_ = nh_.advertise("circle_set", 100); camera_info_pub_ = nh_.advertise("camera_info", 100); //sets subscribers @@ -92,7 +91,7 @@ BallDetector::BallDetector() param_command_sub_ = nh_.subscribe("param_command", 1, &BallDetector::paramCommandCallback, this); set_param_client_ = nh_.advertiseService("set_param", &BallDetector::setParamCallback, this); get_param_client_ = nh_.advertiseService("get_param", &BallDetector::getParamCallback, this); - default_setting_path_ = ros::package::getPath(ROS_PACKAGE_NAME) + "/launch/ball_detector_params_default.yaml"; + default_setting_path_ = ros::package::getPath(ROS_PACKAGE_NAME) + "/config/ball_detector_params_default.yaml"; //sets config and prints it params_config_ = detect_config; diff --git a/op3_bringup/CMakeLists.txt b/op3_bringup/CMakeLists.txt new file mode 100644 index 0000000..403e6d6 --- /dev/null +++ b/op3_bringup/CMakeLists.txt @@ -0,0 +1,195 @@ +cmake_minimum_required(VERSION 2.8.3) +project(op3_bringup) + +## Compile as C++11, supported in ROS Kinetic and newer +# add_compile_options(-std=c++11) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +# add_message_files( +# FILES +# Message1.msg +# Message2.msg +# ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +# generate_messages( +# DEPENDENCIES +# std_msgs # Or other packages containing msgs +# ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if your package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES op3_bringup +# CATKIN_DEPENDS other_catkin_pkg +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +include_directories( +# include +# ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(${PROJECT_NAME} +# src/${PROJECT_NAME}/op3_bringup.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +## With catkin_make all packages are built within a single CMake context +## The recommended prefix ensures that target names across packages don't collide +# add_executable(${PROJECT_NAME}_node src/op3_bringup_node.cpp) + +## Rename C++ executable without prefix +## The above recommended prefix causes long target names, the following renames the +## target back to the shorter version for ease of user use +## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" +# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(${PROJECT_NAME}_node +# ${catkin_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_op3_bringup.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/op3_bringup/launch/op3_bringup.launch b/op3_bringup/launch/op3_bringup.launch new file mode 100644 index 0000000..a3eacfb --- /dev/null +++ b/op3_bringup/launch/op3_bringup.launch @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/op3_bringup/launch/op3_bringup_visualization.launch b/op3_bringup/launch/op3_bringup_visualization.launch new file mode 100644 index 0000000..5ad06e0 --- /dev/null +++ b/op3_bringup/launch/op3_bringup_visualization.launch @@ -0,0 +1,18 @@ + + + + + + + + [/robotis/present_joint_states] + + + + + + + + + + diff --git a/op3_bringup/package.xml b/op3_bringup/package.xml new file mode 100644 index 0000000..21f0087 --- /dev/null +++ b/op3_bringup/package.xml @@ -0,0 +1,59 @@ + + + op3_bringup + 0.0.0 + The op3_bringup package + + + + + robotis + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + + + + + + + + diff --git a/op3_bringup/rviz/op3_bringup.rviz b/op3_bringup/rviz/op3_bringup.rviz new file mode 100644 index 0000000..7a00cca --- /dev/null +++ b/op3_bringup/rviz/op3_bringup.rviz @@ -0,0 +1,348 @@ +Panels: + - Class: rviz/Displays + Help Height: 78 + Name: Displays + Property Tree Widget: + Expanded: + - /Global Options1 + - /Status1 + - /TF1 + Splitter Ratio: 0.5 + Tree Height: 352 + - Class: rviz/Selection + Name: Selection + - Class: rviz/Tool Properties + Expanded: + - /2D Pose Estimate1 + - /2D Nav Goal1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.588679016 + - Class: rviz/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rviz/Time + Experimental: false + Name: Time + SyncMode: 0 + SyncSource: Image +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.0299999993 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Alpha: 1 + Class: rviz/RobotModel + Collision Enabled: false + Enabled: true + Links: + All Links Enabled: true + Expand Joint Details: false + Expand Link Details: false + Expand Tree: false + Link Tree Style: Links in Alphabetic Order + body_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + cam_gazebo_link: + Alpha: 1 + Show Axes: false + Show Trail: false + cam_link: + Alpha: 1 + Show Axes: false + Show Trail: false + head_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_tilt_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_ank_pitch_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_ank_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_el_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_hip_pitch_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_hip_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_hip_yaw_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_knee_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_sho_pitch_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_sho_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_ank_pitch_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_ank_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_el_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_hip_pitch_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_hip_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_hip_yaw_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_knee_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_sho_pitch_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_sho_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + Name: RobotModel + Robot Description: robot_description + TF Prefix: "" + Update Interval: 0 + Value: true + Visual Enabled: true + - Class: rviz/Image + Enabled: true + Image Topic: /usb_cam_node/image_raw + Max Value: 1 + Median window: 5 + Min Value: 0 + Name: Image + Normalize Range: true + Queue Size: 2 + Transport Hint: raw + Unreliable: false + Value: true + - Class: rviz/TF + Enabled: true + Frame Timeout: 15 + Frames: + All Enabled: true + body_link: + Value: true + cam_gazebo_link: + Value: true + cam_link: + Value: true + head_pan_link: + Value: true + head_tilt_link: + Value: true + l_ank_pitch_link: + Value: true + l_ank_roll_link: + Value: true + l_el_link: + Value: true + l_hip_pitch_link: + Value: true + l_hip_roll_link: + Value: true + l_hip_yaw_link: + Value: true + l_knee_link: + Value: true + l_sho_pitch_link: + Value: true + l_sho_roll_link: + Value: true + r_ank_pitch_link: + Value: true + r_ank_roll_link: + Value: true + r_el_link: + Value: true + r_hip_pitch_link: + Value: true + r_hip_roll_link: + Value: true + r_hip_yaw_link: + Value: true + r_knee_link: + Value: true + r_sho_pitch_link: + Value: true + r_sho_roll_link: + Value: true + world: + Value: true + Marker Scale: 0.200000003 + Name: TF + Show Arrows: false + Show Axes: true + Show Names: false + Tree: + world: + body_link: + head_pan_link: + head_tilt_link: + cam_gazebo_link: + {} + cam_link: + {} + l_hip_yaw_link: + l_hip_roll_link: + l_hip_pitch_link: + l_knee_link: + l_ank_pitch_link: + l_ank_roll_link: + {} + l_sho_pitch_link: + l_sho_roll_link: + l_el_link: + {} + r_hip_yaw_link: + r_hip_roll_link: + r_hip_pitch_link: + r_knee_link: + r_ank_pitch_link: + r_ank_roll_link: + {} + r_sho_pitch_link: + r_sho_roll_link: + r_el_link: + {} + Update Interval: 0 + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Default Light: true + Fixed Frame: body_link + Frame Rate: 30 + Name: root + Tools: + - Class: rviz/Interact + Hide Inactive Objects: true + - Class: rviz/MoveCamera + - Class: rviz/Select + - Class: rviz/FocusCamera + - Class: rviz/Measure + - Class: rviz/SetInitialPose + Topic: /initialpose + - Class: rviz/SetGoal + Topic: /move_base_simple/goal + - Class: rviz/PublishPoint + Single click: true + Topic: /clicked_point + Value: true + Views: + Current: + Class: rviz/Orbit + Distance: 1.0015856 + Enable Stereo Rendering: + Stereo Eye Separation: 0.0599999987 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: 0 + Y: 0 + Z: 0 + Focal Shape Fixed Size: true + Focal Shape Size: 0.0500000007 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.00999999978 + Pitch: 0.425398082 + Target Frame: + Value: Orbit (rviz) + Yaw: 5.78858471 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1023 + Hide Left Dock: false + Hide Right Dock: true + Image: + collapsed: false + QMainWindow State: 000000ff00000000fd00000004000000000000023300000358fc0200000009fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006600fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000043000001f1000000df00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d006100670065010000023a000001610000001800ffffff000000010000010f00000358fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000004300000358000000b800fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007800000003efc0100000002fb0000000800540069006d00650100000000000007800000022400fffffffb0000000800540069006d00650100000000000004500000000000000000000005470000035800000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: true + Width: 1920 + X: 0 + Y: 0 diff --git a/op3_demo/CHANGELOG.rst b/op3_demo/CHANGELOG.rst new file mode 100644 index 0000000..62ead4d --- /dev/null +++ b/op3_demo/CHANGELOG.rst @@ -0,0 +1,12 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package op3_demo +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.1.0 (2018-03-30) +------------------ +* first release +* added launch files in order to move the camera setting to op3_camera_setting package +* added missing package in find_package() +* refacoring to release +* splited repositoryfrom ROBOTIS-OP3 +* Contributors: Kayman, Yoshimaru Tanaka, Pyo diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index d002446..42445a0 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -1,28 +1,32 @@ ################################################################################ -# CMake +# Set minimum required version of cmake, project name and compile options ################################################################################ cmake_minimum_required(VERSION 2.8.3) project(op3_demo) ################################################################################ -# Packages +# Find catkin packages and libraries for catkin and system dependencies ################################################################################ find_package(catkin REQUIRED COMPONENTS roscpp roslib + std_msgs sensor_msgs - ball_detector + geometry_msgs + robotis_controller_msgs op3_walking_module_msgs op3_action_module_msgs - robotis_controller_msgs cmake_modules robotis_math + ball_detector ) +find_package(Boost REQUIRED COMPONENTS thread) find_package(Eigen3 REQUIRED) ## Resolve system dependency on yaml-cpp, which apparently does not ## provide a CMake find_package() module. +## Insert your header file compatible specified path like '#include ' find_package(PkgConfig REQUIRED) pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) find_path(YAML_CPP_INCLUDE_DIR @@ -39,6 +43,10 @@ if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") add_definitions(-DHAVE_NEW_YAMLCPP) endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") +################################################################################ +# Setup for python modules and scripts +################################################################################ + ################################################################################ # Declare ROS messages, services and actions ################################################################################ @@ -48,12 +56,23 @@ endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") ################################################################################ ################################################################################ -# Catkin specific configuration +# Declare catkin specific configuration to be passed to dependent projects ################################################################################ catkin_package( INCLUDE_DIRS include - CATKIN_DEPENDS roscpp sensor_msgs cmake_modules - DEPENDS EIGEN3 + CATKIN_DEPENDS + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + robotis_controller_msgs + op3_walking_module_msgs + op3_action_module_msgs + cmake_modules + robotis_math + ball_detector + DEPENDS Boost EIGEN3 ) ################################################################################ @@ -62,6 +81,7 @@ catkin_package( include_directories( include ${catkin_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIRS} ${YAML_CPP_INCLUDE_DIRS} ) @@ -76,11 +96,16 @@ add_executable(op_demo_node src/vision/face_tracker.cpp ) -add_dependencies(op_demo_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +add_dependencies(op_demo_node + ${${PROJECT_NAME}_EXPORTED_TARGETS} + ${catkin_EXPORTED_TARGETS} +) target_link_libraries(op_demo_node ${catkin_LIBRARIES} - yaml-cpp + ${Boost_LIBRARIES} + ${Eigen3_LIBRARIES} + ${YAML_CPP_LIBRARIES} ) add_executable(self_test_node @@ -95,48 +120,32 @@ add_executable(self_test_node src/test/mic_test.cpp ) -add_dependencies(self_test_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +add_dependencies(self_test_node + ${${PROJECT_NAME}_EXPORTED_TARGETS} + ${catkin_EXPORTED_TARGETS} +) target_link_libraries(self_test_node ${catkin_LIBRARIES} - ${Eigen3_LIBRARIES} + ${Boost_LIBRARIES} + ${Eigen3_LIBRARIES} ${YAML_CPP_LIBRARIES} ) ################################################################################ # Install ################################################################################ +install(TARGETS op_demo_node self_test_node + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) -# all install targets should use catkin DESTINATION variables -# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html +install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +) -## Mark executable scripts (Python etc.) for installation -## in contrast to setup.py, you can choose the destination -# install(PROGRAMS -# scripts/my_python_script -# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) - -## Mark executables and/or libraries for installation -# install(TARGETS ball_tracking ball_tracking_node -# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) - -## Mark cpp header files for installation -# install(DIRECTORY include/${PROJECT_NAME}/ -# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} -# FILES_MATCHING PATTERN "*.h" -# PATTERN ".svn" EXCLUDE -# ) - -## Mark other files for installation (e.g. launch and bag files, etc.) -# install(FILES -# # myfile1 -# # myfile2 -# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} -# ) +install(DIRECTORY data launch list + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +) ################################################################################ # Test diff --git a/op3_demo/include/op3_demo/action_demo.h b/op3_demo/include/op3_demo/action_demo.h index 32a9435..4231406 100644 --- a/op3_demo/include/op3_demo/action_demo.h +++ b/op3_demo/include/op3_demo/action_demo.h @@ -19,14 +19,14 @@ #ifndef ACTION_DEMO_H_ #define ACTION_DEMO_H_ -#include -#include - #include #include #include #include +#include +#include + #include "op3_demo/op_demo.h" #include "robotis_controller_msgs/JointCtrlModule.h" #include "robotis_controller_msgs/SetModule.h" diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 9e12ffc..7ec1d46 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -20,16 +20,16 @@ #define BALL_FOLLOWER_H_ #include -#include - #include #include #include #include #include +#include +#include #include "robotis_controller_msgs/JointCtrlModule.h" -#include "ball_detector/circleSetStamped.h" +#include "ball_detector/CircleSetStamped.h" #include "op3_walking_module_msgs/WalkingParam.h" #include "op3_walking_module_msgs/GetWalkingParam.h" diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/op3_demo/include/op3_demo/ball_tracker.h index 0d3cfac..5461494 100644 --- a/op3_demo/include/op3_demo/ball_tracker.h +++ b/op3_demo/include/op3_demo/ball_tracker.h @@ -20,17 +20,16 @@ #define BALL_TRACKING_H_ #include -#include - #include #include #include #include -//#include #include +#include +#include #include "robotis_controller_msgs/JointCtrlModule.h" -#include "ball_detector/circleSetStamped.h" +#include "ball_detector/CircleSetStamped.h" #include "op3_walking_module_msgs/WalkingParam.h" #include "op3_walking_module_msgs/GetWalkingParam.h" @@ -80,7 +79,7 @@ protected: const int WAITING_THRESHOLD; const bool DEBUG_PRINT; - void ballPositionCallback(const ball_detector::circleSetStamped::ConstPtr &msg); + void ballPositionCallback(const ball_detector::CircleSetStamped::ConstPtr &msg); void ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); void publishHeadJoint(double pan, double tilt); void scanBall(); diff --git a/op3_demo/include/op3_demo/button_test.h b/op3_demo/include/op3_demo/button_test.h index 127c978..84e8bee 100644 --- a/op3_demo/include/op3_demo/button_test.h +++ b/op3_demo/include/op3_demo/button_test.h @@ -19,14 +19,12 @@ #ifndef BUTTON_TEST_H_ #define BUTTON_TEST_H_ -#include - #include #include #include +#include #include "op3_demo/op_demo.h" - #include "robotis_controller_msgs/SyncWriteItem.h" namespace robotis_op diff --git a/op3_demo/include/op3_demo/face_tracker.h b/op3_demo/include/op3_demo/face_tracker.h index 0671b24..3289375 100644 --- a/op3_demo/include/op3_demo/face_tracker.h +++ b/op3_demo/include/op3_demo/face_tracker.h @@ -20,8 +20,6 @@ #define FACE_TRACKING_H_ #include -#include - #include #include #include @@ -29,6 +27,7 @@ #include #include #include +#include namespace robotis_op { diff --git a/op3_demo/include/op3_demo/mic_test.h b/op3_demo/include/op3_demo/mic_test.h index 7cd025a..144fe96 100644 --- a/op3_demo/include/op3_demo/mic_test.h +++ b/op3_demo/include/op3_demo/mic_test.h @@ -20,14 +20,12 @@ #define MIC_TEST_H_ #include -#include - #include #include #include +#include #include "op3_demo/op_demo.h" - #include "robotis_controller_msgs/SyncWriteItem.h" namespace robotis_op diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index f65d81b..a771eda 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -23,15 +23,18 @@ #include #include #include +#include +#include + +#include "op3_action_module_msgs/IsRunning.h" +#include "robotis_controller_msgs/SyncWriteItem.h" +#include "robotis_controller_msgs/JointCtrlModule.h" +#include "robotis_controller_msgs/SetJointModule.h" #include "op3_demo/op_demo.h" #include "op3_demo/ball_tracker.h" #include "op3_demo/ball_follower.h" #include "robotis_math/robotis_linear_algebra.h" -#include "op3_action_module_msgs/IsRunning.h" -#include "robotis_controller_msgs/SyncWriteItem.h" -#include "robotis_controller_msgs/JointCtrlModule.h" -#include "robotis_controller_msgs/SetJointModule.h" namespace robotis_op { diff --git a/op3_demo/include/op3_demo/vision_demo.h b/op3_demo/include/op3_demo/vision_demo.h index 3ebdc46..20cd1ad 100644 --- a/op3_demo/include/op3_demo/vision_demo.h +++ b/op3_demo/include/op3_demo/vision_demo.h @@ -19,19 +19,18 @@ #ifndef VISION_DEMO_H_ #define VISION_DEMO_H_ -#include - #include #include #include #include - -#include "op3_demo/op_demo.h" -#include "op3_demo/face_tracker.h" +#include #include "robotis_controller_msgs/SyncWriteItem.h" #include "robotis_controller_msgs/SetModule.h" +#include "op3_demo/op_demo.h" +#include "op3_demo/face_tracker.h" + namespace robotis_op { diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index aa5098b..2b5281c 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -1,7 +1,5 @@ - - diff --git a/op3_demo/launch/face_detection_op3.launch b/op3_demo/launch/face_detection_op3.launch index afc5f12..d42ab41 100644 --- a/op3_demo/launch/face_detection_op3.launch +++ b/op3_demo/launch/face_detection_op3.launch @@ -7,16 +7,16 @@ - - - - + args="$(arg face_cascade_name_0) + $(arg face_cascade_name_1) + $(arg face_cascade_name_2) + $(arg face_cascade_name_3) + $(arg face_cascade_name_4)" + output="screen"> + + + + diff --git a/op3_demo/launch/self_test.launch b/op3_demo/launch/self_test.launch index c5ca857..623004e 100644 --- a/op3_demo/launch/self_test.launch +++ b/op3_demo/launch/self_test.launch @@ -1,30 +1,29 @@ + + - - - - - + + - - + + - - + + - - + + - - + + - - - - - - + + + + + + diff --git a/op3_demo/list/action_script.yaml b/op3_demo/list/action_script.yaml new file mode 100644 index 0000000..21ce72b --- /dev/null +++ b/op3_demo/list/action_script.yaml @@ -0,0 +1,23 @@ +# combination action page number and mp3 file path +action_and_sound: + 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Thank you.mp3" + 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Introduction.mp3" + 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Wow.mp3" + 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Yes go.mp3" + 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Sit down.mp3" + 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Stand up.mp3" + 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Clap please.mp3" + 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" + 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Bye bye.mp3" +# 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" + 110 : "" + 111 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Intro01.mp3" + 115 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Intro02.mp3" + 118 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Intro03.mp3" + +# play list +prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] +default: [4, 110, 111, 115, 118, 24, 54, 27, 38] + +# example of play list +#certification: [101] \ No newline at end of file diff --git a/op3_demo/script/action_script_bk.yaml b/op3_demo/list/action_script_bk.yaml similarity index 72% rename from op3_demo/script/action_script_bk.yaml rename to op3_demo/list/action_script_bk.yaml index a18155d..bc401fb 100644 --- a/op3_demo/script/action_script_bk.yaml +++ b/op3_demo/list/action_script_bk.yaml @@ -1,15 +1,15 @@ # combination action page number and mp3 file path action_and_sound: - 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Thank you.mp3" - 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Introduction.mp3" - 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Wow.mp3" - 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Yes go.mp3" - 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Sit down.mp3" - 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Stand up.mp3" - 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Clap please.mp3" - 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" - 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Bye bye.mp3" - 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" + 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Thank you.mp3" + 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Introduction.mp3" + 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Wow.mp3" + 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Yes go.mp3" + 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Sit down.mp3" + 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Stand up.mp3" + 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Clap please.mp3" + 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" + 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Bye bye.mp3" + 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" # play list default: [4, 41, 24, 23, 15, 1, 54, 27, 38] diff --git a/op3_demo/package.xml b/op3_demo/package.xml index 70af22d..85bd36e 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -1,25 +1,36 @@ op3_demo - 0.1.1 + 0.1.0 - op3 default demo + OP3 default demo It includes three demontrations(soccer demo, vision demo, action script demo) - Apache License 2.0 - kayman + Apache 2.0 + Kayman Pyo - + http://wiki.ros.org/op3_demo + http://emanual.robotis.com/docs/en/platform/op3/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues catkin roscpp roslib + std_msgs sensor_msgs - ball_detector + geometry_msgs robotis_controller_msgs op3_walking_module_msgs op3_action_module_msgs cmake_modules robotis_math + ball_detector + boost eigen yaml-cpp + op3_manager + op3_camera_setting_tool + op3_web_setting_tool + ros_madplay_player + diff --git a/op3_demo/script/action_script.yaml b/op3_demo/script/action_script.yaml deleted file mode 100644 index 077e820..0000000 --- a/op3_demo/script/action_script.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# combination action page number and mp3 file path -action_and_sound: - 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Thank you.mp3" - 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Introduction.mp3" - 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Wow.mp3" - 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Yes go.mp3" - 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Sit down.mp3" - 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Stand up.mp3" - 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Clap please.mp3" - 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" - 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Bye bye.mp3" -# 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Oops.mp3" - 110 : "" - 111 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro01.mp3" - 115 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro02.mp3" - 118 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/Data/mp3/Intro03.mp3" - -# play list -prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] -default: [4, 110, 111, 115, 118, 24, 54, 27, 38] - -# example of play list -#certification: [101] \ No newline at end of file diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index 4f14679..660390c 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -31,7 +31,7 @@ ActionDemo::ActionDemo() ros::NodeHandle nh(ros::this_node::getName()); - std::string default_path = ros::package::getPath("op3_demo") + "/script/action_script.yaml"; + std::string default_path = ros::package::getPath("op3_demo") + "/list/action_script.yaml"; script_path_ = nh.param("action_script", default_path); std::string default_play_list = "default"; diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp index 8039aff..300a90b 100644 --- a/op3_demo/src/demo_node.cpp +++ b/op3_demo/src/demo_node.cpp @@ -77,7 +77,7 @@ int main(int argc, char **argv) ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); - default_mp3_path = ros::package::getPath("op3_demo") + "/Data/mp3/"; + default_mp3_path = ros::package::getPath("op3_demo") + "/data/mp3/"; ros::start(); diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp index cbd4e87..355a21c 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -59,7 +59,7 @@ BallTracker::~BallTracker() } -void BallTracker::ballPositionCallback(const ball_detector::circleSetStamped::ConstPtr &msg) +void BallTracker::ballPositionCallback(const ball_detector::CircleSetStamped::ConstPtr &msg) { for (int idx = 0; idx < msg->circles.size(); idx++) { diff --git a/op3_demo/src/test/button_test.cpp b/op3_demo/src/test/button_test.cpp index 415d182..7a78c6a 100644 --- a/op3_demo/src/test/button_test.cpp +++ b/op3_demo/src/test/button_test.cpp @@ -33,7 +33,7 @@ ButtonTest::ButtonTest() boost::thread queue_thread = boost::thread(boost::bind(&ButtonTest::callbackThread, this)); boost::thread process_thread = boost::thread(boost::bind(&ButtonTest::processThread, this)); - default_mp3_path_ = ros::package::getPath("op3_demo") + "/Data/mp3/test/"; + default_mp3_path_ = ros::package::getPath("op3_demo") + "/data/mp3/test/"; } ButtonTest::~ButtonTest() diff --git a/op3_demo/src/test/mic_test.cpp b/op3_demo/src/test/mic_test.cpp index e1f6757..4e56954 100644 --- a/op3_demo/src/test/mic_test.cpp +++ b/op3_demo/src/test/mic_test.cpp @@ -36,8 +36,8 @@ MicTest::MicTest() boost::thread queue_thread = boost::thread(boost::bind(&MicTest::callbackThread, this)); boost::thread process_thread = boost::thread(boost::bind(&MicTest::processThread, this)); - recording_file_name_ = ros::package::getPath("op3_demo") + "/Data/mp3/test/mic-test.wav"; - default_mp3_path_ = ros::package::getPath("op3_demo") + "/Data/mp3/test/"; + recording_file_name_ = ros::package::getPath("op3_demo") + "/data/mp3/test/mic-test.wav"; + default_mp3_path_ = ros::package::getPath("op3_demo") + "/data/mp3/test/"; start_time_ = ros::Time::now(); } diff --git a/op3_demo/src/test_node.cpp b/op3_demo/src/test_node.cpp index 259ea96..8d4768d 100644 --- a/op3_demo/src/test_node.cpp +++ b/op3_demo/src/test_node.cpp @@ -84,7 +84,7 @@ int main(int argc, char **argv) ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); - default_mp3_path = ros::package::getPath("op3_demo") + "/Data/mp3/"; + default_mp3_path = ros::package::getPath("op3_demo") + "/data/mp3/"; ros::start(); diff --git a/robotis_op3_demo/CHANGELOG.rst b/robotis_op3_demo/CHANGELOG.rst new file mode 100644 index 0000000..b65724b --- /dev/null +++ b/robotis_op3_demo/CHANGELOG.rst @@ -0,0 +1,12 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package robotis_op3_demo +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.1.0 (2018-03-30) +------------------ +* first release +* added launch files in order to move the camera setting to op3_camera_setting package +* added missing package in find_package() +* refacoring to release +* splited repositoryfrom ROBOTIS-OP3 +* Contributors: Kayman, Zerom, Yoshimaru Tanaka, Pyo diff --git a/robotis_op3_demo/CMakeLists.txt b/robotis_op3_demo/CMakeLists.txt index d88f653..b7e8eeb 100644 --- a/robotis_op3_demo/CMakeLists.txt +++ b/robotis_op3_demo/CMakeLists.txt @@ -1,4 +1,4 @@ cmake_minimum_required(VERSION 2.8.3) project(robotis_op3_demo) find_package(catkin REQUIRED) -catkin_metapackage() \ No newline at end of file +catkin_metapackage() diff --git a/robotis_op3_demo/package.xml b/robotis_op3_demo/package.xml index bba5f7c..7cf0810 100644 --- a/robotis_op3_demo/package.xml +++ b/robotis_op3_demo/package.xml @@ -1,24 +1,19 @@ - + robotis_op3_demo 0.1.0 ROS packages for the robotis_op3_demo (meta package) - - Apache License 2.0 + Apache 2.0 Kayman Pyo - - - - - + http://wiki.ros.org/robotis_op3_demo + http://emanual.robotis.com/docs/en/platform/op3/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues catkin - ball_detector - op3_demo - - - - + ball_detector + op3_demo + From b627f131b9db84d97e16cb3b61749a9d41d84673 Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 17 Apr 2018 17:03:28 +0900 Subject: [PATCH 063/172] updated CMakeLists.txt and package.xml of op3_bringup --- op3_bringup/CMakeLists.txt | 213 ++++++------------------------------- op3_bringup/package.xml | 71 +++---------- 2 files changed, 47 insertions(+), 237 deletions(-) diff --git a/op3_bringup/CMakeLists.txt b/op3_bringup/CMakeLists.txt index 403e6d6..b171b00 100644 --- a/op3_bringup/CMakeLists.txt +++ b/op3_bringup/CMakeLists.txt @@ -1,195 +1,42 @@ +################################################################################ +# Set minimum required version of cmake, project name and compile options +################################################################################ cmake_minimum_required(VERSION 2.8.3) project(op3_bringup) -## Compile as C++11, supported in ROS Kinetic and newer -# add_compile_options(-std=c++11) - -## Find catkin macros and libraries -## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) -## is used, also find other catkin packages +################################################################################ +# Find catkin packages and libraries for catkin and system dependencies +################################################################################ find_package(catkin REQUIRED) -## System dependencies are found with CMake's conventions -# find_package(Boost REQUIRED COMPONENTS system) +################################################################################ +# Setup for python modules and scripts +################################################################################ +################################################################################ +# Declare ROS messages, services and actions +################################################################################ -## Uncomment this if the package has a setup.py. This macro ensures -## modules and global scripts declared therein get installed -## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html -# catkin_python_setup() +################################################################################ +# Declare ROS dynamic reconfigure parameters +################################################################################ -################################################ -## Declare ROS messages, services and actions ## -################################################ +################################################################################ +# Declare catkin specific configuration to be passed to dependent projects +################################################################################ +catkin_package() -## To declare and build messages, services or actions from within this -## package, follow these steps: -## * Let MSG_DEP_SET be the set of packages whose message types you use in -## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). -## * In the file package.xml: -## * add a build_depend tag for "message_generation" -## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET -## * If MSG_DEP_SET isn't empty the following dependency has been pulled in -## but can be declared for certainty nonetheless: -## * add a run_depend tag for "message_runtime" -## * In this file (CMakeLists.txt): -## * add "message_generation" and every package in MSG_DEP_SET to -## find_package(catkin REQUIRED COMPONENTS ...) -## * add "message_runtime" and every package in MSG_DEP_SET to -## catkin_package(CATKIN_DEPENDS ...) -## * uncomment the add_*_files sections below as needed -## and list every .msg/.srv/.action file to be processed -## * uncomment the generate_messages entry below -## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) +################################################################################ +# Build +################################################################################ -## Generate messages in the 'msg' folder -# add_message_files( -# FILES -# Message1.msg -# Message2.msg -# ) - -## Generate services in the 'srv' folder -# add_service_files( -# FILES -# Service1.srv -# Service2.srv -# ) - -## Generate actions in the 'action' folder -# add_action_files( -# FILES -# Action1.action -# Action2.action -# ) - -## Generate added messages and services with any dependencies listed here -# generate_messages( -# DEPENDENCIES -# std_msgs # Or other packages containing msgs -# ) - -################################################ -## Declare ROS dynamic reconfigure parameters ## -################################################ - -## To declare and build dynamic reconfigure parameters within this -## package, follow these steps: -## * In the file package.xml: -## * add a build_depend and a run_depend tag for "dynamic_reconfigure" -## * In this file (CMakeLists.txt): -## * add "dynamic_reconfigure" to -## find_package(catkin REQUIRED COMPONENTS ...) -## * uncomment the "generate_dynamic_reconfigure_options" section below -## and list every .cfg file to be processed - -## Generate dynamic reconfigure parameters in the 'cfg' folder -# generate_dynamic_reconfigure_options( -# cfg/DynReconf1.cfg -# cfg/DynReconf2.cfg -# ) - -################################### -## catkin specific configuration ## -################################### -## The catkin_package macro generates cmake config files for your package -## Declare things to be passed to dependent projects -## INCLUDE_DIRS: uncomment this if your package contains header files -## LIBRARIES: libraries you create in this project that dependent projects also need -## CATKIN_DEPENDS: catkin_packages dependent projects also need -## DEPENDS: system dependencies of this project that dependent projects also need -catkin_package( -# INCLUDE_DIRS include -# LIBRARIES op3_bringup -# CATKIN_DEPENDS other_catkin_pkg -# DEPENDS system_lib +################################################################################ +# Install +################################################################################ +install(DIRECTORY launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) -########### -## Build ## -########### - -## Specify additional locations of header files -## Your package locations should be listed before other locations -include_directories( -# include -# ${catkin_INCLUDE_DIRS} -) - -## Declare a C++ library -# add_library(${PROJECT_NAME} -# src/${PROJECT_NAME}/op3_bringup.cpp -# ) - -## Add cmake target dependencies of the library -## as an example, code may need to be generated before libraries -## either from message generation or dynamic reconfigure -# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - -## Declare a C++ executable -## With catkin_make all packages are built within a single CMake context -## The recommended prefix ensures that target names across packages don't collide -# add_executable(${PROJECT_NAME}_node src/op3_bringup_node.cpp) - -## Rename C++ executable without prefix -## The above recommended prefix causes long target names, the following renames the -## target back to the shorter version for ease of user use -## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" -# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") - -## Add cmake target dependencies of the executable -## same as for the library above -# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - -## Specify libraries to link a library or executable target against -# target_link_libraries(${PROJECT_NAME}_node -# ${catkin_LIBRARIES} -# ) - -############# -## Install ## -############# - -# all install targets should use catkin DESTINATION variables -# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html - -## Mark executable scripts (Python etc.) for installation -## in contrast to setup.py, you can choose the destination -# install(PROGRAMS -# scripts/my_python_script -# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) - -## Mark executables and/or libraries for installation -# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node -# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} -# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) - -## Mark cpp header files for installation -# install(DIRECTORY include/${PROJECT_NAME}/ -# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} -# FILES_MATCHING PATTERN "*.h" -# PATTERN ".svn" EXCLUDE -# ) - -## Mark other files for installation (e.g. launch and bag files, etc.) -# install(FILES -# # myfile1 -# # myfile2 -# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} -# ) - -############# -## Testing ## -############# - -## Add gtest based cpp test target and link libraries -# catkin_add_gtest(${PROJECT_NAME}-test test/test_op3_bringup.cpp) -# if(TARGET ${PROJECT_NAME}-test) -# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) -# endif() - -## Add folders to be run by python nosetests -# catkin_add_nosetests(test) +################################################################################ +# Test +################################################################################ \ No newline at end of file diff --git a/op3_bringup/package.xml b/op3_bringup/package.xml index 21f0087..a185bc1 100644 --- a/op3_bringup/package.xml +++ b/op3_bringup/package.xml @@ -1,59 +1,22 @@ op3_bringup - 0.0.0 - The op3_bringup package - - - - - robotis - - - - - - TODO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 0.0.1 + + This package is a demo for first time users. + There is an example in the demo where you can run and visualize the robot. + + Apache 2.0 + Kayman + Pyo + http://wiki.ros.org/op3_bringup + http://emanual.robotis.com/docs/en/platform/op3/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues catkin - - - - - - - + op3_manager + usb_cam + joint_state_publisher + robot_state_publisher + rviz From 454128b19917dd950ab0299078e43000baeaac75 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 18 Apr 2018 11:32:12 +0900 Subject: [PATCH 064/172] changed the package name from ball_detector to op3_ball_detector --- .../CHANGELOG.rst | 0 .../CMakeLists.txt | 2 +- .../cfg/DetectorParams.cfg | 2 +- .../cfg/DetectorParamsBlue.cfg | 2 +- .../cfg/DetectorParamsRed.cfg | 2 +- .../config/ball_detector_params.yaml | 0 .../config/ball_detector_params_default.yaml | 0 .../config/ball_detector_params_op.yaml | 0 .../op3_ball_detector}/ball_detector.h | 23 +++++++++---------- .../op3_ball_detector}/ball_detector_config.h | 0 .../launch/ball_detector.launch | 4 ++-- .../launch/ball_detector_from_usb_cam.launch | 2 +- .../launch/ball_detector_from_uvc.launch | 2 +- .../msg/BallDetectorParams.msg | 0 .../msg/CircleSetStamped.msg | 0 .../package.xml | 2 +- .../rviz/ball_detector.rviz | 0 .../src/ball_detector.cpp | 14 +++++------ .../src/ball_detector_node.cpp | 2 +- .../srv/GetParameters.srv | 0 .../srv/SetParameters.srv | 0 op3_demo/CMakeLists.txt | 4 ++-- op3_demo/include/op3_demo/ball_follower.h | 2 +- op3_demo/include/op3_demo/ball_tracker.h | 4 ++-- op3_demo/launch/demo.launch | 2 +- op3_demo/launch/self_test.launch | 2 +- op3_demo/package.xml | 2 +- op3_demo/src/soccer/ball_tracker.cpp | 2 +- 28 files changed, 37 insertions(+), 38 deletions(-) rename {ball_detector => op3_ball_detector}/CHANGELOG.rst (100%) rename {ball_detector => op3_ball_detector}/CMakeLists.txt (99%) rename {ball_detector => op3_ball_detector}/cfg/DetectorParams.cfg (98%) mode change 100755 => 100644 rename {ball_detector => op3_ball_detector}/cfg/DetectorParamsBlue.cfg (98%) rename {ball_detector => op3_ball_detector}/cfg/DetectorParamsRed.cfg (98%) rename {ball_detector => op3_ball_detector}/config/ball_detector_params.yaml (100%) rename {ball_detector => op3_ball_detector}/config/ball_detector_params_default.yaml (100%) rename {ball_detector => op3_ball_detector}/config/ball_detector_params_op.yaml (100%) rename {ball_detector/include/ball_detector => op3_ball_detector/include/op3_ball_detector}/ball_detector.h (83%) rename {ball_detector/include/ball_detector => op3_ball_detector/include/op3_ball_detector}/ball_detector_config.h (100%) rename {ball_detector => op3_ball_detector}/launch/ball_detector.launch (64%) rename {ball_detector => op3_ball_detector}/launch/ball_detector_from_usb_cam.launch (94%) rename {ball_detector => op3_ball_detector}/launch/ball_detector_from_uvc.launch (92%) rename {ball_detector => op3_ball_detector}/msg/BallDetectorParams.msg (100%) rename {ball_detector => op3_ball_detector}/msg/CircleSetStamped.msg (100%) rename {ball_detector => op3_ball_detector}/package.xml (97%) rename {ball_detector => op3_ball_detector}/rviz/ball_detector.rviz (100%) rename {ball_detector => op3_ball_detector}/src/ball_detector.cpp (97%) rename {ball_detector => op3_ball_detector}/src/ball_detector_node.cpp (96%) rename {ball_detector => op3_ball_detector}/srv/GetParameters.srv (100%) rename {ball_detector => op3_ball_detector}/srv/SetParameters.srv (100%) diff --git a/ball_detector/CHANGELOG.rst b/op3_ball_detector/CHANGELOG.rst similarity index 100% rename from ball_detector/CHANGELOG.rst rename to op3_ball_detector/CHANGELOG.rst diff --git a/ball_detector/CMakeLists.txt b/op3_ball_detector/CMakeLists.txt similarity index 99% rename from ball_detector/CMakeLists.txt rename to op3_ball_detector/CMakeLists.txt index d2acc5e..d57df9d 100644 --- a/ball_detector/CMakeLists.txt +++ b/op3_ball_detector/CMakeLists.txt @@ -2,7 +2,7 @@ # Set minimum required version of cmake, project name and compile options ################################################################################ cmake_minimum_required(VERSION 2.8.3) -project(ball_detector) +project(op3_ball_detector) ################################################################################ # Find catkin packages and libraries for catkin and system dependencies diff --git a/ball_detector/cfg/DetectorParams.cfg b/op3_ball_detector/cfg/DetectorParams.cfg old mode 100755 new mode 100644 similarity index 98% rename from ball_detector/cfg/DetectorParams.cfg rename to op3_ball_detector/cfg/DetectorParams.cfg index 1d3e29c..e627907 --- a/ball_detector/cfg/DetectorParams.cfg +++ b/op3_ball_detector/cfg/DetectorParams.cfg @@ -1,5 +1,5 @@ #!/usr/bin/env python -PACKAGE='ball_detector' +PACKAGE='op3_ball_detector' from dynamic_reconfigure.parameter_generator_catkin import * diff --git a/ball_detector/cfg/DetectorParamsBlue.cfg b/op3_ball_detector/cfg/DetectorParamsBlue.cfg similarity index 98% rename from ball_detector/cfg/DetectorParamsBlue.cfg rename to op3_ball_detector/cfg/DetectorParamsBlue.cfg index b9bd967..391e99f 100644 --- a/ball_detector/cfg/DetectorParamsBlue.cfg +++ b/op3_ball_detector/cfg/DetectorParamsBlue.cfg @@ -1,5 +1,5 @@ #!/usr/bin/env python -PACKAGE='ball_detector' +PACKAGE='op3_ball_detector' from dynamic_reconfigure.parameter_generator_catkin import * diff --git a/ball_detector/cfg/DetectorParamsRed.cfg b/op3_ball_detector/cfg/DetectorParamsRed.cfg similarity index 98% rename from ball_detector/cfg/DetectorParamsRed.cfg rename to op3_ball_detector/cfg/DetectorParamsRed.cfg index 79d08a2..6d8dbad 100644 --- a/ball_detector/cfg/DetectorParamsRed.cfg +++ b/op3_ball_detector/cfg/DetectorParamsRed.cfg @@ -1,5 +1,5 @@ #!/usr/bin/env python -PACKAGE='ball_detector' +PACKAGE='op3_ball_detector' from dynamic_reconfigure.parameter_generator_catkin import * diff --git a/ball_detector/config/ball_detector_params.yaml b/op3_ball_detector/config/ball_detector_params.yaml similarity index 100% rename from ball_detector/config/ball_detector_params.yaml rename to op3_ball_detector/config/ball_detector_params.yaml diff --git a/ball_detector/config/ball_detector_params_default.yaml b/op3_ball_detector/config/ball_detector_params_default.yaml similarity index 100% rename from ball_detector/config/ball_detector_params_default.yaml rename to op3_ball_detector/config/ball_detector_params_default.yaml diff --git a/ball_detector/config/ball_detector_params_op.yaml b/op3_ball_detector/config/ball_detector_params_op.yaml similarity index 100% rename from ball_detector/config/ball_detector_params_op.yaml rename to op3_ball_detector/config/ball_detector_params_op.yaml diff --git a/ball_detector/include/ball_detector/ball_detector.h b/op3_ball_detector/include/op3_ball_detector/ball_detector.h similarity index 83% rename from ball_detector/include/ball_detector/ball_detector.h rename to op3_ball_detector/include/op3_ball_detector/ball_detector.h index 96a9981..c429222 100644 --- a/ball_detector/include/ball_detector/ball_detector.h +++ b/op3_ball_detector/include/op3_ball_detector/ball_detector.h @@ -36,13 +36,12 @@ #include #include -#include "ball_detector/DetectorParamsConfig.h" +#include "op3_ball_detector/ball_detector_config.h" -#include "ball_detector/ball_detector_config.h" - -#include "ball_detector/CircleSetStamped.h" -#include "ball_detector/GetParameters.h" -#include "ball_detector/SetParameters.h" +#include "op3_ball_detector/DetectorParamsConfig.h" +#include "op3_ball_detector/CircleSetStamped.h" +#include "op3_ball_detector/GetParameters.h" +#include "op3_ball_detector/SetParameters.h" namespace robotis_op { @@ -74,12 +73,12 @@ class BallDetector //callbacks to camera info subscription void cameraInfoCallback(const sensor_msgs::CameraInfo & msg); - void dynParamCallback(ball_detector::DetectorParamsConfig &config, uint32_t level); + void dynParamCallback(op3_ball_detector::DetectorParamsConfig &config, uint32_t level); void enableCallback(const std_msgs::Bool::ConstPtr &msg); void paramCommandCallback(const std_msgs::String::ConstPtr &msg); - bool setParamCallback(ball_detector::SetParameters::Request &req, ball_detector::SetParameters::Response &res); - bool getParamCallback(ball_detector::GetParameters::Request &req, ball_detector::GetParameters::Response &res); + bool setParamCallback(op3_ball_detector::SetParameters::Request &req, op3_ball_detector::SetParameters::Response &res); + bool getParamCallback(op3_ball_detector::GetParameters::Request &req, op3_ball_detector::GetParameters::Response &res); void resetParameter(); void publishParam(); @@ -115,7 +114,7 @@ class BallDetector int not_found_count_; //circle set publisher - ball_detector::CircleSetStamped circles_msg_; + op3_ball_detector::CircleSetStamped circles_msg_; ros::Publisher circles_pub_; //camera info subscriber @@ -157,8 +156,8 @@ class BallDetector cv::Mat in_image_; cv::Mat out_image_; - dynamic_reconfigure::Server param_server_; - dynamic_reconfigure::Server::CallbackType callback_fnc_; + dynamic_reconfigure::Server param_server_; + dynamic_reconfigure::Server::CallbackType callback_fnc_; }; } // namespace robotis_op diff --git a/ball_detector/include/ball_detector/ball_detector_config.h b/op3_ball_detector/include/op3_ball_detector/ball_detector_config.h similarity index 100% rename from ball_detector/include/ball_detector/ball_detector_config.h rename to op3_ball_detector/include/op3_ball_detector/ball_detector_config.h diff --git a/ball_detector/launch/ball_detector.launch b/op3_ball_detector/launch/ball_detector.launch similarity index 64% rename from ball_detector/launch/ball_detector.launch rename to op3_ball_detector/launch/ball_detector.launch index 34a12ba..35f57d9 100644 --- a/ball_detector/launch/ball_detector.launch +++ b/op3_ball_detector/launch/ball_detector.launch @@ -1,9 +1,9 @@ - + - + diff --git a/ball_detector/launch/ball_detector_from_usb_cam.launch b/op3_ball_detector/launch/ball_detector_from_usb_cam.launch similarity index 94% rename from ball_detector/launch/ball_detector_from_usb_cam.launch rename to op3_ball_detector/launch/ball_detector_from_usb_cam.launch index 44ecad5..7f3ae14 100644 --- a/ball_detector/launch/ball_detector_from_usb_cam.launch +++ b/op3_ball_detector/launch/ball_detector_from_usb_cam.launch @@ -23,5 +23,5 @@ - + diff --git a/ball_detector/launch/ball_detector_from_uvc.launch b/op3_ball_detector/launch/ball_detector_from_uvc.launch similarity index 92% rename from ball_detector/launch/ball_detector_from_uvc.launch rename to op3_ball_detector/launch/ball_detector_from_uvc.launch index 5946129..636caaa 100644 --- a/ball_detector/launch/ball_detector_from_uvc.launch +++ b/op3_ball_detector/launch/ball_detector_from_uvc.launch @@ -25,6 +25,6 @@ - + diff --git a/ball_detector/msg/BallDetectorParams.msg b/op3_ball_detector/msg/BallDetectorParams.msg similarity index 100% rename from ball_detector/msg/BallDetectorParams.msg rename to op3_ball_detector/msg/BallDetectorParams.msg diff --git a/ball_detector/msg/CircleSetStamped.msg b/op3_ball_detector/msg/CircleSetStamped.msg similarity index 100% rename from ball_detector/msg/CircleSetStamped.msg rename to op3_ball_detector/msg/CircleSetStamped.msg diff --git a/ball_detector/package.xml b/op3_ball_detector/package.xml similarity index 97% rename from ball_detector/package.xml rename to op3_ball_detector/package.xml index 2f2acf3..a65ef7f 100644 --- a/ball_detector/package.xml +++ b/op3_ball_detector/package.xml @@ -1,6 +1,6 @@ - ball_detector + op3_ball_detector 0.1.0 This package implements a circle-like shape detector of the input image. diff --git a/ball_detector/rviz/ball_detector.rviz b/op3_ball_detector/rviz/ball_detector.rviz similarity index 100% rename from ball_detector/rviz/ball_detector.rviz rename to op3_ball_detector/rviz/ball_detector.rviz diff --git a/ball_detector/src/ball_detector.cpp b/op3_ball_detector/src/ball_detector.cpp similarity index 97% rename from ball_detector/src/ball_detector.cpp rename to op3_ball_detector/src/ball_detector.cpp index 7dbba3c..871a1e8 100644 --- a/ball_detector/src/ball_detector.cpp +++ b/op3_ball_detector/src/ball_detector.cpp @@ -18,7 +18,7 @@ #include -#include "ball_detector/ball_detector.h" +#include "op3_ball_detector/ball_detector.h" namespace robotis_op { @@ -71,7 +71,7 @@ BallDetector::BallDetector() //sets publishers image_pub_ = it_.advertise("image_out", 100); - circles_pub_ = nh_.advertise("circle_set", 100); + circles_pub_ = nh_.advertise("circle_set", 100); camera_info_pub_ = nh_.advertise("camera_info", 100); //sets subscribers @@ -87,7 +87,7 @@ BallDetector::BallDetector() param_server_.setCallback(callback_fnc_); // web setting - param_pub_ = nh_.advertise("current_params", 1); + param_pub_ = nh_.advertise("current_params", 1); param_command_sub_ = nh_.subscribe("param_command", 1, &BallDetector::paramCommandCallback, this); set_param_client_ = nh_.advertiseService("set_param", &BallDetector::setParamCallback, this); get_param_client_ = nh_.advertiseService("get_param", &BallDetector::getParamCallback, this); @@ -233,7 +233,7 @@ void BallDetector::imageCallback(const sensor_msgs::ImageConstPtr & msg) return; } -void BallDetector::dynParamCallback(ball_detector::DetectorParamsConfig &config, uint32_t level) +void BallDetector::dynParamCallback(op3_ball_detector::DetectorParamsConfig &config, uint32_t level) { params_config_.gaussian_blur_size = config.gaussian_blur_size; params_config_.gaussian_blur_sigma = config.gaussian_blur_sigma; @@ -296,7 +296,7 @@ void BallDetector::paramCommandCallback(const std_msgs::String::ConstPtr &msg) } } -bool BallDetector::setParamCallback(ball_detector::SetParameters::Request &req, ball_detector::SetParameters::Response &res) +bool BallDetector::setParamCallback(op3_ball_detector::SetParameters::Request &req, op3_ball_detector::SetParameters::Response &res) { params_config_.gaussian_blur_size = req.params.gaussian_blur_size; params_config_.gaussian_blur_sigma = req.params.gaussian_blur_sigma; @@ -321,7 +321,7 @@ bool BallDetector::setParamCallback(ball_detector::SetParameters::Request &req, return true; } -bool BallDetector:: getParamCallback(ball_detector::GetParameters::Request &req, ball_detector::GetParameters::Response &res) +bool BallDetector:: getParamCallback(op3_ball_detector::GetParameters::Request &req, op3_ball_detector::GetParameters::Response &res) { res.returns.gaussian_blur_size = params_config_.gaussian_blur_size; res.returns.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; @@ -396,7 +396,7 @@ void BallDetector::resetParameter() void BallDetector::publishParam() { - ball_detector::BallDetectorParams params; + op3_ball_detector::BallDetectorParams params; params.gaussian_blur_size = params_config_.gaussian_blur_size; params.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; diff --git a/ball_detector/src/ball_detector_node.cpp b/op3_ball_detector/src/ball_detector_node.cpp similarity index 96% rename from ball_detector/src/ball_detector_node.cpp rename to op3_ball_detector/src/ball_detector_node.cpp index 5560d56..117127d 100644 --- a/ball_detector/src/ball_detector_node.cpp +++ b/op3_ball_detector/src/ball_detector_node.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "ball_detector/ball_detector.h" +#include "op3_ball_detector/ball_detector.h" //node main int main(int argc, char **argv) diff --git a/ball_detector/srv/GetParameters.srv b/op3_ball_detector/srv/GetParameters.srv similarity index 100% rename from ball_detector/srv/GetParameters.srv rename to op3_ball_detector/srv/GetParameters.srv diff --git a/ball_detector/srv/SetParameters.srv b/op3_ball_detector/srv/SetParameters.srv similarity index 100% rename from ball_detector/srv/SetParameters.srv rename to op3_ball_detector/srv/SetParameters.srv diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index 42445a0..381f872 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -18,7 +18,7 @@ find_package(catkin REQUIRED COMPONENTS op3_action_module_msgs cmake_modules robotis_math - ball_detector + op3_ball_detector ) find_package(Boost REQUIRED COMPONENTS thread) @@ -71,7 +71,7 @@ catkin_package( op3_action_module_msgs cmake_modules robotis_math - ball_detector + op3_ball_detector DEPENDS Boost EIGEN3 ) diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 7ec1d46..283d842 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -29,7 +29,7 @@ #include #include "robotis_controller_msgs/JointCtrlModule.h" -#include "ball_detector/CircleSetStamped.h" +#include "op3_ball_detector/CircleSetStamped.h" #include "op3_walking_module_msgs/WalkingParam.h" #include "op3_walking_module_msgs/GetWalkingParam.h" diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/op3_demo/include/op3_demo/ball_tracker.h index 5461494..e5fe9ff 100644 --- a/op3_demo/include/op3_demo/ball_tracker.h +++ b/op3_demo/include/op3_demo/ball_tracker.h @@ -29,7 +29,7 @@ #include #include "robotis_controller_msgs/JointCtrlModule.h" -#include "ball_detector/CircleSetStamped.h" +#include "op3_ball_detector/CircleSetStamped.h" #include "op3_walking_module_msgs/WalkingParam.h" #include "op3_walking_module_msgs/GetWalkingParam.h" @@ -79,7 +79,7 @@ protected: const int WAITING_THRESHOLD; const bool DEBUG_PRINT; - void ballPositionCallback(const ball_detector::CircleSetStamped::ConstPtr &msg); + void ballPositionCallback(const op3_ball_detector::CircleSetStamped::ConstPtr &msg); void ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); void publishHeadJoint(double pan, double tilt); void scanBall(); diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index 2b5281c..d6d26b4 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -4,7 +4,7 @@ - + diff --git a/op3_demo/launch/self_test.launch b/op3_demo/launch/self_test.launch index 623004e..00c9acb 100644 --- a/op3_demo/launch/self_test.launch +++ b/op3_demo/launch/self_test.launch @@ -5,7 +5,7 @@ - + diff --git a/op3_demo/package.xml b/op3_demo/package.xml index 85bd36e..1a0785c 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -24,7 +24,7 @@ op3_action_module_msgs cmake_modules robotis_math - ball_detector + op3_ball_detector boost eigen yaml-cpp diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp index 355a21c..e90bb54 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -59,7 +59,7 @@ BallTracker::~BallTracker() } -void BallTracker::ballPositionCallback(const ball_detector::CircleSetStamped::ConstPtr &msg) +void BallTracker::ballPositionCallback(const op3_ball_detector::CircleSetStamped::ConstPtr &msg) { for (int idx = 0; idx < msg->circles.size(); idx++) { From fd57628bc573a6a1aed14c84986df049ef0d13c6 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 18 Apr 2018 11:37:01 +0900 Subject: [PATCH 065/172] fixed package.xml --- robotis_op3_demo/package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robotis_op3_demo/package.xml b/robotis_op3_demo/package.xml index 7cf0810..c49be14 100644 --- a/robotis_op3_demo/package.xml +++ b/robotis_op3_demo/package.xml @@ -13,7 +13,7 @@ https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues catkin - ball_detector + op3_ball_detector op3_demo From 13a60409cc93d6da2d3b837484c52c0206b5dcc2 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 18 Apr 2018 13:11:08 +0900 Subject: [PATCH 066/172] Changing file permissions --- op3_ball_detector/cfg/DetectorParams.cfg | 0 op3_ball_detector/cfg/DetectorParamsBlue.cfg | 0 op3_ball_detector/cfg/DetectorParamsRed.cfg | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 op3_ball_detector/cfg/DetectorParams.cfg mode change 100644 => 100755 op3_ball_detector/cfg/DetectorParamsBlue.cfg mode change 100644 => 100755 op3_ball_detector/cfg/DetectorParamsRed.cfg diff --git a/op3_ball_detector/cfg/DetectorParams.cfg b/op3_ball_detector/cfg/DetectorParams.cfg old mode 100644 new mode 100755 diff --git a/op3_ball_detector/cfg/DetectorParamsBlue.cfg b/op3_ball_detector/cfg/DetectorParamsBlue.cfg old mode 100644 new mode 100755 diff --git a/op3_ball_detector/cfg/DetectorParamsRed.cfg b/op3_ball_detector/cfg/DetectorParamsRed.cfg old mode 100644 new mode 100755 From de45d7d080c848ae1d79e506ed18089fc8669de5 Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 19 Apr 2018 11:45:31 +0900 Subject: [PATCH 067/172] changed rviz config file --- op3_bringup/rviz/op3_bringup.rviz | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/op3_bringup/rviz/op3_bringup.rviz b/op3_bringup/rviz/op3_bringup.rviz index 7a00cca..cffe130 100644 --- a/op3_bringup/rviz/op3_bringup.rviz +++ b/op3_bringup/rviz/op3_bringup.rviz @@ -281,6 +281,15 @@ Visualization Manager: {} Update Interval: 0 Value: true + - Alpha: 0.200000003 + Class: rviz_plugin_tutorials/Imu + Color: 204; 51; 204 + Enabled: true + History Length: 1 + Name: Imu + Topic: /robotis/open_cr/imu + Unreliable: false + Value: true Enabled: true Global Options: Background Color: 48; 48; 48 @@ -306,7 +315,7 @@ Visualization Manager: Views: Current: Class: rviz/Orbit - Distance: 1.0015856 + Distance: 2.32116389 Enable Stereo Rendering: Stereo Eye Separation: 0.0599999987 Stereo Focal Distance: 1 @@ -321,10 +330,10 @@ Visualization Manager: Invert Z Axis: false Name: Current View Near Clip Distance: 0.00999999978 - Pitch: 0.425398082 + Pitch: 0.275397927 Target Frame: Value: Orbit (rviz) - Yaw: 5.78858471 + Yaw: 5.68858385 Saved: ~ Window Geometry: Displays: From a493ea40fe95834d8063b10e60e9ab71d3e92647 Mon Sep 17 00:00:00 2001 From: Pyo Date: Thu, 19 Apr 2018 21:37:13 +0900 Subject: [PATCH 068/172] updated the CHANGELOG and version to release binary packages --- .travis.yml | 8 +++++--- README.md | 4 +++- op3_ball_detector/CHANGELOG.rst | 12 ++++++------ op3_ball_detector/CMakeLists.txt | 1 - op3_ball_detector/package.xml | 2 +- op3_bringup/CHANGELOG.rst | 11 +++++++++++ op3_bringup/package.xml | 3 ++- op3_demo/CHANGELOG.rst | 8 ++++---- robotis_op3_demo/CHANGELOG.rst | 8 +++++--- robotis_op3_demo/package.xml | 3 ++- 10 files changed, 39 insertions(+), 21 deletions(-) create mode 100644 op3_bringup/CHANGELOG.rst diff --git a/.travis.yml b/.travis.yml index 9316a80..1e400fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,9 +18,11 @@ notifications: - pyo@robotis.com env: matrix: -# - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian + - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=ubuntu OS_CODE_NAME=xenial # - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=debian OS_CODE_NAME=jessie - - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file $ROSINSTALL_FILENAME=".robotis_op3_demo.rosinstall" +# - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file OS_NAME=ubuntu OS_CODE_NAME=xenial $ROSINSTALL_FILENAME=".robotis_op3_demo.rosinstall" +# - ROS_DISTRO=melodic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=ubuntu OS_CODE_NAME=bionic +# - ROS_DISTRO=melodic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=debian OS_CODE_NAME=stretch branches: only: - master @@ -30,4 +32,4 @@ install: - git clone https://github.com/ros-industrial/industrial_ci.git .ci_config script: - source .ci_config/travis.sh - + \ No newline at end of file diff --git a/README.md b/README.md index 51875b9..cd34832 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,8 @@ ## Wiki for robotis_op3_demo Packages - http://wiki.ros.org/robotis_op3_demo (metapackage) -- http://wiki.ros.org/ball_detector +- http://wiki.ros.org/op3_ball_detector +- http://wiki.ros.org/op3_bringup - http://wiki.ros.org/op3_demo ## Open Source related to ROBOTIS OP3 @@ -30,5 +31,6 @@ ## Documents and Videos related to ROBOTIS OP3 - [ROBOTIS e-Manual for ROBOTIS OP3](http://emanual.robotis.com/docs/en/platform/op3/introduction/) +- [ROBOTIS e-Manual for ROBOTIS THORMANG3](http://emanual.robotis.com/docs/en/platform/thormang3/introduction/) - [ROBOTIS e-Manual for ROBOTIS Framework](http://emanual.robotis.com/docs/en/software/robotis_framework_packages/) - [ROBOTIS e-Manual for Dynamixel SDK](http://emanual.robotis.com/docs/en/software/dynamixel/dynamixel_sdk/overview/) diff --git a/op3_ball_detector/CHANGELOG.rst b/op3_ball_detector/CHANGELOG.rst index 5d3764c..d00eb27 100644 --- a/op3_ball_detector/CHANGELOG.rst +++ b/op3_ball_detector/CHANGELOG.rst @@ -1,12 +1,12 @@ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package ball_detector -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package op3_ball_detector +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -0.1.0 (2018-03-30) +0.1.0 (2018-04-19) ------------------ -* first release +* first release for ROS Kinetic * added launch files in order to move the camera setting to op3_camera_setting package * added missing package in find_package() * refacoring to release -* splited repositoryfrom ROBOTIS-OP3 +* split repositoryfrom ROBOTIS-OP3 * Contributors: Kayman, Zerom, Pyo diff --git a/op3_ball_detector/CMakeLists.txt b/op3_ball_detector/CMakeLists.txt index d57df9d..9a1693d 100644 --- a/op3_ball_detector/CMakeLists.txt +++ b/op3_ball_detector/CMakeLists.txt @@ -73,7 +73,6 @@ generate_dynamic_reconfigure_options( cfg/DetectorParams.cfg ) - ################################################################################ # Declare catkin specific configuration to be passed to dependent projects ################################################################################## diff --git a/op3_ball_detector/package.xml b/op3_ball_detector/package.xml index a65ef7f..d507794 100644 --- a/op3_ball_detector/package.xml +++ b/op3_ball_detector/package.xml @@ -11,7 +11,7 @@ Kayman Zerom Pyo - http://wiki.ros.org/ball_detector + http://wiki.ros.org/op3_ball_detector http://emanual.robotis.com/docs/en/platform/op3/introduction/ https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues diff --git a/op3_bringup/CHANGELOG.rst b/op3_bringup/CHANGELOG.rst new file mode 100644 index 0000000..bcad6b2 --- /dev/null +++ b/op3_bringup/CHANGELOG.rst @@ -0,0 +1,11 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package op3_bringup +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.1.0 (2018-04-19) +------------------ +* first release for ROS Kinetic +* updated CMakeLists.txt and package.xml of op3_bringup +* changed rviz config file +* refacoring to release +* Contributors: Kayman, Pyo diff --git a/op3_bringup/package.xml b/op3_bringup/package.xml index a185bc1..3161ae0 100644 --- a/op3_bringup/package.xml +++ b/op3_bringup/package.xml @@ -1,7 +1,7 @@ op3_bringup - 0.0.1 + 0.1.0 This package is a demo for first time users. There is an example in the demo where you can run and visualize the robot. @@ -15,6 +15,7 @@ https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues catkin op3_manager + op3_description usb_cam joint_state_publisher robot_state_publisher diff --git a/op3_demo/CHANGELOG.rst b/op3_demo/CHANGELOG.rst index 62ead4d..c28f305 100644 --- a/op3_demo/CHANGELOG.rst +++ b/op3_demo/CHANGELOG.rst @@ -2,11 +2,11 @@ Changelog for package op3_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -0.1.0 (2018-03-30) +0.1.0 (2018-04-19) ------------------ -* first release +* first release for ROS Kinetic * added launch files in order to move the camera setting to op3_camera_setting package * added missing package in find_package() * refacoring to release -* splited repositoryfrom ROBOTIS-OP3 -* Contributors: Kayman, Yoshimaru Tanaka, Pyo +* split repositoryfrom ROBOTIS-OP3 +* Contributors: Kayman, Zerom, Yoshimaru Tanaka, Pyo diff --git a/robotis_op3_demo/CHANGELOG.rst b/robotis_op3_demo/CHANGELOG.rst index b65724b..c761f4a 100644 --- a/robotis_op3_demo/CHANGELOG.rst +++ b/robotis_op3_demo/CHANGELOG.rst @@ -2,11 +2,13 @@ Changelog for package robotis_op3_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -0.1.0 (2018-03-30) +0.1.0 (2018-04-19) ------------------ -* first release +* first release for ROS Kinetic * added launch files in order to move the camera setting to op3_camera_setting package * added missing package in find_package() +* updated CMakeLists.txt and package.xml of op3_bringup +* changed rviz config file * refacoring to release -* splited repositoryfrom ROBOTIS-OP3 +* split repositoryfrom ROBOTIS-OP3 * Contributors: Kayman, Zerom, Yoshimaru Tanaka, Pyo diff --git a/robotis_op3_demo/package.xml b/robotis_op3_demo/package.xml index c49be14..83e6185 100644 --- a/robotis_op3_demo/package.xml +++ b/robotis_op3_demo/package.xml @@ -12,8 +12,9 @@ http://emanual.robotis.com/docs/en/platform/op3/introduction/ https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues - catkin + catkin op3_ball_detector + op3_bringup op3_demo From b3fc340166660595c1683583a6dfcc829a62d27e Mon Sep 17 00:00:00 2001 From: Kayman Date: Mon, 23 Apr 2018 17:30:34 +0900 Subject: [PATCH 069/172] added proto type of demo for read-write tutorial --- op3_read_write_demo/CMakeLists.txt | 80 ++++++++ op3_read_write_demo/package.xml | 24 +++ op3_read_write_demo/src/read_write.cpp | 245 +++++++++++++++++++++++++ 3 files changed, 349 insertions(+) create mode 100644 op3_read_write_demo/CMakeLists.txt create mode 100644 op3_read_write_demo/package.xml create mode 100644 op3_read_write_demo/src/read_write.cpp diff --git a/op3_read_write_demo/CMakeLists.txt b/op3_read_write_demo/CMakeLists.txt new file mode 100644 index 0000000..dd81d23 --- /dev/null +++ b/op3_read_write_demo/CMakeLists.txt @@ -0,0 +1,80 @@ +################################################################################ +# Set minimum required version of cmake, project name and compile options +################################################################################ +cmake_minimum_required(VERSION 2.8.3) +project(op3_read_write_demo) + +################################################################################ +# Find catkin packages and libraries for catkin and system dependencies +################################################################################ +find_package(catkin REQUIRED COMPONENTS + robotis_controller_msgs + roscpp + sensor_msgs + std_msgs +) + +################################################################################ +# Setup for python modules and scripts +################################################################################ + +################################################################################ +# Declare ROS messages, services and actions +################################################################################ + +################################################################################ +# Declare ROS dynamic reconfigure parameters +################################################################################ + +################################################################################ +# Declare catkin specific configuration to be passed to dependent projects +################################################################################ +catkin_package( + INCLUDE_DIRS include + CATKIN_DEPENDS + roscpp + robotis_controller_msgs + roscpp + sensor_msgs + std_msgs +) + +################################################################################ +# Build +################################################################################ +include_directories( + include + ${catkin_INCLUDE_DIRS} +) + +add_executable(read_write + src/read_write.cpp +) + +add_dependencies(read_write + ${${PROJECT_NAME}_EXPORTED_TARGETS} + ${catkin_EXPORTED_TARGETS} +) + +target_link_libraries(read_write + ${catkin_LIBRARIES} +) + +################################################################################ +# Install +################################################################################ +install(TARGETS read_write + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) + +install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +) + +install(DIRECTORY data launch list + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +) + +################################################################################ +# Test +################################################################################ diff --git a/op3_read_write_demo/package.xml b/op3_read_write_demo/package.xml new file mode 100644 index 0000000..28accf9 --- /dev/null +++ b/op3_read_write_demo/package.xml @@ -0,0 +1,24 @@ + + + op3_read_write_demo + 0.0.1 + + The op3_read_write_demo package + + + + Apache 2.0 + Kayman + Pyo + http://wiki.ros.org/op3_demo + http://emanual.robotis.com/docs/en/platform/op3/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues + catkin + roscpp + std_msgs + sensor_msgs + robotis_controller_msgs + op3_manager + + \ No newline at end of file diff --git a/op3_read_write_demo/src/read_write.cpp b/op3_read_write_demo/src/read_write.cpp new file mode 100644 index 0000000..e893ca6 --- /dev/null +++ b/op3_read_write_demo/src/read_write.cpp @@ -0,0 +1,245 @@ +/******************************************************************************* +* Copyright 2017 ROBOTIS CO., LTD. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ + +/* Author: Kayman Jung */ + +#include +#include +#include + +#include "robotis_controller_msgs/SetModule.h" +#include "robotis_controller_msgs/SyncWriteItem.h" + +void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); +void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg); +void setModule(const std::string& module_name); +void goInitPose(); +void setLED(int led); +bool checkManagerRunning(std::string& manager_name); +void torqueOnAll(); +void torqueOff(const std::string& body_side); + +const int SPIN_RATE = 30; +const bool DEBUG_PRINT = false; + +ros::Publisher init_pose_pub; +//ros::Publisher play_sound_pub; +ros::Publisher sync_write_pub; +ros::Publisher dxl_torque_pub; +ros::Publisher write_joint_pub; +ros::Subscriber buttuon_sub; +ros::Subscriber read_joint_sub; + +ros::ServiceClient set_joint_module_client; + +//std::string default_mp3_path = ""; +bool demo_ready = false; + +//node main +int main(int argc, char **argv) +{ + //init ros + ros::init(argc, argv, "read_write"); + + ros::NodeHandle nh(ros::this_node::getName()); + + init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); + // play_sound_pub = nh.advertise("/play_sound_file", 0); + sync_write_pub = nh.advertise("/robotis/sync_write_item", 0); + dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); + write_joint_pub = nh.advertise("/robotis/direct_control/set_joint_states", 0); + + read_joint_sub = nh.subscribe("/robotis/present_joint_ctrl_modules", 1, jointstatesCallback); + buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + + // default_mp3_path = ros::package::getPath("op3_demo") + "/data/mp3/"; + + // service + set_joint_module_client = nh.serviceClient("/robotis/set_present_ctrl_modules"); + + ros::start(); + + //set node loop rate + ros::Rate loop_rate(SPIN_RATE); + + // wait for starting of manager + std::string manager_name = "/op3_manager"; + while (ros::ok()) + { + ros::Duration(1.0).sleep(); + + if (checkManagerRunning(manager_name) == true) + { + break; + ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); + } + ROS_WARN("Waiting for op3 manager"); + } + + // init procedure + goInitPose(); + + // turn on R/G/B LED [0x01 | 0x02 | 0x04] + setLED(0x01); + + // change the module to direct_control for demo + setModule("direct_control"); + + // torque off : right arm + torqueOff("right"); + + demo_ready = true; + + //node loop + while (ros::ok()) + { + // process + + + //execute pending callbacks + ros::spinOnce(); + + //relax to fit output rate + loop_rate.sleep(); + } + + //exit program + return 0; +} + +void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) +{ + // if (msg->data == "mode_long") + // else if (msg->data == "user_long") + // if (msg->data == "start") + // else if (msg->data == "mode") +} + +void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg) +{ + if(demo_ready == false) + return; + + sensor_msgs::JointState write_msg; + for(int ix = 0; ix < msg->name.size(); ix++) + { + std::string joint_name = msg->name[ix]; + double joint_position = msg->position[ix]; + + if(joint_name == "r_sho_pitch") + { + write_msg.name.push_back("r_sho_pitch"); + write_msg.position.push_back(-joint_position); + } + if(joint_name == "r_sho_roll") + { + write_msg.name.push_back("l_sho_roll"); + write_msg.position.push_back(-joint_position); + } + if(joint_name == "r_el") + { + write_msg.name.push_back("l_el"); + write_msg.position.push_back(-joint_position); + } + } + + write_joint_pub.publish(write_msg); +} + +void goInitPose() +{ + std_msgs::String init_msg; + init_msg.data = "ini_pose"; + + init_pose_pub.publish(init_msg); +} + +void setLED(int led) +{ + robotis_controller_msgs::SyncWriteItem syncwrite_msg; + syncwrite_msg.item_name = "LED"; + syncwrite_msg.joint_name.push_back("open-cr"); + syncwrite_msg.value.push_back(led); + + sync_write_pub.publish(syncwrite_msg); +} + +bool checkManagerRunning(std::string& manager_name) +{ + std::vector node_list; + ros::master::getNodes(node_list); + + for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); node_list_idx++) + { + if (node_list[node_list_idx] == manager_name) + return true; + } + + ROS_ERROR("Can't find op3_manager"); + return false; +} + +void setModule(const std::string& module_name) +{ + robotis_controller_msgs::SetModule set_module_srv; + set_module_srv.request.module_name = module_name; + + if (set_joint_module_client.call(set_module_srv) == false) + { + ROS_ERROR("Failed to set module"); + return; + } + + return ; +} + +void torqueOnAll() +{ + std_msgs::String check_msg; + check_msg.data = "check"; + + dxl_torque_pub.publish(check_msg); +} + +void torqueOff(const std::string& body_side) +{ + robotis_controller_msgs::SyncWriteItem syncwrite_msg; + int torque_value = 0; + syncwrite_msg.item_name = "torque_enable"; + + if(body_side == "right") + { + syncwrite_msg.joint_name.push_back("r_sho_pitch"); + syncwrite_msg.value.push_back(torque_value); + syncwrite_msg.joint_name.push_back("r_sho_roll"); + syncwrite_msg.value.push_back(torque_value); + syncwrite_msg.joint_name.push_back("r_el"); + syncwrite_msg.value.push_back(torque_value); + } + else if(body_side == "left") + { + syncwrite_msg.joint_name.push_back("l_sho_pitch"); + syncwrite_msg.value.push_back(torque_value); + syncwrite_msg.joint_name.push_back("l_sho_roll"); + syncwrite_msg.value.push_back(torque_value); + syncwrite_msg.joint_name.push_back("l_el"); + syncwrite_msg.value.push_back(torque_value); + } + else + return; + + sync_write_pub.publish(syncwrite_msg); +} From 88db47aa8870e2e12255f4abca707b4ef1aa923d Mon Sep 17 00:00:00 2001 From: Kayman Date: Mon, 23 Apr 2018 17:36:17 +0900 Subject: [PATCH 070/172] added check point for debuging --- op3_read_write_demo/src/read_write.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/op3_read_write_demo/src/read_write.cpp b/op3_read_write_demo/src/read_write.cpp index e893ca6..673dba7 100644 --- a/op3_read_write_demo/src/read_write.cpp +++ b/op3_read_write_demo/src/read_write.cpp @@ -101,7 +101,7 @@ int main(int argc, char **argv) // torque off : right arm torqueOff("right"); - demo_ready = true; +// demo_ready = true; //node loop while (ros::ok()) @@ -124,8 +124,10 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) { // if (msg->data == "mode_long") // else if (msg->data == "user_long") - // if (msg->data == "start") - // else if (msg->data == "mode") + if (msg->data == "start") + demo_ready = false; + else if (msg->data == "mode") + demo_ready = true; } void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg) From 5a6c1c61b21e3faf4c5866a902e3cb54a3fce1e7 Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 26 Apr 2018 16:20:24 +0900 Subject: [PATCH 071/172] added op3_read_write.launch modified op3_read_write --- op3_read_write_demo/CMakeLists.txt | 2 +- .../launch/op3_read_write.launch | 24 ++++ op3_read_write_demo/src/read_write.cpp | 116 +++++++++++++----- 3 files changed, 111 insertions(+), 31 deletions(-) create mode 100644 op3_read_write_demo/launch/op3_read_write.launch diff --git a/op3_read_write_demo/CMakeLists.txt b/op3_read_write_demo/CMakeLists.txt index dd81d23..e89ed48 100644 --- a/op3_read_write_demo/CMakeLists.txt +++ b/op3_read_write_demo/CMakeLists.txt @@ -71,7 +71,7 @@ install(DIRECTORY include/${PROJECT_NAME}/ DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} ) -install(DIRECTORY data launch list +install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) diff --git a/op3_read_write_demo/launch/op3_read_write.launch b/op3_read_write_demo/launch/op3_read_write.launch new file mode 100644 index 0000000..1089706 --- /dev/null +++ b/op3_read_write_demo/launch/op3_read_write.launch @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/op3_read_write_demo/src/read_write.cpp b/op3_read_write_demo/src/read_write.cpp index 673dba7..9511c22 100644 --- a/op3_read_write_demo/src/read_write.cpp +++ b/op3_read_write_demo/src/read_write.cpp @@ -25,6 +25,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg); +void readyToDemo(); void setModule(const std::string& module_name); void goInitPose(); void setLED(int led); @@ -32,20 +33,27 @@ bool checkManagerRunning(std::string& manager_name); void torqueOnAll(); void torqueOff(const std::string& body_side); +enum ControlModule +{ + None = 0, + Framework = 1, + DirectControlModule = 2, +}; + const int SPIN_RATE = 30; const bool DEBUG_PRINT = false; ros::Publisher init_pose_pub; -//ros::Publisher play_sound_pub; ros::Publisher sync_write_pub; ros::Publisher dxl_torque_pub; ros::Publisher write_joint_pub; +ros::Publisher write_joint_pub2; ros::Subscriber buttuon_sub; ros::Subscriber read_joint_sub; ros::ServiceClient set_joint_module_client; -//std::string default_mp3_path = ""; +int control_module = None; bool demo_ready = false; //node main @@ -57,16 +65,14 @@ int main(int argc, char **argv) ros::NodeHandle nh(ros::this_node::getName()); init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); - // play_sound_pub = nh.advertise("/play_sound_file", 0); sync_write_pub = nh.advertise("/robotis/sync_write_item", 0); dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); - write_joint_pub = nh.advertise("/robotis/direct_control/set_joint_states", 0); + write_joint_pub = nh.advertise("/robotis/set_joint_states", 0); + write_joint_pub2 = nh.advertise("/robotis/direct_control/set_joint_states", 0); - read_joint_sub = nh.subscribe("/robotis/present_joint_ctrl_modules", 1, jointstatesCallback); + read_joint_sub = nh.subscribe("/robotis/present_joint_states", 1, jointstatesCallback); buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); - // default_mp3_path = ros::package::getPath("op3_demo") + "/data/mp3/"; - // service set_joint_module_client = nh.serviceClient("/robotis/set_present_ctrl_modules"); @@ -75,7 +81,7 @@ int main(int argc, char **argv) //set node loop rate ros::Rate loop_rate(SPIN_RATE); - // wait for starting of manager + // wait for starting of op3_manager std::string manager_name = "/op3_manager"; while (ros::ok()) { @@ -89,26 +95,13 @@ int main(int argc, char **argv) ROS_WARN("Waiting for op3 manager"); } - // init procedure - goInitPose(); - - // turn on R/G/B LED [0x01 | 0x02 | 0x04] - setLED(0x01); - - // change the module to direct_control for demo - setModule("direct_control"); - - // torque off : right arm - torqueOff("right"); - -// demo_ready = true; + readyToDemo(); //node loop while (ros::ok()) { // process - //execute pending callbacks ros::spinOnce(); @@ -122,20 +115,36 @@ int main(int argc, char **argv) void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) { - // if (msg->data == "mode_long") - // else if (msg->data == "user_long") - if (msg->data == "start") - demo_ready = false; - else if (msg->data == "mode") - demo_ready = true; + // starting demo using robotis_controller + if (msg->data == "start") + { + control_module = Framework; + ROS_INFO("Button : start | Framework"); + readyToDemo(); + } + // starting demo using direct_control_module + else if (msg->data == "mode") + { + control_module = DirectControlModule; + ROS_INFO("Button : mode | Direct control module"); + readyToDemo(); + } + // torque on all joints of ROBOTIS-OP3 + else if (msg->data == "user") + { + torqueOnAll(); + control_module = None; + } } void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg) { - if(demo_ready == false) + if(control_module == None) return; sensor_msgs::JointState write_msg; + write_msg.header = msg->header; + for(int ix = 0; ix < msg->name.size(); ix++) { std::string joint_name = msg->name[ix]; @@ -144,21 +153,68 @@ void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg) if(joint_name == "r_sho_pitch") { write_msg.name.push_back("r_sho_pitch"); + write_msg.position.push_back(joint_position); + write_msg.name.push_back("l_sho_pitch"); write_msg.position.push_back(-joint_position); } if(joint_name == "r_sho_roll") { + write_msg.name.push_back("r_sho_roll"); + write_msg.position.push_back(joint_position); write_msg.name.push_back("l_sho_roll"); write_msg.position.push_back(-joint_position); } if(joint_name == "r_el") { + write_msg.name.push_back("r_el"); + write_msg.position.push_back(joint_position); write_msg.name.push_back("l_el"); write_msg.position.push_back(-joint_position); } } - write_joint_pub.publish(write_msg); + if(control_module == Framework) + write_joint_pub.publish(write_msg); + else if(control_module == DirectControlModule) + write_joint_pub2.publish(write_msg); +} + +void readyToDemo() +{ + ROS_INFO("Start Read-Write Demo"); + // turn off LED + setLED(0x04); + + torqueOnAll(); + ROS_INFO("Torque on All joints"); + + // send message for going init posture + goInitPose(); + ROS_INFO("Go Init pose"); + + // wait while ROBOTIS-OP3 goes to the init posture. + ros::Duration(4.0).sleep(); + + // turn on R/G/B LED [0x01 | 0x02 | 0x04] + setLED(control_module); + + // change the module for demo + if(control_module == Framework) + { + setModule("none"); + ROS_INFO("Change module to none"); + } + else if(control_module == DirectControlModule) + { + setModule("direct_control_module"); + ROS_INFO("Change module to direct_control_module"); + } + else + return; + + // torque off : right arm + torqueOff("right"); + ROS_INFO("Torque off"); } void goInitPose() From f9e2bded67d7050c68228b2e5990686fe2b77507 Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 26 Apr 2018 16:23:48 +0900 Subject: [PATCH 072/172] deleted include in op3_read_write_demo/CMakeLists.txt --- op3_read_write_demo/CMakeLists.txt | 3 +-- op3_read_write_demo/package.xml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/op3_read_write_demo/CMakeLists.txt b/op3_read_write_demo/CMakeLists.txt index e89ed48..5198ec8 100644 --- a/op3_read_write_demo/CMakeLists.txt +++ b/op3_read_write_demo/CMakeLists.txt @@ -30,7 +30,7 @@ find_package(catkin REQUIRED COMPONENTS # Declare catkin specific configuration to be passed to dependent projects ################################################################################ catkin_package( - INCLUDE_DIRS include + INCLUDE_DIRS CATKIN_DEPENDS roscpp robotis_controller_msgs @@ -43,7 +43,6 @@ catkin_package( # Build ################################################################################ include_directories( - include ${catkin_INCLUDE_DIRS} ) diff --git a/op3_read_write_demo/package.xml b/op3_read_write_demo/package.xml index 28accf9..3d7c712 100644 --- a/op3_read_write_demo/package.xml +++ b/op3_read_write_demo/package.xml @@ -5,7 +5,6 @@ The op3_read_write_demo package - Apache 2.0 Kayman @@ -21,4 +20,4 @@ robotis_controller_msgs op3_manager - \ No newline at end of file + From 2f3311d5eaad2dbf5955b3afaaa40ba593309bca Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 3 May 2018 16:05:02 +0900 Subject: [PATCH 073/172] added comments --- .../launch/op3_read_write.launch | 32 +++++++++---------- op3_read_write_demo/src/read_write.cpp | 2 ++ 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/op3_read_write_demo/launch/op3_read_write.launch b/op3_read_write_demo/launch/op3_read_write.launch index 1089706..01217ff 100644 --- a/op3_read_write_demo/launch/op3_read_write.launch +++ b/op3_read_write_demo/launch/op3_read_write.launch @@ -1,24 +1,24 @@ - - + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + diff --git a/op3_read_write_demo/src/read_write.cpp b/op3_read_write_demo/src/read_write.cpp index 9511c22..2f2dc66 100644 --- a/op3_read_write_demo/src/read_write.cpp +++ b/op3_read_write_demo/src/read_write.cpp @@ -150,6 +150,7 @@ void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg) std::string joint_name = msg->name[ix]; double joint_position = msg->position[ix]; + // mirror and copy joint angles from right to left if(joint_name == "r_sho_pitch") { write_msg.name.push_back("r_sho_pitch"); @@ -173,6 +174,7 @@ void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg) } } + // publish a message to set the joint angles if(control_module == Framework) write_joint_pub.publish(write_msg); else if(control_module == DirectControlModule) From 1e7f6b247909460c603c18cf698018108e741711 Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 3 May 2018 16:19:26 +0900 Subject: [PATCH 074/172] fixed wrong CMakeLists.txt --- op3_read_write_demo/CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/op3_read_write_demo/CMakeLists.txt b/op3_read_write_demo/CMakeLists.txt index 5198ec8..8826d03 100644 --- a/op3_read_write_demo/CMakeLists.txt +++ b/op3_read_write_demo/CMakeLists.txt @@ -66,10 +66,6 @@ install(TARGETS read_write RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) -install(DIRECTORY include/${PROJECT_NAME}/ - DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} -) - install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) From 6c28e17e48bb208de09cb9f8d69b5ffc14d13321 Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 31 May 2018 10:23:31 +0900 Subject: [PATCH 075/172] changed a button to operate --- op3_read_write_demo/src/read_write.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/op3_read_write_demo/src/read_write.cpp b/op3_read_write_demo/src/read_write.cpp index 2f2dc66..1b87dc4 100644 --- a/op3_read_write_demo/src/read_write.cpp +++ b/op3_read_write_demo/src/read_write.cpp @@ -36,8 +36,8 @@ void torqueOff(const std::string& body_side); enum ControlModule { None = 0, - Framework = 1, - DirectControlModule = 2, + DirectControlModule = 1, + Framework = 2, }; const int SPIN_RATE = 30; @@ -116,17 +116,17 @@ int main(int argc, char **argv) void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) { // starting demo using robotis_controller - if (msg->data == "start") + if (msg->data == "mode") { control_module = Framework; - ROS_INFO("Button : start | Framework"); + ROS_INFO("Button : mode | Framework"); readyToDemo(); } // starting demo using direct_control_module - else if (msg->data == "mode") + else if (msg->data == "start") { control_module = DirectControlModule; - ROS_INFO("Button : mode | Direct control module"); + ROS_INFO("Button : start | Direct control module"); readyToDemo(); } // torque on all joints of ROBOTIS-OP3 From 58a62c0721c4d1bd7404475a5423679d1fc4520f Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 7 Sep 2018 10:42:05 +0900 Subject: [PATCH 076/172] added a process thread for ball tracking --- op3_demo/include/op3_demo/soccer_demo.h | 4 +- op3_demo/src/soccer/soccer_demo.cpp | 52 +++++++++++++++++++++---- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index a771eda..f5f6df4 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -72,6 +72,7 @@ class SoccerDemo : public OPDemo void processThread(); void callbackThread(); + void trackingThread(); void setBodyModuleToDemo(const std::string &body_module, bool with_head_control = true); void setModuleToDemo(const std::string &module_name); @@ -114,7 +115,8 @@ class SoccerDemo : public OPDemo bool is_grass_; int wait_count_; - bool on_following_ball_; + bool on_following_ball_; + bool on_tracking_ball_; bool restart_soccer_; bool start_following_; bool stop_following_; diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 0565152..fd50c70 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -28,6 +28,7 @@ SoccerDemo::SoccerDemo() DEBUG_PRINT(false), wait_count_(0), on_following_ball_(false), + on_tracking_ball_(false), restart_soccer_(false), start_following_(false), stop_following_(false), @@ -48,6 +49,7 @@ SoccerDemo::SoccerDemo() boost::thread queue_thread = boost::thread(boost::bind(&SoccerDemo::callbackThread, this)); boost::thread process_thread = boost::thread(boost::bind(&SoccerDemo::processThread, this)); + boost::thread tracking_thread = boost::thread(boost::bind(&SoccerDemo::trackingThread, this)); is_grass_ = nh.param("grass_demo", false); } @@ -73,6 +75,7 @@ void SoccerDemo::setDemoDisable() enable_ = false; wait_count_ = 0; on_following_ball_ = false; + on_tracking_ball_ = false; restart_soccer_ = false; start_following_ = false; stop_following_ = false; @@ -87,9 +90,9 @@ void SoccerDemo::process() return; // ball tracking - int tracking_status; + int tracking_status = tracking_status_; - tracking_status = ball_tracker_.processTracking(); + //tracking_status = ball_tracker_.processTracking(); // check to start if (start_following_ == true) @@ -120,22 +123,22 @@ void SoccerDemo::process() { case BallTracker::Found: ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall(), 0.0); - if(tracking_status_ != tracking_status) - setRGBLED(0x1F, 0x1F, 0x1F); +// if(tracking_status_ != tracking_status) +// setRGBLED(0x1F, 0x1F, 0x1F); break; case BallTracker::NotFound: ball_follower_.waitFollowing(); - if(tracking_status_ != tracking_status) - setRGBLED(0, 0, 0); +// if(tracking_status_ != tracking_status) +// setRGBLED(0, 0, 0); break; default: break; } - if(tracking_status != tracking_status_) - tracking_status_ = tracking_status; +// if(tracking_status != tracking_status_) +// tracking_status_ = tracking_status; } // check fallen states @@ -219,6 +222,37 @@ void SoccerDemo::callbackThread() } } +void SoccerDemo::trackingThread() +{ + if(enable_ == false || on_tracking_ball_ == false) + return; + + // ball tracking + int tracking_status; + + tracking_status = ball_tracker_.processTracking(); + + // set led + switch(tracking_status) + { + case BallTracker::Found: + if(tracking_status_ != tracking_status) + setRGBLED(0x1F, 0x1F, 0x1F); + break; + + case BallTracker::NotFound: + if(tracking_status_ != tracking_status) + setRGBLED(0, 0, 0); + break; + + default: + break; + } + + if(tracking_status != tracking_status_) + tracking_status_ = tracking_status; +} + void SoccerDemo::setBodyModuleToDemo(const std::string &body_module, bool with_head_control) { robotis_controller_msgs::JointCtrlModule control_msg; @@ -436,6 +470,7 @@ void SoccerDemo::startSoccerMode() ROS_INFO("Start Soccer Demo"); on_following_ball_ = true; + on_tracking_ball_ = true; start_following_ = true; } @@ -443,6 +478,7 @@ void SoccerDemo::stopSoccerMode() { ROS_INFO("Stop Soccer Demo"); on_following_ball_ = false; + on_tracking_ball_ = false; stop_following_ = true; } From 879366f23e2ea588ebadcf711fe1a0f9d10a2eeb Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 7 Sep 2018 11:54:15 +0900 Subject: [PATCH 077/172] fixed bug in tracking thread --- op3_demo/src/soccer/soccer_demo.cpp | 66 +++++++++++++++++------------ 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index fd50c70..557ea00 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -123,22 +123,22 @@ void SoccerDemo::process() { case BallTracker::Found: ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall(), 0.0); -// if(tracking_status_ != tracking_status) -// setRGBLED(0x1F, 0x1F, 0x1F); + // if(tracking_status_ != tracking_status) + // setRGBLED(0x1F, 0x1F, 0x1F); break; case BallTracker::NotFound: ball_follower_.waitFollowing(); -// if(tracking_status_ != tracking_status) -// setRGBLED(0, 0, 0); + // if(tracking_status_ != tracking_status) + // setRGBLED(0, 0, 0); break; default: break; } -// if(tracking_status != tracking_status_) -// tracking_status_ = tracking_status; + // if(tracking_status != tracking_status_) + // tracking_status_ = tracking_status; } // check fallen states @@ -224,33 +224,47 @@ void SoccerDemo::callbackThread() void SoccerDemo::trackingThread() { - if(enable_ == false || on_tracking_ball_ == false) - return; - // ball tracking - int tracking_status; + //set node loop rate + ros::Rate loop_rate(SPIN_RATE); - tracking_status = ball_tracker_.processTracking(); + ball_tracker_.startTracking(); - // set led - switch(tracking_status) + //node loop + while (ros::ok()) { - case BallTracker::Found: - if(tracking_status_ != tracking_status) - setRGBLED(0x1F, 0x1F, 0x1F); - break; - case BallTracker::NotFound: - if(tracking_status_ != tracking_status) - setRGBLED(0, 0, 0); - break; + if(enable_ == false || on_tracking_ball_ == false) + return; - default: - break; + // ball tracking + int tracking_status; + + tracking_status = ball_tracker_.processTracking(); + + // set led + switch(tracking_status) + { + case BallTracker::Found: + if(tracking_status_ != tracking_status) + setRGBLED(0x1F, 0x1F, 0x1F); + break; + + case BallTracker::NotFound: + if(tracking_status_ != tracking_status) + setRGBLED(0, 0, 0); + break; + + default: + break; + } + + if(tracking_status != tracking_status_) + tracking_status_ = tracking_status; + + //relax to fit output rate + loop_rate.sleep(); } - - if(tracking_status != tracking_status_) - tracking_status_ = tracking_status; } void SoccerDemo::setBodyModuleToDemo(const std::string &body_module, bool with_head_control) From 169cfefccae270daa72aac66b815b06954c9b0a9 Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 7 Sep 2018 13:16:54 +0900 Subject: [PATCH 078/172] fixed bug. --- op3_demo/src/soccer/soccer_demo.cpp | 47 ++++++++++++++--------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 557ea00..6f8d99e 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -234,34 +234,33 @@ void SoccerDemo::trackingThread() while (ros::ok()) { - if(enable_ == false || on_tracking_ball_ == false) - return; - - // ball tracking - int tracking_status; - - tracking_status = ball_tracker_.processTracking(); - - // set led - switch(tracking_status) + if(enable_ == true && on_tracking_ball_ == true) { - case BallTracker::Found: - if(tracking_status_ != tracking_status) - setRGBLED(0x1F, 0x1F, 0x1F); - break; + // ball tracking + int tracking_status; - case BallTracker::NotFound: - if(tracking_status_ != tracking_status) - setRGBLED(0, 0, 0); - break; + tracking_status = ball_tracker_.processTracking(); - default: - break; + // set led + switch(tracking_status) + { + case BallTracker::Found: + if(tracking_status_ != tracking_status) + setRGBLED(0x1F, 0x1F, 0x1F); + break; + + case BallTracker::NotFound: + if(tracking_status_ != tracking_status) + setRGBLED(0, 0, 0); + break; + + default: + break; + } + + if(tracking_status != tracking_status_) + tracking_status_ = tracking_status; } - - if(tracking_status != tracking_status_) - tracking_status_ = tracking_status; - //relax to fit output rate loop_rate.sleep(); } From ebaf7f9e2193a56a31b58c1593b19e847f061116 Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 7 Sep 2018 17:36:15 +0900 Subject: [PATCH 079/172] added that a head goes init when OP3 stop tracking the ball. --- op3_demo/include/op3_demo/ball_tracker.h | 2 ++ op3_demo/src/soccer/ball_tracker.cpp | 18 +++++++++++++++++- op3_demo/src/soccer/soccer_demo.cpp | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/op3_demo/include/op3_demo/ball_tracker.h index e5fe9ff..383c809 100644 --- a/op3_demo/include/op3_demo/ball_tracker.h +++ b/op3_demo/include/op3_demo/ball_tracker.h @@ -56,6 +56,7 @@ public: void stopTracking(); void setUsingHeadScan(bool use_scan); + void goInit(); double getPanOfBall() { @@ -89,6 +90,7 @@ protected: //image publisher/subscriber ros::Publisher module_control_pub_; + ros::Publisher head_joint_offset_pub_; ros::Publisher head_joint_pub_; ros::Publisher head_scan_pub_; diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp index e90bb54..a1706ad 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -45,7 +45,8 @@ BallTracker::BallTracker() ROS_INFO_STREAM("Ball tracking Gain : " << p_gain_ << ", " << i_gain_ << ", " << d_gain_); - head_joint_pub_ = nh_.advertise("/robotis/head_control/set_joint_states_offset", 0); + head_joint_offset_pub_ = nh_.advertise("/robotis/head_control/set_joint_states_offset", 0); + head_joint_pub_ = nh_.advertise("/robotis/head_control/set_joint_states", 0); head_scan_pub_ = nh_.advertise("/robotis/head_control/scan_command", 0); // error_pub_ = nh_.advertise("/ball_tracker/errors", 0); @@ -97,6 +98,8 @@ void BallTracker::startTracking() void BallTracker::stopTracking() { + goInit(); + on_tracking_ = false; ROS_INFO_COND(DEBUG_PRINT, "Stop Ball tracking"); @@ -246,6 +249,19 @@ void BallTracker::publishHeadJoint(double pan, double tilt) head_angle_msg.position.push_back(pan); head_angle_msg.position.push_back(tilt); + head_joint_offset_pub_.publish(head_angle_msg); +} + +void BallTracker::goInit() +{ + sensor_msgs::JointState head_angle_msg; + + head_angle_msg.name.push_back("head_pan"); + head_angle_msg.name.push_back("head_tilt"); + + head_angle_msg.position.push_back(0.0); + head_angle_msg.position.push_back(0.0); + head_joint_pub_.publish(head_angle_msg); } diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 6f8d99e..cf5db3c 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -497,12 +497,12 @@ void SoccerDemo::stopSoccerMode() void SoccerDemo::handleKick(int ball_position) { - usleep(1000 * 1000); + usleep(1500 * 1000); // change to motion module setModuleToDemo("action_module"); - usleep(1500 * 1000); + //usleep(1500 * 1000); if (handleFallen(stand_state_) == true || enable_ == false) return; From bcd6463683da84edc2181661223132d0a4028895 Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 28 Sep 2018 16:34:51 +0900 Subject: [PATCH 080/172] changed a header file - added index(out of range) to ball status. --- op3_demo/include/op3_demo/ball_follower.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 283d842..29857db 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -43,8 +43,9 @@ class BallFollower enum { NotFound = 0, - OnRight = 1, - OnLeft = 2, + OutOfRange = 1, + OnRight = 2, + OnLeft = 3, }; BallFollower(); From 285c79b95a163d4b9fd790e608827883ddb0d21f Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 28 Sep 2018 17:31:22 +0900 Subject: [PATCH 081/172] deleted unused code. --- op3_demo/src/soccer/soccer_demo.cpp | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index cf5db3c..37e2c3f 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -89,11 +89,6 @@ void SoccerDemo::process() if(enable_ == false) return; - // ball tracking - int tracking_status = tracking_status_; - - //tracking_status = ball_tracker_.processTracking(); - // check to start if (start_following_ == true) { @@ -119,26 +114,19 @@ void SoccerDemo::process() // ball following if (on_following_ball_ == true) { - switch(tracking_status) + switch(tracking_status_) { case BallTracker::Found: ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall(), 0.0); - // if(tracking_status_ != tracking_status) - // setRGBLED(0x1F, 0x1F, 0x1F); break; case BallTracker::NotFound: ball_follower_.waitFollowing(); - // if(tracking_status_ != tracking_status) - // setRGBLED(0, 0, 0); break; default: break; } - - // if(tracking_status != tracking_status_) - // tracking_status_ = tracking_status; } // check fallen states From fc60e6af43c47c9ff5ca4db0200a8bad7799f8da Mon Sep 17 00:00:00 2001 From: Kayman Date: Fri, 28 Sep 2018 17:38:40 +0900 Subject: [PATCH 082/172] changed folder name --- op3_demo/data/mp3/Autonomous soccer mode.mp3 | Bin 0 -> 13287 bytes op3_demo/data/mp3/Bye bye.mp3 | Bin 0 -> 8271 bytes op3_demo/data/mp3/Clap please.mp3 | Bin 0 -> 8741 bytes op3_demo/data/mp3/Demonstration ready mode.mp3 | Bin 0 -> 13443 bytes op3_demo/data/mp3/Headstand.mp3 | Bin 0 -> 8428 bytes op3_demo/data/mp3/Interactive motion mode.mp3 | Bin 0 -> 13287 bytes op3_demo/data/mp3/Intro01.mp3 | Bin 0 -> 397479 bytes op3_demo/data/mp3/Intro02.mp3 | Bin 0 -> 389955 bytes op3_demo/data/mp3/Intro03.mp3 | Bin 0 -> 196858 bytes op3_demo/data/mp3/Introduction.mp3 | Bin 0 -> 244819 bytes op3_demo/data/mp3/Left kick.mp3 | Bin 0 -> 8271 bytes op3_demo/data/mp3/No.mp3 | Bin 0 -> 6861 bytes op3_demo/data/mp3/Oops.mp3 | Bin 0 -> 6861 bytes op3_demo/data/mp3/Right kick.mp3 | Bin 0 -> 7958 bytes .../data/mp3/Sensor calibration complete.mp3 | Bin 0 -> 14070 bytes op3_demo/data/mp3/Sensor calibration fail.mp3 | Bin 0 -> 13600 bytes op3_demo/data/mp3/Shoot.mp3 | Bin 0 -> 6234 bytes op3_demo/data/mp3/Sit down.mp3 | Bin 0 -> 7801 bytes op3_demo/data/mp3/Stand up.mp3 | Bin 0 -> 8114 bytes .../data/mp3/Start motion demonstration.mp3 | Bin 0 -> 13443 bytes .../data/mp3/Start soccer demonstration.mp3 | Bin 0 -> 13443 bytes .../Start vision processing demonstration.mp3 | Bin 0 -> 18146 bytes op3_demo/data/mp3/System shutdown.mp3 | Bin 0 -> 10309 bytes op3_demo/data/mp3/Thank you.mp3 | Bin 0 -> 7174 bytes op3_demo/data/mp3/Vision processing mode.mp3 | Bin 0 -> 13287 bytes op3_demo/data/mp3/Wow.mp3 | Bin 0 -> 6077 bytes op3_demo/data/mp3/Yes go.mp3 | Bin 0 -> 7174 bytes op3_demo/data/mp3/Yes.mp3 | Bin 0 -> 7017 bytes op3_demo/data/mp3/intro_test.mp3 | Bin 0 -> 62815 bytes op3_demo/data/mp3/test/Announce mic test.mp3 | Bin 0 -> 21123 bytes op3_demo/data/mp3/test/Button test mode.mp3 | Bin 0 -> 11249 bytes op3_demo/data/mp3/test/Mic test mode.mp3 | Bin 0 -> 11092 bytes .../data/mp3/test/Mode button long pressed.mp3 | Bin 0 -> 12817 bytes op3_demo/data/mp3/test/Mode button pressed.mp3 | Bin 0 -> 11406 bytes .../data/mp3/test/Self test ready mode.mp3 | Bin 0 -> 12660 bytes .../mp3/test/Start button long pressed.mp3 | Bin 0 -> 13443 bytes .../data/mp3/test/Start button pressed.mp3 | Bin 0 -> 12033 bytes .../data/mp3/test/Start button test mode.mp3 | Bin 0 -> 13600 bytes op3_demo/data/mp3/test/Start mic test mode.mp3 | Bin 0 -> 13287 bytes op3_demo/data/mp3/test/Start playing.mp3 | Bin 0 -> 8898 bytes op3_demo/data/mp3/test/Start recording.mp3 | Bin 0 -> 9839 bytes .../data/mp3/test/User button long pressed.mp3 | Bin 0 -> 13600 bytes op3_demo/data/mp3/test/User button pressed.mp3 | Bin 0 -> 12190 bytes 43 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 op3_demo/data/mp3/Autonomous soccer mode.mp3 create mode 100644 op3_demo/data/mp3/Bye bye.mp3 create mode 100644 op3_demo/data/mp3/Clap please.mp3 create mode 100644 op3_demo/data/mp3/Demonstration ready mode.mp3 create mode 100644 op3_demo/data/mp3/Headstand.mp3 create mode 100644 op3_demo/data/mp3/Interactive motion mode.mp3 create mode 100644 op3_demo/data/mp3/Intro01.mp3 create mode 100644 op3_demo/data/mp3/Intro02.mp3 create mode 100644 op3_demo/data/mp3/Intro03.mp3 create mode 100644 op3_demo/data/mp3/Introduction.mp3 create mode 100644 op3_demo/data/mp3/Left kick.mp3 create mode 100644 op3_demo/data/mp3/No.mp3 create mode 100644 op3_demo/data/mp3/Oops.mp3 create mode 100644 op3_demo/data/mp3/Right kick.mp3 create mode 100644 op3_demo/data/mp3/Sensor calibration complete.mp3 create mode 100644 op3_demo/data/mp3/Sensor calibration fail.mp3 create mode 100644 op3_demo/data/mp3/Shoot.mp3 create mode 100644 op3_demo/data/mp3/Sit down.mp3 create mode 100644 op3_demo/data/mp3/Stand up.mp3 create mode 100644 op3_demo/data/mp3/Start motion demonstration.mp3 create mode 100644 op3_demo/data/mp3/Start soccer demonstration.mp3 create mode 100644 op3_demo/data/mp3/Start vision processing demonstration.mp3 create mode 100644 op3_demo/data/mp3/System shutdown.mp3 create mode 100644 op3_demo/data/mp3/Thank you.mp3 create mode 100644 op3_demo/data/mp3/Vision processing mode.mp3 create mode 100644 op3_demo/data/mp3/Wow.mp3 create mode 100644 op3_demo/data/mp3/Yes go.mp3 create mode 100644 op3_demo/data/mp3/Yes.mp3 create mode 100644 op3_demo/data/mp3/intro_test.mp3 create mode 100644 op3_demo/data/mp3/test/Announce mic test.mp3 create mode 100644 op3_demo/data/mp3/test/Button test mode.mp3 create mode 100644 op3_demo/data/mp3/test/Mic test mode.mp3 create mode 100644 op3_demo/data/mp3/test/Mode button long pressed.mp3 create mode 100644 op3_demo/data/mp3/test/Mode button pressed.mp3 create mode 100644 op3_demo/data/mp3/test/Self test ready mode.mp3 create mode 100644 op3_demo/data/mp3/test/Start button long pressed.mp3 create mode 100644 op3_demo/data/mp3/test/Start button pressed.mp3 create mode 100644 op3_demo/data/mp3/test/Start button test mode.mp3 create mode 100644 op3_demo/data/mp3/test/Start mic test mode.mp3 create mode 100644 op3_demo/data/mp3/test/Start playing.mp3 create mode 100644 op3_demo/data/mp3/test/Start recording.mp3 create mode 100644 op3_demo/data/mp3/test/User button long pressed.mp3 create mode 100644 op3_demo/data/mp3/test/User button pressed.mp3 diff --git a/op3_demo/data/mp3/Autonomous soccer mode.mp3 b/op3_demo/data/mp3/Autonomous soccer mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ef1f8780fa17ad7e93c941e1c629b0ffbc02f2c3 GIT binary patch literal 13287 zcmeI21yCH_+UEy%0t5)oFt|IxGq}413GNWwLWIE`0>Km9-IAa|f;%Juf)m^!L4!^2 z%=_-$)c4g^eS3Fnw{C6SQ+29O&$Rsd|NPH6-A}iQydW9~QBd*q_4E`F4IxBTm(frF ziwIde`FMl`rcucD=Cp>3e6t)-`6p{1#Atgo%WkJtzsQN04J+yn$%^kvj# z5o-*HDkCSOt)MPrA*Y4d;XfTjPeorr-&jExu^9%U3h?nil+)7CKr|mAs*#ZqNY33O zz{|YB`E%qbZ|65epP(o+TdzJ~|2j2m;4Ido2LC0>HTxR@@_R8~^}L z&@g0(l(Eqxu$iO$DKy0*GjwB5O=pu|5F_Vw#Zu!VWdSF~W=h zBIFs+NQsCY!ZT3wpq56sj08r~{cPbN<;i?dfBuIECeGjw5X^QcZ3-$GLqQ{6$hpf^ zKDzk+-E>!(cJpV2{BeO>2Nm1Fd{O|Aw0KA<@L4;E1pP|Xm^0DadUI=+if9!#a+D&< z6$iUG6bZK_t=C^-k&%bWlOTganea7kc*zdVB4l0NzWjLy#z*WdBe^pMD zEZy{RFeSGU??r~1LPoFm@DDDXGV(BP3=$qeyLDMo8HkW7>N>P0)5E@pB6tjB4@Mzo zWE6y4wY=WzpbJD)|>b1pUsP*dUHL9q*QjKOkDfQ z=@S_Of)b|gE6^|PD?EL}dY zmT+3%1_yVq;RUK^m60FgLKK1}?v< zy%jS*46xG)jl4(G*6YU3z~`2vxst z`T3Vtc?DEP`NSs`xKPvtVV;|Df_nzSdmR(*_9q)f+xA+v(ZjACnMQN@j$gT~=Q^M5 z`UN0`Hw>jC33D_!mzhB%W^$~&#Lecva zWW%B$L$2mI@oQ+zWU-lU$1ak^a^mSgMWw{J^_NX<)yE|F$%m+fKe+COZljEl@fi^m;j zLc+qc ztr1Z$8)AZZn7X>0F=VSR7W9iyA{s1F=yUSLzs(;}J~FPfn5)@jFv9jIP@VAcC@{rk z#wS&+uh0{NoxyD1oie0g#O)dBgyP~d@twkEzxi0?1+aGK`%Y$z z@Px==Tg;AA%nYx%=~)~D@blNt%wPUaM-f>0&{jW@YVfhs@1^3(irFduiuR>D?_mRP z{n*16cw1$+e0^7&q^974tBBTubXXC&ItPuYvh})#G=t6wJ)nV-FW0^5@#%>O6;e14 zN@q;ZTq8bEEP9ZEncOd`%g98`?XqSp7ZAs@7Mx_TI1?HiOWBi^CfEbi5;6d#gsZ=? z>+Yg)2GQZoqdmQH%=OmusQcLrWzM65QYhU%?AahP4&K4}2?b%YiQ0fr5@|g<*m6%W zpK{9DdPcD@c-0m6TY7bW@8JfKqHd$v68x082V`)0CfE@6*vKSPdbLQ~(*&6z;ogeB zBw4md&Va};IrggikYRwBQ8L&G9e~@#TyH^tLFp&zOK5@tM3Bujk30neY|)khiUSjC zANm1$#FPQR1u^&sXo9Jp z*0b7z)CBtX;ZA27Ti0A&MGGi$D|`nAPGOIL5Bc`7*pO9YaG)N^Of@`73ke6M*W0?V z=!2rLyMCu%S+o$|4g9bY?|ZeK)>3URHqCHjUCgaZYwcvG?&1wma9?MDSG3mVuDCS6 z&Q#dn#fg0qrtlT)KhnNH^wl zg@e30}7w6FewHxbdH@BZAu)zOG*M*u7jk& z0m)$tXIvpPQ4CeUX-Clo030N-az{GDtU07i+PR8sGN{5yNE0m?oNJN7xzO8;VC1NT z3-B9v-aL{Q(IzSx)+Qp#XJ`p?Xt`@ojqtv!CPQ>=~Fy6O#-h&$Sbf^df+K=v{&5EZObN zpH24zsbu&G(A3DN54Kg$DV{`llbF)#ewVEWU|Y}gGYhJrQTwmSIgoI#==CvAM2tp6 z$gq;|sM3zBx>zbEa5QZnHVXJADW9j3Em^rsK{Jm=*sh~Ph2@_&o$ZN-6HTf6ea7)H={#Hu`X9Q{{- zy98Y={30081_PG&620F)zoWIs^$HU0`Z6y>F=!B?#OIAuL|QtoGlH8+qod-TmX=7%<|NB=SH8xY%=mMvr4os+6l5(f1So&TPGLoj4Np0+DklMDR~@z|D6Pr=|a)5Yx8OtL3HKu zbO~Ka|8DO2Ln#h`R?wLBLJYkH8Ppp5p@7UT;Xt{N+A; zHjatn%9jJB?Ch2Ta6<=y#DqSJ!ju^Y^IbcVvZ`Vsb`m^Iv#rRm-3S~-b%#LxJA;Th zw{qHj{nM2!!#lj~xc1JvFGhN=^wEQK$F|58(1j!DW*Cf$s^aP$R@}*Tm((OjK8BpS zzWtnODBUJDXC!&f*)(HRh7JClbRz-VY_~v=T`wY|`h)Hh;l|8!3=z&eYKmb!Uirz> z&q2|V4uWn!R)8y=h~QKi>AP9&>e2#QN(#Z)o`HFkb6b~&<11ToVG#v`{E~|{>4sMO z#-?9CTXJh=>Pllb>=z|mwI1}J?&pfy?*@!mk1Jxc7XrZDmK6v2eeA;{{)#XxM{z+K zXM76LFDN}`MZnbHHUL}}+6rw_@e>IfgvG(WA%#0*3_a;3?7?_&9#2fGRUUzXhaC^o zF!!{8Gmu0!r$j36Wt}c~r7nZgYFycRe68#%XO`rX>Gq8g+K7cCbDijsyje<`A3LhGU@tLvt~ndnB|WJoeg(GtEKMcofeW!*q4dq9o@ zp-^v$!QC_BzDU9<4sOKitFFE}5XK{orEw(O1*C0$E-fHdkS1&)>AUEwZ|GV1E8Mdn zYj5bWwN>908XCD3Iz>oyq;F7ds$$8)OIut1)07wViwBz*wXs&ov$Na=A50cL7}GU| zlUBOIhhJ`%MVfw8fM=hEY)gN%?}K${sb2tN_Qu6jt?>9y7F3HyEjE3xTBf)St|hpn zQi~3blnBXf*?%H24%W7!8#B>Qi=l%J0dlsok`&gj^ZpiZ!4G0m$gl=PQI0iOlG&Gy%e*J6UJ93 zbrQdS5Qj+@FaIUW?isU?x0xJ@x3hi$Qn(`)&iP+Cy4nvKs+Y!Xf2yGQ$JqPeyQg(~ z%V0pxh|)AZeuWN4udDYy6r-3A-4lGl*JfF)5B4@1JEuvpUzDs7(|wytV`^K)EOF5i z_EkIRBzg*xrs{i{6#czO-atRPqAU`Y!OdpX=UCe-rp4Oqw75213y};Ua zEvI|2qQ*^u=-ZIjR2mc?-;UAnf&jiJJ=d(UkF;Y$7J?-&WA0HKM8 z#UGLCUz7#$7ug<;pBh?g{(5%4dH3{eUP-iqY38!&2LHiw?9U5}T>~!mIxF zP-cQ8k|SWqPiK}P$nB1Zzc(6rBC# z<=LXG*$yI{zLYyu3OaI?$@AjQaB1|ssz4-g-tYU&C`T(Es|>g#c#Jr`Dmc0t%2=W8 zn&g}AH0%2jAD1#Lks3I}^ifW@PWfBWmQPF(F|38$&F?z(ax_5z>)q7A#$;|iBLqCl z6nGx>0dlI@>QMwAH*G&oGsNm4W4aww>iYWa_KDH8a}(bpeV832bK&n6s zT@fq=o>K8))kQ7h@m$>kyu<SPLSYs z8MUG6sr%)wW_06rz=<31M4~gZ<@&j%Y{mN|N@}}2%Yt&QY9FH{c{#V=6SzN3LUI8% zZd!Fx(%T$dN8a<#N=VE7q#vodq+^euq?&L4p}#U|+jjghMMreW`*5>08f-XrG?)}q&SMT|x;_`zxxfjMrZYyR{z3^&LL7m++f-yYi6qok_Ba&{s76CK3rc2m0Tz zV>jZUpmyTZz4Xz7_==z+^U9i~cA*ejbNO2zb4$5^*BO+q_t@#c5duHuTSR!Xwl5Dm z9>;S8m|PcDIBhOcKPGthkXnY>0L3lnBdI^hgKj($S0VVp_V-U|qa!pGq6QfxI#?-h zk`_ZwlD3`=j!wLf`zxV&0vV~;On4UmkoO@M^*bqp+*b}cWLj3XX0Jwf;SO(YAH78n z5v4~bWs#ZpLyjPS+b+$7U9kiJR6(@c50xKe&8*nYXBIBcRHOyY)M-!4(E3qltw`B; zQcLd#^pq1nPfc8U?`{8b+RsN=eGiT8bC*pEUMAuOME7Vsh)bWpKnRaaH)=)4^Va~N zGhEeUaf-O#L`3x*qIUroF;+@GN90%q(MX>rD%TAamMAgGn?crH%xia?+0h(b-^ND# z0TZe~lm`)hL%_-}DDx<=ICrMPs+JTJ(0`I*i7u%uxyeDPnm@Vo<7dFaHm62IfpmxI zm;nb?oY1#~DS7dNV(8EJshxm~`^|FWTcL`mU%L6JS@MP#N~skx+Lr|ly+-rowD115 zT=G6jj*5;qi66Yh#D-meqSDRA&dIR~GAOBUB)Lw=5vqih85iLfk4PC;X>)i^)cQwv z1(ETYDHADf+^>2o=^&k|8z{CV6^^P}=*x#1g~q0hLu?#NC1B|^7#wDV#ZU5vm#MfK zB;hVI5+n+xJmuZO9}e!sW$h9w?P3=jc*RJ@o{7hTQUD!J#?wOMkz~UchEkIw;eLU` z$aermHdIdj?-x5Fm{rXtM)c3~ockm2&~$Av(2{@5@&ecJg&xMBF20ufWSU) zKR2#DB&86+LWBk`I>064xvWO6M4gU5l;j;Z8?r%@i}(WohR%qj9gClP3$&(by=8^# z1{hHeZoXO0`z;{GHLB9{?8oc;Osq(wVWu^fQSQ`M913F-<7|wS3LSDeslRTQggy`^ zAX32~ZIer0{eU&vFpJlecFkeo6Xs0Pw${fAQ zz54}uAB~k`gQY}a)GxzoqjQL`pzjWffU$xiR+fAL!x#N~SUI4K=GZhbVr8@+5`^F> zHp0-CgSIi@gI&ZTmvxtQp_J^UI_C%Hi45@xuku2lhAj`%OYW!vO#zfh;o87HUdo6;@E_7RgiQZ9-UBy@b^ByiEB zNfCUDGAGjKnm3tzBqt@^1r?G9G&Q0iua-Ol$h#0Cw_ci6$$s1nTGtt+%kTg zOK&#NGX8a_gUq2I!Y%NxafR~QzNnCXlB}BXY{B>5O{sdZS)RK7az?%RjW5cT-o452 ztn@k`3kW#a^d;yI#&`2O{P|h8mLSNvS4q}I;EBJPY2b&Yz`%!_eNB{StdrjHHgxxQ zEgMh??ko8I*kG)2n5_)33gwc+LNr^+8uqmzhHoT`Tdb=R+E0aqDkR z@HevuT$z*9cd(c+3uSGsc8a3bC!Gr1iSuac{j>nHMP>2))irC#dKmVPx>B)lEKsk* z6Yb|8@fRYsy_pOi?Oob^yCUfoR?-iRQ&7|UIvnGKggc^7KKUx$ttmZh%9j{`+Y5dP z6=&iz3i%iTW`H;1>CKTmoY=3(oyML2A9KTBLojj}27SWrUg&r_>3j4e`9~Cc8}a$; z{nW+1-1KgxaaFDU*rv7{vsmLW!#AmF#0&$8P;t*4M2GefppwH`d;CBq!}2RZbkdhj zU_~ai-fyisFWT`>&DeHpZ3wQ#umrIP<+i%7PQUQ-0U&7 z{0aKABRohBS_Yp-Z*gq2UkKHS((Cw1o^? zqN+Qk&psN9pq@Jyan`1T-eFWhsZNb+`eRpR9>SAD=0?QNyf*aiO_JF}GErhuf+*c% zct#M6#``a|6on3{W8h2$?zQ?g| zdlcEu7hxm&pT-q6Tr_myNZ|msMe@}g7ksMMJP9VUPg=ckNKRoNzliDe%Gcul9Mbc@ z^()?JYjPH{%4hFhox)0%b*h2jy>wp39Y`S8$4g)qS%A}#oXfms;7NP18!ZwN|CL3M zVC;V2>9^AvUC9JZuH)2_i1b!yiq3WOUEt@AjISvyv=4~vP1(6b)^t3QpTo}O8Sk=} zGUr!5d2IVT_;OOroZhs|A>sBJ!^jVF0(7K96C|a_1MHR0Vz_Q>%;V+DjV20x9c+av z<{3}qd&^b0NjoND)ZXNgyhM5rcaPe(`Ih9U`;lG4=eeIoT9xRRA*Wx_oEmAv;twlR zxpaut4Gp_9pP1p}l+-Gf`bB5ShXk>aT0C~BXr;KkHv#~yi7msavf>gzz5a9Y_t_j( zRknnLf$VNDGim22v%)U*}q|rYyHG{l8o8pKYMt_X-vPeofBv;Qjm2iFM`Q6#6*iY+f zx{#(b0UU3p6yYR%;4Dy_Ur3Sq&Q2&_6s&9TXqz4<{C!+WFDn4l;xS~oX%V!tvAq#F zHAD*c3+!^VVd$*-h#@}G#&vN+Qtv@a&o=K};`L)zzCl^}!sbD?4d1sKU!4CV9Diba zLrvOlQdOX3vkRB0UZ}&!s=ilKMtDzXy5lRVi$`Q6V#%^O_Da}9_WAzaFVqAkfD!B1 z$D(<0eE#UP>w82Xin>8{W^s#eCHA3q-plVfn-JY(W_2+LI~W7Z;PN+|UdMR{RB79o zu-7{$V0`mMNA2NzZ$U=kqx29=1A*4;aiQ=e8yaE$KX9n!ZA|Y$IF8ETw_J|}jMiEj z*83)FKFDZ;Pex^5oFwYF)A!%%AB>+`o+iorS;N=AAKqL9djG8GHEh}>7L8`n_8G0I zhs1%l>sPKB9BGmg!o_g8W?+ca-LQ>deN;~cVdZ~^dvStD;Pg?E9*l`O4;~#jB*7Cd zIn-XxdGe6jVoStv2=+m^g)7hhupyqi{!wty)e=hmSFRrvp804;j?Dz40MAU4UPP@h z(w;2c#Jalm&$aCVC#FobDv!gadUuWe@9wfH*ijN8pJfLKh4xP}@ zRUh~4QS0$*x@LSEagPF5)Yw?xtH9&46-Ilz$f@D) z0x{)EkL3#D|ID?6EAPdT~ikr9puZMa#UCd^2`3Zi;J9jE(OfIAlzfMNiXr-JlDg8}YoeeKdY4 z&0?#u7A3Q%TZTzmO}i^FATs{bN^N^9+f1+(+8~PgTUE{)xhYY5k77AoU3UWhaB2Xk zW@SLf&R(v~xy{YBfCIaYgJBi(WtY}`@3PpCaQk!%dsBhd7!UfvL8>^PNk5}ycz}XX zQIe`+C``im#_?}^+4_>X`Aq(>{Vf{EUcF`sXtH#C=1@g3rcLwK*vwj}xk9tI^JHAU zcw2NM=UvX0NQRf$RfKPqyNOAWmnR-x5kaUM4r&=i%BGk-xz3(pfRyQp;aFWvlWrzi zrW5^B0)2V=yovEVtZ8iONv72`Ff5t+3WT95($OMXJ9#xwEyy z_1L*%mloIcFio7GmCGX!rCc;IM7AePY>Q|xk!0tZ*vW_Ai#on*zJD#mB)vIhp26|p z`P{imEV=bwSb>7QKR%`~@0WydaR1aBKj6whw&u!@>9%$&&}u-{ElSxN{vv6Cul?}3 zE6x>m$L6E?O!{(qKBRER^!puOIs#%k%h-+8M^qIb11#E~L!%Z>axYm($#o^!pa~sr z0@ga1rgW?j^yAHPzlO)CSh2gmJJBKh2N7mVbJqbR?v(~QhpU)0@ z*>+v8y|{U4R6kN>W%ZdaQQfnN#mmhP_By+giOnKgc0rNQdvD!B%k|ZE&rba%+rNo2XsqT- zbTX;ok}~n3W9u8q1n{B!HXy&GW*&L^W~4D-c*(zxjFsMWK>dkkG^tvdp}Ehfw$x2~ z$5`pZV!J~rQ`0T`8G+X>=F-W@-#uhOL&W8dfryzQvet{z6XSj)ySgQ>YbM8z6@F1)rd?M*M$+6< zdUdY&w#=Lw-r47D;a1gvUPi5xKi;i^Rn`8m;)&=W z2ks_5r5qh{lsjR1e>Bu#899Nf2G9>O<9t%@xm|P$hn==B`8<~OcpU0XqHh5tC=vXF zg-7Tg zE$5&5>(OS5wmYZ20~-1I)3*CwqnGz55-uk$o2Cn9vuv{L)H2UWN8BBsV`c|<-~SX2 z6z16@Lu6#gHB;dkrf26gP?bDcbSB(#Ol8BqLErMJY>db`GuWma4y7_T}#TEX_iH{@UPc4U8D>-CFUq`|-2YeE{!{Afzq*wF#=)Q2K9b>J4dD1BWW1k6GQu5E#_hWY2f@_RP36%j$!eH>|z&T|eWwnTxJ_Mn@@%Ynipzgx_aDxtT;djzqXHFuNGU1ngUnTG1C2n01P%rM=FUW4T2Yw&&46D^J!lsZd8MD$-H?Vo{35 zjUgu9Kbrmbl!Wt`mvz(8v1Kd5_cnS{K(C)#URb1Xhq*psttd$Dn$|m3ow2M&I-|Qg zxx#`YUZ2JX!xQ0GUEUi}LEi&@K<638c1wfPfBtgWyt$2Fa6!U8$s(Zd>HRO1s zHLWu3RT;f@Yj~AO{b;<~>x6_1s#Hc2(i+}#L^7#14kvh}!S=PhDx4a|@)xHaCN3Xu&Q-@~KvoealzZl%7%B~HY zR6wuGP1@)=H1TcyQYgW}1&O?*bu|B!960Y8us*ES%$5Vs4%Ys?9nZpnd^c_KXzXsc zUaqsj@l*3JomzVr_9I;@B^~2u3WjX->1~cR+4W-;W}?=fE?r-2RXi5&fozd+TfRVJ z2yIW5#)A;D@}M5CeUECjhDQBopauv!;n_97&ZCtrIfvhg-dkd$G6eiqu^Wi*TBtSo z(x{Hgwzu;feh5T8%*9zwi>q+Cy0crY%kc44YdTWVOjXio3ya?%(Bcn=)^VLTVD5%K z05biJ42A1Uq4!!*x$gBMr6pZg{c5vH0~zLsHPhWotiFNn%Oep=9IEVRev%~Q zX*W{(6^dNxVne1~?E?86V1KMa#HmQt#Hc+X+&+s?pg_&As(T;Y^?ZR#D>jg|0@=9t-~i;qNAN_ceT3*mi~8ALsFTH!C1%2nvB z@b!B`K2dQ8d{T4Md`Dtz%+sMPaS$~v|NCe(=#crOsvOh1Q)l)-vwy^pIVNNd(J>S^ zb8hG>(X}ZpeW!n+rZXsiXi<>}q>7jS@kP4;(eM?uZpZ$Q{$Avo@_tL2a|7q`lAP;z zkS17Nsu(In$u^w^4o-kC20Uevo(?h=2~i-pi+yW2XxaMA+s7nX;PK>*+TD{xFvrj; zqp4_hRZaW%5zf}1txqbPxD_u(mhOZx3d|(Sn-{s6r)hCn0Q(-N8az`&C75}YSaq2K zE$W{TJ-$TipKv=1064pKPdn`XI|N%6o$Y-QmjX`hY*w3ecpWYCSB??xXg=c90N0ro zC3-65z6l=VVwofy91Z8~@h^s>N(2uPx}l#I8?SPTCXO=Y|I#=?R2{Y#wF$C6%w?yu zm-+EM_oVCW{Msj4D>|lJk&9Zo{`j8ykK?-~o_-h2so!Y1FQ!UXqB7SnfK|8k6R^_z zbeZcC8b7^X!Gh@-D-2vKBx`(1GS@7(I=0O3nYeJN(3=YqzP>@5 zj4{5pk?=(R7~Q>zvm7^0bhpdxn^LAqF|N ze1+<(M#wb^hM8)PnJ~zn56e*nFf4(p4X#}g6Wt!m#g1-ll-cseNPyXqL74O8`HTUT z@t-mHy)i|q%r?cOsuB}aakR8ZAGcDYof;7n5{^d3RO6C`-Q$ssY@cxbg5Z+#W)FpL zOPINFY17!_fqWbsD@zRid74I__!Wio&Va)ot5c7Wf_KTB4>}qHZ@%dyg^{Aj$i0Hq zfG|(_V(UZywq>r#l#PN(*ra)_;dm?|8#GR7^=lcHHpUCQ0_5}g=hoJj0v9_s->QVu zek5BR)s?%;N2X7m*0hUNv!-bakqseMzQv_4&43g%eTQ}q`!NzV;brFeJt=?S0eaLv zbE{^CQ(!U#i-VJ3e){V$O%|rejn1Xp6PUU#ygh-*n$w2bh%(a`ubkR&YCeI|Qfvr@ z>PZ5Cr+&CHMe|n<_RNXwXf^bMxAfYt7xM!5i`iJqQwEq-5ln{ig=Uql>i$){7IT7P3k%2U91xIK;>3YD$BH z;9UdV1d-S2yrVXc1-jwRPwpJ%$E-Cw0YHt}BMh+NT&3{9c+rurN>Fm;T-+H?n}u;0 z26f1&#TCwxxn~03Toe1~oHxHfhlbvQzJ(FQMw~Kla;^BPf*!uPk#%drZ85A%d0oT3 zG_z&JG)Z^8zKr2Pgvvx=`mlaofodRKzr~vR%9cp97m|~r_~BDN`8t&NOi6yYmYETy z4Y{fj_28OoWvffIWao_9<{(C_X;nx+rCAy{cw|SFBY%wuK3$sgLQZ;@QRIgc2*ja3 z#67!&gNtAlhgS!qdGNo_#z*E!lQ@?~jE#3$@Qt~hyUX0pH9jTgx<>`I?iZ|MLJNzf&Be0$@arBjyEx6}{f8(CSQ)Jj%b zkCpPMWk{kxO0O5DSI(Z>PBgSwx{Ihhri0K^F^EuyQ-t0C$qEB?fyuVR8%#+XOo=iy zU{ZV>T)Ny#@UlgG9x;K-V^bbZQZi!vJf&_5azY~LW6*152w?^QXfJ0ieQR6V!wX|0 zQ#B@-Wh!(x=spOd(qmL1U3GaJ3|zK-FG}W?kieFrk?89q5j`F}iGkgqrzZNcuCq?x z7cjo7^?}0O7fCmiYe0}=^i|{XaqsH7%EiKw2GrJ6qMqpR=d=-PwTJt?3+EjVhwvTU zaF$aLMif$Z#rWape&GJf8DqaCS)Cc=#HnR|G!D_s9xj@-8CU_1BF0#zhN=e?p1!;_ zGH|x2@jU)+_hQgOM{nZMCD>l%H$`9<*k$D8ueT?+4eA-F+JlI9Svf>Gefz-unShJ)}L|NGpEdw(zX%Tz*{uX42 zx(EUmpri#uIm#yO9&A)SQFE38xP#jkFh?t{*#)6^pW8%Yql&u#pi#*|#A(5<$#wJ4 zKzUMQon?@!TX~g?M^Y8MzD7-+QrUHUM=Xgj(1~r1p3*-o7mxNQ+mL|xM8ZD~lAEmj zvmbvM!7QRyc)9sWP81AWr{v1p8jaQhujspW9VpOKJANi7yPdRSz!E9P#;dc$Deo+DSCDNs00DxWVZWyyx%+Iz|$Abg62|6@wOJ&RuN>WmHyB<`` zE3|^2`({J+gzZtJKLletM{)opk=tMMPKrv8SxaDOa`=n?JGumzhRsc9J78y8C!Pte_oDAO$V!6VwqOrbQ z`qhTQV4{Gy?b zE&*@x`YU*LbwNRffkm5`#ZusR@x}%C^yFyfPcSQa-)bd8_^tMFY54=$nX(lm3buod zQQL@q*_7hul&Slz(Nnkb=@p-IEFp+QOd`{Mp>qN3Vt>D+yV4yKx;J!Y!c5x0s{;K< zqeC5`R9F95ckRKlYXV^aH?O0xLmbltXZUri$xG*!P9EKCoIuEb8pOeA3OFx+0pigF zwROi@Xl=V>w%+j8W_^yKR{ZLE-mRp!k&m8yeRbFao|TkyUphQwDlWF!OLll(repFH zy^VThd)gu}jn0)D2pScmOe=zC+e*wRr>q;%jCKZmKECKWt36WeihoiYx5M(;exl=$ z8f8gbzO!)9qnziSfgzipFLOakxOWIfSdsHgIpxgamM5Tki6RA!$e_LUCgS4e_cipc+{`$DuXH;4TMug)uT-^anU3$M zvQv*116(Mxm5mJ_KUcL%+8n+VW%&&iifG~*N@>#2dSC-cwT2rcyp&f+;YnEh#! z`@+QWR1lGqqaG}^p{^CUu)k>;kx!eu$Up7EO-YU~TM3?!d{puje%poiqf)jvPrx#v8Hv4T=cm>8m4$WvrxO(7@yW3*xStk_q^@QlUhQScpJ9Gnkpz|QwHrKqhB(3?s% zZ=#w7hscf^+at0w(S4FsYhsD&Ne#R?l4b5f{i^Vm6xQG6H?R+~e!5x~OGcd@Wbp)| z`GqYD%dgFP7nsn7E))1kmMV<gMoJ!KWRqw!l+Qn48!AV z5IrUB5e4R#b7rKd6kBggc$0c-#0|z1@B1GV7xuDvNvg|mmWyV23H}7u=)EXuIz`XV zr&jm*zGr+==HWL{e9nc^7Y_42wTEZO5oHgyyxKQ?t$w4egApo5Zs$>R=B`Rr_=?`_ z5a?Qg1))bg8WaJPbMSHnRJRV4k@{gg)K;c!kBPp*=8K20LlS$k1+0Q6At{>Llnz}X z(DK%h)29bC{eUb=yDxc~DprC^=0)pp8q0f*i911j|M)}CX33`g)~PYPJYcL24qaaj zbl})L1=2B*3|d6b=^noIdXvT&sqiAXlJz@quvg^4{5f}Nh!-oWQ6g^K77QQ^keO#2 z(VN32W?EPS@4Qd>GnN~CarSj7?;z7O^!%};DO;-20!=LfldlCx*cXf(8$JALU}mF& ztTGoujqP907Hei?oKRiszzTmb@oY(f#l^O_{76~@PSv`b+r)3cO2dG}43VavNuJen z;}jDVLh7@&OQk`^?X9d6j3X)O^OC9G3}Ls|gG?^sms4ZW8@D3+37X-y45ULEdDQ8o zQ>wBY-*6XV|GWT0p-`YEJ4j#GTd8b~7fDZ?{W7v`^s6!AVj4*(XDNmp z?%|nJ_;tFLxo+m{ZUE*}Tvz^}H%Rukx9kFx~sd(d1RT zKvBxx3`_ZY{y*R@>+(O?Kv#SiACp|v0$Dfsk`R%tU-GR;2Or1a3bzOGmt(kNiGG;y zVbw|_T2)FZHgc&h)&c;wZTLKi2uW|hq85~xDmO;`Z^8Y^cjDkmDJPc}AK}A<|76a; z5C6q%D4eS9AP|AZD+dIyoJbdV~Ff)oXmDov#c zNRi$Y5u`)*P0smn?%X?P-gCaZ_spGl%{-a4v)9`B?f>)7v)10~DiRln@Qs89WoU@N zcO>zl1=B`Ar6p~gvG<_9_TKlLJw2cj!g8|0l2AS;EY?e2M8wa}PuSf{!p`1T*wfol zgde4j635Tvzz0&-0HcD?*3~gY8Ng8Lx;hv=BLh8MLj*=wN6QqYhY-ULqQr-HfVGFX zxGM^#rHnt~#0Lxx(?e*%FmPS`g#U37Lv<7aWr{Gs4~BZ+7%vz5Ykf^nBJcsmm)Htw8? z|LhYW4z0ue5T4%#_G|{x^cwQMmSFN#B?=Xr{x!ZdIvhm7r0q!bTKaHVj{5$lgCg7A`{0T8PDVerXeqnlDO6wS`$Z13~YRmnyFdZR*WV<&zCGpDa_i*)iQIP(5eQkA$p! z(TjMn!h3$M_^lO9fXn8Oq;8#sRtcXPAF3)Dk-zjVHd+O{uZC$p-dbrOoX>**FvBHBa zYalJ|m#BviFKkpCG$92!YU{R}4_*s>j4+#Yw;UMqlwN;1v$ad-|G9!f?LNb}8;c@G zO3z|14MQ-Q_*o9fRh{FF;Ps&TExU!j-ggSB<=;{UmX9ugX!~p)AO#Z=7qVHczXj=p z_n2tMe)r1BD|BKaSPm{){l4Egr;sT5;v$o?v@pD1)kh39(-jAfQQuSk+FlQ|}R>aX3 zQT{!T|H(ZGdRU&MK)Rh;j!2MiO923!Eq=Xo^+l1@FMWq~NH+fv<+{Ii;p5yzV*dW_ zbYsLp!;@q(Rd0fDmpHc;KYi>`BIYTdzSeZtYCYB%rCBLZeF~Sato6|;?HZbRc)1GH zIiBIX6iwmK6b74cdP#FB2b$-e5+ncPDURFn{&wg_2vdN5t2vAE#jNtx4=#DDb-A0a z%?;zcT%IT8ai>Rh&B?as9w)Wet2c{fl1r=OnfNOmV)Q$W-wdx@S+RRuP-GR@ys#d) zbB7iC<68)a6@?iAj+x!1XA*7Oa~-Tfq-$BiYHmuxnP(L3zuz!UPQ@R$qz;g-I z?Xf==-cbk*3rp=OpB0lg6#e#-KJXy`0L$D^FRYg3)B7I_ECRYe!;>HGxGtZX!(3HE zmOj=EJ%S7EitlD6>8jb&4&-+JHbUL!6ka6+v=2i3%Nt{Z*kQ{1?vW2Fyh+9V_ z77=U2QLo%42zQO6dSvIo898mZK0mI(N1@Q}9@AVD4}zN3ho_XJTCK4}y^#a}zYKss zbDYhO{OzT}1yYG6lvXnUbk8PQxm5|rhj|DhpgMh!c>~?G!xBSsQ}KD=C@K#)gE?{d z+?6NaDkx9?0SMEb2li!L2oR58wq_v@wQx2Ey?k?fYei<#OiofeB*^2dZ_=-=xe~{y za0>r7_~pT7P?}?O;yhD5O6QFmztC}OZ5lgX366l}^!95w|kMd|YcqEvW6ib~uBxu(jGR7UvXAb^yDJnXO;a(i; z?p$LE0S*bJVLHz=>7NT)FF5;A%{V)$6;x*9f-kSUQOK)~7lOf57QpX7Y1aCQhMuZLziVLkkAf{+E+dchxR?+h z5uapGS=)*tw;^MATsfK9(7J1~x7j){cv2FFTJe;EWPNa{0tSa!)kqnI$1T2>owb}? z6{Ro9C}%ArrZWJJQDvC@5{KZjj4DHxo=!Op^jFn>mn^X)u_Qh{CRGnlVDLK{XAngY z&Vjv@>Dz&6WIhQ)8S#y4dZYaIXoGA~a1~_J;JFJ?gHV>m0YLPk7(!a>8g6G-dcaH< zqakXp<|3ib8Eb@QU}AevVYNj5`c}l*WWRy8xbqov>HdjBncC*%3eK($q4mfS;eZk* z!N!e`EuR=HlugPk8h<_`38U5INxV?zO?p+9Ik|ARb*>m+n??3q)4l{YZ9kTxHG~r2 zf*5~Q)my3|9cXho^MkbHA8-iS!^b;@@ho2^dP65qHVJ#Uzwg4T$E!-Ij0K~bXmKt(8BiNbwJw=hj51h=v;l|1a6^Pe({#o!lm3u>?=@G82xyjTq zPbZNGB4VPymEf0`)6Jst!^qRWs;JylJEz){Ta}WFjE&_pZ89t7dr8h@q(aHheO{nV zqBNQ$y_BiRn$FX4?R2pIVQEwZzsINGh+g3AyY2C;A9KT~P8<3s4tz#Fus3mQqH=w7 z+rOS{bqzS+w?8WG>*Bi!*Lxs(!D%3C=e60JRn()E-(%^Wa;5T3#8g=ytaa#|w@0Rn zoAdo~j5qsp2$t(-a`CRmXtIzj?UD@CGRTUIsfUaRHE$0?Y&{NT9wj_p3BsW3Wcsss zYlV9`Eo5G8VRR7OEOyDuwg7O5ufPCsLijij1twP+ekDNOuVia(+4{!-z-cNG_!=aE zjGH*F5LF}2m$77>dh5k9_v@UZug zODdv-tOBB^bZPC`eI&4mF}80W)?7?5F_nxKa#$O20trar0(tO7%KCt@^aQ67Jy|tr z!TgJAG-(}D@GzI#ErR_|-&|D^DU5ti!?n~Awy4M^g98?+azN(E&?uWLf-lG^kxYZ+ zkyP8Q28dab4|@|DN$IuYV46stKIrJBPq$#I5M@d`XNl_*a%H2w0u^r%s@Bq2T>Mxa zFiL2TtUb(W0ZFDQ-<7cKn>ntuwp%DlfbeybI5k}Yw25O2>r-1C zzb{zIT`*kea})NLZ;k?W?xd-3X6~CjqgsfcM6>a>#zq%$^_MC$!lQYqcMIhoY%qeG zvl@-{XX!{d1%_X-Dm{`v7*UG+z2g|Xnqoc_vpF8}>*6xHTX@FjjzlMVz^`WbWx0P1 z3n8nX($o_f7jpfHY~7+l**_O*wCJ6*r_;#y%`GsQe9o~^>b!$>?;SH~Y732_SewS= zP7iCk2IQXt7{zL@o|BxCx2{IR?yEbmwYSd?heMAZG6GA1}7 zy%$SsEYSvhic|kagJ-c?|<0D58oax6R!C+;IuI^zDN>F$Q47$#0mEE*Z+ylOG zeLny<-KVw#0~b@KYcz9RYw-Ju%wLA9*myuKMj66-xUpX7;sF1D@|!rJgs|{t4tNg7RH)rO!qC`k6<|o zHZ9NzS~i9qD_Q1Xhxr2F8uC4A-wAmWKYA&?YA$)3?KR&DH)12SlPni0Y9%1r(UrLs zeMfe_=yz$#jyvF zSjr=B#O?aN%ZH+_W&ywDoy<_+u{fmTy+Oh$E{bK{Rd8Q^!o4cTLpoK=sxXZOuK z+D~3Nx~ry(P^g`A%~`t$Fwh`Ao@4H3ztI8L_4ICf!WYEK+q4O^2c`#h8g zFi_@PAr`*;T%1g`)&zC!&ECMt2==it%tOQ&t0B-0#!2Sb37am-T!GjZr6CoK4bos=hpC%)2QS~ z;K}qWhrW302*h2QA>Er5Idk{+KE)J4K&uirUQm8e2JicL^s>{l`>~3^n;}oKHxMeW zt)c6>8VZR%H-lP76uO=UUwPn`OpyX6VqJ-q)7P*#Hl`N{TuGKqlspW zVz@-}EU$7g>%O=?+pJc+<6sSXAXlFCXynM#4`VcrU{-GQ zeMzx1shmc{RZA6p9iU?}p4_e?5sTKjzJiaFwa(Mq+t^T5BRPU_g-{y0Maux>9CPO^Eyr0j?X7DymR0c~R5yy*+Z(dZ4yp=IdKA1{kId2{9 zD=x;iU|~NQxM+CdH-)de^6y|R5Qq#(Cx1Cr3Kr15S%CFcA;8sfpvV`^VaRh`e5tSt zY6J1Dt%U4CFvDg1$19Y1R`z;kHeA={n3i5SYirC#9=lBkxFbtSnOH81Xw=rX+&o?_{s z3iLveten{S&|Ts2C5)^(F4usmc7Kw`TP^LUMDhVk!rvaJ-*NCT?XgoulScKK4iya# zHOx_E%2zrnHv3k19jArvVv|SU3Xz?T;mKlo=$8dK?k|DP4f1b=_7i=*4=R2uj#S|{ zc&*ycK7S=rmrKu&(Y0q#;$jiwp$hJrlbi=OlO@ES;Ea^U3Jb@YdI6RJ7Y6mqKl7bT z6I~(tIS!buP9zCq0jkn9Los>^=#g+5%FQ}TmmQG65G*&wLEW~BgT%Z$TRV?A7nXVN zY%6J|a$jU2P$I)YO0=&guTgQx_yNpW1N~TEIbFkQLVGFSf5B%0-ZfS(e7a&&SvmF0 z<&#UU`hpZ!)6HT~HrzwyJdK)Ery)(~hND_sqXlo;W!U#x*;|)PP~&Dyfsms3SL0kN z%2t)pkNh~DDl+J#e)80FqVho5PSqAv0u^5IL6|B+R+rc=RLxnks1|)xhF6%{MGj-d zO&Lqa(C+jqf}_TC*EPG89Y5T%cV3%&Wz>D|tK_pF-y%IacvitmuMzy}ucoT##*rX7 z&F8V}#7Ztdy0p~|%%(1LFckeBt0FG`h5jOx$%aVdQXxUwtyDk)40hC^dIjR=%kj7G z;k=P)D&L;6 zRT}E20I-duv(Z|QPb0o;J@XpfLfFw)(P+9)PZ9$FE_A=b$nulPOX5#Nv1M|#yo=>E zlAVH*RY3oi*_T6>9t(r6zOt&tmY0jqD{`j@SsmuFO~2nJrd=3kHM*o;M6RXh#6M3Z zL}62l%FEOq(V9=7#^86khX?=b(Sg4g|9Tdh9o{Et^||z>oE8d!s1o3Mit7;&@y@QO zN|>4Cbf6x+XBB+~(^e~|37elvT%P{?vHA~KRf@I<^Gv6fAsxdRql@z`X}fAEzA8?NdBSXza`vXYu7)7 V!!Hm2#;X4xZMpw;Q-4PHzW^R>rBZMlaFzK5zJr78yz z;Ink__Ja7@czQXwxk7k3g@rizAk6mO-tHpLp85Itak{wkTHE+?x_R0?W6@F4;d$su z^HAm0wajJZRMpkAb+n{(l+@MCHFUK!)V1Zz)zwrCbu{F-9~xmiRL=klR~{ZG9Vr#* zhj+9ORZ2!mLrz7?Tt@w&!@s+UwvvvVj-i~^L$gN@m4}O4P)1!<_2E+Dp&A$%fMnd< z13Vqx3lWmjnO+`=I{SESKX1CUE!(_r!42t0TM(UHN4~|Fe(C&Bi-f+=~LTMUQZDO;S?T z7z@?(0wc~BlMf4Piy|pY}_o#J(waa77xAH^(#hp9x$Ddiix4iDP z+RZ;1he6Qmu}B_p*ZZ|guSkjalV0Jd7+{EG7&4#zOsPxzlH{NSa3aITMvJ97la(%h zJ%yossOy#4^vJ`F9RKlPiR6AJMxFG6Sr7Owcy4#or^6-_dhf^2sHGD2JYZI_XEYgk z%d=vkX!H%P55jW1>~NAIXtq7*8Uy1ab8b3ewc5K4d#)X<7lo|INyMIHkTF8Et9knp z3n{su3~EU-3S5#YSfS=mZ}@6M+{4a5U^i6TPelBD!pX- zDf<^+4rCzZ-BAD5?k`ORg*)92DPI}jc3nOqFH2>{b}wo`87(4Z#-@LV73nbr0Y(gg zeP5^|leHp3I6V52_=ApQ17z})5hq5CpMBq*b&djejZZ|vJO+X`R9ltDaP8)08!>X; zgHT-pite+I6{|SYa4{{tS(E4Ls`W~p?}GurzU)0ix=7SZIYOnk`g-u$pj$CR7QaAM zjdUfBhcWR`&gIDSMMOV2RP&Xs42}W--UnvgFl}0{X&r}@<@t1}9J&-XR~2jS`DcoR zL!)tD5O9xaBlOlzrzBBenrSS-<3XKeu*uRRORIO+aG%z--q_%N>TCFrMh<+s%P0CPr_pE(jp)TzQz zDFO5j?ZBeCD0h(h81UV0yqRk}uT`I!2YUuAtJ%@9@C$7I#-)j~MKVzg7%8!QWwrDC zEhhqwjGEBzQIBL|W|4y0Z>mRFIO61-n!{xiC6BdHu2|XBuUbxSTx>;zB-6x)nX@dr z$9(`mZoZ(DxW&tr~J)#ttGkaQk_ypUL_!>H(;R!~0 zpC|S&SxviL3NXx*5}pYLqY|^?G4SzDltiSH+Hi{`P~ahzK;Av*y%ThBQe2HDG>Z^U zjNWN)y}*AuXR2154|AM$wv8tm|H@(mhM;XV_t!(bw)7ZIK&?# zC0t*=*iiyJcO8q_IK6&uX~V2COv0Cpp{IE+63_P34FC=gPum0IM3LeMFgg%$n$)G2 zYnNei1cVGV9GyL*b}|066|@m-Y}+fU@+=BbPIsEh-aOE^j{9}yN%|${Pls>OdSQ9Tg+wo1~_)x0+{FQyhBVANL8AG(XOdv3gzRI8k zgG!d@Ti_GohfrK@yiF?lEsHl3Qwy1abD2)s2EXVzW`nc#zpU)y4gU2mZ3$sHTdLf} zwab99oNlwBQC;A|=6iyFpQfOW4J%R&OKrQ`?^*p}CxRqV4-g_Pv#|y8-Sy+yD3&SxVH6 zv2ykIGn1ZV)%#wU8Fy10#ap9;qLZ+_a1tzRv51ATYx2dDeTVV}htUY&2;o8?G8J2y z0r4B7a&I0NMX_f=vQv@oZJGLZmE)-k360Y0D$dX-Ps=C?j6&As$?qNO-2EDj`DF8UqN(P}1zFZl(2jxUy} z#*xPqeBo>Y{|4JCNFfzR3V%9|?kPhbQ?q{a$kE}AasYZCfBMe;Vd^ykE|DfEe0n1# z&0Ic;$mi5BWofmL3>K^T%974C$SCoV5pw!H0DyY|Sy`E9Zv`ch66P66?DsOZkzPw- zgrbIjKe6bWzz6q^$40Sb-2)}EzvleJesYE5^C_!s4K2l@p`BrFMghRRnK=L#Y6*SV zr0v8+L!=Z&%h7}x;@-tOyzd*RW`90kc6v1tA~C`c|I6@Igo=SrI0CMaW@q^GWk9q{ zK-1oy)+8oD#0TCPC)y0+Hzd=uDv*LgIUCj1Az*6hEwBi<)Heh6*8nGm8KKovH_vGn zRHCpicaO}F$TgAuEs&kOX|H-!_B~mj>~V>|&y=RYp)_ zxFJX z<0EBa2WqBt|NFz!JyDpg60G)jdcp5KM>G|-@5H4;En;_Ggr8Jtejmhiz`o4Z%O{Y$ zAOgebOyXh3G!5hhwv2nRWo}wDHau&eY0o1alBZR)=8F+ljAIy85 zHexXh9*`}6M%PqBD>C$U3`ydYv?|I2>x+xkYm{+IR7uHwI)ONZaJ@9UXs6Uz=xyjs zH}Bg@hS3z!&fKNpM-RKW7Ok!HGEZvN`v3sD9@Dc{O>tB2<9d9oOgjaiU71|UqD1$k z7(RD^EUk;fkuHXhC74RQsD_#*6w^)t zjY;ziMZuou7gx1+Ijm>w&Qm;@@NH`^^8SK5_*dWZnOydfTXthdzVVW7gJ80$?OWXzSA|B(^TC6m+lJ3dW0MO{d4NkR-np_7Z&cw*?%D__K zHy|QMG;5ZysFdeqFL5*^k+2-RhKEt7xk9l?P~|}@1f6LJ;V#&{czR@H{E@u)60_kH zFHsXg8ev&{LjLdxA~l`{rn957S-euu;ANA&L|tYrE0wTRk0~l^RU2}=I8%lB#8w^W z*DjRj%Nk)Bqv12+mTxB1t0w3LRfc83T)fIovO`3gW&0)L*4Q!X@Hxe7*#rOSa4OH@ zIWK7#NW}Q*X!D!JoVa8F$gObgypO_LOA+H_L1BFz{T%@}Cs0SS0ZlDJ<`RCEH76)& zN-FrH^&>Vz_>@rbCl`2|egM5N)0>(WW$GBZ(#WtM-ZUia$bFy1+3orHJv1CClh7gt zUoy*)va@rES2Ebu{dBV%E7xYfTbMUl_i7!3A8*vdp%*@5pJ=!XnuH4zjCzw_=Nwu< zb7BPSci-9X>CTv_sRPnZ|n z2qXX^I%b1fJ`{~4*%c%#W zA%l40<0{yO6B*Of^dI%1Rw!vT4%t2g8$ z#{dvgcq$W{U8gx8r(#W`N71UA5c`vIRM)OCK7EAUI1azjn1@I6y;aZkSX7s@oUqI4 z9i=jg%4p1WIahOCO(mA$O4ONAPna?RJN8tE|cqYrlW}Z~j zgM&&s!jI%cocY4)_jY&e*C#)=lusr)2=2L4j2FN;3aQK-J+7p;JSu}lIiey3Sny>YgnS%6%du{ubyGl;r znxdzNEVpnAVU<0H1hr^O#mT9kPcDf%LbzS(dE~nuGKFUzH*3Y&!k9u4zyEY7ANC$M z?RP@DAtm$VtArb45%gU$$1Q4K?_9#SPf72v_ zf8ImW7^(9b!JZbY#PCk6A33|f-y(dr8AV`#sy97SZch-K_HOyuayn7a216+7EC0ZP5aN*w| zF>5l`+}a*yonTxKHZmX-cOWLx~7jR^#~pzchB-@ zXtD}y*E;4Qw<ATJgwuBKBY)4HC|ay)Ds}}H5SRaY-nOuS=I2Vjfyzz z8-TZCrZY=3;HsFBwmYXPhXr zr0M=IvOOsG?+fUuU5QoD_g*YNF}$Cj25f&28)cZ{8~)g|K@a_c6_qKzTOm9e?XPWY zFdF6TDo|nG%?I3ZLRdLDrMSn0nz>@D3xQraVEp@idlNEpYAhnEf9S9~M>G4C0jWCX zawjNoY5j7)DWZcr!DoUEGW{LnwHOdS6jo#}@;A7e|5+ZrQ)I4Kh4zQ@uS%`rRZQAy zvu-!>eGD%8uH207pU^5E^iBzXM*Usn>&soA5lKUjPoGX7GC8fX<+h=d44ljiy})HI za9=oU#qPx16d9Eo485j~v7yq6gQ=1tgxjRJvE3FA#A;_p!ofpnY@FdbkBf;HB-3(E z^uAr8akPcZQSP%omvqj6bPIHFtR5E?aZzoDx;lg?ix=hUe0br)^_)kwhfyZBh9G8| zGxfRXy1q^`YxH@B$-XpQ$bQ~L@36Fv4~{2Sd&oo}9i2Xa@g|Q>@6;UgCSGSn)AHNG zd&}*UyUZPwQ2UGzzV-QzB!KdCQ2 zs=h#0Hf%{Ls$-=zeT$!;7W9B-vofY(wsf|V%`#m+M4`t@1ByN z?!>n|2Y=VGmZpyt5rW9k;iO*PcN+d=#ev=CdPIgYm4YM2kn#CEH+di-6Kpo%D|Px9m#^PuC2px_Uxk-FWuYWTasNYua(2> zw~e4!Ux$9u+>1WJ>Bk7+?wM{D7ee~wDAom!D(1ZP>U%pX9I2z%XZFuwBX*3i zcm)>NuvMGmMG*VW$wv-ao~G~-dKD>5Gtj8`^(l^V%pex3eI+j5Tfs06+v&~Uj5een zXY_t7xYvM>xI)=5u?;uk}_aoGDuLaWoxpE8|5LTLnj8@mRr$#cKq^lF!$AO zvepLw1UtkE#Lrj1Kv?dc{uSPF57$JRJTQF%j!B)@m|UVWZD_X%%sD6&m4iog?Psb( z2~*7e-7E)+;b=l$xL)VNGQ+EjZ73J&)!1{;by4Df=0v`lsX8&oEA^kB5xUZ{+2xw;YGO)$BSe#v~B0s}(0 z-*kK=mu7)j8|!zKay*N=L=8z z9;5|{h0i4+`?C`lE`z?#Znn^a5S(j0C+C8DF`oAgn_sbTjJ{?lI>iCkG z;dcwt7gHkExrf|iRbD>Ba$57+bOvS3RCP_jw>QV+oyF)71w2a-wk-f$$+9<4mFnA} zDXBjs0(}N`#V-Q*?}2X*yJ++%Z}LqE;M4^H_lM4zWTC)6RlGivi5iKrkTfy?G zBy($O&h$egAKD`l{srRhuA)xBFy^IMkl|B*3!ld`$#t(Q=(7z@k))Ru3K z4@JNMj3#*Vm;D;N!4;cOy$kr%g^!+^FaL*5|I7Oc0J`U!=`uo**sa@H^~R7r4s{FS zO^8iQP3(DJ=K1ogl9P>*A$5iZR@-rh+M^16Yl}BsjpJn*#0lo<4PU-z(vacqJnk~K zYk#+J@mZ=qf9%cj_Tr~n;P$2-OansZi74QsEyjKQWMlY2PP-RVo#_lcz+Fx;YfzoX zU$#rk^8{;`fn;Woq$j5XjM`e<^w^WfnjGCd!DbuF6k+e|R`bJSNi)$@9PuTiLXrGS zrJfrz=U@b?qRL4l0pC`RcQM|yKuLO3oMa<^Ziq{lIs_IUH1CL}Db0TkEL71sWEcze zQ|LM{J}o7ZLXC;1zg(Engm{!ef$MY=cx53S3#|80K@_{C`i2EN^J)W-B9)?s|78Z= zrQIdjzqCYK0lICLB4|3CmDNQt(CxDouf7OaQ%`WV*^zR;vmrL^1b)Fh z-WdG2D*4dBdL@{Gw5^YU`^XrO?bR1uKeuTyB7z>?H8;->^9OYHC=&5G4tAufns4 zKl@_@wEBNeB`s3-={{;`zp^wfA$ zkt8uKA&qR{C)@WZA8}BQBw`MaDZ9=nW0WNw0@r-|v!)|s2+RG1lwRKTSVZ23Y(98W zbHId$d!$X2VZ13X%usW=&c$J@#lGsw$)-A6BOSGls*$wMPgM2QI&ytb{i-aXUTenJ zIAnWlM?S94T8l~!r*ZV$@2G!>uI-E)hzx#XH*(O6QFx3xKq|6BxwEEIA$=dGsT~i= ziITIj*CXjjjY^QllWB%tyK&&&58G4%cQ`%g!#zp#*ZsgS+Gtu#U^}{ zHDGW>UvxZ^|CzC(5)J@7965LWs2Wzs%Ep%Qj+1^K=D>Sd%uH;UTU4D^Y>@j2(Px*f z%2s*g0yFpzQN6CAi(M>i9jTT6OH}Es(bn_=6eKoVgU~+}c|@)= z1h?+TXlx@hpCRWHe5JsHT;Po@dZgF%cv?1FxE&c$FtU%{p?Cl+t8zodeeG`P}_qqOvD!v$J1sBW>YplX?5x4~wj4 ztQ+Nb&_Ca1X3{qX#~wqi5pWl@DtK!lfy$e2Vl@sQTX)_u>G3@5fCEs|-EoL; zs7SX<88mkc3|0T`P^hGMl>3JxvQ)U$m~zki6E2>Cknvv71=e$REx3wi3g*?cmA$P- zpxQU?{cD#J0*iEAIa^ECac><*azUanDN3jj?e(=*Qa>M?&|{^+*_!;U}5 z=O1GIn{c><6iKILo#>ZUNm@O&YE4-Q@1(on+bXlyOYjVB-e!ey%Rs~LvD(kX_~AY% zvRll-GwLz|2d_CdVK$bUu*Hg;mma1jV>j$j;7&(wrB)q9<~woiL_+NQocf7XeOYw? zFh2aNa4*_NLITF0G*0SRiS?em^|3Z0!(5k6nY_0Q%~QrJ*NP^v+dfT^HhO>qIk|{l zE$%f^8qRHBMCH#$cJT@`_#QiD5oE{U30@uTCO#b0T!~^0ziqL6o_(`&Z=>~a^tEHj z*VXHZw6#PZu7XYac&pbXOpJ{AK1ob`BiFX3iAFDELs08koUhh!{dTrs|5|Y;NnStr zuW(k2L)3wfL}vh)><}6*$&01zh0hv}Br{um+pq;ZW*=TkuUIj)m*NQJ9?sFA-`h%} z^>12HbE0C}*~`1-nEuGqb=H-y{t&h6zFF_U;(R$7w7!1Y9@BesKYjgjd}`+z^fbs8 z)rx)e?BTf+mHa#ANOkrc*Bq<(cWj>0r(K05_NihU73bV^bQ;{QQG=X?0ATW$Jj5+M z@8QRSfOx1Zvl=c=bv@C%n2K3i_AC0+(Zp_7dKU zOH>X5sF@evINO zF}FUF`RG_WG`OgiFo`b{WgWh=q^zj8_Dp=~6^@3N%o8mKmPJ1+!Tr=OwUgm=gynwI zu3irHSVRMX9ELXo_jfG|;?CW^41rG>ZzsJ?mGpMb>j`7i-z|zNey`~eNIK;({n@3T zJMIePKh5u$;(jYEp2aiR*>5PB@vMyHeSOD{0!@2_`$6dJ(Kn58>n5Gd4~#Z8 z`)$r2xAe5K?vNRYNFNdB>DFR;x!yZ5){f7b{lExu{NQLl{G%)|N{>LkojqCw5mkVL z@TA5p2xr}0UpzC|WWs01y9*dFGITorv04JvounB6wyL4Owe}0RYNWe`#PWSU-KycR z9MV9*tx(;R)ZHt||0Jfs#aT1kXq_`3Lm#S5UCaKgeq(YPnLFGc$doI03w8X5JZS6f zKajX_k&e1Kj~2V#PV3-H9K2mw^`88-X#%@;wMp7+Jg@d%cT{G!M*Ew^jnZ-M&foEA zp}y-ZC6>h3aQKv+tu$T}5L%>7^3CKSO>GJPK!|Ty-ov9w|EVeyg+2Z$!(G*EyL)PR z2f-@vxz~n)!tJQ4Jol`a<8N$#e|q@;ca5;z28F{0$i!;G;vap@zZec7oEr#)qWJLO zA?P2m{oVTT51anKXz)+L{fmXuMMTy8KdRin81A1E?mu-@|5L;Li=+DAmis@QRQ~IX shyS+R-#qYNC#wHF%l$2?|2@n7ofiMppR|J2X^zi<3M07#k@*Z=?k literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Headstand.mp3 b/op3_demo/data/mp3/Headstand.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6864057357d3a156d50f64e1550717318fb797bf GIT binary patch literal 8428 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 A3;+NC literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Interactive motion mode.mp3 b/op3_demo/data/mp3/Interactive motion mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..db2f2c96739416807c81dfca739431b48d247d44 GIT binary patch literal 13287 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℞Tv$`3fz15pJB$z8G25Xwwq;VDaQn=Sc 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

erG{GkVsv6>^%5_ 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%0AVxrhUQFX6e_XfqS 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�(Q9&xgX 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 P-2W(|KRf(uCGdX$c*;QH literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Introduction.mp3 b/op3_demo/data/mp3/Introduction.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..87c699dcc96d99ceceb9862af61ae0b8010b3d61 GIT binary patch literal 244819 zcmeFZWl&ttyYD*;?(XhRa8GaogS)#E+#!OyySoGrPH=bE1Sb&O0t5&USeN8&fAsc1Hk$8^yKO3sT<=Rmm=pbS-9AZj*X3t zHSqGq#`^U1Fx1P-%N-eya~Bnh;$q82%Vd6nt)a5AGMcT<98oYlokwwjcZ$ytHutS4 zym|fZNc_c-$|VR5?S3HoO$d^#Mr#6aZ9d3A_80y)j0zSgQ3kW_%5)JT$8dEWO(vcUbcd$%M^ zVDy`b$D)5oruj2MSTg~EaYBoH`eipc|C-?%jlk2zh4bY%;Ck&weyBfwzDsm~ z`L1CQ)-)GpSAt%BJzpxc_lH`)r77@YIZT@Dvc5Dw>8~9O3qgXa=>m~I%>%C`8;i#Y zvD{W367u5yq#d8?1n%vrdnP z5Ik-dB_x1@q5Itwhml9;hL`f*Ar>keE-fv^;BfDR!L!RDqmvZwoZX?-+E~Xt_h_Y6 z+Zn!2@2{uVKA{|648BMar|fMh8221(WDiAS?2K@$xZM1vL(X;I*ZX8BFP0~*pamg3~IeV&*M$u!t?O-bUgA~8G@WD7O!j& zt8=>ZxuUqdTkrlxA$65YW|8-of8gje3HH+7!#!tik-wGF&=4J8Iw7Md{AgEyu9tOj zyWBCeurK;DtYjW-K8PTiyz*P<%6aI6`J?{TMMP7OUDx_Usx^Uz=HFp{QunlZ8-5#W zGH>do;NoVYJ@Z0V>S2X4C|o@QCzd+44GYbaRZkwLJ2u=q;JJ*J7{5%U5W7b0*s8p@ zD|4e;cP0t>e3-6ohM`s%0<|0-W%lzve_vE97upwkf!r`lA}*?elyy9P4?SHJi(=0F zfg(ybcZ(&(*3r45eJR0|VGrR{)y&0kp}Frd)AOC>?@XSjBkZ}Idu~}W%wi2*NPtwW z3hI!%R<`-F?A-pvVWL<-d!aNF_R>{i+H4YBohs?K*K@Yfb6!kzv7&v`-j-e*TIZBh~BhRoP!ZwODyzNa^E)o4Po_$L2_XzjQ2jKHZoSKJ^t(;9dx zE#jQ>s*&FJL`|H8Aosi@SFX#!&Se~1fvno)%`}-%i^=3!N27VetD3rn;*#N@V0;*s z@*2(!5oP^kF|vFHg%h9*e)!?#8v<0jm|IG#`7S6Z026mx=l2?Jq4lP^nbe_UaGTEl zPgjR0mNlNhX}LmEyb4sE=f{(qacOnzn6baHe<#(+0upnIvW2S*#8I%_6s|BEu4W?$ z@XU#P(yl(_`i->`60FR>o%tvd{oOSq^)aOCSCRklkabD;GSB$TbylhRSZ9}9#F&k| z1y>*^=Lndd3<@VtF>w1M&1Zs#5}$c-spo1%q4>gp=1sb`M<$xQamU`b7Y^ss7VRnR zLc>PZ!P$^U;2SH|+-T8vDJJkDTNABNaGz`4 zcQQD*4YDkv3%APyzV!~Cb{jk?vYcVBH=E%Z(Lyn<{j{nvk}kaonwk>GZJSLdvjhIX zlaL14hn*Ox<%}s8u4eC41Yyjq${w|P0N~;FW;K`C@OoTpBNwwhFWcXU33J z4~h_NvA3+CkwLzuC#s-Rm7DGDqvxLOZpIzLwK4KfPZGVm@gT<4Lh=a{X;VZx}pibU8U|Nq&NyLc#JI5|QY!OOP9)BSJ>C|Ams7#qxbtoKgC(-e90bx4{mIWS4%=lwri%oc|te}K|HR!me(9Vn3~+^(xgfe zw|MlP@-njyYC5WltEV}FuP={BqhY)RWsV!XCq&}`z*YxXe1B9ZM*&6;;eAi=3mR1y z5|~O=>9GtSDrHl@v}-D=gs+xxOGq0Pm{F1F@G>&6y=rRO-MWUFS{wjA!6tJSJ^`<- zrt0jani>@z3ky?xujHvhXsD+^RJ5n7_Jb@cDmIU58=*G)5Wb>>k_-=rkPru-*1z7M zQB5aMr5{xHQw04l|NMXJU;QsX{oh>xg>wdhVC6tB?ce?Oe}3b?GTeVMo7O*;`;RL3 zpA7e}MHQq9qP(Lk8#Ei1cz$Yh$0D*k_}h>}#3$7AlsrfiP5`z=f(h&aR#O5kc1<}r zRr7&+JR$R#{kMt*L__`k=r6+nQJP_lGBFINnRs1LAZ&=(OJ1W!^s`9sGU&4Uma3kJ zwD!^eWf*;m9mrVt|KMQ6L7)k?i39q|oUZ}mrY;3k$ZkE>D6lUVzO={B^~PH~t@-{R z<#-o40~jQ~E%rTmQhLBnDAXlVzFe^N4BP=|Hx|uo_9YE_^ifF@sDXv8i3CXrS6|Ud zu?wlcz2>QlF6@PV*uOP(z0tva*C zwTM59nDre5!(`_oY|?ZuDbxJu&>TFL$}V_H5*J>KyLPw%Yg&D@YLJGFKjXY5x1+~V zo`aEyAjKC376}G}X2lygG0+g;n6lr_8VZtV6mZ6HxMYA5;I|iK;FLiwmz2qHx_q{F zyZj^t;PB+Z!&$ypiSD%0ScJrMPHGfGU;+39nR%=9^?XqscH$yKW`YPaio`jn<@|+D z5yDI|3SgL1m-hx_(&4EXVFbxpOEfvzlFgH`DjH(GA3pLjzGSRt4`{7umC}KMZ6E1N zOe5h;*TM@YWEaeTBzknqhyk0q7(vNeidpbCOzRug6=jA+GRXa(Ut%P{!TpI*_D;a(phaoRL4~7XYHO(Q zTwAtpYH~+Rpq~jx2SFfe_q7_Nkefa{yol=q^Imp^ zN*>XjPJOxICG5D$6P{Xl&r9aG%tFnf6bG>(Mhdk}#-rsP(vdmE4;Gt*!eLTssIT+; zLAn_jd=SM!8I{P1tjq<{$i&hxAq~P#w%g^Mai@hH-gAqQ!qnE<)+(dbKYwJtj(NC~ zqvoXA1!G7YetyEVXwzSFTr5g7gJ)h*|7mSes2IhiYot4${N7>wACr9({%*J}5MkgX zu(&;%YaN;zk%OeZ<|#@*#?m-oRxjMyQ^-*w5;azobVx6>uR<+C1cjrf9I)T>>W3K1 zMO+^(|EWGg#&Gp&W#Nt{62}++kyu?F&JOuO%j8Ff&g3>!=rlL%Y4cl2RDAEPQTeKo z*6}epOEk-i0CyIhcfxHyMU_?zgLAdBTeAku774T|)ZRaqDk6kbUf^-8)%Ho)<{nf} zfOFr{Jh&PAo!w@`m2E)Yj2+QBX07_M{%|5lY$Aa_qJVcXrUIovEyvB!kT}6hpe`ovs*AdJJQ(HcJ6_H{Z>Aao!(J9%k{a%KkQ7gGZS%`go@NH|-)RVTh zf$&}xTZooQ1B+hOK9`W6H=L$TkfrE+=zw<>H&OYi!eX`i+w zw?m(W-A{FNV5mu)juMV;ip^$eoOUMv+xTZU`i5w4?B?CO*>$LJ47Bx0UlAt08?NbL zy%qmh7)Oi7pD>YFl!HA ztBO~4by^#mbzc|i_>rvCH+qFb*A<7pM1)Soj(H04Vln3r!=-%yB*_dQ^UwyOtl$A|Q46X0WksUk}$mp)gAS7?!YaD~gURF=A@QOFn+4Ury= z71c`7MfkrMn-3m^(+F;w!<8rpV+2Fhv{T1_HNOmo@l#Pz&)Opv4(!+m>LEEd1eC~n z%~0krdBvJ!+yZQzPDEqWF~^k+ETzETLuv|6rF1G9?2=;nZ{UHH=L~pwP4aPmzcKSXFmYI`9xwhC za5!(LY2%>qX1cf;L_?a!$j48j0WqNUs2^k$j(=qI-U6~MfB!~qm78k6B&xS!%rNTS z{Y=1XnaVcv!}pQ>{+-9$>k5I<%FrQB(eG>PQIs;=-eKWT;S?xIw7ZPQWgCLk{Y-GW z6H(gn3EvI6{0gB)gasq_npp(?8iNr7j*TK*6O32|jeycrL0LHW@8Y>EAYzfKH^AAi zvh)$*RT3f19aTzc50nZvBjU*H^Ywk+utTusYsZJ?LkcPON-46Aj^~sQcH>l%Sl6>N zrwik!qtawmPy9zl$6hM!6(PfL!*DVrY*sX&LNioj`G@nT@J}%1DHTl^%T(zIsCP@Fjx|b?X7JQHlM~VdD=!p zaS3r@keG6{AnGYE9es8Br>nHNv8)YiC2a%SHC4oA8B-q=&YkjF|NExT1c7N_O1EQ@ zEujphPeC9?X`^9I{V_2fGR3!=(zNOyuQa~ABGb>~XZYoL6e#JSQDc-P;wxPIb7lA- zOUc;@czAZ+&3ae86q%L^*8NK*5Ck*V-X3bXV9M<7@5X);1j$nwsMa1t zDmE2|4Su`=g@*RBJiHm~RHz4s(QO3@JCHUl+ceeE&qT{*lN;vPGf0oXzOi%V_yusV z(fP$$4F%^&^N4@h3hlftS;d`wm_6UuUAN7gK|ar4_rw!*7#L9ukxQj2EuS@-$q_izD6pIKl0z*b<*+&9%FS47{V|u zN?r%r8PDoo%jK#B)eq}A%qO?yxHP<_LZ?>Bn$TT%;s5YOmj+H~t9RwOHvL_5dbF z#m`&C7e{3^x0T!(uR=y$0!kl`U|JM}o=)*)SB-$B7_E z)f`(v40iO_%DCZR1$I)TcOFIaTmlzy4>L?9ZWB3T5W3{&yUdRr z4m_s|$_InlPa`Y7cKPx&Nv__f8@|EYzL(|t+Be(k#S`%O+3lj}LcPMX3h zaj@zS%9TmJH>AXLMVB)GkdBTkk<7tu9jyozZb5jRpxY!P0{nH_(1wGMXbjfEJ%X80 zt-g_%Fj>$vF$scQ^_Wym=k7Snf(-kfyMsJkMyWzG@8q|aQu z3rhlwrXy7&(~>F|g-D9XN+;VW%Cc6EFxa7R-mkKa2Pwb%fYjqq_0tJAxeP51)(-rE z%j;^Jsc7?Wz!m@iq%TXE&?dHPLdgsG16}Vwe7L{U+iBK$B@hv8VE} z3Dv@rm|n{uO2yGsuO2*$fHxC{18 z8s8Iz3e#M^-Nb_%JUZ53^PLM+I1XBxpa=c|g!bnn8^vkamI!9^GJQ~d&sD#Z^y*Il7S zfX^g?VhMtq1oaB93$djtTqnAU{9^gF@w>n8W7p##VWJ75qP{h&{~9MvZv(k#+FW7b z*r~1Lkr`)`q~r-5p_gqz{?-D8BiIV;%tNBKCL};;Sv7QI#YSYM9IO4KoZ3%kzGu?YojD0h#7Jv4x+7v2_hJJU)NN zsmDSpA2xiJ0CjGKXb9U+EFZSHu*}i4HC6?M7?=^2n(mS{r$XMT=hrBF`q|(Wd(h=* z(fg$VSG%eu14HF4nC{W*-WdW2|-s)w6oYZ!c4=#3C6mTL0pt@st}$4W&FJw z#gSyv#rp9u%G&n~+xA%!<9dkqBn%;E$dYL$ZH4h<8h17-jp7bjM2^ma+x?L#Sa>k^ z+))}r+q>Z?*e;&TP&hY=zSZ@09}|u@p}GkJxrSD^6Ux3H=!04$jQu%bz(&Fi;Mtd%u#d0~GHXJxmA|&44p_)nZBg!b@QLBIe zv5ZFoE6v%=!O++mXCVByG8LXb(OG(bIS`0o{Fbdx^|6oer?V&@OhH+rDjbG#SUCy7 z=z(eOjt&j7fsR5@xNyorR03n1w+Ec1=G4pM=th~DjD=1!b59gDx$GN>AGiDg%j0}t zww}R7mf83;;?rbFyk;pq0vhjlR*V)6pRPD-pJaqXPA~%=qvPReHCl{(2r^H3%p1?0 zl@w;VnPuWuKhW>o73;&^dY5)z#U}5Wp*=i@bMGhP`uL6Pr{)&j2-$~d+@!-m7$yp3 zep|TT=X}_n`)N?iWl*wyMuEclDW|>_;@HC^{wg<_z-`A-HuJ2O$bMxE`SOj?;;##C`t z_9puGh@N}4^w8%B?~d=!l6TsDt24q(ut4zG^k4B|o>^u3^$v?CTZ*i71G2AEYkL)5 zqg`HQjVJvxcU4lcaz7i&hrM?-iOdmTh_E^sxzEq{)VfavUbPX2qf#zw2;0 zaIm@Ep=3~;;--Ji#$(<_78K-WmH7EniFVcUNSCtuv&NqS=SW4Vb!s&Cmq*bttnSG6Dk?Oc{#YK*a%F2o<6SK25*Z?NEE21 z7R49J0lyX8dhVdT>DFVZ+){TPH>XQA?R$a74>ysqvQ#^Y~fsDNc z1zcAK7S;HiZ_XZp;fJ;BoN+p;pZJahP5G8KpY)ETvM%^v2q~ zsf0%LfKJM5$;%I3Y=8;1udfGXe?jO>k%|U?i;gbstbeq?>c`2-mFI{Kz798D zs%Z_ZHhSkJ@xjkAK9V(IamoIhSM_a&ab{*_?n+)2pO8xmXlyy(aJ0Q?7~?&pl(sPT z#WpW+`;^hERlHraM4JkY^ zY_c!^Sw1h+)e<^9S_joL*)UcT0 zQ)Ic6(%{6hAP_NCxf~DYS3xS4E55YhXYD0OPdZn2ecFXqtf`8!;y}X+?j}pwoM?{4 zoAYIk%Oc&&v$(x$u8-d*SEMUjU!iP$>3E+={@A@`GwSbWVYBS?OdahFp{_a^e-3fX zgj(*BYAnk~bW@RNai;gF7}c9S&^zE4o1)n6{zCZD31oHrw;QBF-;t@}4rufQ1;MBW za=1vj&T(eBj@@k}k3EX(l6-1Fv_U@#|xTk6S_A|E74=Takf?2IWM3l<24!aYh@ z66nrlkAhmC6SF&ThGu)WZ(zqsBWDxASZF8&y)gOGQMv*BBgk%NB)s2J3|A0v(z3D3 zF8d(knyxZg{=)hupNaRZT{TN-8_uiQT6){ssy3i-p(2I| zHLY1bFvo`P)Q;}t5_jH6R~7T=r%YnpCb0Wizh$-VF<7R*)!5`9(rpBj(tAfcueNtO z9vrOx27H^l+WgASd}jeiSS*P?d@SIQA&QGnW@=@n&uR$Wsm<3P{!Iu~j=Mn>@b zzDm3#R2@2T@MvU-4*1OaG#*{t~TG7JEFfBCK*YJoiC2if6)8$xa-C942a zZU&hcO5TSpaid5_wVOicSWpKx0q^n12rY_7=w}QR7!$=oZ|(P*#P;-1;YjH9)yF=6 z*98-INcg*)I@wbBLZr!Nbdm7##STy^;Kie0s>n!~k0dPiNwvVq!qza+UG zoxFs){7P~(lA)ZI@9p|PzM;Si)w4-MyICemz=`-(4Fr3Agr@gPwZgl%L3D=X@L`%- zQ8_rDm|orz?QKk82v;^U&inSC0*Kft?@M@6laJ< zJw}D$nc!LN4OHe_Bc{+LZ9C)fn~^`VyWMFoa&qF=j>~uM(HRz*1wIF6<3tf9BqD&E^0Phqw3mM}hn$1aOqRLg6jezqGaS4-=wDc?1 zPuVx_Uv9bUIXIHDqvlOQ%IDDXO!Bk; zKycbk_<&$NJVJtHgI#Y#(bI765rmPNJM0MLZU%ughrK?l7xTrujzcJ z@fIuc`k_ZD<8x$V9cg2~7j`DcbZvw5Hq~~F$}~%{r6K_rf`NJhjihR9kUMdAEyefC z8@vYf^2NngyWjQSqQb;uh!*fZ3=oZuD4D#yLz3&Zq}ju>jnqmNpsSL3JB}Atg&|)g_z~c)hSI5E=8QY32S&jk0pS zs4IL#4})SUj>tak2&9dUVPx2~!z*Fi_sXj>MCC-21F8rqUv0D;g}xC53o^t~5=Sug zju(ms*&cJ0a+774hp#9^S97Hsy)|qZ%wqof{p>0tJ^ClLWp`B$R5%@;s>-GO3?JC# zT#3mcCWxFZAi7{5N!sk7{!n{5xO>uqq-d{;*7(igL9KFW%)!~U2EkVM_u9Bh^*P0- zdN74+1}7ICrhmSJv&qZO(q<2Igd@LUR(W}edWZMzCGGjJDQagngOk~FKLh;jE2G+_ zxV$Y8@xPaeM8IpEhaoCQI0IJv$)fcLrS1vXROH4Y4B^x{pm0PK5|#U6GrHi_3SDEJ z&A4CY3#y85K6K;lQN(hLT|F;5aWD_U<4B9VZs>d`rD66Pc#T68-?D=?@c+M#_RIxtLepZYm^y z>l^Nokz-%$v@rb!b0Kc^PUgfqALG|@L|kXp>TS)Zj--<&DBLTu%e;-ef$>l4*!#xc zQ29)24X(_yH;P)|if6hIwRW1(Bb&Z~#r=n>IR8#A}|BTKtU z6)e)tWsG02V05GrW-{F#TT-w6ZrCC7#?91vuqW77*G9@v%PCNd@4vvob%zT@=%hOG zI6DKknlcr6OLmp5j{=*m=T{FG2DF3qq?rJ@^G%ZLu>5FLCIe~?h8A3HK>DqGC#KBM z`i}^RuDpcbY8*IW$-s6c#Muq&XiMkM8RUV5O*w=cVb~M`kqt$?k${O1`+{<{&Qp1Y zXeNhs&K3|sCWUuWO(px5TI>mgVv4Xd*2dGGsq^BA7vYR4EeSSW3YPPp41nXUR)1ds z;ECkw9T$tG*INs6v_uXsYAvG)Awy5_*HzH+t@2m(I*iP846DB;)b@12zu38jg9tY= zqm%U+oYH`UM)-agGm7z_tCaS~mp3m{E9F)_e1tWgh**ZqLS&Y~%j7m`afcUp%$<}v zL5{)Uvy6m1vRq~4BaK;GySt|<3bq(`O)H=U|&cbk4L8~If4jw zc!ik>VkX7aJi}oslESlfbPC0AS7d)k6VvoLgwQFo&6o7oEQytP^5H9uAM165DkCNM z)l#)_(@}iDn-G;z_x8qj#4DC(Leve6F)vRnue?t%FCo@=<-hge`jr4SMLx$luj>c^ z&38V3;p+C~88*Ofc61G14t9F0Am*{WAmykMf?VMU^gP|IaeT(|6K_rrBdOEg^@upJ+du`iBy zS_FEi4~%Ou<4o793pX}WqwPuT&|xB@W{jr4?~IFxGWi?jUaWCpPc~Uydhbg-@k9(f z1At{=>Gu$O{gacqyiMI`xC9x^IHuUFrDWf67SNMtf)_45SEC;Fi1;4342=}5U~0RR zb+7&-*7)Or#F|~wRQA}lNNVjKSn>!5RA1u_xRgf z@CWXZ%1Tk&ptCksV#}*kQ3xsOv+I{R+xtJgRE<0UPsv^97w_aw(_c!DjaEWqe) zzFlj<=Mhaw%ZB<8OAFDCYiVblbbNXL6p6Q{wD2H{K>I+rejD+Q)!X|g5PSCI0LC(U zJ!mQOh3toMb4@=gV5Z9^MmwA6_3!%R375rZpK@EEd$f#r@KZuC9m+Cm&B_LbIMC*B+FMokE6Q zyPz0vXrDyF6klkELZ#_5fKF-kkjl|C`!dRz4z5zlPZu&wqal@?Eu{Q4s9ch>;!?y$ zB2@Y9$h0*Zm3;DC@eMdmweqQAVXoD2GPk`G!or@k5h`b3p%OtgLBZ(BJu(ZS&vGa; z@)^I;5KPs+K3#k%=xkq&%iA|m0`lw$2HqOYR8;iM-?CYYIA z)+@j9U!MK6)ZEa4P9Qd5xM2Ghk05DZYNg!eSM`MQ!k%9+@r+&w~kql)G(dIc}gS%Wb=)hU)gZ;$i3N ztAwNTd)AXF+R35zW82H^2`-Qrk{HMNpg^wf2v##sq0&E;rw(zWTqb6U2^Oldsw7ma9ScQ ztEcgnx(4lO$v7G|-?sS!J?^iaF94f{6CHEOH1kN5x|t8DFbUX&ZbD(#ffVMc zl|Mg>)5f9ll2%f7Sez(W+!#v6>{}=Ey(f^3G=C^P@^V}8)=4=Rg5`v#X~7}DBh5<- zFF0l9;#QdT!}A1=tl0`xx5IF_j394ccJ<8%FBw?J6ES>4OSy@uVpH=yGVc=38d`x? zh^?j<>-%&sc`bZap7X7q*~OH0Ql3_;`_$;AecY?GB{t9gdu|8P2qZWfZY(OYREL_8 z!;ttTwv0mDJRz>vLR?-U1$0V9CrULp5UOBRd*R!fn%16>+I-nVesP>24?`8aD<5Yz zf}NjsDm3@~LJyo>0pj(z13(*1m`9GVAxBh?+-;y^hF1>)cWchMRiI73sB$kgT0x1@}M}HmlZ5r zeZa2VS;!wUaoqy)zEcDrQkYQrv#&HD5I9GaoKKo7J)&t)(UXS!O%pp^-M`%F2-iBQo4IPnlj;6dUdkK7sE z#mdU?DFFp!BmuAzum}OtaM*`dbw4$34Z4@w<+5vp?YhKGRWlHgdIt)zICar<;A3Xr zg9<=7();9sc_Q2!OEnvcfn~O>N@AX6{1UyOUW?9NL->aK9R@kv1LS&}On=}>jvM`u zrz|hKEIW>C1}YpNJ%|G~$tnl4#c}V_NFjrNkm%CvHEb8mbJO9vxrvNYd)r|hogQ%; zXo|o+1ucudEvLW`k#|$2hiSo0=m|pOs32*FofF_;inB}B50uB18veN}jgf*Z&1dNN z=2-k{IweW&qufd+gT#e|qWy_}ToO;Hvswpt&rR~w=9UCs+`M7Bz(<=|0VWDB;0Y7> znJF$heDVJ-eSM(R-${Xqwgo-egONas5;9sabZIEa9HVrGOm0lAbS#xe8b7CLJ`Gus zult(nV`2R)$r^TBqe&Y=kRueSCp@Pl%WEYKF#G<#?I5q>Tvee%futkV`>Krc@gZ|< z-^VTTEY&2^Afm6wA|C*5epP%qI5^)KDIT;PYJLbfy2-=W4h+_5zeOCL6j;5%`29m>21M57KAHm>XhQO3{etm0Qv|v zp~Bp1?g7+txs?5WH~Ev|;CZ8Hh^v`fvzpbMg1ha0cmJkJMqZkhkYVsX`-%Ix;f_ok zI+5t_g+Gzg_X}$PPUx6lI@=L!bfaG2jFit##k>N`=VzMa07^*k5izN`5po4nXH@s~vJYg7p@rW|&V zOi*3-Qhz0{7pW7EIS=s$Uz@Z+V%4?o?##3Qi?i-y$H!SrfB7I_A_fc-jng*EjaH`+ zFuy!N!hEn-poAa=ZW;3TZ!!RQ<%S^@lygai3ndh1?9qJL0?r&OAp|ufbXr)U)$T0) z3q^|cRMpM=O+$92kat34=wz~*4{`%6D0z}3ekIk_3}1(2vvf`OHh(8BS=#vPC`Gyrh%+2COa z{JUSGYCh;nf#TN5-!GlDI(gazMMtZD~&7Yrh)JGMB0F4 zzV&zNl*v6w_l1V3ZP}q_*T=k(g?*cbv_@Hl^ibG@^ft7ule>CGOEw|p-f=vM9vJh6 z=d2H5(m5{&MZD(M*cMZxwDdQw{a0Ha{6BlPkrit5m0@^l_S2k;tX*h1DaXY3@NFh|T}>f-5fYX<+7P0xnYzFbE? z`;q#uB=K!k3Qz_SX<{p&B}u*pOs7~^HDsnKX&ly0ur7HCW6N6PSKoX-nT?VWNyzMl zLnQEo6^c77?;A=={$usaRNU1T?Y$ZHaxN%ZM$?_5QPS&6;4QJ%r0Ln`dIXlB! z3IBhNoaazBn$P8#!`%t7)NmgUa7{QyBF(xoYn-KUA*i0KjGh^_Es&hw8f5&80NNZq zkzI_YZn&gI@d@G0)Pe&766hyopI#oZ@NexDcsj6D=cE~2H!YzJVWO?d^2(h2@(g@Y zUj<1ci4+WjjX}$Og+xw_VG`|n^<0foA0t_Px|^z3KCWf7avz7;xl!R$V&Z35u0f+( zLn$TM*4+=!e%SC1Z;)}`98Nr-kl9>+>rRi4FJcbnAi&hjlrumLEkiG;*R)_qmd834 zSQKEim+Fg<{JW-(w84ulyEz-N%ep59bkHQMIm@Y`1i(wUNX4vB)N>EJM%px3JA7;8 z{_PJD{T!`h`ToPO^{I~kllMU(f8q0zrMeks+gDOKFlU%Ok@(<5eE)r`l4$NSK;<^vP9cy(Q6coUcn4UhXu(Rlc1&LsfSph=2?|NYWukn$(eSb!Yz>F z6bh6x9P!3Ix{FPeaZiS|^rn{1ywZ`2#T ztE|t)?(g*o$8VneRe0Eev&J{sjeRt8$zanR{YCi?swjKqsr=WG#%j&CeBu9W+nm$C z>tBk|Rqxcoh(zJE#=k6$({a4@?6=}tgbuJ3Jh18go=$5 z4qeLzvw%2{`;W)O_fZANawz05xdSrrz+|*vlCZ#`{EVHag-GL>i)|(o;eF-zJ8q>) zgG4_N%u77D=LXQaz|5gU*CyQW(CsMq>sppcg2Y*^qY;BjWMi=rLd2;&zeGcoJEV!O z?Kkuddtzfr8knyAoXcuU!1OL@LiG0Mws9Q+#Fr3qMXm{B__MZee$!Jc7YmP*6D?Dh2u_P>-IGts z&h`2;fAghNMH|v!lrmu?3wFIk{nQtS>1WX;{;rhIj((pS*FFSpTmECYGs-z9 z-;`YhmqsK)SolAkKcYvFQJSLD>gT9fKG#ns_%n2i@8!gb9g7{e+OvQJYqePwtN8S$ zbb}>|VWOSP;N;Rc3x>5w<&aIg1n&n)nBF(H`Rf^C#5qfqm#7MX=F1MgJT^T4bHw&9om!A8 zsmm^g`$|fskp%NB?OwWzIU`L3}oh@JYtDqb!L~F}H z+%(JskKh&L=+%Q4M>FIxtZYcVe84dM=h`QtZ?@*Te#;0ykSYTgnTfrYBilXABC}Ax ztL6|FGaA>w*~pu4Xzoh%xNjR1L(3x^Jo2`a&$4x=88ArkgTj3f6e&xUSo48t6@2}; z*%x-TFO1ru%I<~m|9sU~d zJ(Sku`d*W)OtWVQy;qQ^p*6ZaF?{%IgZcR(lvJd)(5c>czuZP$24MaJEIWasqZg{ZxRh`*%0v+X8DKu#Mye3f6l7j%{ zKwAc0cf61KG?l|L2Cts)%lR~^WbiBzz2R)l;EeNuw^Fa49JxH-0vFHaaYOhb8H$Ia ze(45t)lJkx(^BzhS!X$GmC_z`b%s<5sQYOR}G=C5cO0ns!_P z(G{OyH{9WJACM0|j6!>2L&8EWh@6}J$k(!}Z5?NFLt%WGRD?6&V2wD|UL2ZP;@><{ z_Ex(Ihensqs(_*^YWmBQXfc9!X$3WxCw`&Hf=0pQ>PKi)UsDWl?BxxhG@8&<>_{e~ zK(4JZzDf&8_`f_g?2>`n=B1WCREGNets9rg$)~u7JL)(N2J;H#@JqT^&&KetzqN33 zaDP8u1<{DYUQXP}tHydQ-1B@q!gL>kKmCTmToPDKy+sFCH>x;DbttB=wl~BO)H

@*nD);T~OPPR&I`-s3Q@-zvVEeEYlu^@82y9@%4>Vhy zz;Dd4_)NOGepObyl>??R=+><-6=PR-FLxMomH!V-R{_*k+jN5#C|+EHJH_4I-QC^Y z-QA13YjG>k;_j}+U5b>V`NKQke>0OzW-^m=&+c;{+1<0t^rcf~A1-GF#BbZ}?T6l; zoa}plK6GJBu+-%nSxy+&QV|O;`@7aC6LBp(!kFS%@@jik_~>d!V_~o25T|=>a(H=% zIo_Ug#K4NJ;akIBzjrm&T7~PmK$Wc=^(=;aQF+LCpYK;64_l;yRvdUG3juSw01!(N z0y>9ne(P<{LB#{vPy5Kz-?)9ZB7!Ya$}=wVPVmz27pk%NPH(-&E^vv^&*u0)w| zqLujYp`6d-QZy2L&?H+Kiw>^S-nck1LUDTo1YE`GTW~KgOWF!?vZ&`^Tm6+35k|wf z=AE8rL63Ln4m>SllzV<&kBg%3b~Ao>X{SO=hCK_S8|(hJ#{K~=lGwF=4V({AaL+Ol zr;0>qjNuu)X3u2XIF!uY&@7rPe&oPA&r2D!Or}gEIITKhS6ln9g zcc%3 z37udcZ+>nBl}$Z#-m08n(s*QwO6s6|W$>iF(o(iCp-R(|EV>92WI7Bga+Le-7Gyl%N$LT;|cU!($R14)bnFDEVW*4F4cig8}N-z3hRBN#;66~ zffO;`gl}(a>K9WhciP~1kw&q$NY-CyyZs;9(R0cytjiz7RTH!7>~ZuXf9}mHFh>5uG*b_~?lL2;%dc zmVbg+D2x{eHQLKA`EO6odOrA%-&8*6@*8b{C{ntFp4R zZu)|buA4ko^G#l*x{6iK6r<7-bTMwjU9AHyl6$aGo6i6b^b>0xqca?BBMvOS71*z! z^G3{SIYq zx|o!tv!^g3gVmu*s%x4c%{tplbN2h(wz*n250_-{^k6bL2mDN1<*|T}|8y+m5cdu` z8$Iw=R+=Jxxqd#)qp0}nTk?!MO_5%yWyw|XNvxd+G9Vt-vUU#_HObItL}`?i|d}3lX8J;=+|Q zC~1^112-o(Fnk&n?-jQ18qXb_(RrRaCDD}@y|xDXh955Xn>fd!aCsiO>$iZhQf3mK zzobhc)vVuHT1|A<&`5_Y$*Frtm3V5CzEYt&V=S5!0%L2?lEW!uw|sexxlM~*JsH)i zm|T`obkG@e3~tl6b5x}-e^FfFGNY=9xxaj4eK{G1)0*OxPE~$rjTd(bQM-B3oivWU(cAAbW?ZCzR zr7b=r=3Iex>$}FVEx8MwvMPqxhls$Lcddrahl{+OWUXkfMWge??3&44xSL+gJ*WZggsnIXV&iIyA^%Kzm(6*7V~Me~qER6ih z)04KtEiRVQn^AKNg;KQwrL(TnUG+Uy@J>I#`Ei(Gb(&6k0n)$WxAqz*JcvT{DP+?j z^9(P|EpnKre6gAEgZXkq_3YSUO{|0XQi^x}I`1W@HdSOo)$lh})lt3HZYV>3Un@3V zF@8Iz{P#I_&6s7h#Ok`q00@tgxXbbE)JV1rl^1amk4gQ`(mt3JTNK+2-m9Kul7494 zgNCV*zO>5pX_Hnhj-H$-Dl|w5313&VUFXB)SZD@%TZINb5sK>F;tP8FGj^md=D(Hr zUSq2USbA94`|z7pWQYl_qU*&;^M`EznP*K;USFsDu^wt+NqyR_3ms7Z7MC7>{#z&zIKsZ`C4zo3Exg*wCjC z(m+IE%%-W3T*+x8Z8eO=CKn3S>yA?A4 z1XB_{(L?(3l;eiQ$P(7onr&$=wXS>c0S=eA6mlt}A7SSkUeZrp4A_woI9Fi2(+`<$ zw{!ZAFp8!}Y?j~l5A!SS{4x__ferF&qSEF%#8q>$qP&72kofa^YrsO?Sq(~c&@mbP zktB0gALyWjq}*7f5u;~$Mu)O<{iTbRZG|jFHOUGZ20%wjfsK)%`=ZXJNNl|&ERQfT zuT*YPxkm56h;7m?S1!Eu&574VzxVLN3HQU0IDhPKKbj>ldr9$cXEUrn#A1&70}Y&6(Bf7u&>axNo$rFD|}V z+kxKtF3-ih)iuw>-F>7+crf}ypgxG>2hwAWDMYL41v$M80+KSjag*X5wi3OU7A!7v zk3k@b*7eJ$an!YO%;Vo%%xOX+LYvrY4T2AnN=48ZgK#)8%-TFBtNJ+lWx9G>kbM+y zkvBg@t0Yz%u)5InMnTsMQD+a)+}oz2@!E(58Wn)S4i1rNPp

ztYyKy1H8z0e1vm-Iy!z)0E<@ zZl>KPcXA! zY3ZehDI`qMudf*UWJy&k9o|o~F4{gysbcx%8lq3GPux;0@>a+K(W}21YV@ON`yxI_ zOjxUM&Tm|ja4c>^p-V@d#?h~WTYPeT$dxKKuy&7wU2bhM7F!&1pC~{Cyi|X#(`@0U|bc5_dkkKOdMqdP_1U^+Z zSsPvkCWV)t(Ekn-w)6jyRdiN@_o)$@b0i|f6?te_`9}BE8(0iNxH}fY6PVdEWl-o6 zez=N-^X7w$lC1J}v4l(26Gi~IoB`k#nNskA9mWnduD6BJit8Pf zTLdh^VaH%r?MCdI=*|C_f?tWV5j ztl-U#;5#No^zZq82K345I3B${-72`Nwjz+jG9WVXS!L!tP06 zY;wstW|;kPOV38JX?WQ)>zvZO)rutzZ7~XjZGS zEtBuL*34S1hp~yV0B{M++)TmDbUY3RkDC#2{*1Bk_au|jNIsvYTs-gR1fXk4;?`be z;?%#~7u{xDy5IG15H*8Du-}CAY1YWoC#n5e@)(KUH8aTD&3XThtht^nRJuQZj!+WB zBQq2`@B_U+Uv(eDh8BO-t(D~$aM#&taoZ8mn8B0wf?v$96yA=-Vx&D?8=+eQYfJx- zL(x_$m32bVG0tHc#^5Ds8*lkfxKEiSV^d8fLw6BIJM)z=36+k0b3SOAFy6ab) zW0v6F@~F>;=&$?9KjtTX`&FPkzYtlRqNK9list5J3Ykq(<}uq|o0xJtAi-3O3O3X8 zn$e$f_@VmptK?$u4by(BKcBJHq9!!K0N6ZAgy)fS@`r#hk$A9V>}k)pnN>jURWf0HQ}J2yFu$^}=1aN+c~8$aPHbH=2u31~*T$CsPg81lRjiL?A> zf`p(VLj0o?X>#!^%AeY`0X4U3HK-*rYtMaX?zPxa$7J0`^4tW+6Ke7rQevw@9ZEyh z4}n|Yo}W^m?{bwvaMBLwDh?mnQi>*66l}jZQp~sX!K)nB$HN{$c}%KEJvkKHQ9%ol z^=Ah$d5&;4oxF}ADTtz-N|+Ot`D@)3PaE2K1b4*RsGR1_Cc)(Es^z>%#xCBC(?!0Z zlkTWP#=a7nHV`dhIFXVrb{8{YR&s&9NX_3 zWgZI;q?1m3>C8-z3sp7$PEDQ?U1UB}OLc#$ythcMnl%|R(AD_uMZ#JJu~opgq9IGY@y(xS=3aK^{gBagYU_td z>Ly#f-rEM;O95iAfi!z+>Gap=maYZ@17S&|b0s;-9>YuECvuUt%eDuVI;@b2z?tvW zS5>llLvd4^?e`J{;)O-F1dua?<(lbCNG}U4Vo6z>Ut{{C;#Vkh>`&nrBQ;`>Mxk>U z|LpbgiB<=)cW%4-rG7_i?e$0RXd0}4CzhY^!TnK4^vehEnN5};x(0q->~{d#P4vki z{^&@bAWBoUZW+8n`h9|ntYxW>0=99J@f9&9M(#fa^9gyCcLaqxFxqH2 z1lSlS(2lHj_}9^zM{qG1a#Y8N`-}={Cf3xXif(LQ2=2VIipZ*rFw=Ql)ociFPGYTg zBSDpRkc;Krh-d${(J#-fH>?5*Y1j?3`F^D?Jrwf<`tnd??K|uZ$(TbKUmj)W*xddm zIQn4W9DBZrN^iaUgPoVq!_vlbatSQQc}+{M-QDS`;oE!I)BfW0u0F5FG`Rlsl-tT? z)k5p$kncM6URmXp*74YwMJown-%BAYD>Kuz>QPls7xl}Km)k@zKe0FV7c0_b=wZva zVERc`K{s5_lDe4yoZ?dt$y9~pN|wUB19V+q$i++9Muyo*%y#Zy*to@tDAMJc1VRz^ zhsi!;mFdpq6I{K=11!!}qzJejIw{J$=JWo!)Gs;aaQ$Q| zd_|tP&d7vv1k*qE-t_)TXey-&HMu#Pq6Wy0VIbjG@8k&Q`qiX7mi_U3?r*!A$JUc% z@guvuDQ! zch#mAt;#3A!=0svI;Yy#qO!{u?~F)t*E zhwhjs#qDD|9=WWi{-p*O>8_Lfq`qQqoyzfzf`uus|E%jmz0k3+O-+*XX`?Y@(Kr~G zvv-1gMF@9F_x$SC2^PsMHVSN3El^)ew_*< zbm?#f;_<&Fl-I)Q3y^0g zJz8dKI2o<}9;JiNh|3dYW0|k=)Rc)y=H$ms@O(tQ82~ht@K%eo^CV-I*Xa54BH#cP zYSR4-zai0#2KA+`q%ZlXI&zhzc`R-f>C8MBl}Rni&lra78;kYG=@M08+OIu^zIZS3 zTPS|B$9^6GQrI3Z)H{4`g4>02jH39KE~ZBBxknzq@7Yx3;gkuW8 z{YW~1?^{6DkqK?^@g$oB%akXk%`Wc{RD^yhntnz_ha<~pwAM8>3g@Fo+g|2Mz;kXc z>P!ZapzYG zb@DY!K(*R#!^OH7G;GP5ZOoWgO{QJy1Q)mV^6v7Shc8Fe(HPAa^N9MxNP4nzUs@HrwU$HG{648-&H>N7aJl%5vJ#%y zXoT-BPIE$bvDx)(*!-E^qqkfe8aXf4C&BpUV43|cREV&g=Wow2*tM*XodU|(2&(-D z_Tvpls{Oxt2M%JGP|4y&3>K+zuS^?{dHGdO*t8t?(OvIrD0ls=GMNuo*u~Qpu$~^ z39M(Xoj{UEYCspko=yqb`ZOyWskB&9Vq9V7BRRwG5yp^>Lo3I{Yo?x@Uvk6lvdXS) zUY|UdwP*cHCnHR6+a1$~V~87Pk=D?UooLjCis*FVjphG0;`PR$3GZzSi% z-WHb&0fsTPW_q7q)g4H<8YL317cOmxk5);GuAi-JH%H?skbVjFYWAS*Rq&Cwe|F~ z=8#7`w}b91{pY!BX9nS}-m_F_i?)K4xsM1g~aah=|{Aaf6zY@s465@01uQ_T>nRiGNRL(I}_Gm&ft|1DQ8)H$;0a>^!W zgvtwOUDyu>reVJS5xda8wE1BbF4XuA&8D#>Fg#XEr{u2m?AXSyD|*_2Z1EE4!d?sX zLcr;veiiY_)O*q27@O%u`7M241=psGdO!`lnN2~%qbAqBHYm`z>UuZW;ivmUv+QYS z@La?5lWG=fqS!DS1<5g(EsMB7R=u*9rvL$-BCDyWFjJaui-(JbrkwV%v4~pyPvB?LL)br2iABv+Oe7MDaNdyIlZ9w}zlYA+G-l+~{E`ztIqP*zCETIunxa)N@% z%361EaG>ftLQKJ6pykoAv*GmmT!-jm?!hF5iTw7tUzU}{7m-g~zpSYT1Mre3!{t!r z-~M!=A8|-1(IegvV8JjHi++jah{}&84%$DN0sfJ0DKL5RX@t1sT^XYgaKFH@8AApA zScMo2fyTfVaQ$;UoGlx=SbI5FMp~MKEABS06=o3GY^SX8R)L-HQV*%jzN}(3z}i6B z?`Vj3&-sNc5mOJbS_ytElSvC$T{fESDIq4k8khSaWqCU9L?WdSR85fO;pX4X-hBl# z>BqP3DW0nArnzf88d8S-DlhS-x(48yb)D^g=PGab?B}IB3QfBy{&|baRP1Ot>jhWQb8= z#nG$p`r(*5WmD=4Y!I8MAL&mULFw7rc5S1Zqxvyes7MNfbJI8o;jW+Fk**i`5%!eh zQh#ePjy$;F?A3ik3Mw$xmBO&s=}F^lpeQ-_h-@GAL6sVvp|JvyxeSmQV;b^*)B+;YCLWaCU-h5Z@0<+=2b-kwehMI zayrJ$z95IUhw}SB%PL@+b+B9ZfP6BK@=U{Nq8Lks*Pw=CI4&XJW|&$?&w4C0B$>-p zN?$X20tZTFHIjSQws+M!2_8nZ5xgYJ1~Xd8ooKPxg|xXwnQ4K7LSvVdfKhhMw5$E? zN?wWH_GGe?a%xWL9g|bRJ<)Bl!jL>+IB>hP9^2<&rOp}$eS=0%#QLNY?Hv4DoeZ;R zKYXkb+DawHXQxQ1BG2e2z%S*Zr4vA> zZ;HwJ+I`VJS~Fn9COaeWcOV&FJ}-K|OoBkYW}p(cppSFm`ir+p`_qBvd75pFCfr9X zg}COzk`(qfeK!oRxzw|*+l6)GtB>h!X`6<()EPZDpS&t=P;cswH2P5_Jzw;tr7;F3 z2=}fCC`j6Tp36wq1zdc2X%U&LJ||~AQSI`HG{152U(aQR_S7j?z$d9= z(!6V9y@%Hrkp%dJ3=UNk6W{_HkwGmj%`f*@W7G&oS_OrCou)>}l;1szNfS=}&i2@( z@Or9(>UcTnc@w02^(Q@!d($z}EqKDPSTLzBvqJUx*7kFTF!wx%-3@V3DSo{NzrQe^*fjN0W=xcd#og!l====m}NZj;V`0jcL1>Mie=bY2SL>6$Ld z2qSM^cE$;Bc?gnig+g7nfYS5X!2w)RiMEVU8}*Ot{fQT1MZq+yyM;?30B7&a9@SQ zSagd@lQOpdM8*96z~|N{fw_nsy7_EXlOjDG#g@$CM1THVQNhC9KtJ<9_g0J|Yw|{T z5I2!Kz*@L;ZWtRo_#&zjnSm9|A%IbIVQg7CoCo{1$h*`F(NFa|22|5}AHbeXdEFlB z!EVL45yEXzFWg+x@+e8YFT&-vALg%9RS{crkI5r18Bo_j(m`RB4nc;s3!imXBj6rn zqF3R_jb#GAcuk2+6V6P}^oE+}5)8@+}eT&mUI0 zqrao=Yhq(h;xqW2kV^)#C>*Kl7$In^+Cnm#7UMdxYJcJq9$|XWKLo6YkZM?uA1TKp zgMhoBC&pR}vKrq?BFOtgVMKD@4;i&Bj-Sk&qiIo@ly@GrVZ|?bpSx_+32s5-TR}3wR%$j`&ge#ijHsyx-E>i z^^PQ2;r=(Z@Fnpe!{$mZ<6$%7+lzS|iBK$Fij_KjPvSxVFnCRm>Qa2-=X1|51pr3~ zxZeznOOruN!=Y824cztswjVc zz4Sx2RXdfgF}=%1%EYo!jWqZ)m;bCQ{zr>p5)Z%DdTtNAz%dt)wsNXibcFD!G)I1l z&@;V+$f0UW$8hNe9*p0G4ACn^ra6kn70o?xLd~6 zwk+BO^lV4qq!c4EY{&s%(X(Qw2zz5uT0=@mDcsJ6L%=pe&%J|H0>Td78mXky8S!gc z;9w>8c*m=M-Lo6)xJm3w;OQ^+r(iEhyOniB#(uTMWtuny8J+&yF(tqKkh!z|sVZ1H zB-Uz@lPiY%eUWyx2$+e{fxPy2oMy?7RmDc;HS){UZU&qjj@y!%u&~Uqe2V|*)swyg z-nA_PFBbNz1?U1w{krp0gJ1T ze|83SXcYIP?-S+0WDrdJn=;jR%t5i5RB7re!y8+Y&M*?}$*-p&yOz=UJ@YQvbtQj{ zN5x*hNGz&xnNeR}G^+0M#zS7f4S|gbn)}LrWpfCbsw&G39FwJ1e=hp&9svh%e84TH z_0zu3XR;X&XAd+S<_*pTE_mYpcsZuc>^{u9)yp|^|EQXco7QCwD_z>S%(n0}Q`jIu zRLK$tNlDa+9T;53dT#~CRJLe(A#5v_1JPiWDMd58-QN3}anxu+4Nv*pyWgKs9jTtG z{hF@*c5~#OX<%haO}zQ@Mng62TSMKa-lFh;J=pei5HZ?dJ`1{xI_u}Zc9+(`H7AuD zmZuBn1aqBf#tda(ZQQSPsuumAM{&9Sx04rx3_ zlZeg6T3L-wHg$ke{%Z>NB;`d^jRB?Kd)b3jS&9{L!lJs$RN}dBBQB@s(z)2G_M_r+43phkPeZf{|rC*Aj? zIif4rY(VvIxc?Lw{+S}^5i^x5K&}I9FYvNtDLcR&qCN^2h_I8X+F`E+_g2^jG0V?p zkzmM$aJ+N=YeRE|GJENHo*D*khXwDr()RLApUfLiUS50aaZF_{065dJ&1rs^z}CS# z|F7ZxnFp!`lnvje_QTvng1!_{-pv+%1z0R3CelzdPe!K7P{Py{t-S4#`qWK`) z2PRH&b|!Hf7;f0$ZAl0t%szTVI3mh7ESw&40D;yw!RliWS^*Ieq1(1@J#^@h{{B$3 zk8hNINSOatZHg5I#ht0l4NH3`4K?c6sNZr}-c2a*lmgJ92{@GpxvTTw`qT_h)NngBOYNCRVny{#>` zX~7K|jRqlvgdPr~`v*iI@ZMgbzQJAya#%=YD8gAEudjzNFflRQ!kdNg3Jym6kr(D0 z?i&{6>q8;f+i@2WJe8QC>F~-1M1DOVA;4ufY=V+j|hqPbBB3-EfC5cbERKld+g%f2s+e)5^fQ|S zqFgaTSDKR5w3op0zQGKoAffe7`I~>v+KN3HH`z;L;q;g*=h~OBO;Fm3EDi~ZA-FDLv zNtBq{Q$vP*uqctzM-aq_tna)$4UFtB zsJ`ey7Hz1mKHeD`A!<=~e6@;*lOjZ@9H?JGjR1Bcs z?Spz~!v*s7Jdqp4A<#{NZW1&NsKp5!EI_^U(Y58GQ8!Rah0O5%BDS6%nO%Cl3-e4S z1YJ>&(pX1_Vsdi?)X^vIAU$cg{*-jA$fY|rSYgN&xv7Y1l92~rj_92zKKjnP{abeA zM9vsY5pMmOG0TIq)lYkKOzsH{8ZA?>NvQ*J(v)HU<=AoN8Nk^fUhT)Zr|3%6Ume2U zU%j^U2`nSd1r%R3>Nt1JLr~cI~sX z*t4%Ng=uA+!1^0{4X17G8kb}^=?h9KGw`|AhQ&%g`l~mRVW_2Pu z&C-fUr)+5ee4<0Ga{939CN!Y3^*~iNidRJfmfTDbvC{S0i|1V zQ9h|w)=QT__|Aty5^`bzrveFOiHrClk-4q3%#w znA@stTgS6mLf8nJC*4v?D@`jmF|#tTargXu3u&k{cVYijK7X9H>&=h~?aWLm_0V%p zv@VfbTdNG@H#ZZKRkumYq0S(Cw9;9XO{?GrYp|-Z7sa{=zdS@hFm#>C{<=wNL?RXN zEJsx4TYX)yQ;W|Yu=lH-k7iu%&il>j8UU*Shh$9nH=T;UoQiluP%Rl;a8i8XV$jeY z6yr3>zcF-J3tQPyX-$I2#Ni*GWBgtVghq63+jRG+uuV0M8;jg)@*11V%hupf(K_Z* zB#XqpxfA`BLJrq6^jpY%LQLU2x;I!m7FKirGXSHHVxFou=PeK3Vi^NA8LSa`!nrDs zUV;{+;9w<`R2lB^YwId^1v+haR;!E3TR?-~8Uoc+-EMx5FTHBuh_yVvMF$#~nIF`a z|D+wjyb%=*`x0@dZgneLg~%tV#ebMRdcp)*TJbfI5!GPE>V@ZB%5Qym=8Sev?3(me zOXi{0A`f<6S8P&`*tU18E5_}yAZHx_Upk%!0ziwt!T>8bv)+EX1SZ3IaQ+B%sYt;| z9L!nD%*BlM>%Nooi5y4rW9$6r7v`7FzDr3jfmC;B80uv9I~-kFno*ymme8%`rQA=; zN~g?@j?hht>tU?z1R5@puM{6ZRmf7QkVtUq(h#UWIL%HTaCV{kn>e_~_%2rD;;!n7 zuucJ`b6{<>`ok;q!YzibOGC^VG#FmI239SAA)N`|kdbT?!8rYh2N#79+bPkW>0|e@4@fLjO?>J>1{hL&8j!-QXnd9!|$ugz3RHH@amEQ*)1qn z*aunt`pUI&H@ARg=2&v&9LdDrdC*m+g$=I@o4D6XvB`0*yEH7my))e>mh0cO%62gN zp`m~CWMM9;#W##gATK7VlnuhPq;!c zUlRqYYxdamdS?f+_@3{0?6BST=l&@sKv(|v65M2Xg=Z0ma^c=P@{@`^?H+D=$Eko+GHpJ0&y;4mc`i6hLx8%meLb{EM z?P@)r`*3Va3;i{Zfz4iZrzCzhaGS%%F(CL^Y+;UI5?QObL~Ew54)FjIr)~Lq<~N9z z5q9{|N)r|Ji(FJ{1CJh&$18p)1}c=8h3sJqT9%eZb)K!Q+) z;g&vmL%n(~9~>6M;?xxSbtpVh20v~E3wt~5x(yPOQoZ2oC%dKOWZxIp@(NEXRkTUM zvG90iHj#d|WFktwf@WJIBy${{FRz#GqcK;MHoqNf)i+WbOx1Kp-84bA9bGRP`SJE6 zYR$Ejg$YvR(~b9zFeQvXp9P)q@R#R#mh0Q3`}{fwH=rmEtA96)J^1u;aX^hBj|5DQ zKGnEzvD&Rb&Q#D!hX?RSrOWv5JO(6gfDPS2ctwAF3i%TOG0XrS8#S?Dw7poYY zaI|flTINcY!>Ir>chZ=W8%c2`}aT4FCWD literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Yes go.mp3 b/op3_demo/data/mp3/Yes go.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d3ebfb204ff05ed2f72843bc6de972953bf70669 GIT binary patch literal 7174 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%0DOQYDj-VgdBFFKxUy7*n%O#dA* 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 literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/Announce mic test.mp3 b/op3_demo/data/mp3/test/Announce mic test.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4940e78f729d49539f7c15c3dcf97db8638b3b2d GIT binary patch literal 21123 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 QpQI!=sOv5wJxncS0LK-96951J literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/Button test mode.mp3 b/op3_demo/data/mp3/test/Button test mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d2d5ca0bd566c92da334c9c0387526cd148290ae GIT binary patch literal 11249 zcmeI1Wl&tr+O7w8f?JTm83;Cn5FmlUC0MWk!5xA#5F|iwcXuZ+0fL4A2@)h&aMwU^ zcL}mSW`93+)v2@VJ^TByy*F3A%tku2ds{6USdwR8kv;Z3DzM$f3YG}yZpFF+~ zB?)C2@RP@;HgH$4yM>FZjiUotfJgW#&tou$H5~3F!pr;i?OPsuCjoN{cOFL1wLU@ZVR$z7H2q69*{t zji!W>Qn3*_P*qMOkTpZn;z#2RfJdeQq!oq^w$W~wzJ3H`y*K@IOwQzB_ zFxQk)Rk?o%=6z^8nwi)EC&mLH+(Xo-z94BA5)`K;JuIM&0Eh^EFp3igT+@wmTI({J zN5r93VJk1zpcvClm$d+Zo^C#-QjBcabC8QyjWH!=J1CWhdQ$BE&RS8BCF!D%Nv!=G zucPm!$J?i-PBEEdAZ46>)l-D|aaO@2?&|`Bp^Y}&BXgM58x6{w?6)QO9mlXsT2efg zU*F$&oYAge2tT0cSO-o_2h1KO@NgKKguHw0_XlRxacnLItdfIRt%)mI8dMw-e-UEJ zr=YFGLb}<`*A;ft!<1!7LT~Bf=!Cpj$Rm#6HRrX1wYTpp(M&Cky@06NXG9Xey&T_G z>8I_D zQV|B;f%UHu8&by;W>+HNf*`9DriNZh@4SD1mURT`+%JG;yH$afjzkN#X?elMK7|4l zB5`GQqB~$XI3UPBfKT||= zH5oNjxtEPU?6jB1^gQli=m?;S;^*iIUj+SjyJ=L&k2*%AE%Crg#tjss}FhdlyYeo zOk`O8J{VNF+!g=;)OzTuqviW~Jxgiu5U2 zF|T2LZXwcgG)&jNXDOxxVwDKzAyaP=*Km7o3eIgU3_>#8*arl!6}IA+_Sq2hc)xrD zp4C4S9UGAhiA#PZF79?i0i4{pEe-7bwB?Bz-5LV?evC~@eby9h)GP})0m;E(5p zS-w1+h9^(N3uJBhRP)-9Gqn#xjy2(NIGMupwO6-@VhiKL&vQ!7qz=UvC{lxeQcFU7 zD++6vk#M|pQWO)pvK(kYnQf05w!b119XUj&p7(@m2>_0hqxY9dgvOQ!;CYJbyfkJ`L7A(E(#DosQX2KFYvF-#} zu$tGUM^Mf7xc=0ZS({rcC)2TcZ}wAk+N_eXODM(g!nWIJ-8jV>`u>ZOnKI`ePhWaR zn*uo`oZ_PZ5r2lXHjo$TIJuWC-WP+ceTFL?ELsqlLqkS}a>m}%+jDsy3M{<-GZegn z4;v<$Z<8R!Vxr;eT28&t)o}Q6-xKdkGf7h|g_XT)cJ)wg&XZ%bz+J~n$unbTqY+>d zAJyDgH300oeAEI4u@=3y7@cH>i~I8l89_L2v(>Jh?H_oZb+Whmz0}k)rA1WU{Dfd5 zEyuwyrx%|)!~q&tpBY@kbf?kgQi`aM6||Y|hZcyxj4C$eoG!#FtsUK&FQs9*CGzmCZun7=LMsUB_ z+?~mL%P&I1%{^9;i+MCoqiUeg02D7B0-@$3hP*%8F8fN+!oOjBf3QHmo?`Mo+dv8@ zM2BWL)8ZLnm@kYyv!Jr=J$?d|^`JxoLogV&^47_br$j`AQkS3icP-2eD--ubYn}G8M;-Ps5Wpc2nx$P5vd{k_RTX+7 z;Qr)x$+WR;5+A?QiG%4exWkcnlGk%)B!*>#*v(2CL9#)L3XXH~!VyJg;vP-|OxiRs z*&fky_h~N9`q%0+R!nl|#a!T)w&$&!E8j8(26$uy%ly&O-Ss*&hA(A)6MY1ZHGxvB zlgcyYqc0=5SbX+DDY+)a*siJdMcclqz8=4Li@}?i4~q4a3{!47-CR`8QuHap@p=_c zHWj*mFfwOg!vw7;c9g{`WDC-K9Z{tVtziOjRt%l6OxA!WcGezncPrQP#A!N7UYY3X8UT8>2jQEE2 zEgJf$1yh=JGIs^VgKWwmJk4H*g4xxS1QcaXY4c86gdUl~ts(L@UIH-%` z6X2(t7eYIj#a;?n_3Y?aTmWm3)67!8egMgKr)y(AsZQ1DkAc3qE}*6o@Ln=?pjx8K z7FA02nhFI3GX55g`8XBzL0YCP5foH7_{1?5i1k zid5nfbc1i20?Nbi4USczjt@MCprBC*A282=JWXsZ|U*4~+FgSNd5 z^QSCkImRmCr8($#to)lU*w%f7;=s9drr2xKcTOVM%^BKsR0H&6pf7<%l!f%{?frCt zv+Qy+egLp;dAit}nKw?Eo|$36vKrLz5jE6P$G$6nc7DqB z0&9Y4lJRzk8>nqu+-CKx(n7oZ$o$j|y&u)N*ZqzJ1d<`_TEK%tWxvIF+nBAS9VL_P z@7@yLJ*421BBvPfNE@$sp{dX6!Zf%scc-Z3f`k*M@0eVmhjn=Z6J8&NVT){5OPTYL zBef+GueMX<^MfsTYjK(rF^m-OZ>F&|sGf*zcsDXUol^hlxGr=vpEXylrcui=*eNwW zMq5eg$unl&_UEp&R9}&=Gu+_5K5O>kQ5H( z@sGl^BS0KS7gITfIL>A(#Vd&bpFV8sk>YGS(sC-yiRY)33Vyy7quK$ za_KRZX6KG~t#_Ug2e6^85c+Y~)afEEY!<1Z%5A3*Z8@BFAk z_`ugzU*OYj26e`&3?2}yIZ5vvHXWEy%!)(cU)Q7cbJ{XxGpBOS8w&U=wemBc?>`B{T-3XMiO9hqd2M9y;Rq$t^N}hP#DfQev#5A1LUSE zqUpF_no>nUM4G4)F;v7{2b#TY?UDwgk#L3#{fn39u&!Eu$@3rw)vYUXcIF_w`EM=X zlCvcfAFWGE?Do*a7dHi5PIP}@a(`pLG)RHz^9CkZ{SiXE!!euj^92u093K%I`L>eX zY`M69=%uL_|B&049GC_We}H4{!X1dc74>~Mwdc4M-Xpw8+ZDu)j^Zal%x@W*Z!Pzr zm+ugC_bzKgdFVp?k~;ufg1QMkEQQS%3FiP-LL+E_gs_L@N;~7QV`Rvu^78#MJs{}F zHRc2fX;yrBk0D%W4avZfE!K+NWv;Q*1OPFtz<1fv#WmdW(iX=DapJ^l!F!xcZ~g>u z6-;v8t)+#SnjUaiq17FJMhO9OOqJ?i zY2fZ>u><2Lh8I&ghK)gH&m?v=`GS#_dq=-BxM)cA(&qJRxBAUCP$ORum|H3;ayzDV z_RXs%^U$eyrKT<>swEukO5Y3di9rvUXM1By%JkOB_v`G-)vlKHMENP_YGQZJw$uRQ zYNbSyX|pd+sr)xxW_wlur}I_aqT@@26h9XT?X#kopKtU`BrV+i4i;e0CA1hbnJ7bDK`#jLb7!@2(au`NKS(e5u zme5vYD18Nw9Y`u_|H1av>~4tpQ8Cj%PZ+~y^+?rzKYU>VUDh-8?K{b+Z<~8Mpt|Jp z5_WTRW+L6yebjvIv;wGsMKL>L2NJG`A+qL#o(3y_0|06T{HW72JT%ErQxb({mP12o zhb9?Z*7DJ(u5tNF7YsBrj>|3Y-cSc~OUR8178AIO1Ai2YK~V^xd-ncs+jIA=$7FSB zojJbk(WU&HGhb0!8X+uGUY(Ep!y5G@nUAMysU--vuQkTLCSPA1wy8-|K0h744q7<% zlWRKF#ta|~GW7$tqvR#~4C2)eZJ_8K9q*FKxg zanqWABRnCr0dtUhbjR~93hMjHelCu*ru4bxn;4Ijj($e(-Phyy@n z-Z$d#8BaNq=da3!`CGkm+>n<0$&iFPk>iDaU=Mt_pMHHv$F%APE8?2pe434k=$bEg zCVJ0fGDAKw)6Ku#)OxMjtbyU*cr=Gn+wj|QyebwFZG6?k|2QC$$52&nxMMl>r$p;s zvisy!^U+a*x<^p`L$;`-##H1IBc183E|hI9gG8?2)J%qoXGIBV!L0knhq>5piQpjcu6mP*V!x=qgOz631p)nUX?A+*(}Nbp=`>Q zBD{XfgNy5{h+bS;S2Fj`HSbeTpS7#ytHEg+JAY~cu*>V28VTfGZUl%sq9P2djNod{V1Y}wZ%1Wl&+lfqa;4YwtM2SR)Qu& z1m3;O`rmFk{BC^6G2EfEX`LjrHLUQ!u=QX)&1qSJ>g)VTzNn`+ znV#13_W|w2_z(6I`>&8$1vrx^mUBE4>5BlRhhC>cjmi4E7>hwcm@D1l+h=qmn9M_} zzGJTAUwrLwsyu`g$?(7X&4ln_;Dd-aodp!)Yb!9x z#W;*9dTu0m1`I{9kiz|Dr=>W`(HR?s9SYpKYjD@QXsM#XhEw8E#E&nZ=#nb77d~* zre|4MDG0j(z1lCe#lYFXG~w zdqphicWPB5zIjF|cu_l(DgzO(sGy7TVb}I;ePx4Kt%+NR{k^d9+1n~`A-wjHU^~7! zxT9k^^zqLOdJ1)~fk^zLdN@Dsbf#VdMua zZ#3-eP-R)bn}0;{k_jU|NmrAvboEd}JxXTd)#qdG^dL^X8EGcC2-U&47Iw8EjvLO@ zINAhupSjDgW=TlPB`_wQpS76CJ*3{s@e06Q^{t!h&&fzRTU~fjtc|eHKiuCN@ADj2 znfSUoKUfDC9d)l-l!=rXzI>^%O)~Ljq?(vNNSmx-X)juZX&^a9^}cWB7wQLuCW516xIm&ajF@z&%b31$@1(^dJa(0QLMzl8S&GidC00L=M-%m(rLy&TX;8TTzp0( zO+B=pZmfd;V>O)tmO8&}(UlwX)v~><-D#GddK?twPO8C}=NR%U8j+59 zSZ!TCxK};4QF!ZlZeD3-L;h?1LHRuo8I)Vs^|rR|EwJ5fsv7b z(qvR<5E8D5-VSrs&_qrgqG`b-=C0STdef6ED!8P2|26=)-A^j4OF#3uXS)ucW?YS@ z4{3O}m&@!;9tu^f(E54HXp_{<;ueaD0Qc;^4QKJ^QJ^Td+wLx#bl1zUrRe5f>b}#S z`7UVGdBm;HemJ6W_GNdSNm=kMTz3btFR1hK1D?E>os8i8#K12T7|h6x%jN=6rBRXm z+V4KC#sk9)FIJ{~jibHpS+<@5(CgXqztwE?*2tH?Q~Psp-FZqS1uh z=t3Y67@*%Zj=S}k-kf2dCA~U7ggMaKu208*#DhlyOB}g&=h+R5JKYDF*SEJeI%dRH zflL(F_8Gf}N_F1@F{van!SmN<(g`}?Z2@3+y!h(kFw=JawkzoJ5IjN;ND zF7<_4yJ85Jr5nURar`*%PZJ~gj7sURcmiW%u*Cad5s^6ZV}dbBR%)*M%?HzgQ%2Fr zUV6`nmRC!+sgr%`wPy{tr_$oG)7|(SlgGiFnk>uc5$8q$o?3+3>N^!FM1Ik$8#SAH0$3s@ZAO?kcT+(%yX8?GAuZ>~0@0SyA9Fqu zwf*qSZ#&nCx%$6Cy;8##U+B(DEZ^+CJft-6KX0_oUSPUJZlhvWVl*YfqGTV zo_EShOPj3TSq%dFGhdtcPfg7ChfUG3iGIu-p(9^_e2>W@GeM*Hkxumx^viIL1*nY5 z%4drs#O7UPJ0fSC)Omil`^6bNbirbbozZY;!s<4oVbS||j=M`p(r4c-=aa*b zvhM7DT_b$51RQRYLKxrHSi9i=yWq;o%_L$nk!P0#%MI zvEw8Csn0QK^#b9zYe2B}Xf_!!+OVyjHnerU1)SN9QT1LxsfNZ5sMC{@FtjAwD`xI@ zVv*g0Jn1(?p=It#@8Fg0`^oUqjY_wt92gAe`bCjEYvGE;gqZ@L&a5~h*L^F)?CFX# zOi1Dr%B_e?aq$)siYU~}-lAiq2^4%Q9amZB6%Q8$A(qb%l4n$;l8*24~wGS-t0AS=TbMU)24}< zP2nlRs{3hMp?)HO`;4P2xsoPGnpL-e_N-K~Y6O|pbvlib`WAi}8bUpKM!)lrX9=pw znhMNX!ZRaesH|7LzG@n~NvX@_%KwD>@4ou)9mzxH66WmiT~8hl+4IDm#_SQJC1+C{SRgP_nIN$+Q~c-I4yWsoPXK${{oyN2!tkozs(Q& zE4cqK8v-0pKxmMh1Ox>HK?DIo zNqrtY^T)h;uWsF$x>a-Uotjm(s!ms}z0cRbwf3rg_Eu9AL<8L$Dn3kKU+Mlq=-xFU zT1t!}LbfjcevAPQzJ4xVo{WM#;$l2Pj2zDX{@xP2yn%s%JRaVH_6`9&UcOGeoG>+* z!2L*udso(hS}7`N>1gZ2pb(gvj<%Jq0aRBWvolHXf8@hO3=GKeew(*(i#{V;6SD2XcM-#k55qE;KlfS%Nyc3{{3yglF9ja|6Ae- za20W@a<6%y&NgsvI|Zhd=(v?ur2?UYKxmZ5pRKK(tnN1ENbp*}t^@*dks$0+WU!E; zBKSDb^5i&F{!aFe7+Tf$r+zV%U6 zlPW6xt1K}^B%GFDHDR_@VIdm+25K_~Jpm;aGs;NKJ2VA>t6mu<#tbxr0@cWEBC*mr zc@yp|dtzqKrUfo~_HpPJF0E|4R3{}6pQ?A)yAVPlEv+GhC3DPM8TafDi=N|LWehAw ziSY>T5%Slz-hW!Kw}7h~dat!wF`c|L?Z&nr_Za|yivblVcfo?hwZk|Z^q5*()M4Fg zmGG@pxjzz)kQogzZ#Bt*O1J5gU6R|7FuYDXHYOdn2*>1w9$43}dcTc5>-3vBsM>tVWROC7o-zWunJYyB*jLn8Vv=7d-C zLs}o8NZ}Y*?B++7-{Bg$kr=n6XXsZVq0+FP-oXfG4q|ys;VP_U~phOFy z%@e{l#a&yw>P#s}j9Owg2iF+MYYYc$98PKgfK&0V#5znTM-yv4pBTK<5)_V##43aU zGTSsrI3{Km#3~{v+3fPkzJ#HkDUo$GAzxvYYv76a9J#e78X*=gyWiq|&Z#_w)j7f@ zl|8*xo}mSu+QLY(X_v+4kjc2RZ0D+RcSl8wnnsyelC92&voe8ZipIDL7d%8}M3$n> zUTZ4wQftoGPBSJ);fili9V?bB2g))p z&ukrhFRfLg#Dst$kp~b5sR`F^ZOmMYj0s`ov|BNeZI#ZB&Kh z_n1RfDV!L&sB*^4B{tp9e2r~lE(zRrL&P|d@iFUBLLtRr7=@j#A!xQ!_27Z6t5rhr z>X<(n9l;ZRswTuQneFMmk}^f7$#CmkmmT<&nLH$24Vm&ee>Y!`u(8D_$R-WsQPOwJV(ZEpk!B$f+UN z?!T$x8KPpBN@Z=2IO)Lo!zngI>CZ@(Qy+fw117qDR4w#O`pCEUzwxJw-peDe6TFc8 z7$&>a1ylBIFYhoS#o6z z!PgB#I&x@GBY6VCfv%b6<1)BU2YPe9!IdS6K4bkbulV>U0(S_Ye?M?*|99VRWzLg}X1{5>;GdZ}zg$s9*_X$F6?c6c4b27Iw#auRDAwi1sz|t4360@a ztHN?rp3H^iWXw3LM`;Tws(roP$NPN-t!6f=4V(nr>O-IgMzTxJN zC_SxIXXlG(iYV9!u*AX&#_SUqm6G&r!MXqtv0UBg)Ytq=Gj-k+yJ0Fv$~Nlk%rR~u zX$iBMh9rr0&V`E$M8`@&Y)i)Z{`b6MYa2gLCx@)bE@{AClj>{RXl2X$?b7|0gjE6_ z$B>eU0_7<#NSmzXDB?8##KQ7krzE{%M4YACocXnk}|vsuua z_wRD?`(KQ@Hw>^owh-1ep21(;C(QQlv-Y%E?jEVdbfqJBa760ib1~%3=r1Nq z-U8lj@Jp@^PUG=>Gwv$8KJIZiq)(3XDsH%Ri)aG{#QLgVBPBCl6A4GkxNx}iV4MR5 zno$rR+o3n!aGYa)EVa~IbOdLH3`1fprtCD!(w+GG0BBVnofNAbf9oVnFi(9?v^>ky z?y=O2nyq&8G%FV?J*A3o51iFCFLP#682;5>aCTI|!tGgXlc4cOj21WInM$s)L6g*8 zlcHS3w9@BUuIyj6CA+uEy@P6bWV4dvdVc~coTy)0`pnQ|74BcUA75v1(o}mIEC*C^+O-zUNO~{Pd%N$ft&^Z{5rsAcf;+*dY9cfW$xF zv)-kOWMpF8$UGrRwnfz{xbgKY!X3pP`_MVz&c^)esFdzU-P#Qz0-2qSnQ$_aiv5tX zu+CBIRM7O*48qTr|4TI>KL@=$w9%w%#4|M!=eY?tr-FB0BL*x1I>`Aod8`*61#1a_Xlv$(N$N~$cgU;{-in$!|CdzS(;xms`US$ z9u9ttiKEubwsw?R9{C`GM8h6N?ChH8YoYWz0O4x+gg3+OkXgBH3M!3eL-lrd1K4-b zEU|Rp;^)UtQy*uAVdJ(snvXvdz%P_HP)bx|NFvcLWo6_;!oe8yqfg7^CNsUmL)a`8XU|C? z#?FN!j6q@<>T6iNYR7hf*$y+gGL-ofjf0+Q1!#HJ8D@5#6qMW*C&Vk)Ds`}On9!*V z)ChhrIMMh>IP!=xm`RK|P&Tu-qS!{kdqzma(+^*rV6si6?zaXRD=yi!llwLZ0^%j$BjSSCS~6j^-3Bn ze!PvdP5%;ng+Od@ResYG#JGiG|K#7*ZihBtNF9W~;k%eNTrxrwgaAjbeZbLHvmLu5 zZ_{CCW3zNbBdqfTs232hh$?gy3WANNLCzTuMIwna-a zRf!Fj>e_mpJI=`A0MZr+1b08k1SypV4wYP2(a8 zSV9q%hl&pX5ubTNIeCK=77g-ns6~PEr};9rzq<_~S=X_s4}{r53#R? zDaPJZIl|&s7(I3v=t2vO60X<|IJ|CcL1uM=fh->`^Auj9)5#o}A z2Ta6szIag%>b)}AeJ>tjBTiou&D{R1hm31JzXrW(;dH$5P{o+U@3MU2z&cj7i5{wd zZAce^8vhl`^-|r5Le?>nqNa_5Nxe-u_g!bnG$~Fu#huA@7;rq$FUa+a;mT@}q~^i#i=?i*IYVZ#5(lJ1fsGKfY08$fMVl%hgeRZl7~V z*lA1@3!-33V$D{-!|}J`zL)giK2P^>XRK(AOJ%`uU>BtOjt(Wu6mBgKXKj7YG;XpV zQXxS)rDn`bAotmw(dI3S|2pd`D51gMBmFtXiAIUYn+s7yp%YIp3>!I>Ui zx1m<}lvrJwKT|gn+q(TH6$)m-gvO)wn2($a0o$m!4@yTAI_r&9nXM~0)KQP|XKiRI z5neD1r#b<=2P6hL2Ut|LTAj;Bg~*aSV}F4;5k5Quq}rH8Ve(qTto_i%QAV6;IMcUL z+M_oY)TzU6zn;&T3HkNa%n;meTzV`$AI+(y4PQMnXiFmi*+*Iu9g^mgq&EuD8PFJe z6g(+X+CF~#o3_C3>i#_9yH}XV(XQwCbWB2Aza*e83cn!hT-+B|ZPYDAr(ldMpW8tN zMQe-Oxa#MWm>S+B4|sWO2ZNZ9!tIIe7=~i*;ofFnu3tHOt2v?LCbceCgl}hmBWqvZ zyLg;>Y*AYrz_jWC><+!Y{epAS9y3WZ?lw|Pgt6(Jt){;x5_q46V;DvxHi!sM^&M`Q zNi0d%Pp%A}tE}4n8vyWh1`O_U1YvYpj$BEPbW_JK>gISfFb9l9*wej%DbqtpneB^Qd@$|qWnAwGp81WMHz2z;g9uuu?^hHVN$^tfpUgkC z3Jt`DRSyBcN+;l`@Uw2_H8QK#9CU<>hEG2(%*GT|tl8DF$~fH~JS#S$gHSsWXYig# z)0eKGQ?R0~W?ao$*MJPX7Zm@*KVwhE>r_#7JGBTUm*)QR{9u{jB^i3xJGkR#b6%#Z#V+C=p><&AD2X`HHh4Nn zDV`Z;GYw2Cx}+epU0L#%fpwm zqta)Pq11V>-(Wzz$A+o3s6{CWHPRN~?TlRtJp<2Q(Rb`07VPAmb+zMJbPrE zk0#Ju9_{NC_Tp&t0~ue6>`I?LAq~ttYP@e?h-S@9sTMx1(hlJ^5iMDcf;zzQu4kbA z%gMs1GUiJ@`DOh3LqqGS5C*}{3wq;({oer;3|gEmTU2;jq=Kht3>?Em@edXL4A4Qr z^BAW=-_B{^SCD$L6SS(~{?$NkXNSS6 zdK1(@(WIMOJ>Ef_L{p-_dVWu!x#eRnRTi_JmZk}L$j+A%>BnDtVd)CH>JhDPx?YF1 za{XqIkz-Fu(H1mC3YSKYhWLe$OA9}j#i~=pN^A(ssa)P#EMKt-*)3C-qG%Wb*S!c=bsfcg95<~wz!jdaO)-DW%W{k-v3MZ4OS{>-|w z2z9t0iF4$ZI`c=UROOVX#wTqbhusEUQ4^zDYN`U=P~cOML=G;fs(KS3TUt*mG^W*&TJ!gH}Tc z6Z1WVXC?0PNVq`;zr#h#V0bzQz4Y3?q|DGS@w^(H>w6I3==(>`CQ^+@ot#*tc69mN z8;L&}rP;FH$iJr@{&?xx6K>OZVsL%d?KveBhy|RI!SKKXD>!)DPuJLmSkZN7Y|&|E7g=fmB7WD zKb7@AxcSRR;Vix2t5_;X++2RkuipY}Y6cE;KA46P)(;bs_&0n> zl+aEslQltL54EA?HB>K+=#Bx?GX2WQ+#jkOxLwZ}*OGKeZ^Z&Z#D#CM(_*%KDO1Tc zIVflgr%@LeEt}G0b*lu znfwiSSQDG@>*=L}W7|+bo1lBZ- zfGy9pAir~7`gaKHH$KtJ5L0Z={4NTw^P5SqsNI%9JuUh9>o}B_Q*86zPuaMklZp?} zUX-NRym|9QX*g=&ti$+($1a-cr*2qy&bp?Hy?VNyR3*z(-=D&&LmuWe9Ay$-zwge{ zc_)sMZ~)8s8Qc<*Kzn!h;fBTgM;&EPTgHPvZ5$F5K|G-f)9lU?u4PHTt*Rtl{F5R7 z6rJ@T$IZ=d!4(tLYpT6T;+^QnuZEVJ&PJE^U*wBXJ_?}}>F^m|l;kw@o$zH2!N+l8 zExdb2rFZDy{E|gmqi6k0i59Pn%}@JIu$Jo3q{pg0nI zS&hgp2MF#`E?WwIRL5jtHG4fBu!@aGhrYJ_0*#D6&H=?l7yijisX?R3_xF|Kf^9`h zZ9Jbfd!M?Y|HG7u)|L)8mo9%%UV+HW`MN^5pg}#=(yOOrX%dr1u51Q{?2USpgNr1z z)3`y*(~9YaQ>Np)-QhQ4zOI0?ZILn&Ww)|hwkN$C4VVnO>&K10o8bz)KG+4cHbF_* z|JSv;NVzn~m(a5|>QX9=!1dBMu-$=KUelZAQ*-gbFj2EG`V79-(JbJ* zWMUrj0{E{Nz6O84p}b@)@B$F7-|h^CDhA-Dm=r$}Z2Mjce8ow*v;KJTQ6FtF2&@=H zHJ0ZqZbFWPo2JP=YZw&3pwV2}ig`d#^Wwna;?PqU4Mb(g?doiN&}3kGMPagtWAOj+ zpyXt$f)eZFy#q1_%^#;Q`SdE6a^O!UaC9ci@QS!*0TNBl(B^_J2M2{{RgtqC)@x literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/Mode button long pressed.mp3 b/op3_demo/data/mp3/test/Mode button long pressed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..01c0353ced649de44d961d4d2ff5d685dfa1596a GIT binary patch literal 12817 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 literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/Mode button pressed.mp3 b/op3_demo/data/mp3/test/Mode button pressed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fc565087e42566a78340304755a362d96d7f5514 GIT binary patch literal 11406 zcmeI22T)UA`{zS|fb=dPB~$@vp(sJn(2La2d#|EM2N6Q=(tGbs0Rce)DT09XE=Z9g zy(=m`cawK#_MO?;cYpit&b;%Vo!^;xl9O}Kx%r&${ho85xrvIrC@u(7z$CglItrMI z7$($Y)D@t2#jKq?J)qup?jBCAPobiMa0x*%D37D3=QBwmAs-(f!6(l|ZSA}TUELjo zcy(2DMKB{-F`=l5w2)U&*VNF_Mat-^Xlht!=^?c=brdW#HPnoBwG?2OPK20n_p^E` zBJx;QMokv;i47Anaxz*9YBCmbnwSCq(@AtxbQN@s6p)y1_?Qq8hTW6XR9DATA7aAL z&=4f&`pnPW$-&VRDq~~y%+AFMs^sqK^$e;bC?m)Zg~8$C0@zVdD;F2&fA8mR=V9mW zZD*@1r>TKC2?P`Rt~ORKz=`EB2>%$z+7KiU27^Fz8Da~#_;`$}r0@xi z(IPh`i^PlQfzd*`j904->ouW5EK8zB|vCB`!1A|@{%3oAQy9-d*f|C{{uI?D9Ybj95;p9&%k8t zLAGI#*W!4xpsrwEGCwMA(_#%W6|n+f6H;L`t501UL?8jIYG(53z6Ow9V;hkB9;1k%c-a7zO&~KMi?ci&>Ui-lT9G$;sK=jF8 z6?VYU_6x%BWLd(~Y(&USDKpj_XIMW$e;j)p)GZtjaUjt)-2Z@;?q);er_2Y3Is3(1 zi0{k;Y>>R$DLN%LiYP2Ik2x~q3eax}i3m2>o<1pilboqy*wf`^RVFl1>Rc@sroBrj z%M@yC0RYtr?pcU`D90X(p0^m_!G+;?zXC4rJFnrH9Qn~ZQ_6=jfOyi&(E$1?)phs@ zJhPl?C-7M;Em!#JF*(KRK8hZ?b!YElZ+A5{@nvc z;1U4dvpvOHE`UqNeEx2?R^X=+dCL`AVJG}ZKKsL${9K%#ji-`-1h{6JEqH0EU`FG{ zAA^XqpiX0;kkCi(kM#pr20RxdUW@WYw(gBb1@#6mHGED0Yaui~{3^$tv!AaDZ_|~~ zg^~8H{~DOZv7kc|!HA%w`B@0uRQ&Bt-G<)Fv! zY7kWTd*=MQ6P(Ijn^}+Mz(7Szd{`QvmA4JOym&xKI&o8F`bTlfx4_FoT?wc>^*4hR zpAElp>x62>wzG0pHCC-Rr|JL@7RLX>V+BDjhjs~wZCkeGv{87nXnL|seT3%aPDp=O zS=*|Qh127@0t*7D9F-=ad&W;4X!?=~^ZQ76$wdl?F zN!qDmC$Kazo1tGY)X`Z0aRr+fB|(nepCm%NQ5;7&XT<_)0bgCPcv-lEihftG$_%i8({pD$&3usj_N zcjUyvsY6dTck=zhE~{OAoRCq9{BHV3z@Ijw!_Os5P+00G0|{=$Mgt8Ml=3bTY7H&R z@Zm3{iX{oM3jUbKXF1{xvK0{9T0qfJyzYz94bLL?;&9vI@@uK&5eSK{_~m#MJk`%F zMK=jtSG^swz<6zj>&C}bUtyh6U&Hcx$eA~X3mVu$oj)?1vX}Py$v)C}@&rw}MC~zx zwVV;l$=X4_G2~loXP!WO9c{p+@Iy}Svstr|woVRxYd(h(u9?DJ9&OMo)@l+4udwth zFr|1b#W$-mH;Q(%nxkL~q3uYY`@^}g-Gm#4znUt(y~xyt?o>5y?Oo2*U6!UKO4<<9 zc-)~S$TE6!5zDxY0R(`epOhNz%xvA2ZMhcCRkTi1syo8{ZWZ!0iQ#n67Pap6c&u

Ch!Z_1D zt4LxLcMq8rrQ7HbFd(<(MS~=#7thm=3;(2z%%GpSsb$T?T;p2a(GX2kjfF$8#*u@~ zjbbi9nRLKUvosv5`k@*jSf}QchrnYKd-r9#iIIG}xqCHE-!hq)Hpnkh-OQi zrysiq9F|fMY8%lu**paP%!gm103fqZH2it}NmDP5UQ~juE(w1h_r8h5g5xvlYtGUa}0{%~%op9)uE^`>ptCobwsuc$pm*T*8~x<9Wd7uIhWT*dp%P!L#x zz%yn~6xP(k*?)QnSuqD9s z7)xz0qS>s4E9F;?-|+D`rB3|l)x+j1|Hw~3%^QtRfG)%y0y^MWGxXLglcD z_f0I$X9GOvOSBi7n8mjD$YLUcx~l_U4z$6^Vv&X2gp4o(tZ?njNt-TrzYk_kgv(P? zY8Q#F^$)yN-GIcKUvDX9;MYK zuY9RGFn|jHhU$5DCwW(PALr1}!v$Pp7wXVIy5S8rajY<#s`|xVX%9*OOgJ8CBIYCK zlYxaBxfz^a-_b)P*?(~F30_jawse}rP^@fsV>cVZO=RMgMv}USm(E?cjxS$9gs+vN551Gu5~KOwzl)uP()D4@o&g! zqPw7GGQzq)1i#BY6-N|B9%M^OWP6574@$HY940e;1Ma-?g*uFc3K9x?fTo&2wq5uX zSh!h+HE>m@5dusqwsIHTwcCc1&iDAzG&E!Jv&W6@XQcZSYQij@E4ExXa|k?o@El^c z1edcP*mNq-$@(xM>b|-n=_WJO^)-dq5gY;wL2YWROHr6=wn&MV+Y(o{T z_{aGC`GO?4(KgS9HcCX-u*?LvZ&{hq$X>mdSzw{qS`S!U!webIG;@ zGK+)>4)>m_FiP?v{#Dn8ezL`l4&cF+;vpjGS{$Uta1x_MSbte_c@d1F-x{3(rKD)bnicL#LM&^wj9&R}% zOGbJZ-Sp`V+NKvN0ywtLa;?iRiBf;eXV=6$I&4*b;M>=_zPr;s6bDM`vQ^33kE(K_cXzi;F7k3BoYKPh@bQub&Eb5n9&eV^o%xxBl>6~J zeTQgoY;_`!VYI3ULfIVG-AFOd*ee>nuOC-5j~*k&YW!{PnTPyHaenB7y{c>+G-LZkDv+#5Q)o#fXSq2)_l{9LCHH`y_^_b5dU!P0sDqC z-}qAh*AP9JQdRAxJ3$Bq8UDKJS+&BnfcUyJX_;x^#T2HEe_M(=Mj z4nsr|)(>a>Ox)8FeSgrZRr`qW57eZ$27Y*X@*)0xuS_|;gtDW=6cHtew^sSv<_aZ^hMi*^T119gyjq)`f|_tK-|%d>~vrFdJdfuOCfeK{y_vA*wW-{CaRxT^GM% z34K0uwW)DGhw+UDNoC2m3;IX3J_8MA z2ET0|^V)lp#lsyPcqX8kQI}I~v)`yC`z0hnc2x|wXJ4#jMbrSCMmz(?*1dVZ zZ*b|AZS@X4@Qo;J_FPFe?BK{A&8=_)3T#MutYm6189b)sW8n;;#1~)lLo}8nZ_33d zn_!wN9yIeg&XAIj;`K>fGCNJ9eyh#HKPyD0TzW+6F&FBAG7}e@m#UIj#v|68WF^l~ zHm8kAdq=DIR+^AEa?pY&G)bF0-HxE~92+|NCEiR0`%?&`UVl@x(RAN^+Lyn@DIh%1 z3DC?_f^ccR?5Q{ zoW-@M0P4NAuy!qjn|f|%#uSgL{xQ1ecuiLnl3ddgE{KC`T3D^ndndw$*PIGRMc|#q zyGxK!M0jX@qySZ}>2;6ABdK+NhXRA^xaN~NEL=9rorv}hzX&0i$m=<3FkqzR`b&=pq zfApkz0A$H&`I1~Kn6|>?JcE)>)J3J-Z`ZFk{#Qq>=h)ARCrkIeQk{r@HgZDpka1Hm)SMC|u=GKw(#dCSNa_Z`5V`zCwSdSvn%> z6Hc7Onk@G-@`uJ#cw3IgA1ksVig99)%Dh<1ZL;E$Wm_aTf-OG|z2qI+LgkEdK`SD* z*2$R2d6c%qg!ydVgom;azAKSB!jNv{zDFyFE)Ble`KHp8AI)=c+lsH1F|b6aL=18R zAq1cS0JZcq;3~!nMxwxbvXFi`wh-Ov=<5B-%yGQZ-kNj#opN8=&>i20=RiB=e5a@I zNaleN9}*6q<1wincy1$^OieY@LK{}Nb2*dlpQ!9{c02o*^8xQlbnZ;t5cvG0yw7N) zwOtPs)O|zbB-<6`KER^-Gsq465#(zUxWwAbjZaYEI!PFhM=Pk!9;-%(11j!vB%{xU z;|is9eGH>Wbx#&=AiN(wLSQNQTAR4eHvU2X7X#(@rOcdWOSfAm_{e+*2^Zg6hzi#3 zEqzt4&r5L+j%Jh$ou*%dTBxTertM+j{9&a;?FHF|IP$;wmK=)*#}@!(oVFeBZkD*g z?nR2q{RXd`n?!xlpNnkMSO&U-)iRgj5=xT^_i8-iU)4L#?ap57wPvt=!ZZAQqyD@6 z^s8T^BI37_U2CT->!)t9q~DPZeP{4tqr%k}y4TH;&F9&3-61vv^=q1m`P942I{W*z z4LKtloskE4 z6+jDZ?SIL9e&BbOEDyRWe2Qbt^q@X*@?F-g*tx>eNN`kw5c$&8wZsoO0^)?&q@?^1 zS_UV+g-*bg3O|z*QrQYnIJGOsUkUSpyd1yqKg}*)pKc z8{AE~0T5qYbw8Vn?4!`lW%^fg1qEk__w$Ci`QF(F_JXeA=CIj6$op^Qr ztHQk*EJ3**k->cdrS1N7`zVAFb^?}Bf{ zLIe&TH;9(#)-{~4^Y-!fQK&Dm+u9^ua+EMK(i0U8@|2}`*)HksRp)8=*pH#UIm5T$ zOc@r}7gJ_VUP`*J`jySRkyy*QvbxayE>PqFR~7$KxZdJDYm10YK)x?y35p5lG)ub8 znLH%hQ>oHduIc^-TAzT|9a+|7*iyo~H!X2PiCm#bUnHK>`oXc?WUCr!iEM~u6dRi( zlQBR4_-oC#e`0l(MdIs4yO#vS2n4uUfl0$eRX*7ia?eAFRqdX#^74*PGpI2D%{r{P z44^qRTvag-=>g#E{K^1pxgbt4ssq+&1Q?SfDi=*~D3W3-gH2gw;y6^J|j z$lkKJv?;sa^m3-*k(YhqX}A^tr8S3Ke%^4ibT-3*PIaMp_pW5W@X5mDAb(@#PLqj6 z*S_~&zSHYQC!4?y@3QG;#*|6ndr~SgwUg;Im0sX4ZRyL}M0t8u25#;T@)yVWQl5etXn&4nBkL>uA;d52EQRmOCyvi@dL@&Fjs`EMz$HAZkWVrG)L zzu|^?n>Jc;bEcd4Vt{@^tdKI0VUYFbl##~YhO$_x_tooJia$HAsN=?=+uxMZjP7NR zQ`xlwJ&{|zvwuEk_ZjJi(zDr8;88P%_`cvUB##;2yYJ1>@=)aKx{(!gelO*oAqgHP z4X+PxWfBs?%7=k-gsRbXS&Y$xfW~(xgF|(g);e-m>+x+R30XCXP&V0ay&FaX9h0i* zZf~J{uV&uos;}P+tKD5H|G4NOu$n@h_AwzB=zclmBJXMdVcP`K6*0|uSy)A9$2K(|t<8S%LJ3c6h$?m;>ChD8ha({g7 zdtRR=^Xlpu)^gq~{>395%6&Klqbw}%EW8#1K&mD*`hh-gsu&D6+ZQYK&1-77vX{DP zwwy(!)*B4|OmE%4c_CWA7~@8Be&jz$cMXR~5h;hzG1asvmR$il0ivBB3^-gx>z>>b z{>)Jr96bNAJ$b0B6}71_Bp)0|p-3wj#Rv+HAWE7>s0 z_@}5ZS4|jJxL8)5Z@cDH1ikO3Po@U9dy{Oh@%*I56WbHSI$2bRg&j5xZr8q$y}DMO z9*~_SS0wX%wmMRhwMHSq7(MW&wU{y~f28I~%P&30+^{8tom^EUaT}9_Ow*eMGTAcT zk;EeR`X8cI+echNS$10=H0|yar7F3EekaK=<4-mWGG6^=jY~%#DT82tODJQdIc7E* zGuwhs?G0PR!sW5zk^M1cP}(aDhCQ_lKvuoG@Nu0nQX533jg;_wVM&T$6In31vh%frksNT<8G;fhEpOXvljlo zrh7X|+x>IxroDpO6aWpqN%Q19JBu5 zT#AsF%WFHV<$9U#ckHn+L?AX>{0D3Fr8Yff)^gci3eTw&;VlAWy9(2K_JgY z+JmaIBB~q7pM+*dQ!<>F-Aw5O=z8+T?iWPdTk!QhnLkDvZb(aCr~ypk>fUUE`hV8z zO|7l5%fWhhnU(sYrc;v#$1428Ww^n{cADncbc?;>n~fv9@C+HcZJpYbtSumNt6()u zk+k%sytsXB(?j00nzu@_Bpb&Ir%z=_dyaZXQ2^@r3*E^Wi3GZbYKLwud7k*Eq?sY= zw^{t_X7fdQ_HK^Q(h^rmwaP|QXRY!Z%gYZjccU@PmWrBNI=@KO%^mFUMOvK&`kf91 z4t=Gvz{35M*{7@NOy~kh>~U*_#3r-1m?~y7znzo>C>G8b%NboA)6+;?(lEYEqK{R{$tecrq_^ zpo$ePnc3-2vbkj+ju&0MO^lQ@Cu44MftT zzwOBAo`A22tMe&CXIpEf?)QU#KEJO1zbUvta}lkd8apSQ7-Ik6dTtO#6Tf`HhlP7h z>(+{pa-@`J2hcH9Kx1mJJQ8)$)G)+jX*n)>romVlZGtAHq%+R`e`NS~xv_8+q-*o^ zEI3Lje>M0&%!c_*$#VD^2!yMQ`40lLE! zzb*H#l=-XnzjwL6Qs`eC|J!o^LYTj7{@ZeYDbfGB!@p&@zwcfD6!G5@?!R`r^v_BC HM{55KPD_fT literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/Self test ready mode.mp3 b/op3_demo/data/mp3/test/Self test ready mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0b3a9c1be3c3aa24d8b929b709f8d6f14823bf22 GIT binary patch literal 12660 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%0AC4Mx~ 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 b)_-aW{+H$cmia#=+&}e1^7n80uW9`o&HvZW literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/Start button long pressed.mp3 b/op3_demo/data/mp3/test/Start button long pressed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1562ae99d1ddfe60f5d7ee24f212df27f638c8ac GIT binary patch literal 13443 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 literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/Start button pressed.mp3 b/op3_demo/data/mp3/test/Start button pressed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a4348bde7185277a28591fd42d805bb2a3411d24 GIT binary patch literal 12033 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 Xf0rBUe=PTR5B&Q?_3z*5U(@<8fhmVx literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/Start button test mode.mp3 b/op3_demo/data/mp3/test/Start button test mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9bf71e9c61aaba19b4c54a407ac26492848500e4 GIT binary patch literal 13600 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 O;{QmvzZd)W?EM#DM8&)S literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/Start mic test mode.mp3 b/op3_demo/data/mp3/test/Start mic test mode.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fca8044fca8d469c8bfe7c27c49149eb16fca457 GIT binary patch literal 13287 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 literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/Start recording.mp3 b/op3_demo/data/mp3/test/Start recording.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..39d336c9123a633c15ed568dc776b4c6bb0dc1ec GIT binary patch literal 9839 zcmeI1XHZm4y2odRjDQSr$T}gSpFZ7vG~r@6psNBQK_QWdtBUwl z=qT$VSS7`6oc(-R@7eqKI(vGsiV4X`3yHJxI{Eo|$=ete^1EM$MGf~ zN)sh|)sy8a)bx$4;0RrPJtWFV8KtSOXJvpkGSEjNtn~GCOi>01k*h|8SK$+A?I9}a zic;25xw>Mz3T0Jg1B8yUm8$+#hkv>WQWJ$hnIep?n&DlAsIZ8Xs=lu7RaNmSOiWBb zs-9kfKF*F#eyqy2)?W5*)~xD2p8j5}NFik*0ag(i83{pbFIHwoySfSfRTz8PTDt*9cgH|P?fml0ApA!xzzLYIWL7Igw~vyria9y9tdt#>Tk2DJ z*r0hW8#$Yz#bZ+eh8f{&txNAftI}Xa;HsSIpH3(p%$DvL+RL*_$#2Tc58FnILODx5 z(j`~02@u}(fl)v3dUIa(A*c9yATAX-9r(@U{NzdP?2{mVkT6%;jc1eNou>z7ccYhv zB0SncuS+(4Zg|?tvJM>Cj5$%Hj5u4VkVC#nzDQxO+#ohc;2vT_;FTi?guTe_ZztYC z5rqwVVenz0tE}Sn%|7eA(_(>MV=r+*Y%qHwYa%8|AvPuN#u58jUmtn(O>jDSVHnOw zYBrt9F#ON@S-fo)nwkmIpBWf%Bk*EqdTbH#vi|dc&c{!FXVrA`-B*?ti0xN zp`z^|eyC_R0jGw7=K&V3R`#6C!73{Y^a5$%AZn)3F1_2KWmsMOnlX<%woju&c}yEu zDV!LTLCZQus|Z}Kgg82QR!P<5O7V>D@yyMvLsd4W^Z^FeoV_=-ep9QYcp%Qvef~+F<6+2|JbIFR^mc#Mg!gMCGvN=-&RRhbk0 z(13I}n7``aH6edk5Y}=OEWUe(Ed4OBdK~*}0@fm;Yq5S7q>)*Pl&Y8CAx9%ZfqGtz zKS!mIog&~~LgwC;-e_OWhu797>q&jv>3JHoe0WZsWl}A6+AWG=#!y7$;OC-N0nYeS z39?_`kDo32w4cdzT|8ME%b)$}H+C$|8s#VYRyYoh8wacB3HZxU^qgs^AUKwQeN?458AV+cS2WIQ% zZ9eh^AQ?kbzYlp< z`t@npQ<9C4OWo8v`YL?7IzQykqpW@9Ww|=DF;%f4$++VU)&t=LE>ZF-g*Qz0#RRw= zMs2tDUZrT6QpGW(VBxq~j{1(6VUr5!qH(R8KnlTcbbm9yi3FqhyUzyD==gCm zF_&rplfHO~sd|rvlVlO6S!U6If%Y;hr-Uo#@Jsl6I2M@4fwNQ$aPGN7SU`eXcDC1$ zSmRO@$>)N;KeqN0IL{6zR=msvE-_XN0N`#b_Q+qm6HH7DLE&k<8|YUqpENC*iNy^= zar5O?1*qsdrh$`5s|K?M$$H~>L`FB1DS|D+Ht2{~VtaoGiEI>5E(*y>l_MroafEJP zH*msN<-10KwVbA?9nB}Jlw?T2L)Di)gpYTqz^rn(rF=fbJR+b$LQ1vnD*Gel)rb{* zrFuvgp@v>qGqlZCB$ETUeBs{pefaySuDAxBTWGS+yD`cF;71TXiF0A3{8(I4F;tXW zCyJ0RY#Jwkao{EZ>;gXk2FQyWnF*0SJiQC>;qSeuu%}5hguOlH+`}gtj&$xX1YZOk z7)2Kfv0;THV`Xq9?H=UCSz^Bp`(>W%g3gz``-H924N>o2o17-P)-@`LSuRsEKXU$A8vxA8mX3&2T83WMZ3IgfXbI(gqp= zP^mGqNt52h*Xdo)GkTmoCW1$5??p!VAu-pwHa-VCf%)J`V;iqt zK5wK(W8nl@{P0gNAzIht6%G4m>d<_Q7&M;36I2OMI@kcK@E4`dKG~VcpZq*h*@T9U zRWS~k>m~eLG&_L?rq+syGMh{&optowBdcGavZHMqCfW73pHCm@8=;9)ONXhw?|um6 zh3&-5!e$oF2D;Bx=ESHdw!b6tw?;4Qd@tT+$+6a-WqYHZNNv_G#n8{+P|!lHURI6` zkb7b+r^x)05^_sJ+va$WT}(9=RrBO+t+SC-_r*=aXxcdg7bpSL&(*XVfo^)(+Uf7; zKuO(vw>9jeQFUBSB$d6kA@vf%dot9>sukb`r{OGqTk-cgY6xaVyqxXM7-*^M(A;YE z4!A{Z%rtSQaV@H2=HomV?1ItN2F|?M@@z#*Jv%g9&E1xYZ^;_USe3TZxzdLcl|&Mc z^qM}+cu+(yOS5UM^}gJSNQQc>syHLY=r}y|B}gS~gq@b?MrdegJ@~;vNHoqPHhBds zoIOiF{&0raAP%nRx3&Bb$c&#@V%ik>(WF|}rI z936Z2MQwGtUG0H}$o}?(sG@{DvK&tWPJGu^%_rC{>G2$eZQDA-G=)Ona7vdPl)e-T zcaLS=Vdj=*6yNr>**o-awRD2Da2qviwD0+;7%Y4x9B3kIed2=_#4DNYqln;sVpv|W z$?_;q?&xotStj}Eu~DZeyW$+6HNVd3YO10J`6#J}IWWml`EBUDwjW6NwEBmE{*l~jQzgXJdh zJ46kDcldb%mq}Y+E`hzOSbiNdUWNpON~4Y>r<@UQ!H%3?he&)7tfGXjMCPretGX)) zq}}K!OkTy2;{N65U0yX_usxVkseS4Qa#5m@(7XZD9b zAiEP$BxGqBJr~=3p%H?nGUeC2Fw2PBWsm;6!&*J1E7XP24kBot)_7?lRP2;GIxzi7 zKB7lY<(!AzOoMhjK_@}65EDg&r-Y`$WK$lK!vcTR)1`*W6N9l??d59% zXslwK*^O|Y>oQa|;rQ&f_ahqBb&2swJW4a{EZNG^Ew)j9;U4joZ9`SE2+f&s9zPw` z&1<2Q@1`hNPa^z+8|9GfBZ`O&*YNwHFAMKZfoqjO@Q5~*ev6)bx~T?M0YV>j&Nh+K znMJBU9RVMG@aRFGlA1TmP=LQI?VAL zxrN|iYWnQ-$&@!FL`6IKJo*KhWZ7ByH@Vbo?ug!GfEBkWaBzhH7nC#eAdp={uUp1) zYp1yq2t+rLWjU*oUq*bm(p*OHI%4`!WwD}A(eu)=USXG8E*oJFrfuEqLu&C*b+ za!zy!#ns}2@zW5KR3c%7fr!h^=R{PA^CP_i6T6X7MF#k(V4|0UXZv~BtU5ALm=#+k znLysJttcw`AFnrv3GEv{1%a6OX%XeK{Qkt7DuN+%?Xb%ki-G`d9*`cMe_YSTN4o-& z`y>s?kO;=dMR+iyja~y19cyQ>O2m4pg)q-`2uCC=G3zP2rv1FB1 z2r2dm0ltHHAn^JY%55zNe7ofDCArmGc1sRBW+%B-l)nD(cg$bgUf-7vpW^^GeDG3E zg}}qzp`hKEz%A4>>6AX95-A1jUTl(HhJuyjWhM`$Kxz~h&{D}>GGJZ23iZxDpPp z*3?HoEkyjB>^oA{dChzyfcf-gm5KLa<%6Q=rbhe>|7W?b8kKAf!=bxp(fiEuurlRW!XQsqlg(fhcCnm1iRPh5TLAF$bk>$6&ZL`Od*21}3Vs|iEHAxHW z*{$Zo6PrSGS?Y9Dc(C5Yn}<_U#XY2^Km1%v$oz}+0l4T03rE57`_rY>m^9AtsPZ@7 zvKCCHaT3oe4+Diim)aX4SxUyZS><1;eb%!jTYK()65U%{jC;{+Ny78Uaa)4eCvX-1 z?yF2D^)OCsmfN=h5IDkLK$ zQ#&CMFAx~9?*;>t^y?x`*+;SwzP_&M<_8ZZ7b1RyVd2;raq3RGOcJcNqM}`1v*U{I z97Ls9>|mY%z?O|5-8P}{+8=`hfL(SEF$~t2yc754#m`h@M@dH`8DUvjXarly`j3;e z-1W&3l}c;Mq|0&F?%XoJ)Xqr!w{y25LS5;nvywCPnbBzlZiQR;@sA0n_3*3Po^eI{ zp?$l1uPZkkbXWlwbM^D1^m{c19~s@c{}}Pgaw?2-wBRnMiSJi`9`+ikFC;I+%p&Ad z!n?Y*)7+KsJQmI0wqktZ-n?D-o;i)5_RY9TvxD!&!AOJ)s@Cf6&W}SSTg|j)(%LZX z(*2RVANLu%=0+)iJ0^eF(2$e;$v$&DQ{y4Pj?HZ;)AW5?RjHj-7R zUd5j&PylSHi%?k)#HDhLI^L5T_QDExhmNBYFW+RO^V$7r2Q$anr6@A>lhnm&UXl9s zd&A2{%P(AHc7Fyv^3N!c!KjZ?tMschAPuD$Pb3%us_7P`>qz-ybY10;_$ui|N=iz~ z#77Edq-3l`ycxE)JOQ9mAGnYhiMa36W2$r8wJDufz4aC4>6Y$0?fSjvbfgv~l}@8q z%M!ME=hLIZ$q4AXI7l5~x=gRCealFVAZ(6FB-r1QinQ*3pBhUfn`Y!zQ zQn~7S&Xong!rC+MH}{O|YIBBd6Tbv5SExCCeV6%rZn1p(23ehaz#`f5xAg`P?sA5i zz1(p1a%}(WVYqDAsLr=$@9Zx@T3EPjme<5{R{GL7&0e&+t8bHh*&j6Vydc|=~G@pAJUj}@Y`Ir zTfhEFW=2o6+f?9lX~Y|R+PY6$c3F{lH!$tk3z0~fb*|# zp(Es@M`E&=Ej9(4NSJEVE=`LpzmjR-aR;eKaSNAPWXQu8v4@iI}~LCP$oDxX#7I` zY7=~!RHf(0m$<$R=)S#8=6~C_Vz)Squ^fNQraygzkcgZu2;?lOsrHk`1QIc-4TrWA zG)>4btSTx=1_~u7&|Q zMS8i^rO}c9#nu*3ap};6&FU!A`uAy?zzAP#PKFl@UUT}~!!K58yhb6QH=?G7CT%g} zPQFvm1)oD>4}j5VG#(#i>*0?EHk$0&Wxau;vb>`C3H0k$AWz=x_5g0=+IIe|J57k} zWs#@M7WXYPhp%?4Zz zifp@ZhmDNWqBgL?ePX({G~8tp9pvHrsv32X9GLu@l+`fZhA=EzgSqT=W85dW+lQu+ z-MoW8&_I||g%^Nx*pNGH>x^p6Wa`thNgH14x!Ua-fj<5CWA}{mw#WBZL!T;eN37M>R0_Y2`!JY<)P%2bNA>O@pDjJiw58{)6_2UDW<#5Qr6r1sK4> z{q3L}4Q?%Q{?ff{L!&)I1y7kIb4hwL!_$P2K>ETP#Q`#E=A;`(xs$T-_rr%DYy+2y zv29(())vUh-=l*|(|4y>AQ6R?Cww1{>5)omyq@v{zArCshd`mg#fj_s!!FGIg1Q4~ zEZiA;NnJ~RU{nEc2%tC7ra5OP7p<<5d(MIDXFzA0lPtaKewPfF>p!wxrS_i+cxOp- zKj58KtWM`r)2pLAuGx>}zw}`&ooKk_i!Ws9Y;whJ;=17xv}_ZbRLTS#kIK356{iw~ za1zd&g9wF>8pTMo^626|Zn=#t8&1E&WVeW6EqBa%3~A}=O=giH<;Q%gjPVsox3%f} zfE$%(nW`Vh#GKijmF18uTSEO0!u=E3KVIUtE!9@F{Y1FkOlz-=nw&W7b&&GwK zjel{X7Cb`g1g&Fb>3UrxzP<&n)(01=6zs#@pBIXT9;S~EH_(dMCAM+L^Qw{mVL8Us z;@Ym>xLdl`${BDML&fthA&v=`knc_>ISz;FHj9h5YCh*YF45-yI~=JM4#&GV9E0J| z=Ywu#j^V6>gzDfh zaoWFVvcGq*=6dN2#p!dsxENXDNSolau-j-Ursh1sQ66|Yqs?D2goRtA*G|P)Dk1hq z9#@k-GEWr@H)U*b)M_V*MUj&6`z52OCx(4WKvt@Ie}@yt{9B5!5?-?>00a5dJH@Uj zUdFxQ$jQ)OrGXpT_xD-z2>k7NNSR<1?I#J2b>Xx`7JF;wPo|r1yTd;nDF#=J*d_2e zr33(HkOYbUVf)7{{@>NHmV17^ypMO8+be~a?=SKlO6l7eeo}R)(L*SvR%V;Qo zg#@e|y}iJ`ww_*&ZmwW{ZV_Q_0WhnBx3|0KlP7+De%#O9`E6`{x!pYNpRhqypnMM_ z=^v`1mac`of`*o+9#mHbs-mT7p$*g3*3wh3(9%>lf@&-9K6Ju-sGb3qu6%sXP#JaE zha-lEDkCSOt)MPrA*b~);D0-bo(fa}YNVk1&<*XO^6~IKmDAGDcxXyJR6|2Uker)) zfTyFqgEv^l+S1+D#S*OK>E`1O*5j7p<^=PKhzN2aMu9C|T)_Y6=V|L@>*;H21C`U# zd^idEL)CY)wsZl`pN)a2_CL`OVk!m`ckY+=@Zo5b=jW)StCaTGJb!wXBZp>7VX%ardqOpvm92y#WLqq(&Hy&&Zg)~3l=flrbx^CZ5^4|(Kws)pU0tQzTK>*Ms6ZSZ0Wzp}({wyQF z_gC-)rrhs%;M{7Ag@&Q)f=reNbR`|;4~~$=MbH1$IGiZ^n1JQIdKUjW;cqF7X{=5j zb!p+P0#>h75p63>ksn^)Z|T2>_mSU9n|%jRdjZ22h1Rc;Ufa?VA|u7{n;-Q)iXW}) zql)^Rz5Wpg%&d)X;Y0fNX`Ex{ogtlBMf-9tucTV2HAB58vjTn!bjh9>4`+vSpX<&DV`O_E3YStI6NDtIK;%M-jY+aUx?et_Gv#%Z zlkiF`JQ9S&W2B9tiK-yK#kU54QP;IQ2fyG=ISMy$n{tog4A^{*1*#8%jgPue%fj&rIZxSPOtZ2OuOPpOI`r zsaF3D1`b0696n9&MjibCE0T<`S50(uy1~r{*xaTP22)^co92_;Qxb~8&2DS>WgHob zi0bJ+P=xK_0Tyj2EYYdFS9$bUZ&GWo-~wK=<#yq1MZ0wOR#D}eceuJT>N7~u$L`|c zTb`(OYu@4s8fzeWn27}0vAsRP$fDK#y|VU}BDyBm)mv#}otZzH&PeY&%qe>NPw4$* zdvGqY>=BmZpnc>!NJpjdWqX7QrE+aI4yQdfGH<$GZQs=nh4Z>f2(6xOAY9iUJ$~HHxdV6;gqF!6sHMVvv=$Q6ET_icN zOC6H?8&ECt(?CeVk#>?ee}w#1Qn4Uj;!tkC>9aFpiM76d)mNtp8*Qs(SIQ?r$unW0 zW0J%OIBvR}&r9Ti*voL>D&IfbGyF*Z*v)28`9ooawUy#e7?h{qT10AoBtc8)XvW*> z`IeY)y^fBaDjsXy&09c7=(J9MQr;T1M8W4t_hnV8GiuyfL9i1@#I`~AfrE*1RXYBkXKi-F&iRetRkAfI& zT_fZ3H$TOcfYTwb3rxoIS95yfe1ucR_G5Q-&5K=IVyZ&0NoKROCU)KdPv(MA0J!qg zS3p=!o4$#7Lq8y96>6SSaxulL*jSm^F(xs&VMxv`GDBhFuT(;>HLZO*fLidbP!c z5bha$D*1`NkrEveXcx$?gq@5qetw(&5mkCXM>tO(oAt12odMaHGY!P@ScR38!fj)N zgyP+^!XOWPxWQbhS?}$Z@K*N1x65@uksN;)kM@h_6}hyp_62nGO*EX_#YY*UYCI!J z2a8}MYY#LFj3VQ*ybB4<`c;M@XB$q%N3Rn;zT@mQ{4D!ohx65TJ>xqPrdmHM4i;Yo zoCkd$`iZ$APN;z%hyJBq?ylu}ZOMB~5SbN|D9w`F^*+)!-XDF&JD5P(k?bMiM}F$b zCITYmpY}@-h3VoLT2BAR@AJ!(;6U{dTMQnh2q|qCMsa>^2^Ij{w=mkv@^Q?*KiIb&3s+8wCF_HM*bs29 z>8Ht0%mY=O&<2v#V(30uk5O>u?6j72|BB%Q5%?yR2F4ZTZq}o(#w$3Xy#E?HL-nA* zsSHPECMehiWB^Y$_Xgm=M8RiHF$kHJ_V|Fj9j>7w2+5dfm_yzjS-fk!TTAx7fWb8k zJf5bt+97@7pd7YovK`SS<|#V3*ZG}38(ro-vFiq=N32?4ppQuL7b5u^(RN#e<&x8hAn1w9v6d-+?43uaVl#`8hB;y+P7J0TbH{qw1MQVj_$Tx)YG)6X+h< z$x52~=7x+*gZmj@cPuW2eaFBb!pZ2(?$zDVQjj9D=#Y1y{)H|7*9u|6%I8-fz*wfD z;~VpaZ^S@c!JgmKPkQ(~Y|EPpusdwq(swzUF7Cfif8#9^lz;=WbvXGy-XMf4qYwS| z^~zr{ny>&9q>1kE4Dfj;s;t+Mfa{u}#O#oGMyNJyD&>sY^jS)=o|0{1;KJt2`WbS2ijDg<0B{ZhlK zrs2p+U2g%Dw}w}QoGgEX^G^o=FdCd2xW3Ti3ZhngQJlh|Bqo&oLth1n>=~oeCyN9+ z?EUVujO#IS^j|G#t!ed(I_R%72A0#mAD!WnVD5SM)^l|2=Op!cJ>jM1u=8>qT5~w$ z?ft-e3fEyBpK>kC9pCI|FF8lT=1-Fkf8-NJnqbvT(@r^DtUUv?Ke`AiLck5up0ym9 zD-Wc_QDWhu?(mn4&H^J)CG25+zThfrD%wUh4mQ=gizEZhf|bcsW!>7vXq~)lEE$np zKCEN;MoVe?q2wfi#xFkv=_v7wcQ!*K_9KS}LaC`IlT?>dN5Ot?X`&=}EiO?6Uo{iy za%Q|X=De1#`cS`xiRm%RNjGQfm4#;e=dr?;UuVuHj7&-A0v(h3J}2={ z&q!F#JTW;?AMjlpEHA^*6KuWncz4);I7SDJWmWK|8E*UNKU2&;;?0K;?wDoibs_mI zx*2xnOokXYh!gBBFIe!9q0^F+8~97E`6a$>fpzBbkY7a;l7&iCd^W-zGfAbU6fzKo z$tVUx+ost;W$AY|Z4@Zf`l4*RRP|!xV?`q*&;O`yCjB5n)>79k=Bf@k$O*Y#$g)*Q zcG%CW#AqkmsJAXjIIpcf3B`d3M54qPT0`tMk7Eww3n*K$i+|`he?h>lFw~HLHxER; zClqfhn$k%yzN;Iy0Dz4LtzfX}6lju;9< zv$J!%iy1#UXpO6BF{ zH;4#(4G5#>{P<)*NXXPV1KZtMbKN-|9}&XMQ&a7W>*quYo3M8qADsE|A0Ko^8cOCFs*vDq*W2>H#ae!%E3%d+S!NBD07rgJ4NZv8X$~k|YS)y7~Qoio(#@5a-Q`8dh6 zY77$qcCMWX(_*zzsmV5suRIUrSD7N9UlDL8^wrc3W~P)Nj9&#Eelmp-==PZSNXd+l zJs;d8-Ez)@<{94Lx65qLCAxM2V5id2k2BOb5DD~(K~C=FNe=<`Cq_MnmsXrr1n$nN zl@-P(=erMv0PZm&o|t&j58Ie08_vzrzMXgV2#9l8xJfpGRt2S*v&PwZJ@i5pe8GV> z(xi_GeNvAy=IaW$4R<96??&SuZVy&tfC9?rD~rrw6q0OjEsk1JyDulI#h&|`V(GK| z?CkBhBKPYIU`f6zTEz>J~+fN#j2jJ}NJ#0}(1do6JX_N3E*sy%W{#|=L;zckV zSd-$4^xoKD+i7_+479>2+LulBUJ6aHd*?~MJgqt@>%IYiLw3lZEoVQ|&%C+0^YhVD zD&5H9`tZbH0uS6*y?bxV=!w&WauJpbVkr4|nK3Ml61cWZaTrY{_2d3|HkCj3+YYxQ z0=qD|Y-D?pE@Vce{ho{|bDI@83H4WU({>TYBt2W1AW3=SPP?@)&$v-bUn`VPj?h(B|}dtI_aX)_o4vfl?K*9ubcQDezTjpX zr<6V@aFd*-E3^?LYn_RKoewT+|Fq0$ffuAFiqWfx+1J+0AvN*kMYD`x%yi5m=_FpW z3?xzI(YLqP0PE0f(nW^G?T0~Xxv0iRT1@B;jTig}335g|V~x%)-zl++I5ApdIRXIG zan%pzE%TO6fLXE)Vv{5Rtn?t@;=mWgXX$}B)URV@5)8rzcCK^Fxir@b8{)`sNGHi= zcp2J7w2f_qVuk~yPA|u5YKrT@vpkc%a`h~778}Ky(|(OR`%t4d>^SW3J7Zsypv(JK zdqq#YT$}j zV)$pdS%JejSKhO}B)grmH3VEHZ4>!1y&@}eyu$%amfe&2>MOU5N^!LW3(g<)8NVwb zWvD!^OhMc)Z?4?-xQ7~cgKV$}7&5l?2cS)Ujf1r2m|s6}p(6D&4Pgpc0JnZ)E)O36 z1@y~eP#Pmqaww}lw(R4=3@t!d|DOeKHor^Dp4;n3b2o4XFp>knAJCafAgbu^F1xFp zSxAu@Rx&Qaa`mjm#w`{JL&&%a&YgxLIh&ux^l1(SWkwns-iQ$%Q`+k=da2 zQ#ZPldKXdm`=pj|hqFueE9n@FMaXkx)y>3(yAxWQEnH6>9&C$!xxNYvCVN_%CQCFF z#|<8#p&+7*Y>dI-nps$wi7T57mbzYoR*pD)BLg|zskto$M%8d*h44yNXsLs(`mI_{ z5?NpKXCs8m1IuG)6-=-q@e?t#ZK&t11^o$-+?k?~{A3vNOqmdye8%yq%9BwdgSXTD zngzf$)6%BQv&rp#_FwCvRpfUn-S|wPLXFASm==CahV=zuP()~Pc zX1vJu(DA)k-#ZEzPWYo)e|c*y)-ZMkWF35du4km~E>c{5Qm8O@LUmP4;-0Xth3-qa zOPKR!)Cjm5`f95$`KqY*YU6r3_!}s`MvqX-3R&sgL!Jmg3P0oYe9x}p7_V^3E*Zrq ztmxNLtavH#&JRA&_#F6uiNT`POy>UzF?9i0jlCD%mJ~$S0yMd=F z&z^Jn4t=ooJR%>Limbq^x3LY@i$1qGPTk$49)x%}mZT&}v1@zF5pnjo%J6X#V@E^U z#}RN{^wqLW~R=Rw4@=znuxW4#opvfV(FjIOe6s8Zf8_rEY_1=h#9m^vu zH%>3cx1Ar5K(2Sw=COemQ+>Jg@I0cnoSjC2B_r3jA>w5L2jp2_ct&lenN6P~ehzn~kD9JPUsT3Oj0w*9XCuz$S2z+C!Mfdy9`Pf`WOV|EJX zQOh}fUN{g@j-5%7hG{F%a^nz+QY_rXaZ%Dt(i+ivtMz10Jm$bUjcb3K<9fm6SZwMg z&(Fnl=7UlXS1vZH85cgkZm*Jq$}pKQ#wQT@&yI4F+NfyHAy0rGDb;FvH>IQE=NbsO zQzjG1nU_7Y-8oeX?6(VVLTOEHk0%WY2}7p+59;n^m-cvswo!Anx)=S%ZE*mCf>6Lv z`oq5CH$1HOJ006l8|MgZQM5ti84OGPyj-8J+>sMizFWsd7A_9i15I5X$8FT%&mxis zMO0D)kWBj@a>m97K}>H>pZVjD3g|dfxkkRJQ~Yo(q18q~-_BrQtMBCJ?Jr=$91+!h z2uIb|*+9j$ODW)N4u0#DK;h`FP8TXyPilHr@&yTPcpUO|m*bSt$PT*r&qpTgeGcDg z7o>j4XBb*?*$~`eXnoUC)?=dxaRIy3PHkz3D|(H9`cNv=-b$ybn!0L+I5U(KHB5$q z59Zu#JxTi{wjrC$R==v8;1!k&@Nlbj1LE6i_0(NtKlzr>I2yN%F8(DPcvE)zs+Uk` z5CGq@W21MKn@# z5cBhcnSa6y~o?X8Vp&BOa z;dR%RLkB6N{DOA_-D{^Nw?PwkaNx-~-GE4Z>u>vxoUYtidH|^YU|lzQ-(_(U0N?Hm zSUvTK_A$wNNxgd*IM@l?SwCc=zlwgj|MnNa2e=(Q_VP!-0kU$lg%~+skzRgWS%Eyg zXA+LXPJGFjzXV{+$RlS8e3G!FPR?hU4#L?4aZf|=JY}BiDp3>0hyz>F3~0FEL7$*{ zRZpZ?N)J^92vv-H0us$A@S~diuwi9plCMgv5eve>$H&zHzetLUQQ*j2AM*1Blx&_J z46Peh!hc%aPj^;08bSU2uQ5Y76kFkJDMjP7l^S!jchHoI0{2@iCMQc0t0yK@ zL%Yx6fJ*$45{=A8(N9WAc`+hU$2a3y=^roo*jaqL=uHk*)I_w^i+CBB=y)Sxs9!nI zTj58(%sj^!dP96U^-3mKLqw)qzsW2ew zNn9Op2sM^4Nb`ZD4wJF^p7B)uO#3>igEV!icX#9gwcER>%%0)@B8J-EF{PbM!GYmz{__az*K?_Z!HDeQ1+<1N8op}r|)Lz$#rx8N>0zPO#Nj6S((&J3SD4je3_v9`fNM zb^Q`>OgnlKi+ZvjHP;0{~Ebn9|px zuGvf8)~S2@nm4+6@!yeVCWqN*iswD$8Ho!8N`QN4G%8KckiLZ0&vq0`OEQpSMaAwC zyjY&yHKOpKZe`90bPgV69)*t(7`MpIOH9k4#v?0h6wBNxUS~G>L2^#Kp#Y z&)FlwUFq`Tio`Jl@xCmcjgY!2zW(mAY(W1j_)wSsG&8$_!!G>v@y!Hl4K` zjo7oArrIun5q2>r5~k@@EzK&Uy~sRBc}jrDD-Uqjk3(y}z6?mzYy;rG-Lq`vkU~P^ z7JBnCj>O~Mjt(j@FVgAuvO0}W3e*1c=I}q)(=Zq)?a`aj=WB-|$zfU_W^Z0AoImh@)nX=Ct949pa(TewYHYebkO6V!H=~Q<-I*UiP9 zZrsjDALJsitAnyUjXKZ03~`!vY%{k1+({ae=eCbZ)9^4oy1SM70cT3zeVX^xLlNTo zdC7jS0zzSEa&mKf+~t{nYyPmo|7`4#uB5!hLWLDMkms$s1k3=kBhMJBVS2L^a1X!k zJs;0W;APT|$s)t-WH30N3Ob5|%xv8E&;AdyPx-81<0uI2I_i#b|Rk8<73zvoEORi55C%6tl@1G7zAEH7zHQG;9Wi8`21~+a` zxY;gERt4LZiCB+-c)YIH281~)SVT8)duhq9y9+E6=75w4HtMVV9Zk{ix=XWQqXxL zp_WT?M4B8!vl)`3j~13jC`0V<-6w<(XP%FVoPz4bH0J^eN7g$>O3JJP2u6}<(l4uh z{{@HoU;)CvUdCy%=VDh-WQTxw6>XYD-hI^%r7AzN>QYbMarvd9S~wzuI^|pWB&b1Y zy8EOg`swxZq^ju2Tya&)JJrLb#q25Hn`({Om{#t0iMEwhD%dKA1?}iVCfdgnNKHY@N~!x7uku-Z0QrVrT?54bMQw`4hoXfjQXR{oaWE@Q;Z7OV zTI1|4g&hVWs(f@_C%-L*SWz19ZdNi@wBRxC#3eBzYSYO1s>vxQOl-=NstE+?S;Dn_!Bp08F*vA zM>ZT%9`+2a#+&e@-6*`jdcaR_9}}@Uh0Mjr3rT4`G4~hE&Kd+$mGQkX6_!rSkn(Sz)|r(k1_i1sH)RJys?<8vxO1(Z zx@`m(1a4;*nY_Z7-%QHP^gfyng(UTA8QU@tEqa~iiQ3&b;OE@9i-^>ObBY*_^~u4@ zn%hv=Ox=savs5Etet{iT*v6?|EB{Dz*R3rzyQ%Rt9`kYXq9viC$zKNVHv|W9+yk@wK~_ucCBRk0p0#rU=q>yc^BW$u&t#AKAHwi<0eEJ$d)49GpdrFzT1?D|&s1e6=$$YtD9hj}T%U^MW)u}-?C4b3!+YO0G?QO&r^?AEptviogMsTQGJ zE^QcjpLsxxct3Y&q8OiJ5!oF+e2YQS6BD1Se;nz9N1s9PY2SX9gZU0%3aqRguDur7 zRso?xxXq(G+J1I>KY;`Cnhb#??~!aQS0SXB3@dADH`h9LEI)`Q=6_)8if*+!W2&^j z&OKhTozvj(@kS^;ix*mup>Is}s6kSUW)oH$;z% zzhO>{Q3(Xp#y|C|oUq{I66a;2;tWAg^>`E*yL zC$$`!LUN@1(+FgvXzQylNQE$Vi+R1%GtV-6&LtK?`wRuz^jy3{ri5_yb zXo{^-^vK0iVs!DGJ>Z9XX=1$Eo51v%QlsNZF75T3=d0SqHkBKn(iAUplAeJ~nCYsT zrbvw?cHoyVpbBPW=A6LR6<#GZ1Ir%Xgk8s`8D6m(KEmN?=6QdHNr5E|B~QmuCJIfw z_@-bwKTCZXS#AtO8`^CdBHdM9gi zl#!MZp#}uXq7Eg|s_Z(tFCpze43Ot5>&>RM!g$z9l7Fyrkej90y$MrMmWRj~);M-7 zEJ+s%KGnD<_S9+;c47p3^5twupW z51iet7c-H4{?WrptxJRS7=7L+#Iow+ecN2X45@#0B%RD8>qDxJ3;Bu2a<`1_-^yW% z(nyT(GvKmTGFbBT#VMR#q8^uTG^bH|OO|Tpm+;m<=KViDi*Q)%3>7hDdM+(u-^*)N zJS2tNjd%x;nAI07{bItmIo5Kq$)shLniY0^`i2=HRd&A}_J(~jOl+N*A((>E`=RyT zqhs%CX#-d1p0@j|>i}A&ZY4 z{O1083{ST7&(D#a+K%hd=9!wESps_wp{B7Vmx%4vIth~Mn)BA7V_u_1O1jHNbLXJT zg~M}$QrCB-wa=GZCdRkvYG#}cR$P2`naW^(0bUwY9y@`Hy%)_bTs3!pjz=}JVjmT6 z)t{P8*33|qvFVgy(-h*2W;<)_CI3b1^2KA(@*#Gu%c? zEk(-+&5GzBWNe!9IGe3^zKvwAI`#~i*W|#vt(5KUcQQ7}W?VCFGt%>jgdb_28z%Kj zH~VON1@o>5p6PZUOvB#MzIX!Mcemp5{n&FjEKW3`b~HH0u#eVKlX60jY@N@;v_I#I9J)0~WMo=d|YbY?&81{*=<4QQG;@8t)*aWaIWIR&!MviIJtS@O* z`;<)0h4!UX!YKQ{mKarktKbYXy*>^H!NW5RhV+JiQZS$+EZ0E;Q4GjeiR`t+4kx(; za&GR+Y}j`Mw@u=E)9hWKW3F&C~g+TN^jef1&?qzjO(|scsL#bs@(mPSru)OAk?3A#iJxA(r zIps`=WZVgY<LeR|#6**IRczYZ=A))2<&+|sX)bzwalP2=L}>-T zuc|JG8J1`NTe!a^&fn{dfIFo7#ztfAKkxBh4gGh*{a0iDZ+=Ha)g1&vQGWQ#Cg{I9 z(SI`>LO8eoQ?{!A!2K(He@nUlX5k*P+VGWv huc-bf%l$7}{H^BSnh*a;B>&R(ZwdFWVgEg?{{a)Q)(HRr literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/test/User button pressed.mp3 b/op3_demo/data/mp3/test/User button pressed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f4e19d0adf40da874c09328cbc70ac81100ca411 GIT binary patch literal 12190 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 literal 0 HcmV?d00001 From 5be4820b061433908d815b5a7f4f890c19f730d0 Mon Sep 17 00:00:00 2001 From: Kayman Date: Mon, 1 Oct 2018 11:33:41 +0900 Subject: [PATCH 083/172] added a function that let op3 go init in the vision demo. --- op3_demo/include/op3_demo/face_tracker.h | 2 + op3_demo/include/op3_demo/vision_demo.h | 3 ++ op3_demo/src/vision/face_tracker.cpp | 18 ++++++- op3_demo/src/vision/vision_demo.cpp | 60 +++++++++++++++--------- 4 files changed, 59 insertions(+), 24 deletions(-) diff --git a/op3_demo/include/op3_demo/face_tracker.h b/op3_demo/include/op3_demo/face_tracker.h index 3289375..79b3d13 100644 --- a/op3_demo/include/op3_demo/face_tracker.h +++ b/op3_demo/include/op3_demo/face_tracker.h @@ -54,6 +54,7 @@ class FaceTracker void setUsingHeadScan(bool use_scan); void setFacePosition(geometry_msgs::Point &face_position); + void goInit(double init_pan, double init_tile); double getPanOfFace() { @@ -79,6 +80,7 @@ class FaceTracker //image publisher/subscriber ros::Publisher module_control_pub_; + ros::Publisher head_joint_offset_pub_; ros::Publisher head_joint_pub_; ros::Publisher head_scan_pub_; diff --git a/op3_demo/include/op3_demo/vision_demo.h b/op3_demo/include/op3_demo/vision_demo.h index 20cd1ad..d97bc41 100644 --- a/op3_demo/include/op3_demo/vision_demo.h +++ b/op3_demo/include/op3_demo/vision_demo.h @@ -45,6 +45,7 @@ class VisionDemo : public OPDemo protected: const int SPIN_RATE; + const int TIME_TO_INIT; void processThread(); void callbackThread(); @@ -74,6 +75,8 @@ class VisionDemo : public OPDemo ros::ServiceClient set_joint_module_client_; geometry_msgs::Point face_position_; + ros::Time prev_time_; + int tracking_status_; }; diff --git a/op3_demo/src/vision/face_tracker.cpp b/op3_demo/src/vision/face_tracker.cpp index f9b3e24..771607f 100644 --- a/op3_demo/src/vision/face_tracker.cpp +++ b/op3_demo/src/vision/face_tracker.cpp @@ -30,7 +30,8 @@ FaceTracker::FaceTracker() count_not_found_(0), on_tracking_(false) { - head_joint_pub_ = nh_.advertise("/robotis/head_control/set_joint_states_offset", 0); + head_joint_offset_pub_ = nh_.advertise("/robotis/head_control/set_joint_states_offset", 0); + head_joint_pub_ = nh_.advertise("/robotis/head_control/set_joint_states", 0); head_scan_pub_ = nh_.advertise("/robotis/head_control/scan_command", 0); face_position_sub_ = nh_.subscribe("/face_position", 1, &FaceTracker::facePositionCallback, this); @@ -96,6 +97,19 @@ void FaceTracker::setFacePosition(geometry_msgs::Point &face_position) } } +void FaceTracker::goInit(double init_pan, double init_tile) +{ + sensor_msgs::JointState head_angle_msg; + + head_angle_msg.name.push_back("head_pan"); + head_angle_msg.name.push_back("head_tilt"); + + head_angle_msg.position.push_back(init_pan); + head_angle_msg.position.push_back(init_tile); + + head_joint_pub_.publish(head_angle_msg); +} + int FaceTracker::processTracking() { if (on_tracking_ == false) @@ -172,7 +186,7 @@ void FaceTracker::publishHeadJoint(double pan, double tilt) head_angle_msg.position.push_back(pan); head_angle_msg.position.push_back(tilt); - head_joint_pub_.publish(head_angle_msg); + head_joint_offset_pub_.publish(head_angle_msg); } void FaceTracker::scanFace() diff --git a/op3_demo/src/vision/vision_demo.cpp b/op3_demo/src/vision/vision_demo.cpp index 1062e5c..0045a7d 100644 --- a/op3_demo/src/vision/vision_demo.cpp +++ b/op3_demo/src/vision/vision_demo.cpp @@ -22,8 +22,9 @@ namespace robotis_op { VisionDemo::VisionDemo() - : SPIN_RATE(30), - tracking_status_(FaceTracker::Waiting) + : SPIN_RATE(30), + TIME_TO_INIT(10), + tracking_status_(FaceTracker::Waiting) { enable_ = false; @@ -40,6 +41,9 @@ VisionDemo::~VisionDemo() void VisionDemo::setDemoEnable() { + // set prev time for timer + prev_time_ = ros::Time::now(); + // change to motion module setModuleToDemo("action_module"); @@ -78,22 +82,34 @@ void VisionDemo::process() { int tracking_status = face_tracker_.processTracking(); - if(tracking_status_ != tracking_status) + + + switch(tracking_status) { - switch(tracking_status) + case FaceTracker::Found: + if(tracking_status_ != tracking_status) + setRGBLED(0x1F, 0x1F, 0x1F); + prev_time_ = ros::Time::now(); + break; + + case FaceTracker::NotFound: + { + if(tracking_status_ != tracking_status) + setRGBLED(0, 0, 0); + + ros::Time curr_time = ros::Time::now(); + ros::Duration dur = curr_time - prev_time_; + if(dur.sec > TIME_TO_INIT) { - case FaceTracker::Found: - setRGBLED(0x1F, 0x1F, 0x1F); - break; - - case FaceTracker::NotFound: - setRGBLED(0, 0, 0); - break; - - default: - break; + face_tracker_.goInit(0,0); + prev_time_ = curr_time; } + break; } + default: + break; + } + if(tracking_status != FaceTracker::Waiting) tracking_status_ = tracking_status; @@ -176,16 +192,16 @@ void VisionDemo::setModuleToDemo(const std::string &module_name) void VisionDemo::callServiceSettingModule(const std::string &module_name) { - robotis_controller_msgs::SetModule set_module_srv; - set_module_srv.request.module_name = module_name; + robotis_controller_msgs::SetModule set_module_srv; + set_module_srv.request.module_name = module_name; - if (set_joint_module_client_.call(set_module_srv) == false) - { - ROS_ERROR("Failed to set module"); - return; - } + if (set_joint_module_client_.call(set_module_srv) == false) + { + ROS_ERROR("Failed to set module"); + return; + } - return ; + return ; } void VisionDemo::facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg) From 455564ee1da594b3588f9a458f3006b98f674b36 Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 2 Oct 2018 10:38:26 +0900 Subject: [PATCH 084/172] changed the soccer demo to track the ball to the end before kicking. --- op3_demo/include/op3_demo/ball_follower.h | 5 +++ op3_demo/include/op3_demo/soccer_demo.h | 1 + op3_demo/src/soccer/soccer_demo.cpp | 49 +++++++++++++++++++++-- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 29857db..f7a93b2 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -61,6 +61,11 @@ class BallFollower return approach_ball_position_; } + bool isBallInRange() + { + return (approach_ball_position_ == OnRight || approach_ball_position_ == OnLeft); + } + protected: const bool DEBUG_PRINT; const double CAMERA_HEIGHT; diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index f5f6df4..cfbd822 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -91,6 +91,7 @@ class SoccerDemo : public OPDemo void process(); void handleKick(int ball_position); + void handleKick(); bool handleFallen(int fallen_status); void playMotion(int motion_index); diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 37e2c3f..d8ccf5d 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -144,10 +144,12 @@ void SoccerDemo::process() // check states for kick int ball_position = ball_follower_.getBallPosition(); - if (ball_position != robotis_op::BallFollower::NotFound) + bool in_range = ball_follower_.isBallInRange(); + + if(in_range == true) { ball_follower_.stopFollowing(); - handleKick(ball_position); + handleKick(); } break; } @@ -490,12 +492,53 @@ void SoccerDemo::handleKick(int ball_position) // change to motion module setModuleToDemo("action_module"); - //usleep(1500 * 1000); + if (handleFallen(stand_state_) == true || enable_ == false) + return; + + // kick motion + switch (ball_position) + { + case robotis_op::BallFollower::OnRight: + std::cout << "Kick Motion [R]: " << ball_position << std::endl; + playMotion(is_grass_ ? RightKick + ForGrass : RightKick); + break; + + case robotis_op::BallFollower::OnLeft: + std::cout << "Kick Motion [L]: " << ball_position << std::endl; + playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); + break; + + default: + break; + } + + on_following_ball_ = false; + restart_soccer_ = true; + + usleep(2000 * 1000); + + if (handleFallen(stand_state_) == true) + return; + + // ceremony + //playMotion(Ceremony); +} + +void SoccerDemo::handleKick() +{ + usleep(1500 * 1000); + + // change to motion module + setModuleToDemo("action_module"); if (handleFallen(stand_state_) == true || enable_ == false) return; // kick motion + int ball_position = ball_follower_.getBallPosition(); + if(ball_position == BallFollower::NotFound || ball_position == BallFollower::OutOfRange) + return; + switch (ball_position) { case robotis_op::BallFollower::OnRight: From e1d1314d1ea274ef481c05e1215126150bdf61ae Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 2 Oct 2018 13:32:51 +0900 Subject: [PATCH 085/172] fixed a bug not to kick --- op3_demo/src/soccer/ball_follower.cpp | 4 ++-- op3_demo/src/soccer/soccer_demo.cpp | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index eec94e9..fa89672 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -91,7 +91,7 @@ void BallFollower::startFollowing() void BallFollower::stopFollowing() { on_tracking_ = false; - approach_ball_position_ = NotFound; +// approach_ball_position_ = NotFound; count_to_kick_ = 0; accum_ball_position_ = 0; ROS_INFO("Stop Ball following"); @@ -192,7 +192,7 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ ROS_INFO_STREAM_COND(DEBUG_PRINT, "== Head Tilt : " << (current_tilt_ * 180 / M_PI) << " | Ball Y : " << (y_angle * 180 / M_PI)); - approach_ball_position_ = NotFound; + approach_ball_position_ = OutOfRange; double distance_to_ball = CAMERA_HEIGHT * tan(M_PI * 0.5 + current_tilt_ - hip_pitch_offset_ - ball_size); diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index d8ccf5d..c3e4626 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -537,7 +537,11 @@ void SoccerDemo::handleKick() // kick motion int ball_position = ball_follower_.getBallPosition(); if(ball_position == BallFollower::NotFound || ball_position == BallFollower::OutOfRange) + { + on_following_ball_ = false; + restart_soccer_ = true; return; + } switch (ball_position) { From adf821b7e84ea5d2d115a66ca920853ea9b46a21 Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 2 Oct 2018 13:33:36 +0900 Subject: [PATCH 086/172] changed parameters for default demo --- op3_ball_detector/cfg/DetectorParams.cfg | 0 op3_ball_detector/cfg/DetectorParamsBlue.cfg | 0 op3_ball_detector/cfg/DetectorParamsRed.cfg | 0 op3_ball_detector/config/ball_detector_params.yaml | 8 ++++---- 4 files changed, 4 insertions(+), 4 deletions(-) mode change 100755 => 100644 op3_ball_detector/cfg/DetectorParams.cfg mode change 100755 => 100644 op3_ball_detector/cfg/DetectorParamsBlue.cfg mode change 100755 => 100644 op3_ball_detector/cfg/DetectorParamsRed.cfg diff --git a/op3_ball_detector/cfg/DetectorParams.cfg b/op3_ball_detector/cfg/DetectorParams.cfg old mode 100755 new mode 100644 diff --git a/op3_ball_detector/cfg/DetectorParamsBlue.cfg b/op3_ball_detector/cfg/DetectorParamsBlue.cfg old mode 100755 new mode 100644 diff --git a/op3_ball_detector/cfg/DetectorParamsRed.cfg b/op3_ball_detector/cfg/DetectorParamsRed.cfg old mode 100755 new mode 100644 diff --git a/op3_ball_detector/config/ball_detector_params.yaml b/op3_ball_detector/config/ball_detector_params.yaml index 49cc203..f7013fb 100644 --- a/op3_ball_detector/config/ball_detector_params.yaml +++ b/op3_ball_detector/config/ball_detector_params.yaml @@ -6,11 +6,11 @@ min_circle_dist: 100 hough_accum_th: 28 min_radius: 20 max_radius: 300 -filter_h_min: 350 -filter_h_max: 15 -filter_s_min: 200 +filter_h_min: 355 +filter_h_max: 25 +filter_s_min: 220 filter_s_max: 255 -filter_v_min: 60 +filter_v_min: 80 filter_v_max: 255 use_second_filter: false filter2_h_min: 30 From 4da43928817cae8d083b81b9b6d02de6cbf66dc8 Mon Sep 17 00:00:00 2001 From: Kayman Date: Thu, 4 Oct 2018 11:05:12 +0900 Subject: [PATCH 087/172] added debug code. --- op3_demo/include/op3_demo/ball_follower.h | 4 ++++ op3_demo/include/op3_demo/soccer_demo.h | 4 ++++ op3_demo/src/soccer/soccer_demo.cpp | 18 +++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index f7a93b2..fbcc710 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -55,6 +55,10 @@ class BallFollower void waitFollowing(); void startFollowing(); void stopFollowing(); + void clearBallPosition() + { + approach_ball_position_ = NotFound; + } int getBallPosition() { diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index cfbd822..48fd957 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -98,6 +98,8 @@ class SoccerDemo : public OPDemo void setRGBLED(int blue, int green, int red); bool isActionRunning(); + void sendDebugTopic(const std::string &msgs); + BallTracker ball_tracker_; BallFollower ball_follower_; @@ -108,6 +110,8 @@ class SoccerDemo : public OPDemo ros::Subscriber demo_command_sub_; ros::Subscriber imu_data_sub_; + ros::Publisher test_pub_; + ros::ServiceClient is_running_client_; ros::ServiceClient set_joint_module_client_; diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index c3e4626..42ed395 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -143,7 +143,7 @@ void SoccerDemo::process() } // check states for kick - int ball_position = ball_follower_.getBallPosition(); +// int ball_position = ball_follower_.getBallPosition(); bool in_range = ball_follower_.isBallInRange(); if(in_range == true) @@ -204,6 +204,8 @@ void SoccerDemo::callbackThread() is_running_client_ = nh.serviceClient("/robotis/action/is_running"); set_joint_module_client_ = nh.serviceClient("/robotis/set_present_joint_ctrl_modules"); + test_pub_ = nh.advertise("/debug_text", 0); + while (nh.ok()) { ros::spinOnce(); @@ -514,6 +516,8 @@ void SoccerDemo::handleKick(int ball_position) on_following_ball_ = false; restart_soccer_ = true; + tracking_status_ = BallTracker::NotFound; + ball_follower_.clearBallPosition(); usleep(2000 * 1000); @@ -540,6 +544,8 @@ void SoccerDemo::handleKick() { on_following_ball_ = false; restart_soccer_ = true; + tracking_status_ = BallTracker::NotFound; + ball_follower_.clearBallPosition(); return; } @@ -561,6 +567,8 @@ void SoccerDemo::handleKick() on_following_ball_ = false; restart_soccer_ = true; + tracking_status_ = BallTracker::NotFound; + ball_follower_.clearBallPosition(); usleep(2000 * 1000); @@ -653,4 +661,12 @@ bool SoccerDemo::isActionRunning() return false; } +void SoccerDemo::sendDebugTopic(const std::string &msgs) +{ + std_msgs::String debug_msg; + debug_msg.data = msgs; + + test_pub_.publish(debug_msg); +} + } From c9f9254e527fb477ef3a483e0758caf66dee058a Mon Sep 17 00:00:00 2001 From: Kayman Date: Mon, 15 Oct 2018 17:54:23 +0900 Subject: [PATCH 088/172] changed a method that judge the ball position. --- op3_demo/include/op3_demo/ball_follower.h | 4 +++- op3_demo/launch/demo.launch | 2 +- op3_demo/src/soccer/ball_follower.cpp | 18 +++++++++++++----- op3_demo/src/soccer/soccer_demo.cpp | 2 ++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index fbcc710..4e2c05f 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -20,6 +20,7 @@ #define BALL_FOLLOWER_H_ #include +#include #include #include #include @@ -104,7 +105,7 @@ class BallFollower ros::Publisher head_scan_pub_; ros::Publisher set_walking_command_pub_; ros::Publisher set_walking_param_pub_; - ; + ros::Publisher motion_index_pub_; ros::ServiceClient get_walking_param_client_; @@ -120,6 +121,7 @@ class BallFollower int count_not_found_; int count_to_kick_; int accum_ball_position_; + std::vector ball_position_queue_; bool on_tracking_; int approach_ball_position_; double current_pan_, current_tilt_; diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index d6d26b4..0bd83a9 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -1,5 +1,5 @@ - + diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index fa89672..0b0826a 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -60,7 +60,6 @@ BallFollower::BallFollower() "/robotis/walking/get_params"); prev_time_ = ros::Time::now(); - } BallFollower::~BallFollower() @@ -218,12 +217,21 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ ROS_INFO("In range [%d | %d]", count_to_kick_, accum_ball_position_); + // ball queue + if(ball_position_queue_.size() >= 5) + ball_position_queue_.erase(ball_position_queue_.begin()); + + ball_position_queue_.push_back((ball_x_angle > 0) ? 1 : -1); + + if (count_to_kick_ > 20) { setWalkingCommand("stop"); on_tracking_ = false; // check direction of the ball + accum_ball_position_ = std::accumulate(ball_position_queue_.begin(), ball_position_queue_.end(), 0); + if (accum_ball_position_ > 0) { ROS_INFO_COND(DEBUG_PRINT, "Ready to kick : left"); // left @@ -239,10 +247,10 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ } else if (count_to_kick_ > 15) { - if (ball_x_angle > 0) - accum_ball_position_ += 1; - else - accum_ball_position_ -= 1; +// if (ball_x_angle > 0) +// accum_ball_position_ += 1; +// else +// accum_ball_position_ -= 1; // send message setWalkingParam(IN_PLACE_FB_STEP, 0, 0); diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 42ed395..638cfdd 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -553,11 +553,13 @@ void SoccerDemo::handleKick() { case robotis_op::BallFollower::OnRight: std::cout << "Kick Motion [R]: " << ball_position << std::endl; + sendDebugTopic("Kick the ball using Right foot"); playMotion(is_grass_ ? RightKick + ForGrass : RightKick); break; case robotis_op::BallFollower::OnLeft: std::cout << "Kick Motion [L]: " << ball_position << std::endl; + sendDebugTopic("Kick the ball using Left foot"); playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); break; From a58bb9b30ea1a3012e1d18e8549f81bbe88d6606 Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 16 Oct 2018 10:18:49 +0900 Subject: [PATCH 089/172] added a ball decision part before kicking. --- op3_demo/include/op3_demo/ball_follower.h | 1 + op3_demo/src/soccer/ball_follower.cpp | 86 ++++++++++++++--------- op3_demo/src/soccer/soccer_demo.cpp | 1 + 3 files changed, 53 insertions(+), 35 deletions(-) diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 4e2c05f..90b56fc 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -53,6 +53,7 @@ class BallFollower ~BallFollower(); bool processFollowing(double x_angle, double y_angle, double ball_size); + void decideBallPositin(double x_angle, double y_angle); void waitFollowing(); void startFollowing(); void stopFollowing(); diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index 0b0826a..ae412d1 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -22,34 +22,34 @@ namespace robotis_op { BallFollower::BallFollower() - : nh_(ros::this_node::getName()), - FOV_WIDTH(35.2 * M_PI / 180), - FOV_HEIGHT(21.6 * M_PI / 180), - count_not_found_(0), - count_to_kick_(0), - on_tracking_(false), - approach_ball_position_(NotFound), - kick_motion_index_(83), - CAMERA_HEIGHT(0.46), - NOT_FOUND_THRESHOLD(50), - MAX_FB_STEP(40.0 * 0.001), - MAX_RL_TURN(15.0 * M_PI / 180), - IN_PLACE_FB_STEP(-3.0 * 0.001), - MIN_FB_STEP(5.0 * 0.001), - MIN_RL_TURN(5.0 * M_PI / 180), - UNIT_FB_STEP(1.0 * 0.001), - UNIT_RL_TURN(0.5 * M_PI / 180), - SPOT_FB_OFFSET(0.0 * 0.001), - SPOT_RL_OFFSET(0.0 * 0.001), - SPOT_ANGLE_OFFSET(0.0), - hip_pitch_offset_(7.0), - current_pan_(-10), - current_tilt_(-10), - current_x_move_(0.005), - current_r_angle_(0), - curr_period_time_(0.6), - accum_period_time_(0.0), - DEBUG_PRINT(false) + : nh_(ros::this_node::getName()), + FOV_WIDTH(35.2 * M_PI / 180), + FOV_HEIGHT(21.6 * M_PI / 180), + count_not_found_(0), + count_to_kick_(0), + on_tracking_(false), + approach_ball_position_(NotFound), + kick_motion_index_(83), + CAMERA_HEIGHT(0.46), + NOT_FOUND_THRESHOLD(50), + MAX_FB_STEP(40.0 * 0.001), + MAX_RL_TURN(15.0 * M_PI / 180), + IN_PLACE_FB_STEP(-3.0 * 0.001), + MIN_FB_STEP(5.0 * 0.001), + MIN_RL_TURN(5.0 * M_PI / 180), + UNIT_FB_STEP(1.0 * 0.001), + UNIT_RL_TURN(0.5 * M_PI / 180), + SPOT_FB_OFFSET(0.0 * 0.001), + SPOT_RL_OFFSET(0.0 * 0.001), + SPOT_ANGLE_OFFSET(0.0), + hip_pitch_offset_(7.0), + current_pan_(-10), + current_tilt_(-10), + current_x_move_(0.005), + current_r_angle_(0), + curr_period_time_(0.6), + accum_period_time_(0.0), + DEBUG_PRINT(false) { current_joint_states_sub_ = nh_.subscribe("/robotis/goal_joint_states", 10, &BallFollower::currentJointStatesCallback, this); @@ -57,7 +57,7 @@ BallFollower::BallFollower() set_walking_command_pub_ = nh_.advertise("/robotis/walking/command", 0); set_walking_param_pub_ = nh_.advertise("/robotis/walking/set_params", 0); get_walking_param_client_ = nh_.serviceClient( - "/robotis/walking/get_params"); + "/robotis/walking/get_params"); prev_time_ = ros::Time::now(); } @@ -90,7 +90,7 @@ void BallFollower::startFollowing() void BallFollower::stopFollowing() { on_tracking_ = false; -// approach_ball_position_ = NotFound; + // approach_ball_position_ = NotFound; count_to_kick_ = 0; accum_ball_position_ = 0; ROS_INFO("Stop Ball following"); @@ -230,7 +230,7 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ on_tracking_ = false; // check direction of the ball - accum_ball_position_ = std::accumulate(ball_position_queue_.begin(), ball_position_queue_.end(), 0); + accum_ball_position_ = std::accumulate(ball_position_queue_.begin(), ball_position_queue_.end(), 0); if (accum_ball_position_ > 0) { @@ -247,10 +247,10 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ } else if (count_to_kick_ > 15) { -// if (ball_x_angle > 0) -// accum_ball_position_ += 1; -// else -// accum_ball_position_ -= 1; + // if (ball_x_angle > 0) + // accum_ball_position_ += 1; + // else + // accum_ball_position_ -= 1; // send message setWalkingParam(IN_PLACE_FB_STEP, 0, 0); @@ -278,6 +278,22 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ return false; } +void BallFollower::decideBallPositin(double x_angle, double y_angle) +{ + // check of getting head joints angle + if (current_tilt_ == -10 && current_pan_ == -10) + { + return; + } + + double ball_x_angle = current_pan_ + x_angle; + + if (ball_x_angle > 0) + approach_ball_position_ = OnLeft; + else + approach_ball_position_ = OnRight; +} + void BallFollower::waitFollowing() { count_not_found_++; diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 638cfdd..6389e15 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -539,6 +539,7 @@ void SoccerDemo::handleKick() return; // kick motion + ball_follower_.decideBallPositin(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall()); int ball_position = ball_follower_.getBallPosition(); if(ball_position == BallFollower::NotFound || ball_position == BallFollower::OutOfRange) { From 61650f9e4181161ec398739c275ff339f00af76a Mon Sep 17 00:00:00 2001 From: Kayman Date: Tue, 16 Oct 2018 17:20:39 +0900 Subject: [PATCH 090/172] deleted an unused decision method of ball position. --- op3_demo/include/op3_demo/ball_follower.h | 2 -- op3_demo/src/soccer/ball_follower.cpp | 22 ++++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 90b56fc..232c6e7 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -121,8 +121,6 @@ class BallFollower int count_not_found_; int count_to_kick_; - int accum_ball_position_; - std::vector ball_position_queue_; bool on_tracking_; int approach_ball_position_; double current_pan_, current_tilt_; diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index ae412d1..fdd0d20 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -92,7 +92,7 @@ void BallFollower::stopFollowing() on_tracking_ = false; // approach_ball_position_ = NotFound; count_to_kick_ = 0; - accum_ball_position_ = 0; +// accum_ball_position_ = 0; ROS_INFO("Stop Ball following"); setWalkingCommand("stop"); @@ -172,7 +172,7 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ prev_time_ = curr_time; count_not_found_ = 0; - int ball_position_sum = 0; +// int ball_position_sum = 0; // check of getting head joints angle if (current_tilt_ == -10 && current_pan_ == -10) @@ -213,15 +213,15 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ "head pan : " << (current_pan_ * 180 / M_PI) << " | ball pan : " << (x_angle * 180 / M_PI)); ROS_INFO_STREAM_COND(DEBUG_PRINT, "head tilt : " << (current_tilt_ * 180 / M_PI) << " | ball tilt : " << (y_angle * 180 / M_PI)); - ROS_INFO_STREAM_COND(DEBUG_PRINT, "foot to kick : " << accum_ball_position_); + ROS_INFO_STREAM_COND(DEBUG_PRINT, "foot to kick : " << ball_x_angle); - ROS_INFO("In range [%d | %d]", count_to_kick_, accum_ball_position_); + ROS_INFO("In range [%d | %d]", count_to_kick_, ball_x_angle); // ball queue - if(ball_position_queue_.size() >= 5) - ball_position_queue_.erase(ball_position_queue_.begin()); +// if(ball_position_queue_.size() >= 5) +// ball_position_queue_.erase(ball_position_queue_.begin()); - ball_position_queue_.push_back((ball_x_angle > 0) ? 1 : -1); +// ball_position_queue_.push_back((ball_x_angle > 0) ? 1 : -1); if (count_to_kick_ > 20) @@ -230,9 +230,10 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ on_tracking_ = false; // check direction of the ball - accum_ball_position_ = std::accumulate(ball_position_queue_.begin(), ball_position_queue_.end(), 0); +// accum_ball_position_ = std::accumulate(ball_position_queue_.begin(), ball_position_queue_.end(), 0); - if (accum_ball_position_ > 0) +// if (accum_ball_position_ > 0) + if (ball_x_angle > 0) { ROS_INFO_COND(DEBUG_PRINT, "Ready to kick : left"); // left approach_ball_position_ = OnLeft; @@ -261,7 +262,7 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ else { count_to_kick_ = 0; - accum_ball_position_ = 0; +// accum_ball_position_ = NotFound; } double fb_move = 0.0, rl_angle = 0.0; @@ -283,6 +284,7 @@ void BallFollower::decideBallPositin(double x_angle, double y_angle) // check of getting head joints angle if (current_tilt_ == -10 && current_pan_ == -10) { + approach_ball_position_ = NotFound; return; } From e2bb17c306ce9feb0d651ecfbab5d1c4c0e5be56 Mon Sep 17 00:00:00 2001 From: Kayman Date: Wed, 17 Oct 2018 14:11:59 +0900 Subject: [PATCH 091/172] changed file permission --- op3_ball_detector/cfg/DetectorParams.cfg | 0 op3_ball_detector/cfg/DetectorParamsBlue.cfg | 0 op3_ball_detector/cfg/DetectorParamsRed.cfg | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 op3_ball_detector/cfg/DetectorParams.cfg mode change 100644 => 100755 op3_ball_detector/cfg/DetectorParamsBlue.cfg mode change 100644 => 100755 op3_ball_detector/cfg/DetectorParamsRed.cfg diff --git a/op3_ball_detector/cfg/DetectorParams.cfg b/op3_ball_detector/cfg/DetectorParams.cfg old mode 100644 new mode 100755 diff --git a/op3_ball_detector/cfg/DetectorParamsBlue.cfg b/op3_ball_detector/cfg/DetectorParamsBlue.cfg old mode 100644 new mode 100755 diff --git a/op3_ball_detector/cfg/DetectorParamsRed.cfg b/op3_ball_detector/cfg/DetectorParamsRed.cfg old mode 100644 new mode 100755 From 3dff932710cef856b448558a4fe2d968887a835b Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Fri, 6 May 2022 15:10:00 -0400 Subject: [PATCH 092/172] noetic build --- .../include/op3_ball_detector/ball_detector.h | 117 ++-- .../op3_ball_detector/ball_detector_config.h | 99 ++- op3_ball_detector/launch/ball_detector.launch | 9 +- .../launch/ball_detector_from_uvc.launch | 57 +- op3_ball_detector/package.xml | 62 +- op3_ball_detector/src/ball_detector.cpp | 651 ++++++++++-------- op3_ball_detector/src/ball_detector_node.cpp | 57 +- op3_bringup/CHANGELOG.rst | 5 + op3_bringup/CMakeLists.txt | 9 +- op3_bringup/launch/op3_bringup.launch | 8 +- .../launch/op3_bringup_visualization.launch | 8 +- op3_bringup/package.xml | 24 +- op3_demo/CHANGELOG.rst | 5 + op3_demo/CMakeLists.txt | 64 +- op3_demo/include/op3_demo/action_demo.h | 55 +- op3_demo/include/op3_demo/ball_follower.h | 87 ++- op3_demo/include/op3_demo/ball_tracker.h | 74 +- op3_demo/include/op3_demo/button_test.h | 46 +- op3_demo/include/op3_demo/face_tracker.h | 72 +- op3_demo/include/op3_demo/mic_test.h | 51 +- op3_demo/include/op3_demo/op_demo.h | 57 +- op3_demo/include/op3_demo/soccer_demo.h | 70 +- op3_demo/include/op3_demo/vision_demo.h | 54 +- op3_demo/launch/demo.launch | 45 +- op3_demo/launch/face_detection_op3.launch | 18 +- op3_demo/launch/self_test.launch | 17 +- op3_demo/list/action_script.yaml | 2 +- op3_demo/list/action_script_bk.yaml | 2 +- op3_demo/package.xml | 78 ++- op3_demo/src/action/action_demo.cpp | 345 ++++------ op3_demo/src/demo_node.cpp | 294 ++++---- op3_demo/src/soccer/ball_follower.cpp | 251 +++---- op3_demo/src/soccer/ball_tracker.cpp | 201 +++--- op3_demo/src/soccer/soccer_demo.cpp | 354 ++++------ op3_demo/src/test/button_test.cpp | 127 ++-- op3_demo/src/test/mic_test.cpp | 229 +++--- op3_demo/src/test_node.cpp | 365 +++++----- op3_demo/src/vision/face_tracker.cpp | 141 ++-- op3_demo/src/vision/vision_demo.cpp | 174 ++--- op3_read_write_demo/CHANGELOG.rst | 8 + op3_read_write_demo/CMakeLists.txt | 36 +- .../launch/op3_read_write.launch | 32 +- op3_read_write_demo/package.xml | 29 +- op3_read_write_demo/src/read_write.cpp | 171 ++--- robotis_op3_demo/CHANGELOG.rst | 5 + robotis_op3_demo/CMakeLists.txt | 2 +- robotis_op3_demo/package.xml | 20 +- 47 files changed, 2233 insertions(+), 2454 deletions(-) create mode 100644 op3_read_write_demo/CHANGELOG.rst diff --git a/op3_ball_detector/include/op3_ball_detector/ball_detector.h b/op3_ball_detector/include/op3_ball_detector/ball_detector.h index c429222..c6b4833 100644 --- a/op3_ball_detector/include/op3_ball_detector/ball_detector.h +++ b/op3_ball_detector/include/op3_ball_detector/ball_detector.h @@ -1,18 +1,18 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ @@ -21,88 +21,91 @@ #include -#include +#include +#include +#include #include -#include -#include +#include #include #include -#include -#include -#include +#include +#include +#include #include #include -#include #include #include "op3_ball_detector/ball_detector_config.h" -#include "op3_ball_detector/DetectorParamsConfig.h" #include "op3_ball_detector/CircleSetStamped.h" +#include "op3_ball_detector/DetectorParamsConfig.h" #include "op3_ball_detector/GetParameters.h" #include "op3_ball_detector/SetParameters.h" -namespace robotis_op -{ +namespace robotis_op { -class BallDetector -{ - public: +class BallDetector { +public: BallDetector(); ~BallDetector(); - //checks if a new image has been received + // checks if a new image has been received bool newImage(); - //execute circle detection with the cureent image + // execute circle detection with the cureent image void process(); - //publish the output image (input image + marked circles) + // publish the output image (input image + marked circles) void publishImage(); - //publish the circle set data + // publish the circle set data void publishCircles(); - protected: +protected: const static int NOT_FOUND_TH = 30; - //callbacks to image subscription - void imageCallback(const sensor_msgs::ImageConstPtr & msg); + // callbacks to image subscription + void imageCallback(const sensor_msgs::ImageConstPtr &msg); - //callbacks to camera info subscription - void cameraInfoCallback(const sensor_msgs::CameraInfo & msg); + // callbacks to camera info subscription + void cameraInfoCallback(const sensor_msgs::CameraInfo &msg); - void dynParamCallback(op3_ball_detector::DetectorParamsConfig &config, uint32_t level); + void dynParamCallback(op3_ball_detector::DetectorParamsConfig &config, + uint32_t level); void enableCallback(const std_msgs::Bool::ConstPtr &msg); void paramCommandCallback(const std_msgs::String::ConstPtr &msg); - bool setParamCallback(op3_ball_detector::SetParameters::Request &req, op3_ball_detector::SetParameters::Response &res); - bool getParamCallback(op3_ball_detector::GetParameters::Request &req, op3_ball_detector::GetParameters::Response &res); + bool setParamCallback(op3_ball_detector::SetParameters::Request &req, + op3_ball_detector::SetParameters::Response &res); + bool getParamCallback(op3_ball_detector::GetParameters::Request &req, + op3_ball_detector::GetParameters::Response &res); void resetParameter(); void publishParam(); void printConfig(); void saveConfig(); - void setInputImage(const cv::Mat & inIm); - void setInputImage(const cv::Mat & inIm, cv::Mat &in_filter_img); - void getOutputImage(cv::Mat & outIm); + void setInputImage(const cv::Mat &inIm); + void setInputImage(const cv::Mat &inIm, cv::Mat &in_filter_img); + void getOutputImage(cv::Mat &outIm); void filterImage(); void filterImage(const cv::Mat &in_filter_img, cv::Mat &out_filter_img); void makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, int range); void makeFilterMaskFromBall(const cv::Mat &source_img, cv::Mat &mask_img); - void inRangeHsv(const cv::Mat &input_img, const HsvFilter &filter_value, cv::Mat &output_img); - void mophology(const cv::Mat &intput_img, cv::Mat &output_img, int ellipse_size); + void inRangeHsv(const cv::Mat &input_img, const HsvFilter &filter_value, + cv::Mat &output_img); + void mophology(const cv::Mat &intput_img, cv::Mat &output_img, + int ellipse_size); void houghDetection(const unsigned int imgEncoding); void houghDetection2(const cv::Mat &input_hough); void drawOutputImage(); - //ros node handle + // ros node handle ros::NodeHandle nh_; ros::Subscriber enable_sub_; - //image publisher/subscriber + // image publisher/subscriber image_transport::ImageTransport it_; image_transport::Publisher image_pub_; cv_bridge::CvImage cv_img_pub_; @@ -113,16 +116,16 @@ class BallDetector bool init_param_; int not_found_count_; - //circle set publisher + // circle set publisher op3_ball_detector::CircleSetStamped circles_msg_; ros::Publisher circles_pub_; - //camera info subscriber + // camera info subscriber sensor_msgs::CameraInfo camera_info_msg_; ros::Subscriber camera_info_sub_; ros::Publisher camera_info_pub_; - //dynamic reconfigure + // dynamic reconfigure DetectorConfig params_config_; std::string param_path_; bool has_path_; @@ -134,14 +137,14 @@ class BallDetector ros::ServiceServer get_param_client_; ros::ServiceServer set_param_client_; - //flag indicating a new image has been received + // flag indicating a new image has been received bool new_image_flag_; - //image time stamp and frame id + // image time stamp and frame id ros::Time sub_time_; std::string image_frame_id_; - //img encoding id + // img encoding id unsigned int img_encoding_; /** \brief Set of detected circles @@ -156,9 +159,11 @@ class BallDetector cv::Mat in_image_; cv::Mat out_image_; - dynamic_reconfigure::Server param_server_; - dynamic_reconfigure::Server::CallbackType callback_fnc_; + dynamic_reconfigure::Server + param_server_; + dynamic_reconfigure::Server< + op3_ball_detector::DetectorParamsConfig>::CallbackType callback_fnc_; }; -} // namespace robotis_op -#endif // _BALL_DETECTOR_H_ +} // namespace robotis_op +#endif // _BALL_DETECTOR_H_ diff --git a/op3_ball_detector/include/op3_ball_detector/ball_detector_config.h b/op3_ball_detector/include/op3_ball_detector/ball_detector_config.h index 6062145..a69be5d 100644 --- a/op3_ball_detector/include/op3_ball_detector/ball_detector_config.h +++ b/op3_ball_detector/include/op3_ball_detector/ball_detector_config.h @@ -1,28 +1,27 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #ifndef _DETECTOR_CONFIG_H_ #define _DETECTOR_CONFIG_H_ -namespace robotis_op -{ +namespace robotis_op { -//constants +// constants const int GAUSSIAN_BLUR_SIZE_DEFAULT = 7; const double GAUSSIAN_BLUR_SIGMA_DEFAULT = 2; const double CANNY_EDGE_TH_DEFAULT = 130; @@ -43,18 +42,12 @@ const int FILTER_V_MIN_DEFAULT = 0; const int FILTER_V_MAX_DEFAULT = 255; const int ELLIPSE_SIZE = 5; -class HsvFilter -{ - public: +class HsvFilter { +public: HsvFilter() - : h_min(FILTER_H_MIN_DEFAULT), - h_max(FILTER_H_MAX_DEFAULT), - s_min(FILTER_S_MIN_DEFAULT), - s_max(FILTER_S_MAX_DEFAULT), - v_min(FILTER_V_MIN_DEFAULT), - v_max(FILTER_V_MAX_DEFAULT) - { - } + : h_min(FILTER_H_MIN_DEFAULT), h_max(FILTER_H_MAX_DEFAULT), + s_min(FILTER_S_MIN_DEFAULT), s_max(FILTER_S_MAX_DEFAULT), + v_min(FILTER_V_MIN_DEFAULT), v_max(FILTER_V_MAX_DEFAULT) {} int h_min; int h_max; @@ -64,42 +57,34 @@ class HsvFilter int v_max; }; -class DetectorConfig -{ - public: - int gaussian_blur_size; // size of gaussian blur kernel mask [pixel] - double gaussian_blur_sigma; // sigma of gaussian blur kernel mask [pixel] - double canny_edge_th; // threshold of the edge detector. - double hough_accum_resolution; // resolution of the Hough accumulator, in terms of inverse ratio of image resolution - double min_circle_dist; // Minimum distance between circles - double hough_accum_th; // accumulator threshold to decide circle detection - int min_radius; // minimum circle radius allowed - int max_radius; // maximum circle radius allowed - HsvFilter filter_threshold; // filter threshold +class DetectorConfig { +public: + int gaussian_blur_size; // size of gaussian blur kernel mask [pixel] + double gaussian_blur_sigma; // sigma of gaussian blur kernel mask [pixel] + double canny_edge_th; // threshold of the edge detector. + double hough_accum_resolution; // resolution of the Hough accumulator, in + // terms of inverse ratio of image resolution + double min_circle_dist; // Minimum distance between circles + double hough_accum_th; // accumulator threshold to decide circle detection + int min_radius; // minimum circle radius allowed + int max_radius; // maximum circle radius allowed + HsvFilter filter_threshold; // filter threshold bool use_second_filter; - HsvFilter filter2_threshold; // filter threshold + HsvFilter filter2_threshold; // filter threshold int ellipse_size; - bool debug; // to debug log + bool debug; // to debug log DetectorConfig() : canny_edge_th(CANNY_EDGE_TH_DEFAULT), hough_accum_resolution(HOUGH_ACCUM_RESOLUTION_DEFAULT), min_circle_dist(MIN_CIRCLE_DIST_DEFAULT), - hough_accum_th(HOUGH_ACCUM_TH_DEFAULT), - min_radius(MIN_RADIUS_DEFAULT), - max_radius(MAX_RADIUS_DEFAULT), - filter_threshold(), - use_second_filter(false), - filter2_threshold(), - ellipse_size(ELLIPSE_SIZE), - debug(false) - { - } + hough_accum_th(HOUGH_ACCUM_TH_DEFAULT), min_radius(MIN_RADIUS_DEFAULT), + max_radius(MAX_RADIUS_DEFAULT), filter_threshold(), + use_second_filter(false), filter2_threshold(), + ellipse_size(ELLIPSE_SIZE), debug(false) {} - ~DetectorConfig() - { - } + ~DetectorConfig() {} }; -} -#endif // _DETECTOR_CONFIG_H_ +} // namespace robotis_op +#endif // _DETECTOR_CONFIG_H_ diff --git a/op3_ball_detector/launch/ball_detector.launch b/op3_ball_detector/launch/ball_detector.launch index 35f57d9..475eb62 100644 --- a/op3_ball_detector/launch/ball_detector.launch +++ b/op3_ball_detector/launch/ball_detector.launch @@ -1,13 +1,12 @@ - - + + - - + + - diff --git a/op3_ball_detector/launch/ball_detector_from_uvc.launch b/op3_ball_detector/launch/ball_detector_from_uvc.launch index 636caaa..f0ee90c 100644 --- a/op3_ball_detector/launch/ball_detector_from_uvc.launch +++ b/op3_ball_detector/launch/ball_detector_from_uvc.launch @@ -1,30 +1,29 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/op3_ball_detector/package.xml b/op3_ball_detector/package.xml index d507794..3632328 100644 --- a/op3_ball_detector/package.xml +++ b/op3_ball_detector/package.xml @@ -10,26 +10,64 @@ Apache 2.0 Kayman Zerom - Pyo + Ronaldson Bellande + http://wiki.ros.org/op3_ball_detector http://emanual.robotis.com/docs/en/platform/op3/introduction/ https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues + catkin - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp message_generation + message_runtime + message_runtime + usb_cam + uvc_camera + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation message_runtime + message_runtime + usb_cam + uvc_camera + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime message_runtime usb_cam uvc_camera + diff --git a/op3_ball_detector/src/ball_detector.cpp b/op3_ball_detector/src/ball_detector.cpp index 871a1e8..9659133 100644 --- a/op3_ball_detector/src/ball_detector.cpp +++ b/op3_ball_detector/src/ball_detector.cpp @@ -1,18 +1,18 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ @@ -20,66 +20,84 @@ #include "op3_ball_detector/ball_detector.h" -namespace robotis_op -{ +namespace robotis_op { BallDetector::BallDetector() - : nh_(ros::this_node::getName()), - it_(this->nh_), - enable_(true), - params_config_(), - init_param_(false), - not_found_count_(0) -{ + : nh_(ros::this_node::getName()), it_(this->nh_), enable_(true), + params_config_(), init_param_(false), not_found_count_(0) { has_path_ = nh_.getParam("yaml_path", param_path_); if (has_path_) std::cout << "Path : " << param_path_ << std::endl; - //detector config struct + // detector config struct DetectorConfig detect_config; - //get user parameters from dynamic reconfigure (yaml entries) - nh_.param("gaussian_blur_size", detect_config.gaussian_blur_size, params_config_.gaussian_blur_size); + // get user parameters from dynamic reconfigure (yaml entries) + nh_.param("gaussian_blur_size", detect_config.gaussian_blur_size, + params_config_.gaussian_blur_size); if (detect_config.gaussian_blur_size % 2 == 0) detect_config.gaussian_blur_size -= 1; if (detect_config.gaussian_blur_size <= 0) detect_config.gaussian_blur_size = 1; - nh_.param("gaussian_blur_sigma", detect_config.gaussian_blur_sigma, params_config_.gaussian_blur_sigma); - nh_.param("canny_edge_th", detect_config.canny_edge_th, params_config_.canny_edge_th); - nh_.param("hough_accum_resolution", detect_config.hough_accum_resolution, + nh_.param("gaussian_blur_sigma", detect_config.gaussian_blur_sigma, + params_config_.gaussian_blur_sigma); + nh_.param("canny_edge_th", detect_config.canny_edge_th, + params_config_.canny_edge_th); + nh_.param("hough_accum_resolution", + detect_config.hough_accum_resolution, params_config_.hough_accum_resolution); - nh_.param("min_circle_dist", detect_config.min_circle_dist, params_config_.min_circle_dist); - nh_.param("hough_accum_th", detect_config.hough_accum_th, params_config_.hough_accum_th); - nh_.param("min_radius", detect_config.min_radius, params_config_.min_radius); - nh_.param("max_radius", detect_config.max_radius, params_config_.max_radius); - nh_.param("filter_h_min", detect_config.filter_threshold.h_min, params_config_.filter_threshold.h_min); - nh_.param("filter_h_max", detect_config.filter_threshold.h_max, params_config_.filter_threshold.h_max); - nh_.param("filter_s_min", detect_config.filter_threshold.s_min, params_config_.filter_threshold.s_min); - nh_.param("filter_s_max", detect_config.filter_threshold.s_max, params_config_.filter_threshold.s_max); - nh_.param("filter_v_min", detect_config.filter_threshold.v_min, params_config_.filter_threshold.v_min); - nh_.param("filter_v_max", detect_config.filter_threshold.v_max, params_config_.filter_threshold.v_max); - nh_.param("use_second_filter", detect_config.use_second_filter, params_config_.use_second_filter); - nh_.param("filter2_h_min", detect_config.filter2_threshold.h_min, params_config_.filter2_threshold.h_min); - nh_.param("filter2_h_max", detect_config.filter2_threshold.h_max, params_config_.filter2_threshold.h_max); - nh_.param("filter2_s_min", detect_config.filter2_threshold.s_min, params_config_.filter2_threshold.s_min); - nh_.param("filter2_s_max", detect_config.filter2_threshold.s_max, params_config_.filter2_threshold.s_max); - nh_.param("filter2_v_min", detect_config.filter2_threshold.v_min, params_config_.filter2_threshold.v_min); - nh_.param("filter2_v_max", detect_config.filter2_threshold.v_max, params_config_.filter2_threshold.v_max); - nh_.param("ellipse_size", detect_config.ellipse_size, params_config_.ellipse_size); + nh_.param("min_circle_dist", detect_config.min_circle_dist, + params_config_.min_circle_dist); + nh_.param("hough_accum_th", detect_config.hough_accum_th, + params_config_.hough_accum_th); + nh_.param("min_radius", detect_config.min_radius, + params_config_.min_radius); + nh_.param("max_radius", detect_config.max_radius, + params_config_.max_radius); + nh_.param("filter_h_min", detect_config.filter_threshold.h_min, + params_config_.filter_threshold.h_min); + nh_.param("filter_h_max", detect_config.filter_threshold.h_max, + params_config_.filter_threshold.h_max); + nh_.param("filter_s_min", detect_config.filter_threshold.s_min, + params_config_.filter_threshold.s_min); + nh_.param("filter_s_max", detect_config.filter_threshold.s_max, + params_config_.filter_threshold.s_max); + nh_.param("filter_v_min", detect_config.filter_threshold.v_min, + params_config_.filter_threshold.v_min); + nh_.param("filter_v_max", detect_config.filter_threshold.v_max, + params_config_.filter_threshold.v_max); + nh_.param("use_second_filter", detect_config.use_second_filter, + params_config_.use_second_filter); + nh_.param("filter2_h_min", detect_config.filter2_threshold.h_min, + params_config_.filter2_threshold.h_min); + nh_.param("filter2_h_max", detect_config.filter2_threshold.h_max, + params_config_.filter2_threshold.h_max); + nh_.param("filter2_s_min", detect_config.filter2_threshold.s_min, + params_config_.filter2_threshold.s_min); + nh_.param("filter2_s_max", detect_config.filter2_threshold.s_max, + params_config_.filter2_threshold.s_max); + nh_.param("filter2_v_min", detect_config.filter2_threshold.v_min, + params_config_.filter2_threshold.v_min); + nh_.param("filter2_v_max", detect_config.filter2_threshold.v_max, + params_config_.filter2_threshold.v_max); + nh_.param("ellipse_size", detect_config.ellipse_size, + params_config_.ellipse_size); nh_.param("filter_debug", detect_config.debug, params_config_.debug); - //sets publishers + // sets publishers image_pub_ = it_.advertise("image_out", 100); - circles_pub_ = nh_.advertise("circle_set", 100); + circles_pub_ = + nh_.advertise("circle_set", 100); camera_info_pub_ = nh_.advertise("camera_info", 100); - //sets subscribers + // sets subscribers enable_sub_ = nh_.subscribe("enable", 1, &BallDetector::enableCallback, this); image_sub_ = it_.subscribe("image_in", 1, &BallDetector::imageCallback, this); - camera_info_sub_ = nh_.subscribe("cameraInfo_in", 100, &BallDetector::cameraInfoCallback, this); + camera_info_sub_ = nh_.subscribe("cameraInfo_in", 100, + &BallDetector::cameraInfoCallback, this); - //initializes newImageFlag + // initializes newImageFlag new_image_flag_ = false; // dynamic_reconfigure @@ -87,43 +105,39 @@ BallDetector::BallDetector() param_server_.setCallback(callback_fnc_); // web setting - param_pub_ = nh_.advertise("current_params", 1); - param_command_sub_ = nh_.subscribe("param_command", 1, &BallDetector::paramCommandCallback, this); - set_param_client_ = nh_.advertiseService("set_param", &BallDetector::setParamCallback, this); - get_param_client_ = nh_.advertiseService("get_param", &BallDetector::getParamCallback, this); - default_setting_path_ = ros::package::getPath(ROS_PACKAGE_NAME) + "/config/ball_detector_params_default.yaml"; + param_pub_ = + nh_.advertise("current_params", 1); + param_command_sub_ = nh_.subscribe("param_command", 1, + &BallDetector::paramCommandCallback, this); + set_param_client_ = + nh_.advertiseService("set_param", &BallDetector::setParamCallback, this); + get_param_client_ = + nh_.advertiseService("get_param", &BallDetector::getParamCallback, this); + default_setting_path_ = ros::package::getPath(ROS_PACKAGE_NAME) + + "/config/ball_detector_params_default.yaml"; - //sets config and prints it + // sets config and prints it params_config_ = detect_config; init_param_ = true; printConfig(); } -BallDetector::~BallDetector() -{ +BallDetector::~BallDetector() {} -} - -bool BallDetector::newImage() -{ - if (new_image_flag_) - { +bool BallDetector::newImage() { + if (new_image_flag_) { new_image_flag_ = false; return true; - } - else - { + } else { return false; } } -void BallDetector::process() -{ +void BallDetector::process() { if (enable_ == false) return; - if (cv_img_ptr_sub_ != NULL) - { + if (cv_img_ptr_sub_ != NULL) { cv::Mat img_hsv, img_filtered; // set input image @@ -132,31 +146,29 @@ void BallDetector::process() // image filtering filterImage(img_hsv, img_filtered); - //detect circles + // detect circles houghDetection2(img_filtered); -// // set input image -// setInputImage(cv_img_ptr_sub_->image); + // // set input image + // setInputImage(cv_img_ptr_sub_->image); -// // image filtering -// filterImage(); + // // image filtering + // filterImage(); -// //detect circles -// houghDetection(this->img_encoding_); + // //detect circles + // houghDetection(this->img_encoding_); } } -void BallDetector::publishImage() -{ +void BallDetector::publishImage() { if (enable_ == false) return; - //image_raw topic + // image_raw topic cv_img_pub_.header.seq++; cv_img_pub_.header.stamp = sub_time_; cv_img_pub_.header.frame_id = image_frame_id_; - switch (img_encoding_) - { + switch (img_encoding_) { case IMG_RGB8: cv_img_pub_.encoding = sensor_msgs::image_encodings::RGB8; break; @@ -172,69 +184,66 @@ void BallDetector::publishImage() camera_info_pub_.publish(camera_info_msg_); } -void BallDetector::publishCircles() -{ +void BallDetector::publishCircles() { if (enable_ == false) return; if (circles_.size() == 0) return; - //clears and resize the message + // clears and resize the message circles_msg_.circles.clear(); circles_msg_.circles.resize(circles_.size()); - //fill header + // fill header circles_msg_.header.seq++; circles_msg_.header.stamp = sub_time_; - circles_msg_.header.frame_id = "detector"; //To do: get frame_id from input image + circles_msg_.header.frame_id = + "detector"; // To do: get frame_id from input image - //fill circle data - // top(-1), bottom(+1) - // left(-1), right(+1) - for (int idx = 0; idx < circles_.size(); idx++) - { - circles_msg_.circles[idx].x = circles_[idx][0] / out_image_.cols * 2 - 1; // x (-1 ~ 1) - circles_msg_.circles[idx].y = circles_[idx][1] / out_image_.rows * 2 - 1; // y (-1 ~ 1) - circles_msg_.circles[idx].z = circles_[idx][2]; // radius + // fill circle data + // top(-1), bottom(+1) + // left(-1), right(+1) + for (int idx = 0; idx < circles_.size(); idx++) { + circles_msg_.circles[idx].x = + circles_[idx][0] / out_image_.cols * 2 - 1; // x (-1 ~ 1) + circles_msg_.circles[idx].y = + circles_[idx][1] / out_image_.rows * 2 - 1; // y (-1 ~ 1) + circles_msg_.circles[idx].z = circles_[idx][2]; // radius } - //publish message + // publish message circles_pub_.publish(circles_msg_); } -void BallDetector::enableCallback(const std_msgs::Bool::ConstPtr &msg) -{ +void BallDetector::enableCallback(const std_msgs::Bool::ConstPtr &msg) { enable_ = msg->data; } -void BallDetector::imageCallback(const sensor_msgs::ImageConstPtr & msg) -{ +void BallDetector::imageCallback(const sensor_msgs::ImageConstPtr &msg) { if (enable_ == false) return; - try - { + try { if (msg->encoding.compare(sensor_msgs::image_encodings::MONO8) == 0) this->img_encoding_ = IMG_MONO; if (msg->encoding.compare(sensor_msgs::image_encodings::RGB8) == 0) this->img_encoding_ = IMG_RGB8; this->cv_img_ptr_sub_ = cv_bridge::toCvCopy(msg, msg->encoding); - } catch (cv_bridge::Exception& e) - { + } catch (cv_bridge::Exception &e) { ROS_ERROR("cv_bridge exception: %s", e.what()); return; } - //indicates a new image is available + // indicates a new image is available this->sub_time_ = msg->header.stamp; this->image_frame_id_ = msg->header.frame_id; this->new_image_flag_ = true; return; } -void BallDetector::dynParamCallback(op3_ball_detector::DetectorParamsConfig &config, uint32_t level) -{ +void BallDetector::dynParamCallback( + op3_ball_detector::DetectorParamsConfig &config, uint32_t level) { params_config_.gaussian_blur_size = config.gaussian_blur_size; params_config_.gaussian_blur_sigma = config.gaussian_blur_sigma; params_config_.canny_edge_th = config.canny_edge_th; @@ -269,35 +278,29 @@ void BallDetector::dynParamCallback(op3_ball_detector::DetectorParamsConfig &con saveConfig(); } -void BallDetector::cameraInfoCallback(const sensor_msgs::CameraInfo & msg) -{ +void BallDetector::cameraInfoCallback(const sensor_msgs::CameraInfo &msg) { if (enable_ == false) return; camera_info_msg_ = msg; } -void BallDetector::paramCommandCallback(const std_msgs::String::ConstPtr &msg) -{ - if(msg->data == "debug") - { +void BallDetector::paramCommandCallback(const std_msgs::String::ConstPtr &msg) { + if (msg->data == "debug") { params_config_.debug = true; saveConfig(); - } - else if(msg->data == "normal") - { + } else if (msg->data == "normal") { params_config_.debug = false; saveConfig(); - } - else if(msg->data == "reset") - { + } else if (msg->data == "reset") { // load default parameters and apply resetParameter(); } } -bool BallDetector::setParamCallback(op3_ball_detector::SetParameters::Request &req, op3_ball_detector::SetParameters::Response &res) -{ +bool BallDetector::setParamCallback( + op3_ball_detector::SetParameters::Request &req, + op3_ball_detector::SetParameters::Response &res) { params_config_.gaussian_blur_size = req.params.gaussian_blur_size; params_config_.gaussian_blur_sigma = req.params.gaussian_blur_sigma; params_config_.canny_edge_th = req.params.canny_edge_th; @@ -321,8 +324,9 @@ bool BallDetector::setParamCallback(op3_ball_detector::SetParameters::Request &r return true; } -bool BallDetector:: getParamCallback(op3_ball_detector::GetParameters::Request &req, op3_ball_detector::GetParameters::Response &res) -{ +bool BallDetector::getParamCallback( + op3_ball_detector::GetParameters::Request &req, + op3_ball_detector::GetParameters::Response &res) { res.returns.gaussian_blur_size = params_config_.gaussian_blur_size; res.returns.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; res.returns.canny_edge_th = params_config_.canny_edge_th; @@ -342,21 +346,21 @@ bool BallDetector:: getParamCallback(op3_ball_detector::GetParameters::Request & return true; } -void BallDetector::resetParameter() -{ +void BallDetector::resetParameter() { YAML::Node doc; - try - { + try { // load yaml doc = YAML::LoadFile(default_setting_path_.c_str()); // parse params_config_.gaussian_blur_size = doc["gaussian_blur_size"].as(); - params_config_.gaussian_blur_sigma = doc["gaussian_blur_sigma"].as(); + params_config_.gaussian_blur_sigma = + doc["gaussian_blur_sigma"].as(); params_config_.canny_edge_th = doc["canny_edge_th"].as(); - params_config_.hough_accum_resolution = doc["hough_accum_resolution"].as(); + params_config_.hough_accum_resolution = + doc["hough_accum_resolution"].as(); params_config_.min_circle_dist = doc["min_circle_dist"].as(); params_config_.hough_accum_th = doc["hough_accum_th"].as(); params_config_.min_radius = doc["min_radius"].as(); @@ -387,15 +391,14 @@ void BallDetector::resetParameter() saveConfig(); publishParam(); - } catch (const std::exception& e) - { - ROS_ERROR_STREAM("Failed to Get default parameters : " << default_setting_path_); + } catch (const std::exception &e) { + ROS_ERROR_STREAM( + "Failed to Get default parameters : " << default_setting_path_); return; } } -void BallDetector::publishParam() -{ +void BallDetector::publishParam() { op3_ball_detector::BallDetectorParams params; params.gaussian_blur_size = params_config_.gaussian_blur_size; @@ -417,66 +420,110 @@ void BallDetector::publishParam() param_pub_.publish(params); } -void BallDetector::printConfig() -{ +void BallDetector::printConfig() { if (init_param_ == false) return; - std::cout << "Detetctor Configuration:" << std::endl << " gaussian_blur_size: " - << params_config_.gaussian_blur_size << std::endl << " gaussian_blur_sigma: " - << params_config_.gaussian_blur_sigma << std::endl << " canny_edge_th: " << params_config_.canny_edge_th - << std::endl << " hough_accum_resolution: " << params_config_.hough_accum_resolution << std::endl - << " min_circle_dist: " << params_config_.min_circle_dist << std::endl << " hough_accum_th: " - << params_config_.hough_accum_th << std::endl << " min_radius: " << params_config_.min_radius - << std::endl << " max_radius: " << params_config_.max_radius << std::endl << " filter_h_min: " - << params_config_.filter_threshold.h_min << std::endl << " filter_h_max: " - << params_config_.filter_threshold.h_max << std::endl << " filter_s_min: " - << params_config_.filter_threshold.s_min << std::endl << " filter_s_max: " - << params_config_.filter_threshold.s_max << std::endl << " filter_v_min: " - << params_config_.filter_threshold.v_min << std::endl << " filter_v_max: " - << params_config_.filter_threshold.v_max << std::endl << " use_second_filter: " - << params_config_.use_second_filter << std::endl << " filter2_h_min: " - << params_config_.filter2_threshold.h_min << std::endl << " filter2_h_max: " - << params_config_.filter2_threshold.h_max << std::endl << " filter2_s_min: " - << params_config_.filter2_threshold.s_min << std::endl << " filter2_s_max: " - << params_config_.filter2_threshold.s_max << std::endl << " filter2_v_min: " - << params_config_.filter2_threshold.v_min << std::endl << " filter2_v_max: " - << params_config_.filter2_threshold.v_max << std::endl << " ellipse_size: " - << params_config_.ellipse_size << std::endl << " filter_image_to_debug: " << params_config_.debug - << std::endl << std::endl; + std::cout << "Detetctor Configuration:" << std::endl + << " gaussian_blur_size: " << params_config_.gaussian_blur_size + << std::endl + << " gaussian_blur_sigma: " << params_config_.gaussian_blur_sigma + << std::endl + << " canny_edge_th: " << params_config_.canny_edge_th + << std::endl + << " hough_accum_resolution: " + << params_config_.hough_accum_resolution << std::endl + << " min_circle_dist: " << params_config_.min_circle_dist + << std::endl + << " hough_accum_th: " << params_config_.hough_accum_th + << std::endl + << " min_radius: " << params_config_.min_radius << std::endl + << " max_radius: " << params_config_.max_radius << std::endl + << " filter_h_min: " << params_config_.filter_threshold.h_min + << std::endl + << " filter_h_max: " << params_config_.filter_threshold.h_max + << std::endl + << " filter_s_min: " << params_config_.filter_threshold.s_min + << std::endl + << " filter_s_max: " << params_config_.filter_threshold.s_max + << std::endl + << " filter_v_min: " << params_config_.filter_threshold.v_min + << std::endl + << " filter_v_max: " << params_config_.filter_threshold.v_max + << std::endl + << " use_second_filter: " << params_config_.use_second_filter + << std::endl + << " filter2_h_min: " << params_config_.filter2_threshold.h_min + << std::endl + << " filter2_h_max: " << params_config_.filter2_threshold.h_max + << std::endl + << " filter2_s_min: " << params_config_.filter2_threshold.s_min + << std::endl + << " filter2_s_max: " << params_config_.filter2_threshold.s_max + << std::endl + << " filter2_v_min: " << params_config_.filter2_threshold.v_min + << std::endl + << " filter2_v_max: " << params_config_.filter2_threshold.v_max + << std::endl + << " ellipse_size: " << params_config_.ellipse_size << std::endl + << " filter_image_to_debug: " << params_config_.debug + << std::endl + << std::endl; } -void BallDetector::saveConfig() -{ +void BallDetector::saveConfig() { if (has_path_ == false) return; YAML::Emitter yaml_out; yaml_out << YAML::BeginMap; - yaml_out << YAML::Key << "gaussian_blur_size" << YAML::Value << params_config_.gaussian_blur_size; - yaml_out << YAML::Key << "gaussian_blur_sigma" << YAML::Value << params_config_.gaussian_blur_sigma; - yaml_out << YAML::Key << "canny_edge_th" << YAML::Value << params_config_.canny_edge_th; - yaml_out << YAML::Key << "hough_accum_resolution" << YAML::Value << params_config_.hough_accum_resolution; - yaml_out << YAML::Key << "min_circle_dist" << YAML::Value << params_config_.min_circle_dist; - yaml_out << YAML::Key << "hough_accum_th" << YAML::Value << params_config_.hough_accum_th; - yaml_out << YAML::Key << "min_radius" << YAML::Value << params_config_.min_radius; - yaml_out << YAML::Key << "max_radius" << YAML::Value << params_config_.max_radius; - yaml_out << YAML::Key << "filter_h_min" << YAML::Value << params_config_.filter_threshold.h_min; - yaml_out << YAML::Key << "filter_h_max" << YAML::Value << params_config_.filter_threshold.h_max; - yaml_out << YAML::Key << "filter_s_min" << YAML::Value << params_config_.filter_threshold.s_min; - yaml_out << YAML::Key << "filter_s_max" << YAML::Value << params_config_.filter_threshold.s_max; - yaml_out << YAML::Key << "filter_v_min" << YAML::Value << params_config_.filter_threshold.v_min; - yaml_out << YAML::Key << "filter_v_max" << YAML::Value << params_config_.filter_threshold.v_max; - yaml_out << YAML::Key << "use_second_filter" << YAML::Value << params_config_.use_second_filter; - yaml_out << YAML::Key << "filter2_h_min" << YAML::Value << params_config_.filter2_threshold.h_min; - yaml_out << YAML::Key << "filter2_h_max" << YAML::Value << params_config_.filter2_threshold.h_max; - yaml_out << YAML::Key << "filter2_s_min" << YAML::Value << params_config_.filter2_threshold.s_min; - yaml_out << YAML::Key << "filter2_s_max" << YAML::Value << params_config_.filter2_threshold.s_max; - yaml_out << YAML::Key << "filter2_v_min" << YAML::Value << params_config_.filter2_threshold.v_min; - yaml_out << YAML::Key << "filter2_v_max" << YAML::Value << params_config_.filter2_threshold.v_max; - yaml_out << YAML::Key << "ellipse_size" << YAML::Value << params_config_.ellipse_size; - yaml_out << YAML::Key << "filter_debug" << YAML::Value << params_config_.debug; + yaml_out << YAML::Key << "gaussian_blur_size" << YAML::Value + << params_config_.gaussian_blur_size; + yaml_out << YAML::Key << "gaussian_blur_sigma" << YAML::Value + << params_config_.gaussian_blur_sigma; + yaml_out << YAML::Key << "canny_edge_th" << YAML::Value + << params_config_.canny_edge_th; + yaml_out << YAML::Key << "hough_accum_resolution" << YAML::Value + << params_config_.hough_accum_resolution; + yaml_out << YAML::Key << "min_circle_dist" << YAML::Value + << params_config_.min_circle_dist; + yaml_out << YAML::Key << "hough_accum_th" << YAML::Value + << params_config_.hough_accum_th; + yaml_out << YAML::Key << "min_radius" << YAML::Value + << params_config_.min_radius; + yaml_out << YAML::Key << "max_radius" << YAML::Value + << params_config_.max_radius; + yaml_out << YAML::Key << "filter_h_min" << YAML::Value + << params_config_.filter_threshold.h_min; + yaml_out << YAML::Key << "filter_h_max" << YAML::Value + << params_config_.filter_threshold.h_max; + yaml_out << YAML::Key << "filter_s_min" << YAML::Value + << params_config_.filter_threshold.s_min; + yaml_out << YAML::Key << "filter_s_max" << YAML::Value + << params_config_.filter_threshold.s_max; + yaml_out << YAML::Key << "filter_v_min" << YAML::Value + << params_config_.filter_threshold.v_min; + yaml_out << YAML::Key << "filter_v_max" << YAML::Value + << params_config_.filter_threshold.v_max; + yaml_out << YAML::Key << "use_second_filter" << YAML::Value + << params_config_.use_second_filter; + yaml_out << YAML::Key << "filter2_h_min" << YAML::Value + << params_config_.filter2_threshold.h_min; + yaml_out << YAML::Key << "filter2_h_max" << YAML::Value + << params_config_.filter2_threshold.h_max; + yaml_out << YAML::Key << "filter2_s_min" << YAML::Value + << params_config_.filter2_threshold.s_min; + yaml_out << YAML::Key << "filter2_s_max" << YAML::Value + << params_config_.filter2_threshold.s_max; + yaml_out << YAML::Key << "filter2_v_min" << YAML::Value + << params_config_.filter2_threshold.v_min; + yaml_out << YAML::Key << "filter2_v_max" << YAML::Value + << params_config_.filter2_threshold.v_max; + yaml_out << YAML::Key << "ellipse_size" << YAML::Value + << params_config_.ellipse_size; + yaml_out << YAML::Key << "filter_debug" << YAML::Value + << params_config_.debug; yaml_out << YAML::EndMap; // output to file @@ -484,30 +531,26 @@ void BallDetector::saveConfig() fout << yaml_out.c_str(); } -void BallDetector::setInputImage(const cv::Mat & inIm) -{ +void BallDetector::setInputImage(const cv::Mat &inIm) { in_image_ = inIm.clone(); if (params_config_.debug == false) out_image_ = in_image_.clone(); } -void BallDetector::setInputImage(const cv::Mat & inIm, cv::Mat &in_filter_img) -{ +void BallDetector::setInputImage(const cv::Mat &inIm, cv::Mat &in_filter_img) { cv::cvtColor(inIm, in_filter_img, cv::COLOR_RGB2HSV); if (params_config_.debug == false) out_image_ = inIm.clone(); } -void BallDetector::getOutputImage(cv::Mat & outIm) -{ +void BallDetector::getOutputImage(cv::Mat &outIm) { this->drawOutputImage(); outIm = out_image_.clone(); } -void BallDetector::filterImage() -{ +void BallDetector::filterImage() { if (!in_image_.data) return; @@ -519,8 +562,7 @@ void BallDetector::filterImage() // mophology : open and close mophology(img_filtered, img_filtered, params_config_.ellipse_size); - if (params_config_.use_second_filter == true) - { + if (params_config_.use_second_filter == true) { // mask cv::Mat img_mask; @@ -540,8 +582,8 @@ void BallDetector::filterImage() cv::cvtColor(img_filtered, in_image_, cv::COLOR_GRAY2RGB); } -void BallDetector::filterImage(const cv::Mat &in_filter_img, cv::Mat &out_filter_img) -{ +void BallDetector::filterImage(const cv::Mat &in_filter_img, + cv::Mat &out_filter_img) { if (!in_filter_img.data) return; @@ -550,8 +592,7 @@ void BallDetector::filterImage(const cv::Mat &in_filter_img, cv::Mat &out_filter // mophology : open and close mophology(out_filter_img, out_filter_img, params_config_.ellipse_size); - if (params_config_.use_second_filter == true) - { + if (params_config_.use_second_filter == true) { // mask cv::Mat img_mask; @@ -568,16 +609,16 @@ void BallDetector::filterImage(const cv::Mat &in_filter_img, cv::Mat &out_filter mophology(out_filter_img, out_filter_img, params_config_.ellipse_size); -// cv::cvtColor(img_filtered, in_image_, cv::COLOR_GRAY2RGB); + // cv::cvtColor(img_filtered, in_image_, cv::COLOR_GRAY2RGB); - //draws results to output Image + // draws results to output Image if (params_config_.debug == true) cv::cvtColor(out_filter_img, out_image_, cv::COLOR_GRAY2RGB); -// out_image_ = in_image_.clone(); + // out_image_ = in_image_.clone(); } -void BallDetector::makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, int range) -{ +void BallDetector::makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, + int range) { // source_img. mask_img = cv::Mat::zeros(source_img.rows, source_img.cols, CV_8UC1); @@ -588,34 +629,30 @@ void BallDetector::makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, if (source_img.channels() != 1) return; - for (int i = 0; i < source_height; i++) - { - for (int j = 0; j < source_width; j++) - { - uint8_t pixel = source_img.at < uint8_t > (i, j); + for (int i = 0; i < source_height; i++) { + for (int j = 0; j < source_width; j++) { + uint8_t pixel = source_img.at(i, j); if (pixel == 0) continue; - for (int mask_i = i - range; mask_i <= i + range; mask_i++) - { + for (int mask_i = i - range; mask_i <= i + range; mask_i++) { if (mask_i < 0 || mask_i >= source_height) continue; - for (int mask_j = j - range; mask_j <= j + range; mask_j++) - { + for (int mask_j = j - range; mask_j <= j + range; mask_j++) { if (mask_j < 0 || mask_j >= source_width) continue; - mask_img.at < uchar > (mask_i, mask_j, 0) = 255; + mask_img.at(mask_i, mask_j, 0) = 255; } } } } } -void BallDetector::makeFilterMaskFromBall(const cv::Mat &source_img, cv::Mat &mask_img) -{ +void BallDetector::makeFilterMaskFromBall(const cv::Mat &source_img, + cv::Mat &mask_img) { // source_img. mask_img = cv::Mat::zeros(source_img.rows, source_img.cols, CV_8UC1); @@ -627,9 +664,9 @@ void BallDetector::makeFilterMaskFromBall(const cv::Mat &source_img, cv::Mat &ma return; cv::Mat img_labels, stats, centroids; - int numOfLables = cv::connectedComponentsWithStats(source_img, img_labels, stats, centroids, 8, CV_32S); - for (int j = 1; j < numOfLables; j++) - { + int numOfLables = cv::connectedComponentsWithStats( + source_img, img_labels, stats, centroids, 8, CV_32S); + for (int j = 1; j < numOfLables; j++) { int area = stats.at(j, cv::CC_STAT_AREA); int left = stats.at(j, cv::CC_STAT_LEFT); int top = stats.at(j, cv::CC_STAT_TOP); @@ -640,48 +677,49 @@ void BallDetector::makeFilterMaskFromBall(const cv::Mat &source_img, cv::Mat &ma int center_y = top + height * 0.5; int radius = (width + height) * 0.5; - for (int mask_i = center_y - radius; mask_i <= center_y + radius; mask_i++) - { + for (int mask_i = center_y - radius; mask_i <= center_y + radius; + mask_i++) { if (mask_i < 0 || mask_i >= source_img.rows) continue; int mask_offset = abs(mask_i - center_y) * 0.5; - for (int mask_j = center_x - radius + mask_offset; mask_j <= center_x + radius - mask_offset; mask_j++) - { + for (int mask_j = center_x - radius + mask_offset; + mask_j <= center_x + radius - mask_offset; mask_j++) { if (mask_j < 0 || mask_j >= source_img.cols) continue; - mask_img.at < uchar > (mask_i, mask_j, 0) = 255; + mask_img.at(mask_i, mask_j, 0) = 255; } } } - } -void BallDetector::inRangeHsv(const cv::Mat &input_img, const HsvFilter &filter_value, cv::Mat &output_img) -{ +void BallDetector::inRangeHsv(const cv::Mat &input_img, + const HsvFilter &filter_value, + cv::Mat &output_img) { // 0-360 -> 0-180 int scaled_hue_min = static_cast(filter_value.h_min * 0.5); int scaled_hue_max = static_cast(filter_value.h_max * 0.5); - if (scaled_hue_min <= scaled_hue_max) - { - cv::Scalar min_value = cv::Scalar(scaled_hue_min, filter_value.s_min, filter_value.v_min, 0); - cv::Scalar max_value = cv::Scalar(scaled_hue_max, filter_value.s_max, filter_value.v_max, 0); + if (scaled_hue_min <= scaled_hue_max) { + cv::Scalar min_value = + cv::Scalar(scaled_hue_min, filter_value.s_min, filter_value.v_min, 0); + cv::Scalar max_value = + cv::Scalar(scaled_hue_max, filter_value.s_max, filter_value.v_max, 0); cv::inRange(input_img, min_value, max_value, output_img); - } - else - { + } else { cv::Mat lower_hue_range, upper_hue_range; cv::Scalar min_value, max_value; min_value = cv::Scalar(0, filter_value.s_min, filter_value.v_min, 0); - max_value = cv::Scalar(scaled_hue_max, filter_value.s_max, filter_value.v_max, 0); + max_value = + cv::Scalar(scaled_hue_max, filter_value.s_max, filter_value.v_max, 0); cv::inRange(input_img, min_value, max_value, lower_hue_range); - min_value = cv::Scalar(scaled_hue_min, filter_value.s_min, filter_value.v_min, 0); + min_value = + cv::Scalar(scaled_hue_min, filter_value.s_min, filter_value.v_min, 0); max_value = cv::Scalar(179, filter_value.s_max, filter_value.v_max, 0); cv::inRange(input_img, min_value, max_value, upper_hue_range); @@ -689,42 +727,50 @@ void BallDetector::inRangeHsv(const cv::Mat &input_img, const HsvFilter &filter_ } } -void BallDetector::mophology(const cv::Mat &intput_img, cv::Mat &output_img, int ellipse_size) -{ - cv::erode(intput_img, output_img, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(ellipse_size, ellipse_size))); - cv::dilate(output_img, output_img, - cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(ellipse_size * 2, ellipse_size * 2))); +void BallDetector::mophology(const cv::Mat &intput_img, cv::Mat &output_img, + int ellipse_size) { + cv::erode(intput_img, output_img, + cv::getStructuringElement(cv::MORPH_ELLIPSE, + cv::Size(ellipse_size, ellipse_size))); + cv::dilate( + output_img, output_img, + cv::getStructuringElement(cv::MORPH_ELLIPSE, + cv::Size(ellipse_size * 2, ellipse_size * 2))); cv::dilate(output_img, output_img, - cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(ellipse_size, ellipse_size))); - cv::erode(output_img, output_img, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(ellipse_size, ellipse_size))); + cv::getStructuringElement(cv::MORPH_ELLIPSE, + cv::Size(ellipse_size, ellipse_size))); + cv::erode(output_img, output_img, + cv::getStructuringElement(cv::MORPH_ELLIPSE, + cv::Size(ellipse_size, ellipse_size))); } -void BallDetector::houghDetection(const unsigned int imgEncoding) -{ +void BallDetector::houghDetection(const unsigned int imgEncoding) { cv::Mat gray_image; std::vector circles_current; std::vector prev_circles = circles_; - //clear previous circles + // clear previous circles circles_.clear(); // If input image is RGB, convert it to gray if (imgEncoding == IMG_RGB8) cv::cvtColor(in_image_, gray_image, CV_RGB2GRAY); - //Reduce the noise so we avoid false circle detection + // Reduce the noise so we avoid false circle detection cv::GaussianBlur(gray_image, gray_image, - cv::Size(params_config_.gaussian_blur_size, params_config_.gaussian_blur_size), + cv::Size(params_config_.gaussian_blur_size, + params_config_.gaussian_blur_size), params_config_.gaussian_blur_sigma); double hough_accum_th = params_config_.hough_accum_th; - - //Apply the Hough Transform to find the circles - cv::HoughCircles(gray_image, circles_current, CV_HOUGH_GRADIENT, params_config_.hough_accum_resolution, - params_config_.min_circle_dist, params_config_.canny_edge_th, hough_accum_th, - params_config_.min_radius, params_config_.max_radius); + // Apply the Hough Transform to find the circles + cv::HoughCircles(gray_image, circles_current, CV_HOUGH_GRADIENT, + params_config_.hough_accum_resolution, + params_config_.min_circle_dist, params_config_.canny_edge_th, + hough_accum_th, params_config_.min_radius, + params_config_.max_radius); if (circles_current.size() == 0) not_found_count_ += 1; @@ -733,24 +779,23 @@ void BallDetector::houghDetection(const unsigned int imgEncoding) double alpha = 0.2; - for (int ix = 0; ix < circles_current.size(); ix++) - { - cv::Point2d center = cv::Point(circles_current[ix][0], circles_current[ix][1]); + for (int ix = 0; ix < circles_current.size(); ix++) { + cv::Point2d center = + cv::Point(circles_current[ix][0], circles_current[ix][1]); double radius = circles_current[ix][2]; - for (int prev_ix = 0; prev_ix < prev_circles.size(); prev_ix++) - { - cv::Point2d prev_center = cv::Point(prev_circles[prev_ix][0], prev_circles[prev_ix][1]); + for (int prev_ix = 0; prev_ix < prev_circles.size(); prev_ix++) { + cv::Point2d prev_center = + cv::Point(prev_circles[prev_ix][0], prev_circles[prev_ix][1]); double prev_radius = prev_circles[prev_ix][2]; cv::Point2d diff = center - prev_center; double radius_th = std::max(radius, prev_radius) * 0.75; - if (sqrt(diff.dot(diff)) < radius_th) - { - if (abs(radius - prev_radius) < radius_th) - { - circles_current[ix] = circles_current[ix] * alpha + prev_circles[prev_ix] * (1 - alpha); + if (sqrt(diff.dot(diff)) < radius_th) { + if (abs(radius - prev_radius) < radius_th) { + circles_current[ix] = + circles_current[ix] * alpha + prev_circles[prev_ix] * (1 - alpha); } break; @@ -761,32 +806,32 @@ void BallDetector::houghDetection(const unsigned int imgEncoding) } } -void BallDetector::houghDetection2(const cv::Mat &input_hough) -{ -// cv::Mat gray_image; +void BallDetector::houghDetection2(const cv::Mat &input_hough) { + // cv::Mat gray_image; std::vector circles_current; std::vector prev_circles = circles_; - //clear previous circles + // clear previous circles circles_.clear(); // If input image is RGB, convert it to gray -// if (imgEncoding == IMG_RGB8) -// cv::cvtColor(input_hough, gray_image, CV_RGB2GRAY); + // if (imgEncoding == IMG_RGB8) + // cv::cvtColor(input_hough, gray_image, CV_RGB2GRAY); - - //Reduce the noise so we avoid false circle detection + // Reduce the noise so we avoid false circle detection cv::GaussianBlur(input_hough, input_hough, - cv::Size(params_config_.gaussian_blur_size, params_config_.gaussian_blur_size), + cv::Size(params_config_.gaussian_blur_size, + params_config_.gaussian_blur_size), params_config_.gaussian_blur_sigma); double hough_accum_th = params_config_.hough_accum_th; - - //Apply the Hough Transform to find the circles - cv::HoughCircles(input_hough, circles_current, CV_HOUGH_GRADIENT, params_config_.hough_accum_resolution, - params_config_.min_circle_dist, params_config_.canny_edge_th, hough_accum_th, - params_config_.min_radius, params_config_.max_radius); + // Apply the Hough Transform to find the circles + cv::HoughCircles(input_hough, circles_current, CV_HOUGH_GRADIENT, + params_config_.hough_accum_resolution, + params_config_.min_circle_dist, params_config_.canny_edge_th, + hough_accum_th, params_config_.min_radius, + params_config_.max_radius); if (circles_current.size() == 0) not_found_count_ += 1; @@ -795,24 +840,23 @@ void BallDetector::houghDetection2(const cv::Mat &input_hough) double alpha = 0.2; - for (int ix = 0; ix < circles_current.size(); ix++) - { - cv::Point2d center = cv::Point(circles_current[ix][0], circles_current[ix][1]); + for (int ix = 0; ix < circles_current.size(); ix++) { + cv::Point2d center = + cv::Point(circles_current[ix][0], circles_current[ix][1]); double radius = circles_current[ix][2]; - for (int prev_ix = 0; prev_ix < prev_circles.size(); prev_ix++) - { - cv::Point2d prev_center = cv::Point(prev_circles[prev_ix][0], prev_circles[prev_ix][1]); + for (int prev_ix = 0; prev_ix < prev_circles.size(); prev_ix++) { + cv::Point2d prev_center = + cv::Point(prev_circles[prev_ix][0], prev_circles[prev_ix][1]); double prev_radius = prev_circles[prev_ix][2]; cv::Point2d diff = center - prev_center; double radius_th = std::max(radius, prev_radius) * 0.75; - if (sqrt(diff.dot(diff)) < radius_th) - { - if (abs(radius - prev_radius) < radius_th) - { - circles_current[ix] = circles_current[ix] * alpha + prev_circles[prev_ix] * (1 - alpha); + if (sqrt(diff.dot(diff)) < radius_th) { + if (abs(radius - prev_radius) < radius_th) { + circles_current[ix] = + circles_current[ix] * alpha + prev_circles[prev_ix] * (1 - alpha); } break; @@ -823,30 +867,29 @@ void BallDetector::houghDetection2(const cv::Mat &input_hough) } } -void BallDetector::drawOutputImage() -{ +void BallDetector::drawOutputImage() { cv::Point center_position; int radius = 0; size_t ii; - //draws results to output Image -// if (params_config_.debug == true) -// out_image_ = in_image_.clone(); + // draws results to output Image + // if (params_config_.debug == true) + // out_image_ = in_image_.clone(); - for (ii = 0; ii < circles_.size(); ii++) - { + for (ii = 0; ii < circles_.size(); ii++) { { int this_radius = cvRound(circles_[ii][2]); - if (this_radius > radius) - { + if (this_radius > radius) { radius = this_radius; - center_position = cv::Point(cvRound(circles_[ii][0]), cvRound(circles_[ii][1])); + center_position = + cv::Point(cvRound(circles_[ii][0]), cvRound(circles_[ii][1])); } } } - cv::circle(out_image_, center_position, 5, cv::Scalar(0, 0, 255), -1, 8, 0); // circle center in blue - cv::circle(out_image_, center_position, radius, cv::Scalar(0, 0, 255), 3, 8, 0); // circle outline in blue - + cv::circle(out_image_, center_position, 5, cv::Scalar(0, 0, 255), -1, 8, + 0); // circle center in blue + cv::circle(out_image_, center_position, radius, cv::Scalar(0, 0, 255), 3, 8, + 0); // circle outline in blue } -} // namespace robotis_op +} // namespace robotis_op diff --git a/op3_ball_detector/src/ball_detector_node.cpp b/op3_ball_detector/src/ball_detector_node.cpp index 117127d..421ff6a 100644 --- a/op3_ball_detector/src/ball_detector_node.cpp +++ b/op3_ball_detector/src/ball_detector_node.cpp @@ -1,55 +1,50 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include "op3_ball_detector/ball_detector.h" -//node main -int main(int argc, char **argv) -{ - //init ros +// node main +int main(int argc, char **argv) { + // init ros ros::init(argc, argv, "ball_detector_node"); - //create ros wrapper object + // create ros wrapper object robotis_op::BallDetector detector; - //set node loop rate + // set node loop rate ros::Rate loop_rate(30); - //node loop - while (ros::ok()) - { - //if new image , do things - if (detector.newImage()) - { + // node loop + while (ros::ok()) { + // if new image , do things + if (detector.newImage()) { detector.process(); detector.publishImage(); detector.publishCircles(); - } - //execute pending callbacks + // execute pending callbacks ros::spinOnce(); - //relax to fit output rate + // relax to fit output rate loop_rate.sleep(); } - //exit program + // exit program return 0; } - diff --git a/op3_bringup/CHANGELOG.rst b/op3_bringup/CHANGELOG.rst index bcad6b2..acc44a0 100644 --- a/op3_bringup/CHANGELOG.rst +++ b/op3_bringup/CHANGELOG.rst @@ -2,6 +2,11 @@ Changelog for package op3_bringup ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.0 (2021-05-05) +------------------ +* Update package.xml and CMakeList.txt for noetic branch +* Contributors: Ronaldson Bellande + 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic diff --git a/op3_bringup/CMakeLists.txt b/op3_bringup/CMakeLists.txt index b171b00..629dcb4 100644 --- a/op3_bringup/CMakeLists.txt +++ b/op3_bringup/CMakeLists.txt @@ -1,7 +1,7 @@ ################################################################################ # Set minimum required version of cmake, project name and compile options ################################################################################ -cmake_minimum_required(VERSION 2.8.3) +cmake_minimum_required(VERSION 3.0.2) project(op3_bringup) ################################################################################ @@ -33,10 +33,11 @@ catkin_package() ################################################################################ # Install ################################################################################ -install(DIRECTORY launch rviz - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +install( + DIRECTORY launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) ################################################################################ # Test -################################################################################ \ No newline at end of file +################################################################################ diff --git a/op3_bringup/launch/op3_bringup.launch b/op3_bringup/launch/op3_bringup.launch index a3eacfb..63aa7c8 100644 --- a/op3_bringup/launch/op3_bringup.launch +++ b/op3_bringup/launch/op3_bringup.launch @@ -1,8 +1,8 @@ - - + + - - + + diff --git a/op3_bringup/launch/op3_bringup_visualization.launch b/op3_bringup/launch/op3_bringup_visualization.launch index 5ad06e0..0ce6a5f 100644 --- a/op3_bringup/launch/op3_bringup_visualization.launch +++ b/op3_bringup/launch/op3_bringup_visualization.launch @@ -1,10 +1,10 @@ - + - + - + [/robotis/present_joint_states] @@ -14,5 +14,5 @@ - + diff --git a/op3_bringup/package.xml b/op3_bringup/package.xml index 3161ae0..93ffc2f 100644 --- a/op3_bringup/package.xml +++ b/op3_bringup/package.xml @@ -1,23 +1,41 @@ op3_bringup - 0.1.0 + 0.3.0 This package is a demo for first time users. There is an example in the demo where you can run and visualize the robot. Apache 2.0 Kayman - Pyo + Ronaldson Bellande + http://wiki.ros.org/op3_bringup http://emanual.robotis.com/docs/en/platform/op3/introduction/ https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues + catkin + + op3_manager + op3_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + + op3_manager + op3_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + op3_manager op3_description usb_cam joint_state_publisher robot_state_publisher - rviz + rviz + diff --git a/op3_demo/CHANGELOG.rst b/op3_demo/CHANGELOG.rst index c28f305..9558d4d 100644 --- a/op3_demo/CHANGELOG.rst +++ b/op3_demo/CHANGELOG.rst @@ -2,6 +2,11 @@ Changelog for package op3_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.0 (2021-05-05) +------------------ +* Update package.xml and CMakeList.txt for noetic branch +* Contributors: Ronaldson Bellande + 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic diff --git a/op3_demo/CMakeLists.txt b/op3_demo/CMakeLists.txt index 381f872..c9baf11 100644 --- a/op3_demo/CMakeLists.txt +++ b/op3_demo/CMakeLists.txt @@ -1,13 +1,14 @@ ################################################################################ # Set minimum required version of cmake, project name and compile options ################################################################################ -cmake_minimum_required(VERSION 2.8.3) +cmake_minimum_required(VERSION 3.0.2) project(op3_demo) ################################################################################ # Find catkin packages and libraries for catkin and system dependencies ################################################################################ -find_package(catkin REQUIRED COMPONENTS +find_package( + catkin REQUIRED COMPONENTS roscpp roslib std_msgs @@ -29,18 +30,20 @@ find_package(Eigen3 REQUIRED) ## Insert your header file compatible specified path like '#include ' find_package(PkgConfig REQUIRED) pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) -find_path(YAML_CPP_INCLUDE_DIR +find_path( + YAML_CPP_INCLUDE_DIR NAMES yaml_cpp.h PATHS ${YAML_CPP_INCLUDE_DIRS} ) -find_library(YAML_CPP_LIBRARY +find_library( + YAML_CPP_LIBRARY NAMES YAML_CPP PATHS ${YAML_CPP_LIBRARY_DIRS} ) link_directories(${YAML_CPP_LIBRARY_DIRS}) if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") -add_definitions(-DHAVE_NEW_YAMLCPP) + add_definitions(-DHAVE_NEW_YAMLCPP) endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") ################################################################################ @@ -61,17 +64,17 @@ endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") catkin_package( INCLUDE_DIRS include CATKIN_DEPENDS - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs - cmake_modules - robotis_math - op3_ball_detector + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + robotis_controller_msgs + op3_walking_module_msgs + op3_action_module_msgs + cmake_modules + robotis_math + op3_ball_detector DEPENDS Boost EIGEN3 ) @@ -86,7 +89,8 @@ include_directories( ${YAML_CPP_INCLUDE_DIRS} ) -add_executable(op_demo_node +add_executable( + op_demo_node src/demo_node.cpp src/soccer/soccer_demo.cpp src/soccer/ball_tracker.cpp @@ -96,19 +100,22 @@ add_executable(op_demo_node src/vision/face_tracker.cpp ) -add_dependencies(op_demo_node +add_dependencies( + op_demo_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ) -target_link_libraries(op_demo_node +target_link_libraries( + op_demo_node ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${Eigen3_LIBRARIES} ${YAML_CPP_LIBRARIES} ) -add_executable(self_test_node +add_executable( + self_test_node src/test_node.cpp src/soccer/soccer_demo.cpp src/soccer/ball_tracker.cpp @@ -120,12 +127,14 @@ add_executable(self_test_node src/test/mic_test.cpp ) -add_dependencies(self_test_node +add_dependencies( + self_test_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ) -target_link_libraries(self_test_node +target_link_libraries( + self_test_node ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${Eigen3_LIBRARIES} @@ -135,16 +144,19 @@ target_link_libraries(self_test_node ################################################################################ # Install ################################################################################ -install(TARGETS op_demo_node self_test_node +install( + TARGETS op_demo_node self_test_node RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) -install(DIRECTORY include/${PROJECT_NAME}/ +install( + DIRECTORY include/${PROJECT_NAME}/ DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} ) -install(DIRECTORY data launch list - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +install( + DIRECTORY data launch list + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) ################################################################################ diff --git a/op3_demo/include/op3_demo/action_demo.h b/op3_demo/include/op3_demo/action_demo.h index 4231406..b3ff459 100644 --- a/op3_demo/include/op3_demo/action_demo.h +++ b/op3_demo/include/op3_demo/action_demo.h @@ -1,58 +1,54 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #ifndef ACTION_DEMO_H_ #define ACTION_DEMO_H_ -#include #include +#include #include #include #include #include +#include "op3_action_module_msgs/IsRunning.h" #include "op3_demo/op_demo.h" #include "robotis_controller_msgs/JointCtrlModule.h" #include "robotis_controller_msgs/SetModule.h" -#include "op3_action_module_msgs/IsRunning.h" -namespace robotis_op -{ +namespace robotis_op { -class ActionDemo : public OPDemo -{ - public: +class ActionDemo : public OPDemo { +public: ActionDemo(); ~ActionDemo(); void setDemoEnable(); void setDemoDisable(); - protected: - enum ActionCommandIndex - { +protected: + enum ActionCommandIndex { BrakeActionCommand = -2, StopActionCommand = -1, }; - enum ActionStatus - { + enum ActionStatus { PlayAction = 1, PauseAction = 2, StopAction = 3, @@ -74,7 +70,8 @@ class ActionDemo : public OPDemo void handleStatus(); void parseActionScript(const std::string &path); - bool parseActionScriptSetName(const std::string &path, const std::string &set_name); + bool parseActionScriptSetName(const std::string &path, + const std::string &set_name); bool playActionWithSound(int motion_index); @@ -88,8 +85,8 @@ class ActionDemo : public OPDemo void setModuleToDemo(const std::string &module_name); void callServiceSettingModule(const std::string &module_name); - void actionSetNameCallback(const std_msgs::String::ConstPtr& msg); - void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); + void actionSetNameCallback(const std_msgs::String::ConstPtr &msg); + void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); void demoCommandCallback(const std_msgs::String::ConstPtr &msg); ros::Publisher module_control_pub_; diff --git a/op3_demo/include/op3_demo/ball_follower.h b/op3_demo/include/op3_demo/ball_follower.h index 232c6e7..06984e7 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/op3_demo/include/op3_demo/ball_follower.h @@ -1,48 +1,45 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #ifndef BALL_FOLLOWER_H_ #define BALL_FOLLOWER_H_ +#include #include #include -#include #include -#include -#include +#include #include -#include +#include +#include #include -#include "robotis_controller_msgs/JointCtrlModule.h" #include "op3_ball_detector/CircleSetStamped.h" -#include "op3_walking_module_msgs/WalkingParam.h" #include "op3_walking_module_msgs/GetWalkingParam.h" +#include "op3_walking_module_msgs/WalkingParam.h" +#include "robotis_controller_msgs/JointCtrlModule.h" -namespace robotis_op -{ +namespace robotis_op { // following the ball using walking -class BallFollower -{ - public: - enum - { +class BallFollower { +public: + enum { NotFound = 0, OutOfRange = 1, OnRight = 2, @@ -57,22 +54,16 @@ class BallFollower void waitFollowing(); void startFollowing(); void stopFollowing(); - void clearBallPosition() - { - approach_ball_position_ = NotFound; + void clearBallPosition() { approach_ball_position_ = NotFound; } + + int getBallPosition() { return approach_ball_position_; } + + bool isBallInRange() { + return (approach_ball_position_ == OnRight || + approach_ball_position_ == OnLeft); } - int getBallPosition() - { - return approach_ball_position_; - } - - bool isBallInRange() - { - return (approach_ball_position_ == OnRight || approach_ball_position_ == OnLeft); - } - - protected: +protected: const bool DEBUG_PRINT; const double CAMERA_HEIGHT; const int NOT_FOUND_THRESHOLD; @@ -92,15 +83,16 @@ class BallFollower void currentJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg); void setWalkingCommand(const std::string &command); - void setWalkingParam(double x_move, double y_move, double rotation_angle, bool balance = true); + void setWalkingParam(double x_move, double y_move, double rotation_angle, + bool balance = true); bool getWalkingParam(); - void calcFootstep(double target_distance, double target_angle, double delta_time, - double& fb_move, double& rl_angle); + void calcFootstep(double target_distance, double target_angle, + double delta_time, double &fb_move, double &rl_angle); - //ros node handle + // ros node handle ros::NodeHandle nh_; - //image publisher/subscriber + // image publisher/subscriber ros::Publisher module_control_pub_; ros::Publisher head_joint_pub_; ros::Publisher head_scan_pub_; @@ -131,8 +123,7 @@ class BallFollower double curr_period_time_; double accum_period_time_; - }; -} +} // namespace robotis_op #endif /* BALL_FOLLOWER_H_ */ diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/op3_demo/include/op3_demo/ball_tracker.h index 383c809..f6d996e 100644 --- a/op3_demo/include/op3_demo/ball_tracker.h +++ b/op3_demo/include/op3_demo/ball_tracker.h @@ -1,47 +1,44 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #ifndef BALL_TRACKING_H_ #define BALL_TRACKING_H_ -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include #include -#include "robotis_controller_msgs/JointCtrlModule.h" #include "op3_ball_detector/CircleSetStamped.h" -#include "op3_walking_module_msgs/WalkingParam.h" #include "op3_walking_module_msgs/GetWalkingParam.h" +#include "op3_walking_module_msgs/WalkingParam.h" +#include "robotis_controller_msgs/JointCtrlModule.h" -namespace robotis_op -{ +namespace robotis_op { // head tracking for looking the ball -class BallTracker -{ +class BallTracker { public: - enum TrackingStatus - { + enum TrackingStatus { NotFound = -1, Waiting = 0, Found = 1, @@ -58,20 +55,15 @@ public: void setUsingHeadScan(bool use_scan); void goInit(); - double getPanOfBall() - { + double getPanOfBall() { // left (+) ~ right (-) return current_ball_pan_; } - double getTiltOfBall() - { + double getTiltOfBall() { // top (+) ~ bottom (-) return current_ball_tilt_; } - double getBallSize() - { - return current_ball_bottom_; - } + double getBallSize() { return current_ball_bottom_; } protected: const double FOV_WIDTH; @@ -80,15 +72,16 @@ protected: const int WAITING_THRESHOLD; const bool DEBUG_PRINT; - void ballPositionCallback(const op3_ball_detector::CircleSetStamped::ConstPtr &msg); + void ballPositionCallback( + const op3_ball_detector::CircleSetStamped::ConstPtr &msg); void ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); void publishHeadJoint(double pan, double tilt); void scanBall(); - //ros node handle + // ros node handle ros::NodeHandle nh_; - //image publisher/subscriber + // image publisher/subscriber ros::Publisher module_control_pub_; ros::Publisher head_joint_offset_pub_; ros::Publisher head_joint_pub_; @@ -114,8 +107,7 @@ protected: double x_error_sum_, y_error_sum_; ros::Time prev_time_; double p_gain_, d_gain_, i_gain_; - }; -} +} // namespace robotis_op #endif /* BALL_TRACKING_H_ */ diff --git a/op3_demo/include/op3_demo/button_test.h b/op3_demo/include/op3_demo/button_test.h index 84e8bee..0090702 100644 --- a/op3_demo/include/op3_demo/button_test.h +++ b/op3_demo/include/op3_demo/button_test.h @@ -1,45 +1,43 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #ifndef BUTTON_TEST_H_ #define BUTTON_TEST_H_ -#include -#include -#include #include +#include +#include +#include #include "op3_demo/op_demo.h" #include "robotis_controller_msgs/SyncWriteItem.h" -namespace robotis_op -{ +namespace robotis_op { -class ButtonTest : public OPDemo -{ - public: +class ButtonTest : public OPDemo { +public: ButtonTest(); ~ButtonTest(); void setDemoEnable(); void setDemoDisable(); - protected: +protected: const int SPIN_RATE; void processThread(); @@ -52,7 +50,7 @@ class ButtonTest : public OPDemo void playSound(const std::string &path); - void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); + void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); ros::Publisher rgb_led_pub_; ros::Publisher play_sound_pub_; diff --git a/op3_demo/include/op3_demo/face_tracker.h b/op3_demo/include/op3_demo/face_tracker.h index 79b3d13..a1b7abc 100644 --- a/op3_demo/include/op3_demo/face_tracker.h +++ b/op3_demo/include/op3_demo/face_tracker.h @@ -1,43 +1,40 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #ifndef FACE_TRACKING_H_ #define FACE_TRACKING_H_ -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include #include -namespace robotis_op -{ +namespace robotis_op { // head tracking for looking the ball -class FaceTracker -{ - public: - enum TrackingStatus - { +class FaceTracker { +public: + enum TrackingStatus { NotFound = -1, Waiting = 0, Found = 1, @@ -56,16 +53,10 @@ class FaceTracker void setFacePosition(geometry_msgs::Point &face_position); void goInit(double init_pan, double init_tile); - double getPanOfFace() - { - return current_face_pan_; - } - double getTiltOfFace() - { - return current_face_tilt_; - } + double getPanOfFace() { return current_face_pan_; } + double getTiltOfFace() { return current_face_tilt_; } - protected: +protected: const double FOV_WIDTH; const double FOV_HEIGHT; const int NOT_FOUND_THRESHOLD; @@ -75,10 +66,10 @@ class FaceTracker void publishHeadJoint(double pan, double tilt); void scanFace(); - //ros node handle + // ros node handle ros::NodeHandle nh_; - //image publisher/subscriber + // image publisher/subscriber ros::Publisher module_control_pub_; ros::Publisher head_joint_offset_pub_; ros::Publisher head_joint_pub_; @@ -97,8 +88,7 @@ class FaceTracker double current_face_pan_, current_face_tilt_; int dismissed_count_; - }; -} +} // namespace robotis_op #endif /* FACE_TRACKING_H_ */ diff --git a/op3_demo/include/op3_demo/mic_test.h b/op3_demo/include/op3_demo/mic_test.h index 144fe96..ceb2f17 100644 --- a/op3_demo/include/op3_demo/mic_test.h +++ b/op3_demo/include/op3_demo/mic_test.h @@ -1,41 +1,38 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #ifndef MIC_TEST_H_ #define MIC_TEST_H_ -#include -#include -#include -#include #include +#include +#include +#include +#include #include "op3_demo/op_demo.h" #include "robotis_controller_msgs/SyncWriteItem.h" -namespace robotis_op -{ +namespace robotis_op { -class MicTest : public OPDemo -{ - public: - enum Mic_Test_Status - { +class MicTest : public OPDemo { +public: + enum Mic_Test_Status { Ready = 0, AnnounceRecording = 1, MicRecording = 2, @@ -50,7 +47,7 @@ class MicTest : public OPDemo void setDemoEnable(); void setDemoDisable(); - protected: +protected: const int SPIN_RATE; void processThread(); @@ -68,7 +65,7 @@ class MicTest : public OPDemo void startTimer(double wait_time); void finishTimer(); - void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); + void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); std::string recording_file_name_; std::string default_mp3_path_; diff --git a/op3_demo/include/op3_demo/op_demo.h b/op3_demo/include/op3_demo/op_demo.h index 25641a0..54cb72b 100644 --- a/op3_demo/include/op3_demo/op_demo.h +++ b/op3_demo/include/op3_demo/op_demo.h @@ -1,32 +1,29 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #ifndef OP_DEMO_H_ #define OP_DEMO_H_ -namespace robotis_op -{ +namespace robotis_op { -class OPDemo -{ - public: - enum Motion_Index - { +class OPDemo { +public: + enum Motion_Index { InitPose = 1, WalkingReady = 9, GetUpFront = 122, @@ -37,21 +34,13 @@ class OPDemo ForGrass = 20, }; - OPDemo() - { - } - virtual ~OPDemo() - { - } + OPDemo() {} + virtual ~OPDemo() {} - virtual void setDemoEnable() - { - } - virtual void setDemoDisable() - { - } + virtual void setDemoEnable() {} + virtual void setDemoDisable() {} - protected: +protected: bool enable_; }; diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/op3_demo/include/op3_demo/soccer_demo.h index 48fd957..ae7b553 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/op3_demo/include/op3_demo/soccer_demo.h @@ -1,56 +1,52 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #ifndef SOCCER_DEMO_H #define SOCCER_DEMO_H -#include -#include -#include #include #include +#include +#include +#include #include #include "op3_action_module_msgs/IsRunning.h" -#include "robotis_controller_msgs/SyncWriteItem.h" #include "robotis_controller_msgs/JointCtrlModule.h" #include "robotis_controller_msgs/SetJointModule.h" +#include "robotis_controller_msgs/SyncWriteItem.h" -#include "op3_demo/op_demo.h" -#include "op3_demo/ball_tracker.h" #include "op3_demo/ball_follower.h" +#include "op3_demo/ball_tracker.h" +#include "op3_demo/op_demo.h" #include "robotis_math/robotis_linear_algebra.h" -namespace robotis_op -{ +namespace robotis_op { -class SoccerDemo : public OPDemo -{ - public: - enum Stand_Status - { +class SoccerDemo : public OPDemo { +public: + enum Stand_Status { Stand = 0, Fallen_Forward = 1, Fallen_Behind = 2, }; - enum Robot_Status - { + enum Robot_Status { Waited = 0, TrackingAndFollowing = 1, ReadyToKick = 2, @@ -64,7 +60,7 @@ class SoccerDemo : public OPDemo void setDemoEnable(); void setDemoDisable(); - protected: +protected: const double FALL_FORWARD_LIMIT; const double FALL_BACK_LIMIT; const int SPIN_RATE; @@ -74,17 +70,19 @@ class SoccerDemo : public OPDemo void callbackThread(); void trackingThread(); - void setBodyModuleToDemo(const std::string &body_module, bool with_head_control = true); + void setBodyModuleToDemo(const std::string &body_module, + bool with_head_control = true); void setModuleToDemo(const std::string &module_name); - void callServiceSettingModule(const robotis_controller_msgs::JointCtrlModule &modules); + void callServiceSettingModule( + const robotis_controller_msgs::JointCtrlModule &modules); void parseJointNameFromYaml(const std::string &path); bool getJointNameFromID(const int &id, std::string &joint_name); bool getIDFromJointName(const std::string &joint_name, int &id); int getJointCount(); bool isHeadJoint(const int &id); - void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); - void demoCommandCallback(const std_msgs::String::ConstPtr& msg); - void imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg); + void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); + void demoCommandCallback(const std_msgs::String::ConstPtr &msg); + void imuDataCallback(const sensor_msgs::Imu::ConstPtr &msg); void startSoccerMode(); void stopSoccerMode(); @@ -132,5 +130,5 @@ class SoccerDemo : public OPDemo double present_pitch_; }; -} // namespace robotis_op +} // namespace robotis_op #endif // SOCCER_DEMO_H diff --git a/op3_demo/include/op3_demo/vision_demo.h b/op3_demo/include/op3_demo/vision_demo.h index d97bc41..523bcc8 100644 --- a/op3_demo/include/op3_demo/vision_demo.h +++ b/op3_demo/include/op3_demo/vision_demo.h @@ -1,49 +1,47 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #ifndef VISION_DEMO_H_ #define VISION_DEMO_H_ -#include -#include -#include -#include #include +#include +#include +#include +#include -#include "robotis_controller_msgs/SyncWriteItem.h" #include "robotis_controller_msgs/SetModule.h" +#include "robotis_controller_msgs/SyncWriteItem.h" -#include "op3_demo/op_demo.h" #include "op3_demo/face_tracker.h" +#include "op3_demo/op_demo.h" -namespace robotis_op -{ +namespace robotis_op { -class VisionDemo : public OPDemo -{ - public: +class VisionDemo : public OPDemo { +public: VisionDemo(); ~VisionDemo(); void setDemoEnable(); void setDemoDisable(); - protected: +protected: const int SPIN_RATE; const int TIME_TO_INIT; @@ -55,7 +53,7 @@ class VisionDemo : public OPDemo void playMotion(int motion_index); void setRGBLED(int blue, int green, int red); - void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); + void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); void facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg); void demoCommandCallback(const std_msgs::String::ConstPtr &msg); @@ -66,7 +64,7 @@ class VisionDemo : public OPDemo ros::Publisher module_control_pub_; ros::Publisher motion_index_pub_; - ros::Publisher rgb_led_pub_; + ros::Publisher rgb_led_pub_; ros::Publisher face_tracking_command_pub_; ros::Subscriber buttuon_sub_; diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index 0bd83a9..dc0b421 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -1,28 +1,27 @@ - - + + - - - - - + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - diff --git a/op3_demo/launch/face_detection_op3.launch b/op3_demo/launch/face_detection_op3.launch index d42ab41..e1ea7ef 100644 --- a/op3_demo/launch/face_detection_op3.launch +++ b/op3_demo/launch/face_detection_op3.launch @@ -1,22 +1,20 @@ - - - - - + + + + + - + $(arg face_cascade_name_4)" output="screen"> - + diff --git a/op3_demo/launch/self_test.launch b/op3_demo/launch/self_test.launch index 00c9acb..1979ba7 100644 --- a/op3_demo/launch/self_test.launch +++ b/op3_demo/launch/self_test.launch @@ -1,24 +1,24 @@ - + - + - - + + - + - - + + - + @@ -26,4 +26,3 @@ - diff --git a/op3_demo/list/action_script.yaml b/op3_demo/list/action_script.yaml index 21ce72b..18ae60f 100644 --- a/op3_demo/list/action_script.yaml +++ b/op3_demo/list/action_script.yaml @@ -20,4 +20,4 @@ prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] default: [4, 110, 111, 115, 118, 24, 54, 27, 38] # example of play list -#certification: [101] \ No newline at end of file +#certification: [101] diff --git a/op3_demo/list/action_script_bk.yaml b/op3_demo/list/action_script_bk.yaml index bc401fb..2dd155b 100644 --- a/op3_demo/list/action_script_bk.yaml +++ b/op3_demo/list/action_script_bk.yaml @@ -15,4 +15,4 @@ action_and_sound: default: [4, 41, 24, 23, 15, 1, 54, 27, 38] # example of play list -certificatino: [101] \ No newline at end of file +certificatino: [101] diff --git a/op3_demo/package.xml b/op3_demo/package.xml index 1a0785c..9604a04 100644 --- a/op3_demo/package.xml +++ b/op3_demo/package.xml @@ -1,36 +1,80 @@ op3_demo - 0.1.0 + 0.3.0 OP3 default demo It includes three demontrations(soccer demo, vision demo, action script demo) Apache 2.0 Kayman - Pyo + Ronaldson Bellande + http://wiki.ros.org/op3_demo http://emanual.robotis.com/docs/en/platform/op3/introduction/ https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues + catkin - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs - cmake_modules - robotis_math - op3_ball_detector - boost - eigen - yaml-cpp + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + robotis_controller_msgs + op3_walking_module_msgs + op3_action_module_msgs + cmake_modules + robotis_math + op3_ball_detector + boost + eigen + yaml-cpp + op3_manager + op3_camera_setting_tool + op3_web_setting_tool + ros_madplay_player + face_detection + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + robotis_controller_msgs + op3_walking_module_msgs + op3_action_module_msgs + cmake_modules + robotis_math + op3_ball_detector + boost + eigen + yaml-cpp + op3_manager + op3_camera_setting_tool + op3_web_setting_tool + ros_madplay_player + face_detection + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + robotis_controller_msgs + op3_walking_module_msgs + op3_action_module_msgs + cmake_modules + robotis_math + op3_ball_detector + boost + eigen + yaml-cpp op3_manager op3_camera_setting_tool op3_web_setting_tool ros_madplay_player - + face_detection + diff --git a/op3_demo/src/action/action_demo.cpp b/op3_demo/src/action/action_demo.cpp index 660390c..30fbdda 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/op3_demo/src/action/action_demo.cpp @@ -1,56 +1,54 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include "op3_demo/action_demo.h" -namespace robotis_op -{ +namespace robotis_op { ActionDemo::ActionDemo() - : SPIN_RATE(30), - DEBUG_PRINT(false), - play_index_(0), - play_status_(StopAction) -{ + : SPIN_RATE(30), DEBUG_PRINT(false), play_index_(0), + play_status_(StopAction) { enable_ = false; ros::NodeHandle nh(ros::this_node::getName()); - std::string default_path = ros::package::getPath("op3_demo") + "/list/action_script.yaml"; + std::string default_path = + ros::package::getPath("op3_demo") + "/list/action_script.yaml"; script_path_ = nh.param("action_script", default_path); std::string default_play_list = "default"; - play_list_name_ = nh.param("action_script_play_list", default_play_list); + play_list_name_ = + nh.param("action_script_play_list", default_play_list); - demo_command_sub_ = nh.subscribe("/robotis/demo_command", 1, &ActionDemo::demoCommandCallback, this); + demo_command_sub_ = nh.subscribe("/robotis/demo_command", 1, + &ActionDemo::demoCommandCallback, this); - parseActionScript (script_path_); + parseActionScript(script_path_); - boost::thread queue_thread = boost::thread(boost::bind(&ActionDemo::callbackThread, this)); - boost::thread process_thread = boost::thread(boost::bind(&ActionDemo::processThread, this)); + boost::thread queue_thread = + boost::thread(boost::bind(&ActionDemo::callbackThread, this)); + boost::thread process_thread = + boost::thread(boost::bind(&ActionDemo::processThread, this)); } -ActionDemo::~ActionDemo() -{ -} +ActionDemo::~ActionDemo() {} -void ActionDemo::setDemoEnable() -{ +void ActionDemo::setDemoEnable() { setModuleToDemo("action_module"); enable_ = true; @@ -62,8 +60,7 @@ void ActionDemo::setDemoEnable() startProcess(play_list_name_); } -void ActionDemo::setDemoDisable() -{ +void ActionDemo::setDemoDisable() { stopProcess(); enable_ = false; @@ -71,134 +68,116 @@ void ActionDemo::setDemoDisable() play_list_.resize(0); } -void ActionDemo::process() -{ - switch (play_status_) - { - case PlayAction: - { - if (play_list_.size() == 0) - { - ROS_WARN("Play List is empty."); - return; - } - - // action is not running - if (isActionRunning() == false) - { - // play - bool result_play = playActionWithSound(play_list_.at(play_index_)); - - ROS_INFO_COND(!result_play, "Fail to play action script."); - - // add play index - int index_to_play = (play_index_ + 1) % play_list_.size(); - play_index_ = index_to_play; - } - else - { - // wait - return; - } - break; +void ActionDemo::process() { + switch (play_status_) { + case PlayAction: { + if (play_list_.size() == 0) { + ROS_WARN("Play List is empty."); + return; } - case PauseAction: - { - stopMP3(); - brakeAction(); + // action is not running + if (isActionRunning() == false) { + // play + bool result_play = playActionWithSound(play_list_.at(play_index_)); - play_status_ = ReadyAction; + ROS_INFO_COND(!result_play, "Fail to play action script."); - break; + // add play index + int index_to_play = (play_index_ + 1) % play_list_.size(); + play_index_ = index_to_play; + } else { + // wait + return; } + break; + } - case StopAction: - { - stopMP3(); - stopAction(); + case PauseAction: { + stopMP3(); + brakeAction(); - play_status_ = ReadyAction; + play_status_ = ReadyAction; - break; - } + break; + } - default: - break; + case StopAction: { + stopMP3(); + stopAction(); + + play_status_ = ReadyAction; + + break; + } + + default: + break; } } -void ActionDemo::startProcess(const std::string &set_name) -{ +void ActionDemo::startProcess(const std::string &set_name) { parseActionScriptSetName(script_path_, set_name); play_status_ = PlayAction; } -void ActionDemo::resumeProcess() -{ - play_status_ = PlayAction; -} +void ActionDemo::resumeProcess() { play_status_ = PlayAction; } -void ActionDemo::pauseProcess() -{ - play_status_ = PauseAction; -} +void ActionDemo::pauseProcess() { play_status_ = PauseAction; } -void ActionDemo::stopProcess() -{ +void ActionDemo::stopProcess() { play_index_ = 0; play_status_ = StopAction; } -void ActionDemo::processThread() -{ - //set node loop rate +void ActionDemo::processThread() { + // set node loop rate ros::Rate loop_rate(SPIN_RATE); - //node loop - while (ros::ok()) - { + // node loop + while (ros::ok()) { if (enable_ == true) process(); - //relax to fit output rate + // relax to fit output rate loop_rate.sleep(); } } -void ActionDemo::callbackThread() -{ +void ActionDemo::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - module_control_pub_ = nh.advertise("/robotis/enable_ctrl_module", 0); - motion_index_pub_ = nh.advertise("/robotis/action/page_num", 0); + module_control_pub_ = + nh.advertise("/robotis/enable_ctrl_module", 0); + motion_index_pub_ = + nh.advertise("/robotis/action/page_num", 0); play_sound_pub_ = nh.advertise("/play_sound_file", 0); - buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &ActionDemo::buttonHandlerCallback, this); + buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, + &ActionDemo::buttonHandlerCallback, this); - is_running_client_ = nh.serviceClient("/robotis/action/is_running"); - set_joint_module_client_ = nh.serviceClient("/robotis/set_present_ctrl_modules"); + is_running_client_ = nh.serviceClient( + "/robotis/action/is_running"); + set_joint_module_client_ = + nh.serviceClient( + "/robotis/set_present_ctrl_modules"); - while (nh.ok()) - { + while (nh.ok()) { ros::spinOnce(); usleep(1000); } } -void ActionDemo::parseActionScript(const std::string &path) -{ +void ActionDemo::parseActionScript(const std::string &path) { YAML::Node doc; - try - { + try { // load yaml doc = YAML::LoadFile(path.c_str()); - } catch (const std::exception& e) - { + } catch (const std::exception &e) { ROS_ERROR_STREAM("Fail to load action script yaml. - " << e.what()); ROS_ERROR_STREAM("Script Path : " << path); return; @@ -206,8 +185,8 @@ void ActionDemo::parseActionScript(const std::string &path) // parse action_sound table YAML::Node sub_node = doc["action_and_sound"]; - for (YAML::iterator yaml_it = sub_node.begin(); yaml_it != sub_node.end(); ++yaml_it) - { + for (YAML::iterator yaml_it = sub_node.begin(); yaml_it != sub_node.end(); + ++yaml_it) { int action_index = yaml_it->first.as(); std::string mp3_path = yaml_it->second.as(); @@ -216,82 +195,75 @@ void ActionDemo::parseActionScript(const std::string &path) // default action set if (doc["default"]) - play_list_ = doc["default"].as >(); + play_list_ = doc["default"].as>(); } -bool ActionDemo::parseActionScriptSetName(const std::string &path, const std::string &set_name) -{ +bool ActionDemo::parseActionScriptSetName(const std::string &path, + const std::string &set_name) { YAML::Node doc; - try - { + try { // load yaml doc = YAML::LoadFile(path.c_str()); - } catch (const std::exception& e) - { + } catch (const std::exception &e) { ROS_ERROR("Fail to load yaml."); return false; } // parse action_sound table - if (doc[set_name]) - { - play_list_ = doc[set_name].as >(); + if (doc[set_name]) { + play_list_ = doc[set_name].as>(); return true; - } - else + } else return false; } -bool ActionDemo::playActionWithSound(int motion_index) -{ - std::map::iterator map_it = action_sound_table_.find(motion_index); +bool ActionDemo::playActionWithSound(int motion_index) { + std::map::iterator map_it = + action_sound_table_.find(motion_index); if (map_it == action_sound_table_.end()) return false; playAction(motion_index); playMP3(map_it->second); - ROS_INFO_STREAM_COND(DEBUG_PRINT, "action : " << motion_index << ", mp3 path : " << map_it->second); + ROS_INFO_STREAM_COND(DEBUG_PRINT, + "action : " << motion_index + << ", mp3 path : " << map_it->second); return true; } -void ActionDemo::playMP3(std::string &path) -{ +void ActionDemo::playMP3(std::string &path) { std_msgs::String sound_msg; sound_msg.data = path; play_sound_pub_.publish(sound_msg); } -void ActionDemo::stopMP3() -{ +void ActionDemo::stopMP3() { std_msgs::String sound_msg; sound_msg.data = ""; play_sound_pub_.publish(sound_msg); } -void ActionDemo::playAction(int motion_index) -{ +void ActionDemo::playAction(int motion_index) { std_msgs::Int32 motion_msg; motion_msg.data = motion_index; motion_index_pub_.publish(motion_msg); } -void ActionDemo::stopAction() -{ +void ActionDemo::stopAction() { std_msgs::Int32 motion_msg; motion_msg.data = StopActionCommand; motion_index_pub_.publish(motion_msg); } -void ActionDemo::brakeAction() -{ +void ActionDemo::brakeAction() { std_msgs::Int32 motion_msg; motion_msg.data = BrakeActionCommand; @@ -299,19 +271,14 @@ void ActionDemo::brakeAction() } // check running of action -bool ActionDemo::isActionRunning() -{ +bool ActionDemo::isActionRunning() { op3_action_module_msgs::IsRunning is_running_srv; - if (is_running_client_.call(is_running_srv) == false) - { + if (is_running_client_.call(is_running_srv) == false) { ROS_ERROR("Failed to get action status"); return true; - } - else - { - if (is_running_srv.response.is_running == true) - { + } else { + if (is_running_srv.response.is_running == true) { return true; } } @@ -319,74 +286,58 @@ bool ActionDemo::isActionRunning() return false; } -void ActionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) -{ +void ActionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { if (enable_ == false) return; - if (msg->data == "start") - { - switch (play_status_) - { - case PlayAction: - { - pauseProcess(); - break; - } + if (msg->data == "start") { + switch (play_status_) { + case PlayAction: { + pauseProcess(); + break; + } - case PauseAction: - { - resumeProcess(); - break; - } + case PauseAction: { + resumeProcess(); + break; + } - case StopAction: - { - resumeProcess(); - break; - } - - default: - break; - } - } - else if (msg->data == "mode") - { + case StopAction: { + resumeProcess(); + break; + } + default: + break; + } + } else if (msg->data == "mode") { } } -void ActionDemo::setModuleToDemo(const std::string &module_name) -{ +void ActionDemo::setModuleToDemo(const std::string &module_name) { callServiceSettingModule(module_name); ROS_INFO_STREAM("enable module : " << module_name); } -void ActionDemo::callServiceSettingModule(const std::string &module_name) -{ - robotis_controller_msgs::SetModule set_module_srv; - set_module_srv.request.module_name = module_name; +void ActionDemo::callServiceSettingModule(const std::string &module_name) { + robotis_controller_msgs::SetModule set_module_srv; + set_module_srv.request.module_name = module_name; - if (set_joint_module_client_.call(set_module_srv) == false) - { - ROS_ERROR("Failed to set module"); - return; - } + if (set_joint_module_client_.call(set_module_srv) == false) { + ROS_ERROR("Failed to set module"); + return; + } - return ; + return; } -void ActionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) -{ +void ActionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) { if (enable_ == false) return; - if (msg->data == "start") - { + if (msg->data == "start") { resumeProcess(); - } - else if (msg->data == "stop") - { + } else if (msg->data == "stop") { pauseProcess(); } } diff --git a/op3_demo/src/demo_node.cpp b/op3_demo/src/demo_node.cpp index 300a90b..90fb0a8 100644 --- a/op3_demo/src/demo_node.cpp +++ b/op3_demo/src/demo_node.cpp @@ -1,32 +1,31 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include #include -#include "op3_demo/soccer_demo.h" #include "op3_demo/action_demo.h" +#include "op3_demo/soccer_demo.h" #include "op3_demo/vision_demo.h" -#include "robotis_math/robotis_linear_algebra.h" #include "robotis_controller_msgs/SyncWriteItem.h" +#include "robotis_math/robotis_linear_algebra.h" -enum Demo_Status -{ +enum Demo_Status { Ready = 0, SoccerDemo = 1, VisionDemo = 2, @@ -34,11 +33,11 @@ enum Demo_Status DemoCount = 4, }; -void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); +void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); void goInitPose(); void playSound(const std::string &path); void setLED(int led); -bool checkManagerRunning(std::string& manager_name); +bool checkManagerRunning(std::string &manager_name); void dxlTorqueChecker(); void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg); @@ -56,13 +55,12 @@ int current_status = Ready; int desired_status = Ready; bool apply_desired = false; -//node main -int main(int argc, char **argv) -{ - //init ros +// node main +int main(int argc, char **argv) { + // init ros ros::init(argc, argv, "demo_node"); - //create ros wrapper object + // create ros wrapper object robotis_op::OPDemo *current_demo = NULL; robotis_op::SoccerDemo *soccer_demo = new robotis_op::SoccerDemo(); robotis_op::ActionDemo *action_demo = new robotis_op::ActionDemo(); @@ -72,26 +70,27 @@ int main(int argc, char **argv) init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); - led_pub = nh.advertise("/robotis/sync_write_item", 0); + led_pub = nh.advertise( + "/robotis/sync_write_item", 0); dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); - ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); - ros::Subscriber mode_command_sub = nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); + ros::Subscriber buttuon_sub = + nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + ros::Subscriber mode_command_sub = + nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); default_mp3_path = ros::package::getPath("op3_demo") + "/data/mp3/"; ros::start(); - //set node loop rate + // set node loop rate ros::Rate loop_rate(SPIN_RATE); // wait for starting of manager std::string manager_name = "/op3_manager"; - while (ros::ok()) - { + while (ros::ok()) { ros::Duration(1.0).sleep(); - if (checkManagerRunning(manager_name) == true) - { + if (checkManagerRunning(manager_name) == true) { break; ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } @@ -103,164 +102,148 @@ int main(int argc, char **argv) // turn on R/G/B LED setLED(0x01 | 0x02 | 0x04); - //node loop - while (ros::ok()) - { + // node loop + while (ros::ok()) { // process - if (apply_desired == true) - { - switch (desired_status) - { - case Ready: - { + if (apply_desired == true) { + switch (desired_status) { + case Ready: { - if (current_demo != NULL) - current_demo->setDemoDisable(); + if (current_demo != NULL) + current_demo->setDemoDisable(); - current_demo = NULL; + current_demo = NULL; - goInitPose(); + goInitPose(); - ROS_INFO_COND(DEBUG_PRINT, "[Go to Demo READY!]"); - break; - } + ROS_INFO_COND(DEBUG_PRINT, "[Go to Demo READY!]"); + break; + } - case SoccerDemo: - { - if (current_demo != NULL) - current_demo->setDemoDisable(); + case SoccerDemo: { + if (current_demo != NULL) + current_demo->setDemoDisable(); - current_demo = soccer_demo; - current_demo->setDemoEnable(); + current_demo = soccer_demo; + current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Soccer Demo"); - break; - } + ROS_INFO_COND(DEBUG_PRINT, "[Start] Soccer Demo"); + break; + } - case VisionDemo: - { - if (current_demo != NULL) - current_demo->setDemoDisable(); + case VisionDemo: { + if (current_demo != NULL) + current_demo->setDemoDisable(); - current_demo = vision_demo; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Vision Demo"); - break; - } - case ActionDemo: - { - if (current_demo != NULL) - current_demo->setDemoDisable(); + current_demo = vision_demo; + current_demo->setDemoEnable(); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Vision Demo"); + break; + } + case ActionDemo: { + if (current_demo != NULL) + current_demo->setDemoDisable(); - current_demo = action_demo; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Action Demo"); - break; - } + current_demo = action_demo; + current_demo->setDemoEnable(); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Action Demo"); + break; + } - default: - { - break; - } + default: { + break; + } } apply_desired = false; current_status = desired_status; } - //execute pending callbacks + // execute pending callbacks ros::spinOnce(); - //relax to fit output rate + // relax to fit output rate loop_rate.sleep(); } - //exit program + // exit program return 0; } -void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) -{ - if(apply_desired == true) +void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { + if (apply_desired == true) return; // in the middle of playing demo - if (current_status != Ready) - { - if (msg->data == "mode_long") - { + if (current_status != Ready) { + if (msg->data == "mode_long") { // go to mode selection status desired_status = Ready; apply_desired = true; playSound(default_mp3_path + "Demonstration ready mode.mp3"); setLED(0x01 | 0x02 | 0x04); - } - else if (msg->data == "user_long") - { + } else if (msg->data == "user_long") { // it's using in op3_manager // torque on and going to init pose } } // ready to start demo - else - { - if (msg->data == "start") - { + else { + if (msg->data == "start") { // select current demo - desired_status = (desired_status == Ready) ? desired_status + 1 : desired_status; + desired_status = + (desired_status == Ready) ? desired_status + 1 : desired_status; apply_desired = true; // sound out desired status - switch (desired_status) - { - case SoccerDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + "Start soccer demonstration.mp3"); - break; + switch (desired_status) { + case SoccerDemo: + dxlTorqueChecker(); + playSound(default_mp3_path + "Start soccer demonstration.mp3"); + break; - case VisionDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + "Start vision processing demonstration.mp3"); - break; + case VisionDemo: + dxlTorqueChecker(); + playSound(default_mp3_path + + "Start vision processing demonstration.mp3"); + break; - case ActionDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + "Start motion demonstration.mp3"); - break; + case ActionDemo: + dxlTorqueChecker(); + playSound(default_mp3_path + "Start motion demonstration.mp3"); + break; - default: - break; + default: + break; } ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } - else if (msg->data == "mode") - { + } else if (msg->data == "mode") { // change to next demo desired_status = (desired_status + 1) % DemoCount; - desired_status = (desired_status == Ready) ? desired_status + 1 : desired_status; + desired_status = + (desired_status == Ready) ? desired_status + 1 : desired_status; // sound out desired status and changing LED - switch (desired_status) - { - case SoccerDemo: - playSound(default_mp3_path + "Autonomous soccer mode.mp3"); - setLED(0x01); - break; + switch (desired_status) { + case SoccerDemo: + playSound(default_mp3_path + "Autonomous soccer mode.mp3"); + setLED(0x01); + break; - case VisionDemo: - playSound(default_mp3_path + "Vision processing mode.mp3"); - setLED(0x02); - break; + case VisionDemo: + playSound(default_mp3_path + "Vision processing mode.mp3"); + setLED(0x02); + break; - case ActionDemo: - playSound(default_mp3_path + "Interactive motion mode.mp3"); - setLED(0x04); - break; + case ActionDemo: + playSound(default_mp3_path + "Interactive motion mode.mp3"); + setLED(0x04); + break; - default: - break; + default: + break; } ROS_INFO_COND(DEBUG_PRINT, "= Demo Mode : %d", desired_status); @@ -268,24 +251,21 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) } } -void goInitPose() -{ +void goInitPose() { std_msgs::String init_msg; init_msg.data = "ini_pose"; init_pose_pub.publish(init_msg); } -void playSound(const std::string &path) -{ +void playSound(const std::string &path) { std_msgs::String sound_msg; sound_msg.data = path; play_sound_pub.publish(sound_msg); } -void setLED(int led) -{ +void setLED(int led) { robotis_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); @@ -294,13 +274,12 @@ void setLED(int led) led_pub.publish(syncwrite_msg); } -bool checkManagerRunning(std::string& manager_name) -{ +bool checkManagerRunning(std::string &manager_name) { std::vector node_list; ros::master::getNodes(node_list); - for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); node_list_idx++) - { + for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); + node_list_idx++) { if (node_list[node_list_idx] == manager_name) return true; } @@ -309,21 +288,17 @@ bool checkManagerRunning(std::string& manager_name) return false; } -void dxlTorqueChecker() -{ +void dxlTorqueChecker() { std_msgs::String check_msg; check_msg.data = "check"; dxl_torque_pub.publish(check_msg); } -void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) -{ +void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) { // In demo mode - if (current_status != Ready) - { - if (msg->data == "ready") - { + if (current_status != Ready) { + if (msg->data == "ready") { // go to mode selection status desired_status = Ready; apply_desired = true; @@ -333,10 +308,8 @@ void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) } } // In ready mode - else - { - if(msg->data == "soccer") - { + else { + if (msg->data == "soccer") { desired_status = SoccerDemo; apply_desired = true; @@ -344,9 +317,7 @@ void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) dxlTorqueChecker(); playSound(default_mp3_path + "Start soccer demonstration.mp3"); ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } - else if(msg->data == "vision") - { + } else if (msg->data == "vision") { desired_status = VisionDemo; apply_desired = true; @@ -354,9 +325,7 @@ void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) dxlTorqueChecker(); playSound(default_mp3_path + "Start vision processing demonstration.mp3"); ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } - else if(msg->data == "action") - { + } else if (msg->data == "action") { desired_status = ActionDemo; apply_desired = true; @@ -367,4 +336,3 @@ void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) } } } - diff --git a/op3_demo/src/soccer/ball_follower.cpp b/op3_demo/src/soccer/ball_follower.cpp index fdd0d20..f4ef1e0 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/op3_demo/src/soccer/ball_follower.cpp @@ -1,117 +1,91 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include "op3_demo/ball_follower.h" -namespace robotis_op -{ +namespace robotis_op { BallFollower::BallFollower() - : nh_(ros::this_node::getName()), - FOV_WIDTH(35.2 * M_PI / 180), - FOV_HEIGHT(21.6 * M_PI / 180), - count_not_found_(0), - count_to_kick_(0), - on_tracking_(false), - approach_ball_position_(NotFound), - kick_motion_index_(83), - CAMERA_HEIGHT(0.46), - NOT_FOUND_THRESHOLD(50), - MAX_FB_STEP(40.0 * 0.001), - MAX_RL_TURN(15.0 * M_PI / 180), - IN_PLACE_FB_STEP(-3.0 * 0.001), - MIN_FB_STEP(5.0 * 0.001), - MIN_RL_TURN(5.0 * M_PI / 180), - UNIT_FB_STEP(1.0 * 0.001), - UNIT_RL_TURN(0.5 * M_PI / 180), - SPOT_FB_OFFSET(0.0 * 0.001), - SPOT_RL_OFFSET(0.0 * 0.001), - SPOT_ANGLE_OFFSET(0.0), - hip_pitch_offset_(7.0), - current_pan_(-10), - current_tilt_(-10), - current_x_move_(0.005), - current_r_angle_(0), - curr_period_time_(0.6), - accum_period_time_(0.0), - DEBUG_PRINT(false) -{ - current_joint_states_sub_ = nh_.subscribe("/robotis/goal_joint_states", 10, &BallFollower::currentJointStatesCallback, - this); + : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), + FOV_HEIGHT(21.6 * M_PI / 180), count_not_found_(0), count_to_kick_(0), + on_tracking_(false), approach_ball_position_(NotFound), + kick_motion_index_(83), CAMERA_HEIGHT(0.46), NOT_FOUND_THRESHOLD(50), + MAX_FB_STEP(40.0 * 0.001), MAX_RL_TURN(15.0 * M_PI / 180), + IN_PLACE_FB_STEP(-3.0 * 0.001), MIN_FB_STEP(5.0 * 0.001), + MIN_RL_TURN(5.0 * M_PI / 180), UNIT_FB_STEP(1.0 * 0.001), + UNIT_RL_TURN(0.5 * M_PI / 180), SPOT_FB_OFFSET(0.0 * 0.001), + SPOT_RL_OFFSET(0.0 * 0.001), SPOT_ANGLE_OFFSET(0.0), + hip_pitch_offset_(7.0), current_pan_(-10), current_tilt_(-10), + current_x_move_(0.005), current_r_angle_(0), curr_period_time_(0.6), + accum_period_time_(0.0), DEBUG_PRINT(false) { + current_joint_states_sub_ = + nh_.subscribe("/robotis/goal_joint_states", 10, + &BallFollower::currentJointStatesCallback, this); - set_walking_command_pub_ = nh_.advertise("/robotis/walking/command", 0); - set_walking_param_pub_ = nh_.advertise("/robotis/walking/set_params", 0); - get_walking_param_client_ = nh_.serviceClient( - "/robotis/walking/get_params"); + set_walking_command_pub_ = + nh_.advertise("/robotis/walking/command", 0); + set_walking_param_pub_ = nh_.advertise( + "/robotis/walking/set_params", 0); + get_walking_param_client_ = + nh_.serviceClient( + "/robotis/walking/get_params"); prev_time_ = ros::Time::now(); } -BallFollower::~BallFollower() -{ +BallFollower::~BallFollower() {} -} - -void BallFollower::startFollowing() -{ +void BallFollower::startFollowing() { on_tracking_ = true; ROS_INFO("Start Ball following"); setWalkingCommand("start"); bool result = getWalkingParam(); - if (result == true) - { + if (result == true) { hip_pitch_offset_ = current_walking_param_.hip_pitch_offset; curr_period_time_ = current_walking_param_.period_time; - } - else - { + } else { hip_pitch_offset_ = 7.0 * M_PI / 180; curr_period_time_ = 0.6; } } -void BallFollower::stopFollowing() -{ +void BallFollower::stopFollowing() { on_tracking_ = false; // approach_ball_position_ = NotFound; count_to_kick_ = 0; -// accum_ball_position_ = 0; + // accum_ball_position_ = 0; ROS_INFO("Stop Ball following"); setWalkingCommand("stop"); } -void BallFollower::currentJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg) -{ +void BallFollower::currentJointStatesCallback( + const sensor_msgs::JointState::ConstPtr &msg) { double pan, tilt; int get_count = 0; - for (int ix = 0; ix < msg->name.size(); ix++) - { - if (msg->name[ix] == "head_pan") - { + for (int ix = 0; ix < msg->name.size(); ix++) { + if (msg->name[ix] == "head_pan") { pan = msg->position[ix]; get_count += 1; - } - else if (msg->name[ix] == "head_tilt") - { + } else if (msg->name[ix] == "head_tilt") { tilt = msg->position[ix]; get_count += 1; } @@ -125,9 +99,9 @@ void BallFollower::currentJointStatesCallback(const sensor_msgs::JointState::Con current_tilt_ = tilt; } -void BallFollower::calcFootstep(double target_distance, double target_angle, double delta_time, - double& fb_move, double& rl_angle) -{ +void BallFollower::calcFootstep(double target_distance, double target_angle, + double delta_time, double &fb_move, + double &rl_angle) { // clac fb double next_movement = current_x_move_; if (target_distance < 0) @@ -135,8 +109,7 @@ void BallFollower::calcFootstep(double target_distance, double target_angle, dou double fb_goal = fmin(target_distance * 0.1, MAX_FB_STEP); accum_period_time_ += delta_time; - if (accum_period_time_ > (curr_period_time_ / 4)) - { + if (accum_period_time_ > (curr_period_time_ / 4)) { accum_period_time_ = 0.0; if ((target_distance * 0.1 / 2) < current_x_move_) next_movement -= UNIT_FB_STEP; @@ -145,14 +118,14 @@ void BallFollower::calcFootstep(double target_distance, double target_angle, dou } fb_goal = fmin(next_movement, fb_goal); fb_move = fmax(fb_goal, MIN_FB_STEP); - ROS_INFO_COND(DEBUG_PRINT, "distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", target_distance, fb_move, - delta_time); + ROS_INFO_COND(DEBUG_PRINT, + "distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", + target_distance, fb_move, delta_time); ROS_INFO_COND(DEBUG_PRINT, "=============================================="); // calc rl angle double rl_goal = 0.0; - if (fabs(target_angle) * 180 / M_PI > 5.0) - { + if (fabs(target_angle) * 180 / M_PI > 5.0) { double rl_offset = fabs(target_angle) * 0.2; rl_goal = fmin(rl_offset, MAX_RL_TURN); rl_goal = fmax(rl_goal, MIN_RL_TURN); @@ -163,20 +136,20 @@ void BallFollower::calcFootstep(double target_distance, double target_angle, dou } } -// x_angle : ball position (pan), y_angle : ball position (tilt), ball_size : angle of ball radius -bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_size) -{ +// x_angle : ball position (pan), y_angle : ball position (tilt), ball_size : +// angle of ball radius +bool BallFollower::processFollowing(double x_angle, double y_angle, + double ball_size) { ros::Time curr_time = ros::Time::now(); ros::Duration dur = curr_time - prev_time_; double delta_time = dur.nsec * 0.000000001 + dur.sec; prev_time_ = curr_time; count_not_found_ = 0; -// int ball_position_sum = 0; + // int ball_position_sum = 0; // check of getting head joints angle - if (current_tilt_ == -10 && current_pan_ == -10) - { + if (current_tilt_ == -10 && current_pan_ == -10) { ROS_ERROR("Failed to get current angle of head joints."); setWalkingCommand("stop"); @@ -187,13 +160,18 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ ROS_INFO_COND(DEBUG_PRINT, " ============== Head | Ball ============== "); ROS_INFO_STREAM_COND(DEBUG_PRINT, - "== Head Pan : " << (current_pan_ * 180 / M_PI) << " | Ball X : " << (x_angle * 180 / M_PI)); + "== Head Pan : " << (current_pan_ * 180 / M_PI) + << " | Ball X : " + << (x_angle * 180 / M_PI)); ROS_INFO_STREAM_COND(DEBUG_PRINT, - "== Head Tilt : " << (current_tilt_ * 180 / M_PI) << " | Ball Y : " << (y_angle * 180 / M_PI)); + "== Head Tilt : " << (current_tilt_ * 180 / M_PI) + << " | Ball Y : " + << (y_angle * 180 / M_PI)); approach_ball_position_ = OutOfRange; - double distance_to_ball = CAMERA_HEIGHT * tan(M_PI * 0.5 + current_tilt_ - hip_pitch_offset_ - ball_size); + double distance_to_ball = CAMERA_HEIGHT * tan(M_PI * 0.5 + current_tilt_ - + hip_pitch_offset_ - ball_size); double ball_y_angle = (current_tilt_ + y_angle) * 180 / M_PI; double ball_x_angle = (current_pan_ + x_angle) * 180 / M_PI; @@ -201,53 +179,51 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ if (distance_to_ball < 0) distance_to_ball *= (-1); - //double distance_to_kick = 0.25; + // double distance_to_kick = 0.25; double distance_to_kick = 0.22; // check whether ball is correct position. - if ((distance_to_ball < distance_to_kick) && (fabs(ball_x_angle) < 25.0)) - { + if ((distance_to_ball < distance_to_kick) && (fabs(ball_x_angle) < 25.0)) { count_to_kick_ += 1; ROS_INFO_STREAM_COND(DEBUG_PRINT, - "head pan : " << (current_pan_ * 180 / M_PI) << " | ball pan : " << (x_angle * 180 / M_PI)); + "head pan : " << (current_pan_ * 180 / M_PI) + << " | ball pan : " + << (x_angle * 180 / M_PI)); ROS_INFO_STREAM_COND(DEBUG_PRINT, - "head tilt : " << (current_tilt_ * 180 / M_PI) << " | ball tilt : " << (y_angle * 180 / M_PI)); + "head tilt : " << (current_tilt_ * 180 / M_PI) + << " | ball tilt : " + << (y_angle * 180 / M_PI)); ROS_INFO_STREAM_COND(DEBUG_PRINT, "foot to kick : " << ball_x_angle); ROS_INFO("In range [%d | %d]", count_to_kick_, ball_x_angle); // ball queue -// if(ball_position_queue_.size() >= 5) -// ball_position_queue_.erase(ball_position_queue_.begin()); + // if(ball_position_queue_.size() >= 5) + // ball_position_queue_.erase(ball_position_queue_.begin()); -// ball_position_queue_.push_back((ball_x_angle > 0) ? 1 : -1); + // ball_position_queue_.push_back((ball_x_angle > 0) ? 1 : -1); - - if (count_to_kick_ > 20) - { + if (count_to_kick_ > 20) { setWalkingCommand("stop"); on_tracking_ = false; // check direction of the ball -// accum_ball_position_ = std::accumulate(ball_position_queue_.begin(), ball_position_queue_.end(), 0); + // accum_ball_position_ = + // std::accumulate(ball_position_queue_.begin(), + // ball_position_queue_.end(), 0); -// if (accum_ball_position_ > 0) - if (ball_x_angle > 0) - { - ROS_INFO_COND(DEBUG_PRINT, "Ready to kick : left"); // left + // if (accum_ball_position_ > 0) + if (ball_x_angle > 0) { + ROS_INFO_COND(DEBUG_PRINT, "Ready to kick : left"); // left approach_ball_position_ = OnLeft; - } - else - { - ROS_INFO_COND(DEBUG_PRINT, "Ready to kick : right"); // right + } else { + ROS_INFO_COND(DEBUG_PRINT, "Ready to kick : right"); // right approach_ball_position_ = OnRight; } return true; - } - else if (count_to_kick_ > 15) - { + } else if (count_to_kick_ > 15) { // if (ball_x_angle > 0) // accum_ball_position_ += 1; // else @@ -258,11 +234,9 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ return false; } - } - else - { + } else { count_to_kick_ = 0; -// accum_ball_position_ = NotFound; + // accum_ball_position_ = NotFound; } double fb_move = 0.0, rl_angle = 0.0; @@ -274,16 +248,15 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, double ball_ setWalkingParam(fb_move, 0, rl_angle); // for debug - //ROS_INFO("distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", distance_to_ball, fb_move, delta_time); + // ROS_INFO("distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", + // distance_to_ball, fb_move, delta_time); return false; } -void BallFollower::decideBallPositin(double x_angle, double y_angle) -{ +void BallFollower::decideBallPositin(double x_angle, double y_angle) { // check of getting head joints angle - if (current_tilt_ == -10 && current_pan_ == -10) - { + if (current_tilt_ == -10 && current_pan_ == -10) { approach_ball_position_ = NotFound; return; } @@ -296,19 +269,16 @@ void BallFollower::decideBallPositin(double x_angle, double y_angle) approach_ball_position_ = OnRight; } -void BallFollower::waitFollowing() -{ +void BallFollower::waitFollowing() { count_not_found_++; if (count_not_found_ > NOT_FOUND_THRESHOLD * 0.5) setWalkingParam(0.0, 0.0, 0.0); } -void BallFollower::setWalkingCommand(const std::string &command) -{ +void BallFollower::setWalkingCommand(const std::string &command) { // get param - if (command == "start") - { + if (command == "start") { getWalkingParam(); setWalkingParam(IN_PLACE_FB_STEP, 0, 0, true); } @@ -320,12 +290,13 @@ void BallFollower::setWalkingCommand(const std::string &command) ROS_INFO_STREAM_COND(DEBUG_PRINT, "Send Walking command : " << command); } -void BallFollower::setWalkingParam(double x_move, double y_move, double rotation_angle, bool balance) -{ +void BallFollower::setWalkingParam(double x_move, double y_move, + double rotation_angle, bool balance) { current_walking_param_.balance_enable = balance; current_walking_param_.x_move_amplitude = x_move + SPOT_FB_OFFSET; current_walking_param_.y_move_amplitude = y_move + SPOT_RL_OFFSET; - current_walking_param_.angle_move_amplitude = rotation_angle + SPOT_ANGLE_OFFSET; + current_walking_param_.angle_move_amplitude = + rotation_angle + SPOT_ANGLE_OFFSET; set_walking_param_pub_.publish(current_walking_param_); @@ -333,27 +304,21 @@ void BallFollower::setWalkingParam(double x_move, double y_move, double rotation current_r_angle_ = rotation_angle; } -bool BallFollower::getWalkingParam() -{ +bool BallFollower::getWalkingParam() { op3_walking_module_msgs::GetWalkingParam walking_param_msg; - if (get_walking_param_client_.call(walking_param_msg)) - { + if (get_walking_param_client_.call(walking_param_msg)) { current_walking_param_ = walking_param_msg.response.parameters; // update ui ROS_INFO_COND(DEBUG_PRINT, "Get walking parameters"); return true; - } - else - { + } else { ROS_ERROR("Fail to get walking parameters."); return false; } - -} - } +} // namespace robotis_op diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/op3_demo/src/soccer/ball_tracker.cpp index a1706ad..780613c 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/op3_demo/src/soccer/ball_tracker.cpp @@ -1,69 +1,61 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include "op3_demo/ball_tracker.h" -namespace robotis_op -{ +namespace robotis_op { BallTracker::BallTracker() - : nh_(ros::this_node::getName()), - FOV_WIDTH(35.2 * M_PI / 180), - FOV_HEIGHT(21.6 * M_PI / 180), - NOT_FOUND_THRESHOLD(50), - WAITING_THRESHOLD(5), - use_head_scan_(true), - count_not_found_(0), - on_tracking_(false), - current_ball_pan_(0), - current_ball_tilt_(0), - x_error_sum_(0), - y_error_sum_(0), - current_ball_bottom_(0), - tracking_status_(NotFound), - DEBUG_PRINT(false) -{ + : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), + FOV_HEIGHT(21.6 * M_PI / 180), NOT_FOUND_THRESHOLD(50), + WAITING_THRESHOLD(5), use_head_scan_(true), count_not_found_(0), + on_tracking_(false), current_ball_pan_(0), current_ball_tilt_(0), + x_error_sum_(0), y_error_sum_(0), current_ball_bottom_(0), + tracking_status_(NotFound), DEBUG_PRINT(false) { ros::NodeHandle param_nh("~"); p_gain_ = param_nh.param("p_gain", 0.4); i_gain_ = param_nh.param("i_gain", 0.0); d_gain_ = param_nh.param("d_gain", 0.0); - ROS_INFO_STREAM("Ball tracking Gain : " << p_gain_ << ", " << i_gain_ << ", " << d_gain_); + ROS_INFO_STREAM("Ball tracking Gain : " << p_gain_ << ", " << i_gain_ << ", " + << d_gain_); - head_joint_offset_pub_ = nh_.advertise("/robotis/head_control/set_joint_states_offset", 0); - head_joint_pub_ = nh_.advertise("/robotis/head_control/set_joint_states", 0); - head_scan_pub_ = nh_.advertise("/robotis/head_control/scan_command", 0); - // error_pub_ = nh_.advertise("/ball_tracker/errors", 0); + head_joint_offset_pub_ = nh_.advertise( + "/robotis/head_control/set_joint_states_offset", 0); + head_joint_pub_ = nh_.advertise( + "/robotis/head_control/set_joint_states", 0); + head_scan_pub_ = + nh_.advertise("/robotis/head_control/scan_command", 0); + // error_pub_ = + // nh_.advertise("/ball_tracker/errors", 0); - ball_position_sub_ = nh_.subscribe("/ball_detector_node/circle_set", 1, &BallTracker::ballPositionCallback, this); - ball_tracking_command_sub_ = nh_.subscribe("/ball_tracker/command", 1, &BallTracker::ballTrackerCommandCallback, - this); + ball_position_sub_ = nh_.subscribe("/ball_detector_node/circle_set", 1, + &BallTracker::ballPositionCallback, this); + ball_tracking_command_sub_ = + nh_.subscribe("/ball_tracker/command", 1, + &BallTracker::ballTrackerCommandCallback, this); } -BallTracker::~BallTracker() -{ +BallTracker::~BallTracker() {} -} - -void BallTracker::ballPositionCallback(const op3_ball_detector::CircleSetStamped::ConstPtr &msg) -{ - for (int idx = 0; idx < msg->circles.size(); idx++) - { +void BallTracker::ballPositionCallback( + const op3_ball_detector::CircleSetStamped::ConstPtr &msg) { + for (int idx = 0; idx < msg->circles.size(); idx++) { if (ball_position_.z >= msg->circles[idx].z) continue; @@ -71,18 +63,13 @@ void BallTracker::ballPositionCallback(const op3_ball_detector::CircleSetStamped } } -void BallTracker::ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg) -{ - if (msg->data == "start") - { +void BallTracker::ballTrackerCommandCallback( + const std_msgs::String::ConstPtr &msg) { + if (msg->data == "start") { startTracking(); - } - else if (msg->data == "stop") - { + } else if (msg->data == "stop") { stopTracking(); - } - else if (msg->data == "toggle_start") - { + } else if (msg->data == "toggle_start") { if (on_tracking_ == false) startTracking(); else @@ -90,14 +77,12 @@ void BallTracker::ballTrackerCommandCallback(const std_msgs::String::ConstPtr &m } } -void BallTracker::startTracking() -{ +void BallTracker::startTracking() { on_tracking_ = true; ROS_INFO_COND(DEBUG_PRINT, "Start Ball tracking"); } -void BallTracker::stopTracking() -{ +void BallTracker::stopTracking() { goInit(); on_tracking_ = false; @@ -109,47 +94,34 @@ void BallTracker::stopTracking() y_error_sum_ = 0; } -void BallTracker::setUsingHeadScan(bool use_scan) -{ - use_head_scan_ = use_scan; -} +void BallTracker::setUsingHeadScan(bool use_scan) { use_head_scan_ = use_scan; } -int BallTracker::processTracking() -{ +int BallTracker::processTracking() { int tracking_status = Found; - if (on_tracking_ == false) - { + if (on_tracking_ == false) { ball_position_.z = 0; count_not_found_ = 0; return NotFound; } // check ball position - if (ball_position_.z <= 0) - { + if (ball_position_.z <= 0) { count_not_found_++; - if (count_not_found_ < WAITING_THRESHOLD) - { - if(tracking_status_ == Found || tracking_status_ == Waiting) + if (count_not_found_ < WAITING_THRESHOLD) { + if (tracking_status_ == Found || tracking_status_ == Waiting) tracking_status = Waiting; else tracking_status = NotFound; - } - else if (count_not_found_ > NOT_FOUND_THRESHOLD) - { + } else if (count_not_found_ > NOT_FOUND_THRESHOLD) { scanBall(); count_not_found_ = 0; tracking_status = NotFound; - } - else - { + } else { tracking_status = NotFound; } - } - else - { + } else { count_not_found_ = 0; } @@ -159,8 +131,7 @@ int BallTracker::processTracking() // offset_rad : top-left(+, +), bottom-right(-, -) double x_error = 0.0, y_error = 0.0, ball_size = 0.0; - switch (tracking_status) - { + switch (tracking_status) { case NotFound: tracking_status_ = tracking_status; current_ball_pan_ = 0; @@ -183,9 +154,15 @@ int BallTracker::processTracking() break; } - ROS_INFO_STREAM_COND(DEBUG_PRINT, "--------------------------------------------------------------"); - ROS_INFO_STREAM_COND(DEBUG_PRINT, "Ball position : " << ball_position_.x << " | " << ball_position_.y); - ROS_INFO_STREAM_COND(DEBUG_PRINT, "Target angle : " << (x_error * 180 / M_PI) << " | " << (y_error * 180 / M_PI)); + ROS_INFO_STREAM_COND( + DEBUG_PRINT, + "--------------------------------------------------------------"); + ROS_INFO_STREAM_COND(DEBUG_PRINT, "Ball position : " << ball_position_.x + << " | " + << ball_position_.y); + ROS_INFO_STREAM_COND(DEBUG_PRINT, + "Target angle : " << (x_error * 180 / M_PI) << " | " + << (y_error * 180 / M_PI)); ros::Time curr_time = ros::Time::now(); ros::Duration dur = curr_time - prev_time_; @@ -196,8 +173,10 @@ int BallTracker::processTracking() double y_error_diff = (y_error - current_ball_tilt_) / delta_time; x_error_sum_ += x_error; y_error_sum_ += y_error; - double x_error_target = x_error * p_gain_ + x_error_diff * d_gain_ + x_error_sum_ * i_gain_; - double y_error_target = y_error * p_gain_ + y_error_diff * d_gain_ + y_error_sum_ * i_gain_; + double x_error_target = + x_error * p_gain_ + x_error_diff * d_gain_ + x_error_sum_ * i_gain_; + double y_error_target = + y_error * p_gain_ + y_error_diff * d_gain_ + y_error_sum_ * i_gain_; // std_msgs::Float64MultiArray x_error_msg; // x_error_msg.data.push_back(x_error); @@ -209,17 +188,25 @@ int BallTracker::processTracking() // x_error_msg.data.push_back(x_error_target); // error_pub_.publish(x_error_msg); - ROS_INFO_STREAM_COND(DEBUG_PRINT, "------------------------ " << tracking_status << " --------------------------------------"); - ROS_INFO_STREAM_COND(DEBUG_PRINT, "error : " << (x_error * 180 / M_PI) << " | " << (y_error * 180 / M_PI)); + ROS_INFO_STREAM_COND(DEBUG_PRINT, + "------------------------ " + << tracking_status + << " --------------------------------------"); + ROS_INFO_STREAM_COND(DEBUG_PRINT, + "error : " << (x_error * 180 / M_PI) << " | " + << (y_error * 180 / M_PI)); + ROS_INFO_STREAM_COND(DEBUG_PRINT, "error_diff : " + << (x_error_diff * 180 / M_PI) << " | " + << (y_error_diff * 180 / M_PI) << " | " + << delta_time); + ROS_INFO_STREAM_COND(DEBUG_PRINT, + "error_sum : " << (x_error_sum_ * 180 / M_PI) << " | " + << (y_error_sum_ * 180 / M_PI)); ROS_INFO_STREAM_COND( - DEBUG_PRINT, - "error_diff : " << (x_error_diff * 180 / M_PI) << " | " << (y_error_diff * 180 / M_PI) << " | " << delta_time); - ROS_INFO_STREAM_COND( - DEBUG_PRINT, - "error_sum : " << (x_error_sum_ * 180 / M_PI) << " | " << (y_error_sum_ * 180 / M_PI)); - ROS_INFO_STREAM_COND( - DEBUG_PRINT, - "error_target : " << (x_error_target * 180 / M_PI) << " | " << (y_error_target * 180 / M_PI) << " | P : " << p_gain_ << " | D : " << d_gain_ << " | time : " << delta_time); + DEBUG_PRINT, "error_target : " << (x_error_target * 180 / M_PI) << " | " + << (y_error_target * 180 / M_PI) + << " | P : " << p_gain_ << " | D : " + << d_gain_ << " | time : " << delta_time); // move head joint publishHeadJoint(x_error_target, y_error_target); @@ -235,8 +222,7 @@ int BallTracker::processTracking() return tracking_status; } -void BallTracker::publishHeadJoint(double pan, double tilt) -{ +void BallTracker::publishHeadJoint(double pan, double tilt) { double min_angle = 1 * M_PI / 180; if (fabs(pan) < min_angle && fabs(tilt) < min_angle) return; @@ -252,8 +238,7 @@ void BallTracker::publishHeadJoint(double pan, double tilt) head_joint_offset_pub_.publish(head_angle_msg); } -void BallTracker::goInit() -{ +void BallTracker::goInit() { sensor_msgs::JointState head_angle_msg; head_angle_msg.name.push_back("head_pan"); @@ -265,8 +250,7 @@ void BallTracker::goInit() head_joint_pub_.publish(head_angle_msg); } -void BallTracker::scanBall() -{ +void BallTracker::scanBall() { if (use_head_scan_ == false) return; @@ -280,5 +264,4 @@ void BallTracker::scanBall() head_scan_pub_.publish(scan_msg); } -} - +} // namespace robotis_op diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/op3_demo/src/soccer/soccer_demo.cpp index 6389e15..3951b28 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/op3_demo/src/soccer/soccer_demo.cpp @@ -1,73 +1,61 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include "op3_demo/soccer_demo.h" -namespace robotis_op -{ +namespace robotis_op { SoccerDemo::SoccerDemo() - : FALL_FORWARD_LIMIT(60), - FALL_BACK_LIMIT(-60), - SPIN_RATE(30), - DEBUG_PRINT(false), - wait_count_(0), - on_following_ball_(false), - on_tracking_ball_(false), - restart_soccer_(false), - start_following_(false), - stop_following_(false), - stop_fallen_check_(false), - robot_status_(Waited), - stand_state_(Stand), - tracking_status_(BallTracker::Waiting), - present_pitch_(0) -{ - //init ros + : FALL_FORWARD_LIMIT(60), FALL_BACK_LIMIT(-60), SPIN_RATE(30), + DEBUG_PRINT(false), wait_count_(0), on_following_ball_(false), + on_tracking_ball_(false), restart_soccer_(false), start_following_(false), + stop_following_(false), stop_fallen_check_(false), robot_status_(Waited), + stand_state_(Stand), tracking_status_(BallTracker::Waiting), + present_pitch_(0) { + // init ros enable_ = false; ros::NodeHandle nh(ros::this_node::getName()); - std::string default_path = ros::package::getPath("op3_gui_demo") + "/config/gui_config.yaml"; + std::string default_path = + ros::package::getPath("op3_gui_demo") + "/config/gui_config.yaml"; std::string path = nh.param("demo_config", default_path); parseJointNameFromYaml(path); - boost::thread queue_thread = boost::thread(boost::bind(&SoccerDemo::callbackThread, this)); - boost::thread process_thread = boost::thread(boost::bind(&SoccerDemo::processThread, this)); - boost::thread tracking_thread = boost::thread(boost::bind(&SoccerDemo::trackingThread, this)); + boost::thread queue_thread = + boost::thread(boost::bind(&SoccerDemo::callbackThread, this)); + boost::thread process_thread = + boost::thread(boost::bind(&SoccerDemo::processThread, this)); + boost::thread tracking_thread = + boost::thread(boost::bind(&SoccerDemo::trackingThread, this)); is_grass_ = nh.param("grass_demo", false); } -SoccerDemo::~SoccerDemo() -{ +SoccerDemo::~SoccerDemo() {} -} - -void SoccerDemo::setDemoEnable() -{ +void SoccerDemo::setDemoEnable() { enable_ = true; startSoccerMode(); } -void SoccerDemo::setDemoDisable() -{ +void SoccerDemo::setDemoDisable() { // handle disable procedure ball_tracker_.stopTracking(); ball_follower_.stopFollowing(); @@ -84,14 +72,12 @@ void SoccerDemo::setDemoDisable() tracking_status_ = BallTracker::Waiting; } -void SoccerDemo::process() -{ - if(enable_ == false) +void SoccerDemo::process() { + if (enable_ == false) return; // check to start - if (start_following_ == true) - { + if (start_following_ == true) { ball_tracker_.startTracking(); ball_follower_.startFollowing(); start_following_ = false; @@ -100,8 +86,7 @@ void SoccerDemo::process() } // check to stop - if (stop_following_ == true) - { + if (stop_following_ == true) { ball_tracker_.stopTracking(); ball_follower_.stopFollowing(); stop_following_ = false; @@ -109,15 +94,13 @@ void SoccerDemo::process() wait_count_ = 0; } - if (wait_count_ <= 0) - { + if (wait_count_ <= 0) { // ball following - if (on_following_ball_ == true) - { - switch(tracking_status_) - { + if (on_following_ball_ == true) { + switch (tracking_status_) { case BallTracker::Found: - ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall(), 0.0); + ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), + ball_tracker_.getTiltOfBall(), 0.0); break; case BallTracker::NotFound: @@ -130,119 +113,113 @@ void SoccerDemo::process() } // check fallen states - switch (stand_state_) - { - case Stand: - { + switch (stand_state_) { + case Stand: { // check restart soccer - if (restart_soccer_ == true) - { + if (restart_soccer_ == true) { restart_soccer_ = false; startSoccerMode(); break; } // check states for kick -// int ball_position = ball_follower_.getBallPosition(); + // int ball_position = ball_follower_.getBallPosition(); bool in_range = ball_follower_.isBallInRange(); - if(in_range == true) - { + if (in_range == true) { ball_follower_.stopFollowing(); handleKick(); } break; } // fallen state : Fallen_Forward, Fallen_Behind - default: - { + default: { ball_follower_.stopFollowing(); handleFallen(stand_state_); break; } } - } - else - { + } else { wait_count_ -= 1; } } -void SoccerDemo::processThread() -{ +void SoccerDemo::processThread() { bool result = false; - //set node loop rate + // set node loop rate ros::Rate loop_rate(SPIN_RATE); ball_tracker_.startTracking(); - //node loop - while (ros::ok()) - { + // node loop + while (ros::ok()) { if (enable_ == true) process(); - //relax to fit output rate + // relax to fit output rate loop_rate.sleep(); } } -void SoccerDemo::callbackThread() -{ +void SoccerDemo::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - module_control_pub_ = nh.advertise("/robotis/set_joint_ctrl_modules", 0); - motion_index_pub_ = nh.advertise("/robotis/action/page_num", 0); - rgb_led_pub_ = nh.advertise("/robotis/sync_write_item", 0); + module_control_pub_ = nh.advertise( + "/robotis/set_joint_ctrl_modules", 0); + motion_index_pub_ = + nh.advertise("/robotis/action/page_num", 0); + rgb_led_pub_ = nh.advertise( + "/robotis/sync_write_item", 0); - buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &SoccerDemo::buttonHandlerCallback, this); - demo_command_sub_ = nh.subscribe("/robotis/demo_command", 1, &SoccerDemo::demoCommandCallback, this); - imu_data_sub_ = nh.subscribe("/robotis/open_cr/imu", 1, &SoccerDemo::imuDataCallback, this); + buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, + &SoccerDemo::buttonHandlerCallback, this); + demo_command_sub_ = nh.subscribe("/robotis/demo_command", 1, + &SoccerDemo::demoCommandCallback, this); + imu_data_sub_ = nh.subscribe("/robotis/open_cr/imu", 1, + &SoccerDemo::imuDataCallback, this); - is_running_client_ = nh.serviceClient("/robotis/action/is_running"); - set_joint_module_client_ = nh.serviceClient("/robotis/set_present_joint_ctrl_modules"); + is_running_client_ = nh.serviceClient( + "/robotis/action/is_running"); + set_joint_module_client_ = + nh.serviceClient( + "/robotis/set_present_joint_ctrl_modules"); test_pub_ = nh.advertise("/debug_text", 0); - while (nh.ok()) - { + while (nh.ok()) { ros::spinOnce(); usleep(1000); } } -void SoccerDemo::trackingThread() -{ +void SoccerDemo::trackingThread() { - //set node loop rate + // set node loop rate ros::Rate loop_rate(SPIN_RATE); ball_tracker_.startTracking(); - //node loop - while (ros::ok()) - { + // node loop + while (ros::ok()) { - if(enable_ == true && on_tracking_ball_ == true) - { + if (enable_ == true && on_tracking_ball_ == true) { // ball tracking int tracking_status; tracking_status = ball_tracker_.processTracking(); // set led - switch(tracking_status) - { + switch (tracking_status) { case BallTracker::Found: - if(tracking_status_ != tracking_status) + if (tracking_status_ != tracking_status) setRGBLED(0x1F, 0x1F, 0x1F); break; case BallTracker::NotFound: - if(tracking_status_ != tracking_status) + if (tracking_status_ != tracking_status) setRGBLED(0, 0, 0); break; @@ -250,36 +227,31 @@ void SoccerDemo::trackingThread() break; } - if(tracking_status != tracking_status_) + if (tracking_status != tracking_status_) tracking_status_ = tracking_status; } - //relax to fit output rate + // relax to fit output rate loop_rate.sleep(); } } -void SoccerDemo::setBodyModuleToDemo(const std::string &body_module, bool with_head_control) -{ +void SoccerDemo::setBodyModuleToDemo(const std::string &body_module, + bool with_head_control) { robotis_controller_msgs::JointCtrlModule control_msg; std::string head_module = "head_control_module"; std::map::iterator joint_iter; - for (joint_iter = id_joint_table_.begin(); joint_iter != id_joint_table_.end(); ++joint_iter) - { + for (joint_iter = id_joint_table_.begin(); + joint_iter != id_joint_table_.end(); ++joint_iter) { // check whether joint name contains "head" - if (joint_iter->second.find("head") != std::string::npos) - { - if (with_head_control == true) - { + if (joint_iter->second.find("head") != std::string::npos) { + if (with_head_control == true) { control_msg.joint_name.push_back(joint_iter->second); control_msg.module_name.push_back(head_module); - } - else + } else continue; - } - else - { + } else { control_msg.joint_name.push_back(joint_iter->second); control_msg.module_name.push_back(body_module); } @@ -293,16 +265,15 @@ void SoccerDemo::setBodyModuleToDemo(const std::string &body_module, bool with_h std::cout << "enable module of body : " << body_module << std::endl; } -void SoccerDemo::setModuleToDemo(const std::string &module_name) -{ - if(enable_ == false) +void SoccerDemo::setModuleToDemo(const std::string &module_name) { + if (enable_ == false) return; robotis_controller_msgs::JointCtrlModule control_msg; std::map::iterator joint_iter; - for (joint_iter = id_joint_table_.begin(); joint_iter != id_joint_table_.end(); ++joint_iter) - { + for (joint_iter = id_joint_table_.begin(); + joint_iter != id_joint_table_.end(); ++joint_iter) { control_msg.joint_name.push_back(joint_iter->second); control_msg.module_name.push_back(module_name); } @@ -315,38 +286,34 @@ void SoccerDemo::setModuleToDemo(const std::string &module_name) std::cout << "enable module : " << module_name << std::endl; } -void SoccerDemo::callServiceSettingModule(const robotis_controller_msgs::JointCtrlModule &modules) -{ +void SoccerDemo::callServiceSettingModule( + const robotis_controller_msgs::JointCtrlModule &modules) { robotis_controller_msgs::SetJointModule set_joint_srv; set_joint_srv.request.joint_name = modules.joint_name; set_joint_srv.request.module_name = modules.module_name; - if (set_joint_module_client_.call(set_joint_srv) == false) - { + if (set_joint_module_client_.call(set_joint_srv) == false) { ROS_ERROR("Failed to set module"); return; } - return ; + return; } -void SoccerDemo::parseJointNameFromYaml(const std::string &path) -{ +void SoccerDemo::parseJointNameFromYaml(const std::string &path) { YAML::Node doc; - try - { + try { // load yaml doc = YAML::LoadFile(path.c_str()); - } catch (const std::exception& e) - { + } catch (const std::exception &e) { ROS_ERROR("Fail to load id_joint table yaml."); return; } // parse id_joint table YAML::Node _id_sub_node = doc["id_joint"]; - for (YAML::iterator _it = _id_sub_node.begin(); _it != _id_sub_node.end(); ++_it) - { + for (YAML::iterator _it = _id_sub_node.begin(); _it != _id_sub_node.end(); + ++_it) { int _id; std::string _joint_name; @@ -359,8 +326,7 @@ void SoccerDemo::parseJointNameFromYaml(const std::string &path) } // joint id -> joint name -bool SoccerDemo::getJointNameFromID(const int &id, std::string &joint_name) -{ +bool SoccerDemo::getJointNameFromID(const int &id, std::string &joint_name) { std::map::iterator _iter; _iter = id_joint_table_.find(id); @@ -372,8 +338,7 @@ bool SoccerDemo::getJointNameFromID(const int &id, std::string &joint_name) } // joint name -> joint id -bool SoccerDemo::getIDFromJointName(const std::string &joint_name, int &id) -{ +bool SoccerDemo::getIDFromJointName(const std::string &joint_name, int &id) { std::map::iterator _iter; _iter = joint_id_table_.find(joint_name); @@ -384,17 +349,13 @@ bool SoccerDemo::getIDFromJointName(const std::string &joint_name, int &id) return true; } -int SoccerDemo::getJointCount() -{ - return joint_id_table_.size(); -} +int SoccerDemo::getJointCount() { return joint_id_table_.size(); } -bool SoccerDemo::isHeadJoint(const int &id) -{ +bool SoccerDemo::isHeadJoint(const int &id) { std::map::iterator _iter; - for (_iter = joint_id_table_.begin(); _iter != joint_id_table_.end(); ++_iter) - { + for (_iter = joint_id_table_.begin(); _iter != joint_id_table_.end(); + ++_iter) { if (_iter->first.find("head") != std::string::npos) return true; } @@ -402,13 +363,11 @@ bool SoccerDemo::isHeadJoint(const int &id) return false; } -void SoccerDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) -{ +void SoccerDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { if (enable_ == false) return; - if (msg->data == "start") - { + if (msg->data == "start") { if (on_following_ball_ == true) stopSoccerMode(); else @@ -416,38 +375,36 @@ void SoccerDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) } } -void SoccerDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) -{ +void SoccerDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) { if (enable_ == false) return; - if (msg->data == "start") - { + if (msg->data == "start") { if (on_following_ball_ == true) stopSoccerMode(); else startSoccerMode(); - } - else if (msg->data == "stop") - { + } else if (msg->data == "stop") { stopSoccerMode(); } } // check fallen states -void SoccerDemo::imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg) -{ +void SoccerDemo::imuDataCallback(const sensor_msgs::Imu::ConstPtr &msg) { if (enable_ == false) return; if (stop_fallen_check_ == true) return; - Eigen::Quaterniond orientation(msg->orientation.w, msg->orientation.x, msg->orientation.y, msg->orientation.z); - Eigen::MatrixXd rpy_orientation = robotis_framework::convertQuaternionToRPY(orientation); + Eigen::Quaterniond orientation(msg->orientation.w, msg->orientation.x, + msg->orientation.y, msg->orientation.z); + Eigen::MatrixXd rpy_orientation = + robotis_framework::convertQuaternionToRPY(orientation); rpy_orientation *= (180 / M_PI); - ROS_INFO_COND(DEBUG_PRINT, "Roll : %3.2f, Pitch : %2.2f", rpy_orientation.coeff(0, 0), rpy_orientation.coeff(1, 0)); + ROS_INFO_COND(DEBUG_PRINT, "Roll : %3.2f, Pitch : %2.2f", + rpy_orientation.coeff(0, 0), rpy_orientation.coeff(1, 0)); double pitch = rpy_orientation.coeff(1, 0); @@ -465,8 +422,7 @@ void SoccerDemo::imuDataCallback(const sensor_msgs::Imu::ConstPtr& msg) stand_state_ = Stand; } -void SoccerDemo::startSoccerMode() -{ +void SoccerDemo::startSoccerMode() { setModuleToDemo("action_module"); playMotion(WalkingReady); @@ -479,16 +435,14 @@ void SoccerDemo::startSoccerMode() start_following_ = true; } -void SoccerDemo::stopSoccerMode() -{ +void SoccerDemo::stopSoccerMode() { ROS_INFO("Stop Soccer Demo"); on_following_ball_ = false; on_tracking_ball_ = false; stop_following_ = true; } -void SoccerDemo::handleKick(int ball_position) -{ +void SoccerDemo::handleKick(int ball_position) { usleep(1500 * 1000); // change to motion module @@ -498,8 +452,7 @@ void SoccerDemo::handleKick(int ball_position) return; // kick motion - switch (ball_position) - { + switch (ball_position) { case robotis_op::BallFollower::OnRight: std::cout << "Kick Motion [R]: " << ball_position << std::endl; playMotion(is_grass_ ? RightKick + ForGrass : RightKick); @@ -525,11 +478,10 @@ void SoccerDemo::handleKick(int ball_position) return; // ceremony - //playMotion(Ceremony); + // playMotion(Ceremony); } -void SoccerDemo::handleKick() -{ +void SoccerDemo::handleKick() { usleep(1500 * 1000); // change to motion module @@ -539,10 +491,11 @@ void SoccerDemo::handleKick() return; // kick motion - ball_follower_.decideBallPositin(ball_tracker_.getPanOfBall(), ball_tracker_.getTiltOfBall()); + ball_follower_.decideBallPositin(ball_tracker_.getPanOfBall(), + ball_tracker_.getTiltOfBall()); int ball_position = ball_follower_.getBallPosition(); - if(ball_position == BallFollower::NotFound || ball_position == BallFollower::OutOfRange) - { + if (ball_position == BallFollower::NotFound || + ball_position == BallFollower::OutOfRange) { on_following_ball_ = false; restart_soccer_ = true; tracking_status_ = BallTracker::NotFound; @@ -550,8 +503,7 @@ void SoccerDemo::handleKick() return; } - switch (ball_position) - { + switch (ball_position) { case robotis_op::BallFollower::OnRight: std::cout << "Kick Motion [R]: " << ball_position << std::endl; sendDebugTopic("Kick the ball using Right foot"); @@ -579,13 +531,11 @@ void SoccerDemo::handleKick() return; // ceremony - //playMotion(Ceremony); + // playMotion(Ceremony); } -bool SoccerDemo::handleFallen(int fallen_status) -{ - if (fallen_status == Stand) - { +bool SoccerDemo::handleFallen(int fallen_status) { + if (fallen_status == Stand) { return false; } @@ -593,8 +543,7 @@ bool SoccerDemo::handleFallen(int fallen_status) setModuleToDemo("action_module"); // getup motion - switch (fallen_status) - { + switch (fallen_status) { case Fallen_Forward: std::cout << "Getup Motion [F]: " << std::endl; playMotion(is_grass_ ? GetUpFront + ForGrass : GetUpFront); @@ -609,7 +558,7 @@ bool SoccerDemo::handleFallen(int fallen_status) break; } - while(isActionRunning() == true) + while (isActionRunning() == true) usleep(100 * 1000); usleep(650 * 1000); @@ -623,18 +572,17 @@ bool SoccerDemo::handleFallen(int fallen_status) return true; } -void SoccerDemo::playMotion(int motion_index) -{ +void SoccerDemo::playMotion(int motion_index) { std_msgs::Int32 motion_msg; motion_msg.data = motion_index; motion_index_pub_.publish(motion_msg); } -void SoccerDemo::setRGBLED(int blue, int green, int red) -{ +void SoccerDemo::setRGBLED(int blue, int green, int red) { int led_full_unit = 0x1F; - int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); + int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | + (red & led_full_unit); robotis_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED_RGB"; syncwrite_msg.joint_name.push_back("open-cr"); @@ -644,19 +592,14 @@ void SoccerDemo::setRGBLED(int blue, int green, int red) } // check running of action -bool SoccerDemo::isActionRunning() -{ +bool SoccerDemo::isActionRunning() { op3_action_module_msgs::IsRunning is_running_srv; - if (is_running_client_.call(is_running_srv) == false) - { + if (is_running_client_.call(is_running_srv) == false) { ROS_ERROR("Failed to get action status"); return true; - } - else - { - if (is_running_srv.response.is_running == true) - { + } else { + if (is_running_srv.response.is_running == true) { return true; } } @@ -664,12 +607,11 @@ bool SoccerDemo::isActionRunning() return false; } -void SoccerDemo::sendDebugTopic(const std::string &msgs) -{ +void SoccerDemo::sendDebugTopic(const std::string &msgs) { std_msgs::String debug_msg; debug_msg.data = msgs; test_pub_.publish(debug_msg); } -} +} // namespace robotis_op diff --git a/op3_demo/src/test/button_test.cpp b/op3_demo/src/test/button_test.cpp index 7a78c6a..20049f3 100644 --- a/op3_demo/src/test/button_test.cpp +++ b/op3_demo/src/test/button_test.cpp @@ -1,90 +1,76 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include "op3_demo/button_test.h" -namespace robotis_op -{ +namespace robotis_op { -ButtonTest::ButtonTest() - : SPIN_RATE(30), - led_count_(0), - rgb_led_count_(0) -{ +ButtonTest::ButtonTest() : SPIN_RATE(30), led_count_(0), rgb_led_count_(0) { enable_ = false; ros::NodeHandle nh(ros::this_node::getName()); - boost::thread queue_thread = boost::thread(boost::bind(&ButtonTest::callbackThread, this)); - boost::thread process_thread = boost::thread(boost::bind(&ButtonTest::processThread, this)); + boost::thread queue_thread = + boost::thread(boost::bind(&ButtonTest::callbackThread, this)); + boost::thread process_thread = + boost::thread(boost::bind(&ButtonTest::processThread, this)); default_mp3_path_ = ros::package::getPath("op3_demo") + "/data/mp3/test/"; } -ButtonTest::~ButtonTest() -{ -} +ButtonTest::~ButtonTest() {} -void ButtonTest::setDemoEnable() -{ +void ButtonTest::setDemoEnable() { enable_ = true; ROS_INFO("Start Button Test"); } -void ButtonTest::setDemoDisable() -{ - enable_ = false; -} +void ButtonTest::setDemoDisable() { enable_ = false; } -void ButtonTest::process() -{ +void ButtonTest::process() {} -} - -void ButtonTest::processThread() -{ - //set node loop rate +void ButtonTest::processThread() { + // set node loop rate ros::Rate loop_rate(SPIN_RATE); - //node loop - while (ros::ok()) - { + // node loop + while (ros::ok()) { if (enable_ == true) process(); - //relax to fit output rate + // relax to fit output rate loop_rate.sleep(); } } -void ButtonTest::callbackThread() -{ +void ButtonTest::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - rgb_led_pub_ = nh.advertise("/robotis/sync_write_item", 0); + rgb_led_pub_ = nh.advertise( + "/robotis/sync_write_item", 0); play_sound_pub_ = nh.advertise("/play_sound_file", 0); - buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &ButtonTest::buttonHandlerCallback, this); + buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, + &ButtonTest::buttonHandlerCallback, this); - while (nh.ok()) - { + while (nh.ok()) { ros::spinOnce(); usleep(1 * 1000); @@ -92,48 +78,37 @@ void ButtonTest::callbackThread() } // button test -void ButtonTest::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) -{ +void ButtonTest::buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { if (enable_ == false) return; - if (msg->data == "mode") - { + if (msg->data == "mode") { playSound(default_mp3_path_ + "Mode button pressed.mp3"); - } - else if (msg->data == "start") - { + } else if (msg->data == "start") { // RGB led color test playSound(default_mp3_path_ + "Start button pressed.mp3"); - int rgb_selector[3] = { 1, 0, 0 }; - setRGBLED((0x1F * rgb_selector[rgb_led_count_ % 3]), (0x1F * rgb_selector[(rgb_led_count_ + 1) % 3]), + int rgb_selector[3] = {1, 0, 0}; + setRGBLED((0x1F * rgb_selector[rgb_led_count_ % 3]), + (0x1F * rgb_selector[(rgb_led_count_ + 1) % 3]), (0x1F * rgb_selector[(rgb_led_count_ + 2) % 3])); rgb_led_count_ += 1; - } - else if (msg->data == "user") - { + } else if (msg->data == "user") { // Monochromatic led color test playSound(default_mp3_path_ + "User button pressed.mp3"); setLED(0x01 << (led_count_++ % 3)); - } - else if (msg->data == "mode_long") - { + } else if (msg->data == "mode_long") { playSound(default_mp3_path_ + "Mode button long pressed.mp3"); - } - else if (msg->data == "start_long") - { + } else if (msg->data == "start_long") { playSound(default_mp3_path_ + "Start button long pressed.mp3"); - } - else if (msg->data == "user_long") - { + } else if (msg->data == "user_long") { playSound(default_mp3_path_ + "User button long pressed.mp3"); } } -void ButtonTest::setRGBLED(int blue, int green, int red) -{ +void ButtonTest::setRGBLED(int blue, int green, int red) { int led_full_unit = 0x1F; - int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); + int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | + (red & led_full_unit); robotis_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED_RGB"; syncwrite_msg.joint_name.push_back("open-cr"); @@ -142,8 +117,7 @@ void ButtonTest::setRGBLED(int blue, int green, int red) rgb_led_pub_.publish(syncwrite_msg); } -void ButtonTest::setLED(int led) -{ +void ButtonTest::setLED(int led) { robotis_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); @@ -152,8 +126,7 @@ void ButtonTest::setLED(int led) rgb_led_pub_.publish(syncwrite_msg); } -void ButtonTest::playSound(const std::string &path) -{ +void ButtonTest::playSound(const std::string &path) { std_msgs::String sound_msg; sound_msg.data = path; diff --git a/op3_demo/src/test/mic_test.cpp b/op3_demo/src/test/mic_test.cpp index 4e56954..61bc1ea 100644 --- a/op3_demo/src/test/mic_test.cpp +++ b/op3_demo/src/test/mic_test.cpp @@ -1,53 +1,47 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include "op3_demo/mic_test.h" -namespace robotis_op -{ +namespace robotis_op { MicTest::MicTest() - : SPIN_RATE(30), - is_wait_(false), - wait_time_(-1), - test_status_(Ready), - record_pid_(-1), - play_pid_(-1) -{ + : SPIN_RATE(30), is_wait_(false), wait_time_(-1), test_status_(Ready), + record_pid_(-1), play_pid_(-1) { enable_ = false; ros::NodeHandle nh(ros::this_node::getName()); - boost::thread queue_thread = boost::thread(boost::bind(&MicTest::callbackThread, this)); - boost::thread process_thread = boost::thread(boost::bind(&MicTest::processThread, this)); + boost::thread queue_thread = + boost::thread(boost::bind(&MicTest::callbackThread, this)); + boost::thread process_thread = + boost::thread(boost::bind(&MicTest::processThread, this)); - recording_file_name_ = ros::package::getPath("op3_demo") + "/data/mp3/test/mic-test.wav"; + recording_file_name_ = + ros::package::getPath("op3_demo") + "/data/mp3/test/mic-test.wav"; default_mp3_path_ = ros::package::getPath("op3_demo") + "/data/mp3/test/"; start_time_ = ros::Time::now(); } -MicTest::~MicTest() -{ -} +MicTest::~MicTest() {} -void MicTest::setDemoEnable() -{ +void MicTest::setDemoEnable() { wait_time_ = -1; test_status_ = AnnounceRecording; enable_ = true; @@ -55,125 +49,108 @@ void MicTest::setDemoEnable() ROS_INFO("Start Mic test Demo"); } -void MicTest::setDemoDisable() -{ +void MicTest::setDemoDisable() { finishTimer(); test_status_ = Ready; enable_ = false; } -void MicTest::process() -{ +void MicTest::process() { // check status // timer - if (wait_time_ > 0) - { + if (wait_time_ > 0) { ros::Duration dur = ros::Time::now() - start_time_; // check timer - if (dur.sec >= wait_time_) - { + if (dur.sec >= wait_time_) { finishTimer(); } - } - else if (wait_time_ == -1.0) - { + } else if (wait_time_ == -1.0) { // handle test process - switch (test_status_) - { - case Ready: - // do nothing - break; + switch (test_status_) { + case Ready: + // do nothing + break; - case AnnounceRecording: - announceTest(); - test_status_ = MicRecording; - break; + case AnnounceRecording: + announceTest(); + test_status_ = MicRecording; + break; - case MicRecording: - recordSound(); - test_status_ = PlayingSound; - break; + case MicRecording: + recordSound(); + test_status_ = PlayingSound; + break; - case PlayingSound: - playTestSound(recording_file_name_); - test_status_ = DeleteTempFile; - break; + case PlayingSound: + playTestSound(recording_file_name_); + test_status_ = DeleteTempFile; + break; - case DeleteTempFile: - deleteSoundFile(recording_file_name_); - test_status_ = Ready; - break; + case DeleteTempFile: + deleteSoundFile(recording_file_name_); + test_status_ = Ready; + break; - default: - break; + default: + break; } } - } -void MicTest::processThread() -{ - //set node loop rate +void MicTest::processThread() { + // set node loop rate ros::Rate loop_rate(SPIN_RATE); - //node loop - while (ros::ok()) - { + // node loop + while (ros::ok()) { if (enable_ == true) process(); - //relax to fit output rate + // relax to fit output rate loop_rate.sleep(); } } -void MicTest::callbackThread() -{ +void MicTest::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &MicTest::buttonHandlerCallback, this); + buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, + &MicTest::buttonHandlerCallback, this); play_sound_pub_ = nh.advertise("/play_sound_file", 0); - while (nh.ok()) - { + while (nh.ok()) { ros::spinOnce(); usleep(1 * 1000); } } -void MicTest::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) -{ +void MicTest::buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { if (enable_ == false) return; - if (msg->data == "start") - { + if (msg->data == "start") { // restart mic test if (test_status_ != Ready) return; test_status_ = AnnounceRecording; - } - else if(msg->data == "user") - { + } else if (msg->data == "user") { is_wait_ = true; } } -void MicTest::announceTest() -{ +void MicTest::announceTest() { // play mic test sound playSound(default_mp3_path_ + "Announce mic test.mp3"); usleep(3.4 * 1000 * 1000); } -void MicTest::recordSound(int recording_time) -{ +void MicTest::recordSound(int recording_time) { ROS_INFO("Start to record"); playSound(default_mp3_path_ + "Start recording.mp3"); @@ -185,36 +162,31 @@ void MicTest::recordSound(int recording_time) record_pid_ = fork(); - switch (record_pid_) - { - case -1: - fprintf(stderr, "Fork Failed!! \n"); - ROS_WARN("Fork Failed!! \n"); - break; + switch (record_pid_) { + case -1: + fprintf(stderr, "Fork Failed!! \n"); + ROS_WARN("Fork Failed!! \n"); + break; - case 0: - { - std::stringstream ss; - ss << "-d " << recording_time; - execl("/usr/bin/arecord", "arecord", "-Dplughw:1,0", "-fS16_LE", "-c1", "-r22050", "-twav", ss.str().c_str(), - recording_file_name_.c_str(), (char*) 0); - break; - } + case 0: { + std::stringstream ss; + ss << "-d " << recording_time; + execl("/usr/bin/arecord", "arecord", "-Dplughw:1,0", "-fS16_LE", "-c1", + "-r22050", "-twav", ss.str().c_str(), recording_file_name_.c_str(), + (char *)0); + break; + } - default: - break; + default: + break; } startTimer(recording_time); } -void MicTest::recordSound() -{ - recordSound(5); -} +void MicTest::recordSound() { recordSound(5); } -void MicTest::playTestSound(const std::string &path) -{ +void MicTest::playTestSound(const std::string &path) { ROS_INFO("Start to play recording sound"); playSound(default_mp3_path_ + "Start playing.mp3"); @@ -226,47 +198,40 @@ void MicTest::playTestSound(const std::string &path) play_pid_ = fork(); - switch (play_pid_) - { - case -1: - fprintf(stderr, "Fork Failed!! \n"); - ROS_WARN("Fork Failed!! \n"); - break; + switch (play_pid_) { + case -1: + fprintf(stderr, "Fork Failed!! \n"); + ROS_WARN("Fork Failed!! \n"); + break; - case 0: - execl("/usr/bin/aplay", "aplay", path.c_str(), (char*) 0); - break; + case 0: + execl("/usr/bin/aplay", "aplay", path.c_str(), (char *)0); + break; - default: - break; + default: + break; } startTimer(5); } -void MicTest::playSound(const std::string &path) -{ +void MicTest::playSound(const std::string &path) { std_msgs::String sound_msg; sound_msg.data = path; play_sound_pub_.publish(sound_msg); } -void MicTest::deleteSoundFile(const std::string &file_path) -{ +void MicTest::deleteSoundFile(const std::string &file_path) { remove(file_path.c_str()); ROS_INFO("Delete temporary file"); } -void MicTest::startTimer(double wait_time) -{ +void MicTest::startTimer(double wait_time) { start_time_ = ros::Time::now(); wait_time_ = wait_time; } -void MicTest::finishTimer() -{ - wait_time_ = -1; -} +void MicTest::finishTimer() { wait_time_ = -1; } } /* namespace robotis_op */ diff --git a/op3_demo/src/test_node.cpp b/op3_demo/src/test_node.cpp index 8d4768d..65e85ea 100644 --- a/op3_demo/src/test_node.cpp +++ b/op3_demo/src/test_node.cpp @@ -1,35 +1,34 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ -#include #include +#include #include -#include "op3_demo/soccer_demo.h" #include "op3_demo/action_demo.h" -#include "op3_demo/vision_demo.h" #include "op3_demo/button_test.h" #include "op3_demo/mic_test.h" -#include "robotis_math/robotis_linear_algebra.h" +#include "op3_demo/soccer_demo.h" +#include "op3_demo/vision_demo.h" #include "robotis_controller_msgs/SyncWriteItem.h" +#include "robotis_math/robotis_linear_algebra.h" -enum Demo_Status -{ +enum Demo_Status { Ready = 0, ButtonTest = 1, MicTest = 2, @@ -39,11 +38,11 @@ enum Demo_Status DemoCount = 6, }; -void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); +void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); void goInitPose(); void playSound(const std::string &path); void setLED(int led); -bool checkManagerRunning(std::string& manager_name); +bool checkManagerRunning(std::string &manager_name); void dxlTorqueChecker(); void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg); @@ -61,13 +60,12 @@ int current_status = Ready; int desired_status = Ready; bool apply_desired = false; -//node main -int main(int argc, char **argv) -{ - //init ros +// node main +int main(int argc, char **argv) { + // init ros ros::init(argc, argv, "self_test_node"); - //create ros wrapper object + // create ros wrapper object robotis_op::OPDemo *current_demo = NULL; robotis_op::SoccerDemo *soccer_demo = new robotis_op::SoccerDemo(); robotis_op::ActionDemo *action_demo = new robotis_op::ActionDemo(); @@ -79,26 +77,27 @@ int main(int argc, char **argv) init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); - led_pub = nh.advertise("/robotis/sync_write_item", 0); + led_pub = nh.advertise( + "/robotis/sync_write_item", 0); dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); - ros::Subscriber buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); - ros::Subscriber mode_command_sub = nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); + ros::Subscriber buttuon_sub = + nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + ros::Subscriber mode_command_sub = + nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); default_mp3_path = ros::package::getPath("op3_demo") + "/data/mp3/"; ros::start(); - //set node loop rate + // set node loop rate ros::Rate loop_rate(SPIN_RATE); // wait for starting of manager std::string manager_name = "/op3_manager"; - while (ros::ok()) - { + while (ros::ok()) { ros::Duration(1.0).sleep(); - if (checkManagerRunning(manager_name) == true) - { + if (checkManagerRunning(manager_name) == true) { break; ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } @@ -109,96 +108,85 @@ int main(int argc, char **argv) playSound(default_mp3_path + "test/Self test ready mode.mp3"); setLED(0x01 | 0x02 | 0x04); - //node loop - while (ros::ok()) - { + // node loop + while (ros::ok()) { // process - if (apply_desired == true) - { - switch (desired_status) - { - case Ready: - { + if (apply_desired == true) { + switch (desired_status) { + case Ready: { - if (current_demo != NULL) - current_demo->setDemoDisable(); + if (current_demo != NULL) + current_demo->setDemoDisable(); - current_demo = NULL; + current_demo = NULL; - goInitPose(); + goInitPose(); - ROS_INFO_COND(DEBUG_PRINT, "[Go to Demo READY!]"); - break; - } + ROS_INFO_COND(DEBUG_PRINT, "[Go to Demo READY!]"); + break; + } - case SoccerDemo: - { - if (current_demo != NULL) - current_demo->setDemoDisable(); + case SoccerDemo: { + if (current_demo != NULL) + current_demo->setDemoDisable(); - current_demo = soccer_demo; - current_demo->setDemoEnable(); + current_demo = soccer_demo; + current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Soccer Demo"); - break; - } + ROS_INFO_COND(DEBUG_PRINT, "[Start] Soccer Demo"); + break; + } - case VisionDemo: - { - if (current_demo != NULL) - current_demo->setDemoDisable(); + case VisionDemo: { + if (current_demo != NULL) + current_demo->setDemoDisable(); - current_demo = vision_demo; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Vision Demo"); - break; - } - case ActionDemo: - { - if (current_demo != NULL) - current_demo->setDemoDisable(); + current_demo = vision_demo; + current_demo->setDemoEnable(); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Vision Demo"); + break; + } + case ActionDemo: { + if (current_demo != NULL) + current_demo->setDemoDisable(); - current_demo = action_demo; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Action Demo"); - break; - } - case ButtonTest: - { - if (current_demo != NULL) - current_demo->setDemoDisable(); + current_demo = action_demo; + current_demo->setDemoEnable(); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Action Demo"); + break; + } + case ButtonTest: { + if (current_demo != NULL) + current_demo->setDemoDisable(); - current_demo = button_test; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Button Test"); - break; - } - case MicTest: - { - if (current_demo != NULL) - current_demo->setDemoDisable(); + current_demo = button_test; + current_demo->setDemoEnable(); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Button Test"); + break; + } + case MicTest: { + if (current_demo != NULL) + current_demo->setDemoDisable(); - current_demo = mic_test; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Mic Test"); - break; - } + current_demo = mic_test; + current_demo->setDemoEnable(); + ROS_INFO_COND(DEBUG_PRINT, "[Start] Mic Test"); + break; + } - - default: - { - break; - } + default: { + break; + } } apply_desired = false; current_status = desired_status; } - //execute pending callbacks + // execute pending callbacks ros::spinOnce(); - //relax to fit output rate + // relax to fit output rate loop_rate.sleep(); // for debug @@ -206,112 +194,104 @@ int main(int argc, char **argv) return 0; } - //exit program + // exit program return 0; } -void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) -{ - if(apply_desired == true) +void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { + if (apply_desired == true) return; // in the middle of playing demo - if (current_status != Ready) - { - if (msg->data == "mode_long") - { + if (current_status != Ready) { + if (msg->data == "mode_long") { // go to mode selection status desired_status = Ready; apply_desired = true; playSound(default_mp3_path + "test/Self test ready mode.mp3"); setLED(0x01 | 0x02 | 0x04); - } - else if (msg->data == "user_long") - { + } else if (msg->data == "user_long") { // it's using in op3_manager // torque on and going to init pose } } // ready to start demo - else - { - if (msg->data == "start") - { + else { + if (msg->data == "start") { // select current demo - desired_status = (desired_status == Ready) ? desired_status + 1 : desired_status; + desired_status = + (desired_status == Ready) ? desired_status + 1 : desired_status; apply_desired = true; // sound out desired status - switch (desired_status) - { - case SoccerDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + "Start soccer demonstration.mp3"); - break; + switch (desired_status) { + case SoccerDemo: + dxlTorqueChecker(); + playSound(default_mp3_path + "Start soccer demonstration.mp3"); + break; - case VisionDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + "Start vision processing demonstration.mp3"); - break; + case VisionDemo: + dxlTorqueChecker(); + playSound(default_mp3_path + + "Start vision processing demonstration.mp3"); + break; - case ActionDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + "Start motion demonstration.mp3"); - break; + case ActionDemo: + dxlTorqueChecker(); + playSound(default_mp3_path + "Start motion demonstration.mp3"); + break; - case ButtonTest: - dxlTorqueChecker(); - playSound(default_mp3_path + "test/Start button test mode.mp3"); - break; + case ButtonTest: + dxlTorqueChecker(); + playSound(default_mp3_path + "test/Start button test mode.mp3"); + break; - case MicTest: - dxlTorqueChecker(); - playSound(default_mp3_path + "test/Start mic test mode.mp3"); - break; + case MicTest: + dxlTorqueChecker(); + playSound(default_mp3_path + "test/Start mic test mode.mp3"); + break; - default: - break; + default: + break; } ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } - else if (msg->data == "mode") - { + } else if (msg->data == "mode") { // change to next demo desired_status = (desired_status + 1) % DemoCount; - desired_status = (desired_status == Ready) ? desired_status + 1 : desired_status; + desired_status = + (desired_status == Ready) ? desired_status + 1 : desired_status; // sound out desired status and changign LED - switch (desired_status) - { - case SoccerDemo: - playSound(default_mp3_path + "Autonomous soccer mode.mp3"); - setLED(0x01); - break; + switch (desired_status) { + case SoccerDemo: + playSound(default_mp3_path + "Autonomous soccer mode.mp3"); + setLED(0x01); + break; - case VisionDemo: - playSound(default_mp3_path + "Vision processing mode.mp3"); - setLED(0x02); - break; + case VisionDemo: + playSound(default_mp3_path + "Vision processing mode.mp3"); + setLED(0x02); + break; - case ActionDemo: - playSound(default_mp3_path + "Interactive motion mode.mp3"); - setLED(0x04); - break; + case ActionDemo: + playSound(default_mp3_path + "Interactive motion mode.mp3"); + setLED(0x04); + break; - case ButtonTest: - playSound(default_mp3_path + "test/Button test mode.mp3"); - setLED(0x01 | 0x02); - break; + case ButtonTest: + playSound(default_mp3_path + "test/Button test mode.mp3"); + setLED(0x01 | 0x02); + break; - case MicTest: - playSound(default_mp3_path + "test/Mic test mode.mp3"); - setLED(0x01 | 0x04); - break; + case MicTest: + playSound(default_mp3_path + "test/Mic test mode.mp3"); + setLED(0x01 | 0x04); + break; - default: - break; + default: + break; } ROS_INFO_COND(DEBUG_PRINT, "= Demo Mode : %d", desired_status); @@ -319,24 +299,21 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) } } -void goInitPose() -{ +void goInitPose() { std_msgs::String init_msg; init_msg.data = "ini_pose"; init_pose_pub.publish(init_msg); } -void playSound(const std::string &path) -{ +void playSound(const std::string &path) { std_msgs::String sound_msg; sound_msg.data = path; play_sound_pub.publish(sound_msg); } -void setLED(int led) -{ +void setLED(int led) { robotis_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); @@ -345,13 +322,12 @@ void setLED(int led) led_pub.publish(syncwrite_msg); } -bool checkManagerRunning(std::string& manager_name) -{ +bool checkManagerRunning(std::string &manager_name) { std::vector node_list; ros::master::getNodes(node_list); - for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); node_list_idx++) - { + for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); + node_list_idx++) { if (node_list[node_list_idx] == manager_name) return true; } @@ -360,21 +336,17 @@ bool checkManagerRunning(std::string& manager_name) return false; } -void dxlTorqueChecker() -{ +void dxlTorqueChecker() { std_msgs::String check_msg; check_msg.data = "check"; dxl_torque_pub.publish(check_msg); } -void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) -{ +void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) { // In demo mode - if (current_status != Ready) - { - if (msg->data == "ready") - { + if (current_status != Ready) { + if (msg->data == "ready") { // go to mode selection status desired_status = Ready; apply_desired = true; @@ -384,10 +356,8 @@ void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) } } // In ready mode - else - { - if(msg->data == "soccer") - { + else { + if (msg->data == "soccer") { desired_status = SoccerDemo; apply_desired = true; @@ -395,9 +365,7 @@ void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) dxlTorqueChecker(); playSound(default_mp3_path + "Start soccer demonstration.mp3"); ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } - else if(msg->data == "vision") - { + } else if (msg->data == "vision") { desired_status = VisionDemo; apply_desired = true; @@ -405,9 +373,7 @@ void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) dxlTorqueChecker(); playSound(default_mp3_path + "Start vision processing demonstration.mp3"); ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } - else if(msg->data == "action") - { + } else if (msg->data == "action") { desired_status = ActionDemo; apply_desired = true; @@ -418,4 +384,3 @@ void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) } } } - diff --git a/op3_demo/src/vision/face_tracker.cpp b/op3_demo/src/vision/face_tracker.cpp index 771607f..a0079f2 100644 --- a/op3_demo/src/vision/face_tracker.cpp +++ b/op3_demo/src/vision/face_tracker.cpp @@ -1,68 +1,59 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include "op3_demo/face_tracker.h" -namespace robotis_op -{ +namespace robotis_op { FaceTracker::FaceTracker() - : nh_(ros::this_node::getName()), - FOV_WIDTH(35.2 * M_PI / 180), - FOV_HEIGHT(21.6 * M_PI / 180), - NOT_FOUND_THRESHOLD(50), - use_head_scan_(false), - count_not_found_(0), - on_tracking_(false) -{ - head_joint_offset_pub_ = nh_.advertise("/robotis/head_control/set_joint_states_offset", 0); - head_joint_pub_ = nh_.advertise("/robotis/head_control/set_joint_states", 0); - head_scan_pub_ = nh_.advertise("/robotis/head_control/scan_command", 0); + : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), + FOV_HEIGHT(21.6 * M_PI / 180), NOT_FOUND_THRESHOLD(50), + use_head_scan_(false), count_not_found_(0), on_tracking_(false) { + head_joint_offset_pub_ = nh_.advertise( + "/robotis/head_control/set_joint_states_offset", 0); + head_joint_pub_ = nh_.advertise( + "/robotis/head_control/set_joint_states", 0); + head_scan_pub_ = + nh_.advertise("/robotis/head_control/scan_command", 0); - face_position_sub_ = nh_.subscribe("/face_position", 1, &FaceTracker::facePositionCallback, this); - //face_tracking_command_sub_ = nh_.subscribe("/robotis/demo_command", 1, &FaceTracker::faceTrackerCommandCallback, this); + face_position_sub_ = nh_.subscribe("/face_position", 1, + &FaceTracker::facePositionCallback, this); + // face_tracking_command_sub_ = nh_.subscribe("/robotis/demo_command", 1, + // &FaceTracker::faceTrackerCommandCallback, this); } -FaceTracker::~FaceTracker() -{ +FaceTracker::~FaceTracker() {} -} - -void FaceTracker::facePositionCallback(const geometry_msgs::Point::ConstPtr &msg) -{ +void FaceTracker::facePositionCallback( + const geometry_msgs::Point::ConstPtr &msg) { if (msg->z < 0) return; face_position_ = *msg; } -void FaceTracker::faceTrackerCommandCallback(const std_msgs::String::ConstPtr &msg) -{ - if (msg->data == "start") - { +void FaceTracker::faceTrackerCommandCallback( + const std_msgs::String::ConstPtr &msg) { + if (msg->data == "start") { startTracking(); - } - else if (msg->data == "stop") - { + } else if (msg->data == "stop") { stopTracking(); - } - else if (msg->data == "toggle_start") - { + } else if (msg->data == "toggle_start") { if (on_tracking_ == false) startTracking(); else @@ -70,35 +61,27 @@ void FaceTracker::faceTrackerCommandCallback(const std_msgs::String::ConstPtr &m } } -void FaceTracker::startTracking() -{ +void FaceTracker::startTracking() { on_tracking_ = true; ROS_INFO("Start Face tracking"); } -void FaceTracker::stopTracking() -{ +void FaceTracker::stopTracking() { on_tracking_ = false; ROS_INFO("Stop Face tracking"); } -void FaceTracker::setUsingHeadScan(bool use_scan) -{ - use_head_scan_ = use_scan; -} +void FaceTracker::setUsingHeadScan(bool use_scan) { use_head_scan_ = use_scan; } -void FaceTracker::setFacePosition(geometry_msgs::Point &face_position) -{ - if (face_position.z > 0) - { +void FaceTracker::setFacePosition(geometry_msgs::Point &face_position) { + if (face_position.z > 0) { face_position_ = face_position; } } -void FaceTracker::goInit(double init_pan, double init_tile) -{ +void FaceTracker::goInit(double init_pan, double init_tile) { sensor_msgs::JointState head_angle_msg; head_angle_msg.name.push_back("head_pan"); @@ -110,37 +93,29 @@ void FaceTracker::goInit(double init_pan, double init_tile) head_joint_pub_.publish(head_angle_msg); } -int FaceTracker::processTracking() -{ - if (on_tracking_ == false) - { +int FaceTracker::processTracking() { + if (on_tracking_ == false) { face_position_.z = 0; count_not_found_ = 0; - //return false; + // return false; return Waiting; } // check ball position - if (face_position_.z <= 0) - { + if (face_position_.z <= 0) { count_not_found_++; - if (count_not_found_ == NOT_FOUND_THRESHOLD) - { + if (count_not_found_ == NOT_FOUND_THRESHOLD) { scanFace(); - //count_not_found_ = 0; + // count_not_found_ = 0; return NotFound; - } - else if (count_not_found_ > NOT_FOUND_THRESHOLD) - { + } else if (count_not_found_ > NOT_FOUND_THRESHOLD) { return NotFound; - } - else - { + } else { return Waiting; } - //return false; + // return false; } // if face is detected @@ -166,15 +141,14 @@ int FaceTracker::processTracking() return Found; } -void FaceTracker::publishHeadJoint(double pan, double tilt) -{ +void FaceTracker::publishHeadJoint(double pan, double tilt) { double min_angle = 1 * M_PI / 180; - if (fabs(pan) < min_angle && fabs(tilt) < min_angle) - { + if (fabs(pan) < min_angle && fabs(tilt) < min_angle) { dismissed_count_ += 1; return; } - std::cout << "Target angle[" << dismissed_count_ << "] : " << pan << " | " << tilt << std::endl; + std::cout << "Target angle[" << dismissed_count_ << "] : " << pan << " | " + << tilt << std::endl; dismissed_count_ = 0; @@ -189,8 +163,7 @@ void FaceTracker::publishHeadJoint(double pan, double tilt) head_joint_offset_pub_.publish(head_angle_msg); } -void FaceTracker::scanFace() -{ +void FaceTracker::scanFace() { if (use_head_scan_ == false) return; @@ -205,4 +178,4 @@ void FaceTracker::scanFace() // ROS_INFO("Scan the ball"); } -} +} // namespace robotis_op diff --git a/op3_demo/src/vision/vision_demo.cpp b/op3_demo/src/vision/vision_demo.cpp index 0045a7d..cc18b50 100644 --- a/op3_demo/src/vision/vision_demo.cpp +++ b/op3_demo/src/vision/vision_demo.cpp @@ -1,46 +1,42 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include "op3_demo/vision_demo.h" -namespace robotis_op -{ +namespace robotis_op { VisionDemo::VisionDemo() - : SPIN_RATE(30), - TIME_TO_INIT(10), - tracking_status_(FaceTracker::Waiting) -{ + : SPIN_RATE(30), TIME_TO_INIT(10), tracking_status_(FaceTracker::Waiting) { enable_ = false; ros::NodeHandle nh(ros::this_node::getName()); - boost::thread queue_thread = boost::thread(boost::bind(&VisionDemo::callbackThread, this)); - boost::thread process_thread = boost::thread(boost::bind(&VisionDemo::processThread, this)); + boost::thread queue_thread = + boost::thread(boost::bind(&VisionDemo::callbackThread, this)); + boost::thread process_thread = + boost::thread(boost::bind(&VisionDemo::processThread, this)); } -VisionDemo::~VisionDemo() -{ +VisionDemo::~VisionDemo() { // TODO Auto-generated destructor stub } -void VisionDemo::setDemoEnable() -{ +void VisionDemo::setDemoEnable() { // set prev time for timer prev_time_ = ros::Time::now(); @@ -63,11 +59,9 @@ void VisionDemo::setDemoEnable() face_tracker_.startTracking(); ROS_INFO("Start Vision Demo"); - } -void VisionDemo::setDemoDisable() -{ +void VisionDemo::setDemoDisable() { face_tracker_.stopTracking(); tracking_status_ = FaceTracker::Waiting; @@ -78,30 +72,24 @@ void VisionDemo::setDemoDisable() face_tracking_command_pub_.publish(command); } -void VisionDemo::process() -{ +void VisionDemo::process() { int tracking_status = face_tracker_.processTracking(); - - - switch(tracking_status) - { + switch (tracking_status) { case FaceTracker::Found: - if(tracking_status_ != tracking_status) + if (tracking_status_ != tracking_status) setRGBLED(0x1F, 0x1F, 0x1F); prev_time_ = ros::Time::now(); break; - case FaceTracker::NotFound: - { - if(tracking_status_ != tracking_status) + case FaceTracker::NotFound: { + if (tracking_status_ != tracking_status) setRGBLED(0, 0, 0); ros::Time curr_time = ros::Time::now(); ros::Duration dur = curr_time - prev_time_; - if(dur.sec > TIME_TO_INIT) - { - face_tracker_.goInit(0,0); + if (dur.sec > TIME_TO_INIT) { + face_tracker_.goInit(0, 0); prev_time_ = curr_time; } break; @@ -110,117 +98,106 @@ void VisionDemo::process() break; } - - if(tracking_status != FaceTracker::Waiting) + if (tracking_status != FaceTracker::Waiting) tracking_status_ = tracking_status; } -void VisionDemo::processThread() -{ - //set node loop rate +void VisionDemo::processThread() { + // set node loop rate ros::Rate loop_rate(SPIN_RATE); - //node loop - while (ros::ok()) - { + // node loop + while (ros::ok()) { if (enable_ == true) process(); - //relax to fit output rate + // relax to fit output rate loop_rate.sleep(); } } -void VisionDemo::callbackThread() -{ +void VisionDemo::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - module_control_pub_ = nh.advertise("/robotis/enable_ctrl_module", 0); - motion_index_pub_ = nh.advertise("/robotis/action/page_num", 0); - rgb_led_pub_ = nh.advertise("/robotis/sync_write_item", 0); - face_tracking_command_pub_ = nh.advertise("/face_tracking/command", 0); + module_control_pub_ = + nh.advertise("/robotis/enable_ctrl_module", 0); + motion_index_pub_ = + nh.advertise("/robotis/action/page_num", 0); + rgb_led_pub_ = nh.advertise( + "/robotis/sync_write_item", 0); + face_tracking_command_pub_ = + nh.advertise("/face_tracking/command", 0); - buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &VisionDemo::buttonHandlerCallback, this); - faceCoord_sub_ = nh.subscribe("/faceCoord", 1, &VisionDemo::facePositionCallback, this); + buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, + &VisionDemo::buttonHandlerCallback, this); + faceCoord_sub_ = + nh.subscribe("/faceCoord", 1, &VisionDemo::facePositionCallback, this); - set_joint_module_client_ = nh.serviceClient("/robotis/set_present_ctrl_modules"); + set_joint_module_client_ = + nh.serviceClient( + "/robotis/set_present_ctrl_modules"); - while (nh.ok()) - { + while (nh.ok()) { ros::spinOnce(); usleep(1 * 1000); } } -void VisionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) -{ +void VisionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { if (enable_ == false) return; - if (msg->data == "start") - { - - } - else if (msg->data == "mode") - { + if (msg->data == "start") { + } else if (msg->data == "mode") { } } -void VisionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) -{ +void VisionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) { if (enable_ == false) return; - if (msg->data == "start") - { - - } - else if (msg->data == "stop") - { + if (msg->data == "start") { + } else if (msg->data == "stop") { } } -void VisionDemo::setModuleToDemo(const std::string &module_name) -{ +void VisionDemo::setModuleToDemo(const std::string &module_name) { callServiceSettingModule(module_name); ROS_INFO_STREAM("enable module : " << module_name); } -void VisionDemo::callServiceSettingModule(const std::string &module_name) -{ +void VisionDemo::callServiceSettingModule(const std::string &module_name) { robotis_controller_msgs::SetModule set_module_srv; set_module_srv.request.module_name = module_name; - if (set_joint_module_client_.call(set_module_srv) == false) - { + if (set_joint_module_client_.call(set_module_srv) == false) { ROS_ERROR("Failed to set module"); return; } - return ; + return; } -void VisionDemo::facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg) -{ +void VisionDemo::facePositionCallback( + const std_msgs::Int32MultiArray::ConstPtr &msg) { if (enable_ == false) return; // face is detected - if (msg->data.size() >= 10) - { + if (msg->data.size() >= 10) { // center of face - face_position_.x = (msg->data[6] + msg->data[8] * 0.5) / msg->data[2] * 2 - 1; - face_position_.y = (msg->data[7] + msg->data[9] * 0.5) / msg->data[3] * 2 - 1; + face_position_.x = + (msg->data[6] + msg->data[8] * 0.5) / msg->data[2] * 2 - 1; + face_position_.y = + (msg->data[7] + msg->data[9] * 0.5) / msg->data[3] * 2 - 1; face_position_.z = msg->data[8] * 0.5 + msg->data[9] * 0.5; face_tracker_.setFacePosition(face_position_); - } - else - { + } else { face_position_.x = 0; face_position_.y = 0; face_position_.z = 0; @@ -228,18 +205,17 @@ void VisionDemo::facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr } } -void VisionDemo::playMotion(int motion_index) -{ +void VisionDemo::playMotion(int motion_index) { std_msgs::Int32 motion_msg; motion_msg.data = motion_index; motion_index_pub_.publish(motion_msg); } -void VisionDemo::setRGBLED(int blue, int green, int red) -{ +void VisionDemo::setRGBLED(int blue, int green, int red) { int led_full_unit = 0x1F; - int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); + int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | + (red & led_full_unit); robotis_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED_RGB"; syncwrite_msg.joint_name.push_back("open-cr"); diff --git a/op3_read_write_demo/CHANGELOG.rst b/op3_read_write_demo/CHANGELOG.rst new file mode 100644 index 0000000..6f0e796 --- /dev/null +++ b/op3_read_write_demo/CHANGELOG.rst @@ -0,0 +1,8 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package robotis_op3_demo +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.3.0 (2021-05-05) +------------------ +* Update package.xml and CMakeList.txt for noetic branch +* Contributors: Ronaldson Bellande diff --git a/op3_read_write_demo/CMakeLists.txt b/op3_read_write_demo/CMakeLists.txt index 8826d03..3dfc844 100644 --- a/op3_read_write_demo/CMakeLists.txt +++ b/op3_read_write_demo/CMakeLists.txt @@ -1,13 +1,14 @@ ################################################################################ # Set minimum required version of cmake, project name and compile options ################################################################################ -cmake_minimum_required(VERSION 2.8.3) +cmake_minimum_required(VERSION 3.0.2) project(op3_read_write_demo) ################################################################################ # Find catkin packages and libraries for catkin and system dependencies ################################################################################ -find_package(catkin REQUIRED COMPONENTS +find_package( + catkin REQUIRED COMPONENTS robotis_controller_msgs roscpp sensor_msgs @@ -32,42 +33,45 @@ find_package(catkin REQUIRED COMPONENTS catkin_package( INCLUDE_DIRS CATKIN_DEPENDS - roscpp - robotis_controller_msgs - roscpp - sensor_msgs - std_msgs + roscpp + robotis_controller_msgs + roscpp + sensor_msgs + std_msgs ) ################################################################################ # Build ################################################################################ -include_directories( - ${catkin_INCLUDE_DIRS} -) +include_directories(${catkin_INCLUDE_DIRS}) -add_executable(read_write +add_executable( + read_write src/read_write.cpp ) -add_dependencies(read_write +add_dependencies( + read_write ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ) -target_link_libraries(read_write +target_link_libraries( + read_write ${catkin_LIBRARIES} ) ################################################################################ # Install ################################################################################ -install(TARGETS read_write +install( + TARGETS read_write RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) -install(DIRECTORY launch - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +install( + DIRECTORY launch + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) ################################################################################ diff --git a/op3_read_write_demo/launch/op3_read_write.launch b/op3_read_write_demo/launch/op3_read_write.launch index 01217ff..3c70adb 100644 --- a/op3_read_write_demo/launch/op3_read_write.launch +++ b/op3_read_write_demo/launch/op3_read_write.launch @@ -1,24 +1,24 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - + diff --git a/op3_read_write_demo/package.xml b/op3_read_write_demo/package.xml index 3d7c712..5cc8f71 100644 --- a/op3_read_write_demo/package.xml +++ b/op3_read_write_demo/package.xml @@ -1,23 +1,38 @@ op3_read_write_demo - 0.0.1 + 0.3.0 The op3_read_write_demo package - + Apache 2.0 Kayman - Pyo + Ronaldson Bellande + http://wiki.ros.org/op3_demo http://emanual.robotis.com/docs/en/platform/op3/introduction/ https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues + catkin - roscpp - std_msgs - sensor_msgs - robotis_controller_msgs + + roscpp + std_msgs + sensor_msgs + robotis_controller_msgs + op3_manager + + roscpp + std_msgs + sensor_msgs + robotis_controller_msgs + op3_manager + + roscpp + std_msgs + sensor_msgs + robotis_controller_msgs op3_manager diff --git a/op3_read_write_demo/src/read_write.cpp b/op3_read_write_demo/src/read_write.cpp index 1b87dc4..b415400 100644 --- a/op3_read_write_demo/src/read_write.cpp +++ b/op3_read_write_demo/src/read_write.cpp @@ -1,40 +1,39 @@ /******************************************************************************* -* Copyright 2017 ROBOTIS CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*******************************************************************************/ + * Copyright 2017 ROBOTIS CO., LTD. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ /* Author: Kayman Jung */ #include -#include #include +#include #include "robotis_controller_msgs/SetModule.h" #include "robotis_controller_msgs/SyncWriteItem.h" -void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg); -void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg); +void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); +void jointstatesCallback(const sensor_msgs::JointState::ConstPtr &msg); void readyToDemo(); -void setModule(const std::string& module_name); +void setModule(const std::string &module_name); void goInitPose(); void setLED(int led); -bool checkManagerRunning(std::string& manager_name); +bool checkManagerRunning(std::string &manager_name); void torqueOnAll(); -void torqueOff(const std::string& body_side); +void torqueOff(const std::string &body_side); -enum ControlModule -{ +enum ControlModule { None = 0, DirectControlModule = 1, Framework = 2, @@ -56,39 +55,43 @@ ros::ServiceClient set_joint_module_client; int control_module = None; bool demo_ready = false; -//node main -int main(int argc, char **argv) -{ - //init ros +// node main +int main(int argc, char **argv) { + // init ros ros::init(argc, argv, "read_write"); ros::NodeHandle nh(ros::this_node::getName()); init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); - sync_write_pub = nh.advertise("/robotis/sync_write_item", 0); + sync_write_pub = nh.advertise( + "/robotis/sync_write_item", 0); dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); - write_joint_pub = nh.advertise("/robotis/set_joint_states", 0); - write_joint_pub2 = nh.advertise("/robotis/direct_control/set_joint_states", 0); + write_joint_pub = + nh.advertise("/robotis/set_joint_states", 0); + write_joint_pub2 = nh.advertise( + "/robotis/direct_control/set_joint_states", 0); - read_joint_sub = nh.subscribe("/robotis/present_joint_states", 1, jointstatesCallback); - buttuon_sub = nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + read_joint_sub = + nh.subscribe("/robotis/present_joint_states", 1, jointstatesCallback); + buttuon_sub = + nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); // service - set_joint_module_client = nh.serviceClient("/robotis/set_present_ctrl_modules"); + set_joint_module_client = + nh.serviceClient( + "/robotis/set_present_ctrl_modules"); ros::start(); - //set node loop rate + // set node loop rate ros::Rate loop_rate(SPIN_RATE); // wait for starting of op3_manager std::string manager_name = "/op3_manager"; - while (ros::ok()) - { + while (ros::ok()) { ros::Duration(1.0).sleep(); - if (checkManagerRunning(manager_name) == true) - { + if (checkManagerRunning(manager_name) == true) { break; ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } @@ -97,76 +100,66 @@ int main(int argc, char **argv) readyToDemo(); - //node loop - while (ros::ok()) - { + // node loop + while (ros::ok()) { // process - //execute pending callbacks + // execute pending callbacks ros::spinOnce(); - //relax to fit output rate + // relax to fit output rate loop_rate.sleep(); } - //exit program + // exit program return 0; } -void buttonHandlerCallback(const std_msgs::String::ConstPtr& msg) -{ +void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { // starting demo using robotis_controller - if (msg->data == "mode") - { + if (msg->data == "mode") { control_module = Framework; ROS_INFO("Button : mode | Framework"); readyToDemo(); } // starting demo using direct_control_module - else if (msg->data == "start") - { + else if (msg->data == "start") { control_module = DirectControlModule; ROS_INFO("Button : start | Direct control module"); readyToDemo(); } // torque on all joints of ROBOTIS-OP3 - else if (msg->data == "user") - { + else if (msg->data == "user") { torqueOnAll(); control_module = None; } } -void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg) -{ - if(control_module == None) +void jointstatesCallback(const sensor_msgs::JointState::ConstPtr &msg) { + if (control_module == None) return; sensor_msgs::JointState write_msg; write_msg.header = msg->header; - for(int ix = 0; ix < msg->name.size(); ix++) - { + for (int ix = 0; ix < msg->name.size(); ix++) { std::string joint_name = msg->name[ix]; double joint_position = msg->position[ix]; // mirror and copy joint angles from right to left - if(joint_name == "r_sho_pitch") - { + if (joint_name == "r_sho_pitch") { write_msg.name.push_back("r_sho_pitch"); write_msg.position.push_back(joint_position); write_msg.name.push_back("l_sho_pitch"); write_msg.position.push_back(-joint_position); } - if(joint_name == "r_sho_roll") - { + if (joint_name == "r_sho_roll") { write_msg.name.push_back("r_sho_roll"); write_msg.position.push_back(joint_position); write_msg.name.push_back("l_sho_roll"); write_msg.position.push_back(-joint_position); } - if(joint_name == "r_el") - { + if (joint_name == "r_el") { write_msg.name.push_back("r_el"); write_msg.position.push_back(joint_position); write_msg.name.push_back("l_el"); @@ -175,14 +168,13 @@ void jointstatesCallback(const sensor_msgs::JointState::ConstPtr& msg) } // publish a message to set the joint angles - if(control_module == Framework) + if (control_module == Framework) write_joint_pub.publish(write_msg); - else if(control_module == DirectControlModule) + else if (control_module == DirectControlModule) write_joint_pub2.publish(write_msg); } -void readyToDemo() -{ +void readyToDemo() { ROS_INFO("Start Read-Write Demo"); // turn off LED setLED(0x04); @@ -201,17 +193,13 @@ void readyToDemo() setLED(control_module); // change the module for demo - if(control_module == Framework) - { + if (control_module == Framework) { setModule("none"); ROS_INFO("Change module to none"); - } - else if(control_module == DirectControlModule) - { + } else if (control_module == DirectControlModule) { setModule("direct_control_module"); ROS_INFO("Change module to direct_control_module"); - } - else + } else return; // torque off : right arm @@ -219,16 +207,14 @@ void readyToDemo() ROS_INFO("Torque off"); } -void goInitPose() -{ +void goInitPose() { std_msgs::String init_msg; init_msg.data = "ini_pose"; init_pose_pub.publish(init_msg); } -void setLED(int led) -{ +void setLED(int led) { robotis_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); @@ -237,13 +223,12 @@ void setLED(int led) sync_write_pub.publish(syncwrite_msg); } -bool checkManagerRunning(std::string& manager_name) -{ +bool checkManagerRunning(std::string &manager_name) { std::vector node_list; ros::master::getNodes(node_list); - for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); node_list_idx++) - { + for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); + node_list_idx++) { if (node_list[node_list_idx] == manager_name) return true; } @@ -252,53 +237,45 @@ bool checkManagerRunning(std::string& manager_name) return false; } -void setModule(const std::string& module_name) -{ +void setModule(const std::string &module_name) { robotis_controller_msgs::SetModule set_module_srv; set_module_srv.request.module_name = module_name; - if (set_joint_module_client.call(set_module_srv) == false) - { + if (set_joint_module_client.call(set_module_srv) == false) { ROS_ERROR("Failed to set module"); return; } - return ; + return; } -void torqueOnAll() -{ +void torqueOnAll() { std_msgs::String check_msg; check_msg.data = "check"; dxl_torque_pub.publish(check_msg); } -void torqueOff(const std::string& body_side) -{ +void torqueOff(const std::string &body_side) { robotis_controller_msgs::SyncWriteItem syncwrite_msg; int torque_value = 0; syncwrite_msg.item_name = "torque_enable"; - if(body_side == "right") - { + if (body_side == "right") { syncwrite_msg.joint_name.push_back("r_sho_pitch"); syncwrite_msg.value.push_back(torque_value); syncwrite_msg.joint_name.push_back("r_sho_roll"); syncwrite_msg.value.push_back(torque_value); syncwrite_msg.joint_name.push_back("r_el"); syncwrite_msg.value.push_back(torque_value); - } - else if(body_side == "left") - { + } else if (body_side == "left") { syncwrite_msg.joint_name.push_back("l_sho_pitch"); syncwrite_msg.value.push_back(torque_value); syncwrite_msg.joint_name.push_back("l_sho_roll"); syncwrite_msg.value.push_back(torque_value); syncwrite_msg.joint_name.push_back("l_el"); syncwrite_msg.value.push_back(torque_value); - } - else + } else return; sync_write_pub.publish(syncwrite_msg); diff --git a/robotis_op3_demo/CHANGELOG.rst b/robotis_op3_demo/CHANGELOG.rst index c761f4a..34b4ee4 100644 --- a/robotis_op3_demo/CHANGELOG.rst +++ b/robotis_op3_demo/CHANGELOG.rst @@ -2,6 +2,11 @@ Changelog for package robotis_op3_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.0 (2021-05-05) +------------------ +* Update package.xml and CMakeList.txt for noetic branch +* Contributors: Ronaldson Bellande + 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic diff --git a/robotis_op3_demo/CMakeLists.txt b/robotis_op3_demo/CMakeLists.txt index b7e8eeb..aa20e05 100644 --- a/robotis_op3_demo/CMakeLists.txt +++ b/robotis_op3_demo/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.3) +cmake_minimum_required(VERSION 3.0.2) project(robotis_op3_demo) find_package(catkin REQUIRED) catkin_metapackage() diff --git a/robotis_op3_demo/package.xml b/robotis_op3_demo/package.xml index 83e6185..3922372 100644 --- a/robotis_op3_demo/package.xml +++ b/robotis_op3_demo/package.xml @@ -1,20 +1,34 @@ robotis_op3_demo - 0.1.0 + 0.3.0 ROS packages for the robotis_op3_demo (meta package) Apache 2.0 Kayman - Pyo + Ronaldson Bellande + http://wiki.ros.org/robotis_op3_demo http://emanual.robotis.com/docs/en/platform/op3/introduction/ https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues + catkin + + op3_ball_detector + op3_bringup + op3_demo + + op3_ball_detector + op3_bringup + op3_demo + op3_ball_detector op3_bringup op3_demo - + + + + From 6f2b5d8c8dfbc6eb06cf22392710a72f5040a524 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Fri, 6 May 2022 15:12:52 -0400 Subject: [PATCH 093/172] finish CMake and changelog --- op3_ball_detector/CHANGELOG.rst | 5 +++ op3_ball_detector/CMakeLists.txt | 56 ++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/op3_ball_detector/CHANGELOG.rst b/op3_ball_detector/CHANGELOG.rst index d00eb27..17f4188 100644 --- a/op3_ball_detector/CHANGELOG.rst +++ b/op3_ball_detector/CHANGELOG.rst @@ -2,6 +2,11 @@ Changelog for package op3_ball_detector ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.0 (2021-05-05) +------------------ +* Update package.xml and CMakeList.txt for noetic branch +* Contributors: Ronaldson Bellande + 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic diff --git a/op3_ball_detector/CMakeLists.txt b/op3_ball_detector/CMakeLists.txt index 9a1693d..355ad3d 100644 --- a/op3_ball_detector/CMakeLists.txt +++ b/op3_ball_detector/CMakeLists.txt @@ -1,13 +1,14 @@ ################################################################################ # Set minimum required version of cmake, project name and compile options ################################################################################ -cmake_minimum_required(VERSION 2.8.3) +cmake_minimum_required(VERSION 3.0.2) project(op3_ball_detector) ################################################################################ # Find catkin packages and libraries for catkin and system dependencies ################################################################################ -find_package(catkin REQUIRED COMPONENTS +find_package( + catkin REQUIRED COMPONENTS roscpp roslib std_msgs @@ -27,18 +28,20 @@ find_package(OpenCV 3 REQUIRED) ## Insert your header file compatible specified path like '#include ' find_package(PkgConfig REQUIRED) pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) -find_path(YAML_CPP_INCLUDE_DIR +find_path( + YAML_CPP_INCLUDE_DIR NAMES yaml_cpp.h PATHS ${YAML_CPP_INCLUDE_DIRS} ) -find_library(YAML_CPP_LIBRARY +find_library( + YAML_CPP_LIBRARY NAMES YAML_CPP PATHS ${YAML_CPP_LIBRARY_DIRS} ) link_directories(${YAML_CPP_LIBRARY_DIRS}) if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") -add_definitions(-DHAVE_NEW_YAMLCPP) + add_definitions(-DHAVE_NEW_YAMLCPP) endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") ################################################################################ @@ -63,15 +66,13 @@ add_service_files( generate_messages( DEPENDENCIES std_msgs - geometry_msgs + geometry_msgs ) ################################################################################ # Declare ROS dynamic reconfigure parameters ################################################################################ -generate_dynamic_reconfigure_options( - cfg/DetectorParams.cfg -) +generate_dynamic_reconfigure_options(cfg/DetectorParams.cfg) ################################################################################ # Declare catkin specific configuration to be passed to dependent projects @@ -79,16 +80,16 @@ generate_dynamic_reconfigure_options( catkin_package( INCLUDE_DIRS include CATKIN_DEPENDS - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - message_runtime - DEPENDS Boost OpenCV + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + message_runtime + DEPENDS Boost OpenCV ) ################################################################################ @@ -102,14 +103,16 @@ include_directories( ${YAML_CPP_INCLUDE_DIRS} ) -add_executable(ball_detector_node +add_executable( + ball_detector_node src/ball_detector.cpp src/ball_detector_node.cpp ) add_dependencies(ball_detector_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) -target_link_libraries(ball_detector_node +target_link_libraries( + ball_detector_node ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${OpenCV_LIBRARIES} @@ -119,16 +122,19 @@ target_link_libraries(ball_detector_node ################################################################################ # Install ################################################################################ -install(TARGETS ball_detector_node +install( + TARGETS ball_detector_node RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) -install(DIRECTORY include/${PROJECT_NAME}/ +install( + DIRECTORY include/${PROJECT_NAME}/ DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} ) -install(DIRECTORY config launch rviz - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +install( + DIRECTORY config launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) ################################################################################ From 0c26a7efa64796b06630d19fe94760c708a37cf3 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Fri, 6 May 2022 15:22:18 -0400 Subject: [PATCH 094/172] OpenCV version --- op3_ball_detector/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op3_ball_detector/CMakeLists.txt b/op3_ball_detector/CMakeLists.txt index 355ad3d..80e85e3 100644 --- a/op3_ball_detector/CMakeLists.txt +++ b/op3_ball_detector/CMakeLists.txt @@ -21,7 +21,7 @@ find_package( ) find_package(Boost REQUIRED COMPONENTS thread) -find_package(OpenCV 3 REQUIRED) +find_package(OpenCV 4.2 REQUIRED) ## Resolve system dependency on yaml-cpp, which apparently does not ## provide a CMake find_package() module. From 9772b8ba9546c663368d5a9e1a22c54cec989a90 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Fri, 13 May 2022 11:38:50 -0400 Subject: [PATCH 095/172] travis and rosinstall --- .robotis_op3_demo.rosinstall | 4 ++-- .travis.yml | 15 +++++---------- .../launch/ball_detector_from_uvc.launch | 17 ++++++++++------- op3_ball_detector/package.xml | 2 +- op3_demo/launch/demo.launch | 3 ++- op3_demo/launch/face_detection_op3.launch | 1 + 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.robotis_op3_demo.rosinstall b/.robotis_op3_demo.rosinstall index 146fa30..ab42395 100644 --- a/.robotis_op3_demo.rosinstall +++ b/.robotis_op3_demo.rosinstall @@ -1,2 +1,2 @@ -- git: {local-name: robotis_op3_tools, uri: 'https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Tools.git', version: master} -- git: {local-name: humanoid_navigation, uri: 'https://github.com/ROBOTIS-GIT/humanoid_navigation.git', version: master} \ No newline at end of file +- git: {local-name: robotis_op3_tools, uri: 'https://github.com/Robotics-Sensors/ROBOTIS-OP3-Tools.git', version: noetic} +- git: {local-name: humanoid_navigation, uri: 'https://github.com/Robotics-Sensors/humanoid_navigation.git', version: noetic} diff --git a/.travis.yml b/.travis.yml index 1e400fd..edbc427 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ services: - docker language: generic python: - - "2.7" + - "3.8" compiler: - gcc notifications: @@ -15,21 +15,16 @@ notifications: on_success: change on_failure: always recipients: - - pyo@robotis.com + - ronaldsonbellande@gmail.com env: matrix: - - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=ubuntu OS_CODE_NAME=xenial -# - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=debian OS_CODE_NAME=jessie -# - ROS_DISTRO=kinetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file OS_NAME=ubuntu OS_CODE_NAME=xenial $ROSINSTALL_FILENAME=".robotis_op3_demo.rosinstall" -# - ROS_DISTRO=melodic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=ubuntu OS_CODE_NAME=bionic -# - ROS_DISTRO=melodic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=debian OS_NAME=debian OS_CODE_NAME=stretch + - ROS_DISTRO=noetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file OS_NAME=ubuntu OS_CODE_NAME=focal $ROSINSTALL_FILENAME=".robotis_op3_demo.rosinstall" branches: only: - master - - develop - - kinetic-devel + - noetic install: - git clone https://github.com/ros-industrial/industrial_ci.git .ci_config script: - source .ci_config/travis.sh - \ No newline at end of file + diff --git a/op3_ball_detector/launch/ball_detector_from_uvc.launch b/op3_ball_detector/launch/ball_detector_from_uvc.launch index f0ee90c..4b5ed9a 100644 --- a/op3_ball_detector/launch/ball_detector_from_uvc.launch +++ b/op3_ball_detector/launch/ball_detector_from_uvc.launch @@ -1,5 +1,6 @@ + @@ -11,18 +12,20 @@ - + + + + + + + + - + diff --git a/op3_ball_detector/package.xml b/op3_ball_detector/package.xml index 3632328..8713a7a 100644 --- a/op3_ball_detector/package.xml +++ b/op3_ball_detector/package.xml @@ -3,7 +3,7 @@ op3_ball_detector 0.1.0 - This package implements a circle-like shape detector of the input image. + This package implements a circle-like shape detector of the input image It requires and input image and publish, at frame rate, a marked image and a stamped array of circle centers and radius. diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch index dc0b421..9d7c184 100644 --- a/op3_demo/launch/demo.launch +++ b/op3_demo/launch/demo.launch @@ -7,7 +7,7 @@ - + @@ -24,4 +24,5 @@ + diff --git a/op3_demo/launch/face_detection_op3.launch b/op3_demo/launch/face_detection_op3.launch index e1ea7ef..3dc87c8 100644 --- a/op3_demo/launch/face_detection_op3.launch +++ b/op3_demo/launch/face_detection_op3.launch @@ -13,6 +13,7 @@ $(arg face_cascade_name_4)" output="screen"> + From cc361e45d1f085a014e54a63e5e929e9c17a685b Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Sun, 15 May 2022 16:39:50 -0400 Subject: [PATCH 096/172] Create cmake.yml --- .github/workflows/cmake.yml | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/cmake.yml diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml new file mode 100644 index 0000000..97f7fe7 --- /dev/null +++ b/.github/workflows/cmake.yml @@ -0,0 +1,37 @@ +name: CMake + +on: + push: + branches: [ noetic ] + pull_request: + branches: [ noetic ] + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + +jobs: + build: + # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. + # You can convert this to a matrix build if you need cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + + - name: Build + # Build your program with the given configuration + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + + - name: Test + working-directory: ${{github.workspace}}/build + # Execute tests defined by the CMake configuration. + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: ctest -C ${{env.BUILD_TYPE}} + From 3b2656d9ddec18be775a588c46e592e12608ecc4 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Sun, 15 May 2022 16:40:14 -0400 Subject: [PATCH 097/172] Create docker-publish.yml --- .github/workflows/docker-publish.yml | 93 ++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 .github/workflows/docker-publish.yml diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..7591dd1 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,93 @@ +name: Docker + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +on: + schedule: + - cron: '21 21 * * *' + push: + branches: [ noetic ] + # Publish semver tags as releases. + tags: [ 'v*.*.*' ] + pull_request: + branches: [ noetic ] + +env: + # Use docker.io for Docker Hub if empty + REGISTRY: ghcr.io + # github.repository as / + IMAGE_NAME: ${{ github.repository }} + + +jobs: + build: + + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + # This is used to complete the identity challenge + # with sigstore/fulcio when running outside of PRs. + id-token: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Install the cosign tool except on PR + # https://github.com/sigstore/cosign-installer + - name: Install cosign + if: github.event_name != 'pull_request' + uses: sigstore/cosign-installer@d6a3abf1bdea83574e28d40543793018b6035605 + with: + cosign-release: 'v1.7.1' + + + # Workaround: https://github.com/docker/build-push-action/issues/461 + - name: Setup Docker buildx + uses: docker/setup-buildx-action@79abd3f86f79a9d68a23c75a09a9a85889262adf + + # Login against a Docker registry except on PR + # https://github.com/docker/login-action + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Extract metadata (tags, labels) for Docker + # https://github.com/docker/metadata-action + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + # Build and push Docker image with Buildx (don't push on PR) + # https://github.com/docker/build-push-action + - name: Build and push Docker image + id: build-and-push + uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + # Sign the resulting Docker image digest except on PRs. + # This will only write to the public Rekor transparency log when the Docker + # repository is public to avoid leaking data. If you would like to publish + # transparency data even for private images, pass --force to cosign below. + # https://github.com/sigstore/cosign + - name: Sign the published Docker image + if: ${{ github.event_name != 'pull_request' }} + env: + COSIGN_EXPERIMENTAL: "true" + # This step uses the identity token to provision an ephemeral certificate + # against the sigstore community Fulcio instance. + run: cosign sign ${{ steps.meta.outputs.tags }}@${{ steps.build-and-push.outputs.digest }} From 863e374741a13fd741e339aba5f73af04c217202 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Tue, 14 Jun 2022 03:35:01 -0400 Subject: [PATCH 098/172] Create docker-image.yml --- .github/workflows/docker-image.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/docker-image.yml diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 0000000..acdd5fa --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,18 @@ +name: Docker Image CI + +on: + push: + branches: [ "noetic" ] + pull_request: + branches: [ "noetic" ] + +jobs: + + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Build the Docker image + run: docker build . --file Dockerfile --tag my-image-name:$(date +%s) From 2fa751a62dbe971f24a3576e8b197c2db25113a2 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 2 Aug 2022 23:48:29 -0400 Subject: [PATCH 099/172] docker --- Dockerfile | 73 ++++++++++++++++++++++++++ catkin_setup.sh | 5 ++ gpu.Dockerfile | 90 +++++++++++++++++++++++++++++++++ requirements.txt | 39 ++++++++++++++ ros_repository_requirements.txt | 9 ++++ ros_requirements.txt | 15 ++++++ system_requirements.txt | 29 +++++++++++ 7 files changed, 260 insertions(+) create mode 100644 Dockerfile create mode 100644 catkin_setup.sh create mode 100644 gpu.Dockerfile create mode 100644 requirements.txt create mode 100644 ros_repository_requirements.txt create mode 100644 ros_requirements.txt create mode 100644 system_requirements.txt diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ccda94f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,73 @@ +ARG ROS_ARCHITECTURE_VERSION=latest + +FROM ubuntu:20.04 as base_build +SHELL [ "/bin/bash" , "-c" ] + +ENV DEBIAN_FRONTEND noninteractive +ENV PYTHON_VERSION="3.8" + +ARG ROS_ARCHITECTURE_VERSION_GIT_BRANCH=master +ARG ROS_ARCHITECTURE_VERSION_GIT_COMMIT=HEAD + +LABEL maintainer=ronaldsonbellande@gmail.com +LABEL ROS_architecture_github_branchtag=${ROS_ARCHITECTURE_VERSION_GIT_BRANCH} +LABEL ROS_architecture_github_commit=${ROS_ARCHITECTURE_VERSION_GIT_COMMIT} + +# Ubuntu setup +RUN apt-get update -y +RUN apt-get upgrade -y + +# RUN workspace and sourcing +WORKDIR ./ +COPY requirements.txt . +COPY system_requirements.txt . +COPY ros_requirements.txt . +COPY ros_repository_requirements.txt . + +# Install dependencies for system +RUN apt-get update && apt-get install -y --no-install-recommends > ~/.bashrc +RUN source ~/.bashrc + +RUN cd $CATKIN_WS \ + && rosdep init \ + && rosdep update \ + && rosdep update --rosdistro noetic \ + && rosdep fix-permissions \ + && rosdep install -y --from-paths . --ignore-src --rosdistro noetic + +# Always source catkin_setup.sh when launching bash +RUN echo "source /usr/local/bin/catkin_setup.sh" >> /root/.bashrc +COPY catkin_setup.sh /usr/local/bin/catkin_setup.sh +RUN chmod +x /usr/local/bin/catkin_setup.sh + +ENTRYPOINT ["/usr/local/bin/catkin_setup.sh"] +CMD ["bash"] diff --git a/catkin_setup.sh b/catkin_setup.sh new file mode 100644 index 0000000..6ec332f --- /dev/null +++ b/catkin_setup.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +catkin build +source "/opt/ros/noetic/setup.bash" +source "$CATKIN_WS/devel/setup.bash" diff --git a/gpu.Dockerfile b/gpu.Dockerfile new file mode 100644 index 0000000..df15614 --- /dev/null +++ b/gpu.Dockerfile @@ -0,0 +1,90 @@ +ARG ROS_ARCHITECTURE_VERSION=latest + +FROM ubuntu:20.04 as base_build +FROM nvidia/cuda:11.2.1-base-ubuntu20.04 + +ENV DEBIAN_FRONTEND noninteractive +ENV PYTHON_VERSION="3.8" +ENV CUDNN_VERSION=8.1.0.77 +ENV TF_TENSORRT_VERSION=7.2.2 +ENV CUDA=11.2 +ENV LD_LIBRARY_PATH /usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH + +ARG ROS_ARCHITECTURE_VERSION_GIT_BRANCH=master +ARG ROS_ARCHITECTURE_VERSION_GIT_COMMIT=HEAD + +LABEL maintainer=ronaldsonbellande@gmail.com +LABEL ROS_architecture_github_branchtag=${ROS_ARCHITECTURE_VERSION_GIT_BRANCH} +LABEL ROS_architecture_github_commit=${ROS_ARCHITECTURE_VERSION_GIT_COMMIT} + +# Ubuntu setup +RUN apt-get update -y +RUN apt-get upgrade -y + +# RUN workspace and sourcing +WORKDIR ./ +COPY requirements.txt . +COPY system_requirements.txt . +COPY ros_requirements.txt . +COPY ros_repository_requirements.txt . + +# Install dependencies for system +RUN apt-get update && apt-get install -y --no-install-recommends > ~/.bashrc +RUN source ~/.bashrc + +RUN cd $CATKIN_WS \ + && rosdep init \ + && rosdep update \ + && rosdep update --rosdistro noetic \ + && rosdep fix-permissions \ + && rosdep install -y --from-paths . --ignore-src --rosdistro noetic + +# Always source catkin_setup.sh when launching bash +RUN echo "source /usr/local/bin/catkin_setup.sh" >> /root/.bashrc +COPY catkin_setup.sh /usr/local/bin/catkin_setup.sh +RUN chmod +x /usr/local/bin/catkin_setup.sh + +ENTRYPOINT ["/usr/local/bin/catkin_setup.sh"] +CMD ["bash"] + +RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub && \ + apt-get update && apt-get install -y --no-install-recommends \ + cuda-nvrtc-${CUDA/./-} \ + libcudnn8=${CUDNN_VERSION}-1+cuda${CUDA} \ + -r cuda_requirements.txt + +# We don't install libnvinfer-dev since we don't need to build against TensorRT +RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub && \ + echo "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64 /" > /etc/apt/sources.list.d/tensorRT.list && \ + apt-get update && \ + apt-get install -y --no-install-recommends libnvinfer7=${TF_TENSORRT_VERSION}-1+cuda11.0 \ + libnvinfer-plugin7=${TF_TENSORRT_VERSION}-1+cuda11.0 \ + && apt-get clean && \ + rm -rf /var/lib/apt/lists/*; + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d08c640 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,39 @@ +# Recomandation for library to install in python + +setuptools +pandas +scipy +sklearn +future +grpcio +h5py +requests +opencv-python +python-math +random2 +pytest-warnings +os.path2 +pydicom +glob2 +pytest-shutil +DateTime +zipfile36 +urllib3 +python-time +trimesh +librosa +gym +matplotlib +image-slicer +nvidia-ml-py3 +imgaug +tqdm +rosdep + +protobuf==3.15.2 +numpy==1.19.2 +numba==0.55.2 +imageio==2.9.0 +pillow==7.2.0 +tensorflow==2.7.0 +keras==2.7.0 diff --git a/ros_repository_requirements.txt b/ros_repository_requirements.txt new file mode 100644 index 0000000..09c4578 --- /dev/null +++ b/ros_repository_requirements.txt @@ -0,0 +1,9 @@ +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-OP3-msgs +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-OP3 +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-OP3-Tools +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-Framework-msgs +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-Framework +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-OP3-Common +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-Utility +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-OP3-Demo +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-Math diff --git a/ros_requirements.txt b/ros_requirements.txt new file mode 100644 index 0000000..7b80df2 --- /dev/null +++ b/ros_requirements.txt @@ -0,0 +1,15 @@ +# Recomandation for dependencies for ros system + +ros-noetic-desktop-full +build-essential +ros-noetic-catkin +python-rosdep +python-rosinstall +python-rosinstall-generator +python-wstool +python-catkin-tools +ros-noetic-pcl-ros +ros-noetic-flexbe-behavior-engine +ros-noetic-moveit +ros-noetic-gazebo-ros-pkgs +ros-noetic-gazebo-ros-control diff --git a/system_requirements.txt b/system_requirements.txt new file mode 100644 index 0000000..46eea93 --- /dev/null +++ b/system_requirements.txt @@ -0,0 +1,29 @@ +# Recomandation for dependencies for linux system + +software-properties-common +python3.8 +neovim +apt-utils +automake +build-essential +ca-certificates +pycurl +git +python3-pip +libcurl3-dev +libfreetype6-dev +libpng-dev +libtool +libzmq3-dev +mlocate +openjdk-8-jdk +openjdk-8-jre-headless +pkg-config +python-dev +software-properties-common +swig +unzip +wget +zip +zlib1g-dev +python3-distutils From e21ca01cfabf9df86144d21b4a5254b392e62e22 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Thu, 4 Aug 2022 05:17:59 -0400 Subject: [PATCH 100/172] Update cmake.yml --- .github/workflows/cmake.yml | 82 +++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 21 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 97f7fe7..9bf6f0a 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -2,36 +2,76 @@ name: CMake on: push: - branches: [ noetic ] + branches: [ master ] pull_request: - branches: [ noetic ] + branches: [ master ] env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: Release jobs: build: - # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. - # You can convert this to a matrix build if you need cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix runs-on: ubuntu-latest - steps: - uses: actions/checkout@v3 - - name: Configure CMake - # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. - # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} - - - name: Build - # Build your program with the given configuration - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Test - working-directory: ${{github.workspace}}/build - # Execute tests defined by the CMake configuration. - # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail - run: ctest -C ${{env.BUILD_TYPE}} + - name: Configure CMake 1 + run: cmake -E make_directory ${{runner.workspace}}/op3_ball_detector/build + - name: Configure CMake 2 + run: cmake -E make_directory ${{runner.workspace}}/op3_bringup/build + + - name: Configure CMake 2 + run: cmake -E make_directory ${{runner.workspace}}/op3_demo/build + + - name: Configure CMake 4 + run: cmake -E make_directory ${{runner.workspace}}/op3_read_write_demo/build + + - name: Configure CMake 5 + run: cmake -E make_directory ${{runner.workspace}}/robotis_op3_demo/build + + + + - name: Install dependencies + shell: bash + run: sudo apt-get update ; sudo apt-get install Date: Wed, 27 Sep 2023 09:51:05 -0400 Subject: [PATCH 101/172] latest pushes --- .github/workflows/cmake.yml | 78 +++++-------------- Dockerfile => docker/Dockerfile | 0 gpu.Dockerfile => docker/gpu.Dockerfile | 0 push.sh | 4 + .../requirements.txt | 0 .../ros_repository_requirements.txt | 0 .../ros_requirements.txt | 0 .../system_requirements.txt | 0 8 files changed, 23 insertions(+), 59 deletions(-) rename Dockerfile => docker/Dockerfile (100%) rename gpu.Dockerfile => docker/gpu.Dockerfile (100%) create mode 100755 push.sh rename requirements.txt => requirements/requirements.txt (100%) rename ros_repository_requirements.txt => requirements/ros_repository_requirements.txt (100%) rename ros_requirements.txt => requirements/ros_requirements.txt (100%) rename system_requirements.txt => requirements/system_requirements.txt (100%) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 9bf6f0a..97f7fe7 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -2,76 +2,36 @@ name: CMake on: push: - branches: [ master ] + branches: [ noetic ] pull_request: - branches: [ master ] + branches: [ noetic ] env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: Release jobs: build: + # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. + # You can convert this to a matrix build if you need cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix runs-on: ubuntu-latest + steps: - uses: actions/checkout@v3 - - name: Configure CMake 1 - run: cmake -E make_directory ${{runner.workspace}}/op3_ball_detector/build - - - name: Configure CMake 2 - run: cmake -E make_directory ${{runner.workspace}}/op3_bringup/build - - - name: Configure CMake 2 - run: cmake -E make_directory ${{runner.workspace}}/op3_demo/build - - - name: Configure CMake 4 - run: cmake -E make_directory ${{runner.workspace}}/op3_read_write_demo/build - - - name: Configure CMake 5 - run: cmake -E make_directory ${{runner.workspace}}/robotis_op3_demo/build - - - - - name: Install dependencies - shell: bash - run: sudo apt-get update ; sudo apt-get install Date: Wed, 27 Sep 2023 16:28:56 -0400 Subject: [PATCH 102/172] latest pushes --- .robotis_humanoid_robot_demo.rosinstall | 2 + .robotis_op3_demo.rosinstall | 2 - .travis.yml | 2 +- README.md | 45 +++++----------- fix_errors.sh | 31 +++++++++++ .../CHANGELOG.rst | 6 +-- .../CMakeLists.txt | 2 +- .../cfg/DetectorParams.cfg | 2 +- .../cfg/DetectorParamsBlue.cfg | 2 +- .../cfg/DetectorParamsRed.cfg | 2 +- .../config/ball_detector_params.yaml | 0 .../config/ball_detector_params_default.yaml | 0 .../config/ball_detector_params_op.yaml | 0 .../ball_detector.h | 26 +++++----- .../ball_detector_config.h | 0 .../launch/ball_detector.launch | 4 +- .../launch/ball_detector_from_usb_cam.launch | 2 +- .../launch/ball_detector_from_uvc.launch | 2 +- .../msg/BallDetectorParams.msg | 0 .../msg/CircleSetStamped.msg | 0 .../package.xml | 10 ++-- .../rviz/ball_detector.rviz | 0 .../src/ball_detector.cpp | 18 +++---- .../src/ball_detector_node.cpp | 2 +- .../srv/GetParameters.srv | 0 .../srv/SetParameters.srv | 0 .../CHANGELOG.rst | 4 +- .../CMakeLists.txt | 2 +- .../launch/humanoid_robot_bringup.launch | 4 +- ...umanoid_robot_bringup_visualization.launch | 4 +- .../package.xml | 22 ++++---- .../rviz/humanoid_robot_bringup.rviz | 0 .../CHANGELOG.rst | 6 +-- .../CMakeLists.txt | 14 ++--- .../data/mp3/Autonomous soccer mode.mp3 | Bin .../data/mp3/Bye bye.mp3 | Bin .../data/mp3/Clap please.mp3 | Bin .../data/mp3/Demonstration ready mode.mp3 | Bin .../data/mp3/Headstand.mp3 | Bin .../data/mp3/Interactive motion mode.mp3 | Bin .../data/mp3/Intro01.mp3 | Bin .../data/mp3/Intro02.mp3 | Bin .../data/mp3/Intro03.mp3 | Bin .../data/mp3/Introduction.mp3 | Bin .../data/mp3/Left kick.mp3 | Bin .../data/mp3/No.mp3 | Bin .../data/mp3/Oops.mp3 | Bin .../data/mp3/Right kick.mp3 | Bin .../data/mp3/Sensor calibration complete.mp3 | Bin .../data/mp3/Sensor calibration fail.mp3 | Bin .../data/mp3/Shoot.mp3 | Bin .../data/mp3/Sit down.mp3 | Bin .../data/mp3/Stand up.mp3 | Bin .../data/mp3/Start motion demonstration.mp3 | Bin .../data/mp3/Start soccer demonstration.mp3 | Bin .../Start vision processing demonstration.mp3 | Bin .../data/mp3/System shutdown.mp3 | Bin .../data/mp3/Thank you.mp3 | Bin .../data/mp3/Vision processing mode.mp3 | Bin .../data/mp3/Wow.mp3 | Bin .../data/mp3/Yes go.mp3 | Bin .../data/mp3/Yes.mp3 | Bin .../data/mp3/intro_test.mp3 | Bin .../data/mp3/test/Announce mic test.mp3 | Bin .../data/mp3/test/Button test mode.mp3 | Bin .../data/mp3/test/Mic test mode.mp3 | Bin .../mp3/test/Mode button long pressed.mp3 | Bin .../data/mp3/test/Mode button pressed.mp3 | Bin .../data/mp3/test/Self test ready mode.mp3 | Bin .../mp3/test/Start button long pressed.mp3 | Bin .../data/mp3/test/Start button pressed.mp3 | Bin .../data/mp3/test/Start button test mode.mp3 | Bin .../data/mp3/test/Start mic test mode.mp3 | Bin .../data/mp3/test/Start playing.mp3 | Bin .../data/mp3/test/Start recording.mp3 | Bin .../mp3/test/User button long pressed.mp3 | Bin .../data/mp3/test/User button pressed.mp3 | Bin .../humanoid_robot_demo}/action_demo.h | 4 +- .../humanoid_robot_demo}/ball_follower.h | 8 +-- .../humanoid_robot_demo}/ball_tracker.h | 8 +-- .../humanoid_robot_demo}/button_test.h | 2 +- .../humanoid_robot_demo}/face_tracker.h | 0 .../include/humanoid_robot_demo}/mic_test.h | 2 +- .../include/humanoid_robot_demo}/op_demo.h | 0 .../humanoid_robot_demo}/soccer_demo.h | 8 +-- .../humanoid_robot_demo}/vision_demo.h | 4 +- humanoid_robot_demo/launch/demo.launch | 28 ++++++++++ .../face_detection_humanoid_robot.launch | 0 humanoid_robot_demo/launch/self_test.launch | 28 ++++++++++ humanoid_robot_demo/list/action_script.yaml | 23 +++++++++ .../list/action_script_bk.yaml | 18 +++++++ {op3_demo => humanoid_robot_demo}/package.xml | 48 +++++++++--------- .../src/action/action_demo.cpp | 8 +-- .../src/demo_node.cpp | 16 +++--- .../src/soccer/ball_follower.cpp | 8 +-- .../src/soccer/ball_tracker.cpp | 4 +- .../src/soccer/soccer_demo.cpp | 8 +-- .../src/test/button_test.cpp | 4 +- .../src/test/mic_test.cpp | 6 +-- .../src/test_node.cpp | 20 ++++---- .../src/vision/face_tracker.cpp | 2 +- .../src/vision/vision_demo.cpp | 2 +- .../CHANGELOG.rst | 2 +- .../CMakeLists.txt | 2 +- .../launch/humanoid_robot_read_write.launch | 24 +++++++++ .../package.xml | 18 +++---- .../src/read_write.cpp | 12 ++--- op3_demo/launch/demo.launch | 28 ---------- op3_demo/launch/self_test.launch | 28 ---------- op3_demo/list/action_script.yaml | 23 --------- op3_demo/list/action_script_bk.yaml | 18 ------- .../launch/op3_read_write.launch | 24 --------- requirements/ros_repository_requirements.txt | 10 ++-- .../CHANGELOG.rst | 8 +-- .../CMakeLists.txt | 2 +- robotis_humanoid_robot_demo/package.xml | 34 +++++++++++++ robotis_op3_demo/package.xml | 34 ------------- 117 files changed, 378 insertions(+), 364 deletions(-) create mode 100644 .robotis_humanoid_robot_demo.rosinstall delete mode 100644 .robotis_op3_demo.rosinstall create mode 100755 fix_errors.sh rename {op3_ball_detector => humanoid_robot_ball_detector}/CHANGELOG.rst (66%) rename {op3_ball_detector => humanoid_robot_ball_detector}/CMakeLists.txt (99%) rename {op3_ball_detector => humanoid_robot_ball_detector}/cfg/DetectorParams.cfg (98%) rename {op3_ball_detector => humanoid_robot_ball_detector}/cfg/DetectorParamsBlue.cfg (98%) rename {op3_ball_detector => humanoid_robot_ball_detector}/cfg/DetectorParamsRed.cfg (98%) rename {op3_ball_detector => humanoid_robot_ball_detector}/config/ball_detector_params.yaml (100%) rename {op3_ball_detector => humanoid_robot_ball_detector}/config/ball_detector_params_default.yaml (100%) rename {op3_ball_detector => humanoid_robot_ball_detector}/config/ball_detector_params_op.yaml (100%) rename {op3_ball_detector/include/op3_ball_detector => humanoid_robot_ball_detector/include/humanoid_robot_ball_detector}/ball_detector.h (82%) rename {op3_ball_detector/include/op3_ball_detector => humanoid_robot_ball_detector/include/humanoid_robot_ball_detector}/ball_detector_config.h (100%) rename {op3_ball_detector => humanoid_robot_ball_detector}/launch/ball_detector.launch (61%) rename {op3_ball_detector => humanoid_robot_ball_detector}/launch/ball_detector_from_usb_cam.launch (94%) rename {op3_ball_detector => humanoid_robot_ball_detector}/launch/ball_detector_from_uvc.launch (91%) rename {op3_ball_detector => humanoid_robot_ball_detector}/msg/BallDetectorParams.msg (100%) rename {op3_ball_detector => humanoid_robot_ball_detector}/msg/CircleSetStamped.msg (100%) rename {op3_ball_detector => humanoid_robot_ball_detector}/package.xml (93%) rename {op3_ball_detector => humanoid_robot_ball_detector}/rviz/ball_detector.rviz (100%) rename {op3_ball_detector => humanoid_robot_ball_detector}/src/ball_detector.cpp (98%) rename {op3_ball_detector => humanoid_robot_ball_detector}/src/ball_detector_node.cpp (96%) rename {op3_ball_detector => humanoid_robot_ball_detector}/srv/GetParameters.srv (100%) rename {op3_ball_detector => humanoid_robot_ball_detector}/srv/SetParameters.srv (100%) rename {op3_bringup => humanoid_robot_bringup}/CHANGELOG.rst (75%) rename {op3_bringup => humanoid_robot_bringup}/CMakeLists.txt (98%) rename op3_bringup/launch/op3_bringup.launch => humanoid_robot_bringup/launch/humanoid_robot_bringup.launch (80%) rename op3_bringup/launch/op3_bringup_visualization.launch => humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch (75%) rename {op3_bringup => humanoid_robot_bringup}/package.xml (68%) rename op3_bringup/rviz/op3_bringup.rviz => humanoid_robot_bringup/rviz/humanoid_robot_bringup.rviz (100%) rename {op3_demo => humanoid_robot_demo}/CHANGELOG.rst (67%) rename {op3_demo => humanoid_robot_demo}/CMakeLists.txt (94%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Autonomous soccer mode.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Bye bye.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Clap please.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Demonstration ready mode.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Headstand.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Interactive motion mode.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Intro01.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Intro02.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Intro03.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Introduction.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Left kick.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/No.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Oops.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Right kick.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Sensor calibration complete.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Sensor calibration fail.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Shoot.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Sit down.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Stand up.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Start motion demonstration.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Start soccer demonstration.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Start vision processing demonstration.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/System shutdown.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Thank you.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Vision processing mode.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Wow.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Yes go.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/Yes.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/intro_test.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Announce mic test.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Button test mode.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Mic test mode.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Mode button long pressed.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Mode button pressed.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Self test ready mode.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Start button long pressed.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Start button pressed.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Start button test mode.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Start mic test mode.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Start playing.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/Start recording.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/User button long pressed.mp3 (100%) rename {op3_demo => humanoid_robot_demo}/data/mp3/test/User button pressed.mp3 (100%) rename {op3_demo/include/op3_demo => humanoid_robot_demo/include/humanoid_robot_demo}/action_demo.h (96%) rename {op3_demo/include/op3_demo => humanoid_robot_demo/include/humanoid_robot_demo}/ball_follower.h (93%) rename {op3_demo/include/op3_demo => humanoid_robot_demo/include/humanoid_robot_demo}/ball_tracker.h (91%) rename {op3_demo/include/op3_demo => humanoid_robot_demo/include/humanoid_robot_demo}/button_test.h (97%) rename {op3_demo/include/op3_demo => humanoid_robot_demo/include/humanoid_robot_demo}/face_tracker.h (100%) rename {op3_demo/include/op3_demo => humanoid_robot_demo/include/humanoid_robot_demo}/mic_test.h (98%) rename {op3_demo/include/op3_demo => humanoid_robot_demo/include/humanoid_robot_demo}/op_demo.h (100%) rename {op3_demo/include/op3_demo => humanoid_robot_demo/include/humanoid_robot_demo}/soccer_demo.h (95%) rename {op3_demo/include/op3_demo => humanoid_robot_demo/include/humanoid_robot_demo}/vision_demo.h (96%) create mode 100644 humanoid_robot_demo/launch/demo.launch rename op3_demo/launch/face_detection_op3.launch => humanoid_robot_demo/launch/face_detection_humanoid_robot.launch (100%) create mode 100644 humanoid_robot_demo/launch/self_test.launch create mode 100644 humanoid_robot_demo/list/action_script.yaml create mode 100644 humanoid_robot_demo/list/action_script_bk.yaml rename {op3_demo => humanoid_robot_demo}/package.xml (63%) rename {op3_demo => humanoid_robot_demo}/src/action/action_demo.cpp (96%) rename {op3_demo => humanoid_robot_demo}/src/demo_node.cpp (95%) rename {op3_demo => humanoid_robot_demo}/src/soccer/ball_follower.cpp (97%) rename {op3_demo => humanoid_robot_demo}/src/soccer/ball_tracker.cpp (98%) rename {op3_demo => humanoid_robot_demo}/src/soccer/soccer_demo.cpp (98%) rename {op3_demo => humanoid_robot_demo}/src/test/button_test.cpp (96%) rename {op3_demo => humanoid_robot_demo}/src/test/mic_test.cpp (96%) rename {op3_demo => humanoid_robot_demo}/src/test_node.cpp (95%) rename {op3_demo => humanoid_robot_demo}/src/vision/face_tracker.cpp (99%) rename {op3_demo => humanoid_robot_demo}/src/vision/vision_demo.cpp (99%) rename {op3_read_write_demo => humanoid_robot_read_write_demo}/CHANGELOG.rst (80%) rename {op3_read_write_demo => humanoid_robot_read_write_demo}/CMakeLists.txt (98%) create mode 100644 humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch rename {op3_read_write_demo => humanoid_robot_read_write_demo}/package.xml (71%) rename {op3_read_write_demo => humanoid_robot_read_write_demo}/src/read_write.cpp (96%) delete mode 100644 op3_demo/launch/demo.launch delete mode 100644 op3_demo/launch/self_test.launch delete mode 100644 op3_demo/list/action_script.yaml delete mode 100644 op3_demo/list/action_script_bk.yaml delete mode 100644 op3_read_write_demo/launch/op3_read_write.launch rename {robotis_op3_demo => robotis_humanoid_robot_demo}/CHANGELOG.rst (62%) rename {robotis_op3_demo => robotis_humanoid_robot_demo}/CMakeLists.txt (70%) create mode 100644 robotis_humanoid_robot_demo/package.xml delete mode 100644 robotis_op3_demo/package.xml diff --git a/.robotis_humanoid_robot_demo.rosinstall b/.robotis_humanoid_robot_demo.rosinstall new file mode 100644 index 0000000..ae00de8 --- /dev/null +++ b/.robotis_humanoid_robot_demo.rosinstall @@ -0,0 +1,2 @@ +- git: {local-name: robotis_humanoid_robot_tools, uri: 'https://github.com/Robotics-Sensors/ROBOTIS-HUMANOID_ROBOT-Tools.git', version: noetic} +- git: {local-name: humanoid_navigation, uri: 'https://github.com/Robotics-Sensors/humanoid_navigation.git', version: noetic} diff --git a/.robotis_op3_demo.rosinstall b/.robotis_op3_demo.rosinstall deleted file mode 100644 index ab42395..0000000 --- a/.robotis_op3_demo.rosinstall +++ /dev/null @@ -1,2 +0,0 @@ -- git: {local-name: robotis_op3_tools, uri: 'https://github.com/Robotics-Sensors/ROBOTIS-OP3-Tools.git', version: noetic} -- git: {local-name: humanoid_navigation, uri: 'https://github.com/Robotics-Sensors/humanoid_navigation.git', version: noetic} diff --git a/.travis.yml b/.travis.yml index edbc427..8bae4ff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ notifications: - ronaldsonbellande@gmail.com env: matrix: - - ROS_DISTRO=noetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file OS_NAME=ubuntu OS_CODE_NAME=focal $ROSINSTALL_FILENAME=".robotis_op3_demo.rosinstall" + - ROS_DISTRO=noetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file OS_NAME=ubuntu OS_CODE_NAME=focal $ROSINSTALL_FILENAME=".robotis_humanoid_robot_demo.rosinstall" branches: only: - master diff --git a/README.md b/README.md index cd34832..a6a7663 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,19 @@ -# ROBOTIS OP3 - +# ROS/ROS2 Humanoid Robot Demos -## ROS Packages for ROBOTIS OP3 Demo -|Version|Kinetic + Ubuntu Xenial|Melodic + Ubuntu Bionic| -|:---:|:---:|:---:| -|[![GitHub version](https://badge.fury.io/gh/ROBOTIS-GIT%2FROBOTIS-OP3-Demo.svg)](https://badge.fury.io/gh/ROBOTIS-GIT%2FROBOTIS-OP3-Demo)|[![Build Status](https://travis-ci.org/ROBOTIS-GIT/ROBOTIS-OP3-Demo.svg?branch=kinetic-devel)](https://travis-ci.org/ROBOTIS-GIT/ROBOTIS-OP3-Demo)|-| +-------------------------------------------------------------------------------------------------------- +Updated Version [humanoid_robot_module](https://github.com/Robotics-Sensors/humanoid_robot_demos) readme. -## ROBOTIS e-Manual for ROBOTIS OP3 -- [ROBOTIS e-Manual for ROBOTIS OP3](http://emanual.robotis.com/docs/en/platform/op3/introduction/) +-------------------------------------------------------------------------------------------------------- +## Important +The repository has diverged, as the old commits and codes are under the previous License and +the new commits and codes are under New License -## Wiki for robotis_op3_demo Packages -- http://wiki.ros.org/robotis_op3_demo (metapackage) -- http://wiki.ros.org/op3_ball_detector -- http://wiki.ros.org/op3_bringup -- http://wiki.ros.org/op3_demo +-------------------------------------------------------------------------------------------------------- +Latest versions and Maintainer is on organization https://github.com/Robotics-Sensors -## Open Source related to ROBOTIS OP3 -- [robotis_op3](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3) -- [robotis_op3_msgs](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-msgs) -- [robotis_op3_common](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Common) -- [robotis_op3_tools](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Tools) -- [robotis_op3_demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) -- [robotis_framework](https://github.com/ROBOTIS-GIT/ROBOTIS-Framework) -- [robotis_controller_msgs](https://github.com/ROBOTIS-GIT/ROBOTIS-Framework-msgs) -- [robotis_utility](https://github.com/ROBOTIS-GIT/ROBOTIS-Utility) -- [robotis_math](https://github.com/ROBOTIS-GIT/ROBOTIS-Math) -- [dynamixel_sdk](https://github.com/ROBOTIS-GIT/DynamixelSDK) -- [OpenCR-Hardware](https://github.com/ROBOTIS-GIT/OpenCR-Hardware) -- [OpenCR](https://github.com/ROBOTIS-GIT/OpenCR) -## Documents and Videos related to ROBOTIS OP3 -- [ROBOTIS e-Manual for ROBOTIS OP3](http://emanual.robotis.com/docs/en/platform/op3/introduction/) -- [ROBOTIS e-Manual for ROBOTIS THORMANG3](http://emanual.robotis.com/docs/en/platform/thormang3/introduction/) -- [ROBOTIS e-Manual for ROBOTIS Framework](http://emanual.robotis.com/docs/en/software/robotis_framework_packages/) -- [ROBOTIS e-Manual for Dynamixel SDK](http://emanual.robotis.com/docs/en/software/dynamixel/dynamixel_sdk/overview/) +### Maintainer +* Ronaldson Bellande + +## License +This SDK is distributed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0), see [LICENSE](https://github.com/Robotics-Sensors/humanoid_robot_demos/blob/main/LICENSE) and [NOTICE](https://github.com/Robotics-Sensors/humanoid_robot_demos/blob/main/LICENSE) for more information. diff --git a/fix_errors.sh b/fix_errors.sh new file mode 100755 index 0000000..2ebdbee --- /dev/null +++ b/fix_errors.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Get the URL from .git/config +git_url=$(git config --get remote.origin.url) + +# Check if a URL is found +if [ -z "$git_url" ]; then + echo "No remote URL found in .git/config." + exit 1 +fi + +# Clone the repository into a temporary folder +git clone "$git_url" tmp_clone + +# Check if the clone was successful +if [ $? -eq 0 ]; then + # Remove the existing .git directory if it exists + if [ -d ".git" ]; then + rm -rf .git + fi + + # Copy the .git directory from the clone to the current repository + cp -r tmp_clone/.git . + + # Remove the clone directory + rm -rf tmp_clone + + echo "Repository cloned and .git directory copied successfully." +else + echo "Failed to clone the repository." +fi diff --git a/op3_ball_detector/CHANGELOG.rst b/humanoid_robot_ball_detector/CHANGELOG.rst similarity index 66% rename from op3_ball_detector/CHANGELOG.rst rename to humanoid_robot_ball_detector/CHANGELOG.rst index 17f4188..91554a7 100644 --- a/op3_ball_detector/CHANGELOG.rst +++ b/humanoid_robot_ball_detector/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package op3_ball_detector +Changelog for package humanoid_robot_ball_detector ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.0 (2021-05-05) @@ -10,8 +10,8 @@ Changelog for package op3_ball_detector 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic -* added launch files in order to move the camera setting to op3_camera_setting package +* added launch files in order to move the camera setting to humanoid_robot_camera_setting package * added missing package in find_package() * refacoring to release -* split repositoryfrom ROBOTIS-OP3 +* split repositoryfrom ROBOTIS-HUMANOID_ROBOT * Contributors: Kayman, Zerom, Pyo diff --git a/op3_ball_detector/CMakeLists.txt b/humanoid_robot_ball_detector/CMakeLists.txt similarity index 99% rename from op3_ball_detector/CMakeLists.txt rename to humanoid_robot_ball_detector/CMakeLists.txt index 80e85e3..2f78705 100644 --- a/op3_ball_detector/CMakeLists.txt +++ b/humanoid_robot_ball_detector/CMakeLists.txt @@ -2,7 +2,7 @@ # Set minimum required version of cmake, project name and compile options ################################################################################ cmake_minimum_required(VERSION 3.0.2) -project(op3_ball_detector) +project(humanoid_robot_ball_detector) ################################################################################ # Find catkin packages and libraries for catkin and system dependencies diff --git a/op3_ball_detector/cfg/DetectorParams.cfg b/humanoid_robot_ball_detector/cfg/DetectorParams.cfg similarity index 98% rename from op3_ball_detector/cfg/DetectorParams.cfg rename to humanoid_robot_ball_detector/cfg/DetectorParams.cfg index e627907..203fd0c 100755 --- a/op3_ball_detector/cfg/DetectorParams.cfg +++ b/humanoid_robot_ball_detector/cfg/DetectorParams.cfg @@ -1,5 +1,5 @@ #!/usr/bin/env python -PACKAGE='op3_ball_detector' +PACKAGE='humanoid_robot_ball_detector' from dynamic_reconfigure.parameter_generator_catkin import * diff --git a/op3_ball_detector/cfg/DetectorParamsBlue.cfg b/humanoid_robot_ball_detector/cfg/DetectorParamsBlue.cfg similarity index 98% rename from op3_ball_detector/cfg/DetectorParamsBlue.cfg rename to humanoid_robot_ball_detector/cfg/DetectorParamsBlue.cfg index 391e99f..2884c7d 100755 --- a/op3_ball_detector/cfg/DetectorParamsBlue.cfg +++ b/humanoid_robot_ball_detector/cfg/DetectorParamsBlue.cfg @@ -1,5 +1,5 @@ #!/usr/bin/env python -PACKAGE='op3_ball_detector' +PACKAGE='humanoid_robot_ball_detector' from dynamic_reconfigure.parameter_generator_catkin import * diff --git a/op3_ball_detector/cfg/DetectorParamsRed.cfg b/humanoid_robot_ball_detector/cfg/DetectorParamsRed.cfg similarity index 98% rename from op3_ball_detector/cfg/DetectorParamsRed.cfg rename to humanoid_robot_ball_detector/cfg/DetectorParamsRed.cfg index 6d8dbad..5e78e85 100755 --- a/op3_ball_detector/cfg/DetectorParamsRed.cfg +++ b/humanoid_robot_ball_detector/cfg/DetectorParamsRed.cfg @@ -1,5 +1,5 @@ #!/usr/bin/env python -PACKAGE='op3_ball_detector' +PACKAGE='humanoid_robot_ball_detector' from dynamic_reconfigure.parameter_generator_catkin import * diff --git a/op3_ball_detector/config/ball_detector_params.yaml b/humanoid_robot_ball_detector/config/ball_detector_params.yaml similarity index 100% rename from op3_ball_detector/config/ball_detector_params.yaml rename to humanoid_robot_ball_detector/config/ball_detector_params.yaml diff --git a/op3_ball_detector/config/ball_detector_params_default.yaml b/humanoid_robot_ball_detector/config/ball_detector_params_default.yaml similarity index 100% rename from op3_ball_detector/config/ball_detector_params_default.yaml rename to humanoid_robot_ball_detector/config/ball_detector_params_default.yaml diff --git a/op3_ball_detector/config/ball_detector_params_op.yaml b/humanoid_robot_ball_detector/config/ball_detector_params_op.yaml similarity index 100% rename from op3_ball_detector/config/ball_detector_params_op.yaml rename to humanoid_robot_ball_detector/config/ball_detector_params_op.yaml diff --git a/op3_ball_detector/include/op3_ball_detector/ball_detector.h b/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector.h similarity index 82% rename from op3_ball_detector/include/op3_ball_detector/ball_detector.h rename to humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector.h index c6b4833..0435d13 100644 --- a/op3_ball_detector/include/op3_ball_detector/ball_detector.h +++ b/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector.h @@ -36,12 +36,12 @@ #include #include -#include "op3_ball_detector/ball_detector_config.h" +#include "humanoid_robot_ball_detector/ball_detector_config.h" -#include "op3_ball_detector/CircleSetStamped.h" -#include "op3_ball_detector/DetectorParamsConfig.h" -#include "op3_ball_detector/GetParameters.h" -#include "op3_ball_detector/SetParameters.h" +#include "humanoid_robot_ball_detector/CircleSetStamped.h" +#include "humanoid_robot_ball_detector/DetectorParamsConfig.h" +#include "humanoid_robot_ball_detector/GetParameters.h" +#include "humanoid_robot_ball_detector/SetParameters.h" namespace robotis_op { @@ -71,15 +71,15 @@ protected: // callbacks to camera info subscription void cameraInfoCallback(const sensor_msgs::CameraInfo &msg); - void dynParamCallback(op3_ball_detector::DetectorParamsConfig &config, + void dynParamCallback(humanoid_robot_ball_detector::DetectorParamsConfig &config, uint32_t level); void enableCallback(const std_msgs::Bool::ConstPtr &msg); void paramCommandCallback(const std_msgs::String::ConstPtr &msg); - bool setParamCallback(op3_ball_detector::SetParameters::Request &req, - op3_ball_detector::SetParameters::Response &res); - bool getParamCallback(op3_ball_detector::GetParameters::Request &req, - op3_ball_detector::GetParameters::Response &res); + bool setParamCallback(humanoid_robot_ball_detector::SetParameters::Request &req, + humanoid_robot_ball_detector::SetParameters::Response &res); + bool getParamCallback(humanoid_robot_ball_detector::GetParameters::Request &req, + humanoid_robot_ball_detector::GetParameters::Response &res); void resetParameter(); void publishParam(); @@ -117,7 +117,7 @@ protected: int not_found_count_; // circle set publisher - op3_ball_detector::CircleSetStamped circles_msg_; + humanoid_robot_ball_detector::CircleSetStamped circles_msg_; ros::Publisher circles_pub_; // camera info subscriber @@ -159,10 +159,10 @@ protected: cv::Mat in_image_; cv::Mat out_image_; - dynamic_reconfigure::Server + dynamic_reconfigure::Server param_server_; dynamic_reconfigure::Server< - op3_ball_detector::DetectorParamsConfig>::CallbackType callback_fnc_; + humanoid_robot_ball_detector::DetectorParamsConfig>::CallbackType callback_fnc_; }; } // namespace robotis_op diff --git a/op3_ball_detector/include/op3_ball_detector/ball_detector_config.h b/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector_config.h similarity index 100% rename from op3_ball_detector/include/op3_ball_detector/ball_detector_config.h rename to humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector_config.h diff --git a/op3_ball_detector/launch/ball_detector.launch b/humanoid_robot_ball_detector/launch/ball_detector.launch similarity index 61% rename from op3_ball_detector/launch/ball_detector.launch rename to humanoid_robot_ball_detector/launch/ball_detector.launch index 475eb62..a984f30 100644 --- a/op3_ball_detector/launch/ball_detector.launch +++ b/humanoid_robot_ball_detector/launch/ball_detector.launch @@ -1,9 +1,9 @@ - + - + diff --git a/op3_ball_detector/launch/ball_detector_from_usb_cam.launch b/humanoid_robot_ball_detector/launch/ball_detector_from_usb_cam.launch similarity index 94% rename from op3_ball_detector/launch/ball_detector_from_usb_cam.launch rename to humanoid_robot_ball_detector/launch/ball_detector_from_usb_cam.launch index 7f3ae14..3d3d285 100644 --- a/op3_ball_detector/launch/ball_detector_from_usb_cam.launch +++ b/humanoid_robot_ball_detector/launch/ball_detector_from_usb_cam.launch @@ -23,5 +23,5 @@ - + diff --git a/op3_ball_detector/launch/ball_detector_from_uvc.launch b/humanoid_robot_ball_detector/launch/ball_detector_from_uvc.launch similarity index 91% rename from op3_ball_detector/launch/ball_detector_from_uvc.launch rename to humanoid_robot_ball_detector/launch/ball_detector_from_uvc.launch index 4b5ed9a..87c5654 100644 --- a/op3_ball_detector/launch/ball_detector_from_uvc.launch +++ b/humanoid_robot_ball_detector/launch/ball_detector_from_uvc.launch @@ -28,5 +28,5 @@ - + diff --git a/op3_ball_detector/msg/BallDetectorParams.msg b/humanoid_robot_ball_detector/msg/BallDetectorParams.msg similarity index 100% rename from op3_ball_detector/msg/BallDetectorParams.msg rename to humanoid_robot_ball_detector/msg/BallDetectorParams.msg diff --git a/op3_ball_detector/msg/CircleSetStamped.msg b/humanoid_robot_ball_detector/msg/CircleSetStamped.msg similarity index 100% rename from op3_ball_detector/msg/CircleSetStamped.msg rename to humanoid_robot_ball_detector/msg/CircleSetStamped.msg diff --git a/op3_ball_detector/package.xml b/humanoid_robot_ball_detector/package.xml similarity index 93% rename from op3_ball_detector/package.xml rename to humanoid_robot_ball_detector/package.xml index 8713a7a..1a5c1fc 100644 --- a/op3_ball_detector/package.xml +++ b/humanoid_robot_ball_detector/package.xml @@ -1,6 +1,6 @@ - op3_ball_detector + humanoid_robot_ball_detector 0.1.0 This package implements a circle-like shape detector of the input image @@ -12,10 +12,10 @@ Zerom Ronaldson Bellande - http://wiki.ros.org/op3_ball_detector - http://emanual.robotis.com/docs/en/platform/op3/introduction/ - https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo - https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues + http://wiki.ros.org/humanoid_robot_ball_detector + http://emanual.robotis.com/docs/en/platform/humanoid_robot/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo/issues catkin diff --git a/op3_ball_detector/rviz/ball_detector.rviz b/humanoid_robot_ball_detector/rviz/ball_detector.rviz similarity index 100% rename from op3_ball_detector/rviz/ball_detector.rviz rename to humanoid_robot_ball_detector/rviz/ball_detector.rviz diff --git a/op3_ball_detector/src/ball_detector.cpp b/humanoid_robot_ball_detector/src/ball_detector.cpp similarity index 98% rename from op3_ball_detector/src/ball_detector.cpp rename to humanoid_robot_ball_detector/src/ball_detector.cpp index 9659133..e246d3d 100644 --- a/op3_ball_detector/src/ball_detector.cpp +++ b/humanoid_robot_ball_detector/src/ball_detector.cpp @@ -18,7 +18,7 @@ #include -#include "op3_ball_detector/ball_detector.h" +#include "humanoid_robot_ball_detector/ball_detector.h" namespace robotis_op { @@ -88,7 +88,7 @@ BallDetector::BallDetector() // sets publishers image_pub_ = it_.advertise("image_out", 100); circles_pub_ = - nh_.advertise("circle_set", 100); + nh_.advertise("circle_set", 100); camera_info_pub_ = nh_.advertise("camera_info", 100); // sets subscribers @@ -106,7 +106,7 @@ BallDetector::BallDetector() // web setting param_pub_ = - nh_.advertise("current_params", 1); + nh_.advertise("current_params", 1); param_command_sub_ = nh_.subscribe("param_command", 1, &BallDetector::paramCommandCallback, this); set_param_client_ = @@ -243,7 +243,7 @@ void BallDetector::imageCallback(const sensor_msgs::ImageConstPtr &msg) { } void BallDetector::dynParamCallback( - op3_ball_detector::DetectorParamsConfig &config, uint32_t level) { + humanoid_robot_ball_detector::DetectorParamsConfig &config, uint32_t level) { params_config_.gaussian_blur_size = config.gaussian_blur_size; params_config_.gaussian_blur_sigma = config.gaussian_blur_sigma; params_config_.canny_edge_th = config.canny_edge_th; @@ -299,8 +299,8 @@ void BallDetector::paramCommandCallback(const std_msgs::String::ConstPtr &msg) { } bool BallDetector::setParamCallback( - op3_ball_detector::SetParameters::Request &req, - op3_ball_detector::SetParameters::Response &res) { + humanoid_robot_ball_detector::SetParameters::Request &req, + humanoid_robot_ball_detector::SetParameters::Response &res) { params_config_.gaussian_blur_size = req.params.gaussian_blur_size; params_config_.gaussian_blur_sigma = req.params.gaussian_blur_sigma; params_config_.canny_edge_th = req.params.canny_edge_th; @@ -325,8 +325,8 @@ bool BallDetector::setParamCallback( } bool BallDetector::getParamCallback( - op3_ball_detector::GetParameters::Request &req, - op3_ball_detector::GetParameters::Response &res) { + humanoid_robot_ball_detector::GetParameters::Request &req, + humanoid_robot_ball_detector::GetParameters::Response &res) { res.returns.gaussian_blur_size = params_config_.gaussian_blur_size; res.returns.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; res.returns.canny_edge_th = params_config_.canny_edge_th; @@ -399,7 +399,7 @@ void BallDetector::resetParameter() { } void BallDetector::publishParam() { - op3_ball_detector::BallDetectorParams params; + humanoid_robot_ball_detector::BallDetectorParams params; params.gaussian_blur_size = params_config_.gaussian_blur_size; params.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; diff --git a/op3_ball_detector/src/ball_detector_node.cpp b/humanoid_robot_ball_detector/src/ball_detector_node.cpp similarity index 96% rename from op3_ball_detector/src/ball_detector_node.cpp rename to humanoid_robot_ball_detector/src/ball_detector_node.cpp index 421ff6a..770dd4c 100644 --- a/op3_ball_detector/src/ball_detector_node.cpp +++ b/humanoid_robot_ball_detector/src/ball_detector_node.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "op3_ball_detector/ball_detector.h" +#include "humanoid_robot_ball_detector/ball_detector.h" // node main int main(int argc, char **argv) { diff --git a/op3_ball_detector/srv/GetParameters.srv b/humanoid_robot_ball_detector/srv/GetParameters.srv similarity index 100% rename from op3_ball_detector/srv/GetParameters.srv rename to humanoid_robot_ball_detector/srv/GetParameters.srv diff --git a/op3_ball_detector/srv/SetParameters.srv b/humanoid_robot_ball_detector/srv/SetParameters.srv similarity index 100% rename from op3_ball_detector/srv/SetParameters.srv rename to humanoid_robot_ball_detector/srv/SetParameters.srv diff --git a/op3_bringup/CHANGELOG.rst b/humanoid_robot_bringup/CHANGELOG.rst similarity index 75% rename from op3_bringup/CHANGELOG.rst rename to humanoid_robot_bringup/CHANGELOG.rst index acc44a0..eb8094c 100644 --- a/op3_bringup/CHANGELOG.rst +++ b/humanoid_robot_bringup/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package op3_bringup +Changelog for package humanoid_robot_bringup ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.0 (2021-05-05) @@ -10,7 +10,7 @@ Changelog for package op3_bringup 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic -* updated CMakeLists.txt and package.xml of op3_bringup +* updated CMakeLists.txt and package.xml of humanoid_robot_bringup * changed rviz config file * refacoring to release * Contributors: Kayman, Pyo diff --git a/op3_bringup/CMakeLists.txt b/humanoid_robot_bringup/CMakeLists.txt similarity index 98% rename from op3_bringup/CMakeLists.txt rename to humanoid_robot_bringup/CMakeLists.txt index 629dcb4..631edc8 100644 --- a/op3_bringup/CMakeLists.txt +++ b/humanoid_robot_bringup/CMakeLists.txt @@ -2,7 +2,7 @@ # Set minimum required version of cmake, project name and compile options ################################################################################ cmake_minimum_required(VERSION 3.0.2) -project(op3_bringup) +project(humanoid_robot_bringup) ################################################################################ # Find catkin packages and libraries for catkin and system dependencies diff --git a/op3_bringup/launch/op3_bringup.launch b/humanoid_robot_bringup/launch/humanoid_robot_bringup.launch similarity index 80% rename from op3_bringup/launch/op3_bringup.launch rename to humanoid_robot_bringup/launch/humanoid_robot_bringup.launch index 63aa7c8..6d01824 100644 --- a/op3_bringup/launch/op3_bringup.launch +++ b/humanoid_robot_bringup/launch/humanoid_robot_bringup.launch @@ -1,7 +1,7 @@ - - + + diff --git a/op3_bringup/launch/op3_bringup_visualization.launch b/humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch similarity index 75% rename from op3_bringup/launch/op3_bringup_visualization.launch rename to humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch index 0ce6a5f..709928d 100644 --- a/op3_bringup/launch/op3_bringup_visualization.launch +++ b/humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch @@ -1,6 +1,6 @@ - + @@ -14,5 +14,5 @@ - + diff --git a/op3_bringup/package.xml b/humanoid_robot_bringup/package.xml similarity index 68% rename from op3_bringup/package.xml rename to humanoid_robot_bringup/package.xml index 93ffc2f..0516dcd 100644 --- a/op3_bringup/package.xml +++ b/humanoid_robot_bringup/package.xml @@ -1,6 +1,6 @@ - op3_bringup + humanoid_robot_bringup 0.3.0 This package is a demo for first time users. @@ -10,29 +10,29 @@ Kayman Ronaldson Bellande - http://wiki.ros.org/op3_bringup - http://emanual.robotis.com/docs/en/platform/op3/introduction/ - https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo - https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues + http://wiki.ros.org/humanoid_robot_bringup + http://emanual.robotis.com/docs/en/platform/humanoid_robot/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo/issues catkin - op3_manager - op3_description + humanoid_robot_manager + humanoid_robot_description usb_cam joint_state_publisher robot_state_publisher rviz - op3_manager - op3_description + humanoid_robot_manager + humanoid_robot_description usb_cam joint_state_publisher robot_state_publisher rviz - op3_manager - op3_description + humanoid_robot_manager + humanoid_robot_description usb_cam joint_state_publisher robot_state_publisher diff --git a/op3_bringup/rviz/op3_bringup.rviz b/humanoid_robot_bringup/rviz/humanoid_robot_bringup.rviz similarity index 100% rename from op3_bringup/rviz/op3_bringup.rviz rename to humanoid_robot_bringup/rviz/humanoid_robot_bringup.rviz diff --git a/op3_demo/CHANGELOG.rst b/humanoid_robot_demo/CHANGELOG.rst similarity index 67% rename from op3_demo/CHANGELOG.rst rename to humanoid_robot_demo/CHANGELOG.rst index 9558d4d..7effbb2 100644 --- a/op3_demo/CHANGELOG.rst +++ b/humanoid_robot_demo/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package op3_demo +Changelog for package humanoid_robot_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.0 (2021-05-05) @@ -10,8 +10,8 @@ Changelog for package op3_demo 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic -* added launch files in order to move the camera setting to op3_camera_setting package +* added launch files in order to move the camera setting to humanoid_robot_camera_setting package * added missing package in find_package() * refacoring to release -* split repositoryfrom ROBOTIS-OP3 +* split repositoryfrom ROBOTIS-HUMANOID_ROBOT * Contributors: Kayman, Zerom, Yoshimaru Tanaka, Pyo diff --git a/op3_demo/CMakeLists.txt b/humanoid_robot_demo/CMakeLists.txt similarity index 94% rename from op3_demo/CMakeLists.txt rename to humanoid_robot_demo/CMakeLists.txt index c9baf11..d3757fd 100644 --- a/op3_demo/CMakeLists.txt +++ b/humanoid_robot_demo/CMakeLists.txt @@ -2,7 +2,7 @@ # Set minimum required version of cmake, project name and compile options ################################################################################ cmake_minimum_required(VERSION 3.0.2) -project(op3_demo) +project(humanoid_robot_demo) ################################################################################ # Find catkin packages and libraries for catkin and system dependencies @@ -15,11 +15,11 @@ find_package( sensor_msgs geometry_msgs robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs cmake_modules robotis_math - op3_ball_detector + humanoid_robot_ball_detector ) find_package(Boost REQUIRED COMPONENTS thread) @@ -70,11 +70,11 @@ catkin_package( sensor_msgs geometry_msgs robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs cmake_modules robotis_math - op3_ball_detector + humanoid_robot_ball_detector DEPENDS Boost EIGEN3 ) diff --git a/op3_demo/data/mp3/Autonomous soccer mode.mp3 b/humanoid_robot_demo/data/mp3/Autonomous soccer mode.mp3 similarity index 100% rename from op3_demo/data/mp3/Autonomous soccer mode.mp3 rename to humanoid_robot_demo/data/mp3/Autonomous soccer mode.mp3 diff --git a/op3_demo/data/mp3/Bye bye.mp3 b/humanoid_robot_demo/data/mp3/Bye bye.mp3 similarity index 100% rename from op3_demo/data/mp3/Bye bye.mp3 rename to humanoid_robot_demo/data/mp3/Bye bye.mp3 diff --git a/op3_demo/data/mp3/Clap please.mp3 b/humanoid_robot_demo/data/mp3/Clap please.mp3 similarity index 100% rename from op3_demo/data/mp3/Clap please.mp3 rename to humanoid_robot_demo/data/mp3/Clap please.mp3 diff --git a/op3_demo/data/mp3/Demonstration ready mode.mp3 b/humanoid_robot_demo/data/mp3/Demonstration ready mode.mp3 similarity index 100% rename from op3_demo/data/mp3/Demonstration ready mode.mp3 rename to humanoid_robot_demo/data/mp3/Demonstration ready mode.mp3 diff --git a/op3_demo/data/mp3/Headstand.mp3 b/humanoid_robot_demo/data/mp3/Headstand.mp3 similarity index 100% rename from op3_demo/data/mp3/Headstand.mp3 rename to humanoid_robot_demo/data/mp3/Headstand.mp3 diff --git a/op3_demo/data/mp3/Interactive motion mode.mp3 b/humanoid_robot_demo/data/mp3/Interactive motion mode.mp3 similarity index 100% rename from op3_demo/data/mp3/Interactive motion mode.mp3 rename to humanoid_robot_demo/data/mp3/Interactive motion mode.mp3 diff --git a/op3_demo/data/mp3/Intro01.mp3 b/humanoid_robot_demo/data/mp3/Intro01.mp3 similarity index 100% rename from op3_demo/data/mp3/Intro01.mp3 rename to humanoid_robot_demo/data/mp3/Intro01.mp3 diff --git a/op3_demo/data/mp3/Intro02.mp3 b/humanoid_robot_demo/data/mp3/Intro02.mp3 similarity index 100% rename from op3_demo/data/mp3/Intro02.mp3 rename to humanoid_robot_demo/data/mp3/Intro02.mp3 diff --git a/op3_demo/data/mp3/Intro03.mp3 b/humanoid_robot_demo/data/mp3/Intro03.mp3 similarity index 100% rename from op3_demo/data/mp3/Intro03.mp3 rename to humanoid_robot_demo/data/mp3/Intro03.mp3 diff --git a/op3_demo/data/mp3/Introduction.mp3 b/humanoid_robot_demo/data/mp3/Introduction.mp3 similarity index 100% rename from op3_demo/data/mp3/Introduction.mp3 rename to humanoid_robot_demo/data/mp3/Introduction.mp3 diff --git a/op3_demo/data/mp3/Left kick.mp3 b/humanoid_robot_demo/data/mp3/Left kick.mp3 similarity index 100% rename from op3_demo/data/mp3/Left kick.mp3 rename to humanoid_robot_demo/data/mp3/Left kick.mp3 diff --git a/op3_demo/data/mp3/No.mp3 b/humanoid_robot_demo/data/mp3/No.mp3 similarity index 100% rename from op3_demo/data/mp3/No.mp3 rename to humanoid_robot_demo/data/mp3/No.mp3 diff --git a/op3_demo/data/mp3/Oops.mp3 b/humanoid_robot_demo/data/mp3/Oops.mp3 similarity index 100% rename from op3_demo/data/mp3/Oops.mp3 rename to humanoid_robot_demo/data/mp3/Oops.mp3 diff --git a/op3_demo/data/mp3/Right kick.mp3 b/humanoid_robot_demo/data/mp3/Right kick.mp3 similarity index 100% rename from op3_demo/data/mp3/Right kick.mp3 rename to humanoid_robot_demo/data/mp3/Right kick.mp3 diff --git a/op3_demo/data/mp3/Sensor calibration complete.mp3 b/humanoid_robot_demo/data/mp3/Sensor calibration complete.mp3 similarity index 100% rename from op3_demo/data/mp3/Sensor calibration complete.mp3 rename to humanoid_robot_demo/data/mp3/Sensor calibration complete.mp3 diff --git a/op3_demo/data/mp3/Sensor calibration fail.mp3 b/humanoid_robot_demo/data/mp3/Sensor calibration fail.mp3 similarity index 100% rename from op3_demo/data/mp3/Sensor calibration fail.mp3 rename to humanoid_robot_demo/data/mp3/Sensor calibration fail.mp3 diff --git a/op3_demo/data/mp3/Shoot.mp3 b/humanoid_robot_demo/data/mp3/Shoot.mp3 similarity index 100% rename from op3_demo/data/mp3/Shoot.mp3 rename to humanoid_robot_demo/data/mp3/Shoot.mp3 diff --git a/op3_demo/data/mp3/Sit down.mp3 b/humanoid_robot_demo/data/mp3/Sit down.mp3 similarity index 100% rename from op3_demo/data/mp3/Sit down.mp3 rename to humanoid_robot_demo/data/mp3/Sit down.mp3 diff --git a/op3_demo/data/mp3/Stand up.mp3 b/humanoid_robot_demo/data/mp3/Stand up.mp3 similarity index 100% rename from op3_demo/data/mp3/Stand up.mp3 rename to humanoid_robot_demo/data/mp3/Stand up.mp3 diff --git a/op3_demo/data/mp3/Start motion demonstration.mp3 b/humanoid_robot_demo/data/mp3/Start motion demonstration.mp3 similarity index 100% rename from op3_demo/data/mp3/Start motion demonstration.mp3 rename to humanoid_robot_demo/data/mp3/Start motion demonstration.mp3 diff --git a/op3_demo/data/mp3/Start soccer demonstration.mp3 b/humanoid_robot_demo/data/mp3/Start soccer demonstration.mp3 similarity index 100% rename from op3_demo/data/mp3/Start soccer demonstration.mp3 rename to humanoid_robot_demo/data/mp3/Start soccer demonstration.mp3 diff --git a/op3_demo/data/mp3/Start vision processing demonstration.mp3 b/humanoid_robot_demo/data/mp3/Start vision processing demonstration.mp3 similarity index 100% rename from op3_demo/data/mp3/Start vision processing demonstration.mp3 rename to humanoid_robot_demo/data/mp3/Start vision processing demonstration.mp3 diff --git a/op3_demo/data/mp3/System shutdown.mp3 b/humanoid_robot_demo/data/mp3/System shutdown.mp3 similarity index 100% rename from op3_demo/data/mp3/System shutdown.mp3 rename to humanoid_robot_demo/data/mp3/System shutdown.mp3 diff --git a/op3_demo/data/mp3/Thank you.mp3 b/humanoid_robot_demo/data/mp3/Thank you.mp3 similarity index 100% rename from op3_demo/data/mp3/Thank you.mp3 rename to humanoid_robot_demo/data/mp3/Thank you.mp3 diff --git a/op3_demo/data/mp3/Vision processing mode.mp3 b/humanoid_robot_demo/data/mp3/Vision processing mode.mp3 similarity index 100% rename from op3_demo/data/mp3/Vision processing mode.mp3 rename to humanoid_robot_demo/data/mp3/Vision processing mode.mp3 diff --git a/op3_demo/data/mp3/Wow.mp3 b/humanoid_robot_demo/data/mp3/Wow.mp3 similarity index 100% rename from op3_demo/data/mp3/Wow.mp3 rename to humanoid_robot_demo/data/mp3/Wow.mp3 diff --git a/op3_demo/data/mp3/Yes go.mp3 b/humanoid_robot_demo/data/mp3/Yes go.mp3 similarity index 100% rename from op3_demo/data/mp3/Yes go.mp3 rename to humanoid_robot_demo/data/mp3/Yes go.mp3 diff --git a/op3_demo/data/mp3/Yes.mp3 b/humanoid_robot_demo/data/mp3/Yes.mp3 similarity index 100% rename from op3_demo/data/mp3/Yes.mp3 rename to humanoid_robot_demo/data/mp3/Yes.mp3 diff --git a/op3_demo/data/mp3/intro_test.mp3 b/humanoid_robot_demo/data/mp3/intro_test.mp3 similarity index 100% rename from op3_demo/data/mp3/intro_test.mp3 rename to humanoid_robot_demo/data/mp3/intro_test.mp3 diff --git a/op3_demo/data/mp3/test/Announce mic test.mp3 b/humanoid_robot_demo/data/mp3/test/Announce mic test.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Announce mic test.mp3 rename to humanoid_robot_demo/data/mp3/test/Announce mic test.mp3 diff --git a/op3_demo/data/mp3/test/Button test mode.mp3 b/humanoid_robot_demo/data/mp3/test/Button test mode.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Button test mode.mp3 rename to humanoid_robot_demo/data/mp3/test/Button test mode.mp3 diff --git a/op3_demo/data/mp3/test/Mic test mode.mp3 b/humanoid_robot_demo/data/mp3/test/Mic test mode.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Mic test mode.mp3 rename to humanoid_robot_demo/data/mp3/test/Mic test mode.mp3 diff --git a/op3_demo/data/mp3/test/Mode button long pressed.mp3 b/humanoid_robot_demo/data/mp3/test/Mode button long pressed.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Mode button long pressed.mp3 rename to humanoid_robot_demo/data/mp3/test/Mode button long pressed.mp3 diff --git a/op3_demo/data/mp3/test/Mode button pressed.mp3 b/humanoid_robot_demo/data/mp3/test/Mode button pressed.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Mode button pressed.mp3 rename to humanoid_robot_demo/data/mp3/test/Mode button pressed.mp3 diff --git a/op3_demo/data/mp3/test/Self test ready mode.mp3 b/humanoid_robot_demo/data/mp3/test/Self test ready mode.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Self test ready mode.mp3 rename to humanoid_robot_demo/data/mp3/test/Self test ready mode.mp3 diff --git a/op3_demo/data/mp3/test/Start button long pressed.mp3 b/humanoid_robot_demo/data/mp3/test/Start button long pressed.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Start button long pressed.mp3 rename to humanoid_robot_demo/data/mp3/test/Start button long pressed.mp3 diff --git a/op3_demo/data/mp3/test/Start button pressed.mp3 b/humanoid_robot_demo/data/mp3/test/Start button pressed.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Start button pressed.mp3 rename to humanoid_robot_demo/data/mp3/test/Start button pressed.mp3 diff --git a/op3_demo/data/mp3/test/Start button test mode.mp3 b/humanoid_robot_demo/data/mp3/test/Start button test mode.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Start button test mode.mp3 rename to humanoid_robot_demo/data/mp3/test/Start button test mode.mp3 diff --git a/op3_demo/data/mp3/test/Start mic test mode.mp3 b/humanoid_robot_demo/data/mp3/test/Start mic test mode.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Start mic test mode.mp3 rename to humanoid_robot_demo/data/mp3/test/Start mic test mode.mp3 diff --git a/op3_demo/data/mp3/test/Start playing.mp3 b/humanoid_robot_demo/data/mp3/test/Start playing.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Start playing.mp3 rename to humanoid_robot_demo/data/mp3/test/Start playing.mp3 diff --git a/op3_demo/data/mp3/test/Start recording.mp3 b/humanoid_robot_demo/data/mp3/test/Start recording.mp3 similarity index 100% rename from op3_demo/data/mp3/test/Start recording.mp3 rename to humanoid_robot_demo/data/mp3/test/Start recording.mp3 diff --git a/op3_demo/data/mp3/test/User button long pressed.mp3 b/humanoid_robot_demo/data/mp3/test/User button long pressed.mp3 similarity index 100% rename from op3_demo/data/mp3/test/User button long pressed.mp3 rename to humanoid_robot_demo/data/mp3/test/User button long pressed.mp3 diff --git a/op3_demo/data/mp3/test/User button pressed.mp3 b/humanoid_robot_demo/data/mp3/test/User button pressed.mp3 similarity index 100% rename from op3_demo/data/mp3/test/User button pressed.mp3 rename to humanoid_robot_demo/data/mp3/test/User button pressed.mp3 diff --git a/op3_demo/include/op3_demo/action_demo.h b/humanoid_robot_demo/include/humanoid_robot_demo/action_demo.h similarity index 96% rename from op3_demo/include/op3_demo/action_demo.h rename to humanoid_robot_demo/include/humanoid_robot_demo/action_demo.h index b3ff459..d0c322f 100644 --- a/op3_demo/include/op3_demo/action_demo.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/action_demo.h @@ -27,8 +27,8 @@ #include #include -#include "op3_action_module_msgs/IsRunning.h" -#include "op3_demo/op_demo.h" +#include "humanoid_robot_action_module_msgs/IsRunning.h" +#include "humanoid_robot_demo/op_demo.h" #include "robotis_controller_msgs/JointCtrlModule.h" #include "robotis_controller_msgs/SetModule.h" diff --git a/op3_demo/include/op3_demo/ball_follower.h b/humanoid_robot_demo/include/humanoid_robot_demo/ball_follower.h similarity index 93% rename from op3_demo/include/op3_demo/ball_follower.h rename to humanoid_robot_demo/include/humanoid_robot_demo/ball_follower.h index 06984e7..1f2cb12 100644 --- a/op3_demo/include/op3_demo/ball_follower.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/ball_follower.h @@ -29,9 +29,9 @@ #include #include -#include "op3_ball_detector/CircleSetStamped.h" -#include "op3_walking_module_msgs/GetWalkingParam.h" -#include "op3_walking_module_msgs/WalkingParam.h" +#include "humanoid_robot_ball_detector/CircleSetStamped.h" +#include "humanoid_robot_walking_module_msgs/GetWalkingParam.h" +#include "humanoid_robot_walking_module_msgs/WalkingParam.h" #include "robotis_controller_msgs/JointCtrlModule.h" namespace robotis_op { @@ -109,7 +109,7 @@ protected: // (x, y) is the center position of the ball in image coordinates // z is the ball radius geometry_msgs::Point ball_position_; - op3_walking_module_msgs::WalkingParam current_walking_param_; + humanoid_robot_walking_module_msgs::WalkingParam current_walking_param_; int count_not_found_; int count_to_kick_; diff --git a/op3_demo/include/op3_demo/ball_tracker.h b/humanoid_robot_demo/include/humanoid_robot_demo/ball_tracker.h similarity index 91% rename from op3_demo/include/op3_demo/ball_tracker.h rename to humanoid_robot_demo/include/humanoid_robot_demo/ball_tracker.h index f6d996e..99aeff2 100644 --- a/op3_demo/include/op3_demo/ball_tracker.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/ball_tracker.h @@ -28,9 +28,9 @@ #include #include -#include "op3_ball_detector/CircleSetStamped.h" -#include "op3_walking_module_msgs/GetWalkingParam.h" -#include "op3_walking_module_msgs/WalkingParam.h" +#include "humanoid_robot_ball_detector/CircleSetStamped.h" +#include "humanoid_robot_walking_module_msgs/GetWalkingParam.h" +#include "humanoid_robot_walking_module_msgs/WalkingParam.h" #include "robotis_controller_msgs/JointCtrlModule.h" namespace robotis_op { @@ -73,7 +73,7 @@ protected: const bool DEBUG_PRINT; void ballPositionCallback( - const op3_ball_detector::CircleSetStamped::ConstPtr &msg); + const humanoid_robot_ball_detector::CircleSetStamped::ConstPtr &msg); void ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); void publishHeadJoint(double pan, double tilt); void scanBall(); diff --git a/op3_demo/include/op3_demo/button_test.h b/humanoid_robot_demo/include/humanoid_robot_demo/button_test.h similarity index 97% rename from op3_demo/include/op3_demo/button_test.h rename to humanoid_robot_demo/include/humanoid_robot_demo/button_test.h index 0090702..f9d13c9 100644 --- a/op3_demo/include/op3_demo/button_test.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/button_test.h @@ -24,7 +24,7 @@ #include #include -#include "op3_demo/op_demo.h" +#include "humanoid_robot_demo/op_demo.h" #include "robotis_controller_msgs/SyncWriteItem.h" namespace robotis_op { diff --git a/op3_demo/include/op3_demo/face_tracker.h b/humanoid_robot_demo/include/humanoid_robot_demo/face_tracker.h similarity index 100% rename from op3_demo/include/op3_demo/face_tracker.h rename to humanoid_robot_demo/include/humanoid_robot_demo/face_tracker.h diff --git a/op3_demo/include/op3_demo/mic_test.h b/humanoid_robot_demo/include/humanoid_robot_demo/mic_test.h similarity index 98% rename from op3_demo/include/op3_demo/mic_test.h rename to humanoid_robot_demo/include/humanoid_robot_demo/mic_test.h index ceb2f17..4d883b4 100644 --- a/op3_demo/include/op3_demo/mic_test.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/mic_test.h @@ -25,7 +25,7 @@ #include #include -#include "op3_demo/op_demo.h" +#include "humanoid_robot_demo/op_demo.h" #include "robotis_controller_msgs/SyncWriteItem.h" namespace robotis_op { diff --git a/op3_demo/include/op3_demo/op_demo.h b/humanoid_robot_demo/include/humanoid_robot_demo/op_demo.h similarity index 100% rename from op3_demo/include/op3_demo/op_demo.h rename to humanoid_robot_demo/include/humanoid_robot_demo/op_demo.h diff --git a/op3_demo/include/op3_demo/soccer_demo.h b/humanoid_robot_demo/include/humanoid_robot_demo/soccer_demo.h similarity index 95% rename from op3_demo/include/op3_demo/soccer_demo.h rename to humanoid_robot_demo/include/humanoid_robot_demo/soccer_demo.h index ae7b553..919c691 100644 --- a/op3_demo/include/op3_demo/soccer_demo.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/soccer_demo.h @@ -26,14 +26,14 @@ #include #include -#include "op3_action_module_msgs/IsRunning.h" +#include "humanoid_robot_action_module_msgs/IsRunning.h" #include "robotis_controller_msgs/JointCtrlModule.h" #include "robotis_controller_msgs/SetJointModule.h" #include "robotis_controller_msgs/SyncWriteItem.h" -#include "op3_demo/ball_follower.h" -#include "op3_demo/ball_tracker.h" -#include "op3_demo/op_demo.h" +#include "humanoid_robot_demo/ball_follower.h" +#include "humanoid_robot_demo/ball_tracker.h" +#include "humanoid_robot_demo/op_demo.h" #include "robotis_math/robotis_linear_algebra.h" namespace robotis_op { diff --git a/op3_demo/include/op3_demo/vision_demo.h b/humanoid_robot_demo/include/humanoid_robot_demo/vision_demo.h similarity index 96% rename from op3_demo/include/op3_demo/vision_demo.h rename to humanoid_robot_demo/include/humanoid_robot_demo/vision_demo.h index 523bcc8..1090fac 100644 --- a/op3_demo/include/op3_demo/vision_demo.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/vision_demo.h @@ -28,8 +28,8 @@ #include "robotis_controller_msgs/SetModule.h" #include "robotis_controller_msgs/SyncWriteItem.h" -#include "op3_demo/face_tracker.h" -#include "op3_demo/op_demo.h" +#include "humanoid_robot_demo/face_tracker.h" +#include "humanoid_robot_demo/op_demo.h" namespace robotis_op { diff --git a/humanoid_robot_demo/launch/demo.launch b/humanoid_robot_demo/launch/demo.launch new file mode 100644 index 0000000..e3267c2 --- /dev/null +++ b/humanoid_robot_demo/launch/demo.launch @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/op3_demo/launch/face_detection_op3.launch b/humanoid_robot_demo/launch/face_detection_humanoid_robot.launch similarity index 100% rename from op3_demo/launch/face_detection_op3.launch rename to humanoid_robot_demo/launch/face_detection_humanoid_robot.launch diff --git a/humanoid_robot_demo/launch/self_test.launch b/humanoid_robot_demo/launch/self_test.launch new file mode 100644 index 0000000..e57be40 --- /dev/null +++ b/humanoid_robot_demo/launch/self_test.launch @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_demo/list/action_script.yaml b/humanoid_robot_demo/list/action_script.yaml new file mode 100644 index 0000000..8f520db --- /dev/null +++ b/humanoid_robot_demo/list/action_script.yaml @@ -0,0 +1,23 @@ +# combination action page number and mp3 file path +action_and_sound: + 4 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Thank you.mp3" + 41: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Introduction.mp3" + 24: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Wow.mp3" + 23: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Yes go.mp3" + 15: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Sit down.mp3" + 1: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Stand up.mp3" + 54: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Clap please.mp3" + 27: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" + 38: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Bye bye.mp3" +# 101 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" + 110 : "" + 111 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro01.mp3" + 115 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro02.mp3" + 118 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro03.mp3" + +# play list +prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] +default: [4, 110, 111, 115, 118, 24, 54, 27, 38] + +# example of play list +#certification: [101] diff --git a/humanoid_robot_demo/list/action_script_bk.yaml b/humanoid_robot_demo/list/action_script_bk.yaml new file mode 100644 index 0000000..4d1e977 --- /dev/null +++ b/humanoid_robot_demo/list/action_script_bk.yaml @@ -0,0 +1,18 @@ +# combination action page number and mp3 file path +action_and_sound: + 4 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Thank you.mp3" + 41: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Introduction.mp3" + 24: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Wow.mp3" + 23: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Yes go.mp3" + 15: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Sit down.mp3" + 1: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Stand up.mp3" + 54: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Clap please.mp3" + 27: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" + 38: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Bye bye.mp3" + 101 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" + +# play list +default: [4, 41, 24, 23, 15, 1, 54, 27, 38] + +# example of play list +certificatino: [101] diff --git a/op3_demo/package.xml b/humanoid_robot_demo/package.xml similarity index 63% rename from op3_demo/package.xml rename to humanoid_robot_demo/package.xml index 9604a04..9d1cee5 100644 --- a/op3_demo/package.xml +++ b/humanoid_robot_demo/package.xml @@ -1,19 +1,19 @@ - op3_demo + humanoid_robot_demo 0.3.0 - OP3 default demo + HUMANOID_ROBOT default demo It includes three demontrations(soccer demo, vision demo, action script demo) Apache 2.0 Kayman Ronaldson Bellande - http://wiki.ros.org/op3_demo - http://emanual.robotis.com/docs/en/platform/op3/introduction/ - https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo - https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues + http://wiki.ros.org/humanoid_robot_demo + http://emanual.robotis.com/docs/en/platform/humanoid_robot/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo/issues catkin @@ -23,17 +23,17 @@ sensor_msgs geometry_msgs robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs cmake_modules robotis_math - op3_ball_detector + humanoid_robot_ball_detector boost eigen yaml-cpp - op3_manager - op3_camera_setting_tool - op3_web_setting_tool + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool ros_madplay_player face_detection @@ -43,17 +43,17 @@ sensor_msgs geometry_msgs robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs cmake_modules robotis_math - op3_ball_detector + humanoid_robot_ball_detector boost eigen yaml-cpp - op3_manager - op3_camera_setting_tool - op3_web_setting_tool + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool ros_madplay_player face_detection @@ -63,17 +63,17 @@ sensor_msgs geometry_msgs robotis_controller_msgs - op3_walking_module_msgs - op3_action_module_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs cmake_modules robotis_math - op3_ball_detector + humanoid_robot_ball_detector boost eigen yaml-cpp - op3_manager - op3_camera_setting_tool - op3_web_setting_tool + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool ros_madplay_player face_detection diff --git a/op3_demo/src/action/action_demo.cpp b/humanoid_robot_demo/src/action/action_demo.cpp similarity index 96% rename from op3_demo/src/action/action_demo.cpp rename to humanoid_robot_demo/src/action/action_demo.cpp index 30fbdda..5ee0565 100644 --- a/op3_demo/src/action/action_demo.cpp +++ b/humanoid_robot_demo/src/action/action_demo.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "op3_demo/action_demo.h" +#include "humanoid_robot_demo/action_demo.h" namespace robotis_op { @@ -28,7 +28,7 @@ ActionDemo::ActionDemo() ros::NodeHandle nh(ros::this_node::getName()); std::string default_path = - ros::package::getPath("op3_demo") + "/list/action_script.yaml"; + ros::package::getPath("humanoid_robot_demo") + "/list/action_script.yaml"; script_path_ = nh.param("action_script", default_path); std::string default_play_list = "default"; @@ -158,7 +158,7 @@ void ActionDemo::callbackThread() { buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, &ActionDemo::buttonHandlerCallback, this); - is_running_client_ = nh.serviceClient( + is_running_client_ = nh.serviceClient( "/robotis/action/is_running"); set_joint_module_client_ = nh.serviceClient( @@ -272,7 +272,7 @@ void ActionDemo::brakeAction() { // check running of action bool ActionDemo::isActionRunning() { - op3_action_module_msgs::IsRunning is_running_srv; + humanoid_robot_action_module_msgs::IsRunning is_running_srv; if (is_running_client_.call(is_running_srv) == false) { ROS_ERROR("Failed to get action status"); diff --git a/op3_demo/src/demo_node.cpp b/humanoid_robot_demo/src/demo_node.cpp similarity index 95% rename from op3_demo/src/demo_node.cpp rename to humanoid_robot_demo/src/demo_node.cpp index 90fb0a8..7ff137e 100644 --- a/op3_demo/src/demo_node.cpp +++ b/humanoid_robot_demo/src/demo_node.cpp @@ -19,9 +19,9 @@ #include #include -#include "op3_demo/action_demo.h" -#include "op3_demo/soccer_demo.h" -#include "op3_demo/vision_demo.h" +#include "humanoid_robot_demo/action_demo.h" +#include "humanoid_robot_demo/soccer_demo.h" +#include "humanoid_robot_demo/vision_demo.h" #include "robotis_controller_msgs/SyncWriteItem.h" #include "robotis_math/robotis_linear_algebra.h" @@ -78,7 +78,7 @@ int main(int argc, char **argv) { ros::Subscriber mode_command_sub = nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); - default_mp3_path = ros::package::getPath("op3_demo") + "/data/mp3/"; + default_mp3_path = ros::package::getPath("humanoid_robot_demo") + "/data/mp3/"; ros::start(); @@ -86,7 +86,7 @@ int main(int argc, char **argv) { ros::Rate loop_rate(SPIN_RATE); // wait for starting of manager - std::string manager_name = "/op3_manager"; + std::string manager_name = "/humanoid_robot_manager"; while (ros::ok()) { ros::Duration(1.0).sleep(); @@ -94,7 +94,7 @@ int main(int argc, char **argv) { break; ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } - ROS_WARN("Waiting for op3 manager"); + ROS_WARN("Waiting for humanoid_robot manager"); } // init procedure @@ -184,7 +184,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { playSound(default_mp3_path + "Demonstration ready mode.mp3"); setLED(0x01 | 0x02 | 0x04); } else if (msg->data == "user_long") { - // it's using in op3_manager + // it's using in humanoid_robot_manager // torque on and going to init pose } } @@ -284,7 +284,7 @@ bool checkManagerRunning(std::string &manager_name) { return true; } - ROS_ERROR("Can't find op3_manager"); + ROS_ERROR("Can't find humanoid_robot_manager"); return false; } diff --git a/op3_demo/src/soccer/ball_follower.cpp b/humanoid_robot_demo/src/soccer/ball_follower.cpp similarity index 97% rename from op3_demo/src/soccer/ball_follower.cpp rename to humanoid_robot_demo/src/soccer/ball_follower.cpp index f4ef1e0..469e1d3 100644 --- a/op3_demo/src/soccer/ball_follower.cpp +++ b/humanoid_robot_demo/src/soccer/ball_follower.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "op3_demo/ball_follower.h" +#include "humanoid_robot_demo/ball_follower.h" namespace robotis_op { @@ -39,10 +39,10 @@ BallFollower::BallFollower() set_walking_command_pub_ = nh_.advertise("/robotis/walking/command", 0); - set_walking_param_pub_ = nh_.advertise( + set_walking_param_pub_ = nh_.advertise( "/robotis/walking/set_params", 0); get_walking_param_client_ = - nh_.serviceClient( + nh_.serviceClient( "/robotis/walking/get_params"); prev_time_ = ros::Time::now(); @@ -305,7 +305,7 @@ void BallFollower::setWalkingParam(double x_move, double y_move, } bool BallFollower::getWalkingParam() { - op3_walking_module_msgs::GetWalkingParam walking_param_msg; + humanoid_robot_walking_module_msgs::GetWalkingParam walking_param_msg; if (get_walking_param_client_.call(walking_param_msg)) { current_walking_param_ = walking_param_msg.response.parameters; diff --git a/op3_demo/src/soccer/ball_tracker.cpp b/humanoid_robot_demo/src/soccer/ball_tracker.cpp similarity index 98% rename from op3_demo/src/soccer/ball_tracker.cpp rename to humanoid_robot_demo/src/soccer/ball_tracker.cpp index 780613c..7d3db63 100644 --- a/op3_demo/src/soccer/ball_tracker.cpp +++ b/humanoid_robot_demo/src/soccer/ball_tracker.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "op3_demo/ball_tracker.h" +#include "humanoid_robot_demo/ball_tracker.h" namespace robotis_op { @@ -54,7 +54,7 @@ BallTracker::BallTracker() BallTracker::~BallTracker() {} void BallTracker::ballPositionCallback( - const op3_ball_detector::CircleSetStamped::ConstPtr &msg) { + const humanoid_robot_ball_detector::CircleSetStamped::ConstPtr &msg) { for (int idx = 0; idx < msg->circles.size(); idx++) { if (ball_position_.z >= msg->circles[idx].z) continue; diff --git a/op3_demo/src/soccer/soccer_demo.cpp b/humanoid_robot_demo/src/soccer/soccer_demo.cpp similarity index 98% rename from op3_demo/src/soccer/soccer_demo.cpp rename to humanoid_robot_demo/src/soccer/soccer_demo.cpp index 3951b28..93762a6 100644 --- a/op3_demo/src/soccer/soccer_demo.cpp +++ b/humanoid_robot_demo/src/soccer/soccer_demo.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "op3_demo/soccer_demo.h" +#include "humanoid_robot_demo/soccer_demo.h" namespace robotis_op { @@ -33,7 +33,7 @@ SoccerDemo::SoccerDemo() ros::NodeHandle nh(ros::this_node::getName()); std::string default_path = - ros::package::getPath("op3_gui_demo") + "/config/gui_config.yaml"; + ros::package::getPath("humanoid_robot_gui_demo") + "/config/gui_config.yaml"; std::string path = nh.param("demo_config", default_path); parseJointNameFromYaml(path); @@ -180,7 +180,7 @@ void SoccerDemo::callbackThread() { imu_data_sub_ = nh.subscribe("/robotis/open_cr/imu", 1, &SoccerDemo::imuDataCallback, this); - is_running_client_ = nh.serviceClient( + is_running_client_ = nh.serviceClient( "/robotis/action/is_running"); set_joint_module_client_ = nh.serviceClient( @@ -593,7 +593,7 @@ void SoccerDemo::setRGBLED(int blue, int green, int red) { // check running of action bool SoccerDemo::isActionRunning() { - op3_action_module_msgs::IsRunning is_running_srv; + humanoid_robot_action_module_msgs::IsRunning is_running_srv; if (is_running_client_.call(is_running_srv) == false) { ROS_ERROR("Failed to get action status"); diff --git a/op3_demo/src/test/button_test.cpp b/humanoid_robot_demo/src/test/button_test.cpp similarity index 96% rename from op3_demo/src/test/button_test.cpp rename to humanoid_robot_demo/src/test/button_test.cpp index 20049f3..ed323f9 100644 --- a/op3_demo/src/test/button_test.cpp +++ b/humanoid_robot_demo/src/test/button_test.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "op3_demo/button_test.h" +#include "humanoid_robot_demo/button_test.h" namespace robotis_op { @@ -30,7 +30,7 @@ ButtonTest::ButtonTest() : SPIN_RATE(30), led_count_(0), rgb_led_count_(0) { boost::thread process_thread = boost::thread(boost::bind(&ButtonTest::processThread, this)); - default_mp3_path_ = ros::package::getPath("op3_demo") + "/data/mp3/test/"; + default_mp3_path_ = ros::package::getPath("humanoid_robot_demo") + "/data/mp3/test/"; } ButtonTest::~ButtonTest() {} diff --git a/op3_demo/src/test/mic_test.cpp b/humanoid_robot_demo/src/test/mic_test.cpp similarity index 96% rename from op3_demo/src/test/mic_test.cpp rename to humanoid_robot_demo/src/test/mic_test.cpp index 61bc1ea..f38ceca 100644 --- a/op3_demo/src/test/mic_test.cpp +++ b/humanoid_robot_demo/src/test/mic_test.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "op3_demo/mic_test.h" +#include "humanoid_robot_demo/mic_test.h" namespace robotis_op { @@ -33,8 +33,8 @@ MicTest::MicTest() boost::thread(boost::bind(&MicTest::processThread, this)); recording_file_name_ = - ros::package::getPath("op3_demo") + "/data/mp3/test/mic-test.wav"; - default_mp3_path_ = ros::package::getPath("op3_demo") + "/data/mp3/test/"; + ros::package::getPath("humanoid_robot_demo") + "/data/mp3/test/mic-test.wav"; + default_mp3_path_ = ros::package::getPath("humanoid_robot_demo") + "/data/mp3/test/"; start_time_ = ros::Time::now(); } diff --git a/op3_demo/src/test_node.cpp b/humanoid_robot_demo/src/test_node.cpp similarity index 95% rename from op3_demo/src/test_node.cpp rename to humanoid_robot_demo/src/test_node.cpp index 65e85ea..58fa24f 100644 --- a/op3_demo/src/test_node.cpp +++ b/humanoid_robot_demo/src/test_node.cpp @@ -20,11 +20,11 @@ #include #include -#include "op3_demo/action_demo.h" -#include "op3_demo/button_test.h" -#include "op3_demo/mic_test.h" -#include "op3_demo/soccer_demo.h" -#include "op3_demo/vision_demo.h" +#include "humanoid_robot_demo/action_demo.h" +#include "humanoid_robot_demo/button_test.h" +#include "humanoid_robot_demo/mic_test.h" +#include "humanoid_robot_demo/soccer_demo.h" +#include "humanoid_robot_demo/vision_demo.h" #include "robotis_controller_msgs/SyncWriteItem.h" #include "robotis_math/robotis_linear_algebra.h" @@ -85,7 +85,7 @@ int main(int argc, char **argv) { ros::Subscriber mode_command_sub = nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); - default_mp3_path = ros::package::getPath("op3_demo") + "/data/mp3/"; + default_mp3_path = ros::package::getPath("humanoid_robot_demo") + "/data/mp3/"; ros::start(); @@ -93,7 +93,7 @@ int main(int argc, char **argv) { ros::Rate loop_rate(SPIN_RATE); // wait for starting of manager - std::string manager_name = "/op3_manager"; + std::string manager_name = "/humanoid_robot_manager"; while (ros::ok()) { ros::Duration(1.0).sleep(); @@ -101,7 +101,7 @@ int main(int argc, char **argv) { break; ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } - ROS_WARN("Waiting for op3 manager"); + ROS_WARN("Waiting for humanoid_robot manager"); } // init procedure @@ -212,7 +212,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { playSound(default_mp3_path + "test/Self test ready mode.mp3"); setLED(0x01 | 0x02 | 0x04); } else if (msg->data == "user_long") { - // it's using in op3_manager + // it's using in humanoid_robot_manager // torque on and going to init pose } } @@ -332,7 +332,7 @@ bool checkManagerRunning(std::string &manager_name) { return true; } - ROS_ERROR("Can't find op3_manager"); + ROS_ERROR("Can't find humanoid_robot_manager"); return false; } diff --git a/op3_demo/src/vision/face_tracker.cpp b/humanoid_robot_demo/src/vision/face_tracker.cpp similarity index 99% rename from op3_demo/src/vision/face_tracker.cpp rename to humanoid_robot_demo/src/vision/face_tracker.cpp index a0079f2..c59341f 100644 --- a/op3_demo/src/vision/face_tracker.cpp +++ b/humanoid_robot_demo/src/vision/face_tracker.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "op3_demo/face_tracker.h" +#include "humanoid_robot_demo/face_tracker.h" namespace robotis_op { diff --git a/op3_demo/src/vision/vision_demo.cpp b/humanoid_robot_demo/src/vision/vision_demo.cpp similarity index 99% rename from op3_demo/src/vision/vision_demo.cpp rename to humanoid_robot_demo/src/vision/vision_demo.cpp index cc18b50..121ff17 100644 --- a/op3_demo/src/vision/vision_demo.cpp +++ b/humanoid_robot_demo/src/vision/vision_demo.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "op3_demo/vision_demo.h" +#include "humanoid_robot_demo/vision_demo.h" namespace robotis_op { diff --git a/op3_read_write_demo/CHANGELOG.rst b/humanoid_robot_read_write_demo/CHANGELOG.rst similarity index 80% rename from op3_read_write_demo/CHANGELOG.rst rename to humanoid_robot_read_write_demo/CHANGELOG.rst index 6f0e796..d124bc3 100644 --- a/op3_read_write_demo/CHANGELOG.rst +++ b/humanoid_robot_read_write_demo/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package robotis_op3_demo +Changelog for package robotis_humanoid_robot_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.0 (2021-05-05) diff --git a/op3_read_write_demo/CMakeLists.txt b/humanoid_robot_read_write_demo/CMakeLists.txt similarity index 98% rename from op3_read_write_demo/CMakeLists.txt rename to humanoid_robot_read_write_demo/CMakeLists.txt index 3dfc844..00ae19d 100644 --- a/op3_read_write_demo/CMakeLists.txt +++ b/humanoid_robot_read_write_demo/CMakeLists.txt @@ -2,7 +2,7 @@ # Set minimum required version of cmake, project name and compile options ################################################################################ cmake_minimum_required(VERSION 3.0.2) -project(op3_read_write_demo) +project(humanoid_robot_read_write_demo) ################################################################################ # Find catkin packages and libraries for catkin and system dependencies diff --git a/humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch b/humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch new file mode 100644 index 0000000..f27c2b8 --- /dev/null +++ b/humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/op3_read_write_demo/package.xml b/humanoid_robot_read_write_demo/package.xml similarity index 71% rename from op3_read_write_demo/package.xml rename to humanoid_robot_read_write_demo/package.xml index 5cc8f71..e9adbf2 100644 --- a/op3_read_write_demo/package.xml +++ b/humanoid_robot_read_write_demo/package.xml @@ -1,19 +1,19 @@ - op3_read_write_demo + humanoid_robot_read_write_demo 0.3.0 - The op3_read_write_demo package + The humanoid_robot_read_write_demo package Apache 2.0 Kayman Ronaldson Bellande - http://wiki.ros.org/op3_demo - http://emanual.robotis.com/docs/en/platform/op3/introduction/ - https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo - https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues + http://wiki.ros.org/humanoid_robot_demo + http://emanual.robotis.com/docs/en/platform/humanoid_robot/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo/issues catkin @@ -21,18 +21,18 @@ std_msgs sensor_msgs robotis_controller_msgs - op3_manager + humanoid_robot_manager roscpp std_msgs sensor_msgs robotis_controller_msgs - op3_manager + humanoid_robot_manager roscpp std_msgs sensor_msgs robotis_controller_msgs - op3_manager + humanoid_robot_manager diff --git a/op3_read_write_demo/src/read_write.cpp b/humanoid_robot_read_write_demo/src/read_write.cpp similarity index 96% rename from op3_read_write_demo/src/read_write.cpp rename to humanoid_robot_read_write_demo/src/read_write.cpp index b415400..6af9fe1 100644 --- a/op3_read_write_demo/src/read_write.cpp +++ b/humanoid_robot_read_write_demo/src/read_write.cpp @@ -86,8 +86,8 @@ int main(int argc, char **argv) { // set node loop rate ros::Rate loop_rate(SPIN_RATE); - // wait for starting of op3_manager - std::string manager_name = "/op3_manager"; + // wait for starting of humanoid_robot_manager + std::string manager_name = "/humanoid_robot_manager"; while (ros::ok()) { ros::Duration(1.0).sleep(); @@ -95,7 +95,7 @@ int main(int argc, char **argv) { break; ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } - ROS_WARN("Waiting for op3 manager"); + ROS_WARN("Waiting for humanoid_robot manager"); } readyToDemo(); @@ -128,7 +128,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { ROS_INFO("Button : start | Direct control module"); readyToDemo(); } - // torque on all joints of ROBOTIS-OP3 + // torque on all joints of ROBOTIS-HUMANOID_ROBOT else if (msg->data == "user") { torqueOnAll(); control_module = None; @@ -186,7 +186,7 @@ void readyToDemo() { goInitPose(); ROS_INFO("Go Init pose"); - // wait while ROBOTIS-OP3 goes to the init posture. + // wait while ROBOTIS-HUMANOID_ROBOT goes to the init posture. ros::Duration(4.0).sleep(); // turn on R/G/B LED [0x01 | 0x02 | 0x04] @@ -233,7 +233,7 @@ bool checkManagerRunning(std::string &manager_name) { return true; } - ROS_ERROR("Can't find op3_manager"); + ROS_ERROR("Can't find humanoid_robot_manager"); return false; } diff --git a/op3_demo/launch/demo.launch b/op3_demo/launch/demo.launch deleted file mode 100644 index 9d7c184..0000000 --- a/op3_demo/launch/demo.launch +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/op3_demo/launch/self_test.launch b/op3_demo/launch/self_test.launch deleted file mode 100644 index 1979ba7..0000000 --- a/op3_demo/launch/self_test.launch +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/op3_demo/list/action_script.yaml b/op3_demo/list/action_script.yaml deleted file mode 100644 index 18ae60f..0000000 --- a/op3_demo/list/action_script.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# combination action page number and mp3 file path -action_and_sound: - 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Thank you.mp3" - 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Introduction.mp3" - 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Wow.mp3" - 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Yes go.mp3" - 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Sit down.mp3" - 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Stand up.mp3" - 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Clap please.mp3" - 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" - 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Bye bye.mp3" -# 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" - 110 : "" - 111 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Intro01.mp3" - 115 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Intro02.mp3" - 118 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Intro03.mp3" - -# play list -prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] -default: [4, 110, 111, 115, 118, 24, 54, 27, 38] - -# example of play list -#certification: [101] diff --git a/op3_demo/list/action_script_bk.yaml b/op3_demo/list/action_script_bk.yaml deleted file mode 100644 index 2dd155b..0000000 --- a/op3_demo/list/action_script_bk.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# combination action page number and mp3 file path -action_and_sound: - 4 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Thank you.mp3" - 41: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Introduction.mp3" - 24: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Wow.mp3" - 23: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Yes go.mp3" - 15: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Sit down.mp3" - 1: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Stand up.mp3" - 54: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Clap please.mp3" - 27: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" - 38: "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Bye bye.mp3" - 101 : "/home/robotis/catkin_ws/src/ROBOTIS-OP3/ROBOTIS-OP3-Demo/op3_demo/data/mp3/Oops.mp3" - -# play list -default: [4, 41, 24, 23, 15, 1, 54, 27, 38] - -# example of play list -certificatino: [101] diff --git a/op3_read_write_demo/launch/op3_read_write.launch b/op3_read_write_demo/launch/op3_read_write.launch deleted file mode 100644 index 3c70adb..0000000 --- a/op3_read_write_demo/launch/op3_read_write.launch +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/requirements/ros_repository_requirements.txt b/requirements/ros_repository_requirements.txt index 09c4578..e3c338f 100644 --- a/requirements/ros_repository_requirements.txt +++ b/requirements/ros_repository_requirements.txt @@ -1,9 +1,9 @@ -git clone -b https://github.com/Robotics-Sensors/ROBOTIS-OP3-msgs -git clone -b https://github.com/Robotics-Sensors/ROBOTIS-OP3 -git clone -b https://github.com/Robotics-Sensors/ROBOTIS-OP3-Tools +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-HUMANOID_ROBOT-msgs +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-HUMANOID_ROBOT +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-HUMANOID_ROBOT-Tools git clone -b https://github.com/Robotics-Sensors/ROBOTIS-Framework-msgs git clone -b https://github.com/Robotics-Sensors/ROBOTIS-Framework -git clone -b https://github.com/Robotics-Sensors/ROBOTIS-OP3-Common +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-HUMANOID_ROBOT-Common git clone -b https://github.com/Robotics-Sensors/ROBOTIS-Utility -git clone -b https://github.com/Robotics-Sensors/ROBOTIS-OP3-Demo +git clone -b https://github.com/Robotics-Sensors/ROBOTIS-HUMANOID_ROBOT-Demo git clone -b https://github.com/Robotics-Sensors/ROBOTIS-Math diff --git a/robotis_op3_demo/CHANGELOG.rst b/robotis_humanoid_robot_demo/CHANGELOG.rst similarity index 62% rename from robotis_op3_demo/CHANGELOG.rst rename to robotis_humanoid_robot_demo/CHANGELOG.rst index 34b4ee4..0a864c0 100644 --- a/robotis_op3_demo/CHANGELOG.rst +++ b/robotis_humanoid_robot_demo/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package robotis_op3_demo +Changelog for package robotis_humanoid_robot_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.0 (2021-05-05) @@ -10,10 +10,10 @@ Changelog for package robotis_op3_demo 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic -* added launch files in order to move the camera setting to op3_camera_setting package +* added launch files in order to move the camera setting to humanoid_robot_camera_setting package * added missing package in find_package() -* updated CMakeLists.txt and package.xml of op3_bringup +* updated CMakeLists.txt and package.xml of humanoid_robot_bringup * changed rviz config file * refacoring to release -* split repositoryfrom ROBOTIS-OP3 +* split repositoryfrom ROBOTIS-HUMANOID_ROBOT * Contributors: Kayman, Zerom, Yoshimaru Tanaka, Pyo diff --git a/robotis_op3_demo/CMakeLists.txt b/robotis_humanoid_robot_demo/CMakeLists.txt similarity index 70% rename from robotis_op3_demo/CMakeLists.txt rename to robotis_humanoid_robot_demo/CMakeLists.txt index aa20e05..3314ba3 100644 --- a/robotis_op3_demo/CMakeLists.txt +++ b/robotis_humanoid_robot_demo/CMakeLists.txt @@ -1,4 +1,4 @@ cmake_minimum_required(VERSION 3.0.2) -project(robotis_op3_demo) +project(robotis_humanoid_robot_demo) find_package(catkin REQUIRED) catkin_metapackage() diff --git a/robotis_humanoid_robot_demo/package.xml b/robotis_humanoid_robot_demo/package.xml new file mode 100644 index 0000000..7fb9624 --- /dev/null +++ b/robotis_humanoid_robot_demo/package.xml @@ -0,0 +1,34 @@ + + + robotis_humanoid_robot_demo + 0.3.0 + + ROS packages for the robotis_humanoid_robot_demo (meta package) + + Apache 2.0 + Kayman + Ronaldson Bellande + + http://wiki.ros.org/robotis_humanoid_robot_demo + http://emanual.robotis.com/docs/en/platform/humanoid_robot/introduction/ + https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo + https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo/issues + + catkin + + humanoid_robot_ball_detector + humanoid_robot_bringup + humanoid_robot_demo + + humanoid_robot_ball_detector + humanoid_robot_bringup + humanoid_robot_demo + + humanoid_robot_ball_detector + humanoid_robot_bringup + humanoid_robot_demo + + + + + diff --git a/robotis_op3_demo/package.xml b/robotis_op3_demo/package.xml deleted file mode 100644 index 3922372..0000000 --- a/robotis_op3_demo/package.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - robotis_op3_demo - 0.3.0 - - ROS packages for the robotis_op3_demo (meta package) - - Apache 2.0 - Kayman - Ronaldson Bellande - - http://wiki.ros.org/robotis_op3_demo - http://emanual.robotis.com/docs/en/platform/op3/introduction/ - https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo - https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo/issues - - catkin - - op3_ball_detector - op3_bringup - op3_demo - - op3_ball_detector - op3_bringup - op3_demo - - op3_ball_detector - op3_bringup - op3_demo - - - - - From 243e31612a2911514c58794586247bbe2c769860 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Wed, 27 Sep 2023 23:24:47 -0400 Subject: [PATCH 103/172] latest pushes --- humanoid_robot_ball_detector/CHANGELOG.rst | 10 ++++++++++ humanoid_robot_ball_detector/package.xml | 7 ------- humanoid_robot_bringup/CHANGELOG.rst | 10 ++++++++++ humanoid_robot_bringup/package.xml | 6 ------ humanoid_robot_demo/CHANGELOG.rst | 10 ++++++++++ humanoid_robot_demo/package.xml | 6 ------ humanoid_robot_read_write_demo/CHANGELOG.rst | 11 +++++++++++ humanoid_robot_read_write_demo/package.xml | 7 ------- robotis_humanoid_robot_demo/CHANGELOG.rst | 10 ++++++++++ robotis_humanoid_robot_demo/package.xml | 6 ------ 10 files changed, 51 insertions(+), 32 deletions(-) diff --git a/humanoid_robot_ball_detector/CHANGELOG.rst b/humanoid_robot_ball_detector/CHANGELOG.rst index 91554a7..f713055 100644 --- a/humanoid_robot_ball_detector/CHANGELOG.rst +++ b/humanoid_robot_ball_detector/CHANGELOG.rst @@ -2,6 +2,16 @@ Changelog for package humanoid_robot_ball_detector ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.1 (2023-09-27) +------------------ +* Starting from this point it under a new license +* Fix errors and Issues +* Rename Repository for a completely different purpose +* Make it compatible with ROS/ROS2 +* Upgrade version of all builds and make it more compatible +* Update package.xml and CMakeList.txt for to the latest versions +* Contributors & Maintainer: Ronaldson Bellande + 0.3.0 (2021-05-05) ------------------ * Update package.xml and CMakeList.txt for noetic branch diff --git a/humanoid_robot_ball_detector/package.xml b/humanoid_robot_ball_detector/package.xml index 1a5c1fc..0f77593 100644 --- a/humanoid_robot_ball_detector/package.xml +++ b/humanoid_robot_ball_detector/package.xml @@ -8,15 +8,8 @@ and a stamped array of circle centers and radius. Apache 2.0 - Kayman - Zerom Ronaldson Bellande - http://wiki.ros.org/humanoid_robot_ball_detector - http://emanual.robotis.com/docs/en/platform/humanoid_robot/introduction/ - https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo - https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo/issues - catkin roscpp diff --git a/humanoid_robot_bringup/CHANGELOG.rst b/humanoid_robot_bringup/CHANGELOG.rst index eb8094c..83b5f30 100644 --- a/humanoid_robot_bringup/CHANGELOG.rst +++ b/humanoid_robot_bringup/CHANGELOG.rst @@ -2,6 +2,16 @@ Changelog for package humanoid_robot_bringup ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.1 (2023-09-27) +------------------ +* Starting from this point it under a new license +* Fix errors and Issues +* Rename Repository for a completely different purpose +* Make it compatible with ROS/ROS2 +* Upgrade version of all builds and make it more compatible +* Update package.xml and CMakeList.txt for to the latest versions +* Contributors & Maintainer: Ronaldson Bellande + 0.3.0 (2021-05-05) ------------------ * Update package.xml and CMakeList.txt for noetic branch diff --git a/humanoid_robot_bringup/package.xml b/humanoid_robot_bringup/package.xml index 0516dcd..87db202 100644 --- a/humanoid_robot_bringup/package.xml +++ b/humanoid_robot_bringup/package.xml @@ -7,14 +7,8 @@ There is an example in the demo where you can run and visualize the robot. Apache 2.0 - Kayman Ronaldson Bellande - http://wiki.ros.org/humanoid_robot_bringup - http://emanual.robotis.com/docs/en/platform/humanoid_robot/introduction/ - https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo - https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo/issues - catkin humanoid_robot_manager diff --git a/humanoid_robot_demo/CHANGELOG.rst b/humanoid_robot_demo/CHANGELOG.rst index 7effbb2..094695e 100644 --- a/humanoid_robot_demo/CHANGELOG.rst +++ b/humanoid_robot_demo/CHANGELOG.rst @@ -2,6 +2,16 @@ Changelog for package humanoid_robot_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.1 (2023-09-27) +------------------ +* Starting from this point it under a new license +* Fix errors and Issues +* Rename Repository for a completely different purpose +* Make it compatible with ROS/ROS2 +* Upgrade version of all builds and make it more compatible +* Update package.xml and CMakeList.txt for to the latest versions +* Contributors & Maintainer: Ronaldson Bellande + 0.3.0 (2021-05-05) ------------------ * Update package.xml and CMakeList.txt for noetic branch diff --git a/humanoid_robot_demo/package.xml b/humanoid_robot_demo/package.xml index 9d1cee5..0f2d679 100644 --- a/humanoid_robot_demo/package.xml +++ b/humanoid_robot_demo/package.xml @@ -7,14 +7,8 @@ It includes three demontrations(soccer demo, vision demo, action script demo) Apache 2.0 - Kayman Ronaldson Bellande - http://wiki.ros.org/humanoid_robot_demo - http://emanual.robotis.com/docs/en/platform/humanoid_robot/introduction/ - https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo - https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo/issues - catkin roscpp diff --git a/humanoid_robot_read_write_demo/CHANGELOG.rst b/humanoid_robot_read_write_demo/CHANGELOG.rst index d124bc3..47c0066 100644 --- a/humanoid_robot_read_write_demo/CHANGELOG.rst +++ b/humanoid_robot_read_write_demo/CHANGELOG.rst @@ -2,6 +2,17 @@ Changelog for package robotis_humanoid_robot_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.1 (2023-09-27) +------------------ +* Starting from this point it under a new license +* Fix errors and Issues +* Rename Repository for a completely different purpose +* Make it compatible with ROS/ROS2 +* Upgrade version of all builds and make it more compatible +* Update package.xml and CMakeList.txt for to the latest versions +* Contributors & Maintainer: Ronaldson Bellande + + 0.3.0 (2021-05-05) ------------------ * Update package.xml and CMakeList.txt for noetic branch diff --git a/humanoid_robot_read_write_demo/package.xml b/humanoid_robot_read_write_demo/package.xml index e9adbf2..af5ed6f 100644 --- a/humanoid_robot_read_write_demo/package.xml +++ b/humanoid_robot_read_write_demo/package.xml @@ -5,16 +5,9 @@ The humanoid_robot_read_write_demo package - Apache 2.0 - Kayman Ronaldson Bellande - http://wiki.ros.org/humanoid_robot_demo - http://emanual.robotis.com/docs/en/platform/humanoid_robot/introduction/ - https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo - https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo/issues - catkin roscpp diff --git a/robotis_humanoid_robot_demo/CHANGELOG.rst b/robotis_humanoid_robot_demo/CHANGELOG.rst index 0a864c0..bac5356 100644 --- a/robotis_humanoid_robot_demo/CHANGELOG.rst +++ b/robotis_humanoid_robot_demo/CHANGELOG.rst @@ -2,6 +2,16 @@ Changelog for package robotis_humanoid_robot_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.1 (2023-09-27) +------------------ +* Starting from this point it under a new license +* Fix errors and Issues +* Rename Repository for a completely different purpose +* Make it compatible with ROS/ROS2 +* Upgrade version of all builds and make it more compatible +* Update package.xml and CMakeList.txt for to the latest versions +* Contributors & Maintainer: Ronaldson Bellande + 0.3.0 (2021-05-05) ------------------ * Update package.xml and CMakeList.txt for noetic branch diff --git a/robotis_humanoid_robot_demo/package.xml b/robotis_humanoid_robot_demo/package.xml index 7fb9624..cc130da 100644 --- a/robotis_humanoid_robot_demo/package.xml +++ b/robotis_humanoid_robot_demo/package.xml @@ -6,14 +6,8 @@ ROS packages for the robotis_humanoid_robot_demo (meta package) Apache 2.0 - Kayman Ronaldson Bellande - http://wiki.ros.org/robotis_humanoid_robot_demo - http://emanual.robotis.com/docs/en/platform/humanoid_robot/introduction/ - https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo - https://github.com/ROBOTIS-GIT/ROBOTIS-HUMANOID_ROBOT-Demo/issues - catkin humanoid_robot_ball_detector From 19c686a3608c38559be535e51649766384357441 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Wed, 27 Sep 2023 23:25:25 -0400 Subject: [PATCH 104/172] Delete push.sh --- push.sh | 4 ---- 1 file changed, 4 deletions(-) delete mode 100755 push.sh diff --git a/push.sh b/push.sh deleted file mode 100755 index 3435685..0000000 --- a/push.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -# Git push what is already in the repository -git pull --no-edit; git fetch; git add .; git commit -am "latest pushes"; git push From 2cbd3f2a2c338955edad89508cdfe938eab6752b Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Wed, 27 Sep 2023 23:25:38 -0400 Subject: [PATCH 105/172] Delete fix_errors.sh --- fix_errors.sh | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100755 fix_errors.sh diff --git a/fix_errors.sh b/fix_errors.sh deleted file mode 100755 index 2ebdbee..0000000 --- a/fix_errors.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# Get the URL from .git/config -git_url=$(git config --get remote.origin.url) - -# Check if a URL is found -if [ -z "$git_url" ]; then - echo "No remote URL found in .git/config." - exit 1 -fi - -# Clone the repository into a temporary folder -git clone "$git_url" tmp_clone - -# Check if the clone was successful -if [ $? -eq 0 ]; then - # Remove the existing .git directory if it exists - if [ -d ".git" ]; then - rm -rf .git - fi - - # Copy the .git directory from the clone to the current repository - cp -r tmp_clone/.git . - - # Remove the clone directory - rm -rf tmp_clone - - echo "Repository cloned and .git directory copied successfully." -else - echo "Failed to clone the repository." -fi From fcfeb5db401f031d903c14fff45a2f00c6915e94 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Wed, 27 Sep 2023 23:25:56 -0400 Subject: [PATCH 106/172] Delete catkin_setup.sh --- catkin_setup.sh | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 catkin_setup.sh diff --git a/catkin_setup.sh b/catkin_setup.sh deleted file mode 100644 index 6ec332f..0000000 --- a/catkin_setup.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -catkin build -source "/opt/ros/noetic/setup.bash" -source "$CATKIN_WS/devel/setup.bash" From 876eb3008e17d8db8476392793de0d1cf7766e66 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Wed, 27 Sep 2023 23:26:17 -0400 Subject: [PATCH 107/172] Delete .robotis_humanoid_robot_demo.rosinstall --- .robotis_humanoid_robot_demo.rosinstall | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .robotis_humanoid_robot_demo.rosinstall diff --git a/.robotis_humanoid_robot_demo.rosinstall b/.robotis_humanoid_robot_demo.rosinstall deleted file mode 100644 index ae00de8..0000000 --- a/.robotis_humanoid_robot_demo.rosinstall +++ /dev/null @@ -1,2 +0,0 @@ -- git: {local-name: robotis_humanoid_robot_tools, uri: 'https://github.com/Robotics-Sensors/ROBOTIS-HUMANOID_ROBOT-Tools.git', version: noetic} -- git: {local-name: humanoid_navigation, uri: 'https://github.com/Robotics-Sensors/humanoid_navigation.git', version: noetic} From 65bc5c5fc3c0b7ee2f4fba1e98595cc75b4d573b Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Thu, 28 Sep 2023 00:30:49 -0400 Subject: [PATCH 108/172] latest pushes --- fix_errors.sh | 31 +++++++++++++ push.sh | 4 ++ repository_recal.sh | 110 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100755 fix_errors.sh create mode 100755 push.sh create mode 100755 repository_recal.sh diff --git a/fix_errors.sh b/fix_errors.sh new file mode 100755 index 0000000..2ebdbee --- /dev/null +++ b/fix_errors.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Get the URL from .git/config +git_url=$(git config --get remote.origin.url) + +# Check if a URL is found +if [ -z "$git_url" ]; then + echo "No remote URL found in .git/config." + exit 1 +fi + +# Clone the repository into a temporary folder +git clone "$git_url" tmp_clone + +# Check if the clone was successful +if [ $? -eq 0 ]; then + # Remove the existing .git directory if it exists + if [ -d ".git" ]; then + rm -rf .git + fi + + # Copy the .git directory from the clone to the current repository + cp -r tmp_clone/.git . + + # Remove the clone directory + rm -rf tmp_clone + + echo "Repository cloned and .git directory copied successfully." +else + echo "Failed to clone the repository." +fi diff --git a/push.sh b/push.sh new file mode 100755 index 0000000..3435685 --- /dev/null +++ b/push.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Git push what is already in the repository +git pull --no-edit; git fetch; git add .; git commit -am "latest pushes"; git push diff --git a/repository_recal.sh b/repository_recal.sh new file mode 100755 index 0000000..4c7fd4f --- /dev/null +++ b/repository_recal.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +# Git push what is already in the repository +git pull --no-edit; git fetch; git add .; git commit -am "latest pushes"; git push + +# Get the current directory +current_dir=$(pwd) + +# Read the remote repository URL from .git/config +remote_repo_url=$(git -C "$current_dir" config --get remote.origin.url) + +# Create a temporary directory for cloning the repository +temp_dir=$(mktemp -d) + +# Clone the repository into the temporary directory without using local references +git clone --no-local "$current_dir" "$temp_dir" + +# Switch to the temporary directory +cd "$temp_dir" + +# Create a temporary file to store the file list +tmp_file=$(mktemp) +# Create a temporary file to store the processed commits +processed_commits_file=$(mktemp) + +# Function to check if a commit has already been processed +is_commit_processed() { + local commit="$1" + + # Check if the commit is already processed + grep -Fxq "$commit" "$processed_commits_file" +} + +# Function to mark a commit as processed +mark_commit_processed() { + local commit="$1" + + # Mark the commit as processed + echo "$commit" >> "$processed_commits_file" +} + +# Function to check if a file or folder exists in the repository +file_exists_in_repo() { + local file_path="$1" + + # Check if the file or folder exists in the repository + git ls-tree --name-only -r HEAD | grep -Fxq "$file_path" +} + +# Function to process the files and folders in each commit +process_commit_files() { + local commit="$1" + + # Check if the commit has already been processed + if is_commit_processed "$commit"; then + echo "Commit $commit already processed. Skipping..." + return + fi + + # Get the list of files and folders in the commit (including subfolders) + git ls-tree --name-only -r "$commit" >> "$tmp_file" + + # Process each file or folder in the commit + while IFS= read -r line + do + # Check if the file or folder exists in the current push + if file_exists_in_repo "$line"; then + echo "Keeping: $line" + else + echo "Deleting: $line" + git filter-repo --path "$line" --invert-paths + fi + done < "$tmp_file" + + # Mark the commit as processed + mark_commit_processed "$commit" + + # Clear the temporary file + > "$tmp_file" +} + +# Iterate over each commit in the repository +git rev-list --all | while IFS= read -r commit +do + process_commit_files "$commit" +done + +# Push the filtered changes to the original repository +git remote add origin "$remote_repo_url" +git push --force origin main + +# Perform a history rewrite to remove the filtered files +git filter-repo --force + +# Fetch the changes from the remote repository +git -C "$current_dir" fetch origin + +# Merge the remote changes into the local repository +git -C "$current_dir" merge origin/main --no-edit + +# Update the local repository and reduce the size of .git if needed +git -C "$current_dir" gc --prune=now +git -C "$current_dir" reflog expire --expire=now --all +git -C "$current_dir" repack -ad + +# Clean up temporary files and directories +cd "$current_dir" +rm -rf "$temp_dir" +rm "$tmp_file" +rm "$processed_commits_file" From f32621ac0f294c02228a217a9d17015cf48e08c2 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Thu, 28 Sep 2023 09:50:41 -0400 Subject: [PATCH 109/172] latest pushes --- .travis.yml | 2 +- .../ball_detector.h | 4 +- .../ball_detector_config.h | 4 +- .../src/ball_detector.cpp | 4 +- .../src/ball_detector_node.cpp | 2 +- ...umanoid_robot_bringup_visualization.launch | 6 +-- .../rviz/humanoid_robot_bringup.rviz | 2 +- humanoid_robot_demo/CMakeLists.txt | 8 ++-- .../CHANGELOG.rst | 2 +- .../CMakeLists.txt | 2 +- .../package.xml | 4 +- .../include/humanoid_robot_demo/action_demo.h | 8 ++-- .../humanoid_robot_demo/ball_follower.h | 6 +-- .../humanoid_robot_demo/ball_tracker.h | 6 +-- .../include/humanoid_robot_demo/button_test.h | 6 +-- .../humanoid_robot_demo/face_tracker.h | 4 +- .../include/humanoid_robot_demo/mic_test.h | 6 +-- .../include/humanoid_robot_demo/op_demo.h | 4 +- .../include/humanoid_robot_demo/soccer_demo.h | 14 +++--- .../include/humanoid_robot_demo/vision_demo.h | 8 ++-- humanoid_robot_demo/launch/demo.launch | 4 +- humanoid_robot_demo/launch/self_test.launch | 4 +- humanoid_robot_demo/list/action_script.yaml | 26 +++++------ .../list/action_script_bk.yaml | 20 ++++---- humanoid_robot_demo/package.xml | 12 ++--- .../src/action/action_demo.cpp | 20 ++++---- humanoid_robot_demo/src/demo_node.cpp | 26 +++++------ .../src/soccer/ball_follower.cpp | 12 ++--- .../src/soccer/ball_tracker.cpp | 10 ++-- .../src/soccer/soccer_demo.cpp | 46 +++++++++---------- humanoid_robot_demo/src/test/button_test.cpp | 14 +++--- humanoid_robot_demo/src/test/mic_test.cpp | 6 +-- humanoid_robot_demo/src/test_node.cpp | 30 ++++++------ .../src/vision/face_tracker.cpp | 12 ++--- .../src/vision/vision_demo.cpp | 22 ++++----- humanoid_robot_read_write_demo/CHANGELOG.rst | 2 +- humanoid_robot_read_write_demo/CMakeLists.txt | 4 +- .../launch/humanoid_robot_read_write.launch | 6 +-- humanoid_robot_read_write_demo/package.xml | 8 ++-- .../src/read_write.cpp | 32 ++++++------- 40 files changed, 209 insertions(+), 209 deletions(-) rename {robotis_humanoid_robot_demo => humanoid_robot_demo/humanoid_robot_humanoid_robot_demo}/CHANGELOG.rst (95%) rename {robotis_humanoid_robot_demo => humanoid_robot_demo/humanoid_robot_humanoid_robot_demo}/CMakeLists.txt (70%) rename {robotis_humanoid_robot_demo => humanoid_robot_demo/humanoid_robot_humanoid_robot_demo}/package.xml (88%) diff --git a/.travis.yml b/.travis.yml index 8bae4ff..2d3459c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ notifications: - ronaldsonbellande@gmail.com env: matrix: - - ROS_DISTRO=noetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file OS_NAME=ubuntu OS_CODE_NAME=focal $ROSINSTALL_FILENAME=".robotis_humanoid_robot_demo.rosinstall" + - ROS_DISTRO=noetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file OS_NAME=ubuntu OS_CODE_NAME=focal $ROSINSTALL_FILENAME=".humanoid_robot_demo.rosinstall" branches: only: - master diff --git a/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector.h b/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector.h index 0435d13..fd33a59 100644 --- a/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector.h +++ b/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector.h @@ -43,7 +43,7 @@ #include "humanoid_robot_ball_detector/GetParameters.h" #include "humanoid_robot_ball_detector/SetParameters.h" -namespace robotis_op { +namespace humanoid_robot_op { class BallDetector { public: @@ -165,5 +165,5 @@ protected: humanoid_robot_ball_detector::DetectorParamsConfig>::CallbackType callback_fnc_; }; -} // namespace robotis_op +} // namespace humanoid_robot_op #endif // _BALL_DETECTOR_H_ diff --git a/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector_config.h b/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector_config.h index a69be5d..9a80474 100644 --- a/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector_config.h +++ b/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector_config.h @@ -19,7 +19,7 @@ #ifndef _DETECTOR_CONFIG_H_ #define _DETECTOR_CONFIG_H_ -namespace robotis_op { +namespace humanoid_robot_op { // constants const int GAUSSIAN_BLUR_SIZE_DEFAULT = 7; @@ -86,5 +86,5 @@ public: ~DetectorConfig() {} }; -} // namespace robotis_op +} // namespace humanoid_robot_op #endif // _DETECTOR_CONFIG_H_ diff --git a/humanoid_robot_ball_detector/src/ball_detector.cpp b/humanoid_robot_ball_detector/src/ball_detector.cpp index e246d3d..3c975cc 100644 --- a/humanoid_robot_ball_detector/src/ball_detector.cpp +++ b/humanoid_robot_ball_detector/src/ball_detector.cpp @@ -20,7 +20,7 @@ #include "humanoid_robot_ball_detector/ball_detector.h" -namespace robotis_op { +namespace humanoid_robot_op { BallDetector::BallDetector() : nh_(ros::this_node::getName()), it_(this->nh_), enable_(true), @@ -892,4 +892,4 @@ void BallDetector::drawOutputImage() { 0); // circle outline in blue } -} // namespace robotis_op +} // namespace humanoid_robot_op diff --git a/humanoid_robot_ball_detector/src/ball_detector_node.cpp b/humanoid_robot_ball_detector/src/ball_detector_node.cpp index 770dd4c..a34960f 100644 --- a/humanoid_robot_ball_detector/src/ball_detector_node.cpp +++ b/humanoid_robot_ball_detector/src/ball_detector_node.cpp @@ -24,7 +24,7 @@ int main(int argc, char **argv) { ros::init(argc, argv, "ball_detector_node"); // create ros wrapper object - robotis_op::BallDetector detector; + humanoid_robot_op::BallDetector detector; // set node loop rate ros::Rate loop_rate(30); diff --git a/humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch b/humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch index 709928d..16d122a 100644 --- a/humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch +++ b/humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch @@ -1,16 +1,16 @@ - + - [/robotis/present_joint_states] + [/humanoid_robot/present_joint_states] - + diff --git a/humanoid_robot_bringup/rviz/humanoid_robot_bringup.rviz b/humanoid_robot_bringup/rviz/humanoid_robot_bringup.rviz index cffe130..ef223c3 100644 --- a/humanoid_robot_bringup/rviz/humanoid_robot_bringup.rviz +++ b/humanoid_robot_bringup/rviz/humanoid_robot_bringup.rviz @@ -287,7 +287,7 @@ Visualization Manager: Enabled: true History Length: 1 Name: Imu - Topic: /robotis/open_cr/imu + Topic: /humanoid_robot/open_cr/imu Unreliable: false Value: true Enabled: true diff --git a/humanoid_robot_demo/CMakeLists.txt b/humanoid_robot_demo/CMakeLists.txt index d3757fd..7316eb6 100644 --- a/humanoid_robot_demo/CMakeLists.txt +++ b/humanoid_robot_demo/CMakeLists.txt @@ -14,11 +14,11 @@ find_package( std_msgs sensor_msgs geometry_msgs - robotis_controller_msgs + humanoid_robot_controller_msgs humanoid_robot_walking_module_msgs humanoid_robot_action_module_msgs cmake_modules - robotis_math + humanoid_robot_math humanoid_robot_ball_detector ) @@ -69,11 +69,11 @@ catkin_package( std_msgs sensor_msgs geometry_msgs - robotis_controller_msgs + humanoid_robot_controller_msgs humanoid_robot_walking_module_msgs humanoid_robot_action_module_msgs cmake_modules - robotis_math + humanoid_robot_math humanoid_robot_ball_detector DEPENDS Boost EIGEN3 ) diff --git a/robotis_humanoid_robot_demo/CHANGELOG.rst b/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst similarity index 95% rename from robotis_humanoid_robot_demo/CHANGELOG.rst rename to humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst index bac5356..eacc32d 100644 --- a/robotis_humanoid_robot_demo/CHANGELOG.rst +++ b/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package robotis_humanoid_robot_demo +Changelog for package humanoid_robot_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.1 (2023-09-27) diff --git a/robotis_humanoid_robot_demo/CMakeLists.txt b/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt similarity index 70% rename from robotis_humanoid_robot_demo/CMakeLists.txt rename to humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt index 3314ba3..b5a0767 100644 --- a/robotis_humanoid_robot_demo/CMakeLists.txt +++ b/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt @@ -1,4 +1,4 @@ cmake_minimum_required(VERSION 3.0.2) -project(robotis_humanoid_robot_demo) +project(humanoid_robot_demo) find_package(catkin REQUIRED) catkin_metapackage() diff --git a/robotis_humanoid_robot_demo/package.xml b/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml similarity index 88% rename from robotis_humanoid_robot_demo/package.xml rename to humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml index cc130da..9738368 100644 --- a/robotis_humanoid_robot_demo/package.xml +++ b/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml @@ -1,9 +1,9 @@ - robotis_humanoid_robot_demo + humanoid_robot_demo 0.3.0 - ROS packages for the robotis_humanoid_robot_demo (meta package) + ROS packages for the humanoid_robot_demo (meta package) Apache 2.0 Ronaldson Bellande diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/action_demo.h b/humanoid_robot_demo/include/humanoid_robot_demo/action_demo.h index d0c322f..1b1b951 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/action_demo.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/action_demo.h @@ -29,10 +29,10 @@ #include "humanoid_robot_action_module_msgs/IsRunning.h" #include "humanoid_robot_demo/op_demo.h" -#include "robotis_controller_msgs/JointCtrlModule.h" -#include "robotis_controller_msgs/SetModule.h" +#include "humanoid_robot_controller_msgs/JointCtrlModule.h" +#include "humanoid_robot_controller_msgs/SetModule.h" -namespace robotis_op { +namespace humanoid_robot_op { class ActionDemo : public OPDemo { public: @@ -109,6 +109,6 @@ protected: int play_status_; }; -} /* namespace robotis_op */ +} /* namespace humanoid_robot_op */ #endif /* ACTION_DEMO_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/ball_follower.h b/humanoid_robot_demo/include/humanoid_robot_demo/ball_follower.h index 1f2cb12..7b6dc45 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/ball_follower.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/ball_follower.h @@ -32,9 +32,9 @@ #include "humanoid_robot_ball_detector/CircleSetStamped.h" #include "humanoid_robot_walking_module_msgs/GetWalkingParam.h" #include "humanoid_robot_walking_module_msgs/WalkingParam.h" -#include "robotis_controller_msgs/JointCtrlModule.h" +#include "humanoid_robot_controller_msgs/JointCtrlModule.h" -namespace robotis_op { +namespace humanoid_robot_op { // following the ball using walking class BallFollower { @@ -124,6 +124,6 @@ protected: double curr_period_time_; double accum_period_time_; }; -} // namespace robotis_op +} // namespace humanoid_robot_op #endif /* BALL_FOLLOWER_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/ball_tracker.h b/humanoid_robot_demo/include/humanoid_robot_demo/ball_tracker.h index 99aeff2..55b8447 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/ball_tracker.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/ball_tracker.h @@ -31,9 +31,9 @@ #include "humanoid_robot_ball_detector/CircleSetStamped.h" #include "humanoid_robot_walking_module_msgs/GetWalkingParam.h" #include "humanoid_robot_walking_module_msgs/WalkingParam.h" -#include "robotis_controller_msgs/JointCtrlModule.h" +#include "humanoid_robot_controller_msgs/JointCtrlModule.h" -namespace robotis_op { +namespace humanoid_robot_op { // head tracking for looking the ball class BallTracker { @@ -108,6 +108,6 @@ protected: ros::Time prev_time_; double p_gain_, d_gain_, i_gain_; }; -} // namespace robotis_op +} // namespace humanoid_robot_op #endif /* BALL_TRACKING_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/button_test.h b/humanoid_robot_demo/include/humanoid_robot_demo/button_test.h index f9d13c9..24d6d72 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/button_test.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/button_test.h @@ -25,9 +25,9 @@ #include #include "humanoid_robot_demo/op_demo.h" -#include "robotis_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_controller_msgs/SyncWriteItem.h" -namespace robotis_op { +namespace humanoid_robot_op { class ButtonTest : public OPDemo { public: @@ -61,6 +61,6 @@ protected: int rgb_led_count_; }; -} /* namespace robotis_op */ +} /* namespace humanoid_robot_op */ #endif /* BUTTON_TEST_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/face_tracker.h b/humanoid_robot_demo/include/humanoid_robot_demo/face_tracker.h index a1b7abc..10acdbd 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/face_tracker.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/face_tracker.h @@ -29,7 +29,7 @@ #include #include -namespace robotis_op { +namespace humanoid_robot_op { // head tracking for looking the ball class FaceTracker { @@ -89,6 +89,6 @@ protected: int dismissed_count_; }; -} // namespace robotis_op +} // namespace humanoid_robot_op #endif /* FACE_TRACKING_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/mic_test.h b/humanoid_robot_demo/include/humanoid_robot_demo/mic_test.h index 4d883b4..fa921ef 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/mic_test.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/mic_test.h @@ -26,9 +26,9 @@ #include #include "humanoid_robot_demo/op_demo.h" -#include "robotis_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_controller_msgs/SyncWriteItem.h" -namespace robotis_op { +namespace humanoid_robot_op { class MicTest : public OPDemo { public: @@ -81,6 +81,6 @@ protected: int test_status_; }; -} /* namespace robotis_op */ +} /* namespace humanoid_robot_op */ #endif /* MIC_TEST_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/op_demo.h b/humanoid_robot_demo/include/humanoid_robot_demo/op_demo.h index 54cb72b..420304b 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/op_demo.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/op_demo.h @@ -19,7 +19,7 @@ #ifndef OP_DEMO_H_ #define OP_DEMO_H_ -namespace robotis_op { +namespace humanoid_robot_op { class OPDemo { public: @@ -44,6 +44,6 @@ protected: bool enable_; }; -} /* namespace robotis_op */ +} /* namespace humanoid_robot_op */ #endif /* OP_DEMO_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/soccer_demo.h b/humanoid_robot_demo/include/humanoid_robot_demo/soccer_demo.h index 919c691..042517c 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/soccer_demo.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/soccer_demo.h @@ -27,16 +27,16 @@ #include #include "humanoid_robot_action_module_msgs/IsRunning.h" -#include "robotis_controller_msgs/JointCtrlModule.h" -#include "robotis_controller_msgs/SetJointModule.h" -#include "robotis_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_controller_msgs/JointCtrlModule.h" +#include "humanoid_robot_controller_msgs/SetJointModule.h" +#include "humanoid_robot_controller_msgs/SyncWriteItem.h" #include "humanoid_robot_demo/ball_follower.h" #include "humanoid_robot_demo/ball_tracker.h" #include "humanoid_robot_demo/op_demo.h" -#include "robotis_math/robotis_linear_algebra.h" +#include "humanoid_robot_math/humanoid_robot_linear_algebra.h" -namespace robotis_op { +namespace humanoid_robot_op { class SoccerDemo : public OPDemo { public: @@ -74,7 +74,7 @@ protected: bool with_head_control = true); void setModuleToDemo(const std::string &module_name); void callServiceSettingModule( - const robotis_controller_msgs::JointCtrlModule &modules); + const humanoid_robot_controller_msgs::JointCtrlModule &modules); void parseJointNameFromYaml(const std::string &path); bool getJointNameFromID(const int &id, std::string &joint_name); bool getIDFromJointName(const std::string &joint_name, int &id); @@ -130,5 +130,5 @@ protected: double present_pitch_; }; -} // namespace robotis_op +} // namespace humanoid_robot_op #endif // SOCCER_DEMO_H diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/vision_demo.h b/humanoid_robot_demo/include/humanoid_robot_demo/vision_demo.h index 1090fac..d304920 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/vision_demo.h +++ b/humanoid_robot_demo/include/humanoid_robot_demo/vision_demo.h @@ -25,13 +25,13 @@ #include #include -#include "robotis_controller_msgs/SetModule.h" -#include "robotis_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_controller_msgs/SetModule.h" +#include "humanoid_robot_controller_msgs/SyncWriteItem.h" #include "humanoid_robot_demo/face_tracker.h" #include "humanoid_robot_demo/op_demo.h" -namespace robotis_op { +namespace humanoid_robot_op { class VisionDemo : public OPDemo { public: @@ -78,6 +78,6 @@ protected: int tracking_status_; }; -} /* namespace robotis_op */ +} /* namespace humanoid_robot_op */ #endif /* VISION_DEMO_H_ */ diff --git a/humanoid_robot_demo/launch/demo.launch b/humanoid_robot_demo/launch/demo.launch index e3267c2..c4cb90a 100644 --- a/humanoid_robot_demo/launch/demo.launch +++ b/humanoid_robot_demo/launch/demo.launch @@ -1,6 +1,6 @@ - + @@ -18,7 +18,7 @@ - + diff --git a/humanoid_robot_demo/launch/self_test.launch b/humanoid_robot_demo/launch/self_test.launch index e57be40..b160e4a 100644 --- a/humanoid_robot_demo/launch/self_test.launch +++ b/humanoid_robot_demo/launch/self_test.launch @@ -1,7 +1,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/humanoid_robot_demo/list/action_script.yaml b/humanoid_robot_demo/list/action_script.yaml index 8f520db..ab277f2 100644 --- a/humanoid_robot_demo/list/action_script.yaml +++ b/humanoid_robot_demo/list/action_script.yaml @@ -1,19 +1,19 @@ # combination action page number and mp3 file path action_and_sound: - 4 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Thank you.mp3" - 41: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Introduction.mp3" - 24: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Wow.mp3" - 23: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Yes go.mp3" - 15: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Sit down.mp3" - 1: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Stand up.mp3" - 54: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Clap please.mp3" - 27: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" - 38: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Bye bye.mp3" -# 101 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" + 4 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Thank you.mp3" + 41: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Introduction.mp3" + 24: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Wow.mp3" + 23: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Yes go.mp3" + 15: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Sit down.mp3" + 1: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Stand up.mp3" + 54: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Clap please.mp3" + 27: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" + 38: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Bye bye.mp3" +# 101 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" 110 : "" - 111 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro01.mp3" - 115 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro02.mp3" - 118 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro03.mp3" + 111 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro01.mp3" + 115 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro02.mp3" + 118 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro03.mp3" # play list prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] diff --git a/humanoid_robot_demo/list/action_script_bk.yaml b/humanoid_robot_demo/list/action_script_bk.yaml index 4d1e977..c381065 100644 --- a/humanoid_robot_demo/list/action_script_bk.yaml +++ b/humanoid_robot_demo/list/action_script_bk.yaml @@ -1,15 +1,15 @@ # combination action page number and mp3 file path action_and_sound: - 4 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Thank you.mp3" - 41: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Introduction.mp3" - 24: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Wow.mp3" - 23: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Yes go.mp3" - 15: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Sit down.mp3" - 1: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Stand up.mp3" - 54: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Clap please.mp3" - 27: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" - 38: "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Bye bye.mp3" - 101 : "/home/robotis/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" + 4 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Thank you.mp3" + 41: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Introduction.mp3" + 24: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Wow.mp3" + 23: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Yes go.mp3" + 15: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Sit down.mp3" + 1: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Stand up.mp3" + 54: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Clap please.mp3" + 27: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" + 38: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Bye bye.mp3" + 101 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" # play list default: [4, 41, 24, 23, 15, 1, 54, 27, 38] diff --git a/humanoid_robot_demo/package.xml b/humanoid_robot_demo/package.xml index 0f2d679..3af2f55 100644 --- a/humanoid_robot_demo/package.xml +++ b/humanoid_robot_demo/package.xml @@ -16,11 +16,11 @@ std_msgs sensor_msgs geometry_msgs - robotis_controller_msgs + humanoid_robot_controller_msgs humanoid_robot_walking_module_msgs humanoid_robot_action_module_msgs cmake_modules - robotis_math + humanoid_robot_math humanoid_robot_ball_detector boost eigen @@ -36,11 +36,11 @@ std_msgs sensor_msgs geometry_msgs - robotis_controller_msgs + humanoid_robot_controller_msgs humanoid_robot_walking_module_msgs humanoid_robot_action_module_msgs cmake_modules - robotis_math + humanoid_robot_math humanoid_robot_ball_detector boost eigen @@ -56,11 +56,11 @@ std_msgs sensor_msgs geometry_msgs - robotis_controller_msgs + humanoid_robot_controller_msgs humanoid_robot_walking_module_msgs humanoid_robot_action_module_msgs cmake_modules - robotis_math + humanoid_robot_math humanoid_robot_ball_detector boost eigen diff --git a/humanoid_robot_demo/src/action/action_demo.cpp b/humanoid_robot_demo/src/action/action_demo.cpp index 5ee0565..c2bea79 100644 --- a/humanoid_robot_demo/src/action/action_demo.cpp +++ b/humanoid_robot_demo/src/action/action_demo.cpp @@ -18,7 +18,7 @@ #include "humanoid_robot_demo/action_demo.h" -namespace robotis_op { +namespace humanoid_robot_op { ActionDemo::ActionDemo() : SPIN_RATE(30), DEBUG_PRINT(false), play_index_(0), @@ -35,7 +35,7 @@ ActionDemo::ActionDemo() play_list_name_ = nh.param("action_script_play_list", default_play_list); - demo_command_sub_ = nh.subscribe("/robotis/demo_command", 1, + demo_command_sub_ = nh.subscribe("/humanoid_robot/demo_command", 1, &ActionDemo::demoCommandCallback, this); parseActionScript(script_path_); @@ -150,19 +150,19 @@ void ActionDemo::callbackThread() { // subscriber & publisher module_control_pub_ = - nh.advertise("/robotis/enable_ctrl_module", 0); + nh.advertise("/humanoid_robot/enable_ctrl_module", 0); motion_index_pub_ = - nh.advertise("/robotis/action/page_num", 0); + nh.advertise("/humanoid_robot/action/page_num", 0); play_sound_pub_ = nh.advertise("/play_sound_file", 0); - buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, + buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, &ActionDemo::buttonHandlerCallback, this); is_running_client_ = nh.serviceClient( - "/robotis/action/is_running"); + "/humanoid_robot/action/is_running"); set_joint_module_client_ = - nh.serviceClient( - "/robotis/set_present_ctrl_modules"); + nh.serviceClient( + "/humanoid_robot/set_present_ctrl_modules"); while (nh.ok()) { ros::spinOnce(); @@ -320,7 +320,7 @@ void ActionDemo::setModuleToDemo(const std::string &module_name) { } void ActionDemo::callServiceSettingModule(const std::string &module_name) { - robotis_controller_msgs::SetModule set_module_srv; + humanoid_robot_controller_msgs::SetModule set_module_srv; set_module_srv.request.module_name = module_name; if (set_joint_module_client_.call(set_module_srv) == false) { @@ -342,4 +342,4 @@ void ActionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) { } } -} /* namespace robotis_op */ +} /* namespace humanoid_robot_op */ diff --git a/humanoid_robot_demo/src/demo_node.cpp b/humanoid_robot_demo/src/demo_node.cpp index 7ff137e..67ff235 100644 --- a/humanoid_robot_demo/src/demo_node.cpp +++ b/humanoid_robot_demo/src/demo_node.cpp @@ -22,8 +22,8 @@ #include "humanoid_robot_demo/action_demo.h" #include "humanoid_robot_demo/soccer_demo.h" #include "humanoid_robot_demo/vision_demo.h" -#include "robotis_controller_msgs/SyncWriteItem.h" -#include "robotis_math/robotis_linear_algebra.h" +#include "humanoid_robot_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_math/humanoid_robot_linear_algebra.h" enum Demo_Status { Ready = 0, @@ -61,22 +61,22 @@ int main(int argc, char **argv) { ros::init(argc, argv, "demo_node"); // create ros wrapper object - robotis_op::OPDemo *current_demo = NULL; - robotis_op::SoccerDemo *soccer_demo = new robotis_op::SoccerDemo(); - robotis_op::ActionDemo *action_demo = new robotis_op::ActionDemo(); - robotis_op::VisionDemo *vision_demo = new robotis_op::VisionDemo(); + humanoid_robot_op::OPDemo *current_demo = NULL; + humanoid_robot_op::SoccerDemo *soccer_demo = new humanoid_robot_op::SoccerDemo(); + humanoid_robot_op::ActionDemo *action_demo = new humanoid_robot_op::ActionDemo(); + humanoid_robot_op::VisionDemo *vision_demo = new humanoid_robot_op::VisionDemo(); ros::NodeHandle nh(ros::this_node::getName()); - init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); + init_pose_pub = nh.advertise("/humanoid_robot/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); - led_pub = nh.advertise( - "/robotis/sync_write_item", 0); - dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); + led_pub = nh.advertise( + "/humanoid_robot/sync_write_item", 0); + dxl_torque_pub = nh.advertise("/humanoid_robot/dxl_torque", 0); ros::Subscriber buttuon_sub = - nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + nh.subscribe("/humanoid_robot/open_cr/button", 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = - nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); + nh.subscribe("/humanoid_robot/mode_command", 1, demoModeCommandCallback); default_mp3_path = ros::package::getPath("humanoid_robot_demo") + "/data/mp3/"; @@ -266,7 +266,7 @@ void playSound(const std::string &path) { } void setLED(int led) { - robotis_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led); diff --git a/humanoid_robot_demo/src/soccer/ball_follower.cpp b/humanoid_robot_demo/src/soccer/ball_follower.cpp index 469e1d3..c0d8b79 100644 --- a/humanoid_robot_demo/src/soccer/ball_follower.cpp +++ b/humanoid_robot_demo/src/soccer/ball_follower.cpp @@ -18,7 +18,7 @@ #include "humanoid_robot_demo/ball_follower.h" -namespace robotis_op { +namespace humanoid_robot_op { BallFollower::BallFollower() : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), @@ -34,16 +34,16 @@ BallFollower::BallFollower() current_x_move_(0.005), current_r_angle_(0), curr_period_time_(0.6), accum_period_time_(0.0), DEBUG_PRINT(false) { current_joint_states_sub_ = - nh_.subscribe("/robotis/goal_joint_states", 10, + nh_.subscribe("/humanoid_robot/goal_joint_states", 10, &BallFollower::currentJointStatesCallback, this); set_walking_command_pub_ = - nh_.advertise("/robotis/walking/command", 0); + nh_.advertise("/humanoid_robot/walking/command", 0); set_walking_param_pub_ = nh_.advertise( - "/robotis/walking/set_params", 0); + "/humanoid_robot/walking/set_params", 0); get_walking_param_client_ = nh_.serviceClient( - "/robotis/walking/get_params"); + "/humanoid_robot/walking/get_params"); prev_time_ = ros::Time::now(); } @@ -321,4 +321,4 @@ bool BallFollower::getWalkingParam() { } } -} // namespace robotis_op +} // namespace humanoid_robot_op diff --git a/humanoid_robot_demo/src/soccer/ball_tracker.cpp b/humanoid_robot_demo/src/soccer/ball_tracker.cpp index 7d3db63..283f874 100644 --- a/humanoid_robot_demo/src/soccer/ball_tracker.cpp +++ b/humanoid_robot_demo/src/soccer/ball_tracker.cpp @@ -18,7 +18,7 @@ #include "humanoid_robot_demo/ball_tracker.h" -namespace robotis_op { +namespace humanoid_robot_op { BallTracker::BallTracker() : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), @@ -36,11 +36,11 @@ BallTracker::BallTracker() << d_gain_); head_joint_offset_pub_ = nh_.advertise( - "/robotis/head_control/set_joint_states_offset", 0); + "/humanoid_robot/head_control/set_joint_states_offset", 0); head_joint_pub_ = nh_.advertise( - "/robotis/head_control/set_joint_states", 0); + "/humanoid_robot/head_control/set_joint_states", 0); head_scan_pub_ = - nh_.advertise("/robotis/head_control/scan_command", 0); + nh_.advertise("/humanoid_robot/head_control/scan_command", 0); // error_pub_ = // nh_.advertise("/ball_tracker/errors", 0); @@ -264,4 +264,4 @@ void BallTracker::scanBall() { head_scan_pub_.publish(scan_msg); } -} // namespace robotis_op +} // namespace humanoid_robot_op diff --git a/humanoid_robot_demo/src/soccer/soccer_demo.cpp b/humanoid_robot_demo/src/soccer/soccer_demo.cpp index 93762a6..598432b 100644 --- a/humanoid_robot_demo/src/soccer/soccer_demo.cpp +++ b/humanoid_robot_demo/src/soccer/soccer_demo.cpp @@ -18,7 +18,7 @@ #include "humanoid_robot_demo/soccer_demo.h" -namespace robotis_op { +namespace humanoid_robot_op { SoccerDemo::SoccerDemo() : FALL_FORWARD_LIMIT(60), FALL_BACK_LIMIT(-60), SPIN_RATE(30), @@ -166,25 +166,25 @@ void SoccerDemo::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - module_control_pub_ = nh.advertise( - "/robotis/set_joint_ctrl_modules", 0); + module_control_pub_ = nh.advertise( + "/humanoid_robot/set_joint_ctrl_modules", 0); motion_index_pub_ = - nh.advertise("/robotis/action/page_num", 0); - rgb_led_pub_ = nh.advertise( - "/robotis/sync_write_item", 0); + nh.advertise("/humanoid_robot/action/page_num", 0); + rgb_led_pub_ = nh.advertise( + "/humanoid_robot/sync_write_item", 0); - buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, + buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, &SoccerDemo::buttonHandlerCallback, this); - demo_command_sub_ = nh.subscribe("/robotis/demo_command", 1, + demo_command_sub_ = nh.subscribe("/humanoid_robot/demo_command", 1, &SoccerDemo::demoCommandCallback, this); - imu_data_sub_ = nh.subscribe("/robotis/open_cr/imu", 1, + imu_data_sub_ = nh.subscribe("/humanoid_robot/open_cr/imu", 1, &SoccerDemo::imuDataCallback, this); is_running_client_ = nh.serviceClient( - "/robotis/action/is_running"); + "/humanoid_robot/action/is_running"); set_joint_module_client_ = - nh.serviceClient( - "/robotis/set_present_joint_ctrl_modules"); + nh.serviceClient( + "/humanoid_robot/set_present_joint_ctrl_modules"); test_pub_ = nh.advertise("/debug_text", 0); @@ -237,7 +237,7 @@ void SoccerDemo::trackingThread() { void SoccerDemo::setBodyModuleToDemo(const std::string &body_module, bool with_head_control) { - robotis_controller_msgs::JointCtrlModule control_msg; + humanoid_robot_controller_msgs::JointCtrlModule control_msg; std::string head_module = "head_control_module"; std::map::iterator joint_iter; @@ -269,7 +269,7 @@ void SoccerDemo::setModuleToDemo(const std::string &module_name) { if (enable_ == false) return; - robotis_controller_msgs::JointCtrlModule control_msg; + humanoid_robot_controller_msgs::JointCtrlModule control_msg; std::map::iterator joint_iter; for (joint_iter = id_joint_table_.begin(); @@ -287,8 +287,8 @@ void SoccerDemo::setModuleToDemo(const std::string &module_name) { } void SoccerDemo::callServiceSettingModule( - const robotis_controller_msgs::JointCtrlModule &modules) { - robotis_controller_msgs::SetJointModule set_joint_srv; + const humanoid_robot_controller_msgs::JointCtrlModule &modules) { + humanoid_robot_controller_msgs::SetJointModule set_joint_srv; set_joint_srv.request.joint_name = modules.joint_name; set_joint_srv.request.module_name = modules.module_name; @@ -400,7 +400,7 @@ void SoccerDemo::imuDataCallback(const sensor_msgs::Imu::ConstPtr &msg) { Eigen::Quaterniond orientation(msg->orientation.w, msg->orientation.x, msg->orientation.y, msg->orientation.z); Eigen::MatrixXd rpy_orientation = - robotis_framework::convertQuaternionToRPY(orientation); + humanoid_robot_framework::convertQuaternionToRPY(orientation); rpy_orientation *= (180 / M_PI); ROS_INFO_COND(DEBUG_PRINT, "Roll : %3.2f, Pitch : %2.2f", @@ -453,12 +453,12 @@ void SoccerDemo::handleKick(int ball_position) { // kick motion switch (ball_position) { - case robotis_op::BallFollower::OnRight: + case humanoid_robot_op::BallFollower::OnRight: std::cout << "Kick Motion [R]: " << ball_position << std::endl; playMotion(is_grass_ ? RightKick + ForGrass : RightKick); break; - case robotis_op::BallFollower::OnLeft: + case humanoid_robot_op::BallFollower::OnLeft: std::cout << "Kick Motion [L]: " << ball_position << std::endl; playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); break; @@ -504,13 +504,13 @@ void SoccerDemo::handleKick() { } switch (ball_position) { - case robotis_op::BallFollower::OnRight: + case humanoid_robot_op::BallFollower::OnRight: std::cout << "Kick Motion [R]: " << ball_position << std::endl; sendDebugTopic("Kick the ball using Right foot"); playMotion(is_grass_ ? RightKick + ForGrass : RightKick); break; - case robotis_op::BallFollower::OnLeft: + case humanoid_robot_op::BallFollower::OnLeft: std::cout << "Kick Motion [L]: " << ball_position << std::endl; sendDebugTopic("Kick the ball using Left foot"); playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); @@ -583,7 +583,7 @@ void SoccerDemo::setRGBLED(int blue, int green, int red) { int led_full_unit = 0x1F; int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); - robotis_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED_RGB"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led_value); @@ -614,4 +614,4 @@ void SoccerDemo::sendDebugTopic(const std::string &msgs) { test_pub_.publish(debug_msg); } -} // namespace robotis_op +} // namespace humanoid_robot_op diff --git a/humanoid_robot_demo/src/test/button_test.cpp b/humanoid_robot_demo/src/test/button_test.cpp index ed323f9..f21b781 100644 --- a/humanoid_robot_demo/src/test/button_test.cpp +++ b/humanoid_robot_demo/src/test/button_test.cpp @@ -18,7 +18,7 @@ #include "humanoid_robot_demo/button_test.h" -namespace robotis_op { +namespace humanoid_robot_op { ButtonTest::ButtonTest() : SPIN_RATE(30), led_count_(0), rgb_led_count_(0) { enable_ = false; @@ -63,11 +63,11 @@ void ButtonTest::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - rgb_led_pub_ = nh.advertise( - "/robotis/sync_write_item", 0); + rgb_led_pub_ = nh.advertise( + "/humanoid_robot/sync_write_item", 0); play_sound_pub_ = nh.advertise("/play_sound_file", 0); - buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, + buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, &ButtonTest::buttonHandlerCallback, this); while (nh.ok()) { @@ -109,7 +109,7 @@ void ButtonTest::setRGBLED(int blue, int green, int red) { int led_full_unit = 0x1F; int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); - robotis_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED_RGB"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led_value); @@ -118,7 +118,7 @@ void ButtonTest::setRGBLED(int blue, int green, int red) { } void ButtonTest::setLED(int led) { - robotis_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led); @@ -133,4 +133,4 @@ void ButtonTest::playSound(const std::string &path) { play_sound_pub_.publish(sound_msg); } -} /* namespace robotis_op */ +} /* namespace humanoid_robot_op */ diff --git a/humanoid_robot_demo/src/test/mic_test.cpp b/humanoid_robot_demo/src/test/mic_test.cpp index f38ceca..5a214ee 100644 --- a/humanoid_robot_demo/src/test/mic_test.cpp +++ b/humanoid_robot_demo/src/test/mic_test.cpp @@ -18,7 +18,7 @@ #include "humanoid_robot_demo/mic_test.h" -namespace robotis_op { +namespace humanoid_robot_op { MicTest::MicTest() : SPIN_RATE(30), is_wait_(false), wait_time_(-1), test_status_(Ready), @@ -117,7 +117,7 @@ void MicTest::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, + buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, &MicTest::buttonHandlerCallback, this); play_sound_pub_ = nh.advertise("/play_sound_file", 0); @@ -234,4 +234,4 @@ void MicTest::startTimer(double wait_time) { void MicTest::finishTimer() { wait_time_ = -1; } -} /* namespace robotis_op */ +} /* namespace humanoid_robot_op */ diff --git a/humanoid_robot_demo/src/test_node.cpp b/humanoid_robot_demo/src/test_node.cpp index 58fa24f..5f6045a 100644 --- a/humanoid_robot_demo/src/test_node.cpp +++ b/humanoid_robot_demo/src/test_node.cpp @@ -25,8 +25,8 @@ #include "humanoid_robot_demo/mic_test.h" #include "humanoid_robot_demo/soccer_demo.h" #include "humanoid_robot_demo/vision_demo.h" -#include "robotis_controller_msgs/SyncWriteItem.h" -#include "robotis_math/robotis_linear_algebra.h" +#include "humanoid_robot_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_math/humanoid_robot_linear_algebra.h" enum Demo_Status { Ready = 0, @@ -66,24 +66,24 @@ int main(int argc, char **argv) { ros::init(argc, argv, "self_test_node"); // create ros wrapper object - robotis_op::OPDemo *current_demo = NULL; - robotis_op::SoccerDemo *soccer_demo = new robotis_op::SoccerDemo(); - robotis_op::ActionDemo *action_demo = new robotis_op::ActionDemo(); - robotis_op::VisionDemo *vision_demo = new robotis_op::VisionDemo(); - robotis_op::ButtonTest *button_test = new robotis_op::ButtonTest(); - robotis_op::MicTest *mic_test = new robotis_op::MicTest(); + humanoid_robot_op::OPDemo *current_demo = NULL; + humanoid_robot_op::SoccerDemo *soccer_demo = new humanoid_robot_op::SoccerDemo(); + humanoid_robot_op::ActionDemo *action_demo = new humanoid_robot_op::ActionDemo(); + humanoid_robot_op::VisionDemo *vision_demo = new humanoid_robot_op::VisionDemo(); + humanoid_robot_op::ButtonTest *button_test = new humanoid_robot_op::ButtonTest(); + humanoid_robot_op::MicTest *mic_test = new humanoid_robot_op::MicTest(); ros::NodeHandle nh(ros::this_node::getName()); - init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); + init_pose_pub = nh.advertise("/humanoid_robot/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); - led_pub = nh.advertise( - "/robotis/sync_write_item", 0); - dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); + led_pub = nh.advertise( + "/humanoid_robot/sync_write_item", 0); + dxl_torque_pub = nh.advertise("/humanoid_robot/dxl_torque", 0); ros::Subscriber buttuon_sub = - nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + nh.subscribe("/humanoid_robot/open_cr/button", 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = - nh.subscribe("/robotis/mode_command", 1, demoModeCommandCallback); + nh.subscribe("/humanoid_robot/mode_command", 1, demoModeCommandCallback); default_mp3_path = ros::package::getPath("humanoid_robot_demo") + "/data/mp3/"; @@ -314,7 +314,7 @@ void playSound(const std::string &path) { } void setLED(int led) { - robotis_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led); diff --git a/humanoid_robot_demo/src/vision/face_tracker.cpp b/humanoid_robot_demo/src/vision/face_tracker.cpp index c59341f..50b9ee9 100644 --- a/humanoid_robot_demo/src/vision/face_tracker.cpp +++ b/humanoid_robot_demo/src/vision/face_tracker.cpp @@ -18,22 +18,22 @@ #include "humanoid_robot_demo/face_tracker.h" -namespace robotis_op { +namespace humanoid_robot_op { FaceTracker::FaceTracker() : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), FOV_HEIGHT(21.6 * M_PI / 180), NOT_FOUND_THRESHOLD(50), use_head_scan_(false), count_not_found_(0), on_tracking_(false) { head_joint_offset_pub_ = nh_.advertise( - "/robotis/head_control/set_joint_states_offset", 0); + "/humanoid_robot/head_control/set_joint_states_offset", 0); head_joint_pub_ = nh_.advertise( - "/robotis/head_control/set_joint_states", 0); + "/humanoid_robot/head_control/set_joint_states", 0); head_scan_pub_ = - nh_.advertise("/robotis/head_control/scan_command", 0); + nh_.advertise("/humanoid_robot/head_control/scan_command", 0); face_position_sub_ = nh_.subscribe("/face_position", 1, &FaceTracker::facePositionCallback, this); - // face_tracking_command_sub_ = nh_.subscribe("/robotis/demo_command", 1, + // face_tracking_command_sub_ = nh_.subscribe("/humanoid_robot/demo_command", 1, // &FaceTracker::faceTrackerCommandCallback, this); } @@ -178,4 +178,4 @@ void FaceTracker::scanFace() { // ROS_INFO("Scan the ball"); } -} // namespace robotis_op +} // namespace humanoid_robot_op diff --git a/humanoid_robot_demo/src/vision/vision_demo.cpp b/humanoid_robot_demo/src/vision/vision_demo.cpp index 121ff17..26e87c8 100644 --- a/humanoid_robot_demo/src/vision/vision_demo.cpp +++ b/humanoid_robot_demo/src/vision/vision_demo.cpp @@ -18,7 +18,7 @@ #include "humanoid_robot_demo/vision_demo.h" -namespace robotis_op { +namespace humanoid_robot_op { VisionDemo::VisionDemo() : SPIN_RATE(30), TIME_TO_INIT(10), tracking_status_(FaceTracker::Waiting) { @@ -121,22 +121,22 @@ void VisionDemo::callbackThread() { // subscriber & publisher module_control_pub_ = - nh.advertise("/robotis/enable_ctrl_module", 0); + nh.advertise("/humanoid_robot/enable_ctrl_module", 0); motion_index_pub_ = - nh.advertise("/robotis/action/page_num", 0); - rgb_led_pub_ = nh.advertise( - "/robotis/sync_write_item", 0); + nh.advertise("/humanoid_robot/action/page_num", 0); + rgb_led_pub_ = nh.advertise( + "/humanoid_robot/sync_write_item", 0); face_tracking_command_pub_ = nh.advertise("/face_tracking/command", 0); - buttuon_sub_ = nh.subscribe("/robotis/open_cr/button", 1, + buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, &VisionDemo::buttonHandlerCallback, this); faceCoord_sub_ = nh.subscribe("/faceCoord", 1, &VisionDemo::facePositionCallback, this); set_joint_module_client_ = - nh.serviceClient( - "/robotis/set_present_ctrl_modules"); + nh.serviceClient( + "/humanoid_robot/set_present_ctrl_modules"); while (nh.ok()) { ros::spinOnce(); @@ -171,7 +171,7 @@ void VisionDemo::setModuleToDemo(const std::string &module_name) { } void VisionDemo::callServiceSettingModule(const std::string &module_name) { - robotis_controller_msgs::SetModule set_module_srv; + humanoid_robot_controller_msgs::SetModule set_module_srv; set_module_srv.request.module_name = module_name; if (set_joint_module_client_.call(set_module_srv) == false) { @@ -216,7 +216,7 @@ void VisionDemo::setRGBLED(int blue, int green, int red) { int led_full_unit = 0x1F; int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); - robotis_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED_RGB"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led_value); @@ -224,4 +224,4 @@ void VisionDemo::setRGBLED(int blue, int green, int red) { rgb_led_pub_.publish(syncwrite_msg); } -} /* namespace robotis_op */ +} /* namespace humanoid_robot_op */ diff --git a/humanoid_robot_read_write_demo/CHANGELOG.rst b/humanoid_robot_read_write_demo/CHANGELOG.rst index 47c0066..afbfa4c 100644 --- a/humanoid_robot_read_write_demo/CHANGELOG.rst +++ b/humanoid_robot_read_write_demo/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package robotis_humanoid_robot_demo +Changelog for package humanoid_robot_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.1 (2023-09-27) diff --git a/humanoid_robot_read_write_demo/CMakeLists.txt b/humanoid_robot_read_write_demo/CMakeLists.txt index 00ae19d..79ddb78 100644 --- a/humanoid_robot_read_write_demo/CMakeLists.txt +++ b/humanoid_robot_read_write_demo/CMakeLists.txt @@ -9,7 +9,7 @@ project(humanoid_robot_read_write_demo) ################################################################################ find_package( catkin REQUIRED COMPONENTS - robotis_controller_msgs + humanoid_robot_controller_msgs roscpp sensor_msgs std_msgs @@ -34,7 +34,7 @@ catkin_package( INCLUDE_DIRS CATKIN_DEPENDS roscpp - robotis_controller_msgs + humanoid_robot_controller_msgs roscpp sensor_msgs std_msgs diff --git a/humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch b/humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch index f27c2b8..3d1bc19 100644 --- a/humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch +++ b/humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch @@ -1,15 +1,15 @@ - + - - + + diff --git a/humanoid_robot_read_write_demo/package.xml b/humanoid_robot_read_write_demo/package.xml index af5ed6f..584c772 100644 --- a/humanoid_robot_read_write_demo/package.xml +++ b/humanoid_robot_read_write_demo/package.xml @@ -6,26 +6,26 @@ The humanoid_robot_read_write_demo package Apache 2.0 - Ronaldson Bellande + Ronaldson Bellande catkin roscpp std_msgs sensor_msgs - robotis_controller_msgs + humanoid_robot_controller_msgs humanoid_robot_manager roscpp std_msgs sensor_msgs - robotis_controller_msgs + humanoid_robot_controller_msgs humanoid_robot_manager roscpp std_msgs sensor_msgs - robotis_controller_msgs + humanoid_robot_controller_msgs humanoid_robot_manager diff --git a/humanoid_robot_read_write_demo/src/read_write.cpp b/humanoid_robot_read_write_demo/src/read_write.cpp index 6af9fe1..e40f235 100644 --- a/humanoid_robot_read_write_demo/src/read_write.cpp +++ b/humanoid_robot_read_write_demo/src/read_write.cpp @@ -20,8 +20,8 @@ #include #include -#include "robotis_controller_msgs/SetModule.h" -#include "robotis_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_controller_msgs/SetModule.h" +#include "humanoid_robot_controller_msgs/SyncWriteItem.h" void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); void jointstatesCallback(const sensor_msgs::JointState::ConstPtr &msg); @@ -62,24 +62,24 @@ int main(int argc, char **argv) { ros::NodeHandle nh(ros::this_node::getName()); - init_pose_pub = nh.advertise("/robotis/base/ini_pose", 0); - sync_write_pub = nh.advertise( - "/robotis/sync_write_item", 0); - dxl_torque_pub = nh.advertise("/robotis/dxl_torque", 0); + init_pose_pub = nh.advertise("/humanoid_robot/base/ini_pose", 0); + sync_write_pub = nh.advertise( + "/humanoid_robot/sync_write_item", 0); + dxl_torque_pub = nh.advertise("/humanoid_robot/dxl_torque", 0); write_joint_pub = - nh.advertise("/robotis/set_joint_states", 0); + nh.advertise("/humanoid_robot/set_joint_states", 0); write_joint_pub2 = nh.advertise( - "/robotis/direct_control/set_joint_states", 0); + "/humanoid_robot/direct_control/set_joint_states", 0); read_joint_sub = - nh.subscribe("/robotis/present_joint_states", 1, jointstatesCallback); + nh.subscribe("/humanoid_robot/present_joint_states", 1, jointstatesCallback); buttuon_sub = - nh.subscribe("/robotis/open_cr/button", 1, buttonHandlerCallback); + nh.subscribe("/humanoid_robot/open_cr/button", 1, buttonHandlerCallback); // service set_joint_module_client = - nh.serviceClient( - "/robotis/set_present_ctrl_modules"); + nh.serviceClient( + "/humanoid_robot/set_present_ctrl_modules"); ros::start(); @@ -116,7 +116,7 @@ int main(int argc, char **argv) { } void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { - // starting demo using robotis_controller + // starting demo using humanoid_robot_controller if (msg->data == "mode") { control_module = Framework; ROS_INFO("Button : mode | Framework"); @@ -215,7 +215,7 @@ void goInitPose() { } void setLED(int led) { - robotis_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led); @@ -238,7 +238,7 @@ bool checkManagerRunning(std::string &manager_name) { } void setModule(const std::string &module_name) { - robotis_controller_msgs::SetModule set_module_srv; + humanoid_robot_controller_msgs::SetModule set_module_srv; set_module_srv.request.module_name = module_name; if (set_joint_module_client.call(set_module_srv) == false) { @@ -257,7 +257,7 @@ void torqueOnAll() { } void torqueOff(const std::string &body_side) { - robotis_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; int torque_value = 0; syncwrite_msg.item_name = "torque_enable"; From aaba7245efdc0bb58144c6ca9aef73fa7d024846 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Thu, 28 Sep 2023 10:57:43 -0400 Subject: [PATCH 110/172] latest pushes --- .gitignore | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.gitignore b/.gitignore index 36a5c0a..a78ffcf 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,13 @@ qtcreator-build *.backup *.user *.autosave + +# Scripts +init_setup.sh +repository_recal.sh +push.sh +publish.sh +ros_publish.sh +prerelease_test.sh +fix_errors.sh +replace_add_index.sh From 83d3baa78e3594079dca4883429940b4f9df8f0c Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Thu, 28 Sep 2023 10:58:18 -0400 Subject: [PATCH 111/172] Delete fix_errors.sh --- fix_errors.sh | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100755 fix_errors.sh diff --git a/fix_errors.sh b/fix_errors.sh deleted file mode 100755 index 2ebdbee..0000000 --- a/fix_errors.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# Get the URL from .git/config -git_url=$(git config --get remote.origin.url) - -# Check if a URL is found -if [ -z "$git_url" ]; then - echo "No remote URL found in .git/config." - exit 1 -fi - -# Clone the repository into a temporary folder -git clone "$git_url" tmp_clone - -# Check if the clone was successful -if [ $? -eq 0 ]; then - # Remove the existing .git directory if it exists - if [ -d ".git" ]; then - rm -rf .git - fi - - # Copy the .git directory from the clone to the current repository - cp -r tmp_clone/.git . - - # Remove the clone directory - rm -rf tmp_clone - - echo "Repository cloned and .git directory copied successfully." -else - echo "Failed to clone the repository." -fi From fd6b18a34ab4883a2996979b423b4a75d53bf3ba Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Thu, 28 Sep 2023 10:58:30 -0400 Subject: [PATCH 112/172] Delete push.sh --- push.sh | 4 ---- 1 file changed, 4 deletions(-) delete mode 100755 push.sh diff --git a/push.sh b/push.sh deleted file mode 100755 index 3435685..0000000 --- a/push.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -# Git push what is already in the repository -git pull --no-edit; git fetch; git add .; git commit -am "latest pushes"; git push From 4e9e85b765ff1e1af1513d9fdfb904c2c0c3bcfe Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Thu, 28 Sep 2023 10:58:41 -0400 Subject: [PATCH 113/172] Delete repository_recal.sh --- repository_recal.sh | 110 -------------------------------------------- 1 file changed, 110 deletions(-) delete mode 100755 repository_recal.sh diff --git a/repository_recal.sh b/repository_recal.sh deleted file mode 100755 index 4c7fd4f..0000000 --- a/repository_recal.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/bash - -# Git push what is already in the repository -git pull --no-edit; git fetch; git add .; git commit -am "latest pushes"; git push - -# Get the current directory -current_dir=$(pwd) - -# Read the remote repository URL from .git/config -remote_repo_url=$(git -C "$current_dir" config --get remote.origin.url) - -# Create a temporary directory for cloning the repository -temp_dir=$(mktemp -d) - -# Clone the repository into the temporary directory without using local references -git clone --no-local "$current_dir" "$temp_dir" - -# Switch to the temporary directory -cd "$temp_dir" - -# Create a temporary file to store the file list -tmp_file=$(mktemp) -# Create a temporary file to store the processed commits -processed_commits_file=$(mktemp) - -# Function to check if a commit has already been processed -is_commit_processed() { - local commit="$1" - - # Check if the commit is already processed - grep -Fxq "$commit" "$processed_commits_file" -} - -# Function to mark a commit as processed -mark_commit_processed() { - local commit="$1" - - # Mark the commit as processed - echo "$commit" >> "$processed_commits_file" -} - -# Function to check if a file or folder exists in the repository -file_exists_in_repo() { - local file_path="$1" - - # Check if the file or folder exists in the repository - git ls-tree --name-only -r HEAD | grep -Fxq "$file_path" -} - -# Function to process the files and folders in each commit -process_commit_files() { - local commit="$1" - - # Check if the commit has already been processed - if is_commit_processed "$commit"; then - echo "Commit $commit already processed. Skipping..." - return - fi - - # Get the list of files and folders in the commit (including subfolders) - git ls-tree --name-only -r "$commit" >> "$tmp_file" - - # Process each file or folder in the commit - while IFS= read -r line - do - # Check if the file or folder exists in the current push - if file_exists_in_repo "$line"; then - echo "Keeping: $line" - else - echo "Deleting: $line" - git filter-repo --path "$line" --invert-paths - fi - done < "$tmp_file" - - # Mark the commit as processed - mark_commit_processed "$commit" - - # Clear the temporary file - > "$tmp_file" -} - -# Iterate over each commit in the repository -git rev-list --all | while IFS= read -r commit -do - process_commit_files "$commit" -done - -# Push the filtered changes to the original repository -git remote add origin "$remote_repo_url" -git push --force origin main - -# Perform a history rewrite to remove the filtered files -git filter-repo --force - -# Fetch the changes from the remote repository -git -C "$current_dir" fetch origin - -# Merge the remote changes into the local repository -git -C "$current_dir" merge origin/main --no-edit - -# Update the local repository and reduce the size of .git if needed -git -C "$current_dir" gc --prune=now -git -C "$current_dir" reflog expire --expire=now --all -git -C "$current_dir" repack -ad - -# Clean up temporary files and directories -cd "$current_dir" -rm -rf "$temp_dir" -rm "$tmp_file" -rm "$processed_commits_file" From 77dc240406b9216f2a39512a9e4692806eaddbef Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Thu, 28 Sep 2023 11:08:48 -0400 Subject: [PATCH 114/172] latest pushes --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a6a7663..20728e6 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ the new commits and codes are under New License Latest versions and Maintainer is on organization https://github.com/Robotics-Sensors + ### Maintainer * Ronaldson Bellande From 00968dfea626b78156e2d4daff2cf5e4be44b006 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Thu, 28 Sep 2023 11:18:08 -0400 Subject: [PATCH 115/172] latest pushes --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 20728e6..f32c3fa 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ -------------------------------------------------------------------------------------------------------- Updated Version [humanoid_robot_module](https://github.com/Robotics-Sensors/humanoid_robot_demos) readme. +Old Version/Previous Used for Different Context [ROBOTIS-OP3-Demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) readme. + -------------------------------------------------------------------------------------------------------- ## Important The repository has diverged, as the old commits and codes are under the previous License and @@ -12,7 +14,6 @@ the new commits and codes are under New License Latest versions and Maintainer is on organization https://github.com/Robotics-Sensors - ### Maintainer * Ronaldson Bellande From 2dd27809ba7a19787dea888662dbffb8aa04dcdb Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Sat, 30 Sep 2023 16:51:44 -0400 Subject: [PATCH 116/172] latest pushes --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index f32c3fa..7dcaab3 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,11 @@ the new commits and codes are under New License Latest versions and Maintainer is on organization https://github.com/Robotics-Sensors +# USE CASE +-------------------------------------------------------------------------------------------------------- +* Every repository within our organization is a valuable resource that can be utilized for educational purposes by individuals who actively contribute to the repository or choose to become sponsors of the organization. For those who wish to use our services conversationally, the acquisition of a license and subscription from our company website is mandatory. This ensures that the services are appropriately compensated for their use. Additionally, for the 90% of services designated as private, acquiring a license and subscription can be facilitated through our company website. We encourage interested parties to visit our website to explore and procure the necessary licenses and subscriptions for the diverse range of services and products we offer. Your support and commitment enable us to maintain and enhance the quality of our offerings, contributing to a thriving collaborative environment. +-------------------------------------------------------------------------------------------------------- + ### Maintainer * Ronaldson Bellande From b2cce9e2190defdc8f788f2a7f912d377a1ba444 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Mon, 2 Oct 2023 00:51:10 -0400 Subject: [PATCH 117/172] latest pushes --- humanoid_robot_ball_detector/CMakeLists.txt | 2 +- humanoid_robot_ball_detector/package.xml | 2 +- humanoid_robot_bringup/CMakeLists.txt | 2 +- humanoid_robot_bringup/package.xml | 2 +- humanoid_robot_demo/CMakeLists.txt | 2 +- humanoid_robot_demo/package.xml | 2 +- humanoid_robot_read_write_demo/CMakeLists.txt | 2 +- humanoid_robot_read_write_demo/package.xml | 4 ++-- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/humanoid_robot_ball_detector/CMakeLists.txt b/humanoid_robot_ball_detector/CMakeLists.txt index 2f78705..201f57a 100644 --- a/humanoid_robot_ball_detector/CMakeLists.txt +++ b/humanoid_robot_ball_detector/CMakeLists.txt @@ -1,7 +1,7 @@ ################################################################################ # Set minimum required version of cmake, project name and compile options ################################################################################ -cmake_minimum_required(VERSION 3.0.2) +cmake_minimum_required(VERSION 3.8) project(humanoid_robot_ball_detector) ################################################################################ diff --git a/humanoid_robot_ball_detector/package.xml b/humanoid_robot_ball_detector/package.xml index 0f77593..74f2821 100644 --- a/humanoid_robot_ball_detector/package.xml +++ b/humanoid_robot_ball_detector/package.xml @@ -1,5 +1,5 @@ - + humanoid_robot_ball_detector 0.1.0 diff --git a/humanoid_robot_bringup/CMakeLists.txt b/humanoid_robot_bringup/CMakeLists.txt index 631edc8..3e2eed3 100644 --- a/humanoid_robot_bringup/CMakeLists.txt +++ b/humanoid_robot_bringup/CMakeLists.txt @@ -1,7 +1,7 @@ ################################################################################ # Set minimum required version of cmake, project name and compile options ################################################################################ -cmake_minimum_required(VERSION 3.0.2) +cmake_minimum_required(VERSION 3.8) project(humanoid_robot_bringup) ################################################################################ diff --git a/humanoid_robot_bringup/package.xml b/humanoid_robot_bringup/package.xml index 87db202..9c5fdd9 100644 --- a/humanoid_robot_bringup/package.xml +++ b/humanoid_robot_bringup/package.xml @@ -1,5 +1,5 @@ - + humanoid_robot_bringup 0.3.0 diff --git a/humanoid_robot_demo/CMakeLists.txt b/humanoid_robot_demo/CMakeLists.txt index 7316eb6..274236e 100644 --- a/humanoid_robot_demo/CMakeLists.txt +++ b/humanoid_robot_demo/CMakeLists.txt @@ -1,7 +1,7 @@ ################################################################################ # Set minimum required version of cmake, project name and compile options ################################################################################ -cmake_minimum_required(VERSION 3.0.2) +cmake_minimum_required(VERSION 3.8) project(humanoid_robot_demo) ################################################################################ diff --git a/humanoid_robot_demo/package.xml b/humanoid_robot_demo/package.xml index 3af2f55..17d54f3 100644 --- a/humanoid_robot_demo/package.xml +++ b/humanoid_robot_demo/package.xml @@ -1,5 +1,5 @@ - + humanoid_robot_demo 0.3.0 diff --git a/humanoid_robot_read_write_demo/CMakeLists.txt b/humanoid_robot_read_write_demo/CMakeLists.txt index 79ddb78..20323c6 100644 --- a/humanoid_robot_read_write_demo/CMakeLists.txt +++ b/humanoid_robot_read_write_demo/CMakeLists.txt @@ -1,7 +1,7 @@ ################################################################################ # Set minimum required version of cmake, project name and compile options ################################################################################ -cmake_minimum_required(VERSION 3.0.2) +cmake_minimum_required(VERSION 3.8) project(humanoid_robot_read_write_demo) ################################################################################ diff --git a/humanoid_robot_read_write_demo/package.xml b/humanoid_robot_read_write_demo/package.xml index 584c772..cc0331c 100644 --- a/humanoid_robot_read_write_demo/package.xml +++ b/humanoid_robot_read_write_demo/package.xml @@ -1,12 +1,12 @@ - + humanoid_robot_read_write_demo 0.3.0 The humanoid_robot_read_write_demo package Apache 2.0 - Ronaldson Bellande + Ronaldson Bellande catkin From 3d8745cc7b9bbfbe9ea9b966e7487b9b01a33cac Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Tue, 3 Oct 2023 08:20:12 -0400 Subject: [PATCH 118/172] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index c0ee812..ffeeac4 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright {yyyy} {name of copyright owner} + Copyright 2023 Ronaldson Bellande Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From c38a34d8e4dc6413ac3b408a6bb7729fccab2b97 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 3 Oct 2023 12:08:27 -0400 Subject: [PATCH 119/172] latest pushes --- humanoid_robot_ball_detector/package.xml | 3 ++- humanoid_robot_bringup/package.xml | 4 +++- humanoid_robot_demo/package.xml | 4 +++- humanoid_robot_read_write_demo/package.xml | 4 +++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/humanoid_robot_ball_detector/package.xml b/humanoid_robot_ball_detector/package.xml index 74f2821..ff0f695 100644 --- a/humanoid_robot_ball_detector/package.xml +++ b/humanoid_robot_ball_detector/package.xml @@ -10,7 +10,8 @@ Apache 2.0 Ronaldson Bellande - catkin + catkin + ament_cmake roscpp roslib diff --git a/humanoid_robot_bringup/package.xml b/humanoid_robot_bringup/package.xml index 9c5fdd9..349c2ed 100644 --- a/humanoid_robot_bringup/package.xml +++ b/humanoid_robot_bringup/package.xml @@ -9,7 +9,9 @@ Apache 2.0 Ronaldson Bellande - catkin + catkin + ament_cmake + humanoid_robot_manager humanoid_robot_description diff --git a/humanoid_robot_demo/package.xml b/humanoid_robot_demo/package.xml index 17d54f3..0613163 100644 --- a/humanoid_robot_demo/package.xml +++ b/humanoid_robot_demo/package.xml @@ -9,7 +9,9 @@ Apache 2.0 Ronaldson Bellande - catkin + catkin + ament_cmake + roscpp roslib diff --git a/humanoid_robot_read_write_demo/package.xml b/humanoid_robot_read_write_demo/package.xml index cc0331c..a979b53 100644 --- a/humanoid_robot_read_write_demo/package.xml +++ b/humanoid_robot_read_write_demo/package.xml @@ -8,7 +8,9 @@ Apache 2.0 Ronaldson Bellande - catkin + catkin + ament_cmake + roscpp std_msgs From 7f57f34eb183e5f5f4a82f1739df07369ea92991 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 3 Oct 2023 13:34:29 -0400 Subject: [PATCH 120/172] latest pushes --- humanoid_robot_ball_detector/package.xml | 154 ++++++++++++------ humanoid_robot_bringup/package.xml | 63 +++++--- humanoid_robot_demo/package.xml | 179 ++++++++++++++------- humanoid_robot_read_write_demo/package.xml | 54 +++++-- 4 files changed, 312 insertions(+), 138 deletions(-) diff --git a/humanoid_robot_ball_detector/package.xml b/humanoid_robot_ball_detector/package.xml index ff0f695..8f62b4f 100644 --- a/humanoid_robot_ball_detector/package.xml +++ b/humanoid_robot_ball_detector/package.xml @@ -13,55 +13,113 @@ catkin ament_cmake - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - uvc_camera - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - uvc_camera + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera + + + + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera + - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - uvc_camera diff --git a/humanoid_robot_bringup/package.xml b/humanoid_robot_bringup/package.xml index 349c2ed..b11f545 100644 --- a/humanoid_robot_bringup/package.xml +++ b/humanoid_robot_bringup/package.xml @@ -13,25 +13,52 @@ ament_cmake - humanoid_robot_manager - humanoid_robot_description - usb_cam - joint_state_publisher - robot_state_publisher - rviz + + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz - humanoid_robot_manager - humanoid_robot_description - usb_cam - joint_state_publisher - robot_state_publisher - rviz + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + + + + + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + - humanoid_robot_manager - humanoid_robot_description - usb_cam - joint_state_publisher - robot_state_publisher - rviz diff --git a/humanoid_robot_demo/package.xml b/humanoid_robot_demo/package.xml index 0613163..24efcd0 100644 --- a/humanoid_robot_demo/package.xml +++ b/humanoid_robot_demo/package.xml @@ -13,64 +13,129 @@ ament_cmake - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector - boost - eigen - yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool - ros_madplay_player - face_detection + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector - boost - eigen - yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool - ros_madplay_player - face_detection + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector - boost - eigen - yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool - ros_madplay_player - face_detection + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection + + + + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection + diff --git a/humanoid_robot_read_write_demo/package.xml b/humanoid_robot_read_write_demo/package.xml index a979b53..41fd836 100644 --- a/humanoid_robot_read_write_demo/package.xml +++ b/humanoid_robot_read_write_demo/package.xml @@ -12,22 +12,46 @@ ament_cmake - roscpp - std_msgs - sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager + + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager - roscpp - std_msgs - sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager + + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager + + + + + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager + + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager + + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager + - roscpp - std_msgs - sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager From d9dd6711165e2e7a0068acbf20c9099c71493211 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 3 Oct 2023 23:29:14 -0400 Subject: [PATCH 121/172] latest pushes --- humanoid_robot_ball_detector/CMakeLists.txt | 101 +++++++---------- humanoid_robot_bringup/CMakeLists.txt | 42 ++----- humanoid_robot_demo/CMakeLists.txt | 106 +++++++----------- humanoid_robot_read_write_demo/CMakeLists.txt | 68 ++++------- 4 files changed, 116 insertions(+), 201 deletions(-) diff --git a/humanoid_robot_ball_detector/CMakeLists.txt b/humanoid_robot_ball_detector/CMakeLists.txt index 201f57a..c4eb1c1 100644 --- a/humanoid_robot_ball_detector/CMakeLists.txt +++ b/humanoid_robot_ball_detector/CMakeLists.txt @@ -1,32 +1,29 @@ -################################################################################ -# Set minimum required version of cmake, project name and compile options -################################################################################ cmake_minimum_required(VERSION 3.8) project(humanoid_robot_ball_detector) -################################################################################ -# Find catkin packages and libraries for catkin and system dependencies -################################################################################ -find_package( - catkin REQUIRED COMPONENTS - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - message_generation -) -find_package(Boost REQUIRED COMPONENTS thread) -find_package(OpenCV 4.2 REQUIRED) +if($ENV{ROS_VERSION} EQUAL 1) + find_package( + catkin REQUIRED COMPONENTS + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + message_generation + ) + + find_package(Boost REQUIRED COMPONENTS thread) + find_package(OpenCV 4.2 REQUIRED) + find_package(PkgConfig REQUIRED) +else() + find_package(ament_cmake REQUIRED) +endif() + -## Resolve system dependency on yaml-cpp, which apparently does not -## provide a CMake find_package() module. -## Insert your header file compatible specified path like '#include ' -find_package(PkgConfig REQUIRED) pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) find_path( YAML_CPP_INCLUDE_DIR @@ -44,13 +41,6 @@ if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") add_definitions(-DHAVE_NEW_YAMLCPP) endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") -################################################################################ -# Setup for python modules and scripts -################################################################################ - -################################################################################ -# Declare ROS messages, services and actions -################################################################################ add_message_files( FILES CircleSetStamped.msg @@ -69,32 +59,28 @@ generate_messages( geometry_msgs ) -################################################################################ -# Declare ROS dynamic reconfigure parameters -################################################################################ generate_dynamic_reconfigure_options(cfg/DetectorParams.cfg) -################################################################################ -# Declare catkin specific configuration to be passed to dependent projects -################################################################################## -catkin_package( - INCLUDE_DIRS include - CATKIN_DEPENDS - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - message_runtime - DEPENDS Boost OpenCV -) +if($ENV{ROS_VERSION} EQUAL 1) + catkin_package( + INCLUDE_DIRS include + CATKIN_DEPENDS + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + message_runtime + DEPENDS Boost OpenCV + ) +else() + ament_package() +endif() + -################################################################################ -# Build -################################################################################ include_directories( include ${catkin_INCLUDE_DIRS} @@ -119,9 +105,6 @@ target_link_libraries( ${YAML_CPP_LIBRARIES} ) -################################################################################ -# Install -################################################################################ install( TARGETS ball_detector_node RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} @@ -136,7 +119,3 @@ install( DIRECTORY config launch rviz DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) - -################################################################################ -# Test -################################################################################ diff --git a/humanoid_robot_bringup/CMakeLists.txt b/humanoid_robot_bringup/CMakeLists.txt index 3e2eed3..b54a85b 100644 --- a/humanoid_robot_bringup/CMakeLists.txt +++ b/humanoid_robot_bringup/CMakeLists.txt @@ -1,43 +1,21 @@ -################################################################################ -# Set minimum required version of cmake, project name and compile options -################################################################################ cmake_minimum_required(VERSION 3.8) project(humanoid_robot_bringup) -################################################################################ -# Find catkin packages and libraries for catkin and system dependencies -################################################################################ -find_package(catkin REQUIRED) -################################################################################ -# Setup for python modules and scripts -################################################################################ +if($ENV{ROS_VERSION} EQUAL 1) + find_package(catkin REQUIRED) +else() + find_package(ament_cmake REQUIRED) +endif() -################################################################################ -# Declare ROS messages, services and actions -################################################################################ -################################################################################ -# Declare ROS dynamic reconfigure parameters -################################################################################ +if($ENV{ROS_VERSION} EQUAL 1) + catkin_package() +else() + ament_package() +endif() -################################################################################ -# Declare catkin specific configuration to be passed to dependent projects -################################################################################ -catkin_package() - -################################################################################ -# Build -################################################################################ - -################################################################################ -# Install -################################################################################ install( DIRECTORY launch rviz DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) - -################################################################################ -# Test -################################################################################ diff --git a/humanoid_robot_demo/CMakeLists.txt b/humanoid_robot_demo/CMakeLists.txt index 274236e..abdb213 100644 --- a/humanoid_robot_demo/CMakeLists.txt +++ b/humanoid_robot_demo/CMakeLists.txt @@ -1,33 +1,30 @@ -################################################################################ -# Set minimum required version of cmake, project name and compile options -################################################################################ cmake_minimum_required(VERSION 3.8) project(humanoid_robot_demo) -################################################################################ -# Find catkin packages and libraries for catkin and system dependencies -################################################################################ -find_package( - catkin REQUIRED COMPONENTS - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector -) -find_package(Boost REQUIRED COMPONENTS thread) -find_package(Eigen3 REQUIRED) +if($ENV{ROS_VERSION} EQUAL 1) + find_package( + catkin REQUIRED COMPONENTS + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + ) + + find_package(Boost REQUIRED COMPONENTS thread) + find_package(Eigen3 REQUIRED) +else() + find_package(ament_cmake REQUIRED) +endif() + -## Resolve system dependency on yaml-cpp, which apparently does not -## provide a CMake find_package() module. -## Insert your header file compatible specified path like '#include ' find_package(PkgConfig REQUIRED) pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) find_path( @@ -46,41 +43,29 @@ if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") add_definitions(-DHAVE_NEW_YAMLCPP) endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") -################################################################################ -# Setup for python modules and scripts -################################################################################ -################################################################################ -# Declare ROS messages, services and actions -################################################################################ +if($ENV{ROS_VERSION} EQUAL 1) + catkin_package( + INCLUDE_DIRS include + CATKIN_DEPENDS + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + DEPENDS Boost EIGEN3 + ) +else() + ament_package() +endif() -################################################################################ -# Declare ROS dynamic reconfigure parameters -################################################################################ -################################################################################ -# Declare catkin specific configuration to be passed to dependent projects -################################################################################ -catkin_package( - INCLUDE_DIRS include - CATKIN_DEPENDS - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector - DEPENDS Boost EIGEN3 -) - -################################################################################ -# Build -################################################################################ include_directories( include ${catkin_INCLUDE_DIRS} @@ -141,9 +126,6 @@ target_link_libraries( ${YAML_CPP_LIBRARIES} ) -################################################################################ -# Install -################################################################################ install( TARGETS op_demo_node self_test_node RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} @@ -158,7 +140,3 @@ install( DIRECTORY data launch list DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) - -################################################################################ -# Test -################################################################################ diff --git a/humanoid_robot_read_write_demo/CMakeLists.txt b/humanoid_robot_read_write_demo/CMakeLists.txt index 20323c6..675b63e 100644 --- a/humanoid_robot_read_write_demo/CMakeLists.txt +++ b/humanoid_robot_read_write_demo/CMakeLists.txt @@ -1,48 +1,35 @@ -################################################################################ -# Set minimum required version of cmake, project name and compile options -################################################################################ cmake_minimum_required(VERSION 3.8) project(humanoid_robot_read_write_demo) -################################################################################ -# Find catkin packages and libraries for catkin and system dependencies -################################################################################ -find_package( - catkin REQUIRED COMPONENTS - humanoid_robot_controller_msgs - roscpp - sensor_msgs - std_msgs -) -################################################################################ -# Setup for python modules and scripts -################################################################################ +if($ENV{ROS_VERSION} EQUAL 1) + find_package( + catkin REQUIRED COMPONENTS + humanoid_robot_controller_msgs + roscpp + sensor_msgs + std_msgs + ) +else() + find_package(ament_cmake REQUIRED) +endif() -################################################################################ -# Declare ROS messages, services and actions -################################################################################ -################################################################################ -# Declare ROS dynamic reconfigure parameters -################################################################################ +if($ENV{ROS_VERSION} EQUAL 1) + catkin_package( + INCLUDE_DIRS + CATKIN_DEPENDS + roscpp + humanoid_robot_controller_msgs + roscpp + sensor_msgs + std_msgs + ) +else() + ament_package() +endif() -################################################################################ -# Declare catkin specific configuration to be passed to dependent projects -################################################################################ -catkin_package( - INCLUDE_DIRS - CATKIN_DEPENDS - roscpp - humanoid_robot_controller_msgs - roscpp - sensor_msgs - std_msgs -) -################################################################################ -# Build -################################################################################ include_directories(${catkin_INCLUDE_DIRS}) add_executable( @@ -61,9 +48,6 @@ target_link_libraries( ${catkin_LIBRARIES} ) -################################################################################ -# Install -################################################################################ install( TARGETS read_write RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} @@ -73,7 +57,3 @@ install( DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) - -################################################################################ -# Test -################################################################################ From e20f10bd179d49807b3601e0b053b189b77173f8 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Wed, 4 Oct 2023 00:57:31 -0400 Subject: [PATCH 122/172] latest pushes --- humanoid_robot_ball_detector/CHANGELOG.rst | 7 +++++++ humanoid_robot_bringup/CHANGELOG.rst | 7 +++++++ humanoid_robot_demo/CHANGELOG.rst | 7 +++++++ humanoid_robot_read_write_demo/CHANGELOG.rst | 9 ++++++++- 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/humanoid_robot_ball_detector/CHANGELOG.rst b/humanoid_robot_ball_detector/CHANGELOG.rst index f713055..6d12ed9 100644 --- a/humanoid_robot_ball_detector/CHANGELOG.rst +++ b/humanoid_robot_ball_detector/CHANGELOG.rst @@ -2,6 +2,13 @@ Changelog for package humanoid_robot_ball_detector ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.2 (2023-10-03) +------------------ +* Make it compatible for ROS1/ROS2 +* Fix bugs +* Update package.xml and CMakeList.txt for to the latest versions +* Contributors & Maintainer: Ronaldson Bellande + 0.3.1 (2023-09-27) ------------------ * Starting from this point it under a new license diff --git a/humanoid_robot_bringup/CHANGELOG.rst b/humanoid_robot_bringup/CHANGELOG.rst index 83b5f30..1970d3a 100644 --- a/humanoid_robot_bringup/CHANGELOG.rst +++ b/humanoid_robot_bringup/CHANGELOG.rst @@ -2,6 +2,13 @@ Changelog for package humanoid_robot_bringup ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.2 (2023-10-03) +------------------ +* Make it compatible for ROS1/ROS2 +* Fix bugs +* Update package.xml and CMakeList.txt for to the latest versions +* Contributors & Maintainer: Ronaldson Bellande + 0.3.1 (2023-09-27) ------------------ * Starting from this point it under a new license diff --git a/humanoid_robot_demo/CHANGELOG.rst b/humanoid_robot_demo/CHANGELOG.rst index 094695e..7bbe748 100644 --- a/humanoid_robot_demo/CHANGELOG.rst +++ b/humanoid_robot_demo/CHANGELOG.rst @@ -2,6 +2,13 @@ Changelog for package humanoid_robot_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.2 (2023-10-03) +------------------ +* Make it compatible for ROS1/ROS2 +* Fix bugs +* Update package.xml and CMakeList.txt for to the latest versions +* Contributors & Maintainer: Ronaldson Bellande + 0.3.1 (2023-09-27) ------------------ * Starting from this point it under a new license diff --git a/humanoid_robot_read_write_demo/CHANGELOG.rst b/humanoid_robot_read_write_demo/CHANGELOG.rst index afbfa4c..5b53cbd 100644 --- a/humanoid_robot_read_write_demo/CHANGELOG.rst +++ b/humanoid_robot_read_write_demo/CHANGELOG.rst @@ -1,7 +1,14 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package humanoid_robot_demo +Changelog for package humanoid_robot_read_write_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +0.3.2 (2023-10-03) +------------------ +* Make it compatible for ROS1/ROS2 +* Fix bugs +* Update package.xml and CMakeList.txt for to the latest versions +* Contributors & Maintainer: Ronaldson Bellande + 0.3.1 (2023-09-27) ------------------ * Starting from this point it under a new license From 03a0dfd40ead08103f482c530fc6f3b46ffd1ffa Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Wed, 4 Oct 2023 21:01:09 -0400 Subject: [PATCH 123/172] latest pushes --- humanoid_robot_read_write_demo/CMakeLists.txt | 2 - humanoid_robot_read_write_demo/package.xml | 76 +++++++++---------- 2 files changed, 36 insertions(+), 42 deletions(-) diff --git a/humanoid_robot_read_write_demo/CMakeLists.txt b/humanoid_robot_read_write_demo/CMakeLists.txt index 675b63e..40ef26a 100644 --- a/humanoid_robot_read_write_demo/CMakeLists.txt +++ b/humanoid_robot_read_write_demo/CMakeLists.txt @@ -25,8 +25,6 @@ if($ENV{ROS_VERSION} EQUAL 1) sensor_msgs std_msgs ) -else() - ament_package() endif() diff --git a/humanoid_robot_read_write_demo/package.xml b/humanoid_robot_read_write_demo/package.xml index 41fd836..5c8ed9e 100644 --- a/humanoid_robot_read_write_demo/package.xml +++ b/humanoid_robot_read_write_demo/package.xml @@ -8,50 +8,46 @@ Apache 2.0 Ronaldson Bellande + catkin + + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager + + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager + + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager + + ament_cmake + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager - - roscpp - std_msgs - sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager - - roscpp - std_msgs - sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager - - roscpp - std_msgs - sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager - - - - - roscpp - std_msgs - sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager - - roscpp - std_msgs - sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager - - roscpp - std_msgs - sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager - + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager + roscpp + std_msgs + sensor_msgs + humanoid_robot_controller_msgs + humanoid_robot_manager From deb0fbcc5b1d83a036cbddfc9d5cccb446489096 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Wed, 4 Oct 2023 23:32:29 -0400 Subject: [PATCH 124/172] latest pushes --- humanoid_robot_ball_detector/CMakeLists.txt | 2 - humanoid_robot_ball_detector/package.xml | 209 ++++++++--------- humanoid_robot_bringup/CMakeLists.txt | 2 - humanoid_robot_bringup/package.xml | 90 ++++--- humanoid_robot_demo/CMakeLists.txt | 3 - humanoid_robot_demo/package.xml | 245 ++++++++++---------- humanoid_robot_read_write_demo/package.xml | 2 +- 7 files changed, 268 insertions(+), 285 deletions(-) diff --git a/humanoid_robot_ball_detector/CMakeLists.txt b/humanoid_robot_ball_detector/CMakeLists.txt index c4eb1c1..0a54aa1 100644 --- a/humanoid_robot_ball_detector/CMakeLists.txt +++ b/humanoid_robot_ball_detector/CMakeLists.txt @@ -76,8 +76,6 @@ if($ENV{ROS_VERSION} EQUAL 1) message_runtime DEPENDS Boost OpenCV ) -else() - ament_package() endif() diff --git a/humanoid_robot_ball_detector/package.xml b/humanoid_robot_ball_detector/package.xml index 8f62b4f..19f9714 100644 --- a/humanoid_robot_ball_detector/package.xml +++ b/humanoid_robot_ball_detector/package.xml @@ -1,7 +1,7 @@ humanoid_robot_ball_detector - 0.1.0 + 0.3.2 This package implements a circle-like shape detector of the input image It requires and input image and publish, at frame rate, a marked image @@ -10,116 +10,113 @@ Apache 2.0 Ronaldson Bellande + catkin + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera + + ament_cmake + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - uvc_camera + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - uvc_camera - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - uvc_camera - - - - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - uvc_camera - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - uvc_camera - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - uvc_camera - + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + dynamic_reconfigure + cv_bridge + image_transport + boost + opencv3 + yaml-cpp + message_generation + message_runtime + message_runtime + usb_cam + uvc_camera diff --git a/humanoid_robot_bringup/CMakeLists.txt b/humanoid_robot_bringup/CMakeLists.txt index b54a85b..da5f24e 100644 --- a/humanoid_robot_bringup/CMakeLists.txt +++ b/humanoid_robot_bringup/CMakeLists.txt @@ -11,8 +11,6 @@ endif() if($ENV{ROS_VERSION} EQUAL 1) catkin_package() -else() - ament_package() endif() install( diff --git a/humanoid_robot_bringup/package.xml b/humanoid_robot_bringup/package.xml index b11f545..20d2b13 100644 --- a/humanoid_robot_bringup/package.xml +++ b/humanoid_robot_bringup/package.xml @@ -1,7 +1,7 @@ humanoid_robot_bringup - 0.3.0 + 0.3.2 This package is a demo for first time users. There is an example in the demo where you can run and visualize the robot. @@ -9,56 +9,52 @@ Apache 2.0 Ronaldson Bellande + catkin + + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + + ament_cmake + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz - - humanoid_robot_manager - humanoid_robot_description - usb_cam - joint_state_publisher - robot_state_publisher - rviz - - humanoid_robot_manager - humanoid_robot_description - usb_cam - joint_state_publisher - robot_state_publisher - rviz - - humanoid_robot_manager - humanoid_robot_description - usb_cam - joint_state_publisher - robot_state_publisher - rviz - - - - - humanoid_robot_manager - humanoid_robot_description - usb_cam - joint_state_publisher - robot_state_publisher - rviz - - humanoid_robot_manager - humanoid_robot_description - usb_cam - joint_state_publisher - robot_state_publisher - rviz - - humanoid_robot_manager - humanoid_robot_description - usb_cam - joint_state_publisher - robot_state_publisher - rviz - + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz + humanoid_robot_manager + humanoid_robot_description + usb_cam + joint_state_publisher + robot_state_publisher + rviz diff --git a/humanoid_robot_demo/CMakeLists.txt b/humanoid_robot_demo/CMakeLists.txt index abdb213..049d16a 100644 --- a/humanoid_robot_demo/CMakeLists.txt +++ b/humanoid_robot_demo/CMakeLists.txt @@ -17,7 +17,6 @@ if($ENV{ROS_VERSION} EQUAL 1) humanoid_robot_math humanoid_robot_ball_detector ) - find_package(Boost REQUIRED COMPONENTS thread) find_package(Eigen3 REQUIRED) else() @@ -61,8 +60,6 @@ if($ENV{ROS_VERSION} EQUAL 1) humanoid_robot_ball_detector DEPENDS Boost EIGEN3 ) -else() - ament_package() endif() diff --git a/humanoid_robot_demo/package.xml b/humanoid_robot_demo/package.xml index 24efcd0..1accda9 100644 --- a/humanoid_robot_demo/package.xml +++ b/humanoid_robot_demo/package.xml @@ -1,7 +1,7 @@ humanoid_robot_demo - 0.3.0 + 0.3.2 HUMANOID_ROBOT default demo It includes three demontrations(soccer demo, vision demo, action script demo) @@ -9,133 +9,130 @@ Apache 2.0 Ronaldson Bellande + catkin + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection + + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection + + ament_cmake + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector - boost - eigen - yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool - ros_madplay_player - face_detection + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector - boost - eigen - yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool - ros_madplay_player - face_detection - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector - boost - eigen - yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool - ros_madplay_player - face_detection - - - - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector - boost - eigen - yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool - ros_madplay_player - face_detection - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector - boost - eigen - yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool - ros_madplay_player - face_detection - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs - cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector - boost - eigen - yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool - ros_madplay_player - face_detection - + roscpp + roslib + std_msgs + sensor_msgs + geometry_msgs + humanoid_robot_controller_msgs + humanoid_robot_walking_module_msgs + humanoid_robot_action_module_msgs + cmake_modules + humanoid_robot_math + humanoid_robot_ball_detector + boost + eigen + yaml-cpp + humanoid_robot_manager + humanoid_robot_camera_setting_tool + humanoid_robot_web_setting_tool + ros_madplay_player + face_detection diff --git a/humanoid_robot_read_write_demo/package.xml b/humanoid_robot_read_write_demo/package.xml index 5c8ed9e..d2f8af4 100644 --- a/humanoid_robot_read_write_demo/package.xml +++ b/humanoid_robot_read_write_demo/package.xml @@ -1,7 +1,7 @@ humanoid_robot_read_write_demo - 0.3.0 + 0.3.2 The humanoid_robot_read_write_demo package From 3918d775111b6b2c6f2ab61fe78dad48f4780934 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Wed, 11 Oct 2023 11:46:17 -0400 Subject: [PATCH 125/172] Create jekyll-gh-pages.yml --- .github/workflows/jekyll-gh-pages.yml | 51 +++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/jekyll-gh-pages.yml diff --git a/.github/workflows/jekyll-gh-pages.yml b/.github/workflows/jekyll-gh-pages.yml new file mode 100644 index 0000000..559bddf --- /dev/null +++ b/.github/workflows/jekyll-gh-pages.yml @@ -0,0 +1,51 @@ +# Sample workflow for building and deploying a Jekyll site to GitHub Pages +name: Deploy Jekyll with GitHub Pages dependencies preinstalled + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Pages + uses: actions/configure-pages@v3 + - name: Build with Jekyll + uses: actions/jekyll-build-pages@v1 + with: + source: ./ + destination: ./_site + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 From 33893504a9fa0c713e0fc322a8ee2dc8183ec1ab Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Thu, 12 Oct 2023 17:57:00 -0400 Subject: [PATCH 126/172] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 7dcaab3..1d61e63 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # ROS/ROS2 Humanoid Robot Demos +-------------------------------------------------------------------------------------------------------- +# Website +https://robotics-sensors.github.io/humanoid_robot_demos + -------------------------------------------------------------------------------------------------------- Updated Version [humanoid_robot_module](https://github.com/Robotics-Sensors/humanoid_robot_demos) readme. From 2df8d7260b84c41fa02c09915f5fd5e989f5a6cf Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Tue, 24 Oct 2023 08:25:30 -0400 Subject: [PATCH 127/172] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d61e63..b382302 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,10 @@ # ROS/ROS2 Humanoid Robot Demos +[![Website](https://img.shields.io/badge/Visit%20our-Website-0099cc?style=for-the-badge)](https://robotics-sensors.github.io) +[![Discord](https://img.shields.io/badge/Join%20our-Discord-7289DA?logo=discord&style=for-the-badge)](https://discord.gg/Yc72nd4w) +[![Sponsor](https://img.shields.io/badge/Sponsor-Robotics%20Sensors%20Research-red?style=for-the-badge&logo=github)](https://github.com/sponsors/Robotics-Sensors) -------------------------------------------------------------------------------------------------------- -# Website +# Repository Website https://robotics-sensors.github.io/humanoid_robot_demos -------------------------------------------------------------------------------------------------------- From 353d812113e35891f4be7a7b6081c6f7d4f6960c Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Wed, 1 Nov 2023 14:27:16 -0400 Subject: [PATCH 128/172] latest pushes --- .../src/action/action_demo.cpp | 5 ++-- humanoid_robot_demo/src/demo_node.cpp | 20 ++++++++++------ .../src/soccer/ball_follower.cpp | 7 +++--- .../src/soccer/ball_tracker.cpp | 4 ++-- .../src/soccer/soccer_demo.cpp | 14 ++++++----- humanoid_robot_demo/src/test/button_test.cpp | 3 ++- humanoid_robot_demo/src/test/mic_test.cpp | 7 +++--- humanoid_robot_demo/src/test_node.cpp | 23 ++++++++++++------- .../src/vision/face_tracker.cpp | 8 +++---- 9 files changed, 55 insertions(+), 36 deletions(-) diff --git a/humanoid_robot_demo/src/action/action_demo.cpp b/humanoid_robot_demo/src/action/action_demo.cpp index c2bea79..f0f8f18 100644 --- a/humanoid_robot_demo/src/action/action_demo.cpp +++ b/humanoid_robot_demo/src/action/action_demo.cpp @@ -158,8 +158,9 @@ void ActionDemo::callbackThread() { buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, &ActionDemo::buttonHandlerCallback, this); - is_running_client_ = nh.serviceClient( - "/humanoid_robot/action/is_running"); + is_running_client_ = + nh.serviceClient( + "/humanoid_robot/action/is_running"); set_joint_module_client_ = nh.serviceClient( "/humanoid_robot/set_present_ctrl_modules"); diff --git a/humanoid_robot_demo/src/demo_node.cpp b/humanoid_robot_demo/src/demo_node.cpp index 67ff235..65b6ed5 100644 --- a/humanoid_robot_demo/src/demo_node.cpp +++ b/humanoid_robot_demo/src/demo_node.cpp @@ -19,10 +19,10 @@ #include #include +#include "humanoid_robot_controller_msgs/SyncWriteItem.h" #include "humanoid_robot_demo/action_demo.h" #include "humanoid_robot_demo/soccer_demo.h" #include "humanoid_robot_demo/vision_demo.h" -#include "humanoid_robot_controller_msgs/SyncWriteItem.h" #include "humanoid_robot_math/humanoid_robot_linear_algebra.h" enum Demo_Status { @@ -62,23 +62,29 @@ int main(int argc, char **argv) { // create ros wrapper object humanoid_robot_op::OPDemo *current_demo = NULL; - humanoid_robot_op::SoccerDemo *soccer_demo = new humanoid_robot_op::SoccerDemo(); - humanoid_robot_op::ActionDemo *action_demo = new humanoid_robot_op::ActionDemo(); - humanoid_robot_op::VisionDemo *vision_demo = new humanoid_robot_op::VisionDemo(); + humanoid_robot_op::SoccerDemo *soccer_demo = + new humanoid_robot_op::SoccerDemo(); + humanoid_robot_op::ActionDemo *action_demo = + new humanoid_robot_op::ActionDemo(); + humanoid_robot_op::VisionDemo *vision_demo = + new humanoid_robot_op::VisionDemo(); ros::NodeHandle nh(ros::this_node::getName()); - init_pose_pub = nh.advertise("/humanoid_robot/base/ini_pose", 0); + init_pose_pub = + nh.advertise("/humanoid_robot/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); led_pub = nh.advertise( "/humanoid_robot/sync_write_item", 0); - dxl_torque_pub = nh.advertise("/humanoid_robot/dxl_torque", 0); + dxl_torque_pub = + nh.advertise("/humanoid_robot/dxl_torque", 0); ros::Subscriber buttuon_sub = nh.subscribe("/humanoid_robot/open_cr/button", 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = nh.subscribe("/humanoid_robot/mode_command", 1, demoModeCommandCallback); - default_mp3_path = ros::package::getPath("humanoid_robot_demo") + "/data/mp3/"; + default_mp3_path = + ros::package::getPath("humanoid_robot_demo") + "/data/mp3/"; ros::start(); diff --git a/humanoid_robot_demo/src/soccer/ball_follower.cpp b/humanoid_robot_demo/src/soccer/ball_follower.cpp index c0d8b79..cfd00ed 100644 --- a/humanoid_robot_demo/src/soccer/ball_follower.cpp +++ b/humanoid_robot_demo/src/soccer/ball_follower.cpp @@ -39,8 +39,9 @@ BallFollower::BallFollower() set_walking_command_pub_ = nh_.advertise("/humanoid_robot/walking/command", 0); - set_walking_param_pub_ = nh_.advertise( - "/humanoid_robot/walking/set_params", 0); + set_walking_param_pub_ = + nh_.advertise( + "/humanoid_robot/walking/set_params", 0); get_walking_param_client_ = nh_.serviceClient( "/humanoid_robot/walking/get_params"); @@ -196,7 +197,7 @@ bool BallFollower::processFollowing(double x_angle, double y_angle, << (y_angle * 180 / M_PI)); ROS_INFO_STREAM_COND(DEBUG_PRINT, "foot to kick : " << ball_x_angle); - ROS_INFO("In range [%d | %d]", count_to_kick_, ball_x_angle); + ROS_INFO("In range [%d | %f]", count_to_kick_, ball_x_angle); // ball queue // if(ball_position_queue_.size() >= 5) diff --git a/humanoid_robot_demo/src/soccer/ball_tracker.cpp b/humanoid_robot_demo/src/soccer/ball_tracker.cpp index 283f874..9f7c6fa 100644 --- a/humanoid_robot_demo/src/soccer/ball_tracker.cpp +++ b/humanoid_robot_demo/src/soccer/ball_tracker.cpp @@ -39,8 +39,8 @@ BallTracker::BallTracker() "/humanoid_robot/head_control/set_joint_states_offset", 0); head_joint_pub_ = nh_.advertise( "/humanoid_robot/head_control/set_joint_states", 0); - head_scan_pub_ = - nh_.advertise("/humanoid_robot/head_control/scan_command", 0); + head_scan_pub_ = nh_.advertise( + "/humanoid_robot/head_control/scan_command", 0); // error_pub_ = // nh_.advertise("/ball_tracker/errors", 0); diff --git a/humanoid_robot_demo/src/soccer/soccer_demo.cpp b/humanoid_robot_demo/src/soccer/soccer_demo.cpp index 598432b..1c2c559 100644 --- a/humanoid_robot_demo/src/soccer/soccer_demo.cpp +++ b/humanoid_robot_demo/src/soccer/soccer_demo.cpp @@ -32,8 +32,8 @@ SoccerDemo::SoccerDemo() ros::NodeHandle nh(ros::this_node::getName()); - std::string default_path = - ros::package::getPath("humanoid_robot_gui_demo") + "/config/gui_config.yaml"; + std::string default_path = ros::package::getPath("humanoid_robot_gui_demo") + + "/config/gui_config.yaml"; std::string path = nh.param("demo_config", default_path); parseJointNameFromYaml(path); @@ -166,8 +166,9 @@ void SoccerDemo::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - module_control_pub_ = nh.advertise( - "/humanoid_robot/set_joint_ctrl_modules", 0); + module_control_pub_ = + nh.advertise( + "/humanoid_robot/set_joint_ctrl_modules", 0); motion_index_pub_ = nh.advertise("/humanoid_robot/action/page_num", 0); rgb_led_pub_ = nh.advertise( @@ -180,8 +181,9 @@ void SoccerDemo::callbackThread() { imu_data_sub_ = nh.subscribe("/humanoid_robot/open_cr/imu", 1, &SoccerDemo::imuDataCallback, this); - is_running_client_ = nh.serviceClient( - "/humanoid_robot/action/is_running"); + is_running_client_ = + nh.serviceClient( + "/humanoid_robot/action/is_running"); set_joint_module_client_ = nh.serviceClient( "/humanoid_robot/set_present_joint_ctrl_modules"); diff --git a/humanoid_robot_demo/src/test/button_test.cpp b/humanoid_robot_demo/src/test/button_test.cpp index f21b781..7429d44 100644 --- a/humanoid_robot_demo/src/test/button_test.cpp +++ b/humanoid_robot_demo/src/test/button_test.cpp @@ -30,7 +30,8 @@ ButtonTest::ButtonTest() : SPIN_RATE(30), led_count_(0), rgb_led_count_(0) { boost::thread process_thread = boost::thread(boost::bind(&ButtonTest::processThread, this)); - default_mp3_path_ = ros::package::getPath("humanoid_robot_demo") + "/data/mp3/test/"; + default_mp3_path_ = + ros::package::getPath("humanoid_robot_demo") + "/data/mp3/test/"; } ButtonTest::~ButtonTest() {} diff --git a/humanoid_robot_demo/src/test/mic_test.cpp b/humanoid_robot_demo/src/test/mic_test.cpp index 5a214ee..a82bbaf 100644 --- a/humanoid_robot_demo/src/test/mic_test.cpp +++ b/humanoid_robot_demo/src/test/mic_test.cpp @@ -32,9 +32,10 @@ MicTest::MicTest() boost::thread process_thread = boost::thread(boost::bind(&MicTest::processThread, this)); - recording_file_name_ = - ros::package::getPath("humanoid_robot_demo") + "/data/mp3/test/mic-test.wav"; - default_mp3_path_ = ros::package::getPath("humanoid_robot_demo") + "/data/mp3/test/"; + recording_file_name_ = ros::package::getPath("humanoid_robot_demo") + + "/data/mp3/test/mic-test.wav"; + default_mp3_path_ = + ros::package::getPath("humanoid_robot_demo") + "/data/mp3/test/"; start_time_ = ros::Time::now(); } diff --git a/humanoid_robot_demo/src/test_node.cpp b/humanoid_robot_demo/src/test_node.cpp index 5f6045a..c55ad06 100644 --- a/humanoid_robot_demo/src/test_node.cpp +++ b/humanoid_robot_demo/src/test_node.cpp @@ -20,12 +20,12 @@ #include #include +#include "humanoid_robot_controller_msgs/SyncWriteItem.h" #include "humanoid_robot_demo/action_demo.h" #include "humanoid_robot_demo/button_test.h" #include "humanoid_robot_demo/mic_test.h" #include "humanoid_robot_demo/soccer_demo.h" #include "humanoid_robot_demo/vision_demo.h" -#include "humanoid_robot_controller_msgs/SyncWriteItem.h" #include "humanoid_robot_math/humanoid_robot_linear_algebra.h" enum Demo_Status { @@ -67,25 +67,32 @@ int main(int argc, char **argv) { // create ros wrapper object humanoid_robot_op::OPDemo *current_demo = NULL; - humanoid_robot_op::SoccerDemo *soccer_demo = new humanoid_robot_op::SoccerDemo(); - humanoid_robot_op::ActionDemo *action_demo = new humanoid_robot_op::ActionDemo(); - humanoid_robot_op::VisionDemo *vision_demo = new humanoid_robot_op::VisionDemo(); - humanoid_robot_op::ButtonTest *button_test = new humanoid_robot_op::ButtonTest(); + humanoid_robot_op::SoccerDemo *soccer_demo = + new humanoid_robot_op::SoccerDemo(); + humanoid_robot_op::ActionDemo *action_demo = + new humanoid_robot_op::ActionDemo(); + humanoid_robot_op::VisionDemo *vision_demo = + new humanoid_robot_op::VisionDemo(); + humanoid_robot_op::ButtonTest *button_test = + new humanoid_robot_op::ButtonTest(); humanoid_robot_op::MicTest *mic_test = new humanoid_robot_op::MicTest(); ros::NodeHandle nh(ros::this_node::getName()); - init_pose_pub = nh.advertise("/humanoid_robot/base/ini_pose", 0); + init_pose_pub = + nh.advertise("/humanoid_robot/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); led_pub = nh.advertise( "/humanoid_robot/sync_write_item", 0); - dxl_torque_pub = nh.advertise("/humanoid_robot/dxl_torque", 0); + dxl_torque_pub = + nh.advertise("/humanoid_robot/dxl_torque", 0); ros::Subscriber buttuon_sub = nh.subscribe("/humanoid_robot/open_cr/button", 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = nh.subscribe("/humanoid_robot/mode_command", 1, demoModeCommandCallback); - default_mp3_path = ros::package::getPath("humanoid_robot_demo") + "/data/mp3/"; + default_mp3_path = + ros::package::getPath("humanoid_robot_demo") + "/data/mp3/"; ros::start(); diff --git a/humanoid_robot_demo/src/vision/face_tracker.cpp b/humanoid_robot_demo/src/vision/face_tracker.cpp index 50b9ee9..6bd0705 100644 --- a/humanoid_robot_demo/src/vision/face_tracker.cpp +++ b/humanoid_robot_demo/src/vision/face_tracker.cpp @@ -28,13 +28,13 @@ FaceTracker::FaceTracker() "/humanoid_robot/head_control/set_joint_states_offset", 0); head_joint_pub_ = nh_.advertise( "/humanoid_robot/head_control/set_joint_states", 0); - head_scan_pub_ = - nh_.advertise("/humanoid_robot/head_control/scan_command", 0); + head_scan_pub_ = nh_.advertise( + "/humanoid_robot/head_control/scan_command", 0); face_position_sub_ = nh_.subscribe("/face_position", 1, &FaceTracker::facePositionCallback, this); - // face_tracking_command_sub_ = nh_.subscribe("/humanoid_robot/demo_command", 1, - // &FaceTracker::faceTrackerCommandCallback, this); + // face_tracking_command_sub_ = nh_.subscribe("/humanoid_robot/demo_command", + // 1, &FaceTracker::faceTrackerCommandCallback, this); } FaceTracker::~FaceTracker() {} From e315e4904113b23fbad62069b58e0339942ec4a9 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Thu, 2 Nov 2023 08:22:51 -0400 Subject: [PATCH 129/172] Create dependabot.yml --- .github/dependabot.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..ac6621f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" From 8ba06cc1990afb95c9936f4277f0412ae4c65144 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Thu, 2 Nov 2023 08:22:59 -0400 Subject: [PATCH 130/172] Create codeql.yml --- .github/workflows/codeql.yml | 82 ++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..7fceeec --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,82 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ "main" ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "main" ] + schedule: + - cron: '17 17 * * 4' + +jobs: + analyze: + name: Analyze + # Runner size impacts CodeQL analysis time. To learn more, please see: + # - https://gh.io/recommended-hardware-resources-for-running-codeql + # - https://gh.io/supported-runners-and-hardware-resources + # - https://gh.io/using-larger-runners + # Consider using larger runners for possible analysis time improvements. + runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} + timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'c-cpp', 'python' ] + # CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ] + # Use only 'java-kotlin' to analyze code written in Java, Kotlin or both + # Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{matrix.language}}" From 06cda8980254316b2ec905d2e4d5a7bd960f1cef Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Fri, 3 Nov 2023 13:54:46 -0400 Subject: [PATCH 131/172] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b382302..3df430f 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,11 @@ https://robotics-sensors.github.io/humanoid_robot_demos -------------------------------------------------------------------------------------------------------- Updated Version [humanoid_robot_module](https://github.com/Robotics-Sensors/humanoid_robot_demos) readme. - Old Version/Previous Used for Different Context [ROBOTIS-OP3-Demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) readme. +# Contact +If you are interested in accessing the complete version of this repository, we kindly request that you reach out to the organization's director or the company behind this project. We invite you to explore the USE CASE to understand the specific terms and conditions for usage. To utilize this repository, it is imperative that you adhere to the guidelines outlined in the USE CASE. For those interested in showing their support, becoming a sponsor of the organization is an option, and detailed information can be found within the USE CASE and License documents. Furthermore, we encourage you to join our official Discord community, where you can engage with like-minded individuals, contribute to the project, and stay up-to-date with the latest developments. It's worth noting that while a fraction of research is publicly accessible, the majority remains private. To gain insights into the wealth of knowledge held by the Company or the organization's director, we recommend direct contact for more information. + -------------------------------------------------------------------------------------------------------- ## Important The repository has diverged, as the old commits and codes are under the previous License and From 050894f2b7d4550e34ac2c4d16c43b8396d3781c Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Sat, 4 Nov 2023 10:41:26 -0400 Subject: [PATCH 132/172] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3df430f..b41ae45 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Updated Version [humanoid_robot_module](https://github.com/Robotics-Sensors/huma Old Version/Previous Used for Different Context [ROBOTIS-OP3-Demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) readme. # Contact -If you are interested in accessing the complete version of this repository, we kindly request that you reach out to the organization's director or the company behind this project. We invite you to explore the USE CASE to understand the specific terms and conditions for usage. To utilize this repository, it is imperative that you adhere to the guidelines outlined in the USE CASE. For those interested in showing their support, becoming a sponsor of the organization is an option, and detailed information can be found within the USE CASE and License documents. Furthermore, we encourage you to join our official Discord community, where you can engage with like-minded individuals, contribute to the project, and stay up-to-date with the latest developments. It's worth noting that while a fraction of research is publicly accessible, the majority remains private. To gain insights into the wealth of knowledge held by the Company or the organization's director, we recommend direct contact for more information. +Depeding on the repository, If you are interested in accessing the complete version or other repository related to this repository, we kindly request that you reach out to the organization's director or the company behind this project. We invite you to explore the USE CASE to understand the specific terms and conditions for usage. To utilize this repository, it is imperative that you adhere to the guidelines outlined in the USE CASE. For those interested in showing their support, becoming a sponsor of the organization is an option, and detailed information can be found within the USE CASE and License documents. Furthermore, we encourage you to join our official Discord community, where you can engage with like-minded individuals, contribute to the project, and stay up-to-date with the latest developments. It's worth noting that while a fraction of research is publicly accessible, the majority remains private. To gain insights into the wealth of knowledge held by the Company or the organization's director, we recommend direct contact for more information. -------------------------------------------------------------------------------------------------------- ## Important From de6ff5eed79af27ffa78b8a1b7dd3c4e293a061b Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Sun, 5 Nov 2023 01:14:42 -0500 Subject: [PATCH 133/172] Update README.md --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index b41ae45..c99b32e 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,20 @@ [![Website](https://img.shields.io/badge/Visit%20our-Website-0099cc?style=for-the-badge)](https://robotics-sensors.github.io) [![Discord](https://img.shields.io/badge/Join%20our-Discord-7289DA?logo=discord&style=for-the-badge)](https://discord.gg/Yc72nd4w) [![Sponsor](https://img.shields.io/badge/Sponsor-Robotics%20Sensors%20Research-red?style=for-the-badge&logo=github)](https://github.com/sponsors/Robotics-Sensors) + +# Stats +[![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_demos/stargazers) +[![GitHub forks](https://img.shields.io/github/forks/Robotics-Sensors/humanoid_robot_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_demos/network) +[![GitHub watchers](https://img.shields.io/github/watchers/Robotics-Sensors/humanoid_robot_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_demos/watchers) + +[![GitHub issues](https://img.shields.io/github/issues/Robotics-Sensors/humanoid_robot_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_demos/issues) +[![GitHub pull requests](https://img.shields.io/github/issues-pr/Robotics-Sensors/humanoid_robot_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_demos/pulls) +[![GitHub license](https://img.shields.io/github/license/Robotics-Sensors/humanoid_robot_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_demos/blob/main/LICENSE) + +[![GitHub last commit](https://img.shields.io/github/last-commit/Robotics-Sensors/humanoid_robot_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_demos/commits) +[![Visitor & Github Clones](https://img.shields.io/badge/dynamic/json?color=2e8b57&label=Visitor%20%26%20GitHub%20Clones&query=$.count&url=https://api.github.com/repos/Robotics-Sensors/humanoid_robot_demos/traffic)](https://github.com/Robotics-Sensors/humanoid_robot_demos) + + -------------------------------------------------------------------------------------------------------- # Repository Website https://robotics-sensors.github.io/humanoid_robot_demos From 6aa824045711ac44777011e72f5f2942bcd350fc Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Sun, 5 Nov 2023 01:15:17 -0500 Subject: [PATCH 134/172] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index c99b32e..619e927 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,9 @@ https://robotics-sensors.github.io/humanoid_robot_demos Updated Version [humanoid_robot_module](https://github.com/Robotics-Sensors/humanoid_robot_demos) readme. Old Version/Previous Used for Different Context [ROBOTIS-OP3-Demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) readme. +# Release +[![Latest Release](https://img.shields.io/github/v/release/Robotics-Sensors/humanoid_robot_tools?style=for-the-badge&color=yellow)](https://github.com/Robotics-Sensors/humanoid_robot_demos/releases/) + # Contact Depeding on the repository, If you are interested in accessing the complete version or other repository related to this repository, we kindly request that you reach out to the organization's director or the company behind this project. We invite you to explore the USE CASE to understand the specific terms and conditions for usage. To utilize this repository, it is imperative that you adhere to the guidelines outlined in the USE CASE. For those interested in showing their support, becoming a sponsor of the organization is an option, and detailed information can be found within the USE CASE and License documents. Furthermore, we encourage you to join our official Discord community, where you can engage with like-minded individuals, contribute to the project, and stay up-to-date with the latest developments. It's worth noting that while a fraction of research is publicly accessible, the majority remains private. To gain insights into the wealth of knowledge held by the Company or the organization's director, we recommend direct contact for more information. From bf1e92c8a865a6d86dd974ac30b04d6fc52263df Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Sat, 11 Nov 2023 10:37:05 -0500 Subject: [PATCH 135/172] latest pushes --- .../package.xml | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml b/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml index 9738368..809f1f3 100644 --- a/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml +++ b/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml @@ -8,21 +8,35 @@ Apache 2.0 Ronaldson Bellande - catkin + catkin - humanoid_robot_ball_detector - humanoid_robot_bringup - humanoid_robot_demo + humanoid_robot_ball_detector + humanoid_robot_bringup + humanoid_robot_demo - humanoid_robot_ball_detector - humanoid_robot_bringup - humanoid_robot_demo + humanoid_robot_ball_detector + humanoid_robot_bringup + humanoid_robot_demo - humanoid_robot_ball_detector - humanoid_robot_bringup - humanoid_robot_demo + humanoid_robot_ball_detector + humanoid_robot_bringup + humanoid_robot_demo - - - + + ament_cmake + + humanoid_robot_ball_detector + humanoid_robot_bringup + humanoid_robot_demo + + humanoid_robot_ball_detector + humanoid_robot_bringup + humanoid_robot_demo + + humanoid_robot_ball_detector + humanoid_robot_bringup + humanoid_robot_demo + + + From 3eb7dfec8efe0ddea09326d089c1087351b2ea66 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Mon, 13 Nov 2023 17:56:15 -0500 Subject: [PATCH 136/172] latest pushes --- .travis.yml | 2 +- README.md | 24 ++--- .../package.xml | 42 -------- humanoid_robot_demo/launch/demo.launch | 28 ----- humanoid_robot_demo/launch/self_test.launch | 28 ----- humanoid_robot_demo/list/action_script.yaml | 23 ---- .../list/action_script_bk.yaml | 18 ---- .../CHANGELOG.rst | 4 +- .../CMakeLists.txt | 2 +- .../cfg/DetectorParams.cfg | 2 +- .../cfg/DetectorParamsBlue.cfg | 2 +- .../cfg/DetectorParamsRed.cfg | 2 +- .../config/ball_detector_params.yaml | 0 .../config/ball_detector_params_default.yaml | 0 .../config/ball_detector_params_op.yaml | 0 .../ball_detector.h | 30 +++--- .../ball_detector_config.h | 4 +- .../launch/ball_detector.launch | 4 +- .../launch/ball_detector_from_usb_cam.launch | 2 +- .../launch/ball_detector_from_uvc.launch | 2 +- .../msg/BallDetectorParams.msg | 0 .../msg/CircleSetStamped.msg | 0 .../package.xml | 2 +- .../rviz/ball_detector.rviz | 0 .../src/ball_detector.cpp | 31 ++++-- .../src/ball_detector_node.cpp | 4 +- .../srv/GetParameters.srv | 0 .../srv/SetParameters.srv | 0 .../CHANGELOG.rst | 4 +- .../CMakeLists.txt | 2 +- .../launch/humanoid_robot_bringup.launch | 2 +- ...umanoid_robot_bringup_visualization.launch | 8 +- .../package.xml | 26 ++--- .../rviz/humanoid_robot_bringup.rviz | 2 +- .../CHANGELOG.rst | 4 +- .../CMakeLists.txt | 22 ++-- .../data/mp3/Autonomous soccer mode.mp3 | Bin .../data/mp3/Bye bye.mp3 | Bin .../data/mp3/Clap please.mp3 | Bin .../data/mp3/Demonstration ready mode.mp3 | Bin .../data/mp3/Headstand.mp3 | Bin .../data/mp3/Interactive motion mode.mp3 | Bin .../data/mp3/Intro01.mp3 | Bin .../data/mp3/Intro02.mp3 | Bin .../data/mp3/Intro03.mp3 | Bin .../data/mp3/Introduction.mp3 | Bin .../data/mp3/Left kick.mp3 | Bin .../data/mp3/No.mp3 | Bin .../data/mp3/Oops.mp3 | Bin .../data/mp3/Right kick.mp3 | Bin .../data/mp3/Sensor calibration complete.mp3 | Bin .../data/mp3/Sensor calibration fail.mp3 | Bin .../data/mp3/Shoot.mp3 | Bin .../data/mp3/Sit down.mp3 | Bin .../data/mp3/Stand up.mp3 | Bin .../data/mp3/Start motion demonstration.mp3 | Bin .../data/mp3/Start soccer demonstration.mp3 | Bin .../Start vision processing demonstration.mp3 | Bin .../data/mp3/System shutdown.mp3 | Bin .../data/mp3/Thank you.mp3 | Bin .../data/mp3/Vision processing mode.mp3 | Bin .../data/mp3/Wow.mp3 | Bin .../data/mp3/Yes go.mp3 | Bin .../data/mp3/Yes.mp3 | Bin .../data/mp3/intro_test.mp3 | Bin .../data/mp3/test/Announce mic test.mp3 | Bin .../data/mp3/test/Button test mode.mp3 | Bin .../data/mp3/test/Mic test mode.mp3 | Bin .../mp3/test/Mode button long pressed.mp3 | Bin .../data/mp3/test/Mode button pressed.mp3 | Bin .../data/mp3/test/Self test ready mode.mp3 | Bin .../mp3/test/Start button long pressed.mp3 | Bin .../data/mp3/test/Start button pressed.mp3 | Bin .../data/mp3/test/Start button test mode.mp3 | Bin .../data/mp3/test/Start mic test mode.mp3 | Bin .../data/mp3/test/Start playing.mp3 | Bin .../data/mp3/test/Start recording.mp3 | Bin .../mp3/test/User button long pressed.mp3 | Bin .../data/mp3/test/User button pressed.mp3 | Bin .../CHANGELOG.rst | 6 +- .../CMakeLists.txt | 2 +- .../package.xml | 42 ++++++++ .../action_demo.h | 12 +-- .../ball_follower.h | 14 +-- .../ball_tracker.h | 14 +-- .../button_test.h | 8 +- .../face_tracker.h | 4 +- .../mic_test.h | 8 +- .../op_demo.h | 4 +- .../soccer_demo.h | 22 ++-- .../vision_demo.h | 12 +-- .../launch/demo.launch | 28 +++++ .../face_detection_humanoid_robot.launch | 0 .../launch/self_test.launch | 28 +++++ .../list/action_script.yaml | 23 ++++ .../list/action_script_bk.yaml | 18 ++++ .../package.xml | 98 +++++++++--------- .../src/action/action_demo.cpp | 28 ++--- .../src/demo_node.cpp | 48 ++++----- .../src/soccer/ball_follower.cpp | 20 ++-- .../src/soccer/ball_tracker.cpp | 14 +-- .../src/soccer/soccer_demo.cpp | 54 +++++----- .../src/test/button_test.cpp | 18 ++-- .../src/test/mic_test.cpp | 12 +-- .../src/test_node.cpp | 58 +++++------ .../src/vision/face_tracker.cpp | 14 +-- .../src/vision/vision_demo.cpp | 24 ++--- .../CHANGELOG.rst | 2 +- .../CMakeLists.txt | 6 +- .../launch/humanoid_robot_read_write.launch | 24 +++++ .../package.xml | 28 ++--- .../src/read_write.cpp | 40 +++---- .../launch/humanoid_robot_read_write.launch | 24 ----- 113 files changed, 546 insertions(+), 537 deletions(-) delete mode 100644 humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml delete mode 100644 humanoid_robot_demo/launch/demo.launch delete mode 100644 humanoid_robot_demo/launch/self_test.launch delete mode 100644 humanoid_robot_demo/list/action_script.yaml delete mode 100644 humanoid_robot_demo/list/action_script_bk.yaml rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/CHANGELOG.rst (88%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/CMakeLists.txt (97%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/cfg/DetectorParams.cfg (97%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/cfg/DetectorParamsBlue.cfg (97%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/cfg/DetectorParamsRed.cfg (97%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/config/ball_detector_params.yaml (100%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/config/ball_detector_params_default.yaml (100%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/config/ball_detector_params_op.yaml (100%) rename {humanoid_robot_ball_detector/include/humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector}/ball_detector.h (75%) rename {humanoid_robot_ball_detector/include/humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector}/ball_detector_config.h (96%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/launch/ball_detector.launch (56%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/launch/ball_detector_from_usb_cam.launch (92%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/launch/ball_detector_from_uvc.launch (90%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/msg/BallDetectorParams.msg (100%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/msg/CircleSetStamped.msg (100%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/package.xml (99%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/rviz/ball_detector.rviz (100%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/src/ball_detector.cpp (96%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/src/ball_detector_node.cpp (89%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/srv/GetParameters.srv (100%) rename {humanoid_robot_ball_detector => humanoid_robot_intelligence_control_system_ball_detector}/srv/SetParameters.srv (100%) rename {humanoid_robot_bringup => humanoid_robot_intelligence_control_system_bringup}/CHANGELOG.rst (84%) rename {humanoid_robot_bringup => humanoid_robot_intelligence_control_system_bringup}/CMakeLists.txt (83%) rename {humanoid_robot_bringup => humanoid_robot_intelligence_control_system_bringup}/launch/humanoid_robot_bringup.launch (79%) rename {humanoid_robot_bringup => humanoid_robot_intelligence_control_system_bringup}/launch/humanoid_robot_bringup_visualization.launch (54%) rename {humanoid_robot_bringup => humanoid_robot_intelligence_control_system_bringup}/package.xml (68%) rename {humanoid_robot_bringup => humanoid_robot_intelligence_control_system_bringup}/rviz/humanoid_robot_bringup.rviz (99%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/CHANGELOG.rst (89%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/CMakeLists.txt (78%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Autonomous soccer mode.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Bye bye.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Clap please.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Demonstration ready mode.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Headstand.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Interactive motion mode.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Intro01.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Intro02.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Intro03.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Introduction.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Left kick.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/No.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Oops.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Right kick.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Sensor calibration complete.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Sensor calibration fail.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Shoot.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Sit down.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Stand up.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Start motion demonstration.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Start soccer demonstration.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Start vision processing demonstration.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/System shutdown.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Thank you.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Vision processing mode.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Wow.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Yes go.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/Yes.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/intro_test.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Announce mic test.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Button test mode.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Mic test mode.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Mode button long pressed.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Mode button pressed.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Self test ready mode.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Start button long pressed.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Start button pressed.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Start button test mode.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Start mic test mode.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Start playing.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/Start recording.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/User button long pressed.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/data/mp3/test/User button pressed.mp3 (100%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst (80%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/humanoid_robot_humanoid_robot_demo/CMakeLists.txt (60%) create mode 100644 humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/package.xml rename {humanoid_robot_demo/include/humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo}/action_demo.h (86%) rename {humanoid_robot_demo/include/humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo}/ball_follower.h (86%) rename {humanoid_robot_demo/include/humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo}/ball_tracker.h (82%) rename {humanoid_robot_demo/include/humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo}/button_test.h (84%) rename {humanoid_robot_demo/include/humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo}/face_tracker.h (95%) rename {humanoid_robot_demo/include/humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo}/mic_test.h (87%) rename {humanoid_robot_demo/include/humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo}/op_demo.h (90%) rename {humanoid_robot_demo/include/humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo}/soccer_demo.h (78%) rename {humanoid_robot_demo/include/humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo}/vision_demo.h (82%) create mode 100644 humanoid_robot_intelligence_control_system_demo/launch/demo.launch rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/launch/face_detection_humanoid_robot.launch (100%) create mode 100644 humanoid_robot_intelligence_control_system_demo/launch/self_test.launch create mode 100644 humanoid_robot_intelligence_control_system_demo/list/action_script.yaml create mode 100644 humanoid_robot_intelligence_control_system_demo/list/action_script_bk.yaml rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/package.xml (56%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/src/action/action_demo.cpp (85%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/src/demo_node.cpp (79%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/src/soccer/ball_follower.cpp (92%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/src/soccer/ball_tracker.cpp (93%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/src/soccer/soccer_demo.cpp (86%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/src/test/button_test.cpp (83%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/src/test/mic_test.cpp (91%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/src/test_node.cpp (79%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/src/vision/face_tracker.cpp (90%) rename {humanoid_robot_demo => humanoid_robot_intelligence_control_system_demo}/src/vision/vision_demo.cpp (83%) rename {humanoid_robot_read_write_demo => humanoid_robot_intelligence_control_system_read_write_demo}/CHANGELOG.rst (90%) rename {humanoid_robot_read_write_demo => humanoid_robot_intelligence_control_system_read_write_demo}/CMakeLists.txt (80%) create mode 100644 humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_read_write.launch rename {humanoid_robot_read_write_demo => humanoid_robot_intelligence_control_system_read_write_demo}/package.xml (59%) rename {humanoid_robot_read_write_demo => humanoid_robot_intelligence_control_system_read_write_demo}/src/read_write.cpp (80%) delete mode 100644 humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch diff --git a/.travis.yml b/.travis.yml index 2d3459c..01412d7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ notifications: - ronaldsonbellande@gmail.com env: matrix: - - ROS_DISTRO=noetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file OS_NAME=ubuntu OS_CODE_NAME=focal $ROSINSTALL_FILENAME=".humanoid_robot_demo.rosinstall" + - ROS_DISTRO=noetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file OS_NAME=ubuntu OS_CODE_NAME=focal $ROSINSTALL_FILENAME=".humanoid_robot_intelligence_control_system_demo.rosinstall" branches: only: - master diff --git a/README.md b/README.md index 619e927..9066ff0 100644 --- a/README.md +++ b/README.md @@ -5,28 +5,28 @@ [![Sponsor](https://img.shields.io/badge/Sponsor-Robotics%20Sensors%20Research-red?style=for-the-badge&logo=github)](https://github.com/sponsors/Robotics-Sensors) # Stats -[![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_demos/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/Robotics-Sensors/humanoid_robot_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_demos/network) -[![GitHub watchers](https://img.shields.io/github/watchers/Robotics-Sensors/humanoid_robot_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_demos/watchers) +[![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/stargazers) +[![GitHub forks](https://img.shields.io/github/forks/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/network) +[![GitHub watchers](https://img.shields.io/github/watchers/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/watchers) -[![GitHub issues](https://img.shields.io/github/issues/Robotics-Sensors/humanoid_robot_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_demos/issues) -[![GitHub pull requests](https://img.shields.io/github/issues-pr/Robotics-Sensors/humanoid_robot_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_demos/pulls) -[![GitHub license](https://img.shields.io/github/license/Robotics-Sensors/humanoid_robot_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_demos/blob/main/LICENSE) +[![GitHub issues](https://img.shields.io/github/issues/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/issues) +[![GitHub pull requests](https://img.shields.io/github/issues-pr/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/pulls) +[![GitHub license](https://img.shields.io/github/license/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/blob/main/LICENSE) -[![GitHub last commit](https://img.shields.io/github/last-commit/Robotics-Sensors/humanoid_robot_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_demos/commits) -[![Visitor & Github Clones](https://img.shields.io/badge/dynamic/json?color=2e8b57&label=Visitor%20%26%20GitHub%20Clones&query=$.count&url=https://api.github.com/repos/Robotics-Sensors/humanoid_robot_demos/traffic)](https://github.com/Robotics-Sensors/humanoid_robot_demos) +[![GitHub last commit](https://img.shields.io/github/last-commit/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/commits) +[![Visitor & Github Clones](https://img.shields.io/badge/dynamic/json?color=2e8b57&label=Visitor%20%26%20GitHub%20Clones&query=$.count&url=https://api.github.com/repos/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/traffic)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos) -------------------------------------------------------------------------------------------------------- # Repository Website -https://robotics-sensors.github.io/humanoid_robot_demos +https://robotics-sensors.github.io/humanoid_robot_intelligence_control_system_demos -------------------------------------------------------------------------------------------------------- -Updated Version [humanoid_robot_module](https://github.com/Robotics-Sensors/humanoid_robot_demos) readme. +Updated Version [humanoid_robot_intelligence_control_system_module](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos) readme. Old Version/Previous Used for Different Context [ROBOTIS-OP3-Demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) readme. # Release -[![Latest Release](https://img.shields.io/github/v/release/Robotics-Sensors/humanoid_robot_tools?style=for-the-badge&color=yellow)](https://github.com/Robotics-Sensors/humanoid_robot_demos/releases/) +[![Latest Release](https://img.shields.io/github/v/release/Robotics-Sensors/humanoid_robot_intelligence_control_system_tools?style=for-the-badge&color=yellow)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/releases/) # Contact Depeding on the repository, If you are interested in accessing the complete version or other repository related to this repository, we kindly request that you reach out to the organization's director or the company behind this project. We invite you to explore the USE CASE to understand the specific terms and conditions for usage. To utilize this repository, it is imperative that you adhere to the guidelines outlined in the USE CASE. For those interested in showing their support, becoming a sponsor of the organization is an option, and detailed information can be found within the USE CASE and License documents. Furthermore, we encourage you to join our official Discord community, where you can engage with like-minded individuals, contribute to the project, and stay up-to-date with the latest developments. It's worth noting that while a fraction of research is publicly accessible, the majority remains private. To gain insights into the wealth of knowledge held by the Company or the organization's director, we recommend direct contact for more information. @@ -49,4 +49,4 @@ Latest versions and Maintainer is on organization https://github.com/Robotics-Se * Ronaldson Bellande ## License -This SDK is distributed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0), see [LICENSE](https://github.com/Robotics-Sensors/humanoid_robot_demos/blob/main/LICENSE) and [NOTICE](https://github.com/Robotics-Sensors/humanoid_robot_demos/blob/main/LICENSE) for more information. +This SDK is distributed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0), see [LICENSE](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/blob/main/LICENSE) and [NOTICE](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/blob/main/LICENSE) for more information. diff --git a/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml b/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml deleted file mode 100644 index 809f1f3..0000000 --- a/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/package.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - humanoid_robot_demo - 0.3.0 - - ROS packages for the humanoid_robot_demo (meta package) - - Apache 2.0 - Ronaldson Bellande - - catkin - - humanoid_robot_ball_detector - humanoid_robot_bringup - humanoid_robot_demo - - humanoid_robot_ball_detector - humanoid_robot_bringup - humanoid_robot_demo - - humanoid_robot_ball_detector - humanoid_robot_bringup - humanoid_robot_demo - - - ament_cmake - - humanoid_robot_ball_detector - humanoid_robot_bringup - humanoid_robot_demo - - humanoid_robot_ball_detector - humanoid_robot_bringup - humanoid_robot_demo - - humanoid_robot_ball_detector - humanoid_robot_bringup - humanoid_robot_demo - - - - diff --git a/humanoid_robot_demo/launch/demo.launch b/humanoid_robot_demo/launch/demo.launch deleted file mode 100644 index c4cb90a..0000000 --- a/humanoid_robot_demo/launch/demo.launch +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/humanoid_robot_demo/launch/self_test.launch b/humanoid_robot_demo/launch/self_test.launch deleted file mode 100644 index b160e4a..0000000 --- a/humanoid_robot_demo/launch/self_test.launch +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/humanoid_robot_demo/list/action_script.yaml b/humanoid_robot_demo/list/action_script.yaml deleted file mode 100644 index ab277f2..0000000 --- a/humanoid_robot_demo/list/action_script.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# combination action page number and mp3 file path -action_and_sound: - 4 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Thank you.mp3" - 41: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Introduction.mp3" - 24: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Wow.mp3" - 23: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Yes go.mp3" - 15: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Sit down.mp3" - 1: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Stand up.mp3" - 54: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Clap please.mp3" - 27: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" - 38: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Bye bye.mp3" -# 101 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" - 110 : "" - 111 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro01.mp3" - 115 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro02.mp3" - 118 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Intro03.mp3" - -# play list -prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] -default: [4, 110, 111, 115, 118, 24, 54, 27, 38] - -# example of play list -#certification: [101] diff --git a/humanoid_robot_demo/list/action_script_bk.yaml b/humanoid_robot_demo/list/action_script_bk.yaml deleted file mode 100644 index c381065..0000000 --- a/humanoid_robot_demo/list/action_script_bk.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# combination action page number and mp3 file path -action_and_sound: - 4 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Thank you.mp3" - 41: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Introduction.mp3" - 24: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Wow.mp3" - 23: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Yes go.mp3" - 15: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Sit down.mp3" - 1: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Stand up.mp3" - 54: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Clap please.mp3" - 27: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" - 38: "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Bye bye.mp3" - 101 : "/home/humanoid_robot/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_demo/data/mp3/Oops.mp3" - -# play list -default: [4, 41, 24, 23, 15, 1, 54, 27, 38] - -# example of play list -certificatino: [101] diff --git a/humanoid_robot_ball_detector/CHANGELOG.rst b/humanoid_robot_intelligence_control_system_ball_detector/CHANGELOG.rst similarity index 88% rename from humanoid_robot_ball_detector/CHANGELOG.rst rename to humanoid_robot_intelligence_control_system_ball_detector/CHANGELOG.rst index 6d12ed9..538e59c 100644 --- a/humanoid_robot_ball_detector/CHANGELOG.rst +++ b/humanoid_robot_intelligence_control_system_ball_detector/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package humanoid_robot_ball_detector +Changelog for package humanoid_robot_intelligence_control_system_ball_detector ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.2 (2023-10-03) @@ -27,7 +27,7 @@ Changelog for package humanoid_robot_ball_detector 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic -* added launch files in order to move the camera setting to humanoid_robot_camera_setting package +* added launch files in order to move the camera setting to humanoid_robot_intelligence_control_system_camera_setting package * added missing package in find_package() * refacoring to release * split repositoryfrom ROBOTIS-HUMANOID_ROBOT diff --git a/humanoid_robot_ball_detector/CMakeLists.txt b/humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt similarity index 97% rename from humanoid_robot_ball_detector/CMakeLists.txt rename to humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt index 0a54aa1..40dad1a 100644 --- a/humanoid_robot_ball_detector/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(humanoid_robot_ball_detector) +project(humanoid_robot_intelligence_control_system_ball_detector) if($ENV{ROS_VERSION} EQUAL 1) diff --git a/humanoid_robot_ball_detector/cfg/DetectorParams.cfg b/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParams.cfg similarity index 97% rename from humanoid_robot_ball_detector/cfg/DetectorParams.cfg rename to humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParams.cfg index 203fd0c..abc5bff 100755 --- a/humanoid_robot_ball_detector/cfg/DetectorParams.cfg +++ b/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParams.cfg @@ -1,5 +1,5 @@ #!/usr/bin/env python -PACKAGE='humanoid_robot_ball_detector' +PACKAGE='humanoid_robot_intelligence_control_system_ball_detector' from dynamic_reconfigure.parameter_generator_catkin import * diff --git a/humanoid_robot_ball_detector/cfg/DetectorParamsBlue.cfg b/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsBlue.cfg similarity index 97% rename from humanoid_robot_ball_detector/cfg/DetectorParamsBlue.cfg rename to humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsBlue.cfg index 2884c7d..9ef2700 100755 --- a/humanoid_robot_ball_detector/cfg/DetectorParamsBlue.cfg +++ b/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsBlue.cfg @@ -1,5 +1,5 @@ #!/usr/bin/env python -PACKAGE='humanoid_robot_ball_detector' +PACKAGE='humanoid_robot_intelligence_control_system_ball_detector' from dynamic_reconfigure.parameter_generator_catkin import * diff --git a/humanoid_robot_ball_detector/cfg/DetectorParamsRed.cfg b/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsRed.cfg similarity index 97% rename from humanoid_robot_ball_detector/cfg/DetectorParamsRed.cfg rename to humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsRed.cfg index 5e78e85..c0eed94 100755 --- a/humanoid_robot_ball_detector/cfg/DetectorParamsRed.cfg +++ b/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsRed.cfg @@ -1,5 +1,5 @@ #!/usr/bin/env python -PACKAGE='humanoid_robot_ball_detector' +PACKAGE='humanoid_robot_intelligence_control_system_ball_detector' from dynamic_reconfigure.parameter_generator_catkin import * diff --git a/humanoid_robot_ball_detector/config/ball_detector_params.yaml b/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params.yaml similarity index 100% rename from humanoid_robot_ball_detector/config/ball_detector_params.yaml rename to humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params.yaml diff --git a/humanoid_robot_ball_detector/config/ball_detector_params_default.yaml b/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_default.yaml similarity index 100% rename from humanoid_robot_ball_detector/config/ball_detector_params_default.yaml rename to humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_default.yaml diff --git a/humanoid_robot_ball_detector/config/ball_detector_params_op.yaml b/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_op.yaml similarity index 100% rename from humanoid_robot_ball_detector/config/ball_detector_params_op.yaml rename to humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_op.yaml diff --git a/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector.h b/humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h similarity index 75% rename from humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector.h rename to humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h index fd33a59..91a1bf6 100644 --- a/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector.h +++ b/humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h @@ -36,14 +36,14 @@ #include #include -#include "humanoid_robot_ball_detector/ball_detector_config.h" +#include "humanoid_robot_intelligence_control_system_ball_detector/ball_detector_config.h" -#include "humanoid_robot_ball_detector/CircleSetStamped.h" -#include "humanoid_robot_ball_detector/DetectorParamsConfig.h" -#include "humanoid_robot_ball_detector/GetParameters.h" -#include "humanoid_robot_ball_detector/SetParameters.h" +#include "humanoid_robot_intelligence_control_system_ball_detector/CircleSetStamped.h" +#include "humanoid_robot_intelligence_control_system_ball_detector/DetectorParamsConfig.h" +#include "humanoid_robot_intelligence_control_system_ball_detector/GetParameters.h" +#include "humanoid_robot_intelligence_control_system_ball_detector/SetParameters.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { class BallDetector { public: @@ -71,15 +71,15 @@ protected: // callbacks to camera info subscription void cameraInfoCallback(const sensor_msgs::CameraInfo &msg); - void dynParamCallback(humanoid_robot_ball_detector::DetectorParamsConfig &config, + void dynParamCallback(humanoid_robot_intelligence_control_system_ball_detector::DetectorParamsConfig &config, uint32_t level); void enableCallback(const std_msgs::Bool::ConstPtr &msg); void paramCommandCallback(const std_msgs::String::ConstPtr &msg); - bool setParamCallback(humanoid_robot_ball_detector::SetParameters::Request &req, - humanoid_robot_ball_detector::SetParameters::Response &res); - bool getParamCallback(humanoid_robot_ball_detector::GetParameters::Request &req, - humanoid_robot_ball_detector::GetParameters::Response &res); + bool setParamCallback(humanoid_robot_intelligence_control_system_ball_detector::SetParameters::Request &req, + humanoid_robot_intelligence_control_system_ball_detector::SetParameters::Response &res); + bool getParamCallback(humanoid_robot_intelligence_control_system_ball_detector::GetParameters::Request &req, + humanoid_robot_intelligence_control_system_ball_detector::GetParameters::Response &res); void resetParameter(); void publishParam(); @@ -117,7 +117,7 @@ protected: int not_found_count_; // circle set publisher - humanoid_robot_ball_detector::CircleSetStamped circles_msg_; + humanoid_robot_intelligence_control_system_ball_detector::CircleSetStamped circles_msg_; ros::Publisher circles_pub_; // camera info subscriber @@ -159,11 +159,11 @@ protected: cv::Mat in_image_; cv::Mat out_image_; - dynamic_reconfigure::Server + dynamic_reconfigure::Server param_server_; dynamic_reconfigure::Server< - humanoid_robot_ball_detector::DetectorParamsConfig>::CallbackType callback_fnc_; + humanoid_robot_intelligence_control_system_ball_detector::DetectorParamsConfig>::CallbackType callback_fnc_; }; -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op #endif // _BALL_DETECTOR_H_ diff --git a/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector_config.h b/humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector_config.h similarity index 96% rename from humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector_config.h rename to humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector_config.h index 9a80474..a7e7a3a 100644 --- a/humanoid_robot_ball_detector/include/humanoid_robot_ball_detector/ball_detector_config.h +++ b/humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector_config.h @@ -19,7 +19,7 @@ #ifndef _DETECTOR_CONFIG_H_ #define _DETECTOR_CONFIG_H_ -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { // constants const int GAUSSIAN_BLUR_SIZE_DEFAULT = 7; @@ -86,5 +86,5 @@ public: ~DetectorConfig() {} }; -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op #endif // _DETECTOR_CONFIG_H_ diff --git a/humanoid_robot_ball_detector/launch/ball_detector.launch b/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector.launch similarity index 56% rename from humanoid_robot_ball_detector/launch/ball_detector.launch rename to humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector.launch index a984f30..564bebb 100644 --- a/humanoid_robot_ball_detector/launch/ball_detector.launch +++ b/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector.launch @@ -1,9 +1,9 @@ - + - + diff --git a/humanoid_robot_ball_detector/launch/ball_detector_from_usb_cam.launch b/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_usb_cam.launch similarity index 92% rename from humanoid_robot_ball_detector/launch/ball_detector_from_usb_cam.launch rename to humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_usb_cam.launch index 3d3d285..2d690b8 100644 --- a/humanoid_robot_ball_detector/launch/ball_detector_from_usb_cam.launch +++ b/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_usb_cam.launch @@ -23,5 +23,5 @@ - + diff --git a/humanoid_robot_ball_detector/launch/ball_detector_from_uvc.launch b/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_uvc.launch similarity index 90% rename from humanoid_robot_ball_detector/launch/ball_detector_from_uvc.launch rename to humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_uvc.launch index 87c5654..a28ee87 100644 --- a/humanoid_robot_ball_detector/launch/ball_detector_from_uvc.launch +++ b/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_uvc.launch @@ -28,5 +28,5 @@ - + diff --git a/humanoid_robot_ball_detector/msg/BallDetectorParams.msg b/humanoid_robot_intelligence_control_system_ball_detector/msg/BallDetectorParams.msg similarity index 100% rename from humanoid_robot_ball_detector/msg/BallDetectorParams.msg rename to humanoid_robot_intelligence_control_system_ball_detector/msg/BallDetectorParams.msg diff --git a/humanoid_robot_ball_detector/msg/CircleSetStamped.msg b/humanoid_robot_intelligence_control_system_ball_detector/msg/CircleSetStamped.msg similarity index 100% rename from humanoid_robot_ball_detector/msg/CircleSetStamped.msg rename to humanoid_robot_intelligence_control_system_ball_detector/msg/CircleSetStamped.msg diff --git a/humanoid_robot_ball_detector/package.xml b/humanoid_robot_intelligence_control_system_ball_detector/package.xml similarity index 99% rename from humanoid_robot_ball_detector/package.xml rename to humanoid_robot_intelligence_control_system_ball_detector/package.xml index 19f9714..98502ed 100644 --- a/humanoid_robot_ball_detector/package.xml +++ b/humanoid_robot_intelligence_control_system_ball_detector/package.xml @@ -1,6 +1,6 @@ - humanoid_robot_ball_detector + humanoid_robot_intelligence_control_system_ball_detector 0.3.2 This package implements a circle-like shape detector of the input image diff --git a/humanoid_robot_ball_detector/rviz/ball_detector.rviz b/humanoid_robot_intelligence_control_system_ball_detector/rviz/ball_detector.rviz similarity index 100% rename from humanoid_robot_ball_detector/rviz/ball_detector.rviz rename to humanoid_robot_intelligence_control_system_ball_detector/rviz/ball_detector.rviz diff --git a/humanoid_robot_ball_detector/src/ball_detector.cpp b/humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector.cpp similarity index 96% rename from humanoid_robot_ball_detector/src/ball_detector.cpp rename to humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector.cpp index 3c975cc..2916b71 100644 --- a/humanoid_robot_ball_detector/src/ball_detector.cpp +++ b/humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector.cpp @@ -18,9 +18,9 @@ #include -#include "humanoid_robot_ball_detector/ball_detector.h" +#include "humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { BallDetector::BallDetector() : nh_(ros::this_node::getName()), it_(this->nh_), enable_(true), @@ -88,7 +88,8 @@ BallDetector::BallDetector() // sets publishers image_pub_ = it_.advertise("image_out", 100); circles_pub_ = - nh_.advertise("circle_set", 100); + nh_.advertise("circle_set", 100); camera_info_pub_ = nh_.advertise("camera_info", 100); // sets subscribers @@ -106,7 +107,8 @@ BallDetector::BallDetector() // web setting param_pub_ = - nh_.advertise("current_params", 1); + nh_.advertise("current_params", 1); param_command_sub_ = nh_.subscribe("param_command", 1, &BallDetector::paramCommandCallback, this); set_param_client_ = @@ -243,7 +245,9 @@ void BallDetector::imageCallback(const sensor_msgs::ImageConstPtr &msg) { } void BallDetector::dynParamCallback( - humanoid_robot_ball_detector::DetectorParamsConfig &config, uint32_t level) { + humanoid_robot_intelligence_control_system_ball_detector:: + DetectorParamsConfig &config, + uint32_t level) { params_config_.gaussian_blur_size = config.gaussian_blur_size; params_config_.gaussian_blur_sigma = config.gaussian_blur_sigma; params_config_.canny_edge_th = config.canny_edge_th; @@ -299,8 +303,10 @@ void BallDetector::paramCommandCallback(const std_msgs::String::ConstPtr &msg) { } bool BallDetector::setParamCallback( - humanoid_robot_ball_detector::SetParameters::Request &req, - humanoid_robot_ball_detector::SetParameters::Response &res) { + humanoid_robot_intelligence_control_system_ball_detector::SetParameters:: + Request &req, + humanoid_robot_intelligence_control_system_ball_detector::SetParameters:: + Response &res) { params_config_.gaussian_blur_size = req.params.gaussian_blur_size; params_config_.gaussian_blur_sigma = req.params.gaussian_blur_sigma; params_config_.canny_edge_th = req.params.canny_edge_th; @@ -325,8 +331,10 @@ bool BallDetector::setParamCallback( } bool BallDetector::getParamCallback( - humanoid_robot_ball_detector::GetParameters::Request &req, - humanoid_robot_ball_detector::GetParameters::Response &res) { + humanoid_robot_intelligence_control_system_ball_detector::GetParameters:: + Request &req, + humanoid_robot_intelligence_control_system_ball_detector::GetParameters:: + Response &res) { res.returns.gaussian_blur_size = params_config_.gaussian_blur_size; res.returns.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; res.returns.canny_edge_th = params_config_.canny_edge_th; @@ -399,7 +407,8 @@ void BallDetector::resetParameter() { } void BallDetector::publishParam() { - humanoid_robot_ball_detector::BallDetectorParams params; + humanoid_robot_intelligence_control_system_ball_detector::BallDetectorParams + params; params.gaussian_blur_size = params_config_.gaussian_blur_size; params.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; @@ -892,4 +901,4 @@ void BallDetector::drawOutputImage() { 0); // circle outline in blue } -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op diff --git a/humanoid_robot_ball_detector/src/ball_detector_node.cpp b/humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector_node.cpp similarity index 89% rename from humanoid_robot_ball_detector/src/ball_detector_node.cpp rename to humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector_node.cpp index a34960f..8cecc3b 100644 --- a/humanoid_robot_ball_detector/src/ball_detector_node.cpp +++ b/humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector_node.cpp @@ -16,7 +16,7 @@ /* Author: Kayman Jung */ -#include "humanoid_robot_ball_detector/ball_detector.h" +#include "humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h" // node main int main(int argc, char **argv) { @@ -24,7 +24,7 @@ int main(int argc, char **argv) { ros::init(argc, argv, "ball_detector_node"); // create ros wrapper object - humanoid_robot_op::BallDetector detector; + humanoid_robot_intelligence_control_system_op::BallDetector detector; // set node loop rate ros::Rate loop_rate(30); diff --git a/humanoid_robot_ball_detector/srv/GetParameters.srv b/humanoid_robot_intelligence_control_system_ball_detector/srv/GetParameters.srv similarity index 100% rename from humanoid_robot_ball_detector/srv/GetParameters.srv rename to humanoid_robot_intelligence_control_system_ball_detector/srv/GetParameters.srv diff --git a/humanoid_robot_ball_detector/srv/SetParameters.srv b/humanoid_robot_intelligence_control_system_ball_detector/srv/SetParameters.srv similarity index 100% rename from humanoid_robot_ball_detector/srv/SetParameters.srv rename to humanoid_robot_intelligence_control_system_ball_detector/srv/SetParameters.srv diff --git a/humanoid_robot_bringup/CHANGELOG.rst b/humanoid_robot_intelligence_control_system_bringup/CHANGELOG.rst similarity index 84% rename from humanoid_robot_bringup/CHANGELOG.rst rename to humanoid_robot_intelligence_control_system_bringup/CHANGELOG.rst index 1970d3a..878e980 100644 --- a/humanoid_robot_bringup/CHANGELOG.rst +++ b/humanoid_robot_intelligence_control_system_bringup/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package humanoid_robot_bringup +Changelog for package humanoid_robot_intelligence_control_system_bringup ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.2 (2023-10-03) @@ -27,7 +27,7 @@ Changelog for package humanoid_robot_bringup 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic -* updated CMakeLists.txt and package.xml of humanoid_robot_bringup +* updated CMakeLists.txt and package.xml of humanoid_robot_intelligence_control_system_bringup * changed rviz config file * refacoring to release * Contributors: Kayman, Pyo diff --git a/humanoid_robot_bringup/CMakeLists.txt b/humanoid_robot_intelligence_control_system_bringup/CMakeLists.txt similarity index 83% rename from humanoid_robot_bringup/CMakeLists.txt rename to humanoid_robot_intelligence_control_system_bringup/CMakeLists.txt index da5f24e..b0f7a88 100644 --- a/humanoid_robot_bringup/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_bringup/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(humanoid_robot_bringup) +project(humanoid_robot_intelligence_control_system_bringup) if($ENV{ROS_VERSION} EQUAL 1) diff --git a/humanoid_robot_bringup/launch/humanoid_robot_bringup.launch b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_bringup.launch similarity index 79% rename from humanoid_robot_bringup/launch/humanoid_robot_bringup.launch rename to humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_bringup.launch index 6d01824..d9f4f02 100644 --- a/humanoid_robot_bringup/launch/humanoid_robot_bringup.launch +++ b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_bringup.launch @@ -1,7 +1,7 @@ - + diff --git a/humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_bringup_visualization.launch similarity index 54% rename from humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch rename to humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_bringup_visualization.launch index 16d122a..ce2a352 100644 --- a/humanoid_robot_bringup/launch/humanoid_robot_bringup_visualization.launch +++ b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_bringup_visualization.launch @@ -1,18 +1,18 @@ - + - [/humanoid_robot/present_joint_states] + [/humanoid_robot_intelligence_control_system/present_joint_states] - + - + diff --git a/humanoid_robot_bringup/package.xml b/humanoid_robot_intelligence_control_system_bringup/package.xml similarity index 68% rename from humanoid_robot_bringup/package.xml rename to humanoid_robot_intelligence_control_system_bringup/package.xml index 20d2b13..2d44949 100644 --- a/humanoid_robot_bringup/package.xml +++ b/humanoid_robot_intelligence_control_system_bringup/package.xml @@ -1,6 +1,6 @@ - humanoid_robot_bringup + humanoid_robot_intelligence_control_system_bringup 0.3.2 This package is a demo for first time users. @@ -12,22 +12,22 @@ catkin - humanoid_robot_manager - humanoid_robot_description + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_description usb_cam joint_state_publisher robot_state_publisher rviz - humanoid_robot_manager - humanoid_robot_description + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_description usb_cam joint_state_publisher robot_state_publisher rviz - humanoid_robot_manager - humanoid_robot_description + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_description usb_cam joint_state_publisher robot_state_publisher @@ -36,22 +36,22 @@ ament_cmake - humanoid_robot_manager - humanoid_robot_description + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_description usb_cam joint_state_publisher robot_state_publisher rviz - humanoid_robot_manager - humanoid_robot_description + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_description usb_cam joint_state_publisher robot_state_publisher rviz - humanoid_robot_manager - humanoid_robot_description + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_description usb_cam joint_state_publisher robot_state_publisher diff --git a/humanoid_robot_bringup/rviz/humanoid_robot_bringup.rviz b/humanoid_robot_intelligence_control_system_bringup/rviz/humanoid_robot_bringup.rviz similarity index 99% rename from humanoid_robot_bringup/rviz/humanoid_robot_bringup.rviz rename to humanoid_robot_intelligence_control_system_bringup/rviz/humanoid_robot_bringup.rviz index ef223c3..3ba310a 100644 --- a/humanoid_robot_bringup/rviz/humanoid_robot_bringup.rviz +++ b/humanoid_robot_intelligence_control_system_bringup/rviz/humanoid_robot_bringup.rviz @@ -287,7 +287,7 @@ Visualization Manager: Enabled: true History Length: 1 Name: Imu - Topic: /humanoid_robot/open_cr/imu + Topic: /humanoid_robot_intelligence_control_system/open_cr/imu Unreliable: false Value: true Enabled: true diff --git a/humanoid_robot_demo/CHANGELOG.rst b/humanoid_robot_intelligence_control_system_demo/CHANGELOG.rst similarity index 89% rename from humanoid_robot_demo/CHANGELOG.rst rename to humanoid_robot_intelligence_control_system_demo/CHANGELOG.rst index 7bbe748..39a2f89 100644 --- a/humanoid_robot_demo/CHANGELOG.rst +++ b/humanoid_robot_intelligence_control_system_demo/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package humanoid_robot_demo +Changelog for package humanoid_robot_intelligence_control_system_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.2 (2023-10-03) @@ -27,7 +27,7 @@ Changelog for package humanoid_robot_demo 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic -* added launch files in order to move the camera setting to humanoid_robot_camera_setting package +* added launch files in order to move the camera setting to humanoid_robot_intelligence_control_system_camera_setting package * added missing package in find_package() * refacoring to release * split repositoryfrom ROBOTIS-HUMANOID_ROBOT diff --git a/humanoid_robot_demo/CMakeLists.txt b/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt similarity index 78% rename from humanoid_robot_demo/CMakeLists.txt rename to humanoid_robot_intelligence_control_system_demo/CMakeLists.txt index 049d16a..5d22368 100644 --- a/humanoid_robot_demo/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(humanoid_robot_demo) +project(humanoid_robot_intelligence_control_system_demo) if($ENV{ROS_VERSION} EQUAL 1) @@ -10,12 +10,12 @@ if($ENV{ROS_VERSION} EQUAL 1) std_msgs sensor_msgs geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_walking_module_msgs + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector + humanoid_robot_intelligence_control_system_math + humanoid_robot_intelligence_control_system_ball_detector ) find_package(Boost REQUIRED COMPONENTS thread) find_package(Eigen3 REQUIRED) @@ -52,12 +52,12 @@ if($ENV{ROS_VERSION} EQUAL 1) std_msgs sensor_msgs geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_walking_module_msgs + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector + humanoid_robot_intelligence_control_system_math + humanoid_robot_intelligence_control_system_ball_detector DEPENDS Boost EIGEN3 ) endif() diff --git a/humanoid_robot_demo/data/mp3/Autonomous soccer mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Autonomous soccer mode.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Autonomous soccer mode.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Autonomous soccer mode.mp3 diff --git a/humanoid_robot_demo/data/mp3/Bye bye.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Bye bye.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Bye bye.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Bye bye.mp3 diff --git a/humanoid_robot_demo/data/mp3/Clap please.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Clap please.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Clap please.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Clap please.mp3 diff --git a/humanoid_robot_demo/data/mp3/Demonstration ready mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Demonstration ready mode.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Demonstration ready mode.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Demonstration ready mode.mp3 diff --git a/humanoid_robot_demo/data/mp3/Headstand.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Headstand.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Headstand.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Headstand.mp3 diff --git a/humanoid_robot_demo/data/mp3/Interactive motion mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Interactive motion mode.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Interactive motion mode.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Interactive motion mode.mp3 diff --git a/humanoid_robot_demo/data/mp3/Intro01.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro01.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Intro01.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Intro01.mp3 diff --git a/humanoid_robot_demo/data/mp3/Intro02.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro02.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Intro02.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Intro02.mp3 diff --git a/humanoid_robot_demo/data/mp3/Intro03.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro03.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Intro03.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Intro03.mp3 diff --git a/humanoid_robot_demo/data/mp3/Introduction.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Introduction.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Introduction.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Introduction.mp3 diff --git a/humanoid_robot_demo/data/mp3/Left kick.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Left kick.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Left kick.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Left kick.mp3 diff --git a/humanoid_robot_demo/data/mp3/No.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/No.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/No.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/No.mp3 diff --git a/humanoid_robot_demo/data/mp3/Oops.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Oops.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3 diff --git a/humanoid_robot_demo/data/mp3/Right kick.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Right kick.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Right kick.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Right kick.mp3 diff --git a/humanoid_robot_demo/data/mp3/Sensor calibration complete.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Sensor calibration complete.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Sensor calibration complete.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Sensor calibration complete.mp3 diff --git a/humanoid_robot_demo/data/mp3/Sensor calibration fail.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Sensor calibration fail.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Sensor calibration fail.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Sensor calibration fail.mp3 diff --git a/humanoid_robot_demo/data/mp3/Shoot.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Shoot.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Shoot.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Shoot.mp3 diff --git a/humanoid_robot_demo/data/mp3/Sit down.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Sit down.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Sit down.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Sit down.mp3 diff --git a/humanoid_robot_demo/data/mp3/Stand up.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Stand up.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Stand up.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Stand up.mp3 diff --git a/humanoid_robot_demo/data/mp3/Start motion demonstration.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Start motion demonstration.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Start motion demonstration.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Start motion demonstration.mp3 diff --git a/humanoid_robot_demo/data/mp3/Start soccer demonstration.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Start soccer demonstration.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Start soccer demonstration.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Start soccer demonstration.mp3 diff --git a/humanoid_robot_demo/data/mp3/Start vision processing demonstration.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Start vision processing demonstration.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Start vision processing demonstration.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Start vision processing demonstration.mp3 diff --git a/humanoid_robot_demo/data/mp3/System shutdown.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/System shutdown.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/System shutdown.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/System shutdown.mp3 diff --git a/humanoid_robot_demo/data/mp3/Thank you.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Thank you.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Thank you.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Thank you.mp3 diff --git a/humanoid_robot_demo/data/mp3/Vision processing mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Vision processing mode.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Vision processing mode.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Vision processing mode.mp3 diff --git a/humanoid_robot_demo/data/mp3/Wow.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Wow.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Wow.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Wow.mp3 diff --git a/humanoid_robot_demo/data/mp3/Yes go.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Yes go.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Yes go.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Yes go.mp3 diff --git a/humanoid_robot_demo/data/mp3/Yes.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Yes.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/Yes.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/Yes.mp3 diff --git a/humanoid_robot_demo/data/mp3/intro_test.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/intro_test.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/intro_test.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/intro_test.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Announce mic test.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Announce mic test.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Announce mic test.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Announce mic test.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Button test mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Button test mode.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Button test mode.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Button test mode.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Mic test mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mic test mode.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Mic test mode.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mic test mode.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Mode button long pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mode button long pressed.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Mode button long pressed.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mode button long pressed.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Mode button pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mode button pressed.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Mode button pressed.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mode button pressed.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Self test ready mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Self test ready mode.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Self test ready mode.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Self test ready mode.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Start button long pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button long pressed.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Start button long pressed.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button long pressed.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Start button pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button pressed.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Start button pressed.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button pressed.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Start button test mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button test mode.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Start button test mode.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button test mode.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Start mic test mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start mic test mode.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Start mic test mode.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start mic test mode.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Start playing.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start playing.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Start playing.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start playing.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/Start recording.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start recording.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/Start recording.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start recording.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/User button long pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/User button long pressed.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/User button long pressed.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/User button long pressed.mp3 diff --git a/humanoid_robot_demo/data/mp3/test/User button pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/User button pressed.mp3 similarity index 100% rename from humanoid_robot_demo/data/mp3/test/User button pressed.mp3 rename to humanoid_robot_intelligence_control_system_demo/data/mp3/test/User button pressed.mp3 diff --git a/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst b/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst similarity index 80% rename from humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst rename to humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst index eacc32d..e3fba16 100644 --- a/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst +++ b/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package humanoid_robot_demo +Changelog for package humanoid_robot_intelligence_control_system_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.1 (2023-09-27) @@ -20,9 +20,9 @@ Changelog for package humanoid_robot_demo 0.1.0 (2018-04-19) ------------------ * first release for ROS Kinetic -* added launch files in order to move the camera setting to humanoid_robot_camera_setting package +* added launch files in order to move the camera setting to humanoid_robot_intelligence_control_system_camera_setting package * added missing package in find_package() -* updated CMakeLists.txt and package.xml of humanoid_robot_bringup +* updated CMakeLists.txt and package.xml of humanoid_robot_intelligence_control_system_bringup * changed rviz config file * refacoring to release * split repositoryfrom ROBOTIS-HUMANOID_ROBOT diff --git a/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt b/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt similarity index 60% rename from humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt rename to humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt index b5a0767..96c17dd 100644 --- a/humanoid_robot_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt @@ -1,4 +1,4 @@ cmake_minimum_required(VERSION 3.0.2) -project(humanoid_robot_demo) +project(humanoid_robot_intelligence_control_system_demo) find_package(catkin REQUIRED) catkin_metapackage() diff --git a/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/package.xml b/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/package.xml new file mode 100644 index 0000000..64825a0 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/package.xml @@ -0,0 +1,42 @@ + + + humanoid_robot_intelligence_control_system_demo + 0.3.0 + + ROS packages for the humanoid_robot_intelligence_control_system_demo (meta package) + + Apache 2.0 + Ronaldson Bellande + + catkin + + humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_bringup + humanoid_robot_intelligence_control_system_demo + + humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_bringup + humanoid_robot_intelligence_control_system_demo + + humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_bringup + humanoid_robot_intelligence_control_system_demo + + + ament_cmake + + humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_bringup + humanoid_robot_intelligence_control_system_demo + + humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_bringup + humanoid_robot_intelligence_control_system_demo + + humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_bringup + humanoid_robot_intelligence_control_system_demo + + + + diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/action_demo.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/action_demo.h similarity index 86% rename from humanoid_robot_demo/include/humanoid_robot_demo/action_demo.h rename to humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/action_demo.h index 1b1b951..b8ee165 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/action_demo.h +++ b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/action_demo.h @@ -27,12 +27,12 @@ #include #include -#include "humanoid_robot_action_module_msgs/IsRunning.h" -#include "humanoid_robot_demo/op_demo.h" -#include "humanoid_robot_controller_msgs/JointCtrlModule.h" -#include "humanoid_robot_controller_msgs/SetModule.h" +#include "humanoid_robot_intelligence_control_system_action_module_msgs/IsRunning.h" +#include "humanoid_robot_intelligence_control_system_demo/op_demo.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/JointCtrlModule.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SetModule.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { class ActionDemo : public OPDemo { public: @@ -109,6 +109,6 @@ protected: int play_status_; }; -} /* namespace humanoid_robot_op */ +} /* namespace humanoid_robot_intelligence_control_system_op */ #endif /* ACTION_DEMO_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/ball_follower.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_follower.h similarity index 86% rename from humanoid_robot_demo/include/humanoid_robot_demo/ball_follower.h rename to humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_follower.h index 7b6dc45..cb9ed78 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/ball_follower.h +++ b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_follower.h @@ -29,12 +29,12 @@ #include #include -#include "humanoid_robot_ball_detector/CircleSetStamped.h" -#include "humanoid_robot_walking_module_msgs/GetWalkingParam.h" -#include "humanoid_robot_walking_module_msgs/WalkingParam.h" -#include "humanoid_robot_controller_msgs/JointCtrlModule.h" +#include "humanoid_robot_intelligence_control_system_ball_detector/CircleSetStamped.h" +#include "humanoid_robot_intelligence_control_system_walking_module_msgs/GetWalkingParam.h" +#include "humanoid_robot_intelligence_control_system_walking_module_msgs/WalkingParam.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/JointCtrlModule.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { // following the ball using walking class BallFollower { @@ -109,7 +109,7 @@ protected: // (x, y) is the center position of the ball in image coordinates // z is the ball radius geometry_msgs::Point ball_position_; - humanoid_robot_walking_module_msgs::WalkingParam current_walking_param_; + humanoid_robot_intelligence_control_system_walking_module_msgs::WalkingParam current_walking_param_; int count_not_found_; int count_to_kick_; @@ -124,6 +124,6 @@ protected: double curr_period_time_; double accum_period_time_; }; -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op #endif /* BALL_FOLLOWER_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/ball_tracker.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_tracker.h similarity index 82% rename from humanoid_robot_demo/include/humanoid_robot_demo/ball_tracker.h rename to humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_tracker.h index 55b8447..9ccceeb 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/ball_tracker.h +++ b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_tracker.h @@ -28,12 +28,12 @@ #include #include -#include "humanoid_robot_ball_detector/CircleSetStamped.h" -#include "humanoid_robot_walking_module_msgs/GetWalkingParam.h" -#include "humanoid_robot_walking_module_msgs/WalkingParam.h" -#include "humanoid_robot_controller_msgs/JointCtrlModule.h" +#include "humanoid_robot_intelligence_control_system_ball_detector/CircleSetStamped.h" +#include "humanoid_robot_intelligence_control_system_walking_module_msgs/GetWalkingParam.h" +#include "humanoid_robot_intelligence_control_system_walking_module_msgs/WalkingParam.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/JointCtrlModule.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { // head tracking for looking the ball class BallTracker { @@ -73,7 +73,7 @@ protected: const bool DEBUG_PRINT; void ballPositionCallback( - const humanoid_robot_ball_detector::CircleSetStamped::ConstPtr &msg); + const humanoid_robot_intelligence_control_system_ball_detector::CircleSetStamped::ConstPtr &msg); void ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); void publishHeadJoint(double pan, double tilt); void scanBall(); @@ -108,6 +108,6 @@ protected: ros::Time prev_time_; double p_gain_, d_gain_, i_gain_; }; -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op #endif /* BALL_TRACKING_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/button_test.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/button_test.h similarity index 84% rename from humanoid_robot_demo/include/humanoid_robot_demo/button_test.h rename to humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/button_test.h index 24d6d72..ead7c2b 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/button_test.h +++ b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/button_test.h @@ -24,10 +24,10 @@ #include #include -#include "humanoid_robot_demo/op_demo.h" -#include "humanoid_robot_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_intelligence_control_system_demo/op_demo.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { class ButtonTest : public OPDemo { public: @@ -61,6 +61,6 @@ protected: int rgb_led_count_; }; -} /* namespace humanoid_robot_op */ +} /* namespace humanoid_robot_intelligence_control_system_op */ #endif /* BUTTON_TEST_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/face_tracker.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/face_tracker.h similarity index 95% rename from humanoid_robot_demo/include/humanoid_robot_demo/face_tracker.h rename to humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/face_tracker.h index 10acdbd..6c2dbbc 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/face_tracker.h +++ b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/face_tracker.h @@ -29,7 +29,7 @@ #include #include -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { // head tracking for looking the ball class FaceTracker { @@ -89,6 +89,6 @@ protected: int dismissed_count_; }; -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op #endif /* FACE_TRACKING_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/mic_test.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/mic_test.h similarity index 87% rename from humanoid_robot_demo/include/humanoid_robot_demo/mic_test.h rename to humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/mic_test.h index fa921ef..0477d8d 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/mic_test.h +++ b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/mic_test.h @@ -25,10 +25,10 @@ #include #include -#include "humanoid_robot_demo/op_demo.h" -#include "humanoid_robot_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_intelligence_control_system_demo/op_demo.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { class MicTest : public OPDemo { public: @@ -81,6 +81,6 @@ protected: int test_status_; }; -} /* namespace humanoid_robot_op */ +} /* namespace humanoid_robot_intelligence_control_system_op */ #endif /* MIC_TEST_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/op_demo.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/op_demo.h similarity index 90% rename from humanoid_robot_demo/include/humanoid_robot_demo/op_demo.h rename to humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/op_demo.h index 420304b..5872213 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/op_demo.h +++ b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/op_demo.h @@ -19,7 +19,7 @@ #ifndef OP_DEMO_H_ #define OP_DEMO_H_ -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { class OPDemo { public: @@ -44,6 +44,6 @@ protected: bool enable_; }; -} /* namespace humanoid_robot_op */ +} /* namespace humanoid_robot_intelligence_control_system_op */ #endif /* OP_DEMO_H_ */ diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/soccer_demo.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/soccer_demo.h similarity index 78% rename from humanoid_robot_demo/include/humanoid_robot_demo/soccer_demo.h rename to humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/soccer_demo.h index 042517c..4af5a5a 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/soccer_demo.h +++ b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/soccer_demo.h @@ -26,17 +26,17 @@ #include #include -#include "humanoid_robot_action_module_msgs/IsRunning.h" -#include "humanoid_robot_controller_msgs/JointCtrlModule.h" -#include "humanoid_robot_controller_msgs/SetJointModule.h" -#include "humanoid_robot_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_intelligence_control_system_action_module_msgs/IsRunning.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/JointCtrlModule.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SetJointModule.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" -#include "humanoid_robot_demo/ball_follower.h" -#include "humanoid_robot_demo/ball_tracker.h" -#include "humanoid_robot_demo/op_demo.h" -#include "humanoid_robot_math/humanoid_robot_linear_algebra.h" +#include "humanoid_robot_intelligence_control_system_demo/ball_follower.h" +#include "humanoid_robot_intelligence_control_system_demo/ball_tracker.h" +#include "humanoid_robot_intelligence_control_system_demo/op_demo.h" +#include "humanoid_robot_intelligence_control_system_math/humanoid_robot_intelligence_control_system_linear_algebra.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { class SoccerDemo : public OPDemo { public: @@ -74,7 +74,7 @@ protected: bool with_head_control = true); void setModuleToDemo(const std::string &module_name); void callServiceSettingModule( - const humanoid_robot_controller_msgs::JointCtrlModule &modules); + const humanoid_robot_intelligence_control_system_controller_msgs::JointCtrlModule &modules); void parseJointNameFromYaml(const std::string &path); bool getJointNameFromID(const int &id, std::string &joint_name); bool getIDFromJointName(const std::string &joint_name, int &id); @@ -130,5 +130,5 @@ protected: double present_pitch_; }; -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op #endif // SOCCER_DEMO_H diff --git a/humanoid_robot_demo/include/humanoid_robot_demo/vision_demo.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/vision_demo.h similarity index 82% rename from humanoid_robot_demo/include/humanoid_robot_demo/vision_demo.h rename to humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/vision_demo.h index d304920..a42de50 100644 --- a/humanoid_robot_demo/include/humanoid_robot_demo/vision_demo.h +++ b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/vision_demo.h @@ -25,13 +25,13 @@ #include #include -#include "humanoid_robot_controller_msgs/SetModule.h" -#include "humanoid_robot_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SetModule.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" -#include "humanoid_robot_demo/face_tracker.h" -#include "humanoid_robot_demo/op_demo.h" +#include "humanoid_robot_intelligence_control_system_demo/face_tracker.h" +#include "humanoid_robot_intelligence_control_system_demo/op_demo.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { class VisionDemo : public OPDemo { public: @@ -78,6 +78,6 @@ protected: int tracking_status_; }; -} /* namespace humanoid_robot_op */ +} /* namespace humanoid_robot_intelligence_control_system_op */ #endif /* VISION_DEMO_H_ */ diff --git a/humanoid_robot_intelligence_control_system_demo/launch/demo.launch b/humanoid_robot_intelligence_control_system_demo/launch/demo.launch new file mode 100644 index 0000000..bd235f4 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_demo/launch/demo.launch @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_demo/launch/face_detection_humanoid_robot.launch b/humanoid_robot_intelligence_control_system_demo/launch/face_detection_humanoid_robot.launch similarity index 100% rename from humanoid_robot_demo/launch/face_detection_humanoid_robot.launch rename to humanoid_robot_intelligence_control_system_demo/launch/face_detection_humanoid_robot.launch diff --git a/humanoid_robot_intelligence_control_system_demo/launch/self_test.launch b/humanoid_robot_intelligence_control_system_demo/launch/self_test.launch new file mode 100644 index 0000000..38c2958 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_demo/launch/self_test.launch @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_intelligence_control_system_demo/list/action_script.yaml b/humanoid_robot_intelligence_control_system_demo/list/action_script.yaml new file mode 100644 index 0000000..65c9e58 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_demo/list/action_script.yaml @@ -0,0 +1,23 @@ +# combination action page number and mp3 file path +action_and_sound: + 4 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Thank you.mp3" + 41: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Introduction.mp3" + 24: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Wow.mp3" + 23: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Yes go.mp3" + 15: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Sit down.mp3" + 1: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Stand up.mp3" + 54: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Clap please.mp3" + 27: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3" + 38: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Bye bye.mp3" +# 101 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3" + 110 : "" + 111 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro01.mp3" + 115 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro02.mp3" + 118 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro03.mp3" + +# play list +prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] +default: [4, 110, 111, 115, 118, 24, 54, 27, 38] + +# example of play list +#certification: [101] diff --git a/humanoid_robot_intelligence_control_system_demo/list/action_script_bk.yaml b/humanoid_robot_intelligence_control_system_demo/list/action_script_bk.yaml new file mode 100644 index 0000000..67c1389 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_demo/list/action_script_bk.yaml @@ -0,0 +1,18 @@ +# combination action page number and mp3 file path +action_and_sound: + 4 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Thank you.mp3" + 41: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Introduction.mp3" + 24: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Wow.mp3" + 23: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Yes go.mp3" + 15: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Sit down.mp3" + 1: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Stand up.mp3" + 54: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Clap please.mp3" + 27: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3" + 38: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Bye bye.mp3" + 101 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3" + +# play list +default: [4, 41, 24, 23, 15, 1, 54, 27, 38] + +# example of play list +certificatino: [101] diff --git a/humanoid_robot_demo/package.xml b/humanoid_robot_intelligence_control_system_demo/package.xml similarity index 56% rename from humanoid_robot_demo/package.xml rename to humanoid_robot_intelligence_control_system_demo/package.xml index 1accda9..b55e2d3 100644 --- a/humanoid_robot_demo/package.xml +++ b/humanoid_robot_intelligence_control_system_demo/package.xml @@ -1,6 +1,6 @@ - humanoid_robot_demo + humanoid_robot_intelligence_control_system_demo 0.3.2 HUMANOID_ROBOT default demo @@ -17,18 +17,18 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_walking_module_msgs + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector + humanoid_robot_intelligence_control_system_math + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_camera_setting_tool + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection @@ -37,18 +37,18 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_walking_module_msgs + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector + humanoid_robot_intelligence_control_system_math + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_camera_setting_tool + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection @@ -57,18 +57,18 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_walking_module_msgs + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector + humanoid_robot_intelligence_control_system_math + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_camera_setting_tool + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection @@ -80,18 +80,18 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_walking_module_msgs + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector + humanoid_robot_intelligence_control_system_math + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_camera_setting_tool + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection @@ -100,18 +100,18 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_walking_module_msgs + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector + humanoid_robot_intelligence_control_system_math + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_camera_setting_tool + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection @@ -120,18 +120,18 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_controller_msgs - humanoid_robot_walking_module_msgs - humanoid_robot_action_module_msgs + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_walking_module_msgs + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules - humanoid_robot_math - humanoid_robot_ball_detector + humanoid_robot_intelligence_control_system_math + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp - humanoid_robot_manager - humanoid_robot_camera_setting_tool - humanoid_robot_web_setting_tool + humanoid_robot_intelligence_control_system_manager + humanoid_robot_intelligence_control_system_camera_setting_tool + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection diff --git a/humanoid_robot_demo/src/action/action_demo.cpp b/humanoid_robot_intelligence_control_system_demo/src/action/action_demo.cpp similarity index 85% rename from humanoid_robot_demo/src/action/action_demo.cpp rename to humanoid_robot_intelligence_control_system_demo/src/action/action_demo.cpp index f0f8f18..dcdec9f 100644 --- a/humanoid_robot_demo/src/action/action_demo.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/action/action_demo.cpp @@ -16,9 +16,9 @@ /* Author: Kayman Jung */ -#include "humanoid_robot_demo/action_demo.h" +#include "humanoid_robot_intelligence_control_system_demo/action_demo.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { ActionDemo::ActionDemo() : SPIN_RATE(30), DEBUG_PRINT(false), play_index_(0), @@ -28,14 +28,14 @@ ActionDemo::ActionDemo() ros::NodeHandle nh(ros::this_node::getName()); std::string default_path = - ros::package::getPath("humanoid_robot_demo") + "/list/action_script.yaml"; + ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/list/action_script.yaml"; script_path_ = nh.param("action_script", default_path); std::string default_play_list = "default"; play_list_name_ = nh.param("action_script_play_list", default_play_list); - demo_command_sub_ = nh.subscribe("/humanoid_robot/demo_command", 1, + demo_command_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/demo_command", 1, &ActionDemo::demoCommandCallback, this); parseActionScript(script_path_); @@ -150,20 +150,20 @@ void ActionDemo::callbackThread() { // subscriber & publisher module_control_pub_ = - nh.advertise("/humanoid_robot/enable_ctrl_module", 0); + nh.advertise("/humanoid_robot_intelligence_control_system/enable_ctrl_module", 0); motion_index_pub_ = - nh.advertise("/humanoid_robot/action/page_num", 0); + nh.advertise("/humanoid_robot_intelligence_control_system/action/page_num", 0); play_sound_pub_ = nh.advertise("/play_sound_file", 0); - buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, + buttuon_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, &ActionDemo::buttonHandlerCallback, this); is_running_client_ = - nh.serviceClient( - "/humanoid_robot/action/is_running"); + nh.serviceClient( + "/humanoid_robot_intelligence_control_system/action/is_running"); set_joint_module_client_ = - nh.serviceClient( - "/humanoid_robot/set_present_ctrl_modules"); + nh.serviceClient( + "/humanoid_robot_intelligence_control_system/set_present_ctrl_modules"); while (nh.ok()) { ros::spinOnce(); @@ -273,7 +273,7 @@ void ActionDemo::brakeAction() { // check running of action bool ActionDemo::isActionRunning() { - humanoid_robot_action_module_msgs::IsRunning is_running_srv; + humanoid_robot_intelligence_control_system_action_module_msgs::IsRunning is_running_srv; if (is_running_client_.call(is_running_srv) == false) { ROS_ERROR("Failed to get action status"); @@ -321,7 +321,7 @@ void ActionDemo::setModuleToDemo(const std::string &module_name) { } void ActionDemo::callServiceSettingModule(const std::string &module_name) { - humanoid_robot_controller_msgs::SetModule set_module_srv; + humanoid_robot_intelligence_control_system_controller_msgs::SetModule set_module_srv; set_module_srv.request.module_name = module_name; if (set_joint_module_client_.call(set_module_srv) == false) { @@ -343,4 +343,4 @@ void ActionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) { } } -} /* namespace humanoid_robot_op */ +} /* namespace humanoid_robot_intelligence_control_system_op */ diff --git a/humanoid_robot_demo/src/demo_node.cpp b/humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp similarity index 79% rename from humanoid_robot_demo/src/demo_node.cpp rename to humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp index 65b6ed5..7df1268 100644 --- a/humanoid_robot_demo/src/demo_node.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp @@ -19,11 +19,11 @@ #include #include -#include "humanoid_robot_controller_msgs/SyncWriteItem.h" -#include "humanoid_robot_demo/action_demo.h" -#include "humanoid_robot_demo/soccer_demo.h" -#include "humanoid_robot_demo/vision_demo.h" -#include "humanoid_robot_math/humanoid_robot_linear_algebra.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_intelligence_control_system_demo/action_demo.h" +#include "humanoid_robot_intelligence_control_system_demo/soccer_demo.h" +#include "humanoid_robot_intelligence_control_system_demo/vision_demo.h" +#include "humanoid_robot_intelligence_control_system_math/humanoid_robot_intelligence_control_system_linear_algebra.h" enum Demo_Status { Ready = 0, @@ -61,30 +61,30 @@ int main(int argc, char **argv) { ros::init(argc, argv, "demo_node"); // create ros wrapper object - humanoid_robot_op::OPDemo *current_demo = NULL; - humanoid_robot_op::SoccerDemo *soccer_demo = - new humanoid_robot_op::SoccerDemo(); - humanoid_robot_op::ActionDemo *action_demo = - new humanoid_robot_op::ActionDemo(); - humanoid_robot_op::VisionDemo *vision_demo = - new humanoid_robot_op::VisionDemo(); + humanoid_robot_intelligence_control_system_op::OPDemo *current_demo = NULL; + humanoid_robot_intelligence_control_system_op::SoccerDemo *soccer_demo = + new humanoid_robot_intelligence_control_system_op::SoccerDemo(); + humanoid_robot_intelligence_control_system_op::ActionDemo *action_demo = + new humanoid_robot_intelligence_control_system_op::ActionDemo(); + humanoid_robot_intelligence_control_system_op::VisionDemo *vision_demo = + new humanoid_robot_intelligence_control_system_op::VisionDemo(); ros::NodeHandle nh(ros::this_node::getName()); init_pose_pub = - nh.advertise("/humanoid_robot/base/ini_pose", 0); + nh.advertise("/humanoid_robot_intelligence_control_system/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); - led_pub = nh.advertise( - "/humanoid_robot/sync_write_item", 0); + led_pub = nh.advertise( + "/humanoid_robot_intelligence_control_system/sync_write_item", 0); dxl_torque_pub = - nh.advertise("/humanoid_robot/dxl_torque", 0); + nh.advertise("/humanoid_robot_intelligence_control_system/dxl_torque", 0); ros::Subscriber buttuon_sub = - nh.subscribe("/humanoid_robot/open_cr/button", 1, buttonHandlerCallback); + nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = - nh.subscribe("/humanoid_robot/mode_command", 1, demoModeCommandCallback); + nh.subscribe("/humanoid_robot_intelligence_control_system/mode_command", 1, demoModeCommandCallback); default_mp3_path = - ros::package::getPath("humanoid_robot_demo") + "/data/mp3/"; + ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/data/mp3/"; ros::start(); @@ -92,7 +92,7 @@ int main(int argc, char **argv) { ros::Rate loop_rate(SPIN_RATE); // wait for starting of manager - std::string manager_name = "/humanoid_robot_manager"; + std::string manager_name = "/humanoid_robot_intelligence_control_system_manager"; while (ros::ok()) { ros::Duration(1.0).sleep(); @@ -100,7 +100,7 @@ int main(int argc, char **argv) { break; ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } - ROS_WARN("Waiting for humanoid_robot manager"); + ROS_WARN("Waiting for humanoid_robot_intelligence_control_system manager"); } // init procedure @@ -190,7 +190,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { playSound(default_mp3_path + "Demonstration ready mode.mp3"); setLED(0x01 | 0x02 | 0x04); } else if (msg->data == "user_long") { - // it's using in humanoid_robot_manager + // it's using in humanoid_robot_intelligence_control_system_manager // torque on and going to init pose } } @@ -272,7 +272,7 @@ void playSound(const std::string &path) { } void setLED(int led) { - humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led); @@ -290,7 +290,7 @@ bool checkManagerRunning(std::string &manager_name) { return true; } - ROS_ERROR("Can't find humanoid_robot_manager"); + ROS_ERROR("Can't find humanoid_robot_intelligence_control_system_manager"); return false; } diff --git a/humanoid_robot_demo/src/soccer/ball_follower.cpp b/humanoid_robot_intelligence_control_system_demo/src/soccer/ball_follower.cpp similarity index 92% rename from humanoid_robot_demo/src/soccer/ball_follower.cpp rename to humanoid_robot_intelligence_control_system_demo/src/soccer/ball_follower.cpp index cfd00ed..98916b3 100644 --- a/humanoid_robot_demo/src/soccer/ball_follower.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/soccer/ball_follower.cpp @@ -16,9 +16,9 @@ /* Author: Kayman Jung */ -#include "humanoid_robot_demo/ball_follower.h" +#include "humanoid_robot_intelligence_control_system_demo/ball_follower.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { BallFollower::BallFollower() : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), @@ -34,17 +34,17 @@ BallFollower::BallFollower() current_x_move_(0.005), current_r_angle_(0), curr_period_time_(0.6), accum_period_time_(0.0), DEBUG_PRINT(false) { current_joint_states_sub_ = - nh_.subscribe("/humanoid_robot/goal_joint_states", 10, + nh_.subscribe("/humanoid_robot_intelligence_control_system/goal_joint_states", 10, &BallFollower::currentJointStatesCallback, this); set_walking_command_pub_ = - nh_.advertise("/humanoid_robot/walking/command", 0); + nh_.advertise("/humanoid_robot_intelligence_control_system/walking/command", 0); set_walking_param_pub_ = - nh_.advertise( - "/humanoid_robot/walking/set_params", 0); + nh_.advertise( + "/humanoid_robot_intelligence_control_system/walking/set_params", 0); get_walking_param_client_ = - nh_.serviceClient( - "/humanoid_robot/walking/get_params"); + nh_.serviceClient( + "/humanoid_robot_intelligence_control_system/walking/get_params"); prev_time_ = ros::Time::now(); } @@ -306,7 +306,7 @@ void BallFollower::setWalkingParam(double x_move, double y_move, } bool BallFollower::getWalkingParam() { - humanoid_robot_walking_module_msgs::GetWalkingParam walking_param_msg; + humanoid_robot_intelligence_control_system_walking_module_msgs::GetWalkingParam walking_param_msg; if (get_walking_param_client_.call(walking_param_msg)) { current_walking_param_ = walking_param_msg.response.parameters; @@ -322,4 +322,4 @@ bool BallFollower::getWalkingParam() { } } -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op diff --git a/humanoid_robot_demo/src/soccer/ball_tracker.cpp b/humanoid_robot_intelligence_control_system_demo/src/soccer/ball_tracker.cpp similarity index 93% rename from humanoid_robot_demo/src/soccer/ball_tracker.cpp rename to humanoid_robot_intelligence_control_system_demo/src/soccer/ball_tracker.cpp index 9f7c6fa..9cbeba4 100644 --- a/humanoid_robot_demo/src/soccer/ball_tracker.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/soccer/ball_tracker.cpp @@ -16,9 +16,9 @@ /* Author: Kayman Jung */ -#include "humanoid_robot_demo/ball_tracker.h" +#include "humanoid_robot_intelligence_control_system_demo/ball_tracker.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { BallTracker::BallTracker() : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), @@ -36,11 +36,11 @@ BallTracker::BallTracker() << d_gain_); head_joint_offset_pub_ = nh_.advertise( - "/humanoid_robot/head_control/set_joint_states_offset", 0); + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states_offset", 0); head_joint_pub_ = nh_.advertise( - "/humanoid_robot/head_control/set_joint_states", 0); + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", 0); head_scan_pub_ = nh_.advertise( - "/humanoid_robot/head_control/scan_command", 0); + "/humanoid_robot_intelligence_control_system/head_control/scan_command", 0); // error_pub_ = // nh_.advertise("/ball_tracker/errors", 0); @@ -54,7 +54,7 @@ BallTracker::BallTracker() BallTracker::~BallTracker() {} void BallTracker::ballPositionCallback( - const humanoid_robot_ball_detector::CircleSetStamped::ConstPtr &msg) { + const humanoid_robot_intelligence_control_system_ball_detector::CircleSetStamped::ConstPtr &msg) { for (int idx = 0; idx < msg->circles.size(); idx++) { if (ball_position_.z >= msg->circles[idx].z) continue; @@ -264,4 +264,4 @@ void BallTracker::scanBall() { head_scan_pub_.publish(scan_msg); } -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op diff --git a/humanoid_robot_demo/src/soccer/soccer_demo.cpp b/humanoid_robot_intelligence_control_system_demo/src/soccer/soccer_demo.cpp similarity index 86% rename from humanoid_robot_demo/src/soccer/soccer_demo.cpp rename to humanoid_robot_intelligence_control_system_demo/src/soccer/soccer_demo.cpp index 1c2c559..3a0bba6 100644 --- a/humanoid_robot_demo/src/soccer/soccer_demo.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/soccer/soccer_demo.cpp @@ -16,9 +16,9 @@ /* Author: Kayman Jung */ -#include "humanoid_robot_demo/soccer_demo.h" +#include "humanoid_robot_intelligence_control_system_demo/soccer_demo.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { SoccerDemo::SoccerDemo() : FALL_FORWARD_LIMIT(60), FALL_BACK_LIMIT(-60), SPIN_RATE(30), @@ -32,7 +32,7 @@ SoccerDemo::SoccerDemo() ros::NodeHandle nh(ros::this_node::getName()); - std::string default_path = ros::package::getPath("humanoid_robot_gui_demo") + + std::string default_path = ros::package::getPath("humanoid_robot_intelligence_control_system_gui_demo") + "/config/gui_config.yaml"; std::string path = nh.param("demo_config", default_path); parseJointNameFromYaml(path); @@ -167,26 +167,26 @@ void SoccerDemo::callbackThread() { // subscriber & publisher module_control_pub_ = - nh.advertise( - "/humanoid_robot/set_joint_ctrl_modules", 0); + nh.advertise( + "/humanoid_robot_intelligence_control_system/set_joint_ctrl_modules", 0); motion_index_pub_ = - nh.advertise("/humanoid_robot/action/page_num", 0); - rgb_led_pub_ = nh.advertise( - "/humanoid_robot/sync_write_item", 0); + nh.advertise("/humanoid_robot_intelligence_control_system/action/page_num", 0); + rgb_led_pub_ = nh.advertise( + "/humanoid_robot_intelligence_control_system/sync_write_item", 0); - buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, + buttuon_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, &SoccerDemo::buttonHandlerCallback, this); - demo_command_sub_ = nh.subscribe("/humanoid_robot/demo_command", 1, + demo_command_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/demo_command", 1, &SoccerDemo::demoCommandCallback, this); - imu_data_sub_ = nh.subscribe("/humanoid_robot/open_cr/imu", 1, + imu_data_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/imu", 1, &SoccerDemo::imuDataCallback, this); is_running_client_ = - nh.serviceClient( - "/humanoid_robot/action/is_running"); + nh.serviceClient( + "/humanoid_robot_intelligence_control_system/action/is_running"); set_joint_module_client_ = - nh.serviceClient( - "/humanoid_robot/set_present_joint_ctrl_modules"); + nh.serviceClient( + "/humanoid_robot_intelligence_control_system/set_present_joint_ctrl_modules"); test_pub_ = nh.advertise("/debug_text", 0); @@ -239,7 +239,7 @@ void SoccerDemo::trackingThread() { void SoccerDemo::setBodyModuleToDemo(const std::string &body_module, bool with_head_control) { - humanoid_robot_controller_msgs::JointCtrlModule control_msg; + humanoid_robot_intelligence_control_system_controller_msgs::JointCtrlModule control_msg; std::string head_module = "head_control_module"; std::map::iterator joint_iter; @@ -271,7 +271,7 @@ void SoccerDemo::setModuleToDemo(const std::string &module_name) { if (enable_ == false) return; - humanoid_robot_controller_msgs::JointCtrlModule control_msg; + humanoid_robot_intelligence_control_system_controller_msgs::JointCtrlModule control_msg; std::map::iterator joint_iter; for (joint_iter = id_joint_table_.begin(); @@ -289,8 +289,8 @@ void SoccerDemo::setModuleToDemo(const std::string &module_name) { } void SoccerDemo::callServiceSettingModule( - const humanoid_robot_controller_msgs::JointCtrlModule &modules) { - humanoid_robot_controller_msgs::SetJointModule set_joint_srv; + const humanoid_robot_intelligence_control_system_controller_msgs::JointCtrlModule &modules) { + humanoid_robot_intelligence_control_system_controller_msgs::SetJointModule set_joint_srv; set_joint_srv.request.joint_name = modules.joint_name; set_joint_srv.request.module_name = modules.module_name; @@ -402,7 +402,7 @@ void SoccerDemo::imuDataCallback(const sensor_msgs::Imu::ConstPtr &msg) { Eigen::Quaterniond orientation(msg->orientation.w, msg->orientation.x, msg->orientation.y, msg->orientation.z); Eigen::MatrixXd rpy_orientation = - humanoid_robot_framework::convertQuaternionToRPY(orientation); + humanoid_robot_intelligence_control_system_framework::convertQuaternionToRPY(orientation); rpy_orientation *= (180 / M_PI); ROS_INFO_COND(DEBUG_PRINT, "Roll : %3.2f, Pitch : %2.2f", @@ -455,12 +455,12 @@ void SoccerDemo::handleKick(int ball_position) { // kick motion switch (ball_position) { - case humanoid_robot_op::BallFollower::OnRight: + case humanoid_robot_intelligence_control_system_op::BallFollower::OnRight: std::cout << "Kick Motion [R]: " << ball_position << std::endl; playMotion(is_grass_ ? RightKick + ForGrass : RightKick); break; - case humanoid_robot_op::BallFollower::OnLeft: + case humanoid_robot_intelligence_control_system_op::BallFollower::OnLeft: std::cout << "Kick Motion [L]: " << ball_position << std::endl; playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); break; @@ -506,13 +506,13 @@ void SoccerDemo::handleKick() { } switch (ball_position) { - case humanoid_robot_op::BallFollower::OnRight: + case humanoid_robot_intelligence_control_system_op::BallFollower::OnRight: std::cout << "Kick Motion [R]: " << ball_position << std::endl; sendDebugTopic("Kick the ball using Right foot"); playMotion(is_grass_ ? RightKick + ForGrass : RightKick); break; - case humanoid_robot_op::BallFollower::OnLeft: + case humanoid_robot_intelligence_control_system_op::BallFollower::OnLeft: std::cout << "Kick Motion [L]: " << ball_position << std::endl; sendDebugTopic("Kick the ball using Left foot"); playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); @@ -585,7 +585,7 @@ void SoccerDemo::setRGBLED(int blue, int green, int red) { int led_full_unit = 0x1F; int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); - humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED_RGB"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led_value); @@ -595,7 +595,7 @@ void SoccerDemo::setRGBLED(int blue, int green, int red) { // check running of action bool SoccerDemo::isActionRunning() { - humanoid_robot_action_module_msgs::IsRunning is_running_srv; + humanoid_robot_intelligence_control_system_action_module_msgs::IsRunning is_running_srv; if (is_running_client_.call(is_running_srv) == false) { ROS_ERROR("Failed to get action status"); @@ -616,4 +616,4 @@ void SoccerDemo::sendDebugTopic(const std::string &msgs) { test_pub_.publish(debug_msg); } -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op diff --git a/humanoid_robot_demo/src/test/button_test.cpp b/humanoid_robot_intelligence_control_system_demo/src/test/button_test.cpp similarity index 83% rename from humanoid_robot_demo/src/test/button_test.cpp rename to humanoid_robot_intelligence_control_system_demo/src/test/button_test.cpp index 7429d44..d6ea5a0 100644 --- a/humanoid_robot_demo/src/test/button_test.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/test/button_test.cpp @@ -16,9 +16,9 @@ /* Author: Kayman Jung */ -#include "humanoid_robot_demo/button_test.h" +#include "humanoid_robot_intelligence_control_system_demo/button_test.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { ButtonTest::ButtonTest() : SPIN_RATE(30), led_count_(0), rgb_led_count_(0) { enable_ = false; @@ -31,7 +31,7 @@ ButtonTest::ButtonTest() : SPIN_RATE(30), led_count_(0), rgb_led_count_(0) { boost::thread(boost::bind(&ButtonTest::processThread, this)); default_mp3_path_ = - ros::package::getPath("humanoid_robot_demo") + "/data/mp3/test/"; + ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/data/mp3/test/"; } ButtonTest::~ButtonTest() {} @@ -64,11 +64,11 @@ void ButtonTest::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - rgb_led_pub_ = nh.advertise( - "/humanoid_robot/sync_write_item", 0); + rgb_led_pub_ = nh.advertise( + "/humanoid_robot_intelligence_control_system/sync_write_item", 0); play_sound_pub_ = nh.advertise("/play_sound_file", 0); - buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, + buttuon_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, &ButtonTest::buttonHandlerCallback, this); while (nh.ok()) { @@ -110,7 +110,7 @@ void ButtonTest::setRGBLED(int blue, int green, int red) { int led_full_unit = 0x1F; int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); - humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED_RGB"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led_value); @@ -119,7 +119,7 @@ void ButtonTest::setRGBLED(int blue, int green, int red) { } void ButtonTest::setLED(int led) { - humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led); @@ -134,4 +134,4 @@ void ButtonTest::playSound(const std::string &path) { play_sound_pub_.publish(sound_msg); } -} /* namespace humanoid_robot_op */ +} /* namespace humanoid_robot_intelligence_control_system_op */ diff --git a/humanoid_robot_demo/src/test/mic_test.cpp b/humanoid_robot_intelligence_control_system_demo/src/test/mic_test.cpp similarity index 91% rename from humanoid_robot_demo/src/test/mic_test.cpp rename to humanoid_robot_intelligence_control_system_demo/src/test/mic_test.cpp index a82bbaf..008755b 100644 --- a/humanoid_robot_demo/src/test/mic_test.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/test/mic_test.cpp @@ -16,9 +16,9 @@ /* Author: Kayman Jung */ -#include "humanoid_robot_demo/mic_test.h" +#include "humanoid_robot_intelligence_control_system_demo/mic_test.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { MicTest::MicTest() : SPIN_RATE(30), is_wait_(false), wait_time_(-1), test_status_(Ready), @@ -32,10 +32,10 @@ MicTest::MicTest() boost::thread process_thread = boost::thread(boost::bind(&MicTest::processThread, this)); - recording_file_name_ = ros::package::getPath("humanoid_robot_demo") + + recording_file_name_ = ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/data/mp3/test/mic-test.wav"; default_mp3_path_ = - ros::package::getPath("humanoid_robot_demo") + "/data/mp3/test/"; + ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/data/mp3/test/"; start_time_ = ros::Time::now(); } @@ -118,7 +118,7 @@ void MicTest::callbackThread() { ros::NodeHandle nh(ros::this_node::getName()); // subscriber & publisher - buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, + buttuon_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, &MicTest::buttonHandlerCallback, this); play_sound_pub_ = nh.advertise("/play_sound_file", 0); @@ -235,4 +235,4 @@ void MicTest::startTimer(double wait_time) { void MicTest::finishTimer() { wait_time_ = -1; } -} /* namespace humanoid_robot_op */ +} /* namespace humanoid_robot_intelligence_control_system_op */ diff --git a/humanoid_robot_demo/src/test_node.cpp b/humanoid_robot_intelligence_control_system_demo/src/test_node.cpp similarity index 79% rename from humanoid_robot_demo/src/test_node.cpp rename to humanoid_robot_intelligence_control_system_demo/src/test_node.cpp index c55ad06..53e1209 100644 --- a/humanoid_robot_demo/src/test_node.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/test_node.cpp @@ -20,13 +20,13 @@ #include #include -#include "humanoid_robot_controller_msgs/SyncWriteItem.h" -#include "humanoid_robot_demo/action_demo.h" -#include "humanoid_robot_demo/button_test.h" -#include "humanoid_robot_demo/mic_test.h" -#include "humanoid_robot_demo/soccer_demo.h" -#include "humanoid_robot_demo/vision_demo.h" -#include "humanoid_robot_math/humanoid_robot_linear_algebra.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_intelligence_control_system_demo/action_demo.h" +#include "humanoid_robot_intelligence_control_system_demo/button_test.h" +#include "humanoid_robot_intelligence_control_system_demo/mic_test.h" +#include "humanoid_robot_intelligence_control_system_demo/soccer_demo.h" +#include "humanoid_robot_intelligence_control_system_demo/vision_demo.h" +#include "humanoid_robot_intelligence_control_system_math/humanoid_robot_intelligence_control_system_linear_algebra.h" enum Demo_Status { Ready = 0, @@ -66,33 +66,33 @@ int main(int argc, char **argv) { ros::init(argc, argv, "self_test_node"); // create ros wrapper object - humanoid_robot_op::OPDemo *current_demo = NULL; - humanoid_robot_op::SoccerDemo *soccer_demo = - new humanoid_robot_op::SoccerDemo(); - humanoid_robot_op::ActionDemo *action_demo = - new humanoid_robot_op::ActionDemo(); - humanoid_robot_op::VisionDemo *vision_demo = - new humanoid_robot_op::VisionDemo(); - humanoid_robot_op::ButtonTest *button_test = - new humanoid_robot_op::ButtonTest(); - humanoid_robot_op::MicTest *mic_test = new humanoid_robot_op::MicTest(); + humanoid_robot_intelligence_control_system_op::OPDemo *current_demo = NULL; + humanoid_robot_intelligence_control_system_op::SoccerDemo *soccer_demo = + new humanoid_robot_intelligence_control_system_op::SoccerDemo(); + humanoid_robot_intelligence_control_system_op::ActionDemo *action_demo = + new humanoid_robot_intelligence_control_system_op::ActionDemo(); + humanoid_robot_intelligence_control_system_op::VisionDemo *vision_demo = + new humanoid_robot_intelligence_control_system_op::VisionDemo(); + humanoid_robot_intelligence_control_system_op::ButtonTest *button_test = + new humanoid_robot_intelligence_control_system_op::ButtonTest(); + humanoid_robot_intelligence_control_system_op::MicTest *mic_test = new humanoid_robot_intelligence_control_system_op::MicTest(); ros::NodeHandle nh(ros::this_node::getName()); init_pose_pub = - nh.advertise("/humanoid_robot/base/ini_pose", 0); + nh.advertise("/humanoid_robot_intelligence_control_system/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); - led_pub = nh.advertise( - "/humanoid_robot/sync_write_item", 0); + led_pub = nh.advertise( + "/humanoid_robot_intelligence_control_system/sync_write_item", 0); dxl_torque_pub = - nh.advertise("/humanoid_robot/dxl_torque", 0); + nh.advertise("/humanoid_robot_intelligence_control_system/dxl_torque", 0); ros::Subscriber buttuon_sub = - nh.subscribe("/humanoid_robot/open_cr/button", 1, buttonHandlerCallback); + nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = - nh.subscribe("/humanoid_robot/mode_command", 1, demoModeCommandCallback); + nh.subscribe("/humanoid_robot_intelligence_control_system/mode_command", 1, demoModeCommandCallback); default_mp3_path = - ros::package::getPath("humanoid_robot_demo") + "/data/mp3/"; + ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/data/mp3/"; ros::start(); @@ -100,7 +100,7 @@ int main(int argc, char **argv) { ros::Rate loop_rate(SPIN_RATE); // wait for starting of manager - std::string manager_name = "/humanoid_robot_manager"; + std::string manager_name = "/humanoid_robot_intelligence_control_system_manager"; while (ros::ok()) { ros::Duration(1.0).sleep(); @@ -108,7 +108,7 @@ int main(int argc, char **argv) { break; ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } - ROS_WARN("Waiting for humanoid_robot manager"); + ROS_WARN("Waiting for humanoid_robot_intelligence_control_system manager"); } // init procedure @@ -219,7 +219,7 @@ void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { playSound(default_mp3_path + "test/Self test ready mode.mp3"); setLED(0x01 | 0x02 | 0x04); } else if (msg->data == "user_long") { - // it's using in humanoid_robot_manager + // it's using in humanoid_robot_intelligence_control_system_manager // torque on and going to init pose } } @@ -321,7 +321,7 @@ void playSound(const std::string &path) { } void setLED(int led) { - humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led); @@ -339,7 +339,7 @@ bool checkManagerRunning(std::string &manager_name) { return true; } - ROS_ERROR("Can't find humanoid_robot_manager"); + ROS_ERROR("Can't find humanoid_robot_intelligence_control_system_manager"); return false; } diff --git a/humanoid_robot_demo/src/vision/face_tracker.cpp b/humanoid_robot_intelligence_control_system_demo/src/vision/face_tracker.cpp similarity index 90% rename from humanoid_robot_demo/src/vision/face_tracker.cpp rename to humanoid_robot_intelligence_control_system_demo/src/vision/face_tracker.cpp index 6bd0705..20de21e 100644 --- a/humanoid_robot_demo/src/vision/face_tracker.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/vision/face_tracker.cpp @@ -16,24 +16,24 @@ /* Author: Kayman Jung */ -#include "humanoid_robot_demo/face_tracker.h" +#include "humanoid_robot_intelligence_control_system_demo/face_tracker.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { FaceTracker::FaceTracker() : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), FOV_HEIGHT(21.6 * M_PI / 180), NOT_FOUND_THRESHOLD(50), use_head_scan_(false), count_not_found_(0), on_tracking_(false) { head_joint_offset_pub_ = nh_.advertise( - "/humanoid_robot/head_control/set_joint_states_offset", 0); + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states_offset", 0); head_joint_pub_ = nh_.advertise( - "/humanoid_robot/head_control/set_joint_states", 0); + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", 0); head_scan_pub_ = nh_.advertise( - "/humanoid_robot/head_control/scan_command", 0); + "/humanoid_robot_intelligence_control_system/head_control/scan_command", 0); face_position_sub_ = nh_.subscribe("/face_position", 1, &FaceTracker::facePositionCallback, this); - // face_tracking_command_sub_ = nh_.subscribe("/humanoid_robot/demo_command", + // face_tracking_command_sub_ = nh_.subscribe("/humanoid_robot_intelligence_control_system/demo_command", // 1, &FaceTracker::faceTrackerCommandCallback, this); } @@ -178,4 +178,4 @@ void FaceTracker::scanFace() { // ROS_INFO("Scan the ball"); } -} // namespace humanoid_robot_op +} // namespace humanoid_robot_intelligence_control_system_op diff --git a/humanoid_robot_demo/src/vision/vision_demo.cpp b/humanoid_robot_intelligence_control_system_demo/src/vision/vision_demo.cpp similarity index 83% rename from humanoid_robot_demo/src/vision/vision_demo.cpp rename to humanoid_robot_intelligence_control_system_demo/src/vision/vision_demo.cpp index 26e87c8..01e0047 100644 --- a/humanoid_robot_demo/src/vision/vision_demo.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/vision/vision_demo.cpp @@ -16,9 +16,9 @@ /* Author: Kayman Jung */ -#include "humanoid_robot_demo/vision_demo.h" +#include "humanoid_robot_intelligence_control_system_demo/vision_demo.h" -namespace humanoid_robot_op { +namespace humanoid_robot_intelligence_control_system_op { VisionDemo::VisionDemo() : SPIN_RATE(30), TIME_TO_INIT(10), tracking_status_(FaceTracker::Waiting) { @@ -121,22 +121,22 @@ void VisionDemo::callbackThread() { // subscriber & publisher module_control_pub_ = - nh.advertise("/humanoid_robot/enable_ctrl_module", 0); + nh.advertise("/humanoid_robot_intelligence_control_system/enable_ctrl_module", 0); motion_index_pub_ = - nh.advertise("/humanoid_robot/action/page_num", 0); - rgb_led_pub_ = nh.advertise( - "/humanoid_robot/sync_write_item", 0); + nh.advertise("/humanoid_robot_intelligence_control_system/action/page_num", 0); + rgb_led_pub_ = nh.advertise( + "/humanoid_robot_intelligence_control_system/sync_write_item", 0); face_tracking_command_pub_ = nh.advertise("/face_tracking/command", 0); - buttuon_sub_ = nh.subscribe("/humanoid_robot/open_cr/button", 1, + buttuon_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, &VisionDemo::buttonHandlerCallback, this); faceCoord_sub_ = nh.subscribe("/faceCoord", 1, &VisionDemo::facePositionCallback, this); set_joint_module_client_ = - nh.serviceClient( - "/humanoid_robot/set_present_ctrl_modules"); + nh.serviceClient( + "/humanoid_robot_intelligence_control_system/set_present_ctrl_modules"); while (nh.ok()) { ros::spinOnce(); @@ -171,7 +171,7 @@ void VisionDemo::setModuleToDemo(const std::string &module_name) { } void VisionDemo::callServiceSettingModule(const std::string &module_name) { - humanoid_robot_controller_msgs::SetModule set_module_srv; + humanoid_robot_intelligence_control_system_controller_msgs::SetModule set_module_srv; set_module_srv.request.module_name = module_name; if (set_joint_module_client_.call(set_module_srv) == false) { @@ -216,7 +216,7 @@ void VisionDemo::setRGBLED(int blue, int green, int red) { int led_full_unit = 0x1F; int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | (red & led_full_unit); - humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED_RGB"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led_value); @@ -224,4 +224,4 @@ void VisionDemo::setRGBLED(int blue, int green, int red) { rgb_led_pub_.publish(syncwrite_msg); } -} /* namespace humanoid_robot_op */ +} /* namespace humanoid_robot_intelligence_control_system_op */ diff --git a/humanoid_robot_read_write_demo/CHANGELOG.rst b/humanoid_robot_intelligence_control_system_read_write_demo/CHANGELOG.rst similarity index 90% rename from humanoid_robot_read_write_demo/CHANGELOG.rst rename to humanoid_robot_intelligence_control_system_read_write_demo/CHANGELOG.rst index 5b53cbd..db641ea 100644 --- a/humanoid_robot_read_write_demo/CHANGELOG.rst +++ b/humanoid_robot_intelligence_control_system_read_write_demo/CHANGELOG.rst @@ -1,5 +1,5 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package humanoid_robot_read_write_demo +Changelog for package humanoid_robot_intelligence_control_system_read_write_demo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.3.2 (2023-10-03) diff --git a/humanoid_robot_read_write_demo/CMakeLists.txt b/humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt similarity index 80% rename from humanoid_robot_read_write_demo/CMakeLists.txt rename to humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt index 40ef26a..da225ca 100644 --- a/humanoid_robot_read_write_demo/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt @@ -1,11 +1,11 @@ cmake_minimum_required(VERSION 3.8) -project(humanoid_robot_read_write_demo) +project(humanoid_robot_intelligence_control_system_read_write_demo) if($ENV{ROS_VERSION} EQUAL 1) find_package( catkin REQUIRED COMPONENTS - humanoid_robot_controller_msgs + humanoid_robot_intelligence_control_system_controller_msgs roscpp sensor_msgs std_msgs @@ -20,7 +20,7 @@ if($ENV{ROS_VERSION} EQUAL 1) INCLUDE_DIRS CATKIN_DEPENDS roscpp - humanoid_robot_controller_msgs + humanoid_robot_intelligence_control_system_controller_msgs roscpp sensor_msgs std_msgs diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_read_write.launch b/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_read_write.launch new file mode 100644 index 0000000..2893401 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_read_write.launch @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_read_write_demo/package.xml b/humanoid_robot_intelligence_control_system_read_write_demo/package.xml similarity index 59% rename from humanoid_robot_read_write_demo/package.xml rename to humanoid_robot_intelligence_control_system_read_write_demo/package.xml index d2f8af4..0efd54a 100644 --- a/humanoid_robot_read_write_demo/package.xml +++ b/humanoid_robot_intelligence_control_system_read_write_demo/package.xml @@ -1,9 +1,9 @@ - humanoid_robot_read_write_demo + humanoid_robot_intelligence_control_system_read_write_demo 0.3.2 - The humanoid_robot_read_write_demo package + The humanoid_robot_intelligence_control_system_read_write_demo package Apache 2.0 Ronaldson Bellande @@ -14,20 +14,20 @@ roscpp std_msgs sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_manager roscpp std_msgs sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_manager roscpp std_msgs sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_manager ament_cmake @@ -35,19 +35,19 @@ roscpp std_msgs sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_manager roscpp std_msgs sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_manager roscpp std_msgs sensor_msgs - humanoid_robot_controller_msgs - humanoid_robot_manager + humanoid_robot_intelligence_control_system_controller_msgs + humanoid_robot_intelligence_control_system_manager diff --git a/humanoid_robot_read_write_demo/src/read_write.cpp b/humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.cpp similarity index 80% rename from humanoid_robot_read_write_demo/src/read_write.cpp rename to humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.cpp index e40f235..949af70 100644 --- a/humanoid_robot_read_write_demo/src/read_write.cpp +++ b/humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.cpp @@ -20,8 +20,8 @@ #include #include -#include "humanoid_robot_controller_msgs/SetModule.h" -#include "humanoid_robot_controller_msgs/SyncWriteItem.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SetModule.h" +#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); void jointstatesCallback(const sensor_msgs::JointState::ConstPtr &msg); @@ -62,32 +62,32 @@ int main(int argc, char **argv) { ros::NodeHandle nh(ros::this_node::getName()); - init_pose_pub = nh.advertise("/humanoid_robot/base/ini_pose", 0); - sync_write_pub = nh.advertise( - "/humanoid_robot/sync_write_item", 0); - dxl_torque_pub = nh.advertise("/humanoid_robot/dxl_torque", 0); + init_pose_pub = nh.advertise("/humanoid_robot_intelligence_control_system/base/ini_pose", 0); + sync_write_pub = nh.advertise( + "/humanoid_robot_intelligence_control_system/sync_write_item", 0); + dxl_torque_pub = nh.advertise("/humanoid_robot_intelligence_control_system/dxl_torque", 0); write_joint_pub = - nh.advertise("/humanoid_robot/set_joint_states", 0); + nh.advertise("/humanoid_robot_intelligence_control_system/set_joint_states", 0); write_joint_pub2 = nh.advertise( - "/humanoid_robot/direct_control/set_joint_states", 0); + "/humanoid_robot_intelligence_control_system/direct_control/set_joint_states", 0); read_joint_sub = - nh.subscribe("/humanoid_robot/present_joint_states", 1, jointstatesCallback); + nh.subscribe("/humanoid_robot_intelligence_control_system/present_joint_states", 1, jointstatesCallback); buttuon_sub = - nh.subscribe("/humanoid_robot/open_cr/button", 1, buttonHandlerCallback); + nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, buttonHandlerCallback); // service set_joint_module_client = - nh.serviceClient( - "/humanoid_robot/set_present_ctrl_modules"); + nh.serviceClient( + "/humanoid_robot_intelligence_control_system/set_present_ctrl_modules"); ros::start(); // set node loop rate ros::Rate loop_rate(SPIN_RATE); - // wait for starting of humanoid_robot_manager - std::string manager_name = "/humanoid_robot_manager"; + // wait for starting of humanoid_robot_intelligence_control_system_manager + std::string manager_name = "/humanoid_robot_intelligence_control_system_manager"; while (ros::ok()) { ros::Duration(1.0).sleep(); @@ -95,7 +95,7 @@ int main(int argc, char **argv) { break; ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); } - ROS_WARN("Waiting for humanoid_robot manager"); + ROS_WARN("Waiting for humanoid_robot_intelligence_control_system manager"); } readyToDemo(); @@ -116,7 +116,7 @@ int main(int argc, char **argv) { } void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { - // starting demo using humanoid_robot_controller + // starting demo using humanoid_robot_intelligence_control_system_controller if (msg->data == "mode") { control_module = Framework; ROS_INFO("Button : mode | Framework"); @@ -215,7 +215,7 @@ void goInitPose() { } void setLED(int led) { - humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led); @@ -233,12 +233,12 @@ bool checkManagerRunning(std::string &manager_name) { return true; } - ROS_ERROR("Can't find humanoid_robot_manager"); + ROS_ERROR("Can't find humanoid_robot_intelligence_control_system_manager"); return false; } void setModule(const std::string &module_name) { - humanoid_robot_controller_msgs::SetModule set_module_srv; + humanoid_robot_intelligence_control_system_controller_msgs::SetModule set_module_srv; set_module_srv.request.module_name = module_name; if (set_joint_module_client.call(set_module_srv) == false) { @@ -257,7 +257,7 @@ void torqueOnAll() { } void torqueOff(const std::string &body_side) { - humanoid_robot_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; int torque_value = 0; syncwrite_msg.item_name = "torque_enable"; diff --git a/humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch b/humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch deleted file mode 100644 index 3d1bc19..0000000 --- a/humanoid_robot_read_write_demo/launch/humanoid_robot_read_write.launch +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - From 61231e1e1174ff59a6fff7e4ea8c43f63e467f5a Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Mon, 13 Nov 2023 18:46:48 -0500 Subject: [PATCH 137/172] latest pushes --- ...ntelligence_control_system_bringup.launch} | 0 ...ntrol_system_bringup_visualization.launch} | 0 .../src/demo_node.cpp | 29 ++++++++++++------- ...lligence_control_system_read_write.launch} | 0 4 files changed, 18 insertions(+), 11 deletions(-) rename humanoid_robot_intelligence_control_system_bringup/launch/{humanoid_robot_bringup.launch => humanoid_robot_intelligence_control_system_bringup.launch} (100%) rename humanoid_robot_intelligence_control_system_bringup/launch/{humanoid_robot_bringup_visualization.launch => humanoid_robot_intelligence_control_system_bringup_visualization.launch} (100%) rename humanoid_robot_intelligence_control_system_read_write_demo/launch/{humanoid_robot_read_write.launch => humanoid_robot_intelligence_control_system_read_write.launch} (100%) diff --git a/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_bringup.launch b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup.launch similarity index 100% rename from humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_bringup.launch rename to humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup.launch diff --git a/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_bringup_visualization.launch b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch similarity index 100% rename from humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_bringup_visualization.launch rename to humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch diff --git a/humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp b/humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp index 7df1268..523b62a 100644 --- a/humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp +++ b/humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp @@ -71,20 +71,25 @@ int main(int argc, char **argv) { ros::NodeHandle nh(ros::this_node::getName()); - init_pose_pub = - nh.advertise("/humanoid_robot_intelligence_control_system/base/ini_pose", 0); + init_pose_pub = nh.advertise( + "/humanoid_robot_intelligence_control_system/base/ini_pose", 0); play_sound_pub = nh.advertise("/play_sound_file", 0); - led_pub = nh.advertise( - "/humanoid_robot_intelligence_control_system/sync_write_item", 0); - dxl_torque_pub = - nh.advertise("/humanoid_robot_intelligence_control_system/dxl_torque", 0); + led_pub = + nh.advertise( + "/humanoid_robot_intelligence_control_system/sync_write_item", 0); + dxl_torque_pub = nh.advertise( + "/humanoid_robot_intelligence_control_system/dxl_torque", 0); ros::Subscriber buttuon_sub = - nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, buttonHandlerCallback); + nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", + 1, buttonHandlerCallback); ros::Subscriber mode_command_sub = - nh.subscribe("/humanoid_robot_intelligence_control_system/mode_command", 1, demoModeCommandCallback); + nh.subscribe("/humanoid_robot_intelligence_control_system/mode_command", + 1, demoModeCommandCallback); default_mp3_path = - ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/data/mp3/"; + ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + + "/data/mp3/"; ros::start(); @@ -92,7 +97,8 @@ int main(int argc, char **argv) { ros::Rate loop_rate(SPIN_RATE); // wait for starting of manager - std::string manager_name = "/humanoid_robot_intelligence_control_system_manager"; + std::string manager_name = + "/humanoid_robot_intelligence_control_system_manager"; while (ros::ok()) { ros::Duration(1.0).sleep(); @@ -272,7 +278,8 @@ void playSound(const std::string &path) { } void setLED(int led) { - humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; + humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem + syncwrite_msg; syncwrite_msg.item_name = "LED"; syncwrite_msg.joint_name.push_back("open-cr"); syncwrite_msg.value.push_back(led); diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_read_write.launch b/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_intelligence_control_system_read_write.launch similarity index 100% rename from humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_read_write.launch rename to humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_intelligence_control_system_read_write.launch From 43b3c60cd1a895c38376f60d52959d5466b56309 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Thu, 30 Nov 2023 19:59:29 -0500 Subject: [PATCH 138/172] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9066ff0..b8a908e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ROS/ROS2 Humanoid Robot Demos +# ROS/ROS2 Humanoid Robot Intelligence Control System Demos [![Website](https://img.shields.io/badge/Visit%20our-Website-0099cc?style=for-the-badge)](https://robotics-sensors.github.io) [![Discord](https://img.shields.io/badge/Join%20our-Discord-7289DA?logo=discord&style=for-the-badge)](https://discord.gg/Yc72nd4w) From fbcd301f05e20ab4f30685543442e2d0f97573e5 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Thu, 30 Nov 2023 21:24:59 -0500 Subject: [PATCH 139/172] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b8a908e..f9291c2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ROS/ROS2 Humanoid Robot Intelligence Control System Demos +# ROS/ROS2 {BR&SRI} Humanoid Robot Intelligence Control System Demos [![Website](https://img.shields.io/badge/Visit%20our-Website-0099cc?style=for-the-badge)](https://robotics-sensors.github.io) [![Discord](https://img.shields.io/badge/Join%20our-Discord-7289DA?logo=discord&style=for-the-badge)](https://discord.gg/Yc72nd4w) From 6ffe8ae275c4d5d134d73bde053c6e2ce70a403b Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Wed, 6 Dec 2023 02:56:03 -0500 Subject: [PATCH 140/172] Update README.md --- README.md | 75 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index f9291c2..2e84110 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,61 @@ -# ROS/ROS2 {BR&SRI} Humanoid Robot Intelligence Control System Demos +# Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos [![Website](https://img.shields.io/badge/Visit%20our-Website-0099cc?style=for-the-badge)](https://robotics-sensors.github.io) [![Discord](https://img.shields.io/badge/Join%20our-Discord-7289DA?logo=discord&style=for-the-badge)](https://discord.gg/Yc72nd4w) [![Sponsor](https://img.shields.io/badge/Sponsor-Robotics%20Sensors%20Research-red?style=for-the-badge&logo=github)](https://github.com/sponsors/Robotics-Sensors) -# Stats -[![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/network) -[![GitHub watchers](https://img.shields.io/github/watchers/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/watchers) +## 🤖 Explore Humanoid Robot Intelligence with Us! -[![GitHub issues](https://img.shields.io/github/issues/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/issues) -[![GitHub pull requests](https://img.shields.io/github/issues-pr/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/pulls) -[![GitHub license](https://img.shields.io/github/license/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/blob/main/LICENSE) +Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos repository! Here, we invite you to delve into the fascinating world of humanoid robotics, showcasing the innovative capabilities of our intelligent control system. -[![GitHub last commit](https://img.shields.io/github/last-commit/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/commits) -[![Visitor & Github Clones](https://img.shields.io/badge/dynamic/json?color=2e8b57&label=Visitor%20%26%20GitHub%20Clones&query=$.count&url=https://api.github.com/repos/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/traffic)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos) +### 🚀 Key Repository Stats +- ![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social) Starred by the community +- ![GitHub forks](https://img.shields.io/github/forks/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social) Forked by enthusiasts +- ![GitHub watchers](https://img.shields.io/github/watchers/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social) Watched by curious minds --------------------------------------------------------------------------------------------------------- -# Repository Website -https://robotics-sensors.github.io/humanoid_robot_intelligence_control_system_demos +- ![GitHub issues](https://img.shields.io/github/issues/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg) Actively addressing issues +- ![GitHub pull requests](https://img.shields.io/github/issues-pr/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg) Welcoming contributions +- ![GitHub license](https://img.shields.io/github/license/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg) Licensed under Apache 2.0 --------------------------------------------------------------------------------------------------------- -Updated Version [humanoid_robot_intelligence_control_system_module](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos) readme. -Old Version/Previous Used for Different Context [ROBOTIS-OP3-Demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) readme. +- ![GitHub last commit](https://img.shields.io/github/last-commit/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg) Latest updates +- ![Visitor & Github Clones](https://img.shields.io/badge/dynamic/json?color=2e8b57&label=Visitor%20%26%20GitHub%20Clones&query=$.count&url=https://api.github.com/repos/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/traffic) Engaging with the community + +--- + +## 🌐 Repository Website + +Explore our [repository website](https://robotics-sensors.github.io/humanoid_robot_intelligence_control_system_demos) for detailed documentation, tutorials, and additional information about our humanoid robot intelligence control system. + +--- + +### 🔄 Updates and Versions + +- **Updated Version:** [humanoid_robot_intelligence_control_system_module](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos) +- **Old Version/Previous Used for Different Context:** [ROBOTIS-OP3-Demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) + +--- + +# 🎉 Latest Release -# Release [![Latest Release](https://img.shields.io/github/v/release/Robotics-Sensors/humanoid_robot_intelligence_control_system_tools?style=for-the-badge&color=yellow)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/releases/) -# Contact -Depeding on the repository, If you are interested in accessing the complete version or other repository related to this repository, we kindly request that you reach out to the organization's director or the company behind this project. We invite you to explore the USE CASE to understand the specific terms and conditions for usage. To utilize this repository, it is imperative that you adhere to the guidelines outlined in the USE CASE. For those interested in showing their support, becoming a sponsor of the organization is an option, and detailed information can be found within the USE CASE and License documents. Furthermore, we encourage you to join our official Discord community, where you can engage with like-minded individuals, contribute to the project, and stay up-to-date with the latest developments. It's worth noting that while a fraction of research is publicly accessible, the majority remains private. To gain insights into the wealth of knowledge held by the Company or the organization's director, we recommend direct contact for more information. +--- --------------------------------------------------------------------------------------------------------- -## Important -The repository has diverged, as the old commits and codes are under the previous License and -the new commits and codes are under New License +## 📢 Important Announcement --------------------------------------------------------------------------------------------------------- -Latest versions and Maintainer is on organization https://github.com/Robotics-Sensors +The repository has recently undergone significant updates. Older commits and codes are covered under the previous license, while new commits and codes fall under the new license. +--- -# USE CASE --------------------------------------------------------------------------------------------------------- -* Every repository within our organization is a valuable resource that can be utilized for educational purposes by individuals who actively contribute to the repository or choose to become sponsors of the organization. For those who wish to use our services conversationally, the acquisition of a license and subscription from our company website is mandatory. This ensures that the services are appropriately compensated for their use. Additionally, for the 90% of services designated as private, acquiring a license and subscription can be facilitated through our company website. We encourage interested parties to visit our website to explore and procure the necessary licenses and subscriptions for the diverse range of services and products we offer. Your support and commitment enable us to maintain and enhance the quality of our offerings, contributing to a thriving collaborative environment. --------------------------------------------------------------------------------------------------------- +🚀 For the latest versions and updates, visit our organization: [Robotics-Sensors](https://github.com/Robotics-Sensors). -### Maintainer -* Ronaldson Bellande +### 🧑‍💼 Maintainer -## License -This SDK is distributed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0), see [LICENSE](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/blob/main/LICENSE) and [NOTICE](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/blob/main/LICENSE) for more information. +Meet our dedicated maintainer, **Ronaldson Bellande**. + +--- + +## 📄 License + +This SDK is distributed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). For detailed information, refer to [LICENSE](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/blob/main/LICENSE) and [NOTICE](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/blob/main/LICENSE). From ec1a98631898e504be6e3bde461e6232fe2c59bf Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Mon, 1 Jan 2024 01:16:07 -0500 Subject: [PATCH 141/172] latest pushes --- .../launch/demo.launch | 22 ++++++++-------- .../face_detection_humanoid_robot.launch | 21 ++++++++++------ .../launch/self_test.launch | 25 ++++++++++--------- 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/humanoid_robot_intelligence_control_system_demo/launch/demo.launch b/humanoid_robot_intelligence_control_system_demo/launch/demo.launch index bd235f4..2734717 100644 --- a/humanoid_robot_intelligence_control_system_demo/launch/demo.launch +++ b/humanoid_robot_intelligence_control_system_demo/launch/demo.launch @@ -1,25 +1,25 @@ - + - - - - + - + - - - - + - + diff --git a/humanoid_robot_intelligence_control_system_demo/launch/face_detection_humanoid_robot.launch b/humanoid_robot_intelligence_control_system_demo/launch/face_detection_humanoid_robot.launch index 3dc87c8..dd680ac 100644 --- a/humanoid_robot_intelligence_control_system_demo/launch/face_detection_humanoid_robot.launch +++ b/humanoid_robot_intelligence_control_system_demo/launch/face_detection_humanoid_robot.launch @@ -1,16 +1,23 @@ - - - - - + + + + + - + $(arg face_cascade_name_4)" + output="screen"> diff --git a/humanoid_robot_intelligence_control_system_demo/launch/self_test.launch b/humanoid_robot_intelligence_control_system_demo/launch/self_test.launch index 38c2958..4751a5f 100644 --- a/humanoid_robot_intelligence_control_system_demo/launch/self_test.launch +++ b/humanoid_robot_intelligence_control_system_demo/launch/self_test.launch @@ -2,25 +2,26 @@ - + - - - - + - + - + - - - - - + + From f99f360f5e89691f6fa2340f5c7ee68d67f1b25d Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Thu, 8 Feb 2024 02:23:50 -0500 Subject: [PATCH 142/172] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 2e84110..c750338 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,10 @@ Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos repository! Here, we invite you to delve into the fascinating world of humanoid robotics, showcasing the innovative capabilities of our intelligent control system. +## 💻 Functionality To Switch from ROS to ROS2 Checkout The Below Repository + +[![Toggle ROS Versions](https://img.shields.io/badge/Toggle%20ROS%20Versions-Explore%20ROS%20and%20ROS2%20migration-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/ros_extension/) + ### 🚀 Key Repository Stats - ![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social) Starred by the community From 93e544d10ae23bf0cbb7a0b90ae44ca35e7d078f Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Mon, 29 Apr 2024 15:55:06 -0400 Subject: [PATCH 143/172] latest pushes --- .../package.xml | 16 +++ .../package.xml | 28 +++- .../package.xml | 130 +++++++++++++----- .../package.xml | 40 ++++-- 4 files changed, 164 insertions(+), 50 deletions(-) diff --git a/humanoid_robot_intelligence_control_system_ball_detector/package.xml b/humanoid_robot_intelligence_control_system_ball_detector/package.xml index 98502ed..63c6c18 100644 --- a/humanoid_robot_intelligence_control_system_ball_detector/package.xml +++ b/humanoid_robot_intelligence_control_system_ball_detector/package.xml @@ -1,3 +1,19 @@ + + humanoid_robot_intelligence_control_system_ball_detector diff --git a/humanoid_robot_intelligence_control_system_bringup/package.xml b/humanoid_robot_intelligence_control_system_bringup/package.xml index 2d44949..a145af4 100644 --- a/humanoid_robot_intelligence_control_system_bringup/package.xml +++ b/humanoid_robot_intelligence_control_system_bringup/package.xml @@ -1,3 +1,19 @@ + + humanoid_robot_intelligence_control_system_bringup @@ -19,8 +35,10 @@ robot_state_publisher rviz - humanoid_robot_intelligence_control_system_manager - humanoid_robot_intelligence_control_system_description + + humanoid_robot_intelligence_control_system_manager + + humanoid_robot_intelligence_control_system_description usb_cam joint_state_publisher robot_state_publisher @@ -43,8 +61,10 @@ robot_state_publisher rviz - humanoid_robot_intelligence_control_system_manager - humanoid_robot_intelligence_control_system_description + + humanoid_robot_intelligence_control_system_manager + + humanoid_robot_intelligence_control_system_description usb_cam joint_state_publisher robot_state_publisher diff --git a/humanoid_robot_intelligence_control_system_demo/package.xml b/humanoid_robot_intelligence_control_system_demo/package.xml index b55e2d3..79e4bc0 100644 --- a/humanoid_robot_intelligence_control_system_demo/package.xml +++ b/humanoid_robot_intelligence_control_system_demo/package.xml @@ -1,3 +1,19 @@ + + humanoid_robot_intelligence_control_system_demo @@ -17,18 +33,24 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_intelligence_control_system_controller_msgs - humanoid_robot_intelligence_control_system_walking_module_msgs - humanoid_robot_intelligence_control_system_action_module_msgs + + humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_walking_module_msgs + + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp humanoid_robot_intelligence_control_system_manager - humanoid_robot_intelligence_control_system_camera_setting_tool - humanoid_robot_intelligence_control_system_web_setting_tool + + humanoid_robot_intelligence_control_system_camera_setting_tool + + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection @@ -37,18 +59,25 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_intelligence_control_system_controller_msgs - humanoid_robot_intelligence_control_system_walking_module_msgs - humanoid_robot_intelligence_control_system_action_module_msgs + + humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_walking_module_msgs + + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp - humanoid_robot_intelligence_control_system_manager - humanoid_robot_intelligence_control_system_camera_setting_tool - humanoid_robot_intelligence_control_system_web_setting_tool + + humanoid_robot_intelligence_control_system_manager + + humanoid_robot_intelligence_control_system_camera_setting_tool + + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection @@ -57,18 +86,24 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_intelligence_control_system_controller_msgs - humanoid_robot_intelligence_control_system_walking_module_msgs - humanoid_robot_intelligence_control_system_action_module_msgs + + humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_walking_module_msgs + + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp humanoid_robot_intelligence_control_system_manager - humanoid_robot_intelligence_control_system_camera_setting_tool - humanoid_robot_intelligence_control_system_web_setting_tool + + humanoid_robot_intelligence_control_system_camera_setting_tool + + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection @@ -80,18 +115,24 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_intelligence_control_system_controller_msgs - humanoid_robot_intelligence_control_system_walking_module_msgs - humanoid_robot_intelligence_control_system_action_module_msgs + + humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_walking_module_msgs + + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp humanoid_robot_intelligence_control_system_manager - humanoid_robot_intelligence_control_system_camera_setting_tool - humanoid_robot_intelligence_control_system_web_setting_tool + + humanoid_robot_intelligence_control_system_camera_setting_tool + + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection @@ -100,18 +141,25 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_intelligence_control_system_controller_msgs - humanoid_robot_intelligence_control_system_walking_module_msgs - humanoid_robot_intelligence_control_system_action_module_msgs + + humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_walking_module_msgs + + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp - humanoid_robot_intelligence_control_system_manager - humanoid_robot_intelligence_control_system_camera_setting_tool - humanoid_robot_intelligence_control_system_web_setting_tool + + humanoid_robot_intelligence_control_system_manager + + humanoid_robot_intelligence_control_system_camera_setting_tool + + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection @@ -120,18 +168,24 @@ std_msgs sensor_msgs geometry_msgs - humanoid_robot_intelligence_control_system_controller_msgs - humanoid_robot_intelligence_control_system_walking_module_msgs - humanoid_robot_intelligence_control_system_action_module_msgs + + humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_walking_module_msgs + + humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + + humanoid_robot_intelligence_control_system_ball_detector boost eigen yaml-cpp humanoid_robot_intelligence_control_system_manager - humanoid_robot_intelligence_control_system_camera_setting_tool - humanoid_robot_intelligence_control_system_web_setting_tool + + humanoid_robot_intelligence_control_system_camera_setting_tool + + humanoid_robot_intelligence_control_system_web_setting_tool ros_madplay_player face_detection diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/package.xml b/humanoid_robot_intelligence_control_system_read_write_demo/package.xml index 0efd54a..5092833 100644 --- a/humanoid_robot_intelligence_control_system_read_write_demo/package.xml +++ b/humanoid_robot_intelligence_control_system_read_write_demo/package.xml @@ -1,3 +1,19 @@ + + humanoid_robot_intelligence_control_system_read_write_demo @@ -14,19 +30,23 @@ roscpp std_msgs sensor_msgs - humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_controller_msgs humanoid_robot_intelligence_control_system_manager roscpp std_msgs sensor_msgs - humanoid_robot_intelligence_control_system_controller_msgs - humanoid_robot_intelligence_control_system_manager + + humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_manager roscpp std_msgs sensor_msgs - humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_controller_msgs humanoid_robot_intelligence_control_system_manager @@ -35,19 +55,23 @@ roscpp std_msgs sensor_msgs - humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_controller_msgs humanoid_robot_intelligence_control_system_manager roscpp std_msgs sensor_msgs - humanoid_robot_intelligence_control_system_controller_msgs - humanoid_robot_intelligence_control_system_manager + + humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_manager roscpp std_msgs sensor_msgs - humanoid_robot_intelligence_control_system_controller_msgs + + humanoid_robot_intelligence_control_system_controller_msgs humanoid_robot_intelligence_control_system_manager From e72ce974e7d23586c2ef245bd262efbdd5de217c Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Mon, 29 Apr 2024 16:04:57 -0400 Subject: [PATCH 144/172] latest pushes --- .../CMakeLists.txt | 14 ++++++++++++++ .../CMakeLists.txt | 14 ++++++++++++++ .../CMakeLists.txt | 14 ++++++++++++++ .../CMakeLists.txt | 14 ++++++++++++++ 4 files changed, 56 insertions(+) diff --git a/humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt b/humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt index 40dad1a..dff5405 100644 --- a/humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt @@ -1,3 +1,17 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + cmake_minimum_required(VERSION 3.8) project(humanoid_robot_intelligence_control_system_ball_detector) diff --git a/humanoid_robot_intelligence_control_system_bringup/CMakeLists.txt b/humanoid_robot_intelligence_control_system_bringup/CMakeLists.txt index b0f7a88..3e75bd5 100644 --- a/humanoid_robot_intelligence_control_system_bringup/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_bringup/CMakeLists.txt @@ -1,3 +1,17 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + cmake_minimum_required(VERSION 3.8) project(humanoid_robot_intelligence_control_system_bringup) diff --git a/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt b/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt index 5d22368..081329a 100644 --- a/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt @@ -1,3 +1,17 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + cmake_minimum_required(VERSION 3.8) project(humanoid_robot_intelligence_control_system_demo) diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt b/humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt index da225ca..5daccda 100644 --- a/humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt @@ -1,3 +1,17 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + cmake_minimum_required(VERSION 3.8) project(humanoid_robot_intelligence_control_system_read_write_demo) From f5ef6280399f85b0c518923d05399666d69e37a4 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 7 May 2024 00:55:55 -0400 Subject: [PATCH 145/172] latest pushes --- .../package.xml | 4 ++-- .../package.xml | 4 ++-- humanoid_robot_intelligence_control_system_demo/package.xml | 4 ++-- .../package.xml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/humanoid_robot_intelligence_control_system_ball_detector/package.xml b/humanoid_robot_intelligence_control_system_ball_detector/package.xml index 63c6c18..8ac718f 100644 --- a/humanoid_robot_intelligence_control_system_ball_detector/package.xml +++ b/humanoid_robot_intelligence_control_system_ball_detector/package.xml @@ -1,5 +1,6 @@ + - humanoid_robot_intelligence_control_system_ball_detector 0.3.2 diff --git a/humanoid_robot_intelligence_control_system_bringup/package.xml b/humanoid_robot_intelligence_control_system_bringup/package.xml index a145af4..e652f1b 100644 --- a/humanoid_robot_intelligence_control_system_bringup/package.xml +++ b/humanoid_robot_intelligence_control_system_bringup/package.xml @@ -1,5 +1,6 @@ + - humanoid_robot_intelligence_control_system_bringup 0.3.2 diff --git a/humanoid_robot_intelligence_control_system_demo/package.xml b/humanoid_robot_intelligence_control_system_demo/package.xml index 79e4bc0..7495991 100644 --- a/humanoid_robot_intelligence_control_system_demo/package.xml +++ b/humanoid_robot_intelligence_control_system_demo/package.xml @@ -1,5 +1,6 @@ + - humanoid_robot_intelligence_control_system_demo 0.3.2 diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/package.xml b/humanoid_robot_intelligence_control_system_read_write_demo/package.xml index 5092833..3bcd921 100644 --- a/humanoid_robot_intelligence_control_system_read_write_demo/package.xml +++ b/humanoid_robot_intelligence_control_system_read_write_demo/package.xml @@ -1,5 +1,6 @@ + - humanoid_robot_intelligence_control_system_read_write_demo 0.3.2 From 22eea2535017c22919c7fe8efd1699286a7cfce9 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Tue, 7 May 2024 17:13:55 -0400 Subject: [PATCH 146/172] Update README.md --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c750338..8126025 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,18 @@ Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos repository! Here, we invite you to delve into the fascinating world of humanoid robotics, showcasing the innovative capabilities of our intelligent control system. +## 📢 Work with Bellande Algorithms and Models through Bellande's API! + +[![Bellande's Algorithm through Bellande API](https://img.shields.io/badge/Bellande's%20Algorithm%20through%20Bellande's%20API-Bellande%20API-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/Web-ROS-API) + +--- + ## 💻 Functionality To Switch from ROS to ROS2 Checkout The Below Repository [![Toggle ROS Versions](https://img.shields.io/badge/Toggle%20ROS%20Versions-Explore%20ROS%20and%20ROS2%20migration-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/ros_extension/) +--- + ### 🚀 Key Repository Stats - ![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social) Starred by the community @@ -56,7 +64,7 @@ The repository has recently undergone significant updates. Older commits and cod ### 🧑‍💼 Maintainer -Meet our dedicated maintainer, **Ronaldson Bellande**. +Meet our dedicated author & maintainer, **Ronaldson Bellande**. --- From a832e34c20202824f27b740ad8c6aa0b287f3fc9 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Wed, 8 May 2024 23:44:59 -0400 Subject: [PATCH 147/172] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 8126025..754cb24 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,12 @@ Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos reposit --- +## 🧑‍💼 Work with Bellande Models through Bellande Framework! + +[![Bellande's Algorithm through Bellande API](https://img.shields.io/badge/Bellande's%20Models%20through%20Bellande's%20Framework-Bellande%20Framework-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/ROS-MODELS) + +--- + ## 💻 Functionality To Switch from ROS to ROS2 Checkout The Below Repository [![Toggle ROS Versions](https://img.shields.io/badge/Toggle%20ROS%20Versions-Explore%20ROS%20and%20ROS2%20migration-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/ros_extension/) From 21e5bd4eb06ab119d40d1200fa0df9ad8c9f3a97 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Tue, 4 Jun 2024 21:39:56 -0400 Subject: [PATCH 148/172] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 754cb24..a5487a1 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,11 @@ Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos repository! Here, we invite you to delve into the fascinating world of humanoid robotics, showcasing the innovative capabilities of our intelligent control system. +## 🔄 Run and Experiment with the build Bellande's Humanoid Robot + +[![Bellande's Humanoid](https://img.shields.io/badge/Bellande's-Humanoid%20Robot%20Package-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/bellande_humanoid_robotics_package) + + ## 📢 Work with Bellande Algorithms and Models through Bellande's API! [![Bellande's Algorithm through Bellande API](https://img.shields.io/badge/Bellande's%20Algorithm%20through%20Bellande's%20API-Bellande%20API-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/Web-ROS-API) From e58fc1b9b7e2c61a80740a81ecc614f1a01fd3d6 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 11 Jun 2024 01:09:33 -0400 Subject: [PATCH 149/172] latest pushes --- README.md | 21 +--------- .../package.xml | 7 ---- ...ontrol_system_bringup_visualization.launch | 12 ++++-- .../CHANGELOG.rst | 29 ------------- .../CMakeLists.txt | 4 -- .../package.xml | 42 ------------------- ...oid_robot.launch => face_detection.launch} | 6 +-- .../package.xml | 12 ------ 8 files changed, 12 insertions(+), 121 deletions(-) delete mode 100644 humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst delete mode 100644 humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt delete mode 100644 humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/package.xml rename humanoid_robot_intelligence_control_system_demo/launch/{face_detection_humanoid_robot.launch => face_detection.launch} (75%) diff --git a/README.md b/README.md index a5487a1..c750338 100644 --- a/README.md +++ b/README.md @@ -8,29 +8,10 @@ Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos repository! Here, we invite you to delve into the fascinating world of humanoid robotics, showcasing the innovative capabilities of our intelligent control system. -## 🔄 Run and Experiment with the build Bellande's Humanoid Robot - -[![Bellande's Humanoid](https://img.shields.io/badge/Bellande's-Humanoid%20Robot%20Package-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/bellande_humanoid_robotics_package) - - -## 📢 Work with Bellande Algorithms and Models through Bellande's API! - -[![Bellande's Algorithm through Bellande API](https://img.shields.io/badge/Bellande's%20Algorithm%20through%20Bellande's%20API-Bellande%20API-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/Web-ROS-API) - ---- - -## 🧑‍💼 Work with Bellande Models through Bellande Framework! - -[![Bellande's Algorithm through Bellande API](https://img.shields.io/badge/Bellande's%20Models%20through%20Bellande's%20Framework-Bellande%20Framework-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/ROS-MODELS) - ---- - ## 💻 Functionality To Switch from ROS to ROS2 Checkout The Below Repository [![Toggle ROS Versions](https://img.shields.io/badge/Toggle%20ROS%20Versions-Explore%20ROS%20and%20ROS2%20migration-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/ros_extension/) ---- - ### 🚀 Key Repository Stats - ![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social) Starred by the community @@ -75,7 +56,7 @@ The repository has recently undergone significant updates. Older commits and cod ### 🧑‍💼 Maintainer -Meet our dedicated author & maintainer, **Ronaldson Bellande**. +Meet our dedicated maintainer, **Ronaldson Bellande**. --- diff --git a/humanoid_robot_intelligence_control_system_ball_detector/package.xml b/humanoid_robot_intelligence_control_system_ball_detector/package.xml index 8ac718f..d1d9c2c 100644 --- a/humanoid_robot_intelligence_control_system_ball_detector/package.xml +++ b/humanoid_robot_intelligence_control_system_ball_detector/package.xml @@ -44,7 +44,6 @@ the License. message_runtime message_runtime usb_cam - uvc_camera roscpp roslib @@ -61,7 +60,6 @@ the License. message_runtime message_runtime usb_cam - uvc_camera roscpp roslib @@ -78,7 +76,6 @@ the License. message_runtime message_runtime usb_cam - uvc_camera ament_cmake @@ -98,7 +95,6 @@ the License. message_runtime message_runtime usb_cam - uvc_camera roscpp roslib @@ -115,7 +111,6 @@ the License. message_runtime message_runtime usb_cam - uvc_camera roscpp roslib @@ -132,7 +127,5 @@ the License. message_runtime message_runtime usb_cam - uvc_camera - diff --git a/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch index ce2a352..7c8a537 100644 --- a/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch +++ b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch @@ -1,18 +1,22 @@ - + - [/humanoid_robot_intelligence_control_system/present_joint_states] + + [/humanoid_robot_intelligence_control_system/present_joint_states] - + - + diff --git a/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst b/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst deleted file mode 100644 index e3fba16..0000000 --- a/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CHANGELOG.rst +++ /dev/null @@ -1,29 +0,0 @@ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package humanoid_robot_intelligence_control_system_demo -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -0.3.1 (2023-09-27) ------------------- -* Starting from this point it under a new license -* Fix errors and Issues -* Rename Repository for a completely different purpose -* Make it compatible with ROS/ROS2 -* Upgrade version of all builds and make it more compatible -* Update package.xml and CMakeList.txt for to the latest versions -* Contributors & Maintainer: Ronaldson Bellande - -0.3.0 (2021-05-05) ------------------- -* Update package.xml and CMakeList.txt for noetic branch -* Contributors: Ronaldson Bellande - -0.1.0 (2018-04-19) ------------------- -* first release for ROS Kinetic -* added launch files in order to move the camera setting to humanoid_robot_intelligence_control_system_camera_setting package -* added missing package in find_package() -* updated CMakeLists.txt and package.xml of humanoid_robot_intelligence_control_system_bringup -* changed rviz config file -* refacoring to release -* split repositoryfrom ROBOTIS-HUMANOID_ROBOT -* Contributors: Kayman, Zerom, Yoshimaru Tanaka, Pyo diff --git a/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt b/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt deleted file mode 100644 index 96c17dd..0000000 --- a/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -cmake_minimum_required(VERSION 3.0.2) -project(humanoid_robot_intelligence_control_system_demo) -find_package(catkin REQUIRED) -catkin_metapackage() diff --git a/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/package.xml b/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/package.xml deleted file mode 100644 index 64825a0..0000000 --- a/humanoid_robot_intelligence_control_system_demo/humanoid_robot_humanoid_robot_demo/package.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - humanoid_robot_intelligence_control_system_demo - 0.3.0 - - ROS packages for the humanoid_robot_intelligence_control_system_demo (meta package) - - Apache 2.0 - Ronaldson Bellande - - catkin - - humanoid_robot_intelligence_control_system_ball_detector - humanoid_robot_intelligence_control_system_bringup - humanoid_robot_intelligence_control_system_demo - - humanoid_robot_intelligence_control_system_ball_detector - humanoid_robot_intelligence_control_system_bringup - humanoid_robot_intelligence_control_system_demo - - humanoid_robot_intelligence_control_system_ball_detector - humanoid_robot_intelligence_control_system_bringup - humanoid_robot_intelligence_control_system_demo - - - ament_cmake - - humanoid_robot_intelligence_control_system_ball_detector - humanoid_robot_intelligence_control_system_bringup - humanoid_robot_intelligence_control_system_demo - - humanoid_robot_intelligence_control_system_ball_detector - humanoid_robot_intelligence_control_system_bringup - humanoid_robot_intelligence_control_system_demo - - humanoid_robot_intelligence_control_system_ball_detector - humanoid_robot_intelligence_control_system_bringup - humanoid_robot_intelligence_control_system_demo - - - - diff --git a/humanoid_robot_intelligence_control_system_demo/launch/face_detection_humanoid_robot.launch b/humanoid_robot_intelligence_control_system_demo/launch/face_detection.launch similarity index 75% rename from humanoid_robot_intelligence_control_system_demo/launch/face_detection_humanoid_robot.launch rename to humanoid_robot_intelligence_control_system_demo/launch/face_detection.launch index dd680ac..068d79e 100644 --- a/humanoid_robot_intelligence_control_system_demo/launch/face_detection_humanoid_robot.launch +++ b/humanoid_robot_intelligence_control_system_demo/launch/face_detection.launch @@ -3,11 +3,11 @@ + default="$(find face_detection)/include/face_detection/HaarCascades/haarcascade_frontalface_alt2.xml" /> + default="$(find face_detection)/include/face_detection/HaarCascades/haarcascade_frontalface_alt_tree.xml" /> + default="$(find face_detection)/include/face_detection/HaarCascades/haarcascade_frontalface_default.xml" /> diff --git a/humanoid_robot_intelligence_control_system_demo/package.xml b/humanoid_robot_intelligence_control_system_demo/package.xml index 7495991..f0d81ce 100644 --- a/humanoid_robot_intelligence_control_system_demo/package.xml +++ b/humanoid_robot_intelligence_control_system_demo/package.xml @@ -51,8 +51,6 @@ the License. humanoid_robot_intelligence_control_system_camera_setting_tool humanoid_robot_intelligence_control_system_web_setting_tool - ros_madplay_player - face_detection roscpp roslib @@ -78,8 +76,6 @@ the License. humanoid_robot_intelligence_control_system_camera_setting_tool humanoid_robot_intelligence_control_system_web_setting_tool - ros_madplay_player - face_detection roscpp roslib @@ -104,8 +100,6 @@ the License. humanoid_robot_intelligence_control_system_camera_setting_tool humanoid_robot_intelligence_control_system_web_setting_tool - ros_madplay_player - face_detection ament_cmake @@ -133,8 +127,6 @@ the License. humanoid_robot_intelligence_control_system_camera_setting_tool humanoid_robot_intelligence_control_system_web_setting_tool - ros_madplay_player - face_detection roscpp roslib @@ -160,8 +152,6 @@ the License. humanoid_robot_intelligence_control_system_camera_setting_tool humanoid_robot_intelligence_control_system_web_setting_tool - ros_madplay_player - face_detection roscpp roslib @@ -186,7 +176,5 @@ the License. humanoid_robot_intelligence_control_system_camera_setting_tool humanoid_robot_intelligence_control_system_web_setting_tool - ros_madplay_player - face_detection From 9f0b049f5e5c35e8b12456bf5c387f16cbe2c83e Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Wed, 12 Jun 2024 00:07:49 -0400 Subject: [PATCH 150/172] Update README.md Signed-off-by: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c750338..3ee5208 100644 --- a/README.md +++ b/README.md @@ -29,20 +29,20 @@ Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos reposit ## 🌐 Repository Website -Explore our [repository website](https://robotics-sensors.github.io/humanoid_robot_intelligence_control_system_demos) for detailed documentation, tutorials, and additional information about our humanoid robot intelligence control system. +Explore our [repository website](https://robotics-sensors.github.io/bellande_humanoid_robot_intelligence_control_system_demos) for detailed documentation, tutorials, and additional information about our humanoid robot intelligence control system. --- ### 🔄 Updates and Versions -- **Updated Version:** [humanoid_robot_intelligence_control_system_module](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos) +- **Updated Version:** [humanoid_robot_intelligence_control_system_module](https://github.com/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_demos) - **Old Version/Previous Used for Different Context:** [ROBOTIS-OP3-Demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) --- # 🎉 Latest Release -[![Latest Release](https://img.shields.io/github/v/release/Robotics-Sensors/humanoid_robot_intelligence_control_system_tools?style=for-the-badge&color=yellow)](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/releases/) +[![Latest Release](https://img.shields.io/github/v/release/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_tools?style=for-the-badge&color=yellow)](https://github.com/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_demos/releases/) --- From 32ac6c1da5f4a524b8b5378797a43ede3ae8810c Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Sun, 16 Jun 2024 14:33:55 -0400 Subject: [PATCH 151/172] latest pushes --- .../CMakeLists.txt | 54 ++-- .../package.xml | 12 +- .../setup.py | 11 + .../src/read_write.cpp | 282 ------------------ .../src/read_write.py | 168 +++++++++++ 5 files changed, 214 insertions(+), 313 deletions(-) create mode 100644 humanoid_robot_intelligence_control_system_read_write_demo/setup.py delete mode 100644 humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.cpp create mode 100644 humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.py diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt b/humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt index 5daccda..582d2fa 100644 --- a/humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_read_write_demo/CMakeLists.txt @@ -25,7 +25,13 @@ if($ENV{ROS_VERSION} EQUAL 1) std_msgs ) else() - find_package(ament_cmake REQUIRED) + find_package( + ament_cmake REQUIRED COMPONENTS + humanoid_robot_intelligence_control_system_controller_msgs + roscpp + sensor_msgs + std_msgs + ) endif() @@ -41,31 +47,23 @@ if($ENV{ROS_VERSION} EQUAL 1) ) endif() +# Install Python scripts for both ROS 1 +if($ENV{ROS_VERSION} EQUAL 1) + catkin_install_python( + PROGRAMS + src/read_write.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) +endif() -include_directories(${catkin_INCLUDE_DIRS}) - -add_executable( - read_write - src/read_write.cpp -) - -add_dependencies( - read_write - ${${PROJECT_NAME}_EXPORTED_TARGETS} - ${catkin_EXPORTED_TARGETS} -) - -target_link_libraries( - read_write - ${catkin_LIBRARIES} -) - -install( - TARGETS read_write - RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -) - -install( - DIRECTORY launch - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} -) +# Install Python scripts, configuration files, and launch files +if($ENV{ROS_VERSION} EQUAL "1") + install(PROGRAMS src/read_write.py DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) + install(DIRECTORY config/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/config) + install(DIRECTORY launch/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch) +else() + install(PROGRAMS src/read_write.py DESTINATION lib/${PROJECT_NAME}) + install(DIRECTORY config/ DESTINATION share/${PROJECT_NAME}/config) + install(DIRECTORY launch/ DESTINATION share/${PROJECT_NAME}/launch) + ament_package() +endif() diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/package.xml b/humanoid_robot_intelligence_control_system_read_write_demo/package.xml index 3bcd921..77cae1d 100644 --- a/humanoid_robot_intelligence_control_system_read_write_demo/package.xml +++ b/humanoid_robot_intelligence_control_system_read_write_demo/package.xml @@ -28,6 +28,7 @@ the License. catkin roscpp + rospy std_msgs sensor_msgs @@ -35,6 +36,7 @@ the License. humanoid_robot_intelligence_control_system_manager roscpp + rospy std_msgs sensor_msgs @@ -43,6 +45,7 @@ the License. humanoid_robot_intelligence_control_system_manager roscpp + rospy std_msgs sensor_msgs @@ -52,14 +55,16 @@ the License. ament_cmake - roscpp + rclcpp + rclpy std_msgs sensor_msgs humanoid_robot_intelligence_control_system_controller_msgs humanoid_robot_intelligence_control_system_manager - roscpp + rclcpp + rclpy std_msgs sensor_msgs @@ -67,7 +72,8 @@ the License. humanoid_robot_intelligence_control_system_manager - roscpp + rclcpp + rclpy std_msgs sensor_msgs diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/setup.py b/humanoid_robot_intelligence_control_system_read_write_demo/setup.py new file mode 100644 index 0000000..723c5aa --- /dev/null +++ b/humanoid_robot_intelligence_control_system_read_write_demo/setup.py @@ -0,0 +1,11 @@ +from distutils.core import setup +from catkin_pkg.python_setup import generate_distutils_setup + +# fetch values from package.xml +setup_args = generate_distutils_setup( + scripts=['src/read_write.py'], + packages=['humanoid_robot_intelligence_control_system_read_write_demo'], + package_dir={'': 'src'}, +) + +setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.cpp b/humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.cpp deleted file mode 100644 index 949af70..0000000 --- a/humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.cpp +++ /dev/null @@ -1,282 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include -#include -#include - -#include "humanoid_robot_intelligence_control_system_controller_msgs/SetModule.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" - -void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); -void jointstatesCallback(const sensor_msgs::JointState::ConstPtr &msg); -void readyToDemo(); -void setModule(const std::string &module_name); -void goInitPose(); -void setLED(int led); -bool checkManagerRunning(std::string &manager_name); -void torqueOnAll(); -void torqueOff(const std::string &body_side); - -enum ControlModule { - None = 0, - DirectControlModule = 1, - Framework = 2, -}; - -const int SPIN_RATE = 30; -const bool DEBUG_PRINT = false; - -ros::Publisher init_pose_pub; -ros::Publisher sync_write_pub; -ros::Publisher dxl_torque_pub; -ros::Publisher write_joint_pub; -ros::Publisher write_joint_pub2; -ros::Subscriber buttuon_sub; -ros::Subscriber read_joint_sub; - -ros::ServiceClient set_joint_module_client; - -int control_module = None; -bool demo_ready = false; - -// node main -int main(int argc, char **argv) { - // init ros - ros::init(argc, argv, "read_write"); - - ros::NodeHandle nh(ros::this_node::getName()); - - init_pose_pub = nh.advertise("/humanoid_robot_intelligence_control_system/base/ini_pose", 0); - sync_write_pub = nh.advertise( - "/humanoid_robot_intelligence_control_system/sync_write_item", 0); - dxl_torque_pub = nh.advertise("/humanoid_robot_intelligence_control_system/dxl_torque", 0); - write_joint_pub = - nh.advertise("/humanoid_robot_intelligence_control_system/set_joint_states", 0); - write_joint_pub2 = nh.advertise( - "/humanoid_robot_intelligence_control_system/direct_control/set_joint_states", 0); - - read_joint_sub = - nh.subscribe("/humanoid_robot_intelligence_control_system/present_joint_states", 1, jointstatesCallback); - buttuon_sub = - nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, buttonHandlerCallback); - - // service - set_joint_module_client = - nh.serviceClient( - "/humanoid_robot_intelligence_control_system/set_present_ctrl_modules"); - - ros::start(); - - // set node loop rate - ros::Rate loop_rate(SPIN_RATE); - - // wait for starting of humanoid_robot_intelligence_control_system_manager - std::string manager_name = "/humanoid_robot_intelligence_control_system_manager"; - while (ros::ok()) { - ros::Duration(1.0).sleep(); - - if (checkManagerRunning(manager_name) == true) { - break; - ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); - } - ROS_WARN("Waiting for humanoid_robot_intelligence_control_system manager"); - } - - readyToDemo(); - - // node loop - while (ros::ok()) { - // process - - // execute pending callbacks - ros::spinOnce(); - - // relax to fit output rate - loop_rate.sleep(); - } - - // exit program - return 0; -} - -void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { - // starting demo using humanoid_robot_intelligence_control_system_controller - if (msg->data == "mode") { - control_module = Framework; - ROS_INFO("Button : mode | Framework"); - readyToDemo(); - } - // starting demo using direct_control_module - else if (msg->data == "start") { - control_module = DirectControlModule; - ROS_INFO("Button : start | Direct control module"); - readyToDemo(); - } - // torque on all joints of ROBOTIS-HUMANOID_ROBOT - else if (msg->data == "user") { - torqueOnAll(); - control_module = None; - } -} - -void jointstatesCallback(const sensor_msgs::JointState::ConstPtr &msg) { - if (control_module == None) - return; - - sensor_msgs::JointState write_msg; - write_msg.header = msg->header; - - for (int ix = 0; ix < msg->name.size(); ix++) { - std::string joint_name = msg->name[ix]; - double joint_position = msg->position[ix]; - - // mirror and copy joint angles from right to left - if (joint_name == "r_sho_pitch") { - write_msg.name.push_back("r_sho_pitch"); - write_msg.position.push_back(joint_position); - write_msg.name.push_back("l_sho_pitch"); - write_msg.position.push_back(-joint_position); - } - if (joint_name == "r_sho_roll") { - write_msg.name.push_back("r_sho_roll"); - write_msg.position.push_back(joint_position); - write_msg.name.push_back("l_sho_roll"); - write_msg.position.push_back(-joint_position); - } - if (joint_name == "r_el") { - write_msg.name.push_back("r_el"); - write_msg.position.push_back(joint_position); - write_msg.name.push_back("l_el"); - write_msg.position.push_back(-joint_position); - } - } - - // publish a message to set the joint angles - if (control_module == Framework) - write_joint_pub.publish(write_msg); - else if (control_module == DirectControlModule) - write_joint_pub2.publish(write_msg); -} - -void readyToDemo() { - ROS_INFO("Start Read-Write Demo"); - // turn off LED - setLED(0x04); - - torqueOnAll(); - ROS_INFO("Torque on All joints"); - - // send message for going init posture - goInitPose(); - ROS_INFO("Go Init pose"); - - // wait while ROBOTIS-HUMANOID_ROBOT goes to the init posture. - ros::Duration(4.0).sleep(); - - // turn on R/G/B LED [0x01 | 0x02 | 0x04] - setLED(control_module); - - // change the module for demo - if (control_module == Framework) { - setModule("none"); - ROS_INFO("Change module to none"); - } else if (control_module == DirectControlModule) { - setModule("direct_control_module"); - ROS_INFO("Change module to direct_control_module"); - } else - return; - - // torque off : right arm - torqueOff("right"); - ROS_INFO("Torque off"); -} - -void goInitPose() { - std_msgs::String init_msg; - init_msg.data = "ini_pose"; - - init_pose_pub.publish(init_msg); -} - -void setLED(int led) { - humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; - syncwrite_msg.item_name = "LED"; - syncwrite_msg.joint_name.push_back("open-cr"); - syncwrite_msg.value.push_back(led); - - sync_write_pub.publish(syncwrite_msg); -} - -bool checkManagerRunning(std::string &manager_name) { - std::vector node_list; - ros::master::getNodes(node_list); - - for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); - node_list_idx++) { - if (node_list[node_list_idx] == manager_name) - return true; - } - - ROS_ERROR("Can't find humanoid_robot_intelligence_control_system_manager"); - return false; -} - -void setModule(const std::string &module_name) { - humanoid_robot_intelligence_control_system_controller_msgs::SetModule set_module_srv; - set_module_srv.request.module_name = module_name; - - if (set_joint_module_client.call(set_module_srv) == false) { - ROS_ERROR("Failed to set module"); - return; - } - - return; -} - -void torqueOnAll() { - std_msgs::String check_msg; - check_msg.data = "check"; - - dxl_torque_pub.publish(check_msg); -} - -void torqueOff(const std::string &body_side) { - humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; - int torque_value = 0; - syncwrite_msg.item_name = "torque_enable"; - - if (body_side == "right") { - syncwrite_msg.joint_name.push_back("r_sho_pitch"); - syncwrite_msg.value.push_back(torque_value); - syncwrite_msg.joint_name.push_back("r_sho_roll"); - syncwrite_msg.value.push_back(torque_value); - syncwrite_msg.joint_name.push_back("r_el"); - syncwrite_msg.value.push_back(torque_value); - } else if (body_side == "left") { - syncwrite_msg.joint_name.push_back("l_sho_pitch"); - syncwrite_msg.value.push_back(torque_value); - syncwrite_msg.joint_name.push_back("l_sho_roll"); - syncwrite_msg.value.push_back(torque_value); - syncwrite_msg.joint_name.push_back("l_el"); - syncwrite_msg.value.push_back(torque_value); - } else - return; - - sync_write_pub.publish(syncwrite_msg); -} diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.py b/humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.py new file mode 100644 index 0000000..808805f --- /dev/null +++ b/humanoid_robot_intelligence_control_system_read_write_demo/src/read_write.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +import rospy +from sensor_msgs.msg import JointState +from std_msgs.msg import String +from humanoid_robot_intelligence_control_system_controller_msgs.srv import SetModule +from humanoid_robot_intelligence_control_system_controller_msgs.msg import SyncWriteItem + +def button_handler_callback(msg): + global control_module + if msg.data == "mode": + control_module = ControlModule.Framework + rospy.loginfo("Button : mode | Framework") + ready_to_demo() + elif msg.data == "start": + control_module = ControlModule.DirectControlModule + rospy.loginfo("Button : start | Direct control module") + ready_to_demo() + elif msg.data == "user": + torque_on_all() + control_module = ControlModule.None + +def joint_states_callback(msg): + if control_module == ControlModule.None: + return + + write_msg = JointState() + write_msg.header = msg.header + + for ix in range(len(msg.name)): + joint_name = msg.name[ix] + joint_position = msg.position[ix] + + if joint_name == "r_sho_pitch": + write_msg.name.append("r_sho_pitch") + write_msg.position.append(joint_position) + write_msg.name.append("l_sho_pitch") + write_msg.position.append(-joint_position) + if joint_name == "r_sho_roll": + write_msg.name.append("r_sho_roll") + write_msg.position.append(joint_position) + write_msg.name.append("l_sho_roll") + write_msg.position.append(-joint_position) + if joint_name == "r_el": + write_msg.name.append("r_el") + write_msg.position.append(joint_position) + write_msg.name.append("l_el") + write_msg.position.append(-joint_position) + + if control_module == ControlModule.Framework: + write_joint_pub.publish(write_msg) + elif control_module == ControlModule.DirectControlModule: + write_joint_pub2.publish(write_msg) + +def ready_to_demo(): + rospy.loginfo("Start Read-Write Demo") + set_led(0x04) + torque_on_all() + rospy.loginfo("Torque on All joints") + go_init_pose() + rospy.loginfo("Go Init pose") + rospy.sleep(4.0) + set_led(control_module) + if control_module == ControlModule.Framework: + set_module("none") + rospy.loginfo("Change module to none") + elif control_module == ControlModule.DirectControlModule: + set_module("direct_control_module") + rospy.loginfo("Change module to direct_control_module") + else: + return + torque_off("right") + rospy.loginfo("Torque off") + +def go_init_pose(): + init_msg = String() + init_msg.data = "ini_pose" + init_pose_pub.publish(init_msg) + +def set_led(led): + syncwrite_msg = SyncWriteItem() + syncwrite_msg.item_name = "LED" + syncwrite_msg.joint_name.append("open-cr") + syncwrite_msg.value.append(led) + sync_write_pub.publish(syncwrite_msg) + +def check_manager_running(manager_name): + node_list = rospy.get_published_topics() + for node in node_list: + if node[0] == manager_name: + return True + rospy.logerr("Can't find humanoid_robot_intelligence_control_system_manager") + return False + +def set_module(module_name): + try: + set_module_srv = rospy.ServiceProxy('/humanoid_robot_intelligence_control_system/set_present_ctrl_modules', SetModule) + set_module_srv(module_name) + except rospy.ServiceException as e: + rospy.logerr("Failed to set module: %s" % e) + +def torque_on_all(): + check_msg = String() + check_msg.data = "check" + dxl_torque_pub.publish(check_msg) + +def torque_off(body_side): + syncwrite_msg = SyncWriteItem() + torque_value = 0 + syncwrite_msg.item_name = "torque_enable" + if body_side == "right": + syncwrite_msg.joint_name.extend(["r_sho_pitch", "r_sho_roll", "r_el"]) + syncwrite_msg.value.extend([torque_value] * 3) + elif body_side == "left": + syncwrite_msg.joint_name.extend(["l_sho_pitch", "l_sho_roll", "l_el"]) + syncwrite_msg.value.extend([torque_value] * 3) + sync_write_pub.publish(syncwrite_msg) + +class ControlModule: + None = 0 + DirectControlModule = 1 + Framework = 2 + +if __name__ == '__main__': + rospy.init_node('read_write', anonymous=True) + + init_pose_pub = rospy.Publisher('/humanoid_robot_intelligence_control_system/base/ini_pose', String, queue_size=10) + sync_write_pub = rospy.Publisher('/humanoid_robot_intelligence_control_system/sync_write_item', SyncWriteItem, queue_size=10) + dxl_torque_pub = rospy.Publisher('/humanoid_robot_intelligence_control_system/dxl_torque', String, queue_size=10) + write_joint_pub = rospy.Publisher('/humanoid_robot_intelligence_control_system/set_joint_states', JointState, queue_size=10) + write_joint_pub2 = rospy.Publisher('/humanoid_robot_intelligence_control_system/direct_control/set_joint_states', JointState, queue_size=10) + + read_joint_sub = rospy.Subscriber('/humanoid_robot_intelligence_control_system/present_joint_states', JointState, joint_states_callback) + button_sub = rospy.Subscriber('/humanoid_robot_intelligence_control_system/open_cr/button', String, button_handler_callback) + + control_module = ControlModule.None + demo_ready = False + SPIN_RATE = 30 + DEBUG_PRINT = False + + loop_rate = rospy.Rate(SPIN_RATE) + + manager_name = "/humanoid_robot_intelligence_control_system_manager" + while not rospy.is_shutdown(): + rospy.sleep(1.0) + if check_manager_running(manager_name): + rospy.loginfo("Succeed to connect") + break + rospy.logwarn("Waiting for humanoid_robot_intelligence_control_system manager") + + ready_to_demo() + + while not rospy.is_shutdown(): + rospy.spin() + loop_rate.sleep() From 71ad42eae049c70706a8d7a9f495fd20bfa24848 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Mon, 22 Jul 2024 16:58:01 -0400 Subject: [PATCH 152/172] latest pushes --- .github/workflows/clone.yml | 90 ++ .travis.yml | 30 - git_scripts/.gitignore | 3 + .../CHANGELOG.rst | 34 - .../CMakeLists.txt | 133 --- .../cfg/DetectorParams.cfg | 33 - .../cfg/DetectorParamsBlue.cfg | 33 - .../cfg/DetectorParamsRed.cfg | 33 - .../config/ball_detector_params.yaml | 23 - .../config/ball_detector_params_default.yaml | 23 - .../config/ball_detector_params_op.yaml | 23 - .../ball_detector.h | 169 ---- .../ball_detector_config.h | 90 -- .../launch/ball_detector_from_usb_cam.launch | 27 - .../launch/ball_detector_from_uvc.launch | 32 - .../msg/BallDetectorParams.msg | 17 - .../msg/CircleSetStamped.msg | 9 - .../rviz/ball_detector.rviz | 138 --- .../src/ball_detector.cpp | 904 ------------------ .../src/ball_detector_node.cpp | 50 - .../srv/GetParameters.srv | 3 - .../srv/SetParameters.srv | 3 - ...elligence_control_system_bringup.launch.py | 76 ++ ...rol_system_bringup_visualization.launch.py | 85 ++ ...intelligence_control_system_bringup.launch | 0 ...ontrol_system_bringup_visualization.launch | 0 .../CMakeLists.txt | 79 ++ .../launch/object_detector.launch | 0 .../object_detector_processor.launch.py | 108 +++ .../ros1/object_detector_processor.launch | 41 + .../package.xml | 8 +- .../src/object_detection_processor.py | 111 +++ ...elligence_control_system_read_write.launch | 24 - ...igence_control_system_read_write.launch.py | 121 +++ ...elligence_control_system_read_write.launch | 34 + .../setup.py | 15 + 36 files changed, 766 insertions(+), 1836 deletions(-) create mode 100644 .github/workflows/clone.yml delete mode 100644 .travis.yml create mode 100644 git_scripts/.gitignore delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/CHANGELOG.rst delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt delete mode 100755 humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParams.cfg delete mode 100755 humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsBlue.cfg delete mode 100755 humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsRed.cfg delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params.yaml delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_default.yaml delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_op.yaml delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector_config.h delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_usb_cam.launch delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_uvc.launch delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/msg/BallDetectorParams.msg delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/msg/CircleSetStamped.msg delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/rviz/ball_detector.rviz delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector.cpp delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector_node.cpp delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/srv/GetParameters.srv delete mode 100644 humanoid_robot_intelligence_control_system_ball_detector/srv/SetParameters.srv create mode 100644 humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup.launch.py create mode 100644 humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch.py rename humanoid_robot_intelligence_control_system_bringup/launch/{ => ros1}/humanoid_robot_intelligence_control_system_bringup.launch (100%) rename humanoid_robot_intelligence_control_system_bringup/launch/{ => ros1}/humanoid_robot_intelligence_control_system_bringup_visualization.launch (100%) create mode 100644 humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt rename humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector.launch => humanoid_robot_intelligence_control_system_object_detector/launch/object_detector.launch (100%) create mode 100644 humanoid_robot_intelligence_control_system_object_detector/launch/object_detector_processor.launch.py create mode 100644 humanoid_robot_intelligence_control_system_object_detector/launch/ros1/object_detector_processor.launch rename {humanoid_robot_intelligence_control_system_ball_detector => humanoid_robot_intelligence_control_system_object_detector}/package.xml (96%) create mode 100644 humanoid_robot_intelligence_control_system_object_detector/src/object_detection_processor.py delete mode 100644 humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_intelligence_control_system_read_write.launch create mode 100644 humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_intelligence_control_system_read_write.launch.py create mode 100644 humanoid_robot_intelligence_control_system_read_write_demo/launch/ros1/humanoid_robot_intelligence_control_system_read_write.launch diff --git a/.github/workflows/clone.yml b/.github/workflows/clone.yml new file mode 100644 index 0000000..074054b --- /dev/null +++ b/.github/workflows/clone.yml @@ -0,0 +1,90 @@ +name: GitHub Clone Count Update Everyday + +on: + schedule: + - cron: "0 */24 * * *" + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: gh login + run: echo "${{ secrets.SECRET_TOKEN }}" | gh auth login --with-token + + - name: parse latest clone count + run: | + curl --user "${{ github.actor }}:${{ secrets.SECRET_TOKEN }}" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${{ github.repository }}/traffic/clones \ + > clone.json + + - name: create gist and download previous count + id: set_id + run: | + if gh secret list | grep -q "GIST_ID" + then + echo "GIST_ID found" + echo "GIST=${{ secrets.GIST_ID }}" >> $GITHUB_OUTPUT + curl https://gist.githubusercontent.com/${{ github.actor }}/${{ secrets.GIST_ID }}/raw/clone.json > clone_before.json + if cat clone_before.json | grep '404: Not Found'; then + echo "GIST_ID not valid anymore. Creating another gist..." + gist_id=$(gh gist create clone.json | awk -F / '{print $NF}') + echo $gist_id | gh secret set GIST_ID + echo "GIST=$gist_id" >> $GITHUB_OUTPUT + cp clone.json clone_before.json + git rm --ignore-unmatch CLONE.md + fi + else + echo "GIST_ID not found. Creating a gist..." + gist_id=$(gh gist create clone.json | awk -F / '{print $NF}') + echo $gist_id | gh secret set GIST_ID + echo "GIST=$gist_id" >> $GITHUB_OUTPUT + cp clone.json clone_before.json + fi + + - name: update clone.json + run: | + curl https://raw.githubusercontent.com/MShawon/github-clone-count-badge/master/main.py > main.py + python3 main.py + + - name: Update gist with latest count + run: | + content=$(sed -e 's/\\/\\\\/g' -e 's/\t/\\t/g' -e 's/\"/\\"/g' -e 's/\r//g' "clone.json" | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g') + echo '{"description": "${{ github.repository }} clone statistics", "files": {"clone.json": {"content": "'"$content"'"}}}' > post_clone.json + curl -s -X PATCH \ + --user "${{ github.actor }}:${{ secrets.SECRET_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d @post_clone.json https://api.github.com/gists/${{ steps.set_id.outputs.GIST }} > /dev/null 2>&1 + + if [ ! -f CLONE.md ]; then + shields="https://img.shields.io/badge/dynamic/json?color=success&label=Clone&query=count&url=" + url="https://gist.githubusercontent.com/${{ github.actor }}/${{ steps.set_id.outputs.GIST }}/raw/clone.json" + repo="https://github.com/MShawon/github-clone-count-badge" + echo ''> CLONE.md + echo ' + **Markdown** + + ```markdown' >> CLONE.md + echo "[![GitHub Clones]($shields$url&logo=github)]($repo)" >> CLONE.md + echo ' + ``` + + **HTML** + ```html' >> CLONE.md + echo "GitHub Clones" >> CLONE.md + echo '```' >> CLONE.md + + git add CLONE.md + git config --global user.name "GitHub Action" + git config --global user.email "action@github.com" + git commit -m "create clone count badge" + fi + + - name: Push + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 01412d7..0000000 --- a/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -# This config file for Travis CI utilizes ros-industrial/industrial_ci package. -# For more info for the package, see https://github.com/ros-industrial/industrial_ci/blob/master/README.rst - -sudo: required -dist: trusty -services: - - docker -language: generic -python: - - "3.8" -compiler: - - gcc -notifications: - email: - on_success: change - on_failure: always - recipients: - - ronaldsonbellande@gmail.com -env: - matrix: - - ROS_DISTRO=noetic ROS_REPO=ros-shadow-fixed UPSTREAM_WORKSPACE=file OS_NAME=ubuntu OS_CODE_NAME=focal $ROSINSTALL_FILENAME=".humanoid_robot_intelligence_control_system_demo.rosinstall" -branches: - only: - - master - - noetic -install: - - git clone https://github.com/ros-industrial/industrial_ci.git .ci_config -script: - - source .ci_config/travis.sh - diff --git a/git_scripts/.gitignore b/git_scripts/.gitignore new file mode 100644 index 0000000..e5a7a9c --- /dev/null +++ b/git_scripts/.gitignore @@ -0,0 +1,3 @@ +fix_errors.sh +push.sh +repository_recal.sh diff --git a/humanoid_robot_intelligence_control_system_ball_detector/CHANGELOG.rst b/humanoid_robot_intelligence_control_system_ball_detector/CHANGELOG.rst deleted file mode 100644 index 538e59c..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/CHANGELOG.rst +++ /dev/null @@ -1,34 +0,0 @@ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package humanoid_robot_intelligence_control_system_ball_detector -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -0.3.2 (2023-10-03) ------------------- -* Make it compatible for ROS1/ROS2 -* Fix bugs -* Update package.xml and CMakeList.txt for to the latest versions -* Contributors & Maintainer: Ronaldson Bellande - -0.3.1 (2023-09-27) ------------------- -* Starting from this point it under a new license -* Fix errors and Issues -* Rename Repository for a completely different purpose -* Make it compatible with ROS/ROS2 -* Upgrade version of all builds and make it more compatible -* Update package.xml and CMakeList.txt for to the latest versions -* Contributors & Maintainer: Ronaldson Bellande - -0.3.0 (2021-05-05) ------------------- -* Update package.xml and CMakeList.txt for noetic branch -* Contributors: Ronaldson Bellande - -0.1.0 (2018-04-19) ------------------- -* first release for ROS Kinetic -* added launch files in order to move the camera setting to humanoid_robot_intelligence_control_system_camera_setting package -* added missing package in find_package() -* refacoring to release -* split repositoryfrom ROBOTIS-HUMANOID_ROBOT -* Contributors: Kayman, Zerom, Pyo diff --git a/humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt b/humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt deleted file mode 100644 index dff5405..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/CMakeLists.txt +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy of -# the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations under -# the License. - -cmake_minimum_required(VERSION 3.8) -project(humanoid_robot_intelligence_control_system_ball_detector) - - -if($ENV{ROS_VERSION} EQUAL 1) - find_package( - catkin REQUIRED COMPONENTS - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - message_generation - ) - - find_package(Boost REQUIRED COMPONENTS thread) - find_package(OpenCV 4.2 REQUIRED) - find_package(PkgConfig REQUIRED) -else() - find_package(ament_cmake REQUIRED) -endif() - - -pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) -find_path( - YAML_CPP_INCLUDE_DIR - NAMES yaml_cpp.h - PATHS ${YAML_CPP_INCLUDE_DIRS} -) -find_library( - YAML_CPP_LIBRARY - NAMES YAML_CPP - PATHS ${YAML_CPP_LIBRARY_DIRS} -) -link_directories(${YAML_CPP_LIBRARY_DIRS}) - -if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") - add_definitions(-DHAVE_NEW_YAMLCPP) -endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") - -add_message_files( - FILES - CircleSetStamped.msg - BallDetectorParams.msg -) - -add_service_files( - FILES - GetParameters.srv - SetParameters.srv -) - -generate_messages( - DEPENDENCIES - std_msgs - geometry_msgs -) - -generate_dynamic_reconfigure_options(cfg/DetectorParams.cfg) - -if($ENV{ROS_VERSION} EQUAL 1) - catkin_package( - INCLUDE_DIRS include - CATKIN_DEPENDS - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - message_runtime - DEPENDS Boost OpenCV - ) -endif() - - -include_directories( - include - ${catkin_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} - ${OpenCV_INCLUDE_DIRS} - ${YAML_CPP_INCLUDE_DIRS} -) - -add_executable( - ball_detector_node - src/ball_detector.cpp - src/ball_detector_node.cpp -) - -add_dependencies(ball_detector_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - -target_link_libraries( - ball_detector_node - ${catkin_LIBRARIES} - ${Boost_LIBRARIES} - ${OpenCV_LIBRARIES} - ${YAML_CPP_LIBRARIES} -) - -install( - TARGETS ball_detector_node - RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -) - -install( - DIRECTORY include/${PROJECT_NAME}/ - DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} -) - -install( - DIRECTORY config launch rviz - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} -) diff --git a/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParams.cfg b/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParams.cfg deleted file mode 100755 index abc5bff..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParams.cfg +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python -PACKAGE='humanoid_robot_intelligence_control_system_ball_detector' - -from dynamic_reconfigure.parameter_generator_catkin import * - -gen = ParameterGenerator() - -# Name Type Reconfiguration levexl Description Default Min Max -gen.add("gaussian_blur_size",int_t , -1, "Size of Gaussian Blur Kernel (odd value!)", 7, 1, 11) -gen.add("gaussian_blur_sigma",double_t , -1, "Std deviation of Gaussian Blur Kernel", 2, 1, 5) -gen.add("canny_edge_th",double_t , -1, "Threshold of the edge detector", 50, 50, 200) -gen.add("hough_accum_resolution",double_t , -1, "Resolution of the Hough accumulator, in terms of inverse ratio of image resolution", 2, 1, 8) -gen.add("min_circle_dist",double_t , -1, "Minimum distance between circles", 40, 10, 200) -gen.add("hough_accum_th",double_t , -1, "Accumulator threshold to decide circle detection", 15, 10, 200) -gen.add("min_radius",int_t , -1, "Minimum circle radius allowed", 20, 10, 200) -gen.add("max_radius",int_t , -1, "Maximum circle radius allowed", 150, 100, 600) -gen.add("filter_h_min",int_t , -1, "Threshold of H filter", 180, 0, 359) -gen.add("filter_h_max",int_t , -1, "Threshold of H filter", 245, 0, 359) -gen.add("filter_s_min",int_t , -1, "Threshold of S filter", 200, 0, 255) -gen.add("filter_s_max",int_t , -1, "Threshold of S filter", 255, 0, 255) -gen.add("filter_v_min",int_t , -1, "Threshold of V filter", 50, 0, 255) -gen.add("filter_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) -gen.add("use_second_filter", bool_t, 0, "Use second filter", False) -gen.add("filter2_h_min",int_t , -1, "Threshold of H filter", 160, 0, 359) -gen.add("filter2_h_max",int_t , -1, "Threshold of H filter", 255, 0, 359) -gen.add("filter2_s_min",int_t , -1, "Threshold of S filter", 0, 0, 255) -gen.add("filter2_s_max",int_t , -1, "Threshold of S filter", 55, 0, 255) -gen.add("filter2_v_min",int_t , -1, "Threshold of V filter", 180, 0, 255) -gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) -gen.add("ellipse_size",int_t , -1, "Ellipse size", 2, 1, 9) -gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) - -exit(gen.generate(PACKAGE, "ball_detector_node", "DetectorParams")) diff --git a/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsBlue.cfg b/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsBlue.cfg deleted file mode 100755 index 9ef2700..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsBlue.cfg +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python -PACKAGE='humanoid_robot_intelligence_control_system_ball_detector' - -from dynamic_reconfigure.parameter_generator_catkin import * - -gen = ParameterGenerator() - -# Name Type Reconfiguration levexl Description Default Min Max -gen.add("gaussian_blur_size",int_t , -1, "Size of Gaussian Blur Kernel (odd value!)", 7, 1, 11) -gen.add("gaussian_blur_sigma",double_t , -1, "Std deviation of Gaussian Blur Kernel", 2, 1, 5) -gen.add("canny_edge_th",double_t , -1, "Threshold of the edge detector", 50, 50, 200) -gen.add("hough_accum_resolution",double_t , -1, "Resolution of the Hough accumulator, in terms of inverse ratio of image resolution", 2, 1, 8) -gen.add("min_circle_dist",double_t , -1, "Minimum distance between circles", 40, 10, 200) -gen.add("hough_accum_th",double_t , -1, "Accumulator threshold to decide circle detection", 15, 10, 200) -gen.add("min_radius",int_t , -1, "Minimum circle radius allowed", 20, 10, 200) -gen.add("max_radius",int_t , -1, "Maximum circle radius allowed", 150, 100, 600) -gen.add("filter_h_min",int_t , -1, "Threshold of H filter", 180, 0, 359) -gen.add("filter_h_max",int_t , -1, "Threshold of H filter", 245, 0, 359) -gen.add("filter_s_min",int_t , -1, "Threshold of S filter", 200, 0, 255) -gen.add("filter_s_max",int_t , -1, "Threshold of S filter", 255, 0, 255) -gen.add("filter_v_min",int_t , -1, "Threshold of V filter", 50, 0, 255) -gen.add("filter_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) -gen.add("use_second_filter", bool_t, 0, "Use second filter", False) -gen.add("filter2_h_min",int_t , -1, "Threshold of H filter", 160, 0, 359) -gen.add("filter2_h_max",int_t , -1, "Threshold of H filter", 255, 0, 359) -gen.add("filter2_s_min",int_t , -1, "Threshold of S filter", 0, 0, 255) -gen.add("filter2_s_max",int_t , -1, "Threshold of S filter", 55, 0, 255) -gen.add("filter2_v_min",int_t , -1, "Threshold of V filter", 180, 0, 255) -gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) -gen.add("ellipse_size",int_t , -1, "Ellipse size", 2, 1, 9) -gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) - -exit(gen.generate(PACKAGE, "ball_detector_node", "DetectorParamsBlue")) diff --git a/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsRed.cfg b/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsRed.cfg deleted file mode 100755 index c0eed94..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/cfg/DetectorParamsRed.cfg +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python -PACKAGE='humanoid_robot_intelligence_control_system_ball_detector' - -from dynamic_reconfigure.parameter_generator_catkin import * - -gen = ParameterGenerator() - -# Name Type Reconfiguration levexl Description Default Min Max -gen.add("gaussian_blur_size",int_t , -1, "Size of Gaussian Blur Kernel (odd value!)", 7, 1, 11) -gen.add("gaussian_blur_sigma",double_t , -1, "Std deviation of Gaussian Blur Kernel", 2, 1, 5) -gen.add("canny_edge_th",double_t , -1, "Threshold of the edge detector", 50, 50, 200) -gen.add("hough_accum_resolution",double_t , -1, "Resolution of the Hough accumulator, in terms of inverse ratio of image resolution", 2, 1, 8) -gen.add("min_circle_dist",double_t , -1, "Minimum distance between circles", 40, 10, 200) -gen.add("hough_accum_th",double_t , -1, "Accumulator threshold to decide circle detection", 15, 10, 200) -gen.add("min_radius",int_t , -1, "Minimum circle radius allowed", 20, 10, 200) -gen.add("max_radius",int_t , -1, "Maximum circle radius allowed", 150, 100, 600) -gen.add("filter_h_min",int_t , -1, "Threshold of H filter", 330, 0, 359) -gen.add("filter_h_max",int_t , -1, "Threshold of H filter", 30, 0, 359) -gen.add("filter_s_min",int_t , -1, "Threshold of S filter", 128, 0, 255) -gen.add("filter_s_max",int_t , -1, "Threshold of S filter", 255, 0, 255) -gen.add("filter_v_min",int_t , -1, "Threshold of V filter", 128, 0, 255) -gen.add("filter_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) -gen.add("use_second_filter", bool_t, 0, "Use second filter", False) -gen.add("filter2_h_min",int_t , -1, "Threshold of H filter", 160, 0, 359) -gen.add("filter2_h_max",int_t , -1, "Threshold of H filter", 255, 0, 359) -gen.add("filter2_s_min",int_t , -1, "Threshold of S filter", 0, 0, 255) -gen.add("filter2_s_max",int_t , -1, "Threshold of S filter", 55, 0, 255) -gen.add("filter2_v_min",int_t , -1, "Threshold of V filter", 180, 0, 255) -gen.add("filter2_v_max",int_t , -1, "Threshold of V filter", 255, 0, 255) -gen.add("ellipse_size",int_t , -1, "Ellipse size", 5, 1, 9) -gen.add("debug_image", bool_t, 0, "Show filtered image to debug", False) - -exit(gen.generate(PACKAGE, "ball_detector_node", "DetectorParamsRed")) diff --git a/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params.yaml b/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params.yaml deleted file mode 100644 index f7013fb..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params.yaml +++ /dev/null @@ -1,23 +0,0 @@ -gaussian_blur_size: 7 -gaussian_blur_sigma: 2 -canny_edge_th: 100 -hough_accum_resolution: 1 -min_circle_dist: 100 -hough_accum_th: 28 -min_radius: 20 -max_radius: 300 -filter_h_min: 355 -filter_h_max: 25 -filter_s_min: 220 -filter_s_max: 255 -filter_v_min: 80 -filter_v_max: 255 -use_second_filter: false -filter2_h_min: 30 -filter2_h_max: 355 -filter2_s_min: 0 -filter2_s_max: 40 -filter2_v_min: 200 -filter2_v_max: 255 -ellipse_size: 2 -filter_debug: false \ No newline at end of file diff --git a/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_default.yaml b/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_default.yaml deleted file mode 100644 index 49cc203..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_default.yaml +++ /dev/null @@ -1,23 +0,0 @@ -gaussian_blur_size: 7 -gaussian_blur_sigma: 2 -canny_edge_th: 100 -hough_accum_resolution: 1 -min_circle_dist: 100 -hough_accum_th: 28 -min_radius: 20 -max_radius: 300 -filter_h_min: 350 -filter_h_max: 15 -filter_s_min: 200 -filter_s_max: 255 -filter_v_min: 60 -filter_v_max: 255 -use_second_filter: false -filter2_h_min: 30 -filter2_h_max: 355 -filter2_s_min: 0 -filter2_s_max: 40 -filter2_v_min: 200 -filter2_v_max: 255 -ellipse_size: 2 -filter_debug: false \ No newline at end of file diff --git a/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_op.yaml b/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_op.yaml deleted file mode 100644 index 7310922..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/config/ball_detector_params_op.yaml +++ /dev/null @@ -1,23 +0,0 @@ -gaussian_blur_size: 7 -gaussian_blur_sigma: 2.52 -canny_edge_th: 100.5 -hough_accum_resolution: 1 -min_circle_dist: 28.5 -hough_accum_th: 26.6 -min_radius: 25 -max_radius: 150 -filter_h_min: 350 -filter_h_max: 20 -filter_s_min: 90 -filter_s_max: 255 -filter_v_min: 86 -filter_v_max: 255 -use_second_filter: true -filter2_h_min: 30 -filter2_h_max: 355 -filter2_s_min: 0 -filter2_s_max: 40 -filter2_v_min: 200 -filter2_v_max: 255 -ellipse_size: 1 -filter_debug: false \ No newline at end of file diff --git a/humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h b/humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h deleted file mode 100644 index 91a1bf6..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h +++ /dev/null @@ -1,169 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef _BALL_DETECTOR_H_ -#define _BALL_DETECTOR_H_ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "humanoid_robot_intelligence_control_system_ball_detector/ball_detector_config.h" - -#include "humanoid_robot_intelligence_control_system_ball_detector/CircleSetStamped.h" -#include "humanoid_robot_intelligence_control_system_ball_detector/DetectorParamsConfig.h" -#include "humanoid_robot_intelligence_control_system_ball_detector/GetParameters.h" -#include "humanoid_robot_intelligence_control_system_ball_detector/SetParameters.h" - -namespace humanoid_robot_intelligence_control_system_op { - -class BallDetector { -public: - BallDetector(); - ~BallDetector(); - - // checks if a new image has been received - bool newImage(); - - // execute circle detection with the cureent image - void process(); - - // publish the output image (input image + marked circles) - void publishImage(); - - // publish the circle set data - void publishCircles(); - -protected: - const static int NOT_FOUND_TH = 30; - - // callbacks to image subscription - void imageCallback(const sensor_msgs::ImageConstPtr &msg); - - // callbacks to camera info subscription - void cameraInfoCallback(const sensor_msgs::CameraInfo &msg); - - void dynParamCallback(humanoid_robot_intelligence_control_system_ball_detector::DetectorParamsConfig &config, - uint32_t level); - void enableCallback(const std_msgs::Bool::ConstPtr &msg); - - void paramCommandCallback(const std_msgs::String::ConstPtr &msg); - bool setParamCallback(humanoid_robot_intelligence_control_system_ball_detector::SetParameters::Request &req, - humanoid_robot_intelligence_control_system_ball_detector::SetParameters::Response &res); - bool getParamCallback(humanoid_robot_intelligence_control_system_ball_detector::GetParameters::Request &req, - humanoid_robot_intelligence_control_system_ball_detector::GetParameters::Response &res); - void resetParameter(); - void publishParam(); - - void printConfig(); - void saveConfig(); - void setInputImage(const cv::Mat &inIm); - void setInputImage(const cv::Mat &inIm, cv::Mat &in_filter_img); - void getOutputImage(cv::Mat &outIm); - void filterImage(); - void filterImage(const cv::Mat &in_filter_img, cv::Mat &out_filter_img); - void makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, int range); - void makeFilterMaskFromBall(const cv::Mat &source_img, cv::Mat &mask_img); - void inRangeHsv(const cv::Mat &input_img, const HsvFilter &filter_value, - cv::Mat &output_img); - void mophology(const cv::Mat &intput_img, cv::Mat &output_img, - int ellipse_size); - void houghDetection(const unsigned int imgEncoding); - void houghDetection2(const cv::Mat &input_hough); - void drawOutputImage(); - - // ros node handle - ros::NodeHandle nh_; - - ros::Subscriber enable_sub_; - - // image publisher/subscriber - image_transport::ImageTransport it_; - image_transport::Publisher image_pub_; - cv_bridge::CvImage cv_img_pub_; - image_transport::Subscriber image_sub_; - cv_bridge::CvImagePtr cv_img_ptr_sub_; - - bool enable_; - bool init_param_; - int not_found_count_; - - // circle set publisher - humanoid_robot_intelligence_control_system_ball_detector::CircleSetStamped circles_msg_; - ros::Publisher circles_pub_; - - // camera info subscriber - sensor_msgs::CameraInfo camera_info_msg_; - ros::Subscriber camera_info_sub_; - ros::Publisher camera_info_pub_; - - // dynamic reconfigure - DetectorConfig params_config_; - std::string param_path_; - bool has_path_; - - // web setting - std::string default_setting_path_; - ros::Publisher param_pub_; - ros::Subscriber param_command_sub_; - ros::ServiceServer get_param_client_; - ros::ServiceServer set_param_client_; - - // flag indicating a new image has been received - bool new_image_flag_; - - // image time stamp and frame id - ros::Time sub_time_; - std::string image_frame_id_; - - // img encoding id - unsigned int img_encoding_; - - /** \brief Set of detected circles - * - * Detected circles. For a circle i: - * x_i: circles[i][0] - * y_i: circles[i][1] - * radius_i: circles[i][2] - * - **/ - std::vector circles_; - cv::Mat in_image_; - cv::Mat out_image_; - - dynamic_reconfigure::Server - param_server_; - dynamic_reconfigure::Server< - humanoid_robot_intelligence_control_system_ball_detector::DetectorParamsConfig>::CallbackType callback_fnc_; -}; - -} // namespace humanoid_robot_intelligence_control_system_op -#endif // _BALL_DETECTOR_H_ diff --git a/humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector_config.h b/humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector_config.h deleted file mode 100644 index a7e7a3a..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/include/humanoid_robot_intelligence_control_system_ball_detector/ball_detector_config.h +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef _DETECTOR_CONFIG_H_ -#define _DETECTOR_CONFIG_H_ - -namespace humanoid_robot_intelligence_control_system_op { - -// constants -const int GAUSSIAN_BLUR_SIZE_DEFAULT = 7; -const double GAUSSIAN_BLUR_SIGMA_DEFAULT = 2; -const double CANNY_EDGE_TH_DEFAULT = 130; -const double HOUGH_ACCUM_RESOLUTION_DEFAULT = 2; -const double MIN_CIRCLE_DIST_DEFAULT = 30; -const double HOUGH_ACCUM_TH_DEFAULT = 120; -const int MIN_RADIUS_DEFAULT = 30; -const int MAX_RADIUS_DEFAULT = 400; -const unsigned int IMG_MONO = 0; -const unsigned int IMG_RGB8 = 1; -const int FILTER_RANGE_DEFAULT_MIN = 160; -const int FILTER_RANGE_DEFAULT_MAX = 255; -const int FILTER_H_MIN_DEFAULT = 0; -const int FILTER_H_MAX_DEFAULT = 30; -const int FILTER_S_MIN_DEFAULT = 0; -const int FILTER_S_MAX_DEFAULT = 255; -const int FILTER_V_MIN_DEFAULT = 0; -const int FILTER_V_MAX_DEFAULT = 255; -const int ELLIPSE_SIZE = 5; - -class HsvFilter { -public: - HsvFilter() - : h_min(FILTER_H_MIN_DEFAULT), h_max(FILTER_H_MAX_DEFAULT), - s_min(FILTER_S_MIN_DEFAULT), s_max(FILTER_S_MAX_DEFAULT), - v_min(FILTER_V_MIN_DEFAULT), v_max(FILTER_V_MAX_DEFAULT) {} - - int h_min; - int h_max; - int s_min; - int s_max; - int v_min; - int v_max; -}; - -class DetectorConfig { -public: - int gaussian_blur_size; // size of gaussian blur kernel mask [pixel] - double gaussian_blur_sigma; // sigma of gaussian blur kernel mask [pixel] - double canny_edge_th; // threshold of the edge detector. - double hough_accum_resolution; // resolution of the Hough accumulator, in - // terms of inverse ratio of image resolution - double min_circle_dist; // Minimum distance between circles - double hough_accum_th; // accumulator threshold to decide circle detection - int min_radius; // minimum circle radius allowed - int max_radius; // maximum circle radius allowed - HsvFilter filter_threshold; // filter threshold - bool use_second_filter; - HsvFilter filter2_threshold; // filter threshold - int ellipse_size; - bool debug; // to debug log - - DetectorConfig() - : canny_edge_th(CANNY_EDGE_TH_DEFAULT), - hough_accum_resolution(HOUGH_ACCUM_RESOLUTION_DEFAULT), - min_circle_dist(MIN_CIRCLE_DIST_DEFAULT), - hough_accum_th(HOUGH_ACCUM_TH_DEFAULT), min_radius(MIN_RADIUS_DEFAULT), - max_radius(MAX_RADIUS_DEFAULT), filter_threshold(), - use_second_filter(false), filter2_threshold(), - ellipse_size(ELLIPSE_SIZE), debug(false) {} - - ~DetectorConfig() {} -}; - -} // namespace humanoid_robot_intelligence_control_system_op -#endif // _DETECTOR_CONFIG_H_ diff --git a/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_usb_cam.launch b/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_usb_cam.launch deleted file mode 100644 index 2d690b8..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_usb_cam.launch +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_uvc.launch b/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_uvc.launch deleted file mode 100644 index a28ee87..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector_from_uvc.launch +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/humanoid_robot_intelligence_control_system_ball_detector/msg/BallDetectorParams.msg b/humanoid_robot_intelligence_control_system_ball_detector/msg/BallDetectorParams.msg deleted file mode 100644 index cd1c210..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/msg/BallDetectorParams.msg +++ /dev/null @@ -1,17 +0,0 @@ -# This represents the parameters of ball_detector - -uint32 gaussian_blur_size # only odd number, 1 - 11 -float32 gaussian_blur_sigma # 1 - 5 -float32 canny_edge_th # 50 - 200 -float32 hough_accum_resolution # 1 - 8 -float32 hough_accum_th # 10 - 200 -float32 min_circle_dist # 10 - 200 -uint32 min_radius # 10 - 200 -uint32 max_radius # 100 - 600 -uint32 filter_h_min # 0 - 359 -uint32 filter_h_max -uint32 filter_s_min # 0 - 255 -uint32 filter_s_max -uint32 filter_v_min # 0 - 255 -uint32 filter_v_max -uint32 ellipse_size # 1 - 9 diff --git a/humanoid_robot_intelligence_control_system_ball_detector/msg/CircleSetStamped.msg b/humanoid_robot_intelligence_control_system_ball_detector/msg/CircleSetStamped.msg deleted file mode 100644 index 4ed5885..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/msg/CircleSetStamped.msg +++ /dev/null @@ -1,9 +0,0 @@ -# This represents the set of detected circles - -#timestamp and frame id of the image frame -std_msgs/Header header - -#set of detected circles: -# (circles[i].x, circles[i].y) is the center point in image coordinates -# circles[i].z is the circle radius -geometry_msgs/Point[] circles diff --git a/humanoid_robot_intelligence_control_system_ball_detector/rviz/ball_detector.rviz b/humanoid_robot_intelligence_control_system_ball_detector/rviz/ball_detector.rviz deleted file mode 100644 index 7fd856d..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/rviz/ball_detector.rviz +++ /dev/null @@ -1,138 +0,0 @@ -Panels: - - Class: rviz/Displays - Help Height: 0 - Name: Displays - Property Tree Widget: - Expanded: - - /Global Options1 - - /Status1 - Splitter Ratio: 0.5 - Tree Height: 355 - - Class: rviz/Selection - Name: Selection - - Class: rviz/Tool Properties - Expanded: - - /2D Pose Estimate1 - - /2D Nav Goal1 - - /Publish Point1 - Name: Tool Properties - Splitter Ratio: 0.588679 - - Class: rviz/Views - Expanded: - - /Current View1 - Name: Views - Splitter Ratio: 0.5 - - Class: rviz/Time - Experimental: false - Name: Time - SyncMode: 0 - SyncSource: Image -Visualization Manager: - Class: "" - Displays: - - Alpha: 0.5 - Cell Size: 1 - Class: rviz/Grid - Color: 160; 160; 164 - Enabled: true - Line Style: - Line Width: 0.03 - Value: Lines - Name: Grid - Normal Cell Count: 0 - Offset: - X: 0 - Y: 0 - Z: 0 - Plane: XY - Plane Cell Count: 10 - Reference Frame: - Value: true - - Alpha: 1 - Class: rviz/RobotModel - Collision Enabled: false - Enabled: true - Links: - All Links Enabled: true - Expand Joint Details: false - Expand Link Details: false - Expand Tree: false - Link Tree Style: "" - Name: RobotModel - Robot Description: robot_description - TF Prefix: "" - Update Interval: 0 - Value: true - Visual Enabled: true - - Class: rviz/Image - Enabled: true - Image Topic: /ball_detector_node/image_out - Max Value: 1 - Median window: 5 - Min Value: 0 - Name: Image - Normalize Range: true - Queue Size: 2 - Transport Hint: compressed - Value: true - Enabled: true - Global Options: - Background Color: 48; 48; 48 - Fixed Frame: map - Frame Rate: 30 - Name: root - Tools: - - Class: rviz/Interact - Hide Inactive Objects: true - - Class: rviz/MoveCamera - - Class: rviz/Select - - Class: rviz/FocusCamera - - Class: rviz/Measure - - Class: rviz/SetInitialPose - Topic: /initialpose - - Class: rviz/SetGoal - Topic: /move_base_simple/goal - - Class: rviz/PublishPoint - Single click: true - Topic: /clicked_point - Value: true - Views: - Current: - Class: rviz/Orbit - Distance: 10 - Enable Stereo Rendering: - Stereo Eye Separation: 0.06 - Stereo Focal Distance: 1 - Swap Stereo Eyes: false - Value: false - Focal Point: - X: 0 - Y: 0 - Z: 0 - Name: Current View - Near Clip Distance: 0.01 - Pitch: 0.785398 - Target Frame: - Value: Orbit (rviz) - Yaw: 0.785398 - Saved: ~ -Window Geometry: - Displays: - collapsed: false - Height: 1056 - Hide Left Dock: false - Hide Right Dock: false - Image: - collapsed: false - QMainWindow State: 000000ff00000000fd00000004000000000000027500000396fc0200000009fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000001a4000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d00610067006501000001d2000001ec0000001600ffffff000000010000010f00000396fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000002800000396000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073f0000003efc0100000002fb0000000800540069006d006501000000000000073f000002f600fffffffb0000000800540069006d00650100000000000004500000000000000000000003af0000039600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 - Selection: - collapsed: false - Time: - collapsed: false - Tool Properties: - collapsed: false - Views: - collapsed: false - Width: 1855 - X: 1985 - Y: 24 diff --git a/humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector.cpp b/humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector.cpp deleted file mode 100644 index 2916b71..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector.cpp +++ /dev/null @@ -1,904 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include - -#include "humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h" - -namespace humanoid_robot_intelligence_control_system_op { - -BallDetector::BallDetector() - : nh_(ros::this_node::getName()), it_(this->nh_), enable_(true), - params_config_(), init_param_(false), not_found_count_(0) { - has_path_ = nh_.getParam("yaml_path", param_path_); - - if (has_path_) - std::cout << "Path : " << param_path_ << std::endl; - - // detector config struct - DetectorConfig detect_config; - - // get user parameters from dynamic reconfigure (yaml entries) - nh_.param("gaussian_blur_size", detect_config.gaussian_blur_size, - params_config_.gaussian_blur_size); - if (detect_config.gaussian_blur_size % 2 == 0) - detect_config.gaussian_blur_size -= 1; - if (detect_config.gaussian_blur_size <= 0) - detect_config.gaussian_blur_size = 1; - nh_.param("gaussian_blur_sigma", detect_config.gaussian_blur_sigma, - params_config_.gaussian_blur_sigma); - nh_.param("canny_edge_th", detect_config.canny_edge_th, - params_config_.canny_edge_th); - nh_.param("hough_accum_resolution", - detect_config.hough_accum_resolution, - params_config_.hough_accum_resolution); - nh_.param("min_circle_dist", detect_config.min_circle_dist, - params_config_.min_circle_dist); - nh_.param("hough_accum_th", detect_config.hough_accum_th, - params_config_.hough_accum_th); - nh_.param("min_radius", detect_config.min_radius, - params_config_.min_radius); - nh_.param("max_radius", detect_config.max_radius, - params_config_.max_radius); - nh_.param("filter_h_min", detect_config.filter_threshold.h_min, - params_config_.filter_threshold.h_min); - nh_.param("filter_h_max", detect_config.filter_threshold.h_max, - params_config_.filter_threshold.h_max); - nh_.param("filter_s_min", detect_config.filter_threshold.s_min, - params_config_.filter_threshold.s_min); - nh_.param("filter_s_max", detect_config.filter_threshold.s_max, - params_config_.filter_threshold.s_max); - nh_.param("filter_v_min", detect_config.filter_threshold.v_min, - params_config_.filter_threshold.v_min); - nh_.param("filter_v_max", detect_config.filter_threshold.v_max, - params_config_.filter_threshold.v_max); - nh_.param("use_second_filter", detect_config.use_second_filter, - params_config_.use_second_filter); - nh_.param("filter2_h_min", detect_config.filter2_threshold.h_min, - params_config_.filter2_threshold.h_min); - nh_.param("filter2_h_max", detect_config.filter2_threshold.h_max, - params_config_.filter2_threshold.h_max); - nh_.param("filter2_s_min", detect_config.filter2_threshold.s_min, - params_config_.filter2_threshold.s_min); - nh_.param("filter2_s_max", detect_config.filter2_threshold.s_max, - params_config_.filter2_threshold.s_max); - nh_.param("filter2_v_min", detect_config.filter2_threshold.v_min, - params_config_.filter2_threshold.v_min); - nh_.param("filter2_v_max", detect_config.filter2_threshold.v_max, - params_config_.filter2_threshold.v_max); - nh_.param("ellipse_size", detect_config.ellipse_size, - params_config_.ellipse_size); - nh_.param("filter_debug", detect_config.debug, params_config_.debug); - - // sets publishers - image_pub_ = it_.advertise("image_out", 100); - circles_pub_ = - nh_.advertise("circle_set", 100); - camera_info_pub_ = nh_.advertise("camera_info", 100); - - // sets subscribers - enable_sub_ = nh_.subscribe("enable", 1, &BallDetector::enableCallback, this); - image_sub_ = it_.subscribe("image_in", 1, &BallDetector::imageCallback, this); - camera_info_sub_ = nh_.subscribe("cameraInfo_in", 100, - &BallDetector::cameraInfoCallback, this); - - // initializes newImageFlag - new_image_flag_ = false; - - // dynamic_reconfigure - callback_fnc_ = boost::bind(&BallDetector::dynParamCallback, this, _1, _2); - param_server_.setCallback(callback_fnc_); - - // web setting - param_pub_ = - nh_.advertise("current_params", 1); - param_command_sub_ = nh_.subscribe("param_command", 1, - &BallDetector::paramCommandCallback, this); - set_param_client_ = - nh_.advertiseService("set_param", &BallDetector::setParamCallback, this); - get_param_client_ = - nh_.advertiseService("get_param", &BallDetector::getParamCallback, this); - default_setting_path_ = ros::package::getPath(ROS_PACKAGE_NAME) + - "/config/ball_detector_params_default.yaml"; - - // sets config and prints it - params_config_ = detect_config; - init_param_ = true; - printConfig(); -} - -BallDetector::~BallDetector() {} - -bool BallDetector::newImage() { - if (new_image_flag_) { - new_image_flag_ = false; - return true; - } else { - return false; - } -} - -void BallDetector::process() { - if (enable_ == false) - return; - - if (cv_img_ptr_sub_ != NULL) { - cv::Mat img_hsv, img_filtered; - - // set input image - setInputImage(cv_img_ptr_sub_->image, img_hsv); - - // image filtering - filterImage(img_hsv, img_filtered); - - // detect circles - houghDetection2(img_filtered); - - // // set input image - // setInputImage(cv_img_ptr_sub_->image); - - // // image filtering - // filterImage(); - - // //detect circles - // houghDetection(this->img_encoding_); - } -} - -void BallDetector::publishImage() { - if (enable_ == false) - return; - - // image_raw topic - cv_img_pub_.header.seq++; - cv_img_pub_.header.stamp = sub_time_; - cv_img_pub_.header.frame_id = image_frame_id_; - switch (img_encoding_) { - case IMG_RGB8: - cv_img_pub_.encoding = sensor_msgs::image_encodings::RGB8; - break; - case IMG_MONO: - cv_img_pub_.encoding = sensor_msgs::image_encodings::MONO8; - break; - default: - cv_img_pub_.encoding = sensor_msgs::image_encodings::MONO8; - break; - } - getOutputImage(cv_img_pub_.image); - image_pub_.publish(cv_img_pub_.toImageMsg()); - camera_info_pub_.publish(camera_info_msg_); -} - -void BallDetector::publishCircles() { - if (enable_ == false) - return; - - if (circles_.size() == 0) - return; - - // clears and resize the message - circles_msg_.circles.clear(); - circles_msg_.circles.resize(circles_.size()); - - // fill header - circles_msg_.header.seq++; - circles_msg_.header.stamp = sub_time_; - circles_msg_.header.frame_id = - "detector"; // To do: get frame_id from input image - - // fill circle data - // top(-1), bottom(+1) - // left(-1), right(+1) - for (int idx = 0; idx < circles_.size(); idx++) { - circles_msg_.circles[idx].x = - circles_[idx][0] / out_image_.cols * 2 - 1; // x (-1 ~ 1) - circles_msg_.circles[idx].y = - circles_[idx][1] / out_image_.rows * 2 - 1; // y (-1 ~ 1) - circles_msg_.circles[idx].z = circles_[idx][2]; // radius - } - - // publish message - circles_pub_.publish(circles_msg_); -} - -void BallDetector::enableCallback(const std_msgs::Bool::ConstPtr &msg) { - enable_ = msg->data; -} - -void BallDetector::imageCallback(const sensor_msgs::ImageConstPtr &msg) { - if (enable_ == false) - return; - - try { - if (msg->encoding.compare(sensor_msgs::image_encodings::MONO8) == 0) - this->img_encoding_ = IMG_MONO; - if (msg->encoding.compare(sensor_msgs::image_encodings::RGB8) == 0) - this->img_encoding_ = IMG_RGB8; - this->cv_img_ptr_sub_ = cv_bridge::toCvCopy(msg, msg->encoding); - } catch (cv_bridge::Exception &e) { - ROS_ERROR("cv_bridge exception: %s", e.what()); - return; - } - - // indicates a new image is available - this->sub_time_ = msg->header.stamp; - this->image_frame_id_ = msg->header.frame_id; - this->new_image_flag_ = true; - return; -} - -void BallDetector::dynParamCallback( - humanoid_robot_intelligence_control_system_ball_detector:: - DetectorParamsConfig &config, - uint32_t level) { - params_config_.gaussian_blur_size = config.gaussian_blur_size; - params_config_.gaussian_blur_sigma = config.gaussian_blur_sigma; - params_config_.canny_edge_th = config.canny_edge_th; - params_config_.hough_accum_resolution = config.hough_accum_resolution; - params_config_.min_circle_dist = config.min_circle_dist; - params_config_.hough_accum_th = config.hough_accum_th; - params_config_.min_radius = config.min_radius; - params_config_.max_radius = config.max_radius; - params_config_.filter_threshold.h_min = config.filter_h_min; - params_config_.filter_threshold.h_max = config.filter_h_max; - params_config_.filter_threshold.s_min = config.filter_s_min; - params_config_.filter_threshold.s_max = config.filter_s_max; - params_config_.filter_threshold.v_min = config.filter_v_min; - params_config_.filter_threshold.v_max = config.filter_v_max; - params_config_.use_second_filter = config.use_second_filter; - params_config_.filter2_threshold.h_min = config.filter2_h_min; - params_config_.filter2_threshold.h_max = config.filter2_h_max; - params_config_.filter2_threshold.s_min = config.filter2_s_min; - params_config_.filter2_threshold.s_max = config.filter2_s_max; - params_config_.filter2_threshold.v_min = config.filter2_v_min; - params_config_.filter2_threshold.v_max = config.filter2_v_max; - params_config_.ellipse_size = config.ellipse_size; - params_config_.debug = config.debug_image; - - // gaussian_blur has to be odd number. - if (params_config_.gaussian_blur_size % 2 == 0) - params_config_.gaussian_blur_size -= 1; - if (params_config_.gaussian_blur_size <= 0) - params_config_.gaussian_blur_size = 1; - - printConfig(); - saveConfig(); -} - -void BallDetector::cameraInfoCallback(const sensor_msgs::CameraInfo &msg) { - if (enable_ == false) - return; - - camera_info_msg_ = msg; -} - -void BallDetector::paramCommandCallback(const std_msgs::String::ConstPtr &msg) { - if (msg->data == "debug") { - params_config_.debug = true; - saveConfig(); - } else if (msg->data == "normal") { - params_config_.debug = false; - saveConfig(); - } else if (msg->data == "reset") { - // load default parameters and apply - resetParameter(); - } -} - -bool BallDetector::setParamCallback( - humanoid_robot_intelligence_control_system_ball_detector::SetParameters:: - Request &req, - humanoid_robot_intelligence_control_system_ball_detector::SetParameters:: - Response &res) { - params_config_.gaussian_blur_size = req.params.gaussian_blur_size; - params_config_.gaussian_blur_sigma = req.params.gaussian_blur_sigma; - params_config_.canny_edge_th = req.params.canny_edge_th; - params_config_.hough_accum_resolution = req.params.hough_accum_resolution; - params_config_.min_circle_dist = req.params.min_circle_dist; - params_config_.hough_accum_th = req.params.hough_accum_th; - params_config_.min_radius = req.params.min_radius; - params_config_.max_radius = req.params.max_radius; - params_config_.filter_threshold.h_min = req.params.filter_h_min; - params_config_.filter_threshold.h_max = req.params.filter_h_max; - params_config_.filter_threshold.s_min = req.params.filter_s_min; - params_config_.filter_threshold.s_max = req.params.filter_s_max; - params_config_.filter_threshold.v_min = req.params.filter_v_min; - params_config_.filter_threshold.v_max = req.params.filter_v_max; - params_config_.ellipse_size = req.params.ellipse_size; - - saveConfig(); - - res.returns = req.params; - - return true; -} - -bool BallDetector::getParamCallback( - humanoid_robot_intelligence_control_system_ball_detector::GetParameters:: - Request &req, - humanoid_robot_intelligence_control_system_ball_detector::GetParameters:: - Response &res) { - res.returns.gaussian_blur_size = params_config_.gaussian_blur_size; - res.returns.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; - res.returns.canny_edge_th = params_config_.canny_edge_th; - res.returns.hough_accum_resolution = params_config_.hough_accum_resolution; - res.returns.min_circle_dist = params_config_.min_circle_dist; - res.returns.hough_accum_th = params_config_.hough_accum_th; - res.returns.min_radius = params_config_.min_radius; - res.returns.max_radius = params_config_.max_radius; - res.returns.filter_h_min = params_config_.filter_threshold.h_min; - res.returns.filter_h_max = params_config_.filter_threshold.h_max; - res.returns.filter_s_min = params_config_.filter_threshold.s_min; - res.returns.filter_s_max = params_config_.filter_threshold.s_max; - res.returns.filter_v_min = params_config_.filter_threshold.v_min; - res.returns.filter_v_max = params_config_.filter_threshold.v_max; - res.returns.ellipse_size = params_config_.ellipse_size; - - return true; -} - -void BallDetector::resetParameter() { - - YAML::Node doc; - - try { - // load yaml - doc = YAML::LoadFile(default_setting_path_.c_str()); - - // parse - params_config_.gaussian_blur_size = doc["gaussian_blur_size"].as(); - params_config_.gaussian_blur_sigma = - doc["gaussian_blur_sigma"].as(); - params_config_.canny_edge_th = doc["canny_edge_th"].as(); - params_config_.hough_accum_resolution = - doc["hough_accum_resolution"].as(); - params_config_.min_circle_dist = doc["min_circle_dist"].as(); - params_config_.hough_accum_th = doc["hough_accum_th"].as(); - params_config_.min_radius = doc["min_radius"].as(); - params_config_.max_radius = doc["max_radius"].as(); - params_config_.filter_threshold.h_min = doc["filter_h_min"].as(); - params_config_.filter_threshold.h_max = doc["filter_h_max"].as(); - params_config_.filter_threshold.s_min = doc["filter_s_min"].as(); - params_config_.filter_threshold.s_max = doc["filter_s_max"].as(); - params_config_.filter_threshold.v_min = doc["filter_v_min"].as(); - params_config_.filter_threshold.v_max = doc["filter_v_max"].as(); - params_config_.use_second_filter = doc["use_second_filter"].as(); - params_config_.filter2_threshold.h_min = doc["filter2_h_min"].as(); - params_config_.filter2_threshold.h_max = doc["filter2_h_max"].as(); - params_config_.filter2_threshold.s_min = doc["filter2_s_min"].as(); - params_config_.filter2_threshold.s_max = doc["filter2_s_max"].as(); - params_config_.filter2_threshold.v_min = doc["filter2_v_min"].as(); - params_config_.filter2_threshold.v_max = doc["filter2_v_max"].as(); - params_config_.ellipse_size = doc["ellipse_size"].as(); - params_config_.debug = doc["filter_debug"].as(); - - // gaussian_blur has to be odd number. - if (params_config_.gaussian_blur_size % 2 == 0) - params_config_.gaussian_blur_size -= 1; - if (params_config_.gaussian_blur_size <= 0) - params_config_.gaussian_blur_size = 1; - - printConfig(); - saveConfig(); - - publishParam(); - } catch (const std::exception &e) { - ROS_ERROR_STREAM( - "Failed to Get default parameters : " << default_setting_path_); - return; - } -} - -void BallDetector::publishParam() { - humanoid_robot_intelligence_control_system_ball_detector::BallDetectorParams - params; - - params.gaussian_blur_size = params_config_.gaussian_blur_size; - params.gaussian_blur_sigma = params_config_.gaussian_blur_sigma; - params.canny_edge_th = params_config_.canny_edge_th; - params.hough_accum_resolution = params_config_.hough_accum_resolution; - params.min_circle_dist = params_config_.min_circle_dist; - params.hough_accum_th = params_config_.hough_accum_th; - params.min_radius = params_config_.min_radius; - params.max_radius = params_config_.max_radius; - params.filter_h_min = params_config_.filter_threshold.h_min; - params.filter_h_max = params_config_.filter_threshold.h_max; - params.filter_s_min = params_config_.filter_threshold.s_min; - params.filter_s_max = params_config_.filter_threshold.s_max; - params.filter_v_min = params_config_.filter_threshold.v_min; - params.filter_v_max = params_config_.filter_threshold.v_max; - params.ellipse_size = params_config_.ellipse_size; - - param_pub_.publish(params); -} - -void BallDetector::printConfig() { - if (init_param_ == false) - return; - - std::cout << "Detetctor Configuration:" << std::endl - << " gaussian_blur_size: " << params_config_.gaussian_blur_size - << std::endl - << " gaussian_blur_sigma: " << params_config_.gaussian_blur_sigma - << std::endl - << " canny_edge_th: " << params_config_.canny_edge_th - << std::endl - << " hough_accum_resolution: " - << params_config_.hough_accum_resolution << std::endl - << " min_circle_dist: " << params_config_.min_circle_dist - << std::endl - << " hough_accum_th: " << params_config_.hough_accum_th - << std::endl - << " min_radius: " << params_config_.min_radius << std::endl - << " max_radius: " << params_config_.max_radius << std::endl - << " filter_h_min: " << params_config_.filter_threshold.h_min - << std::endl - << " filter_h_max: " << params_config_.filter_threshold.h_max - << std::endl - << " filter_s_min: " << params_config_.filter_threshold.s_min - << std::endl - << " filter_s_max: " << params_config_.filter_threshold.s_max - << std::endl - << " filter_v_min: " << params_config_.filter_threshold.v_min - << std::endl - << " filter_v_max: " << params_config_.filter_threshold.v_max - << std::endl - << " use_second_filter: " << params_config_.use_second_filter - << std::endl - << " filter2_h_min: " << params_config_.filter2_threshold.h_min - << std::endl - << " filter2_h_max: " << params_config_.filter2_threshold.h_max - << std::endl - << " filter2_s_min: " << params_config_.filter2_threshold.s_min - << std::endl - << " filter2_s_max: " << params_config_.filter2_threshold.s_max - << std::endl - << " filter2_v_min: " << params_config_.filter2_threshold.v_min - << std::endl - << " filter2_v_max: " << params_config_.filter2_threshold.v_max - << std::endl - << " ellipse_size: " << params_config_.ellipse_size << std::endl - << " filter_image_to_debug: " << params_config_.debug - << std::endl - << std::endl; -} - -void BallDetector::saveConfig() { - if (has_path_ == false) - return; - - YAML::Emitter yaml_out; - - yaml_out << YAML::BeginMap; - yaml_out << YAML::Key << "gaussian_blur_size" << YAML::Value - << params_config_.gaussian_blur_size; - yaml_out << YAML::Key << "gaussian_blur_sigma" << YAML::Value - << params_config_.gaussian_blur_sigma; - yaml_out << YAML::Key << "canny_edge_th" << YAML::Value - << params_config_.canny_edge_th; - yaml_out << YAML::Key << "hough_accum_resolution" << YAML::Value - << params_config_.hough_accum_resolution; - yaml_out << YAML::Key << "min_circle_dist" << YAML::Value - << params_config_.min_circle_dist; - yaml_out << YAML::Key << "hough_accum_th" << YAML::Value - << params_config_.hough_accum_th; - yaml_out << YAML::Key << "min_radius" << YAML::Value - << params_config_.min_radius; - yaml_out << YAML::Key << "max_radius" << YAML::Value - << params_config_.max_radius; - yaml_out << YAML::Key << "filter_h_min" << YAML::Value - << params_config_.filter_threshold.h_min; - yaml_out << YAML::Key << "filter_h_max" << YAML::Value - << params_config_.filter_threshold.h_max; - yaml_out << YAML::Key << "filter_s_min" << YAML::Value - << params_config_.filter_threshold.s_min; - yaml_out << YAML::Key << "filter_s_max" << YAML::Value - << params_config_.filter_threshold.s_max; - yaml_out << YAML::Key << "filter_v_min" << YAML::Value - << params_config_.filter_threshold.v_min; - yaml_out << YAML::Key << "filter_v_max" << YAML::Value - << params_config_.filter_threshold.v_max; - yaml_out << YAML::Key << "use_second_filter" << YAML::Value - << params_config_.use_second_filter; - yaml_out << YAML::Key << "filter2_h_min" << YAML::Value - << params_config_.filter2_threshold.h_min; - yaml_out << YAML::Key << "filter2_h_max" << YAML::Value - << params_config_.filter2_threshold.h_max; - yaml_out << YAML::Key << "filter2_s_min" << YAML::Value - << params_config_.filter2_threshold.s_min; - yaml_out << YAML::Key << "filter2_s_max" << YAML::Value - << params_config_.filter2_threshold.s_max; - yaml_out << YAML::Key << "filter2_v_min" << YAML::Value - << params_config_.filter2_threshold.v_min; - yaml_out << YAML::Key << "filter2_v_max" << YAML::Value - << params_config_.filter2_threshold.v_max; - yaml_out << YAML::Key << "ellipse_size" << YAML::Value - << params_config_.ellipse_size; - yaml_out << YAML::Key << "filter_debug" << YAML::Value - << params_config_.debug; - yaml_out << YAML::EndMap; - - // output to file - std::ofstream fout(param_path_.c_str()); - fout << yaml_out.c_str(); -} - -void BallDetector::setInputImage(const cv::Mat &inIm) { - in_image_ = inIm.clone(); - - if (params_config_.debug == false) - out_image_ = in_image_.clone(); -} - -void BallDetector::setInputImage(const cv::Mat &inIm, cv::Mat &in_filter_img) { - cv::cvtColor(inIm, in_filter_img, cv::COLOR_RGB2HSV); - - if (params_config_.debug == false) - out_image_ = inIm.clone(); -} - -void BallDetector::getOutputImage(cv::Mat &outIm) { - this->drawOutputImage(); - outIm = out_image_.clone(); -} - -void BallDetector::filterImage() { - if (!in_image_.data) - return; - - cv::Mat img_hsv, img_filtered; - cv::cvtColor(in_image_, img_hsv, cv::COLOR_RGB2HSV); - - inRangeHsv(img_hsv, params_config_.filter_threshold, img_filtered); - - // mophology : open and close - mophology(img_filtered, img_filtered, params_config_.ellipse_size); - - if (params_config_.use_second_filter == true) { - // mask - cv::Mat img_mask; - - // check hsv range - cv::Mat img_filtered2; - inRangeHsv(img_hsv, params_config_.filter2_threshold, img_filtered2); - - makeFilterMaskFromBall(img_filtered, img_mask); - cv::bitwise_and(img_filtered2, img_mask, img_filtered2); - - // or - cv::bitwise_or(img_filtered, img_filtered2, img_filtered); - } - - mophology(img_filtered, img_filtered, params_config_.ellipse_size); - - cv::cvtColor(img_filtered, in_image_, cv::COLOR_GRAY2RGB); -} - -void BallDetector::filterImage(const cv::Mat &in_filter_img, - cv::Mat &out_filter_img) { - if (!in_filter_img.data) - return; - - inRangeHsv(in_filter_img, params_config_.filter_threshold, out_filter_img); - - // mophology : open and close - mophology(out_filter_img, out_filter_img, params_config_.ellipse_size); - - if (params_config_.use_second_filter == true) { - // mask - cv::Mat img_mask; - - // check hsv range - cv::Mat img_filtered2; - inRangeHsv(in_filter_img, params_config_.filter2_threshold, img_filtered2); - - makeFilterMaskFromBall(out_filter_img, img_mask); - cv::bitwise_and(img_filtered2, img_mask, img_filtered2); - - // or - cv::bitwise_or(out_filter_img, img_filtered2, out_filter_img); - } - - mophology(out_filter_img, out_filter_img, params_config_.ellipse_size); - - // cv::cvtColor(img_filtered, in_image_, cv::COLOR_GRAY2RGB); - - // draws results to output Image - if (params_config_.debug == true) - cv::cvtColor(out_filter_img, out_image_, cv::COLOR_GRAY2RGB); - // out_image_ = in_image_.clone(); -} - -void BallDetector::makeFilterMask(const cv::Mat &source_img, cv::Mat &mask_img, - int range) { - // source_img. - mask_img = cv::Mat::zeros(source_img.rows, source_img.cols, CV_8UC1); - - int source_height = source_img.rows; - int source_width = source_img.cols; - - // channel : 1 - if (source_img.channels() != 1) - return; - - for (int i = 0; i < source_height; i++) { - for (int j = 0; j < source_width; j++) { - uint8_t pixel = source_img.at(i, j); - - if (pixel == 0) - continue; - - for (int mask_i = i - range; mask_i <= i + range; mask_i++) { - if (mask_i < 0 || mask_i >= source_height) - continue; - - for (int mask_j = j - range; mask_j <= j + range; mask_j++) { - if (mask_j < 0 || mask_j >= source_width) - continue; - - mask_img.at(mask_i, mask_j, 0) = 255; - } - } - } - } -} - -void BallDetector::makeFilterMaskFromBall(const cv::Mat &source_img, - cv::Mat &mask_img) { - // source_img. - mask_img = cv::Mat::zeros(source_img.rows, source_img.cols, CV_8UC1); - - if (circles_.size() == 0) - return; - - // channel : 1 - if (source_img.channels() != 1) - return; - - cv::Mat img_labels, stats, centroids; - int numOfLables = cv::connectedComponentsWithStats( - source_img, img_labels, stats, centroids, 8, CV_32S); - for (int j = 1; j < numOfLables; j++) { - int area = stats.at(j, cv::CC_STAT_AREA); - int left = stats.at(j, cv::CC_STAT_LEFT); - int top = stats.at(j, cv::CC_STAT_TOP); - int width = stats.at(j, cv::CC_STAT_WIDTH); - int height = stats.at(j, cv::CC_STAT_HEIGHT); - - int center_x = left + width * 0.5; - int center_y = top + height * 0.5; - int radius = (width + height) * 0.5; - - for (int mask_i = center_y - radius; mask_i <= center_y + radius; - mask_i++) { - if (mask_i < 0 || mask_i >= source_img.rows) - continue; - - int mask_offset = abs(mask_i - center_y) * 0.5; - - for (int mask_j = center_x - radius + mask_offset; - mask_j <= center_x + radius - mask_offset; mask_j++) { - if (mask_j < 0 || mask_j >= source_img.cols) - continue; - - mask_img.at(mask_i, mask_j, 0) = 255; - } - } - } -} - -void BallDetector::inRangeHsv(const cv::Mat &input_img, - const HsvFilter &filter_value, - cv::Mat &output_img) { - // 0-360 -> 0-180 - int scaled_hue_min = static_cast(filter_value.h_min * 0.5); - int scaled_hue_max = static_cast(filter_value.h_max * 0.5); - - if (scaled_hue_min <= scaled_hue_max) { - cv::Scalar min_value = - cv::Scalar(scaled_hue_min, filter_value.s_min, filter_value.v_min, 0); - cv::Scalar max_value = - cv::Scalar(scaled_hue_max, filter_value.s_max, filter_value.v_max, 0); - - cv::inRange(input_img, min_value, max_value, output_img); - } else { - cv::Mat lower_hue_range, upper_hue_range; - cv::Scalar min_value, max_value; - - min_value = cv::Scalar(0, filter_value.s_min, filter_value.v_min, 0); - max_value = - cv::Scalar(scaled_hue_max, filter_value.s_max, filter_value.v_max, 0); - cv::inRange(input_img, min_value, max_value, lower_hue_range); - - min_value = - cv::Scalar(scaled_hue_min, filter_value.s_min, filter_value.v_min, 0); - max_value = cv::Scalar(179, filter_value.s_max, filter_value.v_max, 0); - cv::inRange(input_img, min_value, max_value, upper_hue_range); - - cv::bitwise_or(lower_hue_range, upper_hue_range, output_img); - } -} - -void BallDetector::mophology(const cv::Mat &intput_img, cv::Mat &output_img, - int ellipse_size) { - cv::erode(intput_img, output_img, - cv::getStructuringElement(cv::MORPH_ELLIPSE, - cv::Size(ellipse_size, ellipse_size))); - cv::dilate( - output_img, output_img, - cv::getStructuringElement(cv::MORPH_ELLIPSE, - cv::Size(ellipse_size * 2, ellipse_size * 2))); - - cv::dilate(output_img, output_img, - cv::getStructuringElement(cv::MORPH_ELLIPSE, - cv::Size(ellipse_size, ellipse_size))); - cv::erode(output_img, output_img, - cv::getStructuringElement(cv::MORPH_ELLIPSE, - cv::Size(ellipse_size, ellipse_size))); -} - -void BallDetector::houghDetection(const unsigned int imgEncoding) { - cv::Mat gray_image; - std::vector circles_current; - std::vector prev_circles = circles_; - - // clear previous circles - circles_.clear(); - - // If input image is RGB, convert it to gray - if (imgEncoding == IMG_RGB8) - cv::cvtColor(in_image_, gray_image, CV_RGB2GRAY); - - // Reduce the noise so we avoid false circle detection - cv::GaussianBlur(gray_image, gray_image, - cv::Size(params_config_.gaussian_blur_size, - params_config_.gaussian_blur_size), - params_config_.gaussian_blur_sigma); - - double hough_accum_th = params_config_.hough_accum_th; - - // Apply the Hough Transform to find the circles - cv::HoughCircles(gray_image, circles_current, CV_HOUGH_GRADIENT, - params_config_.hough_accum_resolution, - params_config_.min_circle_dist, params_config_.canny_edge_th, - hough_accum_th, params_config_.min_radius, - params_config_.max_radius); - - if (circles_current.size() == 0) - not_found_count_ += 1; - else - not_found_count_ = 0; - - double alpha = 0.2; - - for (int ix = 0; ix < circles_current.size(); ix++) { - cv::Point2d center = - cv::Point(circles_current[ix][0], circles_current[ix][1]); - double radius = circles_current[ix][2]; - - for (int prev_ix = 0; prev_ix < prev_circles.size(); prev_ix++) { - cv::Point2d prev_center = - cv::Point(prev_circles[prev_ix][0], prev_circles[prev_ix][1]); - double prev_radius = prev_circles[prev_ix][2]; - - cv::Point2d diff = center - prev_center; - double radius_th = std::max(radius, prev_radius) * 0.75; - - if (sqrt(diff.dot(diff)) < radius_th) { - if (abs(radius - prev_radius) < radius_th) { - circles_current[ix] = - circles_current[ix] * alpha + prev_circles[prev_ix] * (1 - alpha); - } - - break; - } - } - - circles_.push_back(circles_current[ix]); - } -} - -void BallDetector::houghDetection2(const cv::Mat &input_hough) { - // cv::Mat gray_image; - std::vector circles_current; - std::vector prev_circles = circles_; - - // clear previous circles - circles_.clear(); - - // If input image is RGB, convert it to gray - // if (imgEncoding == IMG_RGB8) - // cv::cvtColor(input_hough, gray_image, CV_RGB2GRAY); - - // Reduce the noise so we avoid false circle detection - cv::GaussianBlur(input_hough, input_hough, - cv::Size(params_config_.gaussian_blur_size, - params_config_.gaussian_blur_size), - params_config_.gaussian_blur_sigma); - - double hough_accum_th = params_config_.hough_accum_th; - - // Apply the Hough Transform to find the circles - cv::HoughCircles(input_hough, circles_current, CV_HOUGH_GRADIENT, - params_config_.hough_accum_resolution, - params_config_.min_circle_dist, params_config_.canny_edge_th, - hough_accum_th, params_config_.min_radius, - params_config_.max_radius); - - if (circles_current.size() == 0) - not_found_count_ += 1; - else - not_found_count_ = 0; - - double alpha = 0.2; - - for (int ix = 0; ix < circles_current.size(); ix++) { - cv::Point2d center = - cv::Point(circles_current[ix][0], circles_current[ix][1]); - double radius = circles_current[ix][2]; - - for (int prev_ix = 0; prev_ix < prev_circles.size(); prev_ix++) { - cv::Point2d prev_center = - cv::Point(prev_circles[prev_ix][0], prev_circles[prev_ix][1]); - double prev_radius = prev_circles[prev_ix][2]; - - cv::Point2d diff = center - prev_center; - double radius_th = std::max(radius, prev_radius) * 0.75; - - if (sqrt(diff.dot(diff)) < radius_th) { - if (abs(radius - prev_radius) < radius_th) { - circles_current[ix] = - circles_current[ix] * alpha + prev_circles[prev_ix] * (1 - alpha); - } - - break; - } - } - - circles_.push_back(circles_current[ix]); - } -} - -void BallDetector::drawOutputImage() { - cv::Point center_position; - int radius = 0; - size_t ii; - - // draws results to output Image - // if (params_config_.debug == true) - // out_image_ = in_image_.clone(); - - for (ii = 0; ii < circles_.size(); ii++) { - { - int this_radius = cvRound(circles_[ii][2]); - if (this_radius > radius) { - radius = this_radius; - center_position = - cv::Point(cvRound(circles_[ii][0]), cvRound(circles_[ii][1])); - } - } - } - cv::circle(out_image_, center_position, 5, cv::Scalar(0, 0, 255), -1, 8, - 0); // circle center in blue - cv::circle(out_image_, center_position, radius, cv::Scalar(0, 0, 255), 3, 8, - 0); // circle outline in blue -} - -} // namespace humanoid_robot_intelligence_control_system_op diff --git a/humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector_node.cpp b/humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector_node.cpp deleted file mode 100644 index 8cecc3b..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/src/ball_detector_node.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include "humanoid_robot_intelligence_control_system_ball_detector/ball_detector.h" - -// node main -int main(int argc, char **argv) { - // init ros - ros::init(argc, argv, "ball_detector_node"); - - // create ros wrapper object - humanoid_robot_intelligence_control_system_op::BallDetector detector; - - // set node loop rate - ros::Rate loop_rate(30); - - // node loop - while (ros::ok()) { - // if new image , do things - if (detector.newImage()) { - detector.process(); - detector.publishImage(); - detector.publishCircles(); - } - - // execute pending callbacks - ros::spinOnce(); - - // relax to fit output rate - loop_rate.sleep(); - } - - // exit program - return 0; -} diff --git a/humanoid_robot_intelligence_control_system_ball_detector/srv/GetParameters.srv b/humanoid_robot_intelligence_control_system_ball_detector/srv/GetParameters.srv deleted file mode 100644 index eea6f98..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/srv/GetParameters.srv +++ /dev/null @@ -1,3 +0,0 @@ - ---- -BallDetectorParams returns diff --git a/humanoid_robot_intelligence_control_system_ball_detector/srv/SetParameters.srv b/humanoid_robot_intelligence_control_system_ball_detector/srv/SetParameters.srv deleted file mode 100644 index 0cb13ed..0000000 --- a/humanoid_robot_intelligence_control_system_ball_detector/srv/SetParameters.srv +++ /dev/null @@ -1,3 +0,0 @@ -BallDetectorParams params ---- -BallDetectorParams returns diff --git a/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup.launch.py b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup.launch.py new file mode 100644 index 0000000..9b89968 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup.launch.py @@ -0,0 +1,76 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sys +import subprocess +from launch import LaunchDescription +from launch_ros.actions import Node +from launch.actions import IncludeLaunchDescription +from launch.launch_description_sources import PythonLaunchDescriptionSource + + +def ros1_launch_description(): + # Get command-line arguments + args = sys.argv[1:] + + # Construct the ROS 1 launch commandi + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_bringup", "humanoid_robot_intelligence_control_system_bringup.launch"] + args + + # Execute the launch command + subprocess.call(roslaunch_command) + + +def ros2_launch_description(): + # Create a list to hold all nodes to be launched + nodes_to_launch = [] + + # Add the HUMANOID_ROBOT Manager launch file + nodes_to_launch.append(IncludeLaunchDescription( + PythonLaunchDescriptionSource([ + '$(find humanoid_robot_intelligence_control_system_manager)/launch/', + 'humanoid_robot_intelligence_control_system_manager.launch.py' + ]) + )) + + # Add the UVC camera node + nodes_to_launch.append(Node( + package='usb_cam', + executable='usb_cam_node', + name='usb_cam_node', + output='screen', + parameters=[{ + 'video_device': '/dev/video0', + 'image_width': 1280, + 'image_height': 720, + 'framerate': 30, + 'camera_frame_id': 'cam_link', + 'camera_name': 'camera' + }] + )) + + # Return the LaunchDescription containing all nodes + return LaunchDescription(nodes_to_launch) + + +if __name__ == "__main__": + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + ros1_launch_description() + elif ros_version == "2": + ros2_launch_description() + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch.py b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch.py new file mode 100644 index 0000000..ac4898f --- /dev/null +++ b/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch.py @@ -0,0 +1,85 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sys +import subprocess +from launch import LaunchDescription +from launch_ros.actions import Node +from launch.actions import IncludeLaunchDescription, ExecuteProcess +from launch.launch_description_sources import PythonLaunchDescriptionSource +from launch.substitutions import FindExecutable, Command + + + +def ros1_launch_description(): + # Get command-line arguments + args = sys.argv[1:] + + # Construct the ROS 1 launch command + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_bringup", "humanoid_robot_intelligence_control_system_bringup_visualization.launch"] + args + + # Execute the launch command + subprocess.call(roslaunch_command) + + +def ros2_launch_description(): + # Create a list to hold all nodes to be launched + nodes_to_launch = [] + + # Add robot description + nodes_to_launch.append(ExecuteProcess( + cmd=[FindExecutable(name='xacro'), '$(find humanoid_robot_intelligence_control_system_description)/urdf/humanoid_robot_intelligence_control_system.urdf.xacro'], + output='screen' + )) + + # Add joint state publisher + nodes_to_launch.append(Node( + package='joint_state_publisher', + executable='joint_state_publisher', + name='joint_state_publisher', + parameters=[{'use_gui': True}], + remappings=[('/robot/joint_states', '/humanoid_robot_intelligence_control_system/present_joint_states')] + )) + + # Add robot state publisher + nodes_to_launch.append(Node( + package='robot_state_publisher', + executable='robot_state_publisher', + name='robot_state_publisher', + remappings=[('/joint_states', '/humanoid_robot_intelligence_control_system/present_joint_states')] + )) + + # Add rviz + nodes_to_launch.append(Node( + package='rviz2', + executable='rviz2', + name='rviz2', + arguments=['-d', '$(find humanoid_robot_intelligence_control_system_bringup)/rviz/humanoid_robot_intelligence_control_system_bringup.rviz'] + )) + + # Return the LaunchDescription containing all nodes + return LaunchDescription(nodes_to_launch) + + +if __name__ == "__main__": + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + ros1_launch_description() + elif ros_version == "2": + ros2_launch_description() + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup.launch b/humanoid_robot_intelligence_control_system_bringup/launch/ros1/humanoid_robot_intelligence_control_system_bringup.launch similarity index 100% rename from humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup.launch rename to humanoid_robot_intelligence_control_system_bringup/launch/ros1/humanoid_robot_intelligence_control_system_bringup.launch diff --git a/humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch b/humanoid_robot_intelligence_control_system_bringup/launch/ros1/humanoid_robot_intelligence_control_system_bringup_visualization.launch similarity index 100% rename from humanoid_robot_intelligence_control_system_bringup/launch/humanoid_robot_intelligence_control_system_bringup_visualization.launch rename to humanoid_robot_intelligence_control_system_bringup/launch/ros1/humanoid_robot_intelligence_control_system_bringup_visualization.launch diff --git a/humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt b/humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt new file mode 100644 index 0000000..7f45c8d --- /dev/null +++ b/humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt @@ -0,0 +1,79 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +cmake_minimum_required(VERSION 3.0.2) +project(humanoid_robot_intelligence_control_system_object_detector) + +if($ENV{ROS_VERSION} EQUAL 1) + find_package(catkin REQUIRED COMPONENTS + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + message_generation + ) + + generate_messages( + DEPENDENCIES + std_msgs + geometry_msgs + ) + + catkin_package( + CATKIN_DEPENDS + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + message_runtime + ) + +else() + find_package(ament_cmake REQUIRED) + find_package(ament_cmake_python REQUIRED) + find_package(rclpy REQUIRED) + find_package(std_msgs REQUIRED) + find_package(sensor_msgs REQUIRED) + find_package(geometry_msgs REQUIRED) + find_package(cv_bridge REQUIRED) +endif() + +if($ENV{ROS_VERSION} EQUAL 1) + catkin_python_setup() + + catkin_install_python(PROGRAMS + scripts/object_detection_processor.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + + install(DIRECTORY config launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} + ) + +else() + ament_python_install_package(${PROJECT_NAME}) + + install(PROGRAMS + scripts/object_detection_processor.py + DESTINATION lib/${PROJECT_NAME} + ) + + install(DIRECTORY config launch rviz + DESTINATION share/${PROJECT_NAME} + ) + + ament_package() +endif() diff --git a/humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector.launch b/humanoid_robot_intelligence_control_system_object_detector/launch/object_detector.launch similarity index 100% rename from humanoid_robot_intelligence_control_system_ball_detector/launch/ball_detector.launch rename to humanoid_robot_intelligence_control_system_object_detector/launch/object_detector.launch diff --git a/humanoid_robot_intelligence_control_system_object_detector/launch/object_detector_processor.launch.py b/humanoid_robot_intelligence_control_system_object_detector/launch/object_detector_processor.launch.py new file mode 100644 index 0000000..e61d87a --- /dev/null +++ b/humanoid_robot_intelligence_control_system_object_detector/launch/object_detector_processor.launch.py @@ -0,0 +1,108 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sys +import subprocess +from launch import LaunchDescription +from launch_ros.actions import Node +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration + +def ros1_launch_description(): + # Get command-line arguments + args = sys.argv[1:] + + # Construct the ROS 1 launch command + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_object_detector", "object_detector_processor.launch"] + args + + roslaunch_command.extend([ + "usb_cam", "usb_cam_node", "name:=camera", + "video_device:=/dev/video0", + "image_width:=640", + "image_height:=480", + "pixel_format:=yuyv", + "camera_frame_id:=usb_cam", + "io_method:=mmap" + ]) + + roslaunch_command.extend([ + "ros_web_api_bellande_2d_computer_vision", "bellande_2d_computer_vision_object_detection.py", "name:=object_detection_node" + ]) + + roslaunch_command.extend([ + "humanoid_robot_intelligence_control_system_ball_detector", "object_detection_processor.py", "name:=object_detection_processor_node" + ]) + + roslaunch_command.extend([ + "rviz", "rviz", "name:=rviz", + "args:=-d $(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz" + ]) + + # Execute the launch command + subprocess.call(roslaunch_command) + +def ros2_launch_description(): + nodes_to_launch = [] + + nodes_to_launch.append(Node( + package='usb_cam', + executable='usb_cam_node', + name='camera', + output='screen', + parameters=[{ + 'video_device': '/dev/video0', + 'image_width': 640, + 'image_height': 480, + 'pixel_format': 'yuyv', + 'camera_frame_id': 'usb_cam', + 'io_method': 'mmap' + }] + )) + + nodes_to_launch.append(Node( + package='ros_web_api_bellande_2d_computer_vision', + executable='bellande_2d_computer_vision_object_detection.py', + name='object_detection_node', + output='screen', + remappings=[('camera/image_raw', '/usb_cam/image_raw')] + )) + + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_object_detector', + executable='object_detection_processor.py', + name='object_detection_processor_node', + output='screen', + parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/object_detection_params.yaml'}] + )) + + nodes_to_launch.append(Node( + package='rviz2', + executable='rviz2', + name='rviz', + arguments=['-d', '$(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz'] + )) + + return LaunchDescription(nodes_to_launch) + +if __name__ == "__main__": + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + ros1_launch_description() + elif ros_version == "2": + ros2_launch_description() + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_object_detector/launch/ros1/object_detector_processor.launch b/humanoid_robot_intelligence_control_system_object_detector/launch/ros1/object_detector_processor.launch new file mode 100644 index 0000000..6799e95 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_object_detector/launch/ros1/object_detector_processor.launch @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_intelligence_control_system_ball_detector/package.xml b/humanoid_robot_intelligence_control_system_object_detector/package.xml similarity index 96% rename from humanoid_robot_intelligence_control_system_ball_detector/package.xml rename to humanoid_robot_intelligence_control_system_object_detector/package.xml index d1d9c2c..5f82887 100644 --- a/humanoid_robot_intelligence_control_system_ball_detector/package.xml +++ b/humanoid_robot_intelligence_control_system_object_detector/package.xml @@ -16,12 +16,10 @@ the License. --> - humanoid_robot_intelligence_control_system_ball_detector - 0.3.2 + humanoid_robot_intelligence_control_system_object_detector + 0.0.1 - This package implements a circle-like shape detector of the input image - It requires and input image and publish, at frame rate, a marked image - and a stamped array of circle centers and radius. + This Package is for Object Detection, detecting objects like tools, or utilities Apache 2.0 Ronaldson Bellande diff --git a/humanoid_robot_intelligence_control_system_object_detector/src/object_detection_processor.py b/humanoid_robot_intelligence_control_system_object_detector/src/object_detection_processor.py new file mode 100644 index 0000000..6f44d68 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_object_detector/src/object_detection_processor.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import rospy +import cv2 +import numpy as np +from sensor_msgs.msg import Image, CameraInfo +from std_msgs.msg import Bool, String +from cv_bridge import CvBridge +import yaml + +class ObjectDetectionProcessor: + def __init__(self): + rospy.init_node('object_detection_processor') + self.bridge = CvBridge() + self.enable = True + self.new_image_flag = False + self.load_params() + self.setup_ros() + + def load_params(self): + param_path = rospy.get_param('~yaml_path', '') + if param_path: + with open(param_path, 'r') as file: + self.params = yaml.safe_load(file) + else: + self.set_default_params() + + def set_default_params(self): + self.params = { + 'debug': False, + 'ellipse_size': 2, + # Add other default parameters as needed + } + + def setup_ros(self): + self.image_pub = rospy.Publisher('image_out', Image, queue_size=10) + self.camera_info_pub = rospy.Publisher('camera_info', CameraInfo, queue_size=10) + + rospy.Subscriber('enable', Bool, self.enable_callback) + rospy.Subscriber('image_in', Image, self.image_callback) + rospy.Subscriber('cameraInfo_in', CameraInfo, self.camera_info_callback) + rospy.Subscriber('object_detection_result', String, self.object_detection_callback) + + def enable_callback(self, msg): + self.enable = msg.data + + def image_callback(self, msg): + if not self.enable: + return + self.cv_image = self.bridge.imgmsg_to_cv2(msg, "bgr8") + self.new_image_flag = True + self.image_header = msg.header + + def camera_info_callback(self, msg): + if not self.enable: + return + self.camera_info_msg = msg + + def object_detection_callback(self, msg): + if not self.enable or not hasattr(self, 'cv_image'): + return + + objects = eval(msg.data) # Assuming the data is a string representation of a list + self.process_detected_objects(objects) + + def process_detected_objects(self, objects): + output_image = self.cv_image.copy() + for obj in objects: + x, y, w, h = obj['bbox'] + cv2.rectangle(output_image, (int(x), int(y)), (int(x+w), int(y+h)), (0, 255, 0), 2) + cv2.putText(output_image, f"{obj['label']}: {obj['confidence']:.2f}", + (int(x), int(y-10)), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) + + self.publish_image(output_image) + + def publish_image(self, image): + img_msg = self.bridge.cv2_to_imgmsg(image, encoding="bgr8") + img_msg.header = self.image_header + self.image_pub.publish(img_msg) + if hasattr(self, 'camera_info_msg'): + self.camera_info_pub.publish(self.camera_info_msg) + + def run(self): + rate = rospy.Rate(30) # 30 Hz + while not rospy.is_shutdown(): + if self.new_image_flag: + # The processing is done in object_detection_callback + self.new_image_flag = False + rate.sleep() + +if __name__ == '__main__': + try: + processor = ObjectDetectionProcessor() + processor.run() + except rospy.ROSInterruptException: + pass diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_intelligence_control_system_read_write.launch b/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_intelligence_control_system_read_write.launch deleted file mode 100644 index 2893401..0000000 --- a/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_intelligence_control_system_read_write.launch +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_intelligence_control_system_read_write.launch.py b/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_intelligence_control_system_read_write.launch.py new file mode 100644 index 0000000..dbdd3ba --- /dev/null +++ b/humanoid_robot_intelligence_control_system_read_write_demo/launch/humanoid_robot_intelligence_control_system_read_write.launch.py @@ -0,0 +1,121 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sys +import subprocess +from launch import LaunchDescription +from launch_ros.actions import Node +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration + + +def ros1_launch_description(): + # Get command-line arguments + args = sys.argv[1:] + + # Construct the ROS 1 launch command + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_read_write_demo", "humanoid_robot_intelligence_control_system_read_write.launch"] + args + + # Add parameters + roslaunch_command.extend([ + "gazebo:=false", + "gazebo_robot_name:=humanoid_robot_intelligence_control_system", + "offset_file_path:=$(find humanoid_robot_intelligence_control_system_manager)/config/offset.yaml", + "robot_file_path:=$(find humanoid_robot_intelligence_control_system_manager)/config/HUMANOID_ROBOT.robot", + "init_file_path:=$(find humanoid_robot_intelligence_control_system_manager)/config/dxl_init_HUMANOID_ROBOT.yaml", + "device_name:=/dev/ttyUSB0", + "/humanoid_robot_intelligence_control_system/direct_control/default_moving_time:=0.04", + "/humanoid_robot_intelligence_control_system/direct_control/default_moving_angle:=90" + ]) + + # Add nodes + roslaunch_command.extend([ + "humanoid_robot_intelligence_control_system_manager", "humanoid_robot_intelligence_control_system_manager", "angle_unit:=30", + "humanoid_robot_intelligence_control_system_localization", "humanoid_robot_intelligence_control_system_localization", + "humanoid_robot_intelligence_control_system_read_write_demo", "read_write" + ]) + + # Execute the launch command + subprocess.call(roslaunch_command) + + +def ros2_launch_description(): + # Declare launch arguments + gazebo_arg = DeclareLaunchArgument('gazebo', default_value='false') + gazebo_robot_name_arg = DeclareLaunchArgument('gazebo_robot_name', default_value='humanoid_robot_intelligence_control_system') + offset_file_path_arg = DeclareLaunchArgument('offset_file_path', default_value='$(find humanoid_robot_intelligence_control_system_manager)/config/offset.yaml') + robot_file_path_arg = DeclareLaunchArgument('robot_file_path', default_value='$(find humanoid_robot_intelligence_control_system_manager)/config/HUMANOID_ROBOT.robot') + init_file_path_arg = DeclareLaunchArgument('init_file_path', default_value='$(find humanoid_robot_intelligence_control_system_manager)/config/dxl_init_HUMANOID_ROBOT.yaml') + device_name_arg = DeclareLaunchArgument('device_name', default_value='/dev/ttyUSB0') + + # Create a list to hold all nodes to be launched + nodes_to_launch = [] + + # Add HUMANOID_ROBOT Manager node + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_manager', + executable='humanoid_robot_intelligence_control_system_manager', + name='humanoid_robot_intelligence_control_system_manager', + output='screen', + parameters=[ + {'angle_unit': 30}, + {'gazebo': LaunchConfiguration('gazebo')}, + {'gazebo_robot_name': LaunchConfiguration('gazebo_robot_name')}, + {'offset_file_path': LaunchConfiguration('offset_file_path')}, + {'robot_file_path': LaunchConfiguration('robot_file_path')}, + {'init_file_path': LaunchConfiguration('init_file_path')}, + {'device_name': LaunchConfiguration('device_name')}, + {'/humanoid_robot_intelligence_control_system/direct_control/default_moving_time': 0.04}, + {'/humanoid_robot_intelligence_control_system/direct_control/default_moving_angle': 90} + ] + )) + + # Add HUMANOID_ROBOT Localization node + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_localization', + executable='humanoid_robot_intelligence_control_system_localization', + name='humanoid_robot_intelligence_control_system_localization', + output='screen' + )) + + # Add HUMANOID_ROBOT Read-Write demo node + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_read_write_demo', + executable='read_write', + name='humanoid_robot_intelligence_control_system_read_write', + output='screen' + )) + + # Return the LaunchDescription containing all nodes and arguments + return LaunchDescription([ + gazebo_arg, + gazebo_robot_name_arg, + offset_file_path_arg, + robot_file_path_arg, + init_file_path_arg, + device_name_arg + ] + nodes_to_launch) + + +if __name__ == "__main__": + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + ros1_launch_description() + elif ros_version == "2": + ros2_launch_description() + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/launch/ros1/humanoid_robot_intelligence_control_system_read_write.launch b/humanoid_robot_intelligence_control_system_read_write_demo/launch/ros1/humanoid_robot_intelligence_control_system_read_write.launch new file mode 100644 index 0000000..8bf520d --- /dev/null +++ b/humanoid_robot_intelligence_control_system_read_write_demo/launch/ros1/humanoid_robot_intelligence_control_system_read_write.launch @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/setup.py b/humanoid_robot_intelligence_control_system_read_write_demo/setup.py index 723c5aa..317c74c 100644 --- a/humanoid_robot_intelligence_control_system_read_write_demo/setup.py +++ b/humanoid_robot_intelligence_control_system_read_write_demo/setup.py @@ -1,3 +1,18 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + from distutils.core import setup from catkin_pkg.python_setup import generate_distutils_setup From 49859687f5f06a786b5630a86e538efbcf5eb806 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Mon, 22 Jul 2024 19:55:32 -0400 Subject: [PATCH 153/172] latest pushes --- .../CMakeLists.txt | 4 +- .../package.xml | 12 +- .../CMakeLists.txt | 12 +- .../launch/object_detector.launch | 12 -- .../package.xml | 124 ++++-------------- .../setup.py | 26 ++++ .../CHANGELOG.rst | 26 ---- 7 files changed, 64 insertions(+), 152 deletions(-) delete mode 100644 humanoid_robot_intelligence_control_system_object_detector/launch/object_detector.launch create mode 100644 humanoid_robot_intelligence_control_system_object_detector/setup.py delete mode 100644 humanoid_robot_intelligence_control_system_read_write_demo/CHANGELOG.rst diff --git a/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt b/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt index 081329a..1a98f2b 100644 --- a/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt @@ -29,7 +29,7 @@ if($ENV{ROS_VERSION} EQUAL 1) humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_object_detector ) find_package(Boost REQUIRED COMPONENTS thread) find_package(Eigen3 REQUIRED) @@ -71,7 +71,7 @@ if($ENV{ROS_VERSION} EQUAL 1) humanoid_robot_intelligence_control_system_action_module_msgs cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_object_detector DEPENDS Boost EIGEN3 ) endif() diff --git a/humanoid_robot_intelligence_control_system_demo/package.xml b/humanoid_robot_intelligence_control_system_demo/package.xml index f0d81ce..1288222 100644 --- a/humanoid_robot_intelligence_control_system_demo/package.xml +++ b/humanoid_robot_intelligence_control_system_demo/package.xml @@ -42,7 +42,7 @@ the License. cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_object_detector boost eigen yaml-cpp @@ -66,7 +66,7 @@ the License. cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_object_detector boost eigen yaml-cpp @@ -91,7 +91,7 @@ the License. cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_object_detector boost eigen yaml-cpp @@ -118,7 +118,7 @@ the License. cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_object_detector boost eigen yaml-cpp @@ -142,7 +142,7 @@ the License. cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_object_detector boost eigen yaml-cpp @@ -167,7 +167,7 @@ the License. cmake_modules humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_ball_detector + humanoid_robot_intelligence_control_system_object_detector boost eigen yaml-cpp diff --git a/humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt b/humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt index 7f45c8d..55bba24 100644 --- a/humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt @@ -22,13 +22,6 @@ if($ENV{ROS_VERSION} EQUAL 1) sensor_msgs geometry_msgs cv_bridge - message_generation - ) - - generate_messages( - DEPENDENCIES - std_msgs - geometry_msgs ) catkin_package( @@ -38,7 +31,6 @@ if($ENV{ROS_VERSION} EQUAL 1) sensor_msgs geometry_msgs cv_bridge - message_runtime ) else() @@ -55,7 +47,7 @@ if($ENV{ROS_VERSION} EQUAL 1) catkin_python_setup() catkin_install_python(PROGRAMS - scripts/object_detection_processor.py + src/object_detection_processor.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) @@ -67,7 +59,7 @@ else() ament_python_install_package(${PROJECT_NAME}) install(PROGRAMS - scripts/object_detection_processor.py + src/object_detection_processor.py DESTINATION lib/${PROJECT_NAME} ) diff --git a/humanoid_robot_intelligence_control_system_object_detector/launch/object_detector.launch b/humanoid_robot_intelligence_control_system_object_detector/launch/object_detector.launch deleted file mode 100644 index 564bebb..0000000 --- a/humanoid_robot_intelligence_control_system_object_detector/launch/object_detector.launch +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/humanoid_robot_intelligence_control_system_object_detector/package.xml b/humanoid_robot_intelligence_control_system_object_detector/package.xml index 5f82887..706fe9e 100644 --- a/humanoid_robot_intelligence_control_system_object_detector/package.xml +++ b/humanoid_robot_intelligence_control_system_object_detector/package.xml @@ -24,106 +24,38 @@ the License. Apache 2.0 Ronaldson Bellande - catkin - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam - - ament_cmake + ament_cmake_python - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam + + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + image_transport + dynamic_reconfigure + message_generation + message_runtime - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam + + rclpy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + image_transport + rosidl_default_generators + rosidl_default_runtime - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - dynamic_reconfigure - cv_bridge - image_transport - boost - opencv3 - yaml-cpp - message_generation - message_runtime - message_runtime - usb_cam + + python3-opencv + python3-yaml + usb_cam + + catkin + ament_cmake + diff --git a/humanoid_robot_intelligence_control_system_object_detector/setup.py b/humanoid_robot_intelligence_control_system_object_detector/setup.py new file mode 100644 index 0000000..a2eac39 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_object_detector/setup.py @@ -0,0 +1,26 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from distutils.core import setup +from catkin_pkg.python_setup import generate_distutils_setup + +# fetch values from package.xml +setup_args = generate_distutils_setup( + scripts=['src/object_detection_processor.py'], + packages=['humanoid_robot_intelligence_control_system_object_detector'], + package_dir={'': 'src'}, +) + +setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_read_write_demo/CHANGELOG.rst b/humanoid_robot_intelligence_control_system_read_write_demo/CHANGELOG.rst deleted file mode 100644 index db641ea..0000000 --- a/humanoid_robot_intelligence_control_system_read_write_demo/CHANGELOG.rst +++ /dev/null @@ -1,26 +0,0 @@ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package humanoid_robot_intelligence_control_system_read_write_demo -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -0.3.2 (2023-10-03) ------------------- -* Make it compatible for ROS1/ROS2 -* Fix bugs -* Update package.xml and CMakeList.txt for to the latest versions -* Contributors & Maintainer: Ronaldson Bellande - -0.3.1 (2023-09-27) ------------------- -* Starting from this point it under a new license -* Fix errors and Issues -* Rename Repository for a completely different purpose -* Make it compatible with ROS/ROS2 -* Upgrade version of all builds and make it more compatible -* Update package.xml and CMakeList.txt for to the latest versions -* Contributors & Maintainer: Ronaldson Bellande - - -0.3.0 (2021-05-05) ------------------- -* Update package.xml and CMakeList.txt for noetic branch -* Contributors: Ronaldson Bellande From 819c217a970d2de50fa077faefc561263b0c7d4d Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Mon, 22 Jul 2024 20:46:28 -0400 Subject: [PATCH 154/172] latest pushes --- .../CMakeLists.txt | 71 +++++++++++ .../launch/face_detector_processor.launch.py | 108 +++++++++++++++++ .../ros1/face_detector_processor.launch | 41 +++++++ .../package.xml | 61 ++++++++++ .../setup.py | 26 ++++ .../src/face_detection_processor.py | 111 ++++++++++++++++++ .../CMakeLists.txt | 71 +++++++++++ .../ros1/speech_detector_processor.launch | 41 +++++++ .../speech_detector_processor.launch.py | 108 +++++++++++++++++ .../package.xml | 61 ++++++++++ .../setup.py | 26 ++++ .../src/speech_detection_processor.py | 111 ++++++++++++++++++ 12 files changed, 836 insertions(+) create mode 100644 humanoid_robot_intelligence_control_system_face_detector/CMakeLists.txt create mode 100644 humanoid_robot_intelligence_control_system_face_detector/launch/face_detector_processor.launch.py create mode 100644 humanoid_robot_intelligence_control_system_face_detector/launch/ros1/face_detector_processor.launch create mode 100644 humanoid_robot_intelligence_control_system_face_detector/package.xml create mode 100644 humanoid_robot_intelligence_control_system_face_detector/setup.py create mode 100644 humanoid_robot_intelligence_control_system_face_detector/src/face_detection_processor.py create mode 100644 humanoid_robot_intelligence_control_system_speech_detector/CMakeLists.txt create mode 100644 humanoid_robot_intelligence_control_system_speech_detector/launch/ros1/speech_detector_processor.launch create mode 100644 humanoid_robot_intelligence_control_system_speech_detector/launch/speech_detector_processor.launch.py create mode 100644 humanoid_robot_intelligence_control_system_speech_detector/package.xml create mode 100644 humanoid_robot_intelligence_control_system_speech_detector/setup.py create mode 100644 humanoid_robot_intelligence_control_system_speech_detector/src/speech_detection_processor.py diff --git a/humanoid_robot_intelligence_control_system_face_detector/CMakeLists.txt b/humanoid_robot_intelligence_control_system_face_detector/CMakeLists.txt new file mode 100644 index 0000000..2eb131f --- /dev/null +++ b/humanoid_robot_intelligence_control_system_face_detector/CMakeLists.txt @@ -0,0 +1,71 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +cmake_minimum_required(VERSION 3.0.2) +project(humanoid_robot_intelligence_control_system_face_detector) + +if($ENV{ROS_VERSION} EQUAL 1) + find_package(catkin REQUIRED COMPONENTS + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + ) + + catkin_package( + CATKIN_DEPENDS + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + ) + +else() + find_package(ament_cmake REQUIRED) + find_package(ament_cmake_python REQUIRED) + find_package(rclpy REQUIRED) + find_package(std_msgs REQUIRED) + find_package(sensor_msgs REQUIRED) + find_package(geometry_msgs REQUIRED) + find_package(cv_bridge REQUIRED) +endif() + +if($ENV{ROS_VERSION} EQUAL 1) + catkin_python_setup() + + catkin_install_python(PROGRAMS + src/face_detection_processor.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + + install(DIRECTORY config launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} + ) + +else() + ament_python_install_package(${PROJECT_NAME}) + + install(PROGRAMS + src/face_detection_processor.py + DESTINATION lib/${PROJECT_NAME} + ) + + install(DIRECTORY config launch rviz + DESTINATION share/${PROJECT_NAME} + ) + + ament_package() +endif() diff --git a/humanoid_robot_intelligence_control_system_face_detector/launch/face_detector_processor.launch.py b/humanoid_robot_intelligence_control_system_face_detector/launch/face_detector_processor.launch.py new file mode 100644 index 0000000..4a6456b --- /dev/null +++ b/humanoid_robot_intelligence_control_system_face_detector/launch/face_detector_processor.launch.py @@ -0,0 +1,108 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sys +import subprocess +from launch import LaunchDescription +from launch_ros.actions import Node +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration + +def ros1_launch_description(): + # Get command-line arguments + args = sys.argv[1:] + + # Construct the ROS 1 launch command + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_face_detector", "face_detector_processor.launch"] + args + + roslaunch_command.extend([ + "usb_cam", "usb_cam_node", "name:=camera", + "video_device:=/dev/video0", + "image_width:=640", + "image_height:=480", + "pixel_format:=yuyv", + "camera_frame_id:=usb_cam", + "io_method:=mmap" + ]) + + roslaunch_command.extend([ + "ros_web_api_bellande_2d_computer_vision", "bellande_2d_computer_vision_face_detection.py", "name:=face_detection_node" + ]) + + roslaunch_command.extend([ + "humanoid_robot_intelligence_control_system_ball_detector", "face_detection_processor.py", "name:=face_detection_processor_node" + ]) + + roslaunch_command.extend([ + "rviz", "rviz", "name:=rviz", + "args:=-d $(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz" + ]) + + # Execute the launch command + subprocess.call(roslaunch_command) + +def ros2_launch_description(): + nodes_to_launch = [] + + nodes_to_launch.append(Node( + package='usb_cam', + executable='usb_cam_node', + name='camera', + output='screen', + parameters=[{ + 'video_device': '/dev/video0', + 'image_width': 640, + 'image_height': 480, + 'pixel_format': 'yuyv', + 'camera_frame_id': 'usb_cam', + 'io_method': 'mmap' + }] + )) + + nodes_to_launch.append(Node( + package='ros_web_api_bellande_2d_computer_vision', + executable='bellande_2d_computer_vision_face_detection.py', + name='face_detection_node', + output='screen', + remappings=[('camera/image_raw', '/usb_cam/image_raw')] + )) + + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_face_detector', + executable='face_detection_processor.py', + name='face_detection_processor_node', + output='screen', + parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/face_detection_params.yaml'}] + )) + + nodes_to_launch.append(Node( + package='rviz2', + executable='rviz2', + name='rviz', + arguments=['-d', '$(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz'] + )) + + return LaunchDescription(nodes_to_launch) + +if __name__ == "__main__": + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + ros1_launch_description() + elif ros_version == "2": + ros2_launch_description() + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_face_detector/launch/ros1/face_detector_processor.launch b/humanoid_robot_intelligence_control_system_face_detector/launch/ros1/face_detector_processor.launch new file mode 100644 index 0000000..6c4507d --- /dev/null +++ b/humanoid_robot_intelligence_control_system_face_detector/launch/ros1/face_detector_processor.launch @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_intelligence_control_system_face_detector/package.xml b/humanoid_robot_intelligence_control_system_face_detector/package.xml new file mode 100644 index 0000000..9e60a19 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_face_detector/package.xml @@ -0,0 +1,61 @@ + + + + + humanoid_robot_intelligence_control_system_face_detector + 0.0.1 + + This Package is for Object Detection, detecting faces like tools, or utilities + + Apache 2.0 + Ronaldson Bellande + + catkin + ament_cmake + ament_cmake_python + + + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + image_transport + dynamic_reconfigure + message_generation + message_runtime + + + rclpy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + image_transport + rosidl_default_generators + rosidl_default_runtime + + + python3-opencv + python3-yaml + usb_cam + + + catkin + ament_cmake + + diff --git a/humanoid_robot_intelligence_control_system_face_detector/setup.py b/humanoid_robot_intelligence_control_system_face_detector/setup.py new file mode 100644 index 0000000..f391975 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_face_detector/setup.py @@ -0,0 +1,26 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from distutils.core import setup +from catkin_pkg.python_setup import generate_distutils_setup + +# fetch values from package.xml +setup_args = generate_distutils_setup( + scripts=['src/face_detection_processor.py'], + packages=['humanoid_robot_intelligence_control_system_face_detector'], + package_dir={'': 'src'}, +) + +setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_face_detector/src/face_detection_processor.py b/humanoid_robot_intelligence_control_system_face_detector/src/face_detection_processor.py new file mode 100644 index 0000000..5484d2d --- /dev/null +++ b/humanoid_robot_intelligence_control_system_face_detector/src/face_detection_processor.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import rospy +import cv2 +import numpy as np +from sensor_msgs.msg import Image, CameraInfo +from std_msgs.msg import Bool, String +from cv_bridge import CvBridge +import yaml + +class ObjectDetectionProcessor: + def __init__(self): + rospy.init_node('face_detection_processor') + self.bridge = CvBridge() + self.enable = True + self.new_image_flag = False + self.load_params() + self.setup_ros() + + def load_params(self): + param_path = rospy.get_param('~yaml_path', '') + if param_path: + with open(param_path, 'r') as file: + self.params = yaml.safe_load(file) + else: + self.set_default_params() + + def set_default_params(self): + self.params = { + 'debug': False, + 'ellipse_size': 2, + # Add other default parameters as needed + } + + def setup_ros(self): + self.image_pub = rospy.Publisher('image_out', Image, queue_size=10) + self.camera_info_pub = rospy.Publisher('camera_info', CameraInfo, queue_size=10) + + rospy.Subscriber('enable', Bool, self.enable_callback) + rospy.Subscriber('image_in', Image, self.image_callback) + rospy.Subscriber('cameraInfo_in', CameraInfo, self.camera_info_callback) + rospy.Subscriber('face_detection_result', String, self.face_detection_callback) + + def enable_callback(self, msg): + self.enable = msg.data + + def image_callback(self, msg): + if not self.enable: + return + self.cv_image = self.bridge.imgmsg_to_cv2(msg, "bgr8") + self.new_image_flag = True + self.image_header = msg.header + + def camera_info_callback(self, msg): + if not self.enable: + return + self.camera_info_msg = msg + + def face_detection_callback(self, msg): + if not self.enable or not hasattr(self, 'cv_image'): + return + + faces = eval(msg.data) # Assuming the data is a string representation of a list + self.process_detected_faces(faces) + + def process_detected_faces(self, faces): + output_image = self.cv_image.copy() + for obj in faces: + x, y, w, h = obj['bbox'] + cv2.rectangle(output_image, (int(x), int(y)), (int(x+w), int(y+h)), (0, 255, 0), 2) + cv2.putText(output_image, f"{obj['label']}: {obj['confidence']:.2f}", + (int(x), int(y-10)), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) + + self.publish_image(output_image) + + def publish_image(self, image): + img_msg = self.bridge.cv2_to_imgmsg(image, encoding="bgr8") + img_msg.header = self.image_header + self.image_pub.publish(img_msg) + if hasattr(self, 'camera_info_msg'): + self.camera_info_pub.publish(self.camera_info_msg) + + def run(self): + rate = rospy.Rate(30) # 30 Hz + while not rospy.is_shutdown(): + if self.new_image_flag: + # The processing is done in face_detection_callback + self.new_image_flag = False + rate.sleep() + +if __name__ == '__main__': + try: + processor = ObjectDetectionProcessor() + processor.run() + except rospy.ROSInterruptException: + pass diff --git a/humanoid_robot_intelligence_control_system_speech_detector/CMakeLists.txt b/humanoid_robot_intelligence_control_system_speech_detector/CMakeLists.txt new file mode 100644 index 0000000..78abc20 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_speech_detector/CMakeLists.txt @@ -0,0 +1,71 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +cmake_minimum_required(VERSION 3.0.2) +project(humanoid_robot_intelligence_control_system_speech_detector) + +if($ENV{ROS_VERSION} EQUAL 1) + find_package(catkin REQUIRED COMPONENTS + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + ) + + catkin_package( + CATKIN_DEPENDS + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + ) + +else() + find_package(ament_cmake REQUIRED) + find_package(ament_cmake_python REQUIRED) + find_package(rclpy REQUIRED) + find_package(std_msgs REQUIRED) + find_package(sensor_msgs REQUIRED) + find_package(geometry_msgs REQUIRED) + find_package(cv_bridge REQUIRED) +endif() + +if($ENV{ROS_VERSION} EQUAL 1) + catkin_python_setup() + + catkin_install_python(PROGRAMS + src/speech_detection_processor.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + + install(DIRECTORY config launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} + ) + +else() + ament_python_install_package(${PROJECT_NAME}) + + install(PROGRAMS + src/speech_detection_processor.py + DESTINATION lib/${PROJECT_NAME} + ) + + install(DIRECTORY config launch rviz + DESTINATION share/${PROJECT_NAME} + ) + + ament_package() +endif() diff --git a/humanoid_robot_intelligence_control_system_speech_detector/launch/ros1/speech_detector_processor.launch b/humanoid_robot_intelligence_control_system_speech_detector/launch/ros1/speech_detector_processor.launch new file mode 100644 index 0000000..014521f --- /dev/null +++ b/humanoid_robot_intelligence_control_system_speech_detector/launch/ros1/speech_detector_processor.launch @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_intelligence_control_system_speech_detector/launch/speech_detector_processor.launch.py b/humanoid_robot_intelligence_control_system_speech_detector/launch/speech_detector_processor.launch.py new file mode 100644 index 0000000..c11ca70 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_speech_detector/launch/speech_detector_processor.launch.py @@ -0,0 +1,108 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sys +import subprocess +from launch import LaunchDescription +from launch_ros.actions import Node +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration + +def ros1_launch_description(): + # Get command-line arguments + args = sys.argv[1:] + + # Construct the ROS 1 launch command + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_speech_detector", "speech_detector_processor.launch"] + args + + roslaunch_command.extend([ + "usb_cam", "usb_cam_node", "name:=camera", + "video_device:=/dev/video0", + "image_width:=640", + "image_height:=480", + "pixel_format:=yuyv", + "camera_frame_id:=usb_cam", + "io_method:=mmap" + ]) + + roslaunch_command.extend([ + "ros_web_api_bellande_2d_computer_vision", "bellande_2d_computer_vision_speech_detection.py", "name:=speech_detection_node" + ]) + + roslaunch_command.extend([ + "humanoid_robot_intelligence_control_system_ball_detector", "speech_detection_processor.py", "name:=speech_detection_processor_node" + ]) + + roslaunch_command.extend([ + "rviz", "rviz", "name:=rviz", + "args:=-d $(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz" + ]) + + # Execute the launch command + subprocess.call(roslaunch_command) + +def ros2_launch_description(): + nodes_to_launch = [] + + nodes_to_launch.append(Node( + package='usb_cam', + executable='usb_cam_node', + name='camera', + output='screen', + parameters=[{ + 'video_device': '/dev/video0', + 'image_width': 640, + 'image_height': 480, + 'pixel_format': 'yuyv', + 'camera_frame_id': 'usb_cam', + 'io_method': 'mmap' + }] + )) + + nodes_to_launch.append(Node( + package='ros_web_api_bellande_2d_computer_vision', + executable='bellande_2d_computer_vision_speech_detection.py', + name='speech_detection_node', + output='screen', + remappings=[('camera/image_raw', '/usb_cam/image_raw')] + )) + + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_speech_detector', + executable='speech_detection_processor.py', + name='speech_detection_processor_node', + output='screen', + parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/speech_detection_params.yaml'}] + )) + + nodes_to_launch.append(Node( + package='rviz2', + executable='rviz2', + name='rviz', + arguments=['-d', '$(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz'] + )) + + return LaunchDescription(nodes_to_launch) + +if __name__ == "__main__": + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + ros1_launch_description() + elif ros_version == "2": + ros2_launch_description() + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_speech_detector/package.xml b/humanoid_robot_intelligence_control_system_speech_detector/package.xml new file mode 100644 index 0000000..416194b --- /dev/null +++ b/humanoid_robot_intelligence_control_system_speech_detector/package.xml @@ -0,0 +1,61 @@ + + + + + humanoid_robot_intelligence_control_system_speech_detector + 0.0.1 + + This Package is for Object Detection, detecting speechs like tools, or utilities + + Apache 2.0 + Ronaldson Bellande + + catkin + ament_cmake + ament_cmake_python + + + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + image_transport + dynamic_reconfigure + message_generation + message_runtime + + + rclpy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + image_transport + rosidl_default_generators + rosidl_default_runtime + + + python3-opencv + python3-yaml + usb_cam + + + catkin + ament_cmake + + diff --git a/humanoid_robot_intelligence_control_system_speech_detector/setup.py b/humanoid_robot_intelligence_control_system_speech_detector/setup.py new file mode 100644 index 0000000..f4a55e3 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_speech_detector/setup.py @@ -0,0 +1,26 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from distutils.core import setup +from catkin_pkg.python_setup import generate_distutils_setup + +# fetch values from package.xml +setup_args = generate_distutils_setup( + scripts=['src/speech_detection_processor.py'], + packages=['humanoid_robot_intelligence_control_system_speech_detector'], + package_dir={'': 'src'}, +) + +setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_speech_detector/src/speech_detection_processor.py b/humanoid_robot_intelligence_control_system_speech_detector/src/speech_detection_processor.py new file mode 100644 index 0000000..fcc60d2 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_speech_detector/src/speech_detection_processor.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import rospy +import cv2 +import numpy as np +from sensor_msgs.msg import Image, CameraInfo +from std_msgs.msg import Bool, String +from cv_bridge import CvBridge +import yaml + +class ObjectDetectionProcessor: + def __init__(self): + rospy.init_node('speech_detection_processor') + self.bridge = CvBridge() + self.enable = True + self.new_image_flag = False + self.load_params() + self.setup_ros() + + def load_params(self): + param_path = rospy.get_param('~yaml_path', '') + if param_path: + with open(param_path, 'r') as file: + self.params = yaml.safe_load(file) + else: + self.set_default_params() + + def set_default_params(self): + self.params = { + 'debug': False, + 'ellipse_size': 2, + # Add other default parameters as needed + } + + def setup_ros(self): + self.image_pub = rospy.Publisher('image_out', Image, queue_size=10) + self.camera_info_pub = rospy.Publisher('camera_info', CameraInfo, queue_size=10) + + rospy.Subscriber('enable', Bool, self.enable_callback) + rospy.Subscriber('image_in', Image, self.image_callback) + rospy.Subscriber('cameraInfo_in', CameraInfo, self.camera_info_callback) + rospy.Subscriber('speech_detection_result', String, self.speech_detection_callback) + + def enable_callback(self, msg): + self.enable = msg.data + + def image_callback(self, msg): + if not self.enable: + return + self.cv_image = self.bridge.imgmsg_to_cv2(msg, "bgr8") + self.new_image_flag = True + self.image_header = msg.header + + def camera_info_callback(self, msg): + if not self.enable: + return + self.camera_info_msg = msg + + def speech_detection_callback(self, msg): + if not self.enable or not hasattr(self, 'cv_image'): + return + + speechs = eval(msg.data) # Assuming the data is a string representation of a list + self.process_detected_speechs(speechs) + + def process_detected_speechs(self, speechs): + output_image = self.cv_image.copy() + for obj in speechs: + x, y, w, h = obj['bbox'] + cv2.rectangle(output_image, (int(x), int(y)), (int(x+w), int(y+h)), (0, 255, 0), 2) + cv2.putText(output_image, f"{obj['label']}: {obj['confidence']:.2f}", + (int(x), int(y-10)), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) + + self.publish_image(output_image) + + def publish_image(self, image): + img_msg = self.bridge.cv2_to_imgmsg(image, encoding="bgr8") + img_msg.header = self.image_header + self.image_pub.publish(img_msg) + if hasattr(self, 'camera_info_msg'): + self.camera_info_pub.publish(self.camera_info_msg) + + def run(self): + rate = rospy.Rate(30) # 30 Hz + while not rospy.is_shutdown(): + if self.new_image_flag: + # The processing is done in speech_detection_callback + self.new_image_flag = False + rate.sleep() + +if __name__ == '__main__': + try: + processor = ObjectDetectionProcessor() + processor.run() + except rospy.ROSInterruptException: + pass From 59e333c03892cd48d8343f528c167efb46e91e29 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 23 Jul 2024 01:28:20 -0400 Subject: [PATCH 155/172] latest pushes --- .../CMakeLists.txt | 77 ++++ .../launch/face_follower.launch.py | 114 ++++++ .../launch/face_tracker.launch.py | 112 ++++++ .../launch/object_follower.launch.py | 108 ++++++ .../launch/object_tracker.launch.py | 108 ++++++ .../launch/ros1/face_follower.launch | 41 +++ .../launch/ros1/face_tracker.launch | 41 +++ .../launch/ros1/object_follower.launch | 41 +++ .../launch/ros1/object_tracker.launch | 41 +++ .../package.xml | 61 +++ .../setup.py | 26 ++ .../src/face_follower.py | 173 +++++++++ .../src/face_tracker.py | 179 +++++++++ .../src/object_follower.py | 218 +++++++++++ .../src/object_tracker.py | 194 ++++++++++ .../data/mp3/Autonomous soccer mode.mp3 | Bin 13287 -> 0 bytes .../data/mp3/Bye bye.mp3 | Bin 8271 -> 0 bytes .../data/mp3/Clap please.mp3 | Bin 8741 -> 0 bytes .../data/mp3/Demonstration ready mode.mp3 | Bin 13443 -> 0 bytes .../data/mp3/Headstand.mp3 | Bin 8428 -> 0 bytes .../data/mp3/Interactive motion mode.mp3 | Bin 13287 -> 0 bytes .../data/mp3/Intro01.mp3 | Bin 397479 -> 0 bytes .../data/mp3/Intro02.mp3 | Bin 389955 -> 0 bytes .../data/mp3/Intro03.mp3 | Bin 196858 -> 0 bytes .../data/mp3/Introduction.mp3 | Bin 244819 -> 0 bytes .../data/mp3/Left kick.mp3 | Bin 8271 -> 0 bytes .../data/mp3/No.mp3 | Bin 6861 -> 0 bytes .../data/mp3/Oops.mp3 | Bin 6861 -> 0 bytes .../data/mp3/Right kick.mp3 | Bin 7958 -> 0 bytes .../data/mp3/Sensor calibration complete.mp3 | Bin 14070 -> 0 bytes .../data/mp3/Sensor calibration fail.mp3 | Bin 13600 -> 0 bytes .../data/mp3/Shoot.mp3 | Bin 6234 -> 0 bytes .../data/mp3/Sit down.mp3 | Bin 7801 -> 0 bytes .../data/mp3/Stand up.mp3 | Bin 8114 -> 0 bytes .../data/mp3/Start motion demonstration.mp3 | Bin 13443 -> 0 bytes .../data/mp3/Start soccer demonstration.mp3 | Bin 13443 -> 0 bytes .../Start vision processing demonstration.mp3 | Bin 18146 -> 0 bytes .../data/mp3/System shutdown.mp3 | Bin 10309 -> 0 bytes .../data/mp3/Thank you.mp3 | Bin 7174 -> 0 bytes .../data/mp3/Vision processing mode.mp3 | Bin 13287 -> 0 bytes .../data/mp3/Wow.mp3 | Bin 6077 -> 0 bytes .../data/mp3/Yes go.mp3 | Bin 7174 -> 0 bytes .../data/mp3/Yes.mp3 | Bin 7017 -> 0 bytes .../data/mp3/intro_test.mp3 | Bin 62815 -> 0 bytes .../data/mp3/test/Announce mic test.mp3 | Bin 21123 -> 0 bytes .../data/mp3/test/Button test mode.mp3 | Bin 11249 -> 0 bytes .../data/mp3/test/Mic test mode.mp3 | Bin 11092 -> 0 bytes .../mp3/test/Mode button long pressed.mp3 | Bin 12817 -> 0 bytes .../data/mp3/test/Mode button pressed.mp3 | Bin 11406 -> 0 bytes .../data/mp3/test/Self test ready mode.mp3 | Bin 12660 -> 0 bytes .../mp3/test/Start button long pressed.mp3 | Bin 13443 -> 0 bytes .../data/mp3/test/Start button pressed.mp3 | Bin 12033 -> 0 bytes .../data/mp3/test/Start button test mode.mp3 | Bin 13600 -> 0 bytes .../data/mp3/test/Start mic test mode.mp3 | Bin 13287 -> 0 bytes .../data/mp3/test/Start playing.mp3 | Bin 8898 -> 0 bytes .../data/mp3/test/Start recording.mp3 | Bin 9839 -> 0 bytes .../mp3/test/User button long pressed.mp3 | Bin 13600 -> 0 bytes .../data/mp3/test/User button pressed.mp3 | Bin 12190 -> 0 bytes .../launch/face_detection.launch | 28 -- .../list/action_script.yaml | 23 -- .../list/action_script_bk.yaml | 18 - .../src/action/action_demo.cpp | 346 ------------------ 62 files changed, 1534 insertions(+), 415 deletions(-) create mode 100644 humanoid_robot_intelligence_control_system_configure/CMakeLists.txt create mode 100644 humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py create mode 100644 humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py create mode 100644 humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py create mode 100644 humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py create mode 100644 humanoid_robot_intelligence_control_system_configure/launch/ros1/face_follower.launch create mode 100644 humanoid_robot_intelligence_control_system_configure/launch/ros1/face_tracker.launch create mode 100644 humanoid_robot_intelligence_control_system_configure/launch/ros1/object_follower.launch create mode 100644 humanoid_robot_intelligence_control_system_configure/launch/ros1/object_tracker.launch create mode 100644 humanoid_robot_intelligence_control_system_configure/package.xml create mode 100644 humanoid_robot_intelligence_control_system_configure/setup.py create mode 100644 humanoid_robot_intelligence_control_system_configure/src/face_follower.py create mode 100644 humanoid_robot_intelligence_control_system_configure/src/face_tracker.py create mode 100644 humanoid_robot_intelligence_control_system_configure/src/object_follower.py create mode 100644 humanoid_robot_intelligence_control_system_configure/src/object_tracker.py delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Autonomous soccer mode.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Bye bye.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Clap please.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Demonstration ready mode.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Headstand.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Interactive motion mode.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Intro01.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Intro02.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Intro03.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Introduction.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Left kick.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/No.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Right kick.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Sensor calibration complete.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Sensor calibration fail.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Shoot.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Sit down.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Stand up.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Start motion demonstration.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Start soccer demonstration.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Start vision processing demonstration.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/System shutdown.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Thank you.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Vision processing mode.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Wow.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Yes go.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/Yes.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/intro_test.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Announce mic test.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Button test mode.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mic test mode.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mode button long pressed.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mode button pressed.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Self test ready mode.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button long pressed.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button pressed.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button test mode.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start mic test mode.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start playing.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start recording.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/User button long pressed.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/data/mp3/test/User button pressed.mp3 delete mode 100644 humanoid_robot_intelligence_control_system_demo/launch/face_detection.launch delete mode 100644 humanoid_robot_intelligence_control_system_demo/list/action_script.yaml delete mode 100644 humanoid_robot_intelligence_control_system_demo/list/action_script_bk.yaml delete mode 100644 humanoid_robot_intelligence_control_system_demo/src/action/action_demo.cpp diff --git a/humanoid_robot_intelligence_control_system_configure/CMakeLists.txt b/humanoid_robot_intelligence_control_system_configure/CMakeLists.txt new file mode 100644 index 0000000..0277ccd --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/CMakeLists.txt @@ -0,0 +1,77 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +cmake_minimum_required(VERSION 3.0.2) +project(humanoid_robot_intelligence_control_system_object_detector) + +if($ENV{ROS_VERSION} EQUAL 1) + find_package(catkin REQUIRED COMPONENTS + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + ) + + catkin_package( + CATKIN_DEPENDS + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + ) + +else() + find_package(ament_cmake REQUIRED) + find_package(ament_cmake_python REQUIRED) + find_package(rclpy REQUIRED) + find_package(std_msgs REQUIRED) + find_package(sensor_msgs REQUIRED) + find_package(geometry_msgs REQUIRED) + find_package(cv_bridge REQUIRED) +endif() + +if($ENV{ROS_VERSION} EQUAL 1) + catkin_python_setup() + + catkin_install_python(PROGRAMS + src/face_tracker.py + src/face_follower.py + src/object_tracker.py + src/object_follower.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + + install(DIRECTORY config launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} + ) + +else() + ament_python_install_package(${PROJECT_NAME}) + + install(PROGRAMS + src/face_tracker.py + src/face_follower.py + src/object_tracker.py + src/object_follower.py + DESTINATION lib/${PROJECT_NAME} + ) + + install(DIRECTORY config launch rviz + DESTINATION share/${PROJECT_NAME} + ) + + ament_package() +endif() diff --git a/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py new file mode 100644 index 0000000..051f56a --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py @@ -0,0 +1,114 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +#!/usr/bin/env python3 + +#!/usr/bin/env python3 + +import os +import sys +import subprocess +from launch import LaunchDescription +from launch_ros.actions import Node + +def ros1_launch_description(): + # Get command-line arguments + args = sys.argv[1:] + + # Construct the ROS 1 launch command + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_object_detector", "object_follow.launch"] + args + + roslaunch_command.extend([ + "usb_cam", "usb_cam_node", "name:=camera", + "video_device:=/dev/video0", + "image_width:=640", + "image_height:=480", + "pixel_format:=yuyv", + "camera_frame_id:=usb_cam", + "io_method:=mmap" + ]) + + roslaunch_command.extend([ + "humanoid_robot_intelligence_control_system_object_detector", "object_detection_processor.py", "name:=object_detection_processor_node" + ]) + + roslaunch_command.extend([ + "humanoid_robot_intelligence_control_system_object_detector", "object_follower.py", "name:=object_follower_node" + ]) + + roslaunch_command.extend([ + "rviz", "rviz", "name:=rviz", + "args:=-d $(find humanoid_robot_intelligence_control_system_object_detector)/rviz/object_follow_visualization.rviz" + ]) + + # Execute the launch command + subprocess.call(roslaunch_command) + +def ros2_launch_description(): + nodes_to_launch = [] + + nodes_to_launch.append(Node( + package='usb_cam', + executable='usb_cam_node', + name='camera', + output='screen', + parameters=[{ + 'video_device': '/dev/video0', + 'image_width': 640, + 'image_height': 480, + 'pixel_format': 'yuyv', + 'camera_frame_id': 'usb_cam', + 'io_method': 'mmap' + }] + )) + + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_object_detector', + executable='object_detection_processor.py', + name='object_detection_processor_node', + output='screen', + parameters=[{'yaml_path': '$(find humanoid_robot_intelligence_control_system_object_detector)/config/object_detection_params.yaml'}] + )) + + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_object_detector', + executable='object_follower.py', + name='object_follower_node', + output='screen', + parameters=[{ + 'p_gain': 0.4, + 'i_gain': 0.0, + 'd_gain': 0.0 + }] + )) + + nodes_to_launch.append(Node( + package='rviz2', + executable='rviz2', + name='rviz', + arguments=['-d', '$(find humanoid_robot_intelligence_control_system_object_detector)/rviz/object_follow_visualization.rviz'] + )) + + return LaunchDescription(nodes_to_launch) + +if __name__ == "__main__": + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + ros1_launch_description() + elif ros_version == "2": + ros2_launch_description() + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py new file mode 100644 index 0000000..91a9896 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py @@ -0,0 +1,112 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +#!/usr/bin/env python3 + +import os +import sys +import subprocess +from launch import LaunchDescription +from launch_ros.actions import Node + +def ros1_launch_description(): + # Get command-line arguments + args = sys.argv[1:] + + # Construct the ROS 1 launch command + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "object_tracker.launch"] + args + + roslaunch_command.extend([ + "usb_cam", "usb_cam_node", "name:=camera", + "video_device:=/dev/video0", + "image_width:=640", + "image_height:=480", + "pixel_format:=yuyv", + "camera_frame_id:=usb_cam", + "io_method:=mmap" + ]) + + roslaunch_command.extend([ + "humanoid_robot_intelligence_control_system_object_detector", "object_detection_processor.py", "name:=object_detection_processor_node" + ]) + + roslaunch_command.extend([ + "humanoid_robot_intelligence_control_system_configure", "object_tracker.py", "name:=object_tracker_node" + ]) + + roslaunch_command.extend([ + "rviz", "rviz", "name:=rviz", + "args:=-d $(find humanoid_robot_intelligence_control_system_object_detector)/rviz/object_tracking_visualization.rviz" + ]) + + # Execute the launch command + subprocess.call(roslaunch_command) + +def ros2_launch_description(): + nodes_to_launch = [] + + nodes_to_launch.append(Node( + package='usb_cam', + executable='usb_cam_node', + name='camera', + output='screen', + parameters=[{ + 'video_device': '/dev/video0', + 'image_width': 640, + 'image_height': 480, + 'pixel_format': 'yuyv', + 'camera_frame_id': 'usb_cam', + 'io_method': 'mmap' + }] + )) + + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_object_detector', + executable='object_detection_processor.py', + name='object_detection_processor_node', + output='screen', + parameters=[{'yaml_path': '$(find humanoid_robot_intelligence_control_system_object_detector)/config/object_detection_params.yaml'}] + )) + + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_object_detector', + executable='object_tracker.py', + name='object_tracker_node', + output='screen', + parameters=[{ + 'p_gain': 0.4, + 'i_gain': 0.0, + 'd_gain': 0.0 + }] + )) + + nodes_to_launch.append(Node( + package='rviz2', + executable='rviz2', + name='rviz', + arguments=['-d', '$(find humanoid_robot_intelligence_control_system_object_detector)/rviz/object_tracking_visualization.rviz'] + )) + + return LaunchDescription(nodes_to_launch) + +if __name__ == "__main__": + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + ros1_launch_description() + elif ros_version == "2": + ros2_launch_description() + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py new file mode 100644 index 0000000..e61d87a --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py @@ -0,0 +1,108 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sys +import subprocess +from launch import LaunchDescription +from launch_ros.actions import Node +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration + +def ros1_launch_description(): + # Get command-line arguments + args = sys.argv[1:] + + # Construct the ROS 1 launch command + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_object_detector", "object_detector_processor.launch"] + args + + roslaunch_command.extend([ + "usb_cam", "usb_cam_node", "name:=camera", + "video_device:=/dev/video0", + "image_width:=640", + "image_height:=480", + "pixel_format:=yuyv", + "camera_frame_id:=usb_cam", + "io_method:=mmap" + ]) + + roslaunch_command.extend([ + "ros_web_api_bellande_2d_computer_vision", "bellande_2d_computer_vision_object_detection.py", "name:=object_detection_node" + ]) + + roslaunch_command.extend([ + "humanoid_robot_intelligence_control_system_ball_detector", "object_detection_processor.py", "name:=object_detection_processor_node" + ]) + + roslaunch_command.extend([ + "rviz", "rviz", "name:=rviz", + "args:=-d $(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz" + ]) + + # Execute the launch command + subprocess.call(roslaunch_command) + +def ros2_launch_description(): + nodes_to_launch = [] + + nodes_to_launch.append(Node( + package='usb_cam', + executable='usb_cam_node', + name='camera', + output='screen', + parameters=[{ + 'video_device': '/dev/video0', + 'image_width': 640, + 'image_height': 480, + 'pixel_format': 'yuyv', + 'camera_frame_id': 'usb_cam', + 'io_method': 'mmap' + }] + )) + + nodes_to_launch.append(Node( + package='ros_web_api_bellande_2d_computer_vision', + executable='bellande_2d_computer_vision_object_detection.py', + name='object_detection_node', + output='screen', + remappings=[('camera/image_raw', '/usb_cam/image_raw')] + )) + + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_object_detector', + executable='object_detection_processor.py', + name='object_detection_processor_node', + output='screen', + parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/object_detection_params.yaml'}] + )) + + nodes_to_launch.append(Node( + package='rviz2', + executable='rviz2', + name='rviz', + arguments=['-d', '$(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz'] + )) + + return LaunchDescription(nodes_to_launch) + +if __name__ == "__main__": + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + ros1_launch_description() + elif ros_version == "2": + ros2_launch_description() + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py new file mode 100644 index 0000000..e61d87a --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py @@ -0,0 +1,108 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sys +import subprocess +from launch import LaunchDescription +from launch_ros.actions import Node +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration + +def ros1_launch_description(): + # Get command-line arguments + args = sys.argv[1:] + + # Construct the ROS 1 launch command + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_object_detector", "object_detector_processor.launch"] + args + + roslaunch_command.extend([ + "usb_cam", "usb_cam_node", "name:=camera", + "video_device:=/dev/video0", + "image_width:=640", + "image_height:=480", + "pixel_format:=yuyv", + "camera_frame_id:=usb_cam", + "io_method:=mmap" + ]) + + roslaunch_command.extend([ + "ros_web_api_bellande_2d_computer_vision", "bellande_2d_computer_vision_object_detection.py", "name:=object_detection_node" + ]) + + roslaunch_command.extend([ + "humanoid_robot_intelligence_control_system_ball_detector", "object_detection_processor.py", "name:=object_detection_processor_node" + ]) + + roslaunch_command.extend([ + "rviz", "rviz", "name:=rviz", + "args:=-d $(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz" + ]) + + # Execute the launch command + subprocess.call(roslaunch_command) + +def ros2_launch_description(): + nodes_to_launch = [] + + nodes_to_launch.append(Node( + package='usb_cam', + executable='usb_cam_node', + name='camera', + output='screen', + parameters=[{ + 'video_device': '/dev/video0', + 'image_width': 640, + 'image_height': 480, + 'pixel_format': 'yuyv', + 'camera_frame_id': 'usb_cam', + 'io_method': 'mmap' + }] + )) + + nodes_to_launch.append(Node( + package='ros_web_api_bellande_2d_computer_vision', + executable='bellande_2d_computer_vision_object_detection.py', + name='object_detection_node', + output='screen', + remappings=[('camera/image_raw', '/usb_cam/image_raw')] + )) + + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_object_detector', + executable='object_detection_processor.py', + name='object_detection_processor_node', + output='screen', + parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/object_detection_params.yaml'}] + )) + + nodes_to_launch.append(Node( + package='rviz2', + executable='rviz2', + name='rviz', + arguments=['-d', '$(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz'] + )) + + return LaunchDescription(nodes_to_launch) + +if __name__ == "__main__": + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + ros1_launch_description() + elif ros_version == "2": + ros2_launch_description() + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_configure/launch/ros1/face_follower.launch b/humanoid_robot_intelligence_control_system_configure/launch/ros1/face_follower.launch new file mode 100644 index 0000000..6799e95 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/launch/ros1/face_follower.launch @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_intelligence_control_system_configure/launch/ros1/face_tracker.launch b/humanoid_robot_intelligence_control_system_configure/launch/ros1/face_tracker.launch new file mode 100644 index 0000000..6799e95 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/launch/ros1/face_tracker.launch @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_intelligence_control_system_configure/launch/ros1/object_follower.launch b/humanoid_robot_intelligence_control_system_configure/launch/ros1/object_follower.launch new file mode 100644 index 0000000..6799e95 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/launch/ros1/object_follower.launch @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_intelligence_control_system_configure/launch/ros1/object_tracker.launch b/humanoid_robot_intelligence_control_system_configure/launch/ros1/object_tracker.launch new file mode 100644 index 0000000..6799e95 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/launch/ros1/object_tracker.launch @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/humanoid_robot_intelligence_control_system_configure/package.xml b/humanoid_robot_intelligence_control_system_configure/package.xml new file mode 100644 index 0000000..740f1f7 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/package.xml @@ -0,0 +1,61 @@ + + + + + humanoid_robot_intelligence_control_system_configure + 0.0.1 + + This Package is for Configuration of Tracker and Follower related to it + + Apache 2.0 + Ronaldson Bellande + + catkin + ament_cmake + ament_cmake_python + + + rospy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + image_transport + dynamic_reconfigure + message_generation + message_runtime + + + rclpy + std_msgs + sensor_msgs + geometry_msgs + cv_bridge + image_transport + rosidl_default_generators + rosidl_default_runtime + + + python3-opencv + python3-yaml + usb_cam + + + catkin + ament_cmake + + diff --git a/humanoid_robot_intelligence_control_system_configure/setup.py b/humanoid_robot_intelligence_control_system_configure/setup.py new file mode 100644 index 0000000..690d947 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/setup.py @@ -0,0 +1,26 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from distutils.core import setup +from catkin_pkg.python_setup import generate_distutils_setup + +# fetch values from package.xml +setup_args = generate_distutils_setup( + scripts=['src/face_tracker.py', "src/face_follower.py", "src/object_tracker.py", "src/object_follower.py"], + packages=['humanoid_robot_intelligence_control_system_configure'], + package_dir={'': 'src'}, +) + +setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_configure/src/face_follower.py b/humanoid_robot_intelligence_control_system_configure/src/face_follower.py new file mode 100644 index 0000000..0f11ade --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/src/face_follower.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import rospy +import math +from sensor_msgs.msg import JointState +from std_msgs.msg import String, Bool +from geometry_msgs.msg import Point +from humanoid_robot_intelligence_control_system_walking_module_msgs.msg import WalkingParam +from humanoid_robot_intelligence_control_system_walking_module_msgs.srv import GetWalkingParam + +class FaceFollower: + def __init__(self): + rospy.init_node('face_follower') + + self.FOV_WIDTH = 35.2 * math.pi / 180 + self.FOV_HEIGHT = 21.6 * math.pi / 180 + self.count_not_found = 0 + self.count_to_approach = 0 + self.on_following = False + self.approach_face_position = "NotFound" + self.CAMERA_HEIGHT = 0.46 + self.NOT_FOUND_THRESHOLD = 50 + self.MAX_FB_STEP = 40.0 * 0.001 + self.MAX_RL_TURN = 15.0 * math.pi / 180 + self.IN_PLACE_FB_STEP = -3.0 * 0.001 + self.MIN_FB_STEP = 5.0 * 0.001 + self.MIN_RL_TURN = 5.0 * math.pi / 180 + self.UNIT_FB_STEP = 1.0 * 0.001 + self.UNIT_RL_TURN = 0.5 * math.pi / 180 + self.SPOT_FB_OFFSET = 0.0 * 0.001 + self.SPOT_RL_OFFSET = 0.0 * 0.001 + self.SPOT_ANGLE_OFFSET = 0.0 + self.hip_pitch_offset = 7.0 + self.current_pan = -10 + self.current_tilt = -10 + self.current_x_move = 0.005 + self.current_r_angle = 0 + self.curr_period_time = 0.6 + self.accum_period_time = 0.0 + self.DEBUG_PRINT = False + + self.current_joint_states_sub = rospy.Subscriber( + "/humanoid_robot_intelligence_control_system/goal_joint_states", JointState, self.current_joint_states_callback) + self.set_walking_command_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/walking/command", String, queue_size=1) + self.set_walking_param_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/walking/set_params", WalkingParam, queue_size=1) + self.get_walking_param_client = rospy.ServiceProxy( + "/humanoid_robot_intelligence_control_system/walking/get_params", GetWalkingParam) + + self.face_position_sub = rospy.Subscriber( + "/face_detector/face_position", Point, self.face_position_callback) + + self.prev_time = rospy.Time.now() + self.current_walking_param = WalkingParam() + + def start_following(self): + self.on_following = True + rospy.loginfo("Start Face following") + self.set_walking_command("start") + result = self.get_walking_param() + if result: + self.hip_pitch_offset = self.current_walking_param.hip_pitch_offset + self.curr_period_time = self.current_walking_param.period_time + else: + self.hip_pitch_offset = 7.0 * math.pi / 180 + self.curr_period_time = 0.6 + + def stop_following(self): + self.on_following = False + self.count_to_approach = 0 + rospy.loginfo("Stop Face following") + self.set_walking_command("stop") + + def current_joint_states_callback(self, msg): + for i, name in enumerate(msg.name): + if name == "head_pan": + self.current_pan = msg.position[i] + elif name == "head_tilt": + self.current_tilt = msg.position[i] + + def face_position_callback(self, msg): + if self.on_following: + self.process_following(msg.x, msg.y, msg.z) + + def calc_footstep(self, target_distance, target_angle, delta_time): + next_movement = self.current_x_move + target_distance = max(0, target_distance) + fb_goal = min(target_distance * 0.1, self.MAX_FB_STEP) + self.accum_period_time += delta_time + if self.accum_period_time > (self.curr_period_time / 4): + self.accum_period_time = 0.0 + if (target_distance * 0.1 / 2) < self.current_x_move: + next_movement -= self.UNIT_FB_STEP + else: + next_movement += self.UNIT_FB_STEP + fb_goal = min(next_movement, fb_goal) + fb_move = max(fb_goal, self.MIN_FB_STEP) + + rl_goal = 0.0 + if abs(target_angle) * 180 / math.pi > 5.0: + rl_offset = abs(target_angle) * 0.2 + rl_goal = min(rl_offset, self.MAX_RL_TURN) + rl_goal = max(rl_goal, self.MIN_RL_TURN) + rl_angle = min(abs(self.current_r_angle) + self.UNIT_RL_TURN, rl_goal) + if target_angle < 0: + rl_angle *= -1 + else: + rl_angle = 0 + + return fb_move, rl_angle + + def process_following(self, x_angle, y_angle, face_size): + curr_time = rospy.Time.now() + delta_time = (curr_time - self.prev_time).to_sec() + self.prev_time = curr_time + + self.count_not_found = 0 + + if self.current_tilt == -10 and self.current_pan == -10: + rospy.logerr("Failed to get current angle of head joints.") + self.set_walking_command("stop") + self.on_following = False + self.approach_face_position = "NotFound" + return False + + self.approach_face_position = "OutOfRange" + + distance_to_face = self.CAMERA_HEIGHT * math.tan(math.pi * 0.5 + self.current_tilt - self.hip_pitch_offset - face_size) + distance_to_face = abs(distance_to_face) + + distance_to_approach = 0.5 # Adjust this value as needed + + if (distance_to_face < distance_to_approach) and (abs(x_angle) < 25.0): + self.count_to_approach += 1 + if self.count_to_approach > 20: + self.set_walking_command("stop") + self.on_following = False + self.approach_face_position = "OnLeft" if x_angle > 0 else "OnRight" + return True + elif self.count_to_approach > 15: + self.set_walking_param(self.IN_PLACE_FB_STEP, 0, 0) + return False + else: + self.count_to_approach = 0 + + distance_to_walk = distance_to_face - distance_to_approach + fb_move, rl_angle = self.calc_footstep(distance_to_walk, self.current_pan, delta_time) + self.set_walking_param(fb_move, 0, rl_angle) + return False + + def set_walking_command(self, command): + if command == "start": + self.get_walking_param() + self.set_walking_param(self.IN_PLACE_FB_STEP, 0, 0, True) + msg = String() + msg.data = command + self.set_walking_command_pub. diff --git a/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py b/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py new file mode 100644 index 0000000..046f5b0 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +import rospy +import math +from sensor_msgs.msg import JointState +from std_msgs.msg import String +from geometry_msgs.msg import Point + +class FaceTracker: + def __init__(self): + rospy.init_node('face_tracker') + + self.FOV_WIDTH = 35.2 * math.pi / 180 + self.FOV_HEIGHT = 21.6 * math.pi / 180 + self.NOT_FOUND_THRESHOLD = 50 + self.WAITING_THRESHOLD = 5 + self.use_head_scan = True + self.count_not_found = 0 + self.on_tracking = False + self.current_face_pan = 0 + self.current_face_tilt = 0 + self.x_error_sum = 0 + self.y_error_sum = 0 + self.tracking_status = "NotFound" + self.DEBUG_PRINT = False + + self.p_gain = rospy.get_param('~p_gain', 0.4) + self.i_gain = rospy.get_param('~i_gain', 0.0) + self.d_gain = rospy.get_param('~d_gain', 0.0) + + rospy.loginfo(f"Face tracking Gain : {self.p_gain}, {self.i_gain}, {self.d_gain}") + + self.head_joint_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", JointState, queue_size=1) + self.head_scan_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/scan_command", String, queue_size=1) + + self.face_position_sub = rospy.Subscriber( + "/face_detector/face_position", Point, self.face_position_callback) + self.face_tracking_command_sub = rospy.Subscriber( + "/face_tracker/command", String, self.face_tracker_command_callback) + + self.face_position = Point() + self.prev_time = rospy.Time.now() + + def face_position_callback(self, msg): + self.face_position = msg + + def face_tracker_command_callback(self, msg): + if msg.data == "start": + self.start_tracking() + elif msg.data == "stop": + self.stop_tracking() + elif msg.data == "toggle_start": + if not self.on_tracking: + self.start_tracking() + else: + self.stop_tracking() + + def start_tracking(self): + self.on_tracking = True + rospy.loginfo("Start Face tracking") + + def stop_tracking(self): + self.go_init() + self.on_tracking = False + rospy.loginfo("Stop Face tracking") + self.current_face_pan = 0 + self.current_face_tilt = 0 + self.x_error_sum = 0 + self.y_error_sum = 0 + + def process_tracking(self): + if not self.on_tracking: + self.face_position.z = 0 + self.count_not_found = 0 + return "NotFound" + + if self.face_position.z <= 0: + self.count_not_found += 1 + if self.count_not_found < self.WAITING_THRESHOLD: + tracking_status = "Waiting" + elif self.count_not_found > self.NOT_FOUND_THRESHOLD: + self.scan_face() + self.count_not_found = 0 + tracking_status = "NotFound" + else: + tracking_status = "NotFound" + else: + self.count_not_found = 0 + tracking_status = "Found" + + if tracking_status != "Found": + self.tracking_status = tracking_status + return tracking_status + + x_error = -math.atan(self.face_position.x * math.tan(self.FOV_WIDTH)) + y_error = -math.atan(self.face_position.y * math.tan(self.FOV_HEIGHT)) + + curr_time = rospy.Time.now() + delta_time = (curr_time - self.prev_time).to_sec() + self.prev_time = curr_time + + x_error_diff = (x_error - self.current_face_pan) / delta_time + y_error_diff = (y_error - self.current_face_tilt) / delta_time + self.x_error_sum += x_error + self.y_error_sum += y_error + x_error_target = x_error * self.p_gain + x_error_diff * self.d_gain + self.x_error_sum * self.i_gain + y_error_target = y_error * self.p_gain + y_error_diff * self.d_gain + self.y_error_sum * self.i_gain + + if self.DEBUG_PRINT: + rospy.loginfo(f"Error: {x_error * 180 / math.pi} | {y_error * 180 / math.pi}") + rospy.loginfo(f"Error diff: {x_error_diff * 180 / math.pi} | {y_error_diff * 180 / math.pi} | {delta_time}") + rospy.loginfo(f"Error sum: {self.x_error_sum * 180 / math.pi} | {self.y_error_sum * 180 / math.pi}") + rospy.loginfo(f"Error target: {x_error_target * 180 / math.pi} | {y_error_target * 180 / math.pi}") + + self.publish_head_joint(x_error_target, y_error_target) + + self.current_face_pan = x_error + self.current_face_tilt = y_error + + self.tracking_status = tracking_status + return tracking_status + + def publish_head_joint(self, pan, tilt): + min_angle = 1 * math.pi / 180 + if abs(pan) < min_angle and abs(tilt) < min_angle: + return + + head_angle_msg = JointState() + head_angle_msg.name = ["head_pan", "head_tilt"] + head_angle_msg.position = [pan, tilt] + + self.head_joint_pub.publish(head_angle_msg) + + def go_init(self): + head_angle_msg = JointState() + head_angle_msg.name = ["head_pan", "head_tilt"] + head_angle_msg.position = [0.0, 0.0] + + self.head_joint_pub.publish(head_angle_msg) + + def scan_face(self): + if not self.use_head_scan: + return + + scan_msg = String() + scan_msg.data = "scan" + + self.head_scan_pub.publish(scan_msg) + + def run(self): + rate = rospy.Rate(30) # 30Hz + while not rospy.is_shutdown(): + self.process_tracking() + rate.sleep() + +if __name__ == '__main__': + try: + tracker = FaceTracker() + tracker.run() + except rospy.ROSInterruptException: + pass diff --git a/humanoid_robot_intelligence_control_system_configure/src/object_follower.py b/humanoid_robot_intelligence_control_system_configure/src/object_follower.py new file mode 100644 index 0000000..87c320a --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/src/object_follower.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import rospy +import math +from sensor_msgs.msg import JointState +from std_msgs.msg import String +from humanoid_robot_intelligence_control_system_walking_module_msgs.msg import WalkingParam +from humanoid_robot_intelligence_control_system_walking_module_msgs.srv import GetWalkingParam +from geometry_msgs.msg import Point + + +class ObjectFollower: + def __init__(self): + rospy.init_node('object_follower') + + self.FOV_WIDTH = 35.2 * math.pi / 180 + self.FOV_HEIGHT = 21.6 * math.pi / 180 + self.count_not_found = 0 + self.count_to_approach = 0 + self.on_tracking = False + self.approach_object_position = "NotFound" + self.CAMERA_HEIGHT = 0.46 + self.NOT_FOUND_THRESHOLD = 50 + self.MAX_FB_STEP = 40.0 * 0.001 + self.MAX_RL_TURN = 15.0 * math.pi / 180 + self.IN_PLACE_FB_STEP = -3.0 * 0.001 + self.MIN_FB_STEP = 5.0 * 0.001 + self.MIN_RL_TURN = 5.0 * math.pi / 180 + self.UNIT_FB_STEP = 1.0 * 0.001 + self.UNIT_RL_TURN = 0.5 * math.pi / 180 + self.SPOT_FB_OFFSET = 0.0 * 0.001 + self.SPOT_RL_OFFSET = 0.0 * 0.001 + self.SPOT_ANGLE_OFFSET = 0.0 + self.hip_pitch_offset = 7.0 + self.current_pan = -10 + self.current_tilt = -10 + self.current_x_move = 0.005 + self.current_r_angle = 0 + self.curr_period_time = 0.6 + self.accum_period_time = 0.0 + self.DEBUG_PRINT = False + + self.current_joint_states_sub = rospy.Subscriber( + "/humanoid_robot_intelligence_control_system/goal_joint_states", JointState, self.current_joint_states_callback) + self.set_walking_command_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/walking/command", String, queue_size=1) + self.set_walking_param_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/walking/set_params", WalkingParam, queue_size=1) + self.get_walking_param_client = rospy.ServiceProxy( + "/humanoid_robot_intelligence_control_system/walking/get_params", GetWalkingParam) + + # Subscribe to object detection results + self.object_detection_sub = rospy.Subscriber( + "/object_detection_result", Point, self.object_detection_callback) + + self.prev_time = rospy.Time.now() + self.current_walking_param = WalkingParam() + + def start_following(self): + self.on_tracking = True + rospy.loginfo("Start Object following") + self.set_walking_command("start") + result = self.get_walking_param() + if result: + self.hip_pitch_offset = self.current_walking_param.hip_pitch_offset + self.curr_period_time = self.current_walking_param.period_time + else: + self.hip_pitch_offset = 7.0 * math.pi / 180 + self.curr_period_time = 0.6 + + def stop_following(self): + self.on_tracking = False + self.count_to_approach = 0 + rospy.loginfo("Stop Object following") + self.set_walking_command("stop") + + def current_joint_states_callback(self, msg): + for i, name in enumerate(msg.name): + if name == "head_pan": + self.current_pan = msg.position[i] + elif name == "head_tilt": + self.current_tilt = msg.position[i] + + def calc_footstep(self, target_distance, target_angle, delta_time): + next_movement = self.current_x_move + target_distance = max(0, target_distance) + fb_goal = min(target_distance * 0.1, self.MAX_FB_STEP) + self.accum_period_time += delta_time + if self.accum_period_time > (self.curr_period_time / 4): + self.accum_period_time = 0.0 + if (target_distance * 0.1 / 2) < self.current_x_move: + next_movement -= self.UNIT_FB_STEP + else: + next_movement += self.UNIT_FB_STEP + fb_goal = min(next_movement, fb_goal) + fb_move = max(fb_goal, self.MIN_FB_STEP) + + rl_goal = 0.0 + if abs(target_angle) * 180 / math.pi > 5.0: + rl_offset = abs(target_angle) * 0.2 + rl_goal = min(rl_offset, self.MAX_RL_TURN) + rl_goal = max(rl_goal, self.MIN_RL_TURN) + rl_angle = min(abs(self.current_r_angle) + self.UNIT_RL_TURN, rl_goal) + if target_angle < 0: + rl_angle *= -1 + else: + rl_angle = 0 + + return fb_move, rl_angle + + def process_following(self, x_angle, y_angle, object_size): + curr_time = rospy.Time.now() + delta_time = (curr_time - self.prev_time).to_sec() + self.prev_time = curr_time + + self.count_not_found = 0 + + if self.current_tilt == -10 and self.current_pan == -10: + rospy.logerr("Failed to get current angle of head joints.") + self.set_walking_command("stop") + self.on_tracking = False + self.approach_object_position = "NotFound" + return False + + self.approach_object_position = "OutOfRange" + + distance_to_object = self.CAMERA_HEIGHT * math.tan(math.pi * 0.5 + self.current_tilt - self.hip_pitch_offset - object_size) + distance_to_object = abs(distance_to_object) + + distance_to_approach = 0.22 + + if (distance_to_object < distance_to_approach) and (abs(x_angle) < 25.0): + self.count_to_approach += 1 + if self.count_to_approach > 20: + self.set_walking_command("stop") + self.on_tracking = False + self.approach_object_position = "OnLeft" if x_angle > 0 else "OnRight" + return True + elif self.count_to_approach > 15: + self.set_walking_param(self.IN_PLACE_FB_STEP, 0, 0) + return False + else: + self.count_to_approach = 0 + + distance_to_walk = distance_to_object - distance_to_approach + fb_move, rl_angle = self.calc_footstep(distance_to_walk, self.current_pan, delta_time) + self.set_walking_param(fb_move, 0, rl_angle) + return False + + def decide_object_position(self, x_angle, y_angle): + if self.current_tilt == -10 and self.current_pan == -10: + self.approach_object_position = "NotFound" + return + object_x_angle = self.current_pan + x_angle + self.approach_object_position = "OnLeft" if object_x_angle > 0 else "OnRight" + + def wait_following(self): + self.count_not_found += 1 + if self.count_not_found > self.NOT_FOUND_THRESHOLD * 0.5: + self.set_walking_param(0.0, 0.0, 0.0) + + def set_walking_command(self, command): + if command == "start": + self.get_walking_param() + self.set_walking_param(self.IN_PLACE_FB_STEP, 0, 0, True) + msg = String() + msg.data = command + self.set_walking_command_pub.publish(msg) + + def set_walking_param(self, x_move, y_move, rotation_angle, balance=False): + self.current_walking_param.balance_enable = balance + self.current_walking_param.x_move_amplitude = x_move + self.SPOT_FB_OFFSET + self.current_walking_param.y_move_amplitude = y_move + self.SPOT_RL_OFFSET + self.current_walking_param.angle_move_amplitude = rotation_angle + self.SPOT_ANGLE_OFFSET + self.set_walking_param_pub.publish(self.current_walking_param) + self.current_x_move = x_move + self.current_r_angle = rotation_angle + + def get_walking_param(self): + try: + response = self.get_walking_param_client() + self.current_walking_param = response.parameters + return True + except rospy.ServiceException as e: + rospy.logerr("Failed to get walking parameters: %s" % e) + return False + + def object_detection_callback(self, msg): + if self.on_tracking: + x_angle = msg.x + y_angle = msg.y + object_size = msg.z + self.process_following(x_angle, y_angle, object_size) + else: + self.wait_following() + +if __name__ == '__main__': + try: + follower = ObjectFollower() + follower.start_following() + rospy.spin() + except rospy.ROSInterruptException: + pass diff --git a/humanoid_robot_intelligence_control_system_configure/src/object_tracker.py b/humanoid_robot_intelligence_control_system_configure/src/object_tracker.py new file mode 100644 index 0000000..2d54fba --- /dev/null +++ b/humanoid_robot_intelligence_control_system_configure/src/object_tracker.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import rospy +import math +from sensor_msgs.msg import JointState +from std_msgs.msg import String, Float64MultiArray +from humanoid_robot_intelligence_control_system_ball_detector.msg import CircleSetStamped +from geometry_msgs.msg import Point + +class ObjectTracker: + def __init__(self): + rospy.init_node('object_tracker') + + self.FOV_WIDTH = 35.2 * math.pi / 180 + self.FOV_HEIGHT = 21.6 * math.pi / 180 + self.NOT_FOUND_THRESHOLD = 50 + self.WAITING_THRESHOLD = 5 + self.use_head_scan = True + self.count_not_found = 0 + self.on_tracking = False + self.current_object_pan = 0 + self.current_object_tilt = 0 + self.x_error_sum = 0 + self.y_error_sum = 0 + self.current_object_bottom = 0 + self.tracking_status = "NotFound" + self.DEBUG_PRINT = False + + param_nh = rospy.get_param("~") + self.p_gain = param_nh.get("p_gain", 0.4) + self.i_gain = param_nh.get("i_gain", 0.0) + self.d_gain = param_nh.get("d_gain", 0.0) + + rospy.loginfo(f"Object tracking Gain : {self.p_gain}, {self.i_gain}, {self.d_gain}") + + self.head_joint_offset_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states_offset", JointState, queue_size=0) + self.head_joint_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", JointState, queue_size=0) + self.head_scan_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/scan_command", String, queue_size=0) + + self.object_position_sub = rospy.Subscriber( + "/object_detector_node/object_position", Point, self.object_position_callback) + self.object_tracking_command_sub = rospy.Subscriber( + "/object_tracker/command", String, self.object_tracker_command_callback) + + self.object_position = Point() + self.prev_time = rospy.Time.now() + + def object_position_callback(self, msg): + self.object_position = msg + + def object_tracker_command_callback(self, msg): + if msg.data == "start": + self.start_tracking() + elif msg.data == "stop": + self.stop_tracking() + elif msg.data == "toggle_start": + if not self.on_tracking: + self.start_tracking() + else: + self.stop_tracking() + + def start_tracking(self): + self.on_tracking = True + rospy.loginfo("Start Object tracking") if self.DEBUG_PRINT else None + + def stop_tracking(self): + self.go_init() + self.on_tracking = False + rospy.loginfo("Stop Object tracking") if self.DEBUG_PRINT else None + self.current_object_pan = 0 + self.current_object_tilt = 0 + self.x_error_sum = 0 + self.y_error_sum = 0 + + def set_using_head_scan(self, use_scan): + self.use_head_scan = use_scan + + def process_tracking(self): + if not self.on_tracking: + self.object_position.z = 0 + self.count_not_found = 0 + return "NotFound" + + if self.object_position.z <= 0: + self.count_not_found += 1 + if self.count_not_found < self.WAITING_THRESHOLD: + if self.tracking_status in ["Found", "Waiting"]: + tracking_status = "Waiting" + else: + tracking_status = "NotFound" + elif self.count_not_found > self.NOT_FOUND_THRESHOLD: + self.scan_object() + self.count_not_found = 0 + tracking_status = "NotFound" + else: + tracking_status = "NotFound" + else: + self.count_not_found = 0 + tracking_status = "Found" + + if tracking_status != "Found": + self.tracking_status = tracking_status + self.current_object_pan = 0 + self.current_object_tilt = 0 + self.x_error_sum = 0 + self.y_error_sum = 0 + return tracking_status + + x_error = -math.atan(self.object_position.x * math.tan(self.FOV_WIDTH)) + y_error = -math.atan(self.object_position.y * math.tan(self.FOV_HEIGHT)) + object_size = self.object_position.z + + curr_time = rospy.Time.now() + delta_time = (curr_time - self.prev_time).to_sec() + self.prev_time = curr_time + + x_error_diff = (x_error - self.current_object_pan) / delta_time + y_error_diff = (y_error - self.current_object_tilt) / delta_time + self.x_error_sum += x_error + self.y_error_sum += y_error + x_error_target = x_error * self.p_gain + x_error_diff * self.d_gain + self.x_error_sum * self.i_gain + y_error_target = y_error * self.p_gain + y_error_diff * self.d_gain + self.y_error_sum * self.i_gain + + if self.DEBUG_PRINT: + rospy.loginfo(f"Error: {x_error * 180 / math.pi} | {y_error * 180 / math.pi}") + rospy.loginfo(f"Error diff: {x_error_diff * 180 / math.pi} | {y_error_diff * 180 / math.pi} | {delta_time}") + rospy.loginfo(f"Error sum: {self.x_error_sum * 180 / math.pi} | {self.y_error_sum * 180 / math.pi}") + rospy.loginfo(f"Error target: {x_error_target * 180 / math.pi} | {y_error_target * 180 / math.pi}") + + self.publish_head_joint(x_error_target, y_error_target) + + self.current_object_pan = x_error + self.current_object_tilt = y_error + self.current_object_bottom = object_size + + self.object_position.z = 0 + + self.tracking_status = tracking_status + return tracking_status + + def publish_head_joint(self, pan, tilt): + min_angle = 1 * math.pi / 180 + if abs(pan) < min_angle and abs(tilt) < min_angle: + return + + head_angle_msg = JointState() + head_angle_msg.name = ["head_pan", "head_tilt"] + head_angle_msg.position = [pan, tilt] + + self.head_joint_offset_pub.publish(head_angle_msg) + + def go_init(self): + head_angle_msg = JointState() + head_angle_msg.name = ["head_pan", "head_tilt"] + head_angle_msg.position = [0.0, 0.0] + + self.head_joint_pub.publish(head_angle_msg) + + def scan_object(self): + if not self.use_head_scan: + return + + scan_msg = String() + scan_msg.data = "scan" + + self.head_scan_pub.publish(scan_msg) + +if __name__ == '__main__': + try: + tracker = ObjectTracker() + rate = rospy.Rate(30) + while not rospy.is_shutdown(): + tracker.process_tracking() + rate.sleep() + except rospy.ROSInterruptException: + pass diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Autonomous soccer mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Autonomous soccer mode.mp3 deleted file mode 100644 index ef1f8780fa17ad7e93c941e1c629b0ffbc02f2c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13287 zcmeI21yCH_+UEy%0t5)oFt|IxGq}413GNWwLWIE`0>Km9-IAa|f;%Juf)m^!L4!^2 z%=_-$)c4g^eS3Fnw{C6SQ+29O&$Rsd|NPH6-A}iQydW9~QBd*q_4E`F4IxBTm(frF ziwIde`FMl`rcucD=Cp>3e6t)-`6p{1#Atgo%WkJtzsQN04J+yn$%^kvj# z5o-*HDkCSOt)MPrA*Y4d;XfTjPeorr-&jExu^9%U3h?nil+)7CKr|mAs*#ZqNY33O zz{|YB`E%qbZ|65epP(o+TdzJ~|2j2m;4Ido2LC0>HTxR@@_R8~^}L z&@g0(l(Eqxu$iO$DKy0*GjwB5O=pu|5F_Vw#Zu!VWdSF~W=h zBIFs+NQsCY!ZT3wpq56sj08r~{cPbN<;i?dfBuIECeGjw5X^QcZ3-$GLqQ{6$hpf^ zKDzk+-E>!(cJpV2{BeO>2Nm1Fd{O|Aw0KA<@L4;E1pP|Xm^0DadUI=+if9!#a+D&< z6$iUG6bZK_t=C^-k&%bWlOTganea7kc*zdVB4l0NzWjLy#z*WdBe^pMD zEZy{RFeSGU??r~1LPoFm@DDDXGV(BP3=$qeyLDMo8HkW7>N>P0)5E@pB6tjB4@Mzo zWE6y4wY=WzpbJD)|>b1pUsP*dUHL9q*QjKOkDfQ z=@S_Of)b|gE6^|PD?EL}dY zmT+3%1_yVq;RUK^m60FgLKK1}?v< zy%jS*46xG)jl4(G*6YU3z~`2vxst z`T3Vtc?DEP`NSs`xKPvtVV;|Df_nzSdmR(*_9q)f+xA+v(ZjACnMQN@j$gT~=Q^M5 z`UN0`Hw>jC33D_!mzhB%W^$~&#Lecva zWW%B$L$2mI@oQ+zWU-lU$1ak^a^mSgMWw{J^_NX<)yE|F$%m+fKe+COZljEl@fi^m;j zLc+qc ztr1Z$8)AZZn7X>0F=VSR7W9iyA{s1F=yUSLzs(;}J~FPfn5)@jFv9jIP@VAcC@{rk z#wS&+uh0{NoxyD1oie0g#O)dBgyP~d@twkEzxi0?1+aGK`%Y$z z@Px==Tg;AA%nYx%=~)~D@blNt%wPUaM-f>0&{jW@YVfhs@1^3(irFduiuR>D?_mRP z{n*16cw1$+e0^7&q^974tBBTubXXC&ItPuYvh})#G=t6wJ)nV-FW0^5@#%>O6;e14 zN@q;ZTq8bEEP9ZEncOd`%g98`?XqSp7ZAs@7Mx_TI1?HiOWBi^CfEbi5;6d#gsZ=? z>+Yg)2GQZoqdmQH%=OmusQcLrWzM65QYhU%?AahP4&K4}2?b%YiQ0fr5@|g<*m6%W zpK{9DdPcD@c-0m6TY7bW@8JfKqHd$v68x082V`)0CfE@6*vKSPdbLQ~(*&6z;ogeB zBw4md&Va};IrggikYRwBQ8L&G9e~@#TyH^tLFp&zOK5@tM3Bujk30neY|)khiUSjC zANm1$#FPQR1u^&sXo9Jp z*0b7z)CBtX;ZA27Ti0A&MGGi$D|`nAPGOIL5Bc`7*pO9YaG)N^Of@`73ke6M*W0?V z=!2rLyMCu%S+o$|4g9bY?|ZeK)>3URHqCHjUCgaZYwcvG?&1wma9?MDSG3mVuDCS6 z&Q#dn#fg0qrtlT)KhnNH^wl zg@e30}7w6FewHxbdH@BZAu)zOG*M*u7jk& z0m)$tXIvpPQ4CeUX-Clo030N-az{GDtU07i+PR8sGN{5yNE0m?oNJN7xzO8;VC1NT z3-B9v-aL{Q(IzSx)+Qp#XJ`p?Xt`@ojqtv!CPQ>=~Fy6O#-h&$Sbf^df+K=v{&5EZObN zpH24zsbu&G(A3DN54Kg$DV{`llbF)#ewVEWU|Y}gGYhJrQTwmSIgoI#==CvAM2tp6 z$gq;|sM3zBx>zbEa5QZnHVXJADW9j3Em^rsK{Jm=*sh~Ph2@_&o$ZN-6HTf6ea7)H={#Hu`X9Q{{- zy98Y={30081_PG&620F)zoWIs^$HU0`Z6y>F=!B?#OIAuL|QtoGlH8+qod-TmX=7%<|NB=SH8xY%=mMvr4os+6l5(f1So&TPGLoj4Np0+DklMDR~@z|D6Pr=|a)5Yx8OtL3HKu zbO~Ka|8DO2Ln#h`R?wLBLJYkH8Ppp5p@7UT;Xt{N+A; zHjatn%9jJB?Ch2Ta6<=y#DqSJ!ju^Y^IbcVvZ`Vsb`m^Iv#rRm-3S~-b%#LxJA;Th zw{qHj{nM2!!#lj~xc1JvFGhN=^wEQK$F|58(1j!DW*Cf$s^aP$R@}*Tm((OjK8BpS zzWtnODBUJDXC!&f*)(HRh7JClbRz-VY_~v=T`wY|`h)Hh;l|8!3=z&eYKmb!Uirz> z&q2|V4uWn!R)8y=h~QKi>AP9&>e2#QN(#Z)o`HFkb6b~&<11ToVG#v`{E~|{>4sMO z#-?9CTXJh=>Pllb>=z|mwI1}J?&pfy?*@!mk1Jxc7XrZDmK6v2eeA;{{)#XxM{z+K zXM76LFDN}`MZnbHHUL}}+6rw_@e>IfgvG(WA%#0*3_a;3?7?_&9#2fGRUUzXhaC^o zF!!{8Gmu0!r$j36Wt}c~r7nZgYFycRe68#%XO`rX>Gq8g+K7cCbDijsyje<`A3LhGU@tLvt~ndnB|WJoeg(GtEKMcofeW!*q4dq9o@ zp-^v$!QC_BzDU9<4sOKitFFE}5XK{orEw(O1*C0$E-fHdkS1&)>AUEwZ|GV1E8Mdn zYj5bWwN>908XCD3Iz>oyq;F7ds$$8)OIut1)07wViwBz*wXs&ov$Na=A50cL7}GU| zlUBOIhhJ`%MVfw8fM=hEY)gN%?}K${sb2tN_Qu6jt?>9y7F3HyEjE3xTBf)St|hpn zQi~3blnBXf*?%H24%W7!8#B>Qi=l%J0dlsok`&gj^ZpiZ!4G0m$gl=PQI0iOlG&Gy%e*J6UJ93 zbrQdS5Qj+@FaIUW?isU?x0xJ@x3hi$Qn(`)&iP+Cy4nvKs+Y!Xf2yGQ$JqPeyQg(~ z%V0pxh|)AZeuWN4udDYy6r-3A-4lGl*JfF)5B4@1JEuvpUzDs7(|wytV`^K)EOF5i z_EkIRBzg*xrs{i{6#czO-atRPqAU`Y!OdpX=UCe-rp4Oqw75213y};Ua zEvI|2qQ*^u=-ZIjR2mc?-;UAnf&jiJJ=d(UkF;Y$7J?-&WA0HKM8 z#UGLCUz7#$7ug<;pBh?g{(5%4dH3{eUP-iqY38!&2LHiw?9U5}T>~!mIxF zP-cQ8k|SWqPiK}P$nB1Zzc(6rBC# z<=LXG*$yI{zLYyu3OaI?$@AjQaB1|ssz4-g-tYU&C`T(Es|>g#c#Jr`Dmc0t%2=W8 zn&g}AH0%2jAD1#Lks3I}^ifW@PWfBWmQPF(F|38$&F?z(ax_5z>)q7A#$;|iBLqCl z6nGx>0dlI@>QMwAH*G&oGsNm4W4aww>iYWa_KDH8a}(bpeV832bK&n6s zT@fq=o>K8))kQ7h@m$>kyu<SPLSYs z8MUG6sr%)wW_06rz=<31M4~gZ<@&j%Y{mN|N@}}2%Yt&QY9FH{c{#V=6SzN3LUI8% zZd!Fx(%T$dN8a<#N=VE7q#vodq+^euq?&L4p}#U|+jjghMMreW`*5>08f-XrG?)}q&SMT|x;_`zxxfjMrZYyR{z3^&LL7m++f-yYi6qok_Ba&{s76CK3rc2m0Tz zV>jZUpmyTZz4Xz7_==z+^U9i~cA*ejbNO2zb4$5^*BO+q_t@#c5duHuTSR!Xwl5Dm z9>;S8m|PcDIBhOcKPGthkXnY>0L3lnBdI^hgKj($S0VVp_V-U|qa!pGq6QfxI#?-h zk`_ZwlD3`=j!wLf`zxV&0vV~;On4UmkoO@M^*bqp+*b}cWLj3XX0Jwf;SO(YAH78n z5v4~bWs#ZpLyjPS+b+$7U9kiJR6(@c50xKe&8*nYXBIBcRHOyY)M-!4(E3qltw`B; zQcLd#^pq1nPfc8U?`{8b+RsN=eGiT8bC*pEUMAuOME7Vsh)bWpKnRaaH)=)4^Va~N zGhEeUaf-O#L`3x*qIUroF;+@GN90%q(MX>rD%TAamMAgGn?crH%xia?+0h(b-^ND# z0TZe~lm`)hL%_-}DDx<=ICrMPs+JTJ(0`I*i7u%uxyeDPnm@Vo<7dFaHm62IfpmxI zm;nb?oY1#~DS7dNV(8EJshxm~`^|FWTcL`mU%L6JS@MP#N~skx+Lr|ly+-rowD115 zT=G6jj*5;qi66Yh#D-meqSDRA&dIR~GAOBUB)Lw=5vqih85iLfk4PC;X>)i^)cQwv z1(ETYDHADf+^>2o=^&k|8z{CV6^^P}=*x#1g~q0hLu?#NC1B|^7#wDV#ZU5vm#MfK zB;hVI5+n+xJmuZO9}e!sW$h9w?P3=jc*RJ@o{7hTQUD!J#?wOMkz~UchEkIw;eLU` z$aermHdIdj?-x5Fm{rXtM)c3~ockm2&~$Av(2{@5@&ecJg&xMBF20ufWSU) zKR2#DB&86+LWBk`I>064xvWO6M4gU5l;j;Z8?r%@i}(WohR%qj9gClP3$&(by=8^# z1{hHeZoXO0`z;{GHLB9{?8oc;Osq(wVWu^fQSQ`M913F-<7|wS3LSDeslRTQggy`^ zAX32~ZIer0{eU&vFpJlecFkeo6Xs0Pw${fAQ zz54}uAB~k`gQY}a)GxzoqjQL`pzjWffU$xiR+fAL!x#N~SUI4K=GZhbVr8@+5`^F> zHp0-CgSIi@gI&ZTmvxtQp_J^UI_C%Hi45@xuku2lhAj`%OYW!vO#zfh;o87HUdo6;@E_7RgiQZ9-UBy@b^ByiEB zNfCUDGAGjKnm3tzBqt@^1r?G9G&Q0iua-Ol$h#0Cw_ci6$$s1nTGtt+%kTg zOK&#NGX8a_gUq2I!Y%NxafR~QzNnCXlB}BXY{B>5O{sdZS)RK7az?%RjW5cT-o452 ztn@k`3kW#a^d;yI#&`2O{P|h8mLSNvS4q}I;EBJPY2b&Yz`%!_eNB{StdrjHHgxxQ zEgMh??ko8I*kG)2n5_)33gwc+LNr^+8uqmzhHoT`Tdb=R+E0aqDkR z@HevuT$z*9cd(c+3uSGsc8a3bC!Gr1iSuac{j>nHMP>2))irC#dKmVPx>B)lEKsk* z6Yb|8@fRYsy_pOi?Oob^yCUfoR?-iRQ&7|UIvnGKggc^7KKUx$ttmZh%9j{`+Y5dP z6=&iz3i%iTW`H;1>CKTmoY=3(oyML2A9KTBLojj}27SWrUg&r_>3j4e`9~Cc8}a$; z{nW+1-1KgxaaFDU*rv7{vsmLW!#AmF#0&$8P;t*4M2GefppwH`d;CBq!}2RZbkdhj zU_~ai-fyisFWT`>&DeHpZ3wQ#umrIP<+i%7PQUQ-0U&7 z{0aKABRohBS_Yp-Z*gq2UkKHS((Cw1o^? zqN+Qk&psN9pq@Jyan`1T-eFWhsZNb+`eRpR9>SAD=0?QNyf*aiO_JF}GErhuf+*c% zct#M6#``a|6on3{W8h2$?zQ?g| zdlcEu7hxm&pT-q6Tr_myNZ|msMe@}g7ksMMJP9VUPg=ckNKRoNzliDe%Gcul9Mbc@ z^()?JYjPH{%4hFhox)0%b*h2jy>wp39Y`S8$4g)qS%A}#oXfms;7NP18!ZwN|CL3M zVC;V2>9^AvUC9JZuH)2_i1b!yiq3WOUEt@AjISvyv=4~vP1(6b)^t3QpTo}O8Sk=} zGUr!5d2IVT_;OOroZhs|A>sBJ!^jVF0(7K96C|a_1MHR0Vz_Q>%;V+DjV20x9c+av z<{3}qd&^b0NjoND)ZXNgyhM5rcaPe(`Ih9U`;lG4=eeIoT9xRRA*Wx_oEmAv;twlR zxpaut4Gp_9pP1p}l+-Gf`bB5ShXk>aT0C~BXr;KkHv#~yi7msavf>gzz5a9Y_t_j( zRknnLf$VNDGim22v%)U*}q|rYyHG{l8o8pKYMt_X-vPeofBv;Qjm2iFM`Q6#6*iY+f zx{#(b0UU3p6yYR%;4Dy_Ur3Sq&Q2&_6s&9TXqz4<{C!+WFDn4l;xS~oX%V!tvAq#F zHAD*c3+!^VVd$*-h#@}G#&vN+Qtv@a&o=K};`L)zzCl^}!sbD?4d1sKU!4CV9Diba zLrvOlQdOX3vkRB0UZ}&!s=ilKMtDzXy5lRVi$`Q6V#%^O_Da}9_WAzaFVqAkfD!B1 z$D(<0eE#UP>w82Xin>8{W^s#eCHA3q-plVfn-JY(W_2+LI~W7Z;PN+|UdMR{RB79o zu-7{$V0`mMNA2NzZ$U=kqx29=1A*4;aiQ=e8yaE$KX9n!ZA|Y$IF8ETw_J|}jMiEj z*83)FKFDZ;Pex^5oFwYF)A!%%AB>+`o+iorS;N=AAKqL9djG8GHEh}>7L8`n_8G0I zhs1%l>sPKB9BGmg!o_g8W?+ca-LQ>deN;~cVdZ~^dvStD;Pg?E9*l`O4;~#jB*7Cd zIn-XxdGe6jVoStv2=+m^g)7hhupyqi{!wty)e=hmSFRrvp804;j?Dz40MAU4UPP@h z(w;2c#Jalm&$aCVC#FobDv!gadUuWe@9wfH*ijN8pJfLKh4xP}@ zRUh~4QS0$*x@LSEagPF5)Yw?xtH9&46-Ilz$f@D) z0x{)EkL3#D|ID?6EAPdT~ikr9puZMa#UCd^2`3Zi;J9jE(OfIAlzfMNiXr-JlDg8}YoeeKdY4 z&0?#u7A3Q%TZTzmO}i^FATs{bN^N^9+f1+(+8~PgTUE{)xhYY5k77AoU3UWhaB2Xk zW@SLf&R(v~xy{YBfCIaYgJBi(WtY}`@3PpCaQk!%dsBhd7!UfvL8>^PNk5}ycz}XX zQIe`+C``im#_?}^+4_>X`Aq(>{Vf{EUcF`sXtH#C=1@g3rcLwK*vwj}xk9tI^JHAU zcw2NM=UvX0NQRf$RfKPqyNOAWmnR-x5kaUM4r&=i%BGk-xz3(pfRyQp;aFWvlWrzi zrW5^B0)2V=yovEVtZ8iONv72`Ff5t+3WT95($OMXJ9#xwEyy z_1L*%mloIcFio7GmCGX!rCc;IM7AePY>Q|xk!0tZ*vW_Ai#on*zJD#mB)vIhp26|p z`P{imEV=bwSb>7QKR%`~@0WydaR1aBKj6whw&u!@>9%$&&}u-{ElSxN{vv6Cul?}3 zE6x>m$L6E?O!{(qKBRER^!puOIs#%k%h-+8M^qIb11#E~L!%Z>axYm($#o^!pa~sr z0@ga1rgW?j^yAHPzlO)CSh2gmJJBKh2N7mVbJqbR?v(~QhpU)0@ z*>+v8y|{U4R6kN>W%ZdaQQfnN#mmhP_By+giOnKgc0rNQdvD!B%k|ZE&rba%+rNo2XsqT- zbTX;ok}~n3W9u8q1n{B!HXy&GW*&L^W~4D-c*(zxjFsMWK>dkkG^tvdp}Ehfw$x2~ z$5`pZV!J~rQ`0T`8G+X>=F-W@-#uhOL&W8dfryzQvet{z6XSj)ySgQ>YbM8z6@F1)rd?M*M$+6< zdUdY&w#=Lw-r47D;a1gvUPi5xKi;i^Rn`8m;)&=W z2ks_5r5qh{lsjR1e>Bu#899Nf2G9>O<9t%@xm|P$hn==B`8<~OcpU0XqHh5tC=vXF zg-7Tg zE$5&5>(OS5wmYZ20~-1I)3*CwqnGz55-uk$o2Cn9vuv{L)H2UWN8BBsV`c|<-~SX2 z6z16@Lu6#gHB;dkrf26gP?bDcbSB(#Ol8BqLErMJY>db`GuWma4y7_T}#TEX_iH{@UPc4U8D>-CFUq`|-2YeE{!{Afzq*wF#=)Q2K9b>J4dD1BWW1k6GQu5E#_hWY2f@_RP36%j$!eH>|z&T|eWwnTxJ_Mn@@%Ynipzgx_aDxtT;djzqXHFuNGU1ngUnTG1C2n01P%rM=FUW4T2Yw&&46D^J!lsZd8MD$-H?Vo{35 zjUgu9Kbrmbl!Wt`mvz(8v1Kd5_cnS{K(C)#URb1Xhq*psttd$Dn$|m3ow2M&I-|Qg zxx#`YUZ2JX!xQ0GUEUi}LEi&@K<638c1wfPfBtgWyt$2Fa6!U8$s(Zd>HRO1s zHLWu3RT;f@Yj~AO{b;<~>x6_1s#Hc2(i+}#L^7#14kvh}!S=PhDx4a|@)xHaCN3Xu&Q-@~KvoealzZl%7%B~HY zR6wuGP1@)=H1TcyQYgW}1&O?*bu|B!960Y8us*ES%$5Vs4%Ys?9nZpnd^c_KXzXsc zUaqsj@l*3JomzVr_9I;@B^~2u3WjX->1~cR+4W-;W}?=fE?r-2RXi5&fozd+TfRVJ z2yIW5#)A;D@}M5CeUECjhDQBopauv!;n_97&ZCtrIfvhg-dkd$G6eiqu^Wi*TBtSo z(x{Hgwzu;feh5T8%*9zwi>q+Cy0crY%kc44YdTWVOjXio3ya?%(Bcn=)^VLTVD5%K z05biJ42A1Uq4!!*x$gBMr6pZg{c5vH0~zLsHPhWotiFNn%Oep=9IEVRev%~Q zX*W{(6^dNxVne1~?E?86V1KMa#HmQt#Hc+X+&+s?pg_&As(T;Y^?ZR#D>jg|0@=9t-~i;qNAN_ceT3*mi~8ALsFTH!C1%2nvB z@b!B`K2dQ8d{T4Md`Dtz%+sMPaS$~v|NCe(=#crOsvOh1Q)l)-vwy^pIVNNd(J>S^ zb8hG>(X}ZpeW!n+rZXsiXi<>}q>7jS@kP4;(eM?uZpZ$Q{$Avo@_tL2a|7q`lAP;z zkS17Nsu(In$u^w^4o-kC20Uevo(?h=2~i-pi+yW2XxaMA+s7nX;PK>*+TD{xFvrj; zqp4_hRZaW%5zf}1txqbPxD_u(mhOZx3d|(Sn-{s6r)hCn0Q(-N8az`&C75}YSaq2K zE$W{TJ-$TipKv=1064pKPdn`XI|N%6o$Y-QmjX`hY*w3ecpWYCSB??xXg=c90N0ro zC3-65z6l=VVwofy91Z8~@h^s>N(2uPx}l#I8?SPTCXO=Y|I#=?R2{Y#wF$C6%w?yu zm-+EM_oVCW{Msj4D>|lJk&9Zo{`j8ykK?-~o_-h2so!Y1FQ!UXqB7SnfK|8k6R^_z zbeZcC8b7^X!Gh@-D-2vKBx`(1GS@7(I=0O3nYeJN(3=YqzP>@5 zj4{5pk?=(R7~Q>zvm7^0bhpdxn^LAqF|N ze1+<(M#wb^hM8)PnJ~zn56e*nFf4(p4X#}g6Wt!m#g1-ll-cseNPyXqL74O8`HTUT z@t-mHy)i|q%r?cOsuB}aakR8ZAGcDYof;7n5{^d3RO6C`-Q$ssY@cxbg5Z+#W)FpL zOPINFY17!_fqWbsD@zRid74I__!Wio&Va)ot5c7Wf_KTB4>}qHZ@%dyg^{Aj$i0Hq zfG|(_V(UZywq>r#l#PN(*ra)_;dm?|8#GR7^=lcHHpUCQ0_5}g=hoJj0v9_s->QVu zek5BR)s?%;N2X7m*0hUNv!-bakqseMzQv_4&43g%eTQ}q`!NzV;brFeJt=?S0eaLv zbE{^CQ(!U#i-VJ3e){V$O%|rejn1Xp6PUU#ygh-*n$w2bh%(a`ubkR&YCeI|Qfvr@ z>PZ5Cr+&CHMe|n<_RNXwXf^bMxAfYt7xM!5i`iJqQwEq-5ln{ig=Uql>i$){7IT7P3k%2U91xIK;>3YD$BH z;9UdV1d-S2yrVXc1-jwRPwpJ%$E-Cw0YHt}BMh+NT&3{9c+rurN>Fm;T-+H?n}u;0 z26f1&#TCwxxn~03Toe1~oHxHfhlbvQzJ(FQMw~Kla;^BPf*!uPk#%drZ85A%d0oT3 zG_z&JG)Z^8zKr2Pgvvx=`mlaofodRKzr~vR%9cp97m|~r_~BDN`8t&NOi6yYmYETy z4Y{fj_28OoWvffIWao_9<{(C_X;nx+rCAy{cw|SFBY%wuK3$sgLQZ;@QRIgc2*ja3 z#67!&gNtAlhgS!qdGNo_#z*E!lQ@?~jE#3$@Qt~hyUX0pH9jTgx<>`I?iZ|MLJNzf&Be0$@arBjyEx6}{f8(CSQ)Jj%b zkCpPMWk{kxO0O5DSI(Z>PBgSwx{Ihhri0K^F^EuyQ-t0C$qEB?fyuVR8%#+XOo=iy zU{ZV>T)Ny#@UlgG9x;K-V^bbZQZi!vJf&_5azY~LW6*152w?^QXfJ0ieQR6V!wX|0 zQ#B@-Wh!(x=spOd(qmL1U3GaJ3|zK-FG}W?kieFrk?89q5j`F}iGkgqrzZNcuCq?x z7cjo7^?}0O7fCmiYe0}=^i|{XaqsH7%EiKw2GrJ6qMqpR=d=-PwTJt?3+EjVhwvTU zaF$aLMif$Z#rWape&GJf8DqaCS)Cc=#HnR|G!D_s9xj@-8CU_1BF0#zhN=e?p1!;_ zGH|x2@jU)+_hQgOM{nZMCD>l%H$`9<*k$D8ueT?+4eA-F+JlI9Svf>Gefz-unShJ)}L|NGpEdw(zX%Tz*{uX42 zx(EUmpri#uIm#yO9&A)SQFE38xP#jkFh?t{*#)6^pW8%Yql&u#pi#*|#A(5<$#wJ4 zKzUMQon?@!TX~g?M^Y8MzD7-+QrUHUM=Xgj(1~r1p3*-o7mxNQ+mL|xM8ZD~lAEmj zvmbvM!7QRyc)9sWP81AWr{v1p8jaQhujspW9VpOKJANi7yPdRSz!E9P#;dc$Deo+DSCDNs00DxWVZWyyx%+Iz|$Abg62|6@wOJ&RuN>WmHyB<`` zE3|^2`({J+gzZtJKLletM{)opk=tMMPKrv8SxaDOa`=n?JGumzhRsc9J78y8C!Pte_oDAO$V!6VwqOrbQ z`qhTQV4{Gy?b zE&*@x`YU*LbwNRffkm5`#ZusR@x}%C^yFyfPcSQa-)bd8_^tMFY54=$nX(lm3buod zQQL@q*_7hul&Slz(Nnkb=@p-IEFp+QOd`{Mp>qN3Vt>D+yV4yKx;J!Y!c5x0s{;K< zqeC5`R9F95ckRKlYXV^aH?O0xLmbltXZUri$xG*!P9EKCoIuEb8pOeA3OFx+0pigF zwROi@Xl=V>w%+j8W_^yKR{ZLE-mRp!k&m8yeRbFao|TkyUphQwDlWF!OLll(repFH zy^VThd)gu}jn0)D2pScmOe=zC+e*wRr>q;%jCKZmKECKWt36WeihoiYx5M(;exl=$ z8f8gbzO!)9qnziSfgzipFLOakxOWIfSdsHgIpxgamM5Tki6RA!$e_LUCgS4e_cipc+{`$DuXH;4TMug)uT-^anU3$M zvQv*116(Mxm5mJ_KUcL%+8n+VW%&&iifG~*N@>#2dSC-cwT2rcyp&f+;YnEh#! z`@+QWR1lGqqaG}^p{^CUu)k>;kx!eu$Up7EO-YU~TM3?!d{puje%poiqf)jvPrx#v8Hv4T=cm>8m4$WvrxO(7@yW3*xStk_q^@QlUhQScpJ9Gnkpz|QwHrKqhB(3?s% zZ=#w7hscf^+at0w(S4FsYhsD&Ne#R?l4b5f{i^Vm6xQG6H?R+~e!5x~OGcd@Wbp)| z`GqYD%dgFP7nsn7E))1kmMV<gMoJ!KWRqw!l+Qn48!AV z5IrUB5e4R#b7rKd6kBggc$0c-#0|z1@B1GV7xuDvNvg|mmWyV23H}7u=)EXuIz`XV zr&jm*zGr+==HWL{e9nc^7Y_42wTEZO5oHgyyxKQ?t$w4egApo5Zs$>R=B`Rr_=?`_ z5a?Qg1))bg8WaJPbMSHnRJRV4k@{gg)K;c!kBPp*=8K20LlS$k1+0Q6At{>Llnz}X z(DK%h)29bC{eUb=yDxc~DprC^=0)pp8q0f*i911j|M)}CX33`g)~PYPJYcL24qaaj zbl})L1=2B*3|d6b=^noIdXvT&sqiAXlJz@quvg^4{5f}Nh!-oWQ6g^K77QQ^keO#2 z(VN32W?EPS@4Qd>GnN~CarSj7?;z7O^!%};DO;-20!=LfldlCx*cXf(8$JALU}mF& ztTGoujqP907Hei?oKRiszzTmb@oY(f#l^O_{76~@PSv`b+r)3cO2dG}43VavNuJen z;}jDVLh7@&OQk`^?X9d6j3X)O^OC9G3}Ls|gG?^sms4ZW8@D3+37X-y45ULEdDQ8o zQ>wBY-*6XV|GWT0p-`YEJ4j#GTd8b~7fDZ?{W7v`^s6!AVj4*(XDNmp z?%|nJ_;tFLxo+m{ZUE*}Tvz^}H%Rukx9kFx~sd(d1RT zKvBxx3`_ZY{y*R@>+(O?Kv#SiACp|v0$Dfsk`R%tU-GR;2Or1a3bzOGmt(kNiGG;y zVbw|_T2)FZHgc&h)&c;wZTLKi2uW|hq85~xDmO;`Z^8Y^cjDkmDJPc}AK}A<|76a; z5C6q%D4eS9AP|AZD+dIyoJbdV~Ff)oXmDov#c zNRi$Y5u`)*P0smn?%X?P-gCaZ_spGl%{-a4v)9`B?f>)7v)10~DiRln@Qs89WoU@N zcO>zl1=B`Ar6p~gvG<_9_TKlLJw2cj!g8|0l2AS;EY?e2M8wa}PuSf{!p`1T*wfol zgde4j635Tvzz0&-0HcD?*3~gY8Ng8Lx;hv=BLh8MLj*=wN6QqYhY-ULqQr-HfVGFX zxGM^#rHnt~#0Lxx(?e*%FmPS`g#U37Lv<7aWr{Gs4~BZ+7%vz5Ykf^nBJcsmm)Htw8? z|LhYW4z0ue5T4%#_G|{x^cwQMmSFN#B?=Xr{x!ZdIvhm7r0q!bTKaHVj{5$lgCg7A`{0T8PDVerXeqnlDO6wS`$Z13~YRmnyFdZR*WV<&zCGpDa_i*)iQIP(5eQkA$p! z(TjMn!h3$M_^lO9fXn8Oq;8#sRtcXPAF3)Dk-zjVHd+O{uZC$p-dbrOoX>**FvBHBa zYalJ|m#BviFKkpCG$92!YU{R}4_*s>j4+#Yw;UMqlwN;1v$ad-|G9!f?LNb}8;c@G zO3z|14MQ-Q_*o9fRh{FF;Ps&TExU!j-ggSB<=;{UmX9ugX!~p)AO#Z=7qVHczXj=p z_n2tMe)r1BD|BKaSPm{){l4Egr;sT5;v$o?v@pD1)kh39(-jAfQQuSk+FlQ|}R>aX3 zQT{!T|H(ZGdRU&MK)Rh;j!2MiO923!Eq=Xo^+l1@FMWq~NH+fv<+{Ii;p5yzV*dW_ zbYsLp!;@q(Rd0fDmpHc;KYi>`BIYTdzSeZtYCYB%rCBLZeF~Sato6|;?HZbRc)1GH zIiBIX6iwmK6b74cdP#FB2b$-e5+ncPDURFn{&wg_2vdN5t2vAE#jNtx4=#DDb-A0a z%?;zcT%IT8ai>Rh&B?as9w)Wet2c{fl1r=OnfNOmV)Q$W-wdx@S+RRuP-GR@ys#d) zbB7iC<68)a6@?iAj+x!1XA*7Oa~-Tfq-$BiYHmuxnP(L3zuz!UPQ@R$qz;g-I z?Xf==-cbk*3rp=OpB0lg6#e#-KJXy`0L$D^FRYg3)B7I_ECRYe!;>HGxGtZX!(3HE zmOj=EJ%S7EitlD6>8jb&4&-+JHbUL!6ka6+v=2i3%Nt{Z*kQ{1?vW2Fyh+9V_ z77=U2QLo%42zQO6dSvIo898mZK0mI(N1@Q}9@AVD4}zN3ho_XJTCK4}y^#a}zYKss zbDYhO{OzT}1yYG6lvXnUbk8PQxm5|rhj|DhpgMh!c>~?G!xBSsQ}KD=C@K#)gE?{d z+?6NaDkx9?0SMEb2li!L2oR58wq_v@wQx2Ey?k?fYei<#OiofeB*^2dZ_=-=xe~{y za0>r7_~pT7P?}?O;yhD5O6QFmztC}OZ5lgX366l}^!95w|kMd|YcqEvW6ib~uBxu(jGR7UvXAb^yDJnXO;a(i; z?p$LE0S*bJVLHz=>7NT)FF5;A%{V)$6;x*9f-kSUQOK)~7lOf57QpX7Y1aCQhMuZLziVLkkAf{+E+dchxR?+h z5uapGS=)*tw;^MATsfK9(7J1~x7j){cv2FFTJe;EWPNa{0tSa!)kqnI$1T2>owb}? z6{Ro9C}%ArrZWJJQDvC@5{KZjj4DHxo=!Op^jFn>mn^X)u_Qh{CRGnlVDLK{XAngY z&Vjv@>Dz&6WIhQ)8S#y4dZYaIXoGA~a1~_J;JFJ?gHV>m0YLPk7(!a>8g6G-dcaH< zqakXp<|3ib8Eb@QU}AevVYNj5`c}l*WWRy8xbqov>HdjBncC*%3eK($q4mfS;eZk* z!N!e`EuR=HlugPk8h<_`38U5INxV?zO?p+9Ik|ARb*>m+n??3q)4l{YZ9kTxHG~r2 zf*5~Q)my3|9cXho^MkbHA8-iS!^b;@@ho2^dP65qHVJ#Uzwg4T$E!-Ij0K~bXmKt(8BiNbwJw=hj51h=v;l|1a6^Pe({#o!lm3u>?=@G82xyjTq zPbZNGB4VPymEf0`)6Jst!^qRWs;JylJEz){Ta}WFjE&_pZ89t7dr8h@q(aHheO{nV zqBNQ$y_BiRn$FX4?R2pIVQEwZzsINGh+g3AyY2C;A9KT~P8<3s4tz#Fus3mQqH=w7 z+rOS{bqzS+w?8WG>*Bi!*Lxs(!D%3C=e60JRn()E-(%^Wa;5T3#8g=ytaa#|w@0Rn zoAdo~j5qsp2$t(-a`CRmXtIzj?UD@CGRTUIsfUaRHE$0?Y&{NT9wj_p3BsW3Wcsss zYlV9`Eo5G8VRR7OEOyDuwg7O5ufPCsLijij1twP+ekDNOuVia(+4{!-z-cNG_!=aE zjGH*F5LF}2m$77>dh5k9_v@UZug zODdv-tOBB^bZPC`eI&4mF}80W)?7?5F_nxKa#$O20trar0(tO7%KCt@^aQ67Jy|tr z!TgJAG-(}D@GzI#ErR_|-&|D^DU5ti!?n~Awy4M^g98?+azN(E&?uWLf-lG^kxYZ+ zkyP8Q28dab4|@|DN$IuYV46stKIrJBPq$#I5M@d`XNl_*a%H2w0u^r%s@Bq2T>Mxa zFiL2TtUb(W0ZFDQ-<7cKn>ntuwp%DlfbeybI5k}Yw25O2>r-1C zzb{zIT`*kea})NLZ;k?W?xd-3X6~CjqgsfcM6>a>#zq%$^_MC$!lQYqcMIhoY%qeG zvl@-{XX!{d1%_X-Dm{`v7*UG+z2g|Xnqoc_vpF8}>*6xHTX@FjjzlMVz^`WbWx0P1 z3n8nX($o_f7jpfHY~7+l**_O*wCJ6*r_;#y%`GsQe9o~^>b!$>?;SH~Y732_SewS= zP7iCk2IQXt7{zL@o|BxCx2{IR?yEbmwYSd?heMAZG6GA1}7 zy%$SsEYSvhic|kagJ-c?|<0D58oax6R!C+;IuI^zDN>F$Q47$#0mEE*Z+ylOG zeLny<-KVw#0~b@KYcz9RYw-Ju%wLA9*myuKMj66-xUpX7;sF1D@|!rJgs|{t4tNg7RH)rO!qC`k6<|o zHZ9NzS~i9qD_Q1Xhxr2F8uC4A-wAmWKYA&?YA$)3?KR&DH)12SlPni0Y9%1r(UrLs zeMfe_=yz$#jyvF zSjr=B#O?aN%ZH+_W&ywDoy<_+u{fmTy+Oh$E{bK{Rd8Q^!o4cTLpoK=sxXZOuK z+D~3Nx~ry(P^g`A%~`t$Fwh`Ao@4H3ztI8L_4ICf!WYEK+q4O^2c`#h8g zFi_@PAr`*;T%1g`)&zC!&ECMt2==it%tOQ&t0B-0#!2Sb37am-T!GjZr6CoK4bos=hpC%)2QS~ z;K}qWhrW302*h2QA>Er5Idk{+KE)J4K&uirUQm8e2JicL^s>{l`>~3^n;}oKHxMeW zt)c6>8VZR%H-lP76uO=UUwPn`OpyX6VqJ-q)7P*#Hl`N{TuGKqlspW zVz@-}EU$7g>%O=?+pJc+<6sSXAXlFCXynM#4`VcrU{-GQ zeMzx1shmc{RZA6p9iU?}p4_e?5sTKjzJiaFwa(Mq+t^T5BRPU_g-{y0Maux>9CPO^Eyr0j?X7DymR0c~R5yy*+Z(dZ4yp=IdKA1{kId2{9 zD=x;iU|~NQxM+CdH-)de^6y|R5Qq#(Cx1Cr3Kr15S%CFcA;8sfpvV`^VaRh`e5tSt zY6J1Dt%U4CFvDg1$19Y1R`z;kHeA={n3i5SYirC#9=lBkxFbtSnOH81Xw=rX+&o?_{s z3iLveten{S&|Ts2C5)^(F4usmc7Kw`TP^LUMDhVk!rvaJ-*NCT?XgoulScKK4iya# zHOx_E%2zrnHv3k19jArvVv|SU3Xz?T;mKlo=$8dK?k|DP4f1b=_7i=*4=R2uj#S|{ zc&*ycK7S=rmrKu&(Y0q#;$jiwp$hJrlbi=OlO@ES;Ea^U3Jb@YdI6RJ7Y6mqKl7bT z6I~(tIS!buP9zCq0jkn9Los>^=#g+5%FQ}TmmQG65G*&wLEW~BgT%Z$TRV?A7nXVN zY%6J|a$jU2P$I)YO0=&guTgQx_yNpW1N~TEIbFkQLVGFSf5B%0-ZfS(e7a&&SvmF0 z<&#UU`hpZ!)6HT~HrzwyJdK)Ery)(~hND_sqXlo;W!U#x*;|)PP~&Dyfsms3SL0kN z%2t)pkNh~DDl+J#e)80FqVho5PSqAv0u^5IL6|B+R+rc=RLxnks1|)xhF6%{MGj-d zO&Lqa(C+jqf}_TC*EPG89Y5T%cV3%&Wz>D|tK_pF-y%IacvitmuMzy}ucoT##*rX7 z&F8V}#7Ztdy0p~|%%(1LFckeBt0FG`h5jOx$%aVdQXxUwtyDk)40hC^dIjR=%kj7G z;k=P)D&L;6 zRT}E20I-duv(Z|QPb0o;J@XpfLfFw)(P+9)PZ9$FE_A=b$nulPOX5#Nv1M|#yo=>E zlAVH*RY3oi*_T6>9t(r6zOt&tmY0jqD{`j@SsmuFO~2nJrd=3kHM*o;M6RXh#6M3Z zL}62l%FEOq(V9=7#^86khX?=b(Sg4g|9Tdh9o{Et^||z>oE8d!s1o3Mit7;&@y@QO zN|>4Cbf6x+XBB+~(^e~|37elvT%P{?vHA~KRf@I<^Gv6fAsxdRql@z`X}fAEzA8?NdBSXza`vXYu7)7 V!!Hm2#;X4xZMpw;Q-4PHzW^R>rBZMlaFzK5zJr78yz z;Ink__Ja7@czQXwxk7k3g@rizAk6mO-tHpLp85Itak{wkTHE+?x_R0?W6@F4;d$su z^HAm0wajJZRMpkAb+n{(l+@MCHFUK!)V1Zz)zwrCbu{F-9~xmiRL=klR~{ZG9Vr#* zhj+9ORZ2!mLrz7?Tt@w&!@s+UwvvvVj-i~^L$gN@m4}O4P)1!<_2E+Dp&A$%fMnd< z13Vqx3lWmjnO+`=I{SESKX1CUE!(_r!42t0TM(UHN4~|Fe(C&Bi-f+=~LTMUQZDO;S?T z7z@?(0wc~BlMf4Piy|pY}_o#J(waa77xAH^(#hp9x$Ddiix4iDP z+RZ;1he6Qmu}B_p*ZZ|guSkjalV0Jd7+{EG7&4#zOsPxzlH{NSa3aITMvJ97la(%h zJ%yossOy#4^vJ`F9RKlPiR6AJMxFG6Sr7Owcy4#or^6-_dhf^2sHGD2JYZI_XEYgk z%d=vkX!H%P55jW1>~NAIXtq7*8Uy1ab8b3ewc5K4d#)X<7lo|INyMIHkTF8Et9knp z3n{su3~EU-3S5#YSfS=mZ}@6M+{4a5U^i6TPelBD!pX- zDf<^+4rCzZ-BAD5?k`ORg*)92DPI}jc3nOqFH2>{b}wo`87(4Z#-@LV73nbr0Y(gg zeP5^|leHp3I6V52_=ApQ17z})5hq5CpMBq*b&djejZZ|vJO+X`R9ltDaP8)08!>X; zgHT-pite+I6{|SYa4{{tS(E4Ls`W~p?}GurzU)0ix=7SZIYOnk`g-u$pj$CR7QaAM zjdUfBhcWR`&gIDSMMOV2RP&Xs42}W--UnvgFl}0{X&r}@<@t1}9J&-XR~2jS`DcoR zL!)tD5O9xaBlOlzrzBBenrSS-<3XKeu*uRRORIO+aG%z--q_%N>TCFrMh<+s%P0CPr_pE(jp)TzQz zDFO5j?ZBeCD0h(h81UV0yqRk}uT`I!2YUuAtJ%@9@C$7I#-)j~MKVzg7%8!QWwrDC zEhhqwjGEBzQIBL|W|4y0Z>mRFIO61-n!{xiC6BdHu2|XBuUbxSTx>;zB-6x)nX@dr z$9(`mZoZ(DxW&tr~J)#ttGkaQk_ypUL_!>H(;R!~0 zpC|S&SxviL3NXx*5}pYLqY|^?G4SzDltiSH+Hi{`P~ahzK;Av*y%ThBQe2HDG>Z^U zjNWN)y}*AuXR2154|AM$wv8tm|H@(mhM;XV_t!(bw)7ZIK&?# zC0t*=*iiyJcO8q_IK6&uX~V2COv0Cpp{IE+63_P34FC=gPum0IM3LeMFgg%$n$)G2 zYnNei1cVGV9GyL*b}|066|@m-Y}+fU@+=BbPIsEh-aOE^j{9}yN%|${Pls>OdSQ9Tg+wo1~_)x0+{FQyhBVANL8AG(XOdv3gzRI8k zgG!d@Ti_GohfrK@yiF?lEsHl3Qwy1abD2)s2EXVzW`nc#zpU)y4gU2mZ3$sHTdLf} zwab99oNlwBQC;A|=6iyFpQfOW4J%R&OKrQ`?^*p}CxRqV4-g_Pv#|y8-Sy+yD3&SxVH6 zv2ykIGn1ZV)%#wU8Fy10#ap9;qLZ+_a1tzRv51ATYx2dDeTVV}htUY&2;o8?G8J2y z0r4B7a&I0NMX_f=vQv@oZJGLZmE)-k360Y0D$dX-Ps=C?j6&As$?qNO-2EDj`DF8UqN(P}1zFZl(2jxUy} z#*xPqeBo>Y{|4JCNFfzR3V%9|?kPhbQ?q{a$kE}AasYZCfBMe;Vd^ykE|DfEe0n1# z&0Ic;$mi5BWofmL3>K^T%974C$SCoV5pw!H0DyY|Sy`E9Zv`ch66P66?DsOZkzPw- zgrbIjKe6bWzz6q^$40Sb-2)}EzvleJesYE5^C_!s4K2l@p`BrFMghRRnK=L#Y6*SV zr0v8+L!=Z&%h7}x;@-tOyzd*RW`90kc6v1tA~C`c|I6@Igo=SrI0CMaW@q^GWk9q{ zK-1oy)+8oD#0TCPC)y0+Hzd=uDv*LgIUCj1Az*6hEwBi<)Heh6*8nGm8KKovH_vGn zRHCpicaO}F$TgAuEs&kOX|H-!_B~mj>~V>|&y=RYp)_ zxFJX z<0EBa2WqBt|NFz!JyDpg60G)jdcp5KM>G|-@5H4;En;_Ggr8Jtejmhiz`o4Z%O{Y$ zAOgebOyXh3G!5hhwv2nRWo}wDHau&eY0o1alBZR)=8F+ljAIy85 zHexXh9*`}6M%PqBD>C$U3`ydYv?|I2>x+xkYm{+IR7uHwI)ONZaJ@9UXs6Uz=xyjs zH}Bg@hS3z!&fKNpM-RKW7Ok!HGEZvN`v3sD9@Dc{O>tB2<9d9oOgjaiU71|UqD1$k z7(RD^EUk;fkuHXhC74RQsD_#*6w^)t zjY;ziMZuou7gx1+Ijm>w&Qm;@@NH`^^8SK5_*dWZnOydfTXthdzVVW7gJ80$?OWXzSA|B(^TC6m+lJ3dW0MO{d4NkR-np_7Z&cw*?%D__K zHy|QMG;5ZysFdeqFL5*^k+2-RhKEt7xk9l?P~|}@1f6LJ;V#&{czR@H{E@u)60_kH zFHsXg8ev&{LjLdxA~l`{rn957S-euu;ANA&L|tYrE0wTRk0~l^RU2}=I8%lB#8w^W z*DjRj%Nk)Bqv12+mTxB1t0w3LRfc83T)fIovO`3gW&0)L*4Q!X@Hxe7*#rOSa4OH@ zIWK7#NW}Q*X!D!JoVa8F$gObgypO_LOA+H_L1BFz{T%@}Cs0SS0ZlDJ<`RCEH76)& zN-FrH^&>Vz_>@rbCl`2|egM5N)0>(WW$GBZ(#WtM-ZUia$bFy1+3orHJv1CClh7gt zUoy*)va@rES2Ebu{dBV%E7xYfTbMUl_i7!3A8*vdp%*@5pJ=!XnuH4zjCzw_=Nwu< zb7BPSci-9X>CTv_sRPnZ|n z2qXX^I%b1fJ`{~4*%c%#W zA%l40<0{yO6B*Of^dI%1Rw!vT4%t2g8$ z#{dvgcq$W{U8gx8r(#W`N71UA5c`vIRM)OCK7EAUI1azjn1@I6y;aZkSX7s@oUqI4 z9i=jg%4p1WIahOCO(mA$O4ONAPna?RJN8tE|cqYrlW}Z~j zgM&&s!jI%cocY4)_jY&e*C#)=lusr)2=2L4j2FN;3aQK-J+7p;JSu}lIiey3Sny>YgnS%6%du{ubyGl;r znxdzNEVpnAVU<0H1hr^O#mT9kPcDf%LbzS(dE~nuGKFUzH*3Y&!k9u4zyEY7ANC$M z?RP@DAtm$VtArb45%gU$$1Q4K?_9#SPf72v_ zf8ImW7^(9b!JZbY#PCk6A33|f-y(dr8AV`#sy97SZch-K_HOyuayn7a216+7EC0ZP5aN*w| zF>5l`+}a*yonTxKHZmX-cOWLx~7jR^#~pzchB-@ zXtD}y*E;4Qw<ATJgwuBKBY)4HC|ay)Ds}}H5SRaY-nOuS=I2Vjfyzz z8-TZCrZY=3;HsFBwmYXPhXr zr0M=IvOOsG?+fUuU5QoD_g*YNF}$Cj25f&28)cZ{8~)g|K@a_c6_qKzTOm9e?XPWY zFdF6TDo|nG%?I3ZLRdLDrMSn0nz>@D3xQraVEp@idlNEpYAhnEf9S9~M>G4C0jWCX zawjNoY5j7)DWZcr!DoUEGW{LnwHOdS6jo#}@;A7e|5+ZrQ)I4Kh4zQ@uS%`rRZQAy zvu-!>eGD%8uH207pU^5E^iBzXM*Usn>&soA5lKUjPoGX7GC8fX<+h=d44ljiy})HI za9=oU#qPx16d9Eo485j~v7yq6gQ=1tgxjRJvE3FA#A;_p!ofpnY@FdbkBf;HB-3(E z^uAr8akPcZQSP%omvqj6bPIHFtR5E?aZzoDx;lg?ix=hUe0br)^_)kwhfyZBh9G8| zGxfRXy1q^`YxH@B$-XpQ$bQ~L@36Fv4~{2Sd&oo}9i2Xa@g|Q>@6;UgCSGSn)AHNG zd&}*UyUZPwQ2UGzzV-QzB!KdCQ2 zs=h#0Hf%{Ls$-=zeT$!;7W9B-vofY(wsf|V%`#m+M4`t@1ByN z?!>n|2Y=VGmZpyt5rW9k;iO*PcN+d=#ev=CdPIgYm4YM2kn#CEH+di-6Kpo%D|Px9m#^PuC2px_Uxk-FWuYWTasNYua(2> zw~e4!Ux$9u+>1WJ>Bk7+?wM{D7ee~wDAom!D(1ZP>U%pX9I2z%XZFuwBX*3i zcm)>NuvMGmMG*VW$wv-ao~G~-dKD>5Gtj8`^(l^V%pex3eI+j5Tfs06+v&~Uj5een zXY_t7xYvM>xI)=5u?;uk}_aoGDuLaWoxpE8|5LTLnj8@mRr$#cKq^lF!$AO zvepLw1UtkE#Lrj1Kv?dc{uSPF57$JRJTQF%j!B)@m|UVWZD_X%%sD6&m4iog?Psb( z2~*7e-7E)+;b=l$xL)VNGQ+EjZ73J&)!1{;by4Df=0v`lsX8&oEA^kB5xUZ{+2xw;YGO)$BSe#v~B0s}(0 z-*kK=mu7)j8|!zKay*N=L=8z z9;5|{h0i4+`?C`lE`z?#Znn^a5S(j0C+C8DF`oAgn_sbTjJ{?lI>iCkG z;dcwt7gHkExrf|iRbD>Ba$57+bOvS3RCP_jw>QV+oyF)71w2a-wk-f$$+9<4mFnA} zDXBjs0(}N`#V-Q*?}2X*yJ++%Z}LqE;M4^H_lM4zWTC)6RlGivi5iKrkTfy?G zBy($O&h$egAKD`l{srRhuA)xBFy^IMkl|B*3!ld`$#t(Q=(7z@k))Ru3K z4@JNMj3#*Vm;D;N!4;cOy$kr%g^!+^FaL*5|I7Oc0J`U!=`uo**sa@H^~R7r4s{FS zO^8iQP3(DJ=K1ogl9P>*A$5iZR@-rh+M^16Yl}BsjpJn*#0lo<4PU-z(vacqJnk~K zYk#+J@mZ=qf9%cj_Tr~n;P$2-OansZi74QsEyjKQWMlY2PP-RVo#_lcz+Fx;YfzoX zU$#rk^8{;`fn;Woq$j5XjM`e<^w^WfnjGCd!DbuF6k+e|R`bJSNi)$@9PuTiLXrGS zrJfrz=U@b?qRL4l0pC`RcQM|yKuLO3oMa<^Ziq{lIs_IUH1CL}Db0TkEL71sWEcze zQ|LM{J}o7ZLXC;1zg(Engm{!ef$MY=cx53S3#|80K@_{C`i2EN^J)W-B9)?s|78Z= zrQIdjzqCYK0lICLB4|3CmDNQt(CxDouf7OaQ%`WV*^zR;vmrL^1b)Fh z-WdG2D*4dBdL@{Gw5^YU`^XrO?bR1uKeuTyB7z>?H8;->^9OYHC=&5G4tAufns4 zKl@_@wEBNeB`s3-={{;`zp^wfA$ zkt8uKA&qR{C)@WZA8}BQBw`MaDZ9=nW0WNw0@r-|v!)|s2+RG1lwRKTSVZ23Y(98W zbHId$d!$X2VZ13X%usW=&c$J@#lGsw$)-A6BOSGls*$wMPgM2QI&ytb{i-aXUTenJ zIAnWlM?S94T8l~!r*ZV$@2G!>uI-E)hzx#XH*(O6QFx3xKq|6BxwEEIA$=dGsT~i= ziITIj*CXjjjY^QllWB%tyK&&&58G4%cQ`%g!#zp#*ZsgS+Gtu#U^}{ zHDGW>UvxZ^|CzC(5)J@7965LWs2Wzs%Ep%Qj+1^K=D>Sd%uH;UTU4D^Y>@j2(Px*f z%2s*g0yFpzQN6CAi(M>i9jTT6OH}Es(bn_=6eKoVgU~+}c|@)= z1h?+TXlx@hpCRWHe5JsHT;Po@dZgF%cv?1FxE&c$FtU%{p?Cl+t8zodeeG`P}_qqOvD!v$J1sBW>YplX?5x4~wj4 ztQ+Nb&_Ca1X3{qX#~wqi5pWl@DtK!lfy$e2Vl@sQTX)_u>G3@5fCEs|-EoL; zs7SX<88mkc3|0T`P^hGMl>3JxvQ)U$m~zki6E2>Cknvv71=e$REx3wi3g*?cmA$P- zpxQU?{cD#J0*iEAIa^ECac><*azUanDN3jj?e(=*Qa>M?&|{^+*_!;U}5 z=O1GIn{c><6iKILo#>ZUNm@O&YE4-Q@1(on+bXlyOYjVB-e!ey%Rs~LvD(kX_~AY% zvRll-GwLz|2d_CdVK$bUu*Hg;mma1jV>j$j;7&(wrB)q9<~woiL_+NQocf7XeOYw? zFh2aNa4*_NLITF0G*0SRiS?em^|3Z0!(5k6nY_0Q%~QrJ*NP^v+dfT^HhO>qIk|{l zE$%f^8qRHBMCH#$cJT@`_#QiD5oE{U30@uTCO#b0T!~^0ziqL6o_(`&Z=>~a^tEHj z*VXHZw6#PZu7XYac&pbXOpJ{AK1ob`BiFX3iAFDELs08koUhh!{dTrs|5|Y;NnStr zuW(k2L)3wfL}vh)><}6*$&01zh0hv}Br{um+pq;ZW*=TkuUIj)m*NQJ9?sFA-`h%} z^>12HbE0C}*~`1-nEuGqb=H-y{t&h6zFF_U;(R$7w7!1Y9@BesKYjgjd}`+z^fbs8 z)rx)e?BTf+mHa#ANOkrc*Bq<(cWj>0r(K05_NihU73bV^bQ;{QQG=X?0ATW$Jj5+M z@8QRSfOx1Zvl=c=bv@C%n2K3i_AC0+(Zp_7dKU zOH>X5sF@evINO zF}FUF`RG_WG`OgiFo`b{WgWh=q^zj8_Dp=~6^@3N%o8mKmPJ1+!Tr=OwUgm=gynwI zu3irHSVRMX9ELXo_jfG|;?CW^41rG>ZzsJ?mGpMb>j`7i-z|zNey`~eNIK;({n@3T zJMIePKh5u$;(jYEp2aiR*>5PB@vMyHeSOD{0!@2_`$6dJ(Kn58>n5Gd4~#Z8 z`)$r2xAe5K?vNRYNFNdB>DFR;x!yZ5){f7b{lExu{NQLl{G%)|N{>LkojqCw5mkVL z@TA5p2xr}0UpzC|WWs01y9*dFGITorv04JvounB6wyL4Owe}0RYNWe`#PWSU-KycR z9MV9*tx(;R)ZHt||0Jfs#aT1kXq_`3Lm#S5UCaKgeq(YPnLFGc$doI03w8X5JZS6f zKajX_k&e1Kj~2V#PV3-H9K2mw^`88-X#%@;wMp7+Jg@d%cT{G!M*Ew^jnZ-M&foEA zp}y-ZC6>h3aQKv+tu$T}5L%>7^3CKSO>GJPK!|Ty-ov9w|EVeyg+2Z$!(G*EyL)PR z2f-@vxz~n)!tJQ4Jol`a<8N$#e|q@;ca5;z28F{0$i!;G;vap@zZec7oEr#)qWJLO zA?P2m{oVTT51anKXz)+L{fmXuMMTy8KdRin81A1E?mu-@|5L;Li=+DAmis@QRQ~IX shyS+R-#qYNC#wHF%l$2?|2@n7ofiMppR|J2X^zi<3M07#k@*Z=?k diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Headstand.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Headstand.mp3 deleted file mode 100644 index 6864057357d3a156d50f64e1550717318fb797bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8428 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 A3;+NC diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Interactive motion mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Interactive motion mode.mp3 deleted file mode 100644 index db2f2c96739416807c81dfca739431b48d247d44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13287 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℞Tv$`3fz15pJB$z8G25Xwwq;VDaQn=Sc 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

erG{GkVsv6>^%5_ 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%0AVxrhUQFX6e_XfqS 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ƋBvJla?j5uSZ}TjQDsa5^(|*$)^k|% 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ⅆQ9>_FuKj6@TnF{L0+OI>+%9 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 R%khuSKA?umD35j_000#2z&-!~ diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro03.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro03.mp3 deleted file mode 100644 index cc307405fe02326ed503a498c962148015e67b6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196858 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�(Q9&xgX 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 P-2W(|KRf(uCGdX$c*;QH diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Introduction.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Introduction.mp3 deleted file mode 100644 index 87c699dcc96d99ceceb9862af61ae0b8010b3d61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244819 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 diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Yes go.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Yes go.mp3 deleted file mode 100644 index d3ebfb204ff05ed2f72843bc6de972953bf70669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7174 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%0DOQYDj-VgdBFFKxUy7*n%O#dA* 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 diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Announce mic test.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Announce mic test.mp3 deleted file mode 100644 index 4940e78f729d49539f7c15c3dcf97db8638b3b2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21123 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 QpQI!=sOv5wJxncS0LK-96951J diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Button test mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Button test mode.mp3 deleted file mode 100644 index d2d5ca0bd566c92da334c9c0387526cd148290ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11249 zcmeI1Wl&tr+O7w8f?JTm83;Cn5FmlUC0MWk!5xA#5F|iwcXuZ+0fL4A2@)h&aMwU^ zcL}mSW`93+)v2@VJ^TByy*F3A%tku2ds{6USdwR8kv;Z3DzM$f3YG}yZpFF+~ zB?)C2@RP@;HgH$4yM>FZjiUotfJgW#&tou$H5~3F!pr;i?OPsuCjoN{cOFL1wLU@ZVR$z7H2q69*{t zji!W>Qn3*_P*qMOkTpZn;z#2RfJdeQq!oq^w$W~wzJ3H`y*K@IOwQzB_ zFxQk)Rk?o%=6z^8nwi)EC&mLH+(Xo-z94BA5)`K;JuIM&0Eh^EFp3igT+@wmTI({J zN5r93VJk1zpcvClm$d+Zo^C#-QjBcabC8QyjWH!=J1CWhdQ$BE&RS8BCF!D%Nv!=G zucPm!$J?i-PBEEdAZ46>)l-D|aaO@2?&|`Bp^Y}&BXgM58x6{w?6)QO9mlXsT2efg zU*F$&oYAge2tT0cSO-o_2h1KO@NgKKguHw0_XlRxacnLItdfIRt%)mI8dMw-e-UEJ zr=YFGLb}<`*A;ft!<1!7LT~Bf=!Cpj$Rm#6HRrX1wYTpp(M&Cky@06NXG9Xey&T_G z>8I_D zQV|B;f%UHu8&by;W>+HNf*`9DriNZh@4SD1mURT`+%JG;yH$afjzkN#X?elMK7|4l zB5`GQqB~$XI3UPBfKT||= zH5oNjxtEPU?6jB1^gQli=m?;S;^*iIUj+SjyJ=L&k2*%AE%Crg#tjss}FhdlyYeo zOk`O8J{VNF+!g=;)OzTuqviW~Jxgiu5U2 zF|T2LZXwcgG)&jNXDOxxVwDKzAyaP=*Km7o3eIgU3_>#8*arl!6}IA+_Sq2hc)xrD zp4C4S9UGAhiA#PZF79?i0i4{pEe-7bwB?Bz-5LV?evC~@eby9h)GP})0m;E(5p zS-w1+h9^(N3uJBhRP)-9Gqn#xjy2(NIGMupwO6-@VhiKL&vQ!7qz=UvC{lxeQcFU7 zD++6vk#M|pQWO)pvK(kYnQf05w!b119XUj&p7(@m2>_0hqxY9dgvOQ!;CYJbyfkJ`L7A(E(#DosQX2KFYvF-#} zu$tGUM^Mf7xc=0ZS({rcC)2TcZ}wAk+N_eXODM(g!nWIJ-8jV>`u>ZOnKI`ePhWaR zn*uo`oZ_PZ5r2lXHjo$TIJuWC-WP+ceTFL?ELsqlLqkS}a>m}%+jDsy3M{<-GZegn z4;v<$Z<8R!Vxr;eT28&t)o}Q6-xKdkGf7h|g_XT)cJ)wg&XZ%bz+J~n$unbTqY+>d zAJyDgH300oeAEI4u@=3y7@cH>i~I8l89_L2v(>Jh?H_oZb+Whmz0}k)rA1WU{Dfd5 zEyuwyrx%|)!~q&tpBY@kbf?kgQi`aM6||Y|hZcyxj4C$eoG!#FtsUK&FQs9*CGzmCZun7=LMsUB_ z+?~mL%P&I1%{^9;i+MCoqiUeg02D7B0-@$3hP*%8F8fN+!oOjBf3QHmo?`Mo+dv8@ zM2BWL)8ZLnm@kYyv!Jr=J$?d|^`JxoLogV&^47_br$j`AQkS3icP-2eD--ubYn}G8M;-Ps5Wpc2nx$P5vd{k_RTX+7 z;Qr)x$+WR;5+A?QiG%4exWkcnlGk%)B!*>#*v(2CL9#)L3XXH~!VyJg;vP-|OxiRs z*&fky_h~N9`q%0+R!nl|#a!T)w&$&!E8j8(26$uy%ly&O-Ss*&hA(A)6MY1ZHGxvB zlgcyYqc0=5SbX+DDY+)a*siJdMcclqz8=4Li@}?i4~q4a3{!47-CR`8QuHap@p=_c zHWj*mFfwOg!vw7;c9g{`WDC-K9Z{tVtziOjRt%l6OxA!WcGezncPrQP#A!N7UYY3X8UT8>2jQEE2 zEgJf$1yh=JGIs^VgKWwmJk4H*g4xxS1QcaXY4c86gdUl~ts(L@UIH-%` z6X2(t7eYIj#a;?n_3Y?aTmWm3)67!8egMgKr)y(AsZQ1DkAc3qE}*6o@Ln=?pjx8K z7FA02nhFI3GX55g`8XBzL0YCP5foH7_{1?5i1k zid5nfbc1i20?Nbi4USczjt@MCprBC*A282=JWXsZ|U*4~+FgSNd5 z^QSCkImRmCr8($#to)lU*w%f7;=s9drr2xKcTOVM%^BKsR0H&6pf7<%l!f%{?frCt zv+Qy+egLp;dAit}nKw?Eo|$36vKrLz5jE6P$G$6nc7DqB z0&9Y4lJRzk8>nqu+-CKx(n7oZ$o$j|y&u)N*ZqzJ1d<`_TEK%tWxvIF+nBAS9VL_P z@7@yLJ*421BBvPfNE@$sp{dX6!Zf%scc-Z3f`k*M@0eVmhjn=Z6J8&NVT){5OPTYL zBef+GueMX<^MfsTYjK(rF^m-OZ>F&|sGf*zcsDXUol^hlxGr=vpEXylrcui=*eNwW zMq5eg$unl&_UEp&R9}&=Gu+_5K5O>kQ5H( z@sGl^BS0KS7gITfIL>A(#Vd&bpFV8sk>YGS(sC-yiRY)33Vyy7quK$ za_KRZX6KG~t#_Ug2e6^85c+Y~)afEEY!<1Z%5A3*Z8@BFAk z_`ugzU*OYj26e`&3?2}yIZ5vvHXWEy%!)(cU)Q7cbJ{XxGpBOS8w&U=wemBc?>`B{T-3XMiO9hqd2M9y;Rq$t^N}hP#DfQev#5A1LUSE zqUpF_no>nUM4G4)F;v7{2b#TY?UDwgk#L3#{fn39u&!Eu$@3rw)vYUXcIF_w`EM=X zlCvcfAFWGE?Do*a7dHi5PIP}@a(`pLG)RHz^9CkZ{SiXE!!euj^92u093K%I`L>eX zY`M69=%uL_|B&049GC_We}H4{!X1dc74>~Mwdc4M-Xpw8+ZDu)j^Zal%x@W*Z!Pzr zm+ugC_bzKgdFVp?k~;ufg1QMkEQQS%3FiP-LL+E_gs_L@N;~7QV`Rvu^78#MJs{}F zHRc2fX;yrBk0D%W4avZfE!K+NWv;Q*1OPFtz<1fv#WmdW(iX=DapJ^l!F!xcZ~g>u z6-;v8t)+#SnjUaiq17FJMhO9OOqJ?i zY2fZ>u><2Lh8I&ghK)gH&m?v=`GS#_dq=-BxM)cA(&qJRxBAUCP$ORum|H3;ayzDV z_RXs%^U$eyrKT<>swEukO5Y3di9rvUXM1By%JkOB_v`G-)vlKHMENP_YGQZJw$uRQ zYNbSyX|pd+sr)xxW_wlur}I_aqT@@26h9XT?X#kopKtU`BrV+i4i;e0CA1hbnJ7bDK`#jLb7!@2(au`NKS(e5u zme5vYD18Nw9Y`u_|H1av>~4tpQ8Cj%PZ+~y^+?rzKYU>VUDh-8?K{b+Z<~8Mpt|Jp z5_WTRW+L6yebjvIv;wGsMKL>L2NJG`A+qL#o(3y_0|06T{HW72JT%ErQxb({mP12o zhb9?Z*7DJ(u5tNF7YsBrj>|3Y-cSc~OUR8178AIO1Ai2YK~V^xd-ncs+jIA=$7FSB zojJbk(WU&HGhb0!8X+uGUY(Ep!y5G@nUAMysU--vuQkTLCSPA1wy8-|K0h744q7<% zlWRKF#ta|~GW7$tqvR#~4C2)eZJ_8K9q*FKxg zanqWABRnCr0dtUhbjR~93hMjHelCu*ru4bxn;4Ijj($e(-Phyy@n z-Z$d#8BaNq=da3!`CGkm+>n<0$&iFPk>iDaU=Mt_pMHHv$F%APE8?2pe434k=$bEg zCVJ0fGDAKw)6Ku#)OxMjtbyU*cr=Gn+wj|QyebwFZG6?k|2QC$$52&nxMMl>r$p;s zvisy!^U+a*x<^p`L$;`-##H1IBc183E|hI9gG8?2)J%qoXGIBV!L0knhq>5piQpjcu6mP*V!x=qgOz631p)nUX?A+*(}Nbp=`>Q zBD{XfgNy5{h+bS;S2Fj`HSbeTpS7#ytHEg+JAY~cu*>V28VTfGZUl%sq9P2djNod{V1Y}wZ%1Wl&+lfqa;4YwtM2SR)Qu& z1m3;O`rmFk{BC^6G2EfEX`LjrHLUQ!u=QX)&1qSJ>g)VTzNn`+ znV#13_W|w2_z(6I`>&8$1vrx^mUBE4>5BlRhhC>cjmi4E7>hwcm@D1l+h=qmn9M_} zzGJTAUwrLwsyu`g$?(7X&4ln_;Dd-aodp!)Yb!9x z#W;*9dTu0m1`I{9kiz|Dr=>W`(HR?s9SYpKYjD@QXsM#XhEw8E#E&nZ=#nb77d~* zre|4MDG0j(z1lCe#lYFXG~w zdqphicWPB5zIjF|cu_l(DgzO(sGy7TVb}I;ePx4Kt%+NR{k^d9+1n~`A-wjHU^~7! zxT9k^^zqLOdJ1)~fk^zLdN@Dsbf#VdMua zZ#3-eP-R)bn}0;{k_jU|NmrAvboEd}JxXTd)#qdG^dL^X8EGcC2-U&47Iw8EjvLO@ zINAhupSjDgW=TlPB`_wQpS76CJ*3{s@e06Q^{t!h&&fzRTU~fjtc|eHKiuCN@ADj2 znfSUoKUfDC9d)l-l!=rXzI>^%O)~Ljq?(vNNSmx-X)juZX&^a9^}cWB7wQLuCW516xIm&ajF@z&%b31$@1(^dJa(0QLMzl8S&GidC00L=M-%m(rLy&TX;8TTzp0( zO+B=pZmfd;V>O)tmO8&}(UlwX)v~><-D#GddK?twPO8C}=NR%U8j+59 zSZ!TCxK};4QF!ZlZeD3-L;h?1LHRuo8I)Vs^|rR|EwJ5fsv7b z(qvR<5E8D5-VSrs&_qrgqG`b-=C0STdef6ED!8P2|26=)-A^j4OF#3uXS)ucW?YS@ z4{3O}m&@!;9tu^f(E54HXp_{<;ueaD0Qc;^4QKJ^QJ^Td+wLx#bl1zUrRe5f>b}#S z`7UVGdBm;HemJ6W_GNdSNm=kMTz3btFR1hK1D?E>os8i8#K12T7|h6x%jN=6rBRXm z+V4KC#sk9)FIJ{~jibHpS+<@5(CgXqztwE?*2tH?Q~Psp-FZqS1uh z=t3Y67@*%Zj=S}k-kf2dCA~U7ggMaKu208*#DhlyOB}g&=h+R5JKYDF*SEJeI%dRH zflL(F_8Gf}N_F1@F{van!SmN<(g`}?Z2@3+y!h(kFw=JawkzoJ5IjN;ND zF7<_4yJ85Jr5nURar`*%PZJ~gj7sURcmiW%u*Cad5s^6ZV}dbBR%)*M%?HzgQ%2Fr zUV6`nmRC!+sgr%`wPy{tr_$oG)7|(SlgGiFnk>uc5$8q$o?3+3>N^!FM1Ik$8#SAH0$3s@ZAO?kcT+(%yX8?GAuZ>~0@0SyA9Fqu zwf*qSZ#&nCx%$6Cy;8##U+B(DEZ^+CJft-6KX0_oUSPUJZlhvWVl*YfqGTV zo_EShOPj3TSq%dFGhdtcPfg7ChfUG3iGIu-p(9^_e2>W@GeM*Hkxumx^viIL1*nY5 z%4drs#O7UPJ0fSC)Omil`^6bNbirbbozZY;!s<4oVbS||j=M`p(r4c-=aa*b zvhM7DT_b$51RQRYLKxrHSi9i=yWq;o%_L$nk!P0#%MI zvEw8Csn0QK^#b9zYe2B}Xf_!!+OVyjHnerU1)SN9QT1LxsfNZ5sMC{@FtjAwD`xI@ zVv*g0Jn1(?p=It#@8Fg0`^oUqjY_wt92gAe`bCjEYvGE;gqZ@L&a5~h*L^F)?CFX# zOi1Dr%B_e?aq$)siYU~}-lAiq2^4%Q9amZB6%Q8$A(qb%l4n$;l8*24~wGS-t0AS=TbMU)24}< zP2nlRs{3hMp?)HO`;4P2xsoPGnpL-e_N-K~Y6O|pbvlib`WAi}8bUpKM!)lrX9=pw znhMNX!ZRaesH|7LzG@n~NvX@_%KwD>@4ou)9mzxH66WmiT~8hl+4IDm#_SQJC1+C{SRgP_nIN$+Q~c-I4yWsoPXK${{oyN2!tkozs(Q& zE4cqK8v-0pKxmMh1Ox>HK?DIo zNqrtY^T)h;uWsF$x>a-Uotjm(s!ms}z0cRbwf3rg_Eu9AL<8L$Dn3kKU+Mlq=-xFU zT1t!}LbfjcevAPQzJ4xVo{WM#;$l2Pj2zDX{@xP2yn%s%JRaVH_6`9&UcOGeoG>+* z!2L*udso(hS}7`N>1gZ2pb(gvj<%Jq0aRBWvolHXf8@hO3=GKeew(*(i#{V;6SD2XcM-#k55qE;KlfS%Nyc3{{3yglF9ja|6Ae- za20W@a<6%y&NgsvI|Zhd=(v?ur2?UYKxmZ5pRKK(tnN1ENbp*}t^@*dks$0+WU!E; zBKSDb^5i&F{!aFe7+Tf$r+zV%U6 zlPW6xt1K}^B%GFDHDR_@VIdm+25K_~Jpm;aGs;NKJ2VA>t6mu<#tbxr0@cWEBC*mr zc@yp|dtzqKrUfo~_HpPJF0E|4R3{}6pQ?A)yAVPlEv+GhC3DPM8TafDi=N|LWehAw ziSY>T5%Slz-hW!Kw}7h~dat!wF`c|L?Z&nr_Za|yivblVcfo?hwZk|Z^q5*()M4Fg zmGG@pxjzz)kQogzZ#Bt*O1J5gU6R|7FuYDXHYOdn2*>1w9$43}dcTc5>-3vBsM>tVWROC7o-zWunJYyB*jLn8Vv=7d-C zLs}o8NZ}Y*?B++7-{Bg$kr=n6XXsZVq0+FP-oXfG4q|ys;VP_U~phOFy z%@e{l#a&yw>P#s}j9Owg2iF+MYYYc$98PKgfK&0V#5znTM-yv4pBTK<5)_V##43aU zGTSsrI3{Km#3~{v+3fPkzJ#HkDUo$GAzxvYYv76a9J#e78X*=gyWiq|&Z#_w)j7f@ zl|8*xo}mSu+QLY(X_v+4kjc2RZ0D+RcSl8wnnsyelC92&voe8ZipIDL7d%8}M3$n> zUTZ4wQftoGPBSJ);fili9V?bB2g))p z&ukrhFRfLg#Dst$kp~b5sR`F^ZOmMYj0s`ov|BNeZI#ZB&Kh z_n1RfDV!L&sB*^4B{tp9e2r~lE(zRrL&P|d@iFUBLLtRr7=@j#A!xQ!_27Z6t5rhr z>X<(n9l;ZRswTuQneFMmk}^f7$#CmkmmT<&nLH$24Vm&ee>Y!`u(8D_$R-WsQPOwJV(ZEpk!B$f+UN z?!T$x8KPpBN@Z=2IO)Lo!zngI>CZ@(Qy+fw117qDR4w#O`pCEUzwxJw-peDe6TFc8 z7$&>a1ylBIFYhoS#o6z z!PgB#I&x@GBY6VCfv%b6<1)BU2YPe9!IdS6K4bkbulV>U0(S_Ye?M?*|99VRWzLg}X1{5>;GdZ}zg$s9*_X$F6?c6c4b27Iw#auRDAwi1sz|t4360@a ztHN?rp3H^iWXw3LM`;Tws(roP$NPN-t!6f=4V(nr>O-IgMzTxJN zC_SxIXXlG(iYV9!u*AX&#_SUqm6G&r!MXqtv0UBg)Ytq=Gj-k+yJ0Fv$~Nlk%rR~u zX$iBMh9rr0&V`E$M8`@&Y)i)Z{`b6MYa2gLCx@)bE@{AClj>{RXl2X$?b7|0gjE6_ z$B>eU0_7<#NSmzXDB?8##KQ7krzE{%M4YACocXnk}|vsuua z_wRD?`(KQ@Hw>^owh-1ep21(;C(QQlv-Y%E?jEVdbfqJBa760ib1~%3=r1Nq z-U8lj@Jp@^PUG=>Gwv$8KJIZiq)(3XDsH%Ri)aG{#QLgVBPBCl6A4GkxNx}iV4MR5 zno$rR+o3n!aGYa)EVa~IbOdLH3`1fprtCD!(w+GG0BBVnofNAbf9oVnFi(9?v^>ky z?y=O2nyq&8G%FV?J*A3o51iFCFLP#682;5>aCTI|!tGgXlc4cOj21WInM$s)L6g*8 zlcHS3w9@BUuIyj6CA+uEy@P6bWV4dvdVc~coTy)0`pnQ|74BcUA75v1(o}mIEC*C^+O-zUNO~{Pd%N$ft&^Z{5rsAcf;+*dY9cfW$xF zv)-kOWMpF8$UGrRwnfz{xbgKY!X3pP`_MVz&c^)esFdzU-P#Qz0-2qSnQ$_aiv5tX zu+CBIRM7O*48qTr|4TI>KL@=$w9%w%#4|M!=eY?tr-FB0BL*x1I>`Aod8`*61#1a_Xlv$(N$N~$cgU;{-in$!|CdzS(;xms`US$ z9u9ttiKEubwsw?R9{C`GM8h6N?ChH8YoYWz0O4x+gg3+OkXgBH3M!3eL-lrd1K4-b zEU|Rp;^)UtQy*uAVdJ(snvXvdz%P_HP)bx|NFvcLWo6_;!oe8yqfg7^CNsUmL)a`8XU|C? z#?FN!j6q@<>T6iNYR7hf*$y+gGL-ofjf0+Q1!#HJ8D@5#6qMW*C&Vk)Ds`}On9!*V z)ChhrIMMh>IP!=xm`RK|P&Tu-qS!{kdqzma(+^*rV6si6?zaXRD=yi!llwLZ0^%j$BjSSCS~6j^-3Bn ze!PvdP5%;ng+Od@ResYG#JGiG|K#7*ZihBtNF9W~;k%eNTrxrwgaAjbeZbLHvmLu5 zZ_{CCW3zNbBdqfTs232hh$?gy3WANNLCzTuMIwna-a zRf!Fj>e_mpJI=`A0MZr+1b08k1SypV4wYP2(a8 zSV9q%hl&pX5ubTNIeCK=77g-ns6~PEr};9rzq<_~S=X_s4}{r53#R? zDaPJZIl|&s7(I3v=t2vO60X<|IJ|CcL1uM=fh->`^Auj9)5#o}A z2Ta6szIag%>b)}AeJ>tjBTiou&D{R1hm31JzXrW(;dH$5P{o+U@3MU2z&cj7i5{wd zZAce^8vhl`^-|r5Le?>nqNa_5Nxe-u_g!bnG$~Fu#huA@7;rq$FUa+a;mT@}q~^i#i=?i*IYVZ#5(lJ1fsGKfY08$fMVl%hgeRZl7~V z*lA1@3!-33V$D{-!|}J`zL)giK2P^>XRK(AOJ%`uU>BtOjt(Wu6mBgKXKj7YG;XpV zQXxS)rDn`bAotmw(dI3S|2pd`D51gMBmFtXiAIUYn+s7yp%YIp3>!I>Ui zx1m<}lvrJwKT|gn+q(TH6$)m-gvO)wn2($a0o$m!4@yTAI_r&9nXM~0)KQP|XKiRI z5neD1r#b<=2P6hL2Ut|LTAj;Bg~*aSV}F4;5k5Quq}rH8Ve(qTto_i%QAV6;IMcUL z+M_oY)TzU6zn;&T3HkNa%n;meTzV`$AI+(y4PQMnXiFmi*+*Iu9g^mgq&EuD8PFJe z6g(+X+CF~#o3_C3>i#_9yH}XV(XQwCbWB2Aza*e83cn!hT-+B|ZPYDAr(ldMpW8tN zMQe-Oxa#MWm>S+B4|sWO2ZNZ9!tIIe7=~i*;ofFnu3tHOt2v?LCbceCgl}hmBWqvZ zyLg;>Y*AYrz_jWC><+!Y{epAS9y3WZ?lw|Pgt6(Jt){;x5_q46V;DvxHi!sM^&M`Q zNi0d%Pp%A}tE}4n8vyWh1`O_U1YvYpj$BEPbW_JK>gISfFb9l9*wej%DbqtpneB^Qd@$|qWnAwGp81WMHz2z;g9uuu?^hHVN$^tfpUgkC z3Jt`DRSyBcN+;l`@Uw2_H8QK#9CU<>hEG2(%*GT|tl8DF$~fH~JS#S$gHSsWXYig# z)0eKGQ?R0~W?ao$*MJPX7Zm@*KVwhE>r_#7JGBTUm*)QR{9u{jB^i3xJGkR#b6%#Z#V+C=p><&AD2X`HHh4Nn zDV`Z;GYw2Cx}+epU0L#%fpwm zqta)Pq11V>-(Wzz$A+o3s6{CWHPRN~?TlRtJp<2Q(Rb`07VPAmb+zMJbPrE zk0#Ju9_{NC_Tp&t0~ue6>`I?LAq~ttYP@e?h-S@9sTMx1(hlJ^5iMDcf;zzQu4kbA z%gMs1GUiJ@`DOh3LqqGS5C*}{3wq;({oer;3|gEmTU2;jq=Kht3>?Em@edXL4A4Qr z^BAW=-_B{^SCD$L6SS(~{?$NkXNSS6 zdK1(@(WIMOJ>Ef_L{p-_dVWu!x#eRnRTi_JmZk}L$j+A%>BnDtVd)CH>JhDPx?YF1 za{XqIkz-Fu(H1mC3YSKYhWLe$OA9}j#i~=pN^A(ssa)P#EMKt-*)3C-qG%Wb*S!c=bsfcg95<~wz!jdaO)-DW%W{k-v3MZ4OS{>-|w z2z9t0iF4$ZI`c=UROOVX#wTqbhusEUQ4^zDYN`U=P~cOML=G;fs(KS3TUt*mG^W*&TJ!gH}Tc z6Z1WVXC?0PNVq`;zr#h#V0bzQz4Y3?q|DGS@w^(H>w6I3==(>`CQ^+@ot#*tc69mN z8;L&}rP;FH$iJr@{&?xx6K>OZVsL%d?KveBhy|RI!SKKXD>!)DPuJLmSkZN7Y|&|E7g=fmB7WD zKb7@AxcSRR;Vix2t5_;X++2RkuipY}Y6cE;KA46P)(;bs_&0n> zl+aEslQltL54EA?HB>K+=#Bx?GX2WQ+#jkOxLwZ}*OGKeZ^Z&Z#D#CM(_*%KDO1Tc zIVflgr%@LeEt}G0b*lu znfwiSSQDG@>*=L}W7|+bo1lBZ- zfGy9pAir~7`gaKHH$KtJ5L0Z={4NTw^P5SqsNI%9JuUh9>o}B_Q*86zPuaMklZp?} zUX-NRym|9QX*g=&ti$+($1a-cr*2qy&bp?Hy?VNyR3*z(-=D&&LmuWe9Ay$-zwge{ zc_)sMZ~)8s8Qc<*Kzn!h;fBTgM;&EPTgHPvZ5$F5K|G-f)9lU?u4PHTt*Rtl{F5R7 z6rJ@T$IZ=d!4(tLYpT6T;+^QnuZEVJ&PJE^U*wBXJ_?}}>F^m|l;kw@o$zH2!N+l8 zExdb2rFZDy{E|gmqi6k0i59Pn%}@JIu$Jo3q{pg0nI zS&hgp2MF#`E?WwIRL5jtHG4fBu!@aGhrYJ_0*#D6&H=?l7yijisX?R3_xF|Kf^9`h zZ9Jbfd!M?Y|HG7u)|L)8mo9%%UV+HW`MN^5pg}#=(yOOrX%dr1u51Q{?2USpgNr1z z)3`y*(~9YaQ>Np)-QhQ4zOI0?ZILn&Ww)|hwkN$C4VVnO>&K10o8bz)KG+4cHbF_* z|JSv;NVzn~m(a5|>QX9=!1dBMu-$=KUelZAQ*-gbFj2EG`V79-(JbJ* zWMUrj0{E{Nz6O84p}b@)@B$F7-|h^CDhA-Dm=r$}Z2Mjce8ow*v;KJTQ6FtF2&@=H zHJ0ZqZbFWPo2JP=YZw&3pwV2}ig`d#^Wwna;?PqU4Mb(g?doiN&}3kGMPagtWAOj+ zpyXt$f)eZFy#q1_%^#;Q`SdE6a^O!UaC9ci@QS!*0TNBl(B^_J2M2{{RgtqC)@x diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mode button long pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mode button long pressed.mp3 deleted file mode 100644 index 01c0353ced649de44d961d4d2ff5d685dfa1596a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12817 zcmeI2WmFu`pY8_@?n8heg9Z;CBr>=YAZT!RcL*6ExVr~;2>}8G3GPmS;O=fAL8mYC zyLWfby?g)r+ZTKG#h!niQ!_o))is}f>Z$5)ceShpFAC@(A>*jMeJlB}!S|3AL=`0= z0({0+t}YOFGiMho2YU!Fr;s2gAB5S`)zwk>*)tCh4^BHrUQ;u7P6ua;XDn*6YCI1| z(mZ6TH>w5_l8SGX-m0mJs>!}lGEi1mRetkU(%_Afg0`BnB=Y}nxvYxr0PR8w1>>Y#r<6TjiTbi=Ie*7rKJTD zcX0G_wz9Bvg@~FMIhxrTL8P4>+#DfqIYl|yA>2Yj{2Yj*AV#*fkpErJ+04bv+1<=k zP5h10LnG)9S;N7^$QHOT90sACA{lFeB#@CopjrH@ZP*@<=|Bpwt&qxRIZ;(SZbgLB zsbfm$AL(!lT!T&kU=to_;_n~IXn1|Tc1Iv|ZjHZsC3yS=Sa*c(05=_{uo41~kKxMr zx_BX|!Cl;7^!9gaWm?tS{u?h~HG`s}YRwwhkkNM)fuT&fQ|O_mo8j%+WJDkXS3Rd(EXmXQ!e2eJ?kKh4Da+Q5DHg3ZHyuV_dg*MxMZzBd4F;G|xRKn;fm;#lbyS@bFEVRFiI3zU=Hwzc0KZFg7`78i zEh5_c;1~gB3|c#de_Fy{M}4|`JgO`cz3xy{XVjYUtJM`hpVrY6R9vl}sj1#KeX&u` z-%A=zt?Wv{KuwH|ZkvlA@^J0|+~VP5o85m4(im||z{;g6^SId9vh%!KRGacp;D`da z1%Pj~_6W=QGQQQH7wA;}(48+~xC-X7LJMIvKaOH&WN@whBmA3#ak}1s1x&=PJ^rr4 z4?7KFH3ka!DF5wLtb*PFKbBC!FZ@&kN;9le+;rRRH@}x5z4Ijd}&a#nxGmt zZtv!=ff*zNQdKN&EC_B^8WbfFZFgI(rswvmuI|3t*0=w{T9Tng%%xj0Q}Iq$jLQw3 zBn-Gm2A6QkgeDNs2@`a)?~|@$Xw%woH`OP;87EU zAY2=%^P5&eM9wNy>Lf>+vV8o*FVSdNn&B&pM})W&k7cLM@)DLm+#ah5LL`WnHCH{h zyvB`V%A}gFif9yQl)wB@1c1Om_A{4ND84w{);FSg#gxHB(r!`rVxRZ~&cYOv+)(nl zNdp0=&UlBs3HOTip^%Iw1ru3d_(Q@Wn6^!Sg2KYEB;c6u!+gESxXyN?H zv)FfNaXa>8<=F>!ef7!i>T6R2tdL0e4wpHB(lPVCkcWRj}YRFZ|s?5jeIA%!U( z>^VdcIDSU{9iLbYN8CZC9DF+qFj9hw-f*>`G<-LDryWMG#u8?ZfUx3UmM8v`eM~P% ze*pKTUxy4Hyf)2<*|Fxy^|ruMtEd|N%AMX84(!0L<+UcwU%H*sjnrP)!3md$T}BX= z)26;yKgxQCzTDLIi6goS?0d`gnt|zRMsK9Kjb6i;)gqs9I%l6*1yoK`hC}Wan0$v! z$R9zlY*gq(@LjL+#NXiAZit7-a3=SD45rqvy5i;csVb1Y(%PMa+u5qyf`nLM6KoO} zHt?e~?JqYG6e|ya0FZl5sN_sV+gZ|_X<%InwwjdN6@e{GDp*geL=jCv3%uD>cS3ceWt~-N=6K?;zExBEh588t*VOzP>?OddiaGzj zeXQgUaAM8%V@wwSY<m;rQgHGsExd!nXk+Ke z#-0Pm1w626RcO3N@j3d&yN^fT(sY<=J*j*0V~fc_-RDfIXb9B%3h2YxXl$<>xmbA!73G) z$Pqh7+bb&+TP7beCrl^Amw1gbFFrMN4T(wsd*ReHBIoy5F~-i zB?rBP)Y8X95mMf*sFs{q$M9&iP z{A?cgqW%(vNp?p%P&hC!>vwH zV0sfqYs^(5v3mN2mDwtB;;cs<5wH9epMdJOYVCk_=m8WmU|Biz)ktY+{YR<&lS>gD zgXa2#eW!}swiVbIOq~dlASP7F z0jq6i+nIt$AA=X*jNegx2nJ8C^Q{-`bE8x_c1S(TmtEP7p zBt}9?$oJd)<2qu=J51BERs_+DH>cb@QLuaq;t6!=dy#-*oQSilV!bmI?3aIfiT)?n zne$CN)VMDIt=%~hi5G_NXNrqudWAv;iZ$dM#?$?R+;-;)u^9QtiNWOpnydqvwxbas z;AY6zkxSdOp~$#=s{+XF`^`wntTwm0A5#|lT`)TxaSsU;xTsxMO&O79p{QiYv(TA* z6ox)v+o~udt!0AOd2LnLNpz@vE&bpTYwHt0q$QF5LkPg zo3A+_s}exF`Jow|t36mWjy=feNJt<{5IQO@13C%-+&_#R>D-2BC=x!2;R3o0!g7Gb zFhwemo`W2UohcO*-xLC|#Ey(;eEf6-*d;Clfgple*)IHHOHq`TmU4#>@UIY8MtVNIW!P zQhFz?;5R@q+j>OU_$u1xv8pThc;-8$FX!^lO69@fxVLzGJs-uoiC zmbBGxI?0l2RCI3=IFL-O#hX^5uoBPa(<{T}kDFv(dG=!w20qJk5*>?GF$iq+|OWcDPM3 zjLs9Yc|7B#$&kk-2$`aFMyqw8Gg_3%uwz;w%d1brRx5&dDZZljKvC+}=;Lvl9_;d^C}ybJ;S? z$c1St+p2!;Mv&7x$w;fVrqHh|HRFZjy#m2*_Ay%-gQ_(!_@ucT2g)b|HGi3E>W^fL z+_vej{0jSY+L5~!s>uw-IkBE==XiFZK>^` zo?|Vdl95LkjO*veTNRCX`lFX0hE|~%4;L6R7oazMMR82onqo;Xk zYQtjgju$OtX~8@JNe#W7Y@S&r7VZ-i2AP$TKb?8MnigC=s7I6@^@LcuC5=Qa45^FRo?OtTsmEpo^)5G%+TXs6`-TxjJJFn|zFlv@0JI?Ed?OK24G z$n9m@i92i`kODSoF{Fq|psNMh_pjkML`-Y#IUqH|%@EYBN4&{ZIXTz4Q#_c>wSbDmIBBB0&;Iz**3!k&b+5A8hq+zlGE!wE>s+ z#nRtzsEfWdYUwH{PGjtslyc6zH^nV$iWM%!9R22aPSZNKGCi+Biz6)ZvNBRflFw}E zm%3VL=p)cqQpxvIrizK%azs&XFD^X`paGI1r5K@NyaM~)E0Z^L;|j_pkZuAD9xR=JGds{sbmx-{P7Y!=jT9#M1fmts-XqLRZ{zQj1 zP!rt0)a+w=c+#*_A>0AWO!)a&@|{hvbDrWH*q@Fa@?+4#Ya z`2{j-ew{h|wfU33`itnED=sB%9q(S~eWIL1_fWGb&nL7k=~%p>f9>uNH>y>PgZ5%1 z+Y;^B5efV0`l75gxUhLc%YWo@Qwie*ulb`>gm9763$K=vy-}BCCeA9sZlGlJF{%6` zz4Pgk={yU5%C_(PBO$t$vH@M)SSq-aD*iR%TOxYC<%H>!o%u>uk z`3bfCk+jNDQb?iS0?qA5g}d!jnej?8B?B!Ha5*%S>*J)IgG{cqQpQT*gYl$X(;QEn zjqNG%$XPvB#N?f{kz$$9m?fOVN7tsMSgC%N3}$as+}4OxzO`nQ=#4hxN^J>z?8D3Z z3IH1BIPGjhH@c(AkYl&;O9nqlj=nru0D5qf(YLf4Zc79Wn(-Z`K6^4Kq?=FL?U)vk zLxg@v^PmKh^I&{-&aygI^Vn)6xTX5& z$Zk&G%Ro?3kOGXnK_q%9)6)$AOqoZF?J)&ah=|I{!=182s;6l#&YY>gyM&ohnN3*b zbV7NiCL2enjrwxe$44Z_Rb!tkTa3h#)e)BKgwR{hYQ7Of=CA6oNa~!sx(Yu3wn$gN zPq%3Rtzkjk`9YkqxBS!YcOy5&7puElix$C*2KN!pWnWn4#sLlC!6U7!u~9aYGoD~p z5+|P*26!(`KfN0LTz7O9X`}O1crBVzoBNL09_Jb5hL3MgkK6Z?*Y_vj&)gSSICiSp zz`fHa8ydmZ=ACL7a3VOlXU~bD%tqP(LkKs{kEr@jAN2#6Uk!dm)iq=^Jv?;Y4Fbx z#%RZ{lOAUSo04MTcwA?$qP$^|qT$=}KKRl$I`+rA5VyCSpL^NdcPs76+=vO3({b?$ zWa==XtV9|M0M?K$C!b{s3zKSLdL}gjE*U~ebd)l{j9l{6GA2G2@ZGz4j-O_My`NR% zqR#yKF+9oAhzTon9g>Co)Ynr`N$63!j4Lp_N*WhOj6^zYvzJR#9^_BMCPF z;HfnwS0l5vWo6h<*vzHbsp;0yD_{47-lNOxF^<>5Q9cKhV9w3_%zjr2P2IB8ml!l;x}8#mQk<{c-!5I!~F+M(Wj!e3wGKQWIqX; zk8a8}f;6Ml-=?7=^+r(je5rQg{#(&Mt8s#Y^O`|oIRROTy z?UJkQ@>b#R**K;$nnd<2s2x82tbXzJ>x(;^6MbqQ_uHnmd!yDKq$#L+STS&EA~zn& zlSncsq0SmCp*PX?htO=W2rzhvV~vM>`g0(KFGFEvTk0(S_^h0=we$rm!k5;0b{A2F* z=TvgL{N6XI>Pe-y0!6No^BUM;Xex76_es3Z$44zn^}JJ{yRMSxAzGbu-(Q7Nl4xo) z=h-S+Hu>oHaEzM=hp`H);Jz*A(L=y3Qy&;_C40T~nV{j3(^%^L;z|+?aiz@tg-PJ` zc?B>ZHX%P`WRW-gVW)}4LXp1o8xCzH#!$`#)8)z2MQC0y;w4(3fyCkqk}qPjUN3!^ zS~gtMR?`iB&g#+X3(s)7O`nS$S>V3@4qiUJ5rk7NKe!R=2Vgvv@z!?soLvDWzzv{$#n9`ctVC2AwXSAq9PUxh+<9a%i zxAzJ16NRQ8v?D(fvj6|>G{)~mdu@*yO{CDUI&8VAI_lajwl)%s^g4-16Y^z-!I9x0 z7J1o^oelLSEOHt^A&%<#UE!d5X;+T&ZnPQ?h2bBt8EIGEsD|Brc^H?gbN$DO^MG1Y^4T)9$51Nf|`YiZ+b{zMNuT`5?XD)g+})-Qbs<%__ir&lw@^ z>f)bDL;IyfoGj*SwnUP4P&|wx?^S9FR-)C_qAT~4P?J>IsOsob-%?z#1o~Fu;dA76 z1l%sQh*C$JEHer_x;D&tygFCLDnUG*I3to&i&;XAn+>dWra-^S7fRk6_S8bV)ay+` z`C$9(1$ZoYA!L3m$l>)+k5E%kW2U7Kvc6^Dz2-x_1@x^v`1zqH0O7^C@M5vKKgDs+ zwGWPBF3&D>fl7&K763Q^%1t(AJZHKE&o(2dfpuFfGE0n|o416>-rp`~V7o;A2sq%S z$ho0jh9?LnN*i0480oPlNAM&!ZisS-m%OgT+H|UnO5EAf=F@E9-epC>kO)(y9L2;( zm5-|S%)j}8m~Za2ru0lk;M5-?`s0ytir2yTg@6LB!A#2CxUvfJNTKG7tzoXa4Xc~nf| zygWd3(PijC^UQj^Qn{uThV*j^|4!zyONg}cDv!YP{EPKF&BpF^4~AJYLj+ti4e#-k zey4=b_51tLr2bItZbrf&8e`T#s#S^42JpZ`m;TQlkaH|N3JP>QF3(8*{&e95c&Xy+ zdV4+CzBqldQN>fI#KhK>#R()-FdA{i9f~jpa@v3Z02|mSkCi=m-y*X8dN!roOKmbd zN3bsM0~6~fW9DZ_?JvBFtRf4vn!YBc4zzq=z)Qe6!>IDA;&5fW<+HrtR~>_EXSE zV`9o^!sCdKZW~E!a}?j*OU-gNr$6y3PY30bDJP1v5z-TUIm++GNE+jPxIP#TPt&PA zM$6(sd-u{?Z$FSdz7cbtcR0U+eHeaF{9y&SE35}z{4`fI${__qHEu3i%kj0l7WUHk z6}V6ym8+8{*>ByfdWNG(1>a%iL29s#$q!}K1dE#Lg2lrhlfAO{O>v9nJg@N2B_D5@ za^aP`KN=HCjDCxe|BaQoW6OzudMMgbLA48SP@-r^;|E7%UIz{i1Vk1>hY)U_W*F-_ ziz~#U5xm{6MIYfPtt=|~Jq0K&|2!;({DUU1ayL3VT?f_wJrAR69DQ4C zUdHN{KZy2@yJxfvkd-Tvw|ZIQc%3<0hSPrw{#H^mP_k++xOTBZIA*u-{+#Jk z5lNo70&X~Nz;N{7k$uz5TsR|!O<1%hE5A0jP$q=`VWrS;_<*{F^yr~iUm1h(qT3#B zrQkOJAUVzKu0iT97}tSK1V()nPN;((|8J6&{Y$D`IF|-iuY-eFTAnwJ9BI~PA|Wr- zm(9OB!p!Ih8!H#|5to`J!$f1N{+TwNTKO_!#oHiBZjd^VL}EU9fXzHDL#il9%EZ8h zZb*XDnkreHjZ6!jg26C1kGUHm+&z6DRt0HC;IzCFaBFctUP^x$S`J*Y(v@nAIt>v~ z_pv-g54sG7r%_l;M-4Xl9u6H9F?Qa?rrAtW{iFfbm6MN9Rq6Z_2zFfbFe{GTWXxZz zz^6<)$cb3fko{d*u5DwJ}QXtPsipY-*%G^|^jzPPPmHZlfs|1m!N|$Kc{3H`@MLRX=M< zepPFdN>2^>t~qAuw9v1j0;zJv*&jCQ;kM#=K%IH52b*@hvfPbmH*0uWcvz~hGU`wx zsJm|Y?BbJlBHZDrMeR>UZ+JMTxEj6EUQ^{L@G3cT*G472Z+gMP8P{-p^?e96)pN0Y z3P2-`$&8skvzsRgyq&4B9?#X5-FC%o9!*`4P{qQGIM98vS3JKmI&c(i}brI ztB=gmA1;^q_`-22Ve_f5$?(VEryB2$j&?!%s5zNaWo4xazJ7zHDv&5vUbnKoNJC!B z;l9m2@50~w977|wQM9x+l{~o#A+sdO)@OEV!x|DZrSf)aLLBhl7iGiFa@)6&PPTM5 zlbT=^S#J5lbuHE5!a{^_OVqdM2h`lsieWVm0Z@7cL$i$TRMUv$jv0Th7ia5yI^LUs z7R3)EE3?+dG4c$YUz{i3m;LL|AYE#JAAYL0-PdO2CqmK!eB4*=4i4(CdrSJsCg^CDrr@^I`2=?UrmkQGFy~t^bMjlKhc)<$PVF*N zDLdisNjrb87LR+46@Lq{j~=%Uif`yNzi5$h^-We9dra`%Z#9u`60fDlan~Fq-X%ZS zaCWm=Ui_GRLV%vFRMROVqC=VeDsZic-9jQY)|y;Z2j@38u~ViTC0)!cSzMlsoCK-i zbRU|u;KL)|2eBx?Gq^OPk<&Do8 zO^xsO?w+~#dOBRL++V9%Vv>gu%D{d2{nBe6;L63|uWJ_| zVTv_skUEY6WZ#WAq!pyr**jM`IA}R9wTE*)ypp34DoNK;t|(cA#c;du?GLNiRzavH zJf5-JS=MTM?!;7g(KK{eu&cU*>x~f+r0M78tfi6%}HUrc?zxjj^?mex| z=S+hEDAFI*Yo>4ovLi=3kdq-^o!uP+6IOgslrC3t7uMILl1xV;oS~PR_v-47g#7N{ ztRAw}Vn~lDR!Hx?y8IsZCYj2bL@=_oV(z}5^kH9CK_SJ_U^(1F{p7$XLA6jlL;b!i z@ugS=SDw0&FH=AF^Cwd&$|NSU8R`bB#^0F^Vc=(fP#f%uQe|_^5?QHWmroIJ!Bi&J zQLQq;v^d(-Ozq4K7g4X_Ke5V=T2)T)RqvxT(7DP+f{3BAnplj{3EYQ9@{z3nIvV)? zMVD_DKaQ9Rn363RHz4QG$-~ z-;n;pMa=)Qorqbk58U{Jyp>Eb;O|=fZ-zq%=Kuns$UM9S2Kqa;e_M0@oAuwnZRkH& z;eQU?e{-+?^+40{KijSU&2azh)&HFP|9vgQMDovG{r9^3ZOK0^_qP)Lg9`t&+&>WJ h?~4CvxxZ8BAMO9A<^GW}e^dTH$8vvjqW|T){}*kn&W`{9 diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mode button pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Mode button pressed.mp3 deleted file mode 100644 index fc565087e42566a78340304755a362d96d7f5514..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11406 zcmeI22T)UA`{zS|fb=dPB~$@vp(sJn(2La2d#|EM2N6Q=(tGbs0Rce)DT09XE=Z9g zy(=m`cawK#_MO?;cYpit&b;%Vo!^;xl9O}Kx%r&${ho85xrvIrC@u(7z$CglItrMI z7$($Y)D@t2#jKq?J)qup?jBCAPobiMa0x*%D37D3=QBwmAs-(f!6(l|ZSA}TUELjo zcy(2DMKB{-F`=l5w2)U&*VNF_Mat-^Xlht!=^?c=brdW#HPnoBwG?2OPK20n_p^E` zBJx;QMokv;i47Anaxz*9YBCmbnwSCq(@AtxbQN@s6p)y1_?Qq8hTW6XR9DATA7aAL z&=4f&`pnPW$-&VRDq~~y%+AFMs^sqK^$e;bC?m)Zg~8$C0@zVdD;F2&fA8mR=V9mW zZD*@1r>TKC2?P`Rt~ORKz=`EB2>%$z+7KiU27^Fz8Da~#_;`$}r0@xi z(IPh`i^PlQfzd*`j904->ouW5EK8zB|vCB`!1A|@{%3oAQy9-d*f|C{{uI?D9Ybj95;p9&%k8t zLAGI#*W!4xpsrwEGCwMA(_#%W6|n+f6H;L`t501UL?8jIYG(53z6Ow9V;hkB9;1k%c-a7zO&~KMi?ci&>Ui-lT9G$;sK=jF8 z6?VYU_6x%BWLd(~Y(&USDKpj_XIMW$e;j)p)GZtjaUjt)-2Z@;?q);er_2Y3Is3(1 zi0{k;Y>>R$DLN%LiYP2Ik2x~q3eax}i3m2>o<1pilboqy*wf`^RVFl1>Rc@sroBrj z%M@yC0RYtr?pcU`D90X(p0^m_!G+;?zXC4rJFnrH9Qn~ZQ_6=jfOyi&(E$1?)phs@ zJhPl?C-7M;Em!#JF*(KRK8hZ?b!YElZ+A5{@nvc z;1U4dvpvOHE`UqNeEx2?R^X=+dCL`AVJG}ZKKsL${9K%#ji-`-1h{6JEqH0EU`FG{ zAA^XqpiX0;kkCi(kM#pr20RxdUW@WYw(gBb1@#6mHGED0Yaui~{3^$tv!AaDZ_|~~ zg^~8H{~DOZv7kc|!HA%w`B@0uRQ&Bt-G<)Fv! zY7kWTd*=MQ6P(Ijn^}+Mz(7Szd{`QvmA4JOym&xKI&o8F`bTlfx4_FoT?wc>^*4hR zpAElp>x62>wzG0pHCC-Rr|JL@7RLX>V+BDjhjs~wZCkeGv{87nXnL|seT3%aPDp=O zS=*|Qh127@0t*7D9F-=ad&W;4X!?=~^ZQ76$wdl?F zN!qDmC$Kazo1tGY)X`Z0aRr+fB|(nepCm%NQ5;7&XT<_)0bgCPcv-lEihftG$_%i8({pD$&3usj_N zcjUyvsY6dTck=zhE~{OAoRCq9{BHV3z@Ijw!_Os5P+00G0|{=$Mgt8Ml=3bTY7H&R z@Zm3{iX{oM3jUbKXF1{xvK0{9T0qfJyzYz94bLL?;&9vI@@uK&5eSK{_~m#MJk`%F zMK=jtSG^swz<6zj>&C}bUtyh6U&Hcx$eA~X3mVu$oj)?1vX}Py$v)C}@&rw}MC~zx zwVV;l$=X4_G2~loXP!WO9c{p+@Iy}Svstr|woVRxYd(h(u9?DJ9&OMo)@l+4udwth zFr|1b#W$-mH;Q(%nxkL~q3uYY`@^}g-Gm#4znUt(y~xyt?o>5y?Oo2*U6!UKO4<<9 zc-)~S$TE6!5zDxY0R(`epOhNz%xvA2ZMhcCRkTi1syo8{ZWZ!0iQ#n67Pap6c&u

Ch!Z_1D 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 HM{55KPD_fT diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Self test ready mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Self test ready mode.mp3 deleted file mode 100644 index 0b3a9c1be3c3aa24d8b929b709f8d6f14823bf22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12660 zcmeI2bx>PhyYF!;Eki*H_+g;+xlh?0b^SyKzva|Q)d*$i)gcGa| z7JN99;i0PN=vgW$YwJAI2kXg$)ped(>Kf?j>gX$5>O9jj0qZIYJaoc&sGk1TZi0fY zV0kTthfjsOg#U06eRZ%h*hE?Hp&RBy733EXRn*beerU=*RAXaf z6vbEW{+`Z`PToLyTWfdw7uG;k&sRR~Kz%-WJ|3WexVQ)}@+_eBixXW4EDCRuRovmz#thcstOk=}1>N<|c- zyx;eneLCme>7#Rf6O7^~yZ7m*d(E;5cBZ#VKQ;rJp;+eM^5(S!hzGQwIp^Ae!o_V zlb4JZb&wyl!h2)U?@T`YT8Hxa_oJgZ$W%{%`eB&tgmm9Q>1TsMaR1N$cRLofk zZxp?^fkg^lfgy*kbB<&jhnpxiT`Lu8+|G7T+ z3!YPiV&uVAs68uFx+PIgVOd0%32*mu5rLq!Zr`A7C@|YkvX3$Jr$clVKGJe2qF_Mt zrO-<3en8$nhfbv8qL}a3xlHT3stYV&m7PAO{e@SUMmbDdn?#Vgi66+Amw31mQED5O z9Tc7fQ)I185T^l1(NrktK-#JqbpJrA=L^KMHcj z+xH4AU>sJkX?7<8hkVMB##j7CZgQqmT8?vv7QuXMFBo|uZ}m~?l8XZ=oB}Ht>jyn` z^kf(%j%i}4#!|3aToJ~vP*zwVf~afDV`(?q)HDB9=46Fb7o7Ykk`_zbHFb3Ut3|8x zmDd-g{XkrNp2Jgmyb((=$Vdhwn*c>zCa*7*C#U*P2?Lbe9y6CCekv>5coZxivI7np zTSI0$;Lol?R#j1D&d&KXzg8DsQ8zNv)bHPIpfnEk(m%5`hu!D}TT+p5QtW|IOB|0e z8+yaCP1QX-ChT^m$+Qc2%APmqUTJYB#!fLv8$pXNp3IlaT(xfQC1*WZ+s%^NWzfUi z>&POt2?dS6kAT+kDv#$>b+67pZL_d{f9q6V{|Rz!AJuH$*MqfsNiwwzj1-bFs*upS$UmBge{Thq|G_kASzqYaHcnqsk>Fl+JW>|!JwA1nIO3|l|3 z|4Y{5)y46hc(jo7b>;cn-FqgOWLr3k*@pWcF>hB*46E;T(-MUj(4Q4s4EVW`uo~jMHA;$$B~xf0(KGJwE8O{ zKyk?@dFF?g=2u&KBGv2_#T+u?v*w!tHmHr*^o6m8bswc)d%JLdU#J*=tK6UXDXd+P z8hn3weEAxbxfQ068fFD&;2Kvv*1)+U zX4`r#k8(z9noe=ZotZ%cUMdiAeohrs)2;NvN_eDs_w~BDe}djTQn;sdQiNxjAnj8~ zKy1?p=T2(U8N+=KVqJASXP2+DV+=4%)ScJtQ2e}LTYc@wo{WetBJT6=d(EX6cf8*c zV!d$ocyBpiN-((yuBy&gw{qBL(Kks!;Q_m~>qki(A@BSge__g&O=})2auEbLemf#( z?E9W_aw+~&128#BVX#1Es%s?0M_%jlj*k=nYV-|F;!)5m#07ac5)Q~^xc?=7&m?_AO!Qn84D^gfK(9{Cs7R6hgyYb5^R zpl+K}qW@xDIIv&BXxhsBL-OqcRtmoNyjVZIfhRPcWwSWW;_joc2+g!IuS*=$W|#ps zf&Qb80T2P)CZqE{Fxbd71!ELon+K_=RxH2AFTF7#5YhN7FJFX&v!N??+5Y8<2b&?m z42>4E&E`;!#>TE#=Z{ruT>J89PUVH@pJI^xEfxfi{oo4h=LU!Bv}c}Ctctmm4nD#U ztuhB2B;3@M1#&b+$K?Z>(-fl`4)7u0v=Kj!+gsg#g%m=>RxP6t2;R3&(`9$}FG|~W z8G&-j0%geM@s5*G#j2o{?*>O@SBu9X+KR|duCw0i_Tyk<6k~-lD9j36&JkFATo_rj1|=np+Wg5>gFN$e)JWk{fcSu~zIrO8OkDmiwv{I0 zH6NS1R7|8(>LoFCTbig(yu9@Dh`(>wp>fo`5D$iHzHL+^l1#b6*nOW?{iocE)m77i z3{n{0|Cymord#Zs4s710Xb5*iNCYU!PB-Q$$rRJ@-pFUKShM{=O=k;YP%d*NK~X1r zEM$g}?Mw>lPiT!-K)X!W&c2zt{VLb?0#I+^6C5FangfcoiE;gA}y&|dZ zm$Vi~ql_oJro%dNo+j%VbZ=)S;#LUdnnUsTXMIt=z_6stK8!y(`|(LFWegQ1^$MIh zF%7mNesiK};8n~6IW&02GOZ=niZ3F*>jG*Y)_hssj)ZGsn7^HD5|%Btt1%u+#8C*hc!$zCCcxYuYl@7ZuJ-C ze?W9u8z&1nH4oLav1dZchG^iqHiMk*X=y|zs})HdB2D)un) zeg7H%a_VUG&p3~pJBOD<-W`0}(S<0jy~>6SHo!X=cCK9r`G4sVx3MJMB8MCTF^ve8 zK?Jrp6erEX%^&q&u!uP3kVX>qrDWF!_aG2^h%=_Yz_&pZ ze3YZ=XKBf~ck|?g1~F=GGI5bunI&TE}+2f113Pr+|k zn3x3-eD;|;3}6$>-{HnsgWE?s^E35vX*}Z*c??rI^GrJzp;eJ@VYrlR9pfdLmfVNq zBATWfb48eL3Yi=>ZX%8{N4RFCZTZNk7BP(fIz(K0xVhBXut6^Fx-AN*qxpRfTc`wx#ioX9ww98 zCX6{Ay~s&w#m=!!?3-rB>ZVs}E$UgfHEQazvwGoAAyb^c>9I9hsjVL@FkKZNn`be5 z;3?{sk27CTF1JN1^Tg!w)pa|t2y?EY%0AC4Mx~ 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 b)_-aW{+H$cmia#=+&}e1^7n80uW9`o&HvZW diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button long pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button long pressed.mp3 deleted file mode 100644 index 1562ae99d1ddfe60f5d7ee24f212df27f638c8ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13443 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 diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button pressed.mp3 deleted file mode 100644 index a4348bde7185277a28591fd42d805bb2a3411d24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12033 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 Xf0rBUe=PTR5B&Q?_3z*5U(@<8fhmVx diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button test mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start button test mode.mp3 deleted file mode 100644 index 9bf71e9c61aaba19b4c54a407ac26492848500e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13600 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 O;{QmvzZd)W?EM#DM8&)S diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start mic test mode.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start mic test mode.mp3 deleted file mode 100644 index fca8044fca8d469c8bfe7c27c49149eb16fca457..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13287 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 diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start recording.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/Start recording.mp3 deleted file mode 100644 index 39d336c9123a633c15ed568dc776b4c6bb0dc1ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9839 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 diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/test/User button pressed.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/test/User button pressed.mp3 deleted file mode 100644 index f4e19d0adf40da874c09328cbc70ac81100ca411..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12190 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 diff --git a/humanoid_robot_intelligence_control_system_demo/launch/face_detection.launch b/humanoid_robot_intelligence_control_system_demo/launch/face_detection.launch deleted file mode 100644 index 068d79e..0000000 --- a/humanoid_robot_intelligence_control_system_demo/launch/face_detection.launch +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/humanoid_robot_intelligence_control_system_demo/list/action_script.yaml b/humanoid_robot_intelligence_control_system_demo/list/action_script.yaml deleted file mode 100644 index 65c9e58..0000000 --- a/humanoid_robot_intelligence_control_system_demo/list/action_script.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# combination action page number and mp3 file path -action_and_sound: - 4 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Thank you.mp3" - 41: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Introduction.mp3" - 24: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Wow.mp3" - 23: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Yes go.mp3" - 15: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Sit down.mp3" - 1: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Stand up.mp3" - 54: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Clap please.mp3" - 27: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3" - 38: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Bye bye.mp3" -# 101 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3" - 110 : "" - 111 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro01.mp3" - 115 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro02.mp3" - 118 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Intro03.mp3" - -# play list -prev_default: [4, 41, 24, 23, 15, 1, 54, 27, 38] -default: [4, 110, 111, 115, 118, 24, 54, 27, 38] - -# example of play list -#certification: [101] diff --git a/humanoid_robot_intelligence_control_system_demo/list/action_script_bk.yaml b/humanoid_robot_intelligence_control_system_demo/list/action_script_bk.yaml deleted file mode 100644 index 67c1389..0000000 --- a/humanoid_robot_intelligence_control_system_demo/list/action_script_bk.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# combination action page number and mp3 file path -action_and_sound: - 4 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Thank you.mp3" - 41: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Introduction.mp3" - 24: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Wow.mp3" - 23: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Yes go.mp3" - 15: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Sit down.mp3" - 1: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Stand up.mp3" - 54: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Clap please.mp3" - 27: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3" - 38: "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Bye bye.mp3" - 101 : "/home/humanoid_robot_intelligence_control_system/catkin_ws/src/ROBOTIS-HUMANOID_ROBOT/ROBOTIS-HUMANOID_ROBOT-Demo/humanoid_robot_intelligence_control_system_demo/data/mp3/Oops.mp3" - -# play list -default: [4, 41, 24, 23, 15, 1, 54, 27, 38] - -# example of play list -certificatino: [101] diff --git a/humanoid_robot_intelligence_control_system_demo/src/action/action_demo.cpp b/humanoid_robot_intelligence_control_system_demo/src/action/action_demo.cpp deleted file mode 100644 index dcdec9f..0000000 --- a/humanoid_robot_intelligence_control_system_demo/src/action/action_demo.cpp +++ /dev/null @@ -1,346 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include "humanoid_robot_intelligence_control_system_demo/action_demo.h" - -namespace humanoid_robot_intelligence_control_system_op { - -ActionDemo::ActionDemo() - : SPIN_RATE(30), DEBUG_PRINT(false), play_index_(0), - play_status_(StopAction) { - enable_ = false; - - ros::NodeHandle nh(ros::this_node::getName()); - - std::string default_path = - ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/list/action_script.yaml"; - script_path_ = nh.param("action_script", default_path); - - std::string default_play_list = "default"; - play_list_name_ = - nh.param("action_script_play_list", default_play_list); - - demo_command_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/demo_command", 1, - &ActionDemo::demoCommandCallback, this); - - parseActionScript(script_path_); - - boost::thread queue_thread = - boost::thread(boost::bind(&ActionDemo::callbackThread, this)); - boost::thread process_thread = - boost::thread(boost::bind(&ActionDemo::processThread, this)); -} - -ActionDemo::~ActionDemo() {} - -void ActionDemo::setDemoEnable() { - setModuleToDemo("action_module"); - - enable_ = true; - - ROS_INFO_COND(DEBUG_PRINT, "Start ActionScript Demo"); - - playAction(InitPose); - - startProcess(play_list_name_); -} - -void ActionDemo::setDemoDisable() { - stopProcess(); - - enable_ = false; - ROS_WARN("Set Action demo disable"); - play_list_.resize(0); -} - -void ActionDemo::process() { - switch (play_status_) { - case PlayAction: { - if (play_list_.size() == 0) { - ROS_WARN("Play List is empty."); - return; - } - - // action is not running - if (isActionRunning() == false) { - // play - bool result_play = playActionWithSound(play_list_.at(play_index_)); - - ROS_INFO_COND(!result_play, "Fail to play action script."); - - // add play index - int index_to_play = (play_index_ + 1) % play_list_.size(); - play_index_ = index_to_play; - } else { - // wait - return; - } - break; - } - - case PauseAction: { - stopMP3(); - brakeAction(); - - play_status_ = ReadyAction; - - break; - } - - case StopAction: { - stopMP3(); - stopAction(); - - play_status_ = ReadyAction; - - break; - } - - default: - break; - } -} - -void ActionDemo::startProcess(const std::string &set_name) { - parseActionScriptSetName(script_path_, set_name); - - play_status_ = PlayAction; -} - -void ActionDemo::resumeProcess() { play_status_ = PlayAction; } - -void ActionDemo::pauseProcess() { play_status_ = PauseAction; } - -void ActionDemo::stopProcess() { - play_index_ = 0; - play_status_ = StopAction; -} - -void ActionDemo::processThread() { - // set node loop rate - ros::Rate loop_rate(SPIN_RATE); - - // node loop - while (ros::ok()) { - if (enable_ == true) - process(); - - // relax to fit output rate - loop_rate.sleep(); - } -} - -void ActionDemo::callbackThread() { - ros::NodeHandle nh(ros::this_node::getName()); - - // subscriber & publisher - module_control_pub_ = - nh.advertise("/humanoid_robot_intelligence_control_system/enable_ctrl_module", 0); - motion_index_pub_ = - nh.advertise("/humanoid_robot_intelligence_control_system/action/page_num", 0); - play_sound_pub_ = nh.advertise("/play_sound_file", 0); - - buttuon_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, - &ActionDemo::buttonHandlerCallback, this); - - is_running_client_ = - nh.serviceClient( - "/humanoid_robot_intelligence_control_system/action/is_running"); - set_joint_module_client_ = - nh.serviceClient( - "/humanoid_robot_intelligence_control_system/set_present_ctrl_modules"); - - while (nh.ok()) { - ros::spinOnce(); - - usleep(1000); - } -} - -void ActionDemo::parseActionScript(const std::string &path) { - YAML::Node doc; - - try { - // load yaml - doc = YAML::LoadFile(path.c_str()); - } catch (const std::exception &e) { - ROS_ERROR_STREAM("Fail to load action script yaml. - " << e.what()); - ROS_ERROR_STREAM("Script Path : " << path); - return; - } - - // parse action_sound table - YAML::Node sub_node = doc["action_and_sound"]; - for (YAML::iterator yaml_it = sub_node.begin(); yaml_it != sub_node.end(); - ++yaml_it) { - int action_index = yaml_it->first.as(); - std::string mp3_path = yaml_it->second.as(); - - action_sound_table_[action_index] = mp3_path; - } - - // default action set - if (doc["default"]) - play_list_ = doc["default"].as>(); -} - -bool ActionDemo::parseActionScriptSetName(const std::string &path, - const std::string &set_name) { - - YAML::Node doc; - - try { - // load yaml - doc = YAML::LoadFile(path.c_str()); - } catch (const std::exception &e) { - ROS_ERROR("Fail to load yaml."); - return false; - } - - // parse action_sound table - if (doc[set_name]) { - play_list_ = doc[set_name].as>(); - return true; - } else - return false; -} - -bool ActionDemo::playActionWithSound(int motion_index) { - std::map::iterator map_it = - action_sound_table_.find(motion_index); - if (map_it == action_sound_table_.end()) - return false; - - playAction(motion_index); - playMP3(map_it->second); - - ROS_INFO_STREAM_COND(DEBUG_PRINT, - "action : " << motion_index - << ", mp3 path : " << map_it->second); - - return true; -} - -void ActionDemo::playMP3(std::string &path) { - std_msgs::String sound_msg; - sound_msg.data = path; - - play_sound_pub_.publish(sound_msg); -} - -void ActionDemo::stopMP3() { - std_msgs::String sound_msg; - sound_msg.data = ""; - - play_sound_pub_.publish(sound_msg); -} - -void ActionDemo::playAction(int motion_index) { - std_msgs::Int32 motion_msg; - motion_msg.data = motion_index; - - motion_index_pub_.publish(motion_msg); -} - -void ActionDemo::stopAction() { - std_msgs::Int32 motion_msg; - motion_msg.data = StopActionCommand; - - motion_index_pub_.publish(motion_msg); -} - -void ActionDemo::brakeAction() { - std_msgs::Int32 motion_msg; - motion_msg.data = BrakeActionCommand; - - motion_index_pub_.publish(motion_msg); -} - -// check running of action -bool ActionDemo::isActionRunning() { - humanoid_robot_intelligence_control_system_action_module_msgs::IsRunning is_running_srv; - - if (is_running_client_.call(is_running_srv) == false) { - ROS_ERROR("Failed to get action status"); - return true; - } else { - if (is_running_srv.response.is_running == true) { - return true; - } - } - - return false; -} - -void ActionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { - if (enable_ == false) - return; - - if (msg->data == "start") { - switch (play_status_) { - case PlayAction: { - pauseProcess(); - break; - } - - case PauseAction: { - resumeProcess(); - break; - } - - case StopAction: { - resumeProcess(); - break; - } - - default: - break; - } - } else if (msg->data == "mode") { - } -} - -void ActionDemo::setModuleToDemo(const std::string &module_name) { - callServiceSettingModule(module_name); - ROS_INFO_STREAM("enable module : " << module_name); -} - -void ActionDemo::callServiceSettingModule(const std::string &module_name) { - humanoid_robot_intelligence_control_system_controller_msgs::SetModule set_module_srv; - set_module_srv.request.module_name = module_name; - - if (set_joint_module_client_.call(set_module_srv) == false) { - ROS_ERROR("Failed to set module"); - return; - } - - return; -} - -void ActionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) { - if (enable_ == false) - return; - - if (msg->data == "start") { - resumeProcess(); - } else if (msg->data == "stop") { - pauseProcess(); - } -} - -} /* namespace humanoid_robot_intelligence_control_system_op */ From f09ffa1b2061fcde99b756f54fcff9c80409d802 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 23 Jul 2024 12:52:27 -0400 Subject: [PATCH 156/172] latest pushes --- .../launch/face_follower.launch.py | 28 ++-- .../launch/object_follower.launch.py | 30 ++-- .../launch/object_tracker.launch.py | 32 ++-- .../src/face_follower.py | 143 +++++++++++++++--- 4 files changed, 168 insertions(+), 65 deletions(-) diff --git a/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py index 051f56a..917e490 100644 --- a/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py +++ b/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py @@ -13,9 +13,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -#!/usr/bin/env python3 - -#!/usr/bin/env python3 import os import sys @@ -28,7 +25,7 @@ def ros1_launch_description(): args = sys.argv[1:] # Construct the ROS 1 launch command - roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_object_detector", "object_follow.launch"] + args + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "face_follow.launch"] + args roslaunch_command.extend([ "usb_cam", "usb_cam_node", "name:=camera", @@ -41,21 +38,22 @@ def ros1_launch_description(): ]) roslaunch_command.extend([ - "humanoid_robot_intelligence_control_system_object_detector", "object_detection_processor.py", "name:=object_detection_processor_node" + "humanoid_robot_intelligence_control_system_face_detector", "face_detection_processor.py", "name:=face_detection_processor_node" ]) roslaunch_command.extend([ - "humanoid_robot_intelligence_control_system_object_detector", "object_follower.py", "name:=object_follower_node" + "humanoid_robot_intelligence_control_system_configure", "face_follower.py", "name:=face_follower_node" ]) roslaunch_command.extend([ "rviz", "rviz", "name:=rviz", - "args:=-d $(find humanoid_robot_intelligence_control_system_object_detector)/rviz/object_follow_visualization.rviz" + "args:=-d $(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz" ]) # Execute the launch command subprocess.call(roslaunch_command) + def ros2_launch_description(): nodes_to_launch = [] @@ -75,17 +73,17 @@ def ros2_launch_description(): )) nodes_to_launch.append(Node( - package='humanoid_robot_intelligence_control_system_object_detector', - executable='object_detection_processor.py', - name='object_detection_processor_node', + package='humanoid_robot_intelligence_control_system_face_detector', + executable='face_detection_processor.py', + name='face_detection_processor_node', output='screen', - parameters=[{'yaml_path': '$(find humanoid_robot_intelligence_control_system_object_detector)/config/object_detection_params.yaml'}] + parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/face_detection_params.yaml'}] )) nodes_to_launch.append(Node( - package='humanoid_robot_intelligence_control_system_object_detector', - executable='object_follower.py', - name='object_follower_node', + package='humanoid_robot_intelligence_control_system_configure', + executable='face_follower.py', + name='face_follower_node', output='screen', parameters=[{ 'p_gain': 0.4, @@ -98,7 +96,7 @@ def ros2_launch_description(): package='rviz2', executable='rviz2', name='rviz', - arguments=['-d', '$(find humanoid_robot_intelligence_control_system_object_detector)/rviz/object_follow_visualization.rviz'] + arguments=['-d', '$(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz'] )) return LaunchDescription(nodes_to_launch) diff --git a/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py index e61d87a..dba557d 100644 --- a/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py +++ b/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py @@ -13,20 +13,19 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . + import os import sys import subprocess from launch import LaunchDescription from launch_ros.actions import Node -from launch.actions import DeclareLaunchArgument -from launch.substitutions import LaunchConfiguration def ros1_launch_description(): # Get command-line arguments args = sys.argv[1:] # Construct the ROS 1 launch command - roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_object_detector", "object_detector_processor.launch"] + args + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "object_follow.launch"] + args roslaunch_command.extend([ "usb_cam", "usb_cam_node", "name:=camera", @@ -39,11 +38,11 @@ def ros1_launch_description(): ]) roslaunch_command.extend([ - "ros_web_api_bellande_2d_computer_vision", "bellande_2d_computer_vision_object_detection.py", "name:=object_detection_node" + "humanoid_robot_intelligence_control_system_object_detector", "object_detection_processor.py", "name:=object_detection_processor_node" ]) roslaunch_command.extend([ - "humanoid_robot_intelligence_control_system_ball_detector", "object_detection_processor.py", "name:=object_detection_processor_node" + "humanoid_robot_intelligence_control_system_configure", "object_follower.py", "name:=object_follower_node" ]) roslaunch_command.extend([ @@ -54,6 +53,7 @@ def ros1_launch_description(): # Execute the launch command subprocess.call(roslaunch_command) + def ros2_launch_description(): nodes_to_launch = [] @@ -72,14 +72,6 @@ def ros2_launch_description(): }] )) - nodes_to_launch.append(Node( - package='ros_web_api_bellande_2d_computer_vision', - executable='bellande_2d_computer_vision_object_detection.py', - name='object_detection_node', - output='screen', - remappings=[('camera/image_raw', '/usb_cam/image_raw')] - )) - nodes_to_launch.append(Node( package='humanoid_robot_intelligence_control_system_object_detector', executable='object_detection_processor.py', @@ -88,6 +80,18 @@ def ros2_launch_description(): parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/object_detection_params.yaml'}] )) + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_configure', + executable='object_follower.py', + name='object_follower_node', + output='screen', + parameters=[{ + 'p_gain': 0.4, + 'i_gain': 0.0, + 'd_gain': 0.0 + }] + )) + nodes_to_launch.append(Node( package='rviz2', executable='rviz2', diff --git a/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py index e61d87a..9e0beef 100644 --- a/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py +++ b/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py @@ -13,20 +13,19 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . + import os import sys import subprocess from launch import LaunchDescription from launch_ros.actions import Node -from launch.actions import DeclareLaunchArgument -from launch.substitutions import LaunchConfiguration def ros1_launch_description(): # Get command-line arguments args = sys.argv[1:] # Construct the ROS 1 launch command - roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_object_detector", "object_detector_processor.launch"] + args + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "object_follow.launch"] + args roslaunch_command.extend([ "usb_cam", "usb_cam_node", "name:=camera", @@ -39,11 +38,11 @@ def ros1_launch_description(): ]) roslaunch_command.extend([ - "ros_web_api_bellande_2d_computer_vision", "bellande_2d_computer_vision_object_detection.py", "name:=object_detection_node" + "humanoid_robot_intelligence_control_system_object_tracker", "object_detection_processor.py", "name:=object_detection_processor_node" ]) roslaunch_command.extend([ - "humanoid_robot_intelligence_control_system_ball_detector", "object_detection_processor.py", "name:=object_detection_processor_node" + "humanoid_robot_intelligence_control_system_configure", "object_follower.py", "name:=object_follower_node" ]) roslaunch_command.extend([ @@ -54,6 +53,7 @@ def ros1_launch_description(): # Execute the launch command subprocess.call(roslaunch_command) + def ros2_launch_description(): nodes_to_launch = [] @@ -73,21 +73,25 @@ def ros2_launch_description(): )) nodes_to_launch.append(Node( - package='ros_web_api_bellande_2d_computer_vision', - executable='bellande_2d_computer_vision_object_detection.py', - name='object_detection_node', - output='screen', - remappings=[('camera/image_raw', '/usb_cam/image_raw')] - )) - - nodes_to_launch.append(Node( - package='humanoid_robot_intelligence_control_system_object_detector', + package='humanoid_robot_intelligence_control_system_object_tracker', executable='object_detection_processor.py', name='object_detection_processor_node', output='screen', parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/object_detection_params.yaml'}] )) + nodes_to_launch.append(Node( + package='humanoid_robot_intelligence_control_system_configure', + executable='object_follower.py', + name='object_follower_node', + output='screen', + parameters=[{ + 'p_gain': 0.4, + 'i_gain': 0.0, + 'd_gain': 0.0 + }] + )) + nodes_to_launch.append(Node( package='rviz2', executable='rviz2', diff --git a/humanoid_robot_intelligence_control_system_configure/src/face_follower.py b/humanoid_robot_intelligence_control_system_configure/src/face_follower.py index 0f11ade..3f923e4 100644 --- a/humanoid_robot_intelligence_control_system_configure/src/face_follower.py +++ b/humanoid_robot_intelligence_control_system_configure/src/face_follower.py @@ -15,18 +15,32 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import rospy +import os +import sys import math +from std_msgs.msg import String from sensor_msgs.msg import JointState -from std_msgs.msg import String, Bool from geometry_msgs.msg import Point from humanoid_robot_intelligence_control_system_walking_module_msgs.msg import WalkingParam from humanoid_robot_intelligence_control_system_walking_module_msgs.srv import GetWalkingParam class FaceFollower: - def __init__(self): - rospy.init_node('face_follower') - + def __init__(self, ros_version): + self.ros_version = ros_version + if self.ros_version == '1': + rospy.init_node('face_follower') + self.get_param = rospy.get_param + self.logger = rospy + else: + rclpy.init() + self.node = rclpy.create_node('face_follower') + self.get_param = self.node.get_parameter + self.logger = self.node.get_logger() + + self.initialize_parameters() + self.setup_ros_communication() + + def initialize_parameters(self): self.FOV_WIDTH = 35.2 * math.pi / 180 self.FOV_HEIGHT = 21.6 * math.pi / 180 self.count_not_found = 0 @@ -54,24 +68,37 @@ class FaceFollower: self.accum_period_time = 0.0 self.DEBUG_PRINT = False - self.current_joint_states_sub = rospy.Subscriber( - "/humanoid_robot_intelligence_control_system/goal_joint_states", JointState, self.current_joint_states_callback) - self.set_walking_command_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/walking/command", String, queue_size=1) - self.set_walking_param_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/walking/set_params", WalkingParam, queue_size=1) - self.get_walking_param_client = rospy.ServiceProxy( - "/humanoid_robot_intelligence_control_system/walking/get_params", GetWalkingParam) + def setup_ros_communication(self): + if self.ros_version == '1': + self.current_joint_states_sub = rospy.Subscriber( + "/humanoid_robot_intelligence_control_system/goal_joint_states", JointState, self.current_joint_states_callback) + self.set_walking_command_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/walking/command", String, queue_size=1) + self.set_walking_param_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/walking/set_params", WalkingParam, queue_size=1) + self.get_walking_param_client = rospy.ServiceProxy( + "/humanoid_robot_intelligence_control_system/walking/get_params", GetWalkingParam) + self.face_position_sub = rospy.Subscriber( + "/face_detector/face_position", Point, self.face_position_callback) + self.prev_time = rospy.Time.now() + else: + self.current_joint_states_sub = self.node.create_subscription( + JointState, "/humanoid_robot_intelligence_control_system/goal_joint_states", self.current_joint_states_callback, 10) + self.set_walking_command_pub = self.node.create_publisher( + String, "/humanoid_robot_intelligence_control_system/walking/command", 1) + self.set_walking_param_pub = self.node.create_publisher( + WalkingParam, "/humanoid_robot_intelligence_control_system/walking/set_params", 1) + self.get_walking_param_client = self.node.create_client( + GetWalkingParam, "/humanoid_robot_intelligence_control_system/walking/get_params") + self.face_position_sub = self.node.create_subscription( + Point, "/face_detector/face_position", self.face_position_callback, 10) + self.prev_time = self.node.get_clock().now() - self.face_position_sub = rospy.Subscriber( - "/face_detector/face_position", Point, self.face_position_callback) - - self.prev_time = rospy.Time.now() self.current_walking_param = WalkingParam() def start_following(self): self.on_following = True - rospy.loginfo("Start Face following") + self.logger.info("Start Face following") self.set_walking_command("start") result = self.get_walking_param() if result: @@ -84,7 +111,7 @@ class FaceFollower: def stop_following(self): self.on_following = False self.count_to_approach = 0 - rospy.loginfo("Stop Face following") + self.logger.info("Stop Face following") self.set_walking_command("stop") def current_joint_states_callback(self, msg): @@ -126,14 +153,18 @@ class FaceFollower: return fb_move, rl_angle def process_following(self, x_angle, y_angle, face_size): - curr_time = rospy.Time.now() - delta_time = (curr_time - self.prev_time).to_sec() + if self.ros_version == '1': + curr_time = rospy.Time.now() + delta_time = (curr_time - self.prev_time).to_sec() + else: + curr_time = self.node.get_clock().now() + delta_time = (curr_time - self.prev_time).nanoseconds / 1e9 self.prev_time = curr_time self.count_not_found = 0 if self.current_tilt == -10 and self.current_pan == -10: - rospy.logerr("Failed to get current angle of head joints.") + self.logger.error("Failed to get current angle of head joints.") self.set_walking_command("stop") self.on_following = False self.approach_face_position = "NotFound" @@ -170,4 +201,70 @@ class FaceFollower: self.set_walking_param(self.IN_PLACE_FB_STEP, 0, 0, True) msg = String() msg.data = command - self.set_walking_command_pub. + self.set_walking_command_pub.publish(msg) + + def set_walking_param(self, x_move, y_move, rotation_angle, balance=False): + self.current_walking_param.balance_enable = balance + self.current_walking_param.x_move_amplitude = x_move + self.SPOT_FB_OFFSET + self.current_walking_param.y_move_amplitude = y_move + self.SPOT_RL_OFFSET + self.current_walking_param.angle_move_amplitude = rotation_angle + self.SPOT_ANGLE_OFFSET + self.set_walking_param_pub.publish(self.current_walking_param) + self.current_x_move = x_move + self.current_r_angle = rotation_angle + + def get_walking_param(self): + if self.ros_version == '1': + try: + response = self.get_walking_param_client() + self.current_walking_param = response.parameters + return True + except rospy.ServiceException as e: + self.logger.error("Failed to get walking parameters: %s" % e) + return False + else: + future = self.get_walking_param_client.call_async(GetWalkingParam.Request()) + rclpy.spin_until_future_complete(self.node, future) + if future.result() is not None: + self.current_walking_param = future.result().parameters + return True + else: + self.logger.error('Service call failed %r' % (future.exception(),)) + return False + + def run(self): + if self.ros_version == '1': + rate = rospy.Rate(30) # 30Hz + while not rospy.is_shutdown(): + if self.on_following: + self.process_following(self.current_pan, self.current_tilt, 0.1) + rate.sleep() + else: + while rclpy.ok(): + if self.on_following: + self.process_following(self.current_pan, self.current_tilt, 0.1) + rclpy.spin_once(self.node, timeout_sec=0.03) + +def main(ros_version): + try: + follower = FaceFollower(ros_version) + follower.start_following() + follower.run() + except Exception as e: + if ros_version == '1': + rospy.logerr(f"An error occurred: {e}") + else: + rclpy.shutdown() + print(f"An error occurred: {e}") + +if __name__ == '__main__': + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + import rospy + elif ros_version == "2": + import rclpy + from rclpy.node import Node + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) + + main(ros_version) From 7dbd26da6ed8a087b4c88e366fb6cdc30c72b883 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 23 Jul 2024 13:50:25 -0400 Subject: [PATCH 157/172] latest pushes --- .../launch/face_tracker.launch.py | 26 +- .../launch/object_tracker.launch.py | 6 +- .../CHANGELOG.rst | 34 - .../CMakeLists.txt | 153 ----- .../action_demo.h | 114 ---- .../ball_follower.h | 129 ---- .../ball_tracker.h | 113 ---- .../button_test.h | 66 -- .../face_tracker.h | 94 --- .../mic_test.h | 86 --- .../op_demo.h | 49 -- .../soccer_demo.h | 134 ---- .../vision_demo.h | 83 --- .../launch/demo.launch | 28 - .../launch/self_test.launch | 29 - .../package.xml | 180 ----- .../src/demo_node.cpp | 351 ---------- .../src/soccer/ball_follower.cpp | 325 --------- .../src/soccer/ball_tracker.cpp | 267 -------- .../src/soccer/soccer_demo.cpp | 619 ------------------ .../src/test/button_test.cpp | 137 ---- .../src/test/mic_test.cpp | 238 ------- .../src/test_node.cpp | 393 ----------- .../src/vision/face_tracker.cpp | 181 ----- .../src/vision/vision_demo.cpp | 227 ------- 25 files changed, 16 insertions(+), 4046 deletions(-) delete mode 100644 humanoid_robot_intelligence_control_system_demo/CHANGELOG.rst delete mode 100644 humanoid_robot_intelligence_control_system_demo/CMakeLists.txt delete mode 100644 humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/action_demo.h delete mode 100644 humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_follower.h delete mode 100644 humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_tracker.h delete mode 100644 humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/button_test.h delete mode 100644 humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/face_tracker.h delete mode 100644 humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/mic_test.h delete mode 100644 humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/op_demo.h delete mode 100644 humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/soccer_demo.h delete mode 100644 humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/vision_demo.h delete mode 100644 humanoid_robot_intelligence_control_system_demo/launch/demo.launch delete mode 100644 humanoid_robot_intelligence_control_system_demo/launch/self_test.launch delete mode 100644 humanoid_robot_intelligence_control_system_demo/package.xml delete mode 100644 humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp delete mode 100644 humanoid_robot_intelligence_control_system_demo/src/soccer/ball_follower.cpp delete mode 100644 humanoid_robot_intelligence_control_system_demo/src/soccer/ball_tracker.cpp delete mode 100644 humanoid_robot_intelligence_control_system_demo/src/soccer/soccer_demo.cpp delete mode 100644 humanoid_robot_intelligence_control_system_demo/src/test/button_test.cpp delete mode 100644 humanoid_robot_intelligence_control_system_demo/src/test/mic_test.cpp delete mode 100644 humanoid_robot_intelligence_control_system_demo/src/test_node.cpp delete mode 100644 humanoid_robot_intelligence_control_system_demo/src/vision/face_tracker.cpp delete mode 100644 humanoid_robot_intelligence_control_system_demo/src/vision/vision_demo.cpp diff --git a/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py index 91a9896..6d4beeb 100644 --- a/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py +++ b/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py @@ -13,7 +13,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -#!/usr/bin/env python3 import os import sys @@ -26,7 +25,7 @@ def ros1_launch_description(): args = sys.argv[1:] # Construct the ROS 1 launch command - roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "object_tracker.launch"] + args + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "face_follow.launch"] + args roslaunch_command.extend([ "usb_cam", "usb_cam_node", "name:=camera", @@ -39,21 +38,22 @@ def ros1_launch_description(): ]) roslaunch_command.extend([ - "humanoid_robot_intelligence_control_system_object_detector", "object_detection_processor.py", "name:=object_detection_processor_node" + "humanoid_robot_intelligence_control_system_face_tracker", "face_detection_processor.py", "name:=face_detection_processor_node" ]) roslaunch_command.extend([ - "humanoid_robot_intelligence_control_system_configure", "object_tracker.py", "name:=object_tracker_node" + "humanoid_robot_intelligence_control_system_configure", "face_tracker.py", "name:=face_tracker_node" ]) roslaunch_command.extend([ "rviz", "rviz", "name:=rviz", - "args:=-d $(find humanoid_robot_intelligence_control_system_object_detector)/rviz/object_tracking_visualization.rviz" + "args:=-d $(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz" ]) # Execute the launch command subprocess.call(roslaunch_command) + def ros2_launch_description(): nodes_to_launch = [] @@ -73,17 +73,17 @@ def ros2_launch_description(): )) nodes_to_launch.append(Node( - package='humanoid_robot_intelligence_control_system_object_detector', - executable='object_detection_processor.py', - name='object_detection_processor_node', + package='humanoid_robot_intelligence_control_system_face_tracker', + executable='face_detection_processor.py', + name='face_detection_processor_node', output='screen', - parameters=[{'yaml_path': '$(find humanoid_robot_intelligence_control_system_object_detector)/config/object_detection_params.yaml'}] + parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/face_detection_params.yaml'}] )) nodes_to_launch.append(Node( - package='humanoid_robot_intelligence_control_system_object_detector', - executable='object_tracker.py', - name='object_tracker_node', + package='humanoid_robot_intelligence_control_system_configure', + executable='face_tracker.py', + name='face_tracker_node', output='screen', parameters=[{ 'p_gain': 0.4, @@ -96,7 +96,7 @@ def ros2_launch_description(): package='rviz2', executable='rviz2', name='rviz', - arguments=['-d', '$(find humanoid_robot_intelligence_control_system_object_detector)/rviz/object_tracking_visualization.rviz'] + arguments=['-d', '$(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz'] )) return LaunchDescription(nodes_to_launch) diff --git a/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py index 9e0beef..892e0cc 100644 --- a/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py +++ b/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py @@ -42,7 +42,7 @@ def ros1_launch_description(): ]) roslaunch_command.extend([ - "humanoid_robot_intelligence_control_system_configure", "object_follower.py", "name:=object_follower_node" + "humanoid_robot_intelligence_control_system_configure", "object_tracker.py", "name:=object_tracker_node" ]) roslaunch_command.extend([ @@ -82,8 +82,8 @@ def ros2_launch_description(): nodes_to_launch.append(Node( package='humanoid_robot_intelligence_control_system_configure', - executable='object_follower.py', - name='object_follower_node', + executable='object_tracker.py', + name='object_tracker_node', output='screen', parameters=[{ 'p_gain': 0.4, diff --git a/humanoid_robot_intelligence_control_system_demo/CHANGELOG.rst b/humanoid_robot_intelligence_control_system_demo/CHANGELOG.rst deleted file mode 100644 index 39a2f89..0000000 --- a/humanoid_robot_intelligence_control_system_demo/CHANGELOG.rst +++ /dev/null @@ -1,34 +0,0 @@ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package humanoid_robot_intelligence_control_system_demo -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -0.3.2 (2023-10-03) ------------------- -* Make it compatible for ROS1/ROS2 -* Fix bugs -* Update package.xml and CMakeList.txt for to the latest versions -* Contributors & Maintainer: Ronaldson Bellande - -0.3.1 (2023-09-27) ------------------- -* Starting from this point it under a new license -* Fix errors and Issues -* Rename Repository for a completely different purpose -* Make it compatible with ROS/ROS2 -* Upgrade version of all builds and make it more compatible -* Update package.xml and CMakeList.txt for to the latest versions -* Contributors & Maintainer: Ronaldson Bellande - -0.3.0 (2021-05-05) ------------------- -* Update package.xml and CMakeList.txt for noetic branch -* Contributors: Ronaldson Bellande - -0.1.0 (2018-04-19) ------------------- -* first release for ROS Kinetic -* added launch files in order to move the camera setting to humanoid_robot_intelligence_control_system_camera_setting package -* added missing package in find_package() -* refacoring to release -* split repositoryfrom ROBOTIS-HUMANOID_ROBOT -* Contributors: Kayman, Zerom, Yoshimaru Tanaka, Pyo diff --git a/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt b/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt deleted file mode 100644 index 1a98f2b..0000000 --- a/humanoid_robot_intelligence_control_system_demo/CMakeLists.txt +++ /dev/null @@ -1,153 +0,0 @@ -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy of -# the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations under -# the License. - -cmake_minimum_required(VERSION 3.8) -project(humanoid_robot_intelligence_control_system_demo) - - -if($ENV{ROS_VERSION} EQUAL 1) - find_package( - catkin REQUIRED COMPONENTS - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_intelligence_control_system_controller_msgs - humanoid_robot_intelligence_control_system_walking_module_msgs - humanoid_robot_intelligence_control_system_action_module_msgs - cmake_modules - humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_object_detector - ) - find_package(Boost REQUIRED COMPONENTS thread) - find_package(Eigen3 REQUIRED) -else() - find_package(ament_cmake REQUIRED) -endif() - - -find_package(PkgConfig REQUIRED) -pkg_check_modules(YAML_CPP REQUIRED yaml-cpp) -find_path( - YAML_CPP_INCLUDE_DIR - NAMES yaml_cpp.h - PATHS ${YAML_CPP_INCLUDE_DIRS} -) -find_library( - YAML_CPP_LIBRARY - NAMES YAML_CPP - PATHS ${YAML_CPP_LIBRARY_DIRS} -) -link_directories(${YAML_CPP_LIBRARY_DIRS}) - -if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") - add_definitions(-DHAVE_NEW_YAMLCPP) -endif(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5") - - -if($ENV{ROS_VERSION} EQUAL 1) - catkin_package( - INCLUDE_DIRS include - CATKIN_DEPENDS - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - humanoid_robot_intelligence_control_system_controller_msgs - humanoid_robot_intelligence_control_system_walking_module_msgs - humanoid_robot_intelligence_control_system_action_module_msgs - cmake_modules - humanoid_robot_intelligence_control_system_math - humanoid_robot_intelligence_control_system_object_detector - DEPENDS Boost EIGEN3 - ) -endif() - - -include_directories( - include - ${catkin_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} - ${EIGEN3_INCLUDE_DIRS} - ${YAML_CPP_INCLUDE_DIRS} -) - -add_executable( - op_demo_node - src/demo_node.cpp - src/soccer/soccer_demo.cpp - src/soccer/ball_tracker.cpp - src/soccer/ball_follower.cpp - src/action/action_demo.cpp - src/vision/vision_demo.cpp - src/vision/face_tracker.cpp -) - -add_dependencies( - op_demo_node - ${${PROJECT_NAME}_EXPORTED_TARGETS} - ${catkin_EXPORTED_TARGETS} -) - -target_link_libraries( - op_demo_node - ${catkin_LIBRARIES} - ${Boost_LIBRARIES} - ${Eigen3_LIBRARIES} - ${YAML_CPP_LIBRARIES} -) - -add_executable( - self_test_node - src/test_node.cpp - src/soccer/soccer_demo.cpp - src/soccer/ball_tracker.cpp - src/soccer/ball_follower.cpp - src/action/action_demo.cpp - src/vision/vision_demo.cpp - src/vision/face_tracker.cpp - src/test/button_test.cpp - src/test/mic_test.cpp -) - -add_dependencies( - self_test_node - ${${PROJECT_NAME}_EXPORTED_TARGETS} - ${catkin_EXPORTED_TARGETS} -) - -target_link_libraries( - self_test_node - ${catkin_LIBRARIES} - ${Boost_LIBRARIES} - ${Eigen3_LIBRARIES} - ${YAML_CPP_LIBRARIES} -) - -install( - TARGETS op_demo_node self_test_node - RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -) - -install( - DIRECTORY include/${PROJECT_NAME}/ - DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} -) - -install( - DIRECTORY data launch list - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} -) diff --git a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/action_demo.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/action_demo.h deleted file mode 100644 index b8ee165..0000000 --- a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/action_demo.h +++ /dev/null @@ -1,114 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef ACTION_DEMO_H_ -#define ACTION_DEMO_H_ - -#include -#include -#include -#include - -#include -#include - -#include "humanoid_robot_intelligence_control_system_action_module_msgs/IsRunning.h" -#include "humanoid_robot_intelligence_control_system_demo/op_demo.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/JointCtrlModule.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/SetModule.h" - -namespace humanoid_robot_intelligence_control_system_op { - -class ActionDemo : public OPDemo { -public: - ActionDemo(); - ~ActionDemo(); - - void setDemoEnable(); - void setDemoDisable(); - -protected: - enum ActionCommandIndex { - BrakeActionCommand = -2, - StopActionCommand = -1, - }; - - enum ActionStatus { - PlayAction = 1, - PauseAction = 2, - StopAction = 3, - ReadyAction = 4, - }; - - const int SPIN_RATE; - const bool DEBUG_PRINT; - - void processThread(); - void callbackThread(); - - void process(); - void startProcess(const std::string &set_name = "default"); - void resumeProcess(); - void pauseProcess(); - void stopProcess(); - - void handleStatus(); - - void parseActionScript(const std::string &path); - bool parseActionScriptSetName(const std::string &path, - const std::string &set_name); - - bool playActionWithSound(int motion_index); - - void playMP3(std::string &path); - void stopMP3(); - - void playAction(int motion_index); - void stopAction(); - void brakeAction(); - bool isActionRunning(); - - void setModuleToDemo(const std::string &module_name); - void callServiceSettingModule(const std::string &module_name); - void actionSetNameCallback(const std_msgs::String::ConstPtr &msg); - void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); - void demoCommandCallback(const std_msgs::String::ConstPtr &msg); - - ros::Publisher module_control_pub_; - ros::Publisher motion_index_pub_; - ros::Publisher play_sound_pub_; - - ros::Subscriber buttuon_sub_; - ros::Subscriber demo_command_sub_; - - ros::ServiceClient is_running_client_; - ros::ServiceClient set_joint_module_client_; - - std::map action_sound_table_; - std::vector play_list_; - - std::string script_path_; - std::string play_list_name_; - int play_index_; - - int play_status_; -}; - -} /* namespace humanoid_robot_intelligence_control_system_op */ - -#endif /* ACTION_DEMO_H_ */ diff --git a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_follower.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_follower.h deleted file mode 100644 index cb9ed78..0000000 --- a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_follower.h +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef BALL_FOLLOWER_H_ -#define BALL_FOLLOWER_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "humanoid_robot_intelligence_control_system_ball_detector/CircleSetStamped.h" -#include "humanoid_robot_intelligence_control_system_walking_module_msgs/GetWalkingParam.h" -#include "humanoid_robot_intelligence_control_system_walking_module_msgs/WalkingParam.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/JointCtrlModule.h" - -namespace humanoid_robot_intelligence_control_system_op { - -// following the ball using walking -class BallFollower { -public: - enum { - NotFound = 0, - OutOfRange = 1, - OnRight = 2, - OnLeft = 3, - }; - - BallFollower(); - ~BallFollower(); - - bool processFollowing(double x_angle, double y_angle, double ball_size); - void decideBallPositin(double x_angle, double y_angle); - void waitFollowing(); - void startFollowing(); - void stopFollowing(); - void clearBallPosition() { approach_ball_position_ = NotFound; } - - int getBallPosition() { return approach_ball_position_; } - - bool isBallInRange() { - return (approach_ball_position_ == OnRight || - approach_ball_position_ == OnLeft); - } - -protected: - const bool DEBUG_PRINT; - const double CAMERA_HEIGHT; - const int NOT_FOUND_THRESHOLD; - const double FOV_WIDTH; - const double FOV_HEIGHT; - const double MAX_FB_STEP; - const double MAX_RL_TURN; - const double IN_PLACE_FB_STEP; - const double MIN_FB_STEP; - const double MIN_RL_TURN; - const double UNIT_FB_STEP; - const double UNIT_RL_TURN; - - const double SPOT_FB_OFFSET; - const double SPOT_RL_OFFSET; - const double SPOT_ANGLE_OFFSET; - - void currentJointStatesCallback(const sensor_msgs::JointState::ConstPtr &msg); - void setWalkingCommand(const std::string &command); - void setWalkingParam(double x_move, double y_move, double rotation_angle, - bool balance = true); - bool getWalkingParam(); - void calcFootstep(double target_distance, double target_angle, - double delta_time, double &fb_move, double &rl_angle); - - // ros node handle - ros::NodeHandle nh_; - - // image publisher/subscriber - ros::Publisher module_control_pub_; - ros::Publisher head_joint_pub_; - ros::Publisher head_scan_pub_; - ros::Publisher set_walking_command_pub_; - ros::Publisher set_walking_param_pub_; - - ros::Publisher motion_index_pub_; - ros::ServiceClient get_walking_param_client_; - - ros::Subscriber ball_position_sub_; - ros::Subscriber ball_tracking_command_sub_; - ros::Subscriber current_joint_states_sub_; - - // (x, y) is the center position of the ball in image coordinates - // z is the ball radius - geometry_msgs::Point ball_position_; - humanoid_robot_intelligence_control_system_walking_module_msgs::WalkingParam current_walking_param_; - - int count_not_found_; - int count_to_kick_; - bool on_tracking_; - int approach_ball_position_; - double current_pan_, current_tilt_; - double current_x_move_, current_r_angle_; - int kick_motion_index_; - double hip_pitch_offset_; - ros::Time prev_time_; - - double curr_period_time_; - double accum_period_time_; -}; -} // namespace humanoid_robot_intelligence_control_system_op - -#endif /* BALL_FOLLOWER_H_ */ diff --git a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_tracker.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_tracker.h deleted file mode 100644 index 9ccceeb..0000000 --- a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/ball_tracker.h +++ /dev/null @@ -1,113 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef BALL_TRACKING_H_ -#define BALL_TRACKING_H_ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "humanoid_robot_intelligence_control_system_ball_detector/CircleSetStamped.h" -#include "humanoid_robot_intelligence_control_system_walking_module_msgs/GetWalkingParam.h" -#include "humanoid_robot_intelligence_control_system_walking_module_msgs/WalkingParam.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/JointCtrlModule.h" - -namespace humanoid_robot_intelligence_control_system_op { - -// head tracking for looking the ball -class BallTracker { -public: - enum TrackingStatus { - NotFound = -1, - Waiting = 0, - Found = 1, - - }; - BallTracker(); - ~BallTracker(); - - int processTracking(); - - void startTracking(); - void stopTracking(); - - void setUsingHeadScan(bool use_scan); - void goInit(); - - double getPanOfBall() { - // left (+) ~ right (-) - return current_ball_pan_; - } - double getTiltOfBall() { - // top (+) ~ bottom (-) - return current_ball_tilt_; - } - double getBallSize() { return current_ball_bottom_; } - -protected: - const double FOV_WIDTH; - const double FOV_HEIGHT; - const int NOT_FOUND_THRESHOLD; - const int WAITING_THRESHOLD; - const bool DEBUG_PRINT; - - void ballPositionCallback( - const humanoid_robot_intelligence_control_system_ball_detector::CircleSetStamped::ConstPtr &msg); - void ballTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); - void publishHeadJoint(double pan, double tilt); - void scanBall(); - - // ros node handle - ros::NodeHandle nh_; - - // image publisher/subscriber - ros::Publisher module_control_pub_; - ros::Publisher head_joint_offset_pub_; - ros::Publisher head_joint_pub_; - ros::Publisher head_scan_pub_; - - // ros::Publisher error_pub_; - - ros::Publisher motion_index_pub_; - - ros::Subscriber ball_position_sub_; - ros::Subscriber ball_tracking_command_sub_; - - // (x, y) is the center position of the ball in image coordinates - // z is the ball radius - geometry_msgs::Point ball_position_; - - int tracking_status_; - bool use_head_scan_; - int count_not_found_; - bool on_tracking_; - double current_ball_pan_, current_ball_tilt_; - double current_ball_bottom_; - double x_error_sum_, y_error_sum_; - ros::Time prev_time_; - double p_gain_, d_gain_, i_gain_; -}; -} // namespace humanoid_robot_intelligence_control_system_op - -#endif /* BALL_TRACKING_H_ */ diff --git a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/button_test.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/button_test.h deleted file mode 100644 index ead7c2b..0000000 --- a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/button_test.h +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef BUTTON_TEST_H_ -#define BUTTON_TEST_H_ - -#include -#include -#include -#include - -#include "humanoid_robot_intelligence_control_system_demo/op_demo.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" - -namespace humanoid_robot_intelligence_control_system_op { - -class ButtonTest : public OPDemo { -public: - ButtonTest(); - ~ButtonTest(); - - void setDemoEnable(); - void setDemoDisable(); - -protected: - const int SPIN_RATE; - - void processThread(); - void callbackThread(); - - void process(); - - void setRGBLED(int blue, int green, int red); - void setLED(int led); - - void playSound(const std::string &path); - - void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); - - ros::Publisher rgb_led_pub_; - ros::Publisher play_sound_pub_; - ros::Subscriber buttuon_sub_; - - std::string default_mp3_path_; - int led_count_; - int rgb_led_count_; -}; - -} /* namespace humanoid_robot_intelligence_control_system_op */ - -#endif /* BUTTON_TEST_H_ */ diff --git a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/face_tracker.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/face_tracker.h deleted file mode 100644 index 6c2dbbc..0000000 --- a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/face_tracker.h +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef FACE_TRACKING_H_ -#define FACE_TRACKING_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace humanoid_robot_intelligence_control_system_op { - -// head tracking for looking the ball -class FaceTracker { -public: - enum TrackingStatus { - NotFound = -1, - Waiting = 0, - Found = 1, - - }; - - FaceTracker(); - ~FaceTracker(); - - int processTracking(); - - void startTracking(); - void stopTracking(); - - void setUsingHeadScan(bool use_scan); - void setFacePosition(geometry_msgs::Point &face_position); - void goInit(double init_pan, double init_tile); - - double getPanOfFace() { return current_face_pan_; } - double getTiltOfFace() { return current_face_tilt_; } - -protected: - const double FOV_WIDTH; - const double FOV_HEIGHT; - const int NOT_FOUND_THRESHOLD; - - void facePositionCallback(const geometry_msgs::Point::ConstPtr &msg); - void faceTrackerCommandCallback(const std_msgs::String::ConstPtr &msg); - void publishHeadJoint(double pan, double tilt); - void scanFace(); - - // ros node handle - ros::NodeHandle nh_; - - // image publisher/subscriber - ros::Publisher module_control_pub_; - ros::Publisher head_joint_offset_pub_; - ros::Publisher head_joint_pub_; - ros::Publisher head_scan_pub_; - - ros::Subscriber face_position_sub_; - ros::Subscriber face_tracking_command_sub_; - - // (x, y) is the center position of the ball in image coordinates - // z is the face size - geometry_msgs::Point face_position_; - - bool use_head_scan_; - int count_not_found_; - bool on_tracking_; - double current_face_pan_, current_face_tilt_; - - int dismissed_count_; -}; -} // namespace humanoid_robot_intelligence_control_system_op - -#endif /* FACE_TRACKING_H_ */ diff --git a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/mic_test.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/mic_test.h deleted file mode 100644 index 0477d8d..0000000 --- a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/mic_test.h +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef MIC_TEST_H_ -#define MIC_TEST_H_ - -#include -#include -#include -#include -#include - -#include "humanoid_robot_intelligence_control_system_demo/op_demo.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" - -namespace humanoid_robot_intelligence_control_system_op { - -class MicTest : public OPDemo { -public: - enum Mic_Test_Status { - Ready = 0, - AnnounceRecording = 1, - MicRecording = 2, - PlayingSound = 3, - DeleteTempFile = 4, - DemoCount = 5 - }; - - MicTest(); - ~MicTest(); - - void setDemoEnable(); - void setDemoDisable(); - -protected: - const int SPIN_RATE; - - void processThread(); - void callbackThread(); - - void process(); - - void announceTest(); - void recordSound(int recording_time); - void recordSound(); - void playTestSound(const std::string &path); - void playSound(const std::string &file_path); - void deleteSoundFile(const std::string &file_path); - - void startTimer(double wait_time); - void finishTimer(); - - void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); - - std::string recording_file_name_; - std::string default_mp3_path_; - - ros::Publisher play_sound_pub_; - ros::Subscriber buttuon_sub_; - - ros::Time start_time_; - double wait_time_; - bool is_wait_; - int record_pid_; - int play_pid_; - int test_status_; -}; - -} /* namespace humanoid_robot_intelligence_control_system_op */ - -#endif /* MIC_TEST_H_ */ diff --git a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/op_demo.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/op_demo.h deleted file mode 100644 index 5872213..0000000 --- a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/op_demo.h +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef OP_DEMO_H_ -#define OP_DEMO_H_ - -namespace humanoid_robot_intelligence_control_system_op { - -class OPDemo { -public: - enum Motion_Index { - InitPose = 1, - WalkingReady = 9, - GetUpFront = 122, - GetUpBack = 123, - RightKick = 121, - LeftKick = 120, - Ceremony = 27, - ForGrass = 20, - }; - - OPDemo() {} - virtual ~OPDemo() {} - - virtual void setDemoEnable() {} - virtual void setDemoDisable() {} - -protected: - bool enable_; -}; - -} /* namespace humanoid_robot_intelligence_control_system_op */ - -#endif /* OP_DEMO_H_ */ diff --git a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/soccer_demo.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/soccer_demo.h deleted file mode 100644 index 4af5a5a..0000000 --- a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/soccer_demo.h +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef SOCCER_DEMO_H -#define SOCCER_DEMO_H - -#include -#include -#include -#include -#include -#include - -#include "humanoid_robot_intelligence_control_system_action_module_msgs/IsRunning.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/JointCtrlModule.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/SetJointModule.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" - -#include "humanoid_robot_intelligence_control_system_demo/ball_follower.h" -#include "humanoid_robot_intelligence_control_system_demo/ball_tracker.h" -#include "humanoid_robot_intelligence_control_system_demo/op_demo.h" -#include "humanoid_robot_intelligence_control_system_math/humanoid_robot_intelligence_control_system_linear_algebra.h" - -namespace humanoid_robot_intelligence_control_system_op { - -class SoccerDemo : public OPDemo { -public: - enum Stand_Status { - Stand = 0, - Fallen_Forward = 1, - Fallen_Behind = 2, - }; - - enum Robot_Status { - Waited = 0, - TrackingAndFollowing = 1, - ReadyToKick = 2, - ReadyToCeremony = 3, - ReadyToGetup = 4, - }; - - SoccerDemo(); - ~SoccerDemo(); - - void setDemoEnable(); - void setDemoDisable(); - -protected: - const double FALL_FORWARD_LIMIT; - const double FALL_BACK_LIMIT; - const int SPIN_RATE; - const bool DEBUG_PRINT; - - void processThread(); - void callbackThread(); - void trackingThread(); - - void setBodyModuleToDemo(const std::string &body_module, - bool with_head_control = true); - void setModuleToDemo(const std::string &module_name); - void callServiceSettingModule( - const humanoid_robot_intelligence_control_system_controller_msgs::JointCtrlModule &modules); - void parseJointNameFromYaml(const std::string &path); - bool getJointNameFromID(const int &id, std::string &joint_name); - bool getIDFromJointName(const std::string &joint_name, int &id); - int getJointCount(); - bool isHeadJoint(const int &id); - void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); - void demoCommandCallback(const std_msgs::String::ConstPtr &msg); - void imuDataCallback(const sensor_msgs::Imu::ConstPtr &msg); - - void startSoccerMode(); - void stopSoccerMode(); - - void process(); - void handleKick(int ball_position); - void handleKick(); - bool handleFallen(int fallen_status); - - void playMotion(int motion_index); - void setRGBLED(int blue, int green, int red); - bool isActionRunning(); - - void sendDebugTopic(const std::string &msgs); - - BallTracker ball_tracker_; - BallFollower ball_follower_; - - ros::Publisher module_control_pub_; - ros::Publisher motion_index_pub_; - ros::Publisher rgb_led_pub_; - ros::Subscriber buttuon_sub_; - ros::Subscriber demo_command_sub_; - ros::Subscriber imu_data_sub_; - - ros::Publisher test_pub_; - - ros::ServiceClient is_running_client_; - ros::ServiceClient set_joint_module_client_; - - std::map id_joint_table_; - std::map joint_id_table_; - - bool is_grass_; - int wait_count_; - bool on_following_ball_; - bool on_tracking_ball_; - bool restart_soccer_; - bool start_following_; - bool stop_following_; - bool stop_fallen_check_; - int robot_status_; - int tracking_status_; - int stand_state_; - double present_pitch_; -}; - -} // namespace humanoid_robot_intelligence_control_system_op -#endif // SOCCER_DEMO_H diff --git a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/vision_demo.h b/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/vision_demo.h deleted file mode 100644 index a42de50..0000000 --- a/humanoid_robot_intelligence_control_system_demo/include/humanoid_robot_intelligence_control_system_demo/vision_demo.h +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#ifndef VISION_DEMO_H_ -#define VISION_DEMO_H_ - -#include -#include -#include -#include -#include - -#include "humanoid_robot_intelligence_control_system_controller_msgs/SetModule.h" -#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" - -#include "humanoid_robot_intelligence_control_system_demo/face_tracker.h" -#include "humanoid_robot_intelligence_control_system_demo/op_demo.h" - -namespace humanoid_robot_intelligence_control_system_op { - -class VisionDemo : public OPDemo { -public: - VisionDemo(); - ~VisionDemo(); - - void setDemoEnable(); - void setDemoDisable(); - -protected: - const int SPIN_RATE; - const int TIME_TO_INIT; - - void processThread(); - void callbackThread(); - - void process(); - - void playMotion(int motion_index); - void setRGBLED(int blue, int green, int red); - - void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); - void facePositionCallback(const std_msgs::Int32MultiArray::ConstPtr &msg); - void demoCommandCallback(const std_msgs::String::ConstPtr &msg); - - void setModuleToDemo(const std::string &module_name); - void callServiceSettingModule(const std::string &module_name); - - FaceTracker face_tracker_; - - ros::Publisher module_control_pub_; - ros::Publisher motion_index_pub_; - ros::Publisher rgb_led_pub_; - ros::Publisher face_tracking_command_pub_; - - ros::Subscriber buttuon_sub_; - ros::Subscriber faceCoord_sub_; - - ros::ServiceClient set_joint_module_client_; - geometry_msgs::Point face_position_; - - ros::Time prev_time_; - - int tracking_status_; -}; - -} /* namespace humanoid_robot_intelligence_control_system_op */ - -#endif /* VISION_DEMO_H_ */ diff --git a/humanoid_robot_intelligence_control_system_demo/launch/demo.launch b/humanoid_robot_intelligence_control_system_demo/launch/demo.launch deleted file mode 100644 index 2734717..0000000 --- a/humanoid_robot_intelligence_control_system_demo/launch/demo.launch +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/humanoid_robot_intelligence_control_system_demo/launch/self_test.launch b/humanoid_robot_intelligence_control_system_demo/launch/self_test.launch deleted file mode 100644 index 4751a5f..0000000 --- a/humanoid_robot_intelligence_control_system_demo/launch/self_test.launch +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/humanoid_robot_intelligence_control_system_demo/package.xml b/humanoid_robot_intelligence_control_system_demo/package.xml deleted file mode 100644 index 1288222..0000000 --- a/humanoid_robot_intelligence_control_system_demo/package.xml +++ /dev/null @@ -1,180 +0,0 @@ - - - - - humanoid_robot_intelligence_control_system_demo - 0.3.2 - - HUMANOID_ROBOT default demo - It includes three demontrations(soccer demo, vision demo, action script demo) - - Apache 2.0 - Ronaldson Bellande - - - catkin - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - - humanoid_robot_intelligence_control_system_controller_msgs - - humanoid_robot_intelligence_control_system_walking_module_msgs - - humanoid_robot_intelligence_control_system_action_module_msgs - cmake_modules - humanoid_robot_intelligence_control_system_math - - humanoid_robot_intelligence_control_system_object_detector - boost - eigen - yaml-cpp - humanoid_robot_intelligence_control_system_manager - - humanoid_robot_intelligence_control_system_camera_setting_tool - - humanoid_robot_intelligence_control_system_web_setting_tool - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - - humanoid_robot_intelligence_control_system_controller_msgs - - humanoid_robot_intelligence_control_system_walking_module_msgs - - humanoid_robot_intelligence_control_system_action_module_msgs - cmake_modules - humanoid_robot_intelligence_control_system_math - - humanoid_robot_intelligence_control_system_object_detector - boost - eigen - yaml-cpp - - humanoid_robot_intelligence_control_system_manager - - humanoid_robot_intelligence_control_system_camera_setting_tool - - humanoid_robot_intelligence_control_system_web_setting_tool - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - - humanoid_robot_intelligence_control_system_controller_msgs - - humanoid_robot_intelligence_control_system_walking_module_msgs - - humanoid_robot_intelligence_control_system_action_module_msgs - cmake_modules - humanoid_robot_intelligence_control_system_math - - humanoid_robot_intelligence_control_system_object_detector - boost - eigen - yaml-cpp - humanoid_robot_intelligence_control_system_manager - - humanoid_robot_intelligence_control_system_camera_setting_tool - - humanoid_robot_intelligence_control_system_web_setting_tool - - - ament_cmake - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - - humanoid_robot_intelligence_control_system_controller_msgs - - humanoid_robot_intelligence_control_system_walking_module_msgs - - humanoid_robot_intelligence_control_system_action_module_msgs - cmake_modules - humanoid_robot_intelligence_control_system_math - - humanoid_robot_intelligence_control_system_object_detector - boost - eigen - yaml-cpp - humanoid_robot_intelligence_control_system_manager - - humanoid_robot_intelligence_control_system_camera_setting_tool - - humanoid_robot_intelligence_control_system_web_setting_tool - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - - humanoid_robot_intelligence_control_system_controller_msgs - - humanoid_robot_intelligence_control_system_walking_module_msgs - - humanoid_robot_intelligence_control_system_action_module_msgs - cmake_modules - humanoid_robot_intelligence_control_system_math - - humanoid_robot_intelligence_control_system_object_detector - boost - eigen - yaml-cpp - - humanoid_robot_intelligence_control_system_manager - - humanoid_robot_intelligence_control_system_camera_setting_tool - - humanoid_robot_intelligence_control_system_web_setting_tool - - roscpp - roslib - std_msgs - sensor_msgs - geometry_msgs - - humanoid_robot_intelligence_control_system_controller_msgs - - humanoid_robot_intelligence_control_system_walking_module_msgs - - humanoid_robot_intelligence_control_system_action_module_msgs - cmake_modules - humanoid_robot_intelligence_control_system_math - - humanoid_robot_intelligence_control_system_object_detector - boost - eigen - yaml-cpp - humanoid_robot_intelligence_control_system_manager - - humanoid_robot_intelligence_control_system_camera_setting_tool - - humanoid_robot_intelligence_control_system_web_setting_tool - - diff --git a/humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp b/humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp deleted file mode 100644 index 523b62a..0000000 --- a/humanoid_robot_intelligence_control_system_demo/src/demo_node.cpp +++ /dev/null @@ -1,351 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include -#include - -#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" -#include "humanoid_robot_intelligence_control_system_demo/action_demo.h" -#include "humanoid_robot_intelligence_control_system_demo/soccer_demo.h" -#include "humanoid_robot_intelligence_control_system_demo/vision_demo.h" -#include "humanoid_robot_intelligence_control_system_math/humanoid_robot_intelligence_control_system_linear_algebra.h" - -enum Demo_Status { - Ready = 0, - SoccerDemo = 1, - VisionDemo = 2, - ActionDemo = 3, - DemoCount = 4, -}; - -void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); -void goInitPose(); -void playSound(const std::string &path); -void setLED(int led); -bool checkManagerRunning(std::string &manager_name); -void dxlTorqueChecker(); - -void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg); - -const int SPIN_RATE = 30; -const bool DEBUG_PRINT = false; - -ros::Publisher init_pose_pub; -ros::Publisher play_sound_pub; -ros::Publisher led_pub; -ros::Publisher dxl_torque_pub; - -std::string default_mp3_path = ""; -int current_status = Ready; -int desired_status = Ready; -bool apply_desired = false; - -// node main -int main(int argc, char **argv) { - // init ros - ros::init(argc, argv, "demo_node"); - - // create ros wrapper object - humanoid_robot_intelligence_control_system_op::OPDemo *current_demo = NULL; - humanoid_robot_intelligence_control_system_op::SoccerDemo *soccer_demo = - new humanoid_robot_intelligence_control_system_op::SoccerDemo(); - humanoid_robot_intelligence_control_system_op::ActionDemo *action_demo = - new humanoid_robot_intelligence_control_system_op::ActionDemo(); - humanoid_robot_intelligence_control_system_op::VisionDemo *vision_demo = - new humanoid_robot_intelligence_control_system_op::VisionDemo(); - - ros::NodeHandle nh(ros::this_node::getName()); - - init_pose_pub = nh.advertise( - "/humanoid_robot_intelligence_control_system/base/ini_pose", 0); - play_sound_pub = nh.advertise("/play_sound_file", 0); - led_pub = - nh.advertise( - "/humanoid_robot_intelligence_control_system/sync_write_item", 0); - dxl_torque_pub = nh.advertise( - "/humanoid_robot_intelligence_control_system/dxl_torque", 0); - ros::Subscriber buttuon_sub = - nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", - 1, buttonHandlerCallback); - ros::Subscriber mode_command_sub = - nh.subscribe("/humanoid_robot_intelligence_control_system/mode_command", - 1, demoModeCommandCallback); - - default_mp3_path = - ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + - "/data/mp3/"; - - ros::start(); - - // set node loop rate - ros::Rate loop_rate(SPIN_RATE); - - // wait for starting of manager - std::string manager_name = - "/humanoid_robot_intelligence_control_system_manager"; - while (ros::ok()) { - ros::Duration(1.0).sleep(); - - if (checkManagerRunning(manager_name) == true) { - break; - ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); - } - ROS_WARN("Waiting for humanoid_robot_intelligence_control_system manager"); - } - - // init procedure - playSound(default_mp3_path + "Demonstration ready mode.mp3"); - // turn on R/G/B LED - setLED(0x01 | 0x02 | 0x04); - - // node loop - while (ros::ok()) { - // process - if (apply_desired == true) { - switch (desired_status) { - case Ready: { - - if (current_demo != NULL) - current_demo->setDemoDisable(); - - current_demo = NULL; - - goInitPose(); - - ROS_INFO_COND(DEBUG_PRINT, "[Go to Demo READY!]"); - break; - } - - case SoccerDemo: { - if (current_demo != NULL) - current_demo->setDemoDisable(); - - current_demo = soccer_demo; - current_demo->setDemoEnable(); - - ROS_INFO_COND(DEBUG_PRINT, "[Start] Soccer Demo"); - break; - } - - case VisionDemo: { - if (current_demo != NULL) - current_demo->setDemoDisable(); - - current_demo = vision_demo; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Vision Demo"); - break; - } - case ActionDemo: { - if (current_demo != NULL) - current_demo->setDemoDisable(); - - current_demo = action_demo; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Action Demo"); - break; - } - - default: { - break; - } - } - - apply_desired = false; - current_status = desired_status; - } - - // execute pending callbacks - ros::spinOnce(); - - // relax to fit output rate - loop_rate.sleep(); - } - - // exit program - return 0; -} - -void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { - if (apply_desired == true) - return; - - // in the middle of playing demo - if (current_status != Ready) { - if (msg->data == "mode_long") { - // go to mode selection status - desired_status = Ready; - apply_desired = true; - - playSound(default_mp3_path + "Demonstration ready mode.mp3"); - setLED(0x01 | 0x02 | 0x04); - } else if (msg->data == "user_long") { - // it's using in humanoid_robot_intelligence_control_system_manager - // torque on and going to init pose - } - } - // ready to start demo - else { - if (msg->data == "start") { - // select current demo - desired_status = - (desired_status == Ready) ? desired_status + 1 : desired_status; - apply_desired = true; - - // sound out desired status - switch (desired_status) { - case SoccerDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + "Start soccer demonstration.mp3"); - break; - - case VisionDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + - "Start vision processing demonstration.mp3"); - break; - - case ActionDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + "Start motion demonstration.mp3"); - break; - - default: - break; - } - - ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } else if (msg->data == "mode") { - // change to next demo - desired_status = (desired_status + 1) % DemoCount; - desired_status = - (desired_status == Ready) ? desired_status + 1 : desired_status; - - // sound out desired status and changing LED - switch (desired_status) { - case SoccerDemo: - playSound(default_mp3_path + "Autonomous soccer mode.mp3"); - setLED(0x01); - break; - - case VisionDemo: - playSound(default_mp3_path + "Vision processing mode.mp3"); - setLED(0x02); - break; - - case ActionDemo: - playSound(default_mp3_path + "Interactive motion mode.mp3"); - setLED(0x04); - break; - - default: - break; - } - - ROS_INFO_COND(DEBUG_PRINT, "= Demo Mode : %d", desired_status); - } - } -} - -void goInitPose() { - std_msgs::String init_msg; - init_msg.data = "ini_pose"; - - init_pose_pub.publish(init_msg); -} - -void playSound(const std::string &path) { - std_msgs::String sound_msg; - sound_msg.data = path; - - play_sound_pub.publish(sound_msg); -} - -void setLED(int led) { - humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem - syncwrite_msg; - syncwrite_msg.item_name = "LED"; - syncwrite_msg.joint_name.push_back("open-cr"); - syncwrite_msg.value.push_back(led); - - led_pub.publish(syncwrite_msg); -} - -bool checkManagerRunning(std::string &manager_name) { - std::vector node_list; - ros::master::getNodes(node_list); - - for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); - node_list_idx++) { - if (node_list[node_list_idx] == manager_name) - return true; - } - - ROS_ERROR("Can't find humanoid_robot_intelligence_control_system_manager"); - return false; -} - -void dxlTorqueChecker() { - std_msgs::String check_msg; - check_msg.data = "check"; - - dxl_torque_pub.publish(check_msg); -} - -void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) { - // In demo mode - if (current_status != Ready) { - if (msg->data == "ready") { - // go to mode selection status - desired_status = Ready; - apply_desired = true; - - playSound(default_mp3_path + "Demonstration ready mode.mp3"); - setLED(0x01 | 0x02 | 0x04); - } - } - // In ready mode - else { - if (msg->data == "soccer") { - desired_status = SoccerDemo; - apply_desired = true; - - // play sound - dxlTorqueChecker(); - playSound(default_mp3_path + "Start soccer demonstration.mp3"); - ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } else if (msg->data == "vision") { - desired_status = VisionDemo; - apply_desired = true; - - // play sound - dxlTorqueChecker(); - playSound(default_mp3_path + "Start vision processing demonstration.mp3"); - ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } else if (msg->data == "action") { - desired_status = ActionDemo; - apply_desired = true; - - // play sound - dxlTorqueChecker(); - playSound(default_mp3_path + "Start motion demonstration.mp3"); - ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } - } -} diff --git a/humanoid_robot_intelligence_control_system_demo/src/soccer/ball_follower.cpp b/humanoid_robot_intelligence_control_system_demo/src/soccer/ball_follower.cpp deleted file mode 100644 index 98916b3..0000000 --- a/humanoid_robot_intelligence_control_system_demo/src/soccer/ball_follower.cpp +++ /dev/null @@ -1,325 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include "humanoid_robot_intelligence_control_system_demo/ball_follower.h" - -namespace humanoid_robot_intelligence_control_system_op { - -BallFollower::BallFollower() - : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), - FOV_HEIGHT(21.6 * M_PI / 180), count_not_found_(0), count_to_kick_(0), - on_tracking_(false), approach_ball_position_(NotFound), - kick_motion_index_(83), CAMERA_HEIGHT(0.46), NOT_FOUND_THRESHOLD(50), - MAX_FB_STEP(40.0 * 0.001), MAX_RL_TURN(15.0 * M_PI / 180), - IN_PLACE_FB_STEP(-3.0 * 0.001), MIN_FB_STEP(5.0 * 0.001), - MIN_RL_TURN(5.0 * M_PI / 180), UNIT_FB_STEP(1.0 * 0.001), - UNIT_RL_TURN(0.5 * M_PI / 180), SPOT_FB_OFFSET(0.0 * 0.001), - SPOT_RL_OFFSET(0.0 * 0.001), SPOT_ANGLE_OFFSET(0.0), - hip_pitch_offset_(7.0), current_pan_(-10), current_tilt_(-10), - current_x_move_(0.005), current_r_angle_(0), curr_period_time_(0.6), - accum_period_time_(0.0), DEBUG_PRINT(false) { - current_joint_states_sub_ = - nh_.subscribe("/humanoid_robot_intelligence_control_system/goal_joint_states", 10, - &BallFollower::currentJointStatesCallback, this); - - set_walking_command_pub_ = - nh_.advertise("/humanoid_robot_intelligence_control_system/walking/command", 0); - set_walking_param_pub_ = - nh_.advertise( - "/humanoid_robot_intelligence_control_system/walking/set_params", 0); - get_walking_param_client_ = - nh_.serviceClient( - "/humanoid_robot_intelligence_control_system/walking/get_params"); - - prev_time_ = ros::Time::now(); -} - -BallFollower::~BallFollower() {} - -void BallFollower::startFollowing() { - on_tracking_ = true; - ROS_INFO("Start Ball following"); - - setWalkingCommand("start"); - - bool result = getWalkingParam(); - if (result == true) { - hip_pitch_offset_ = current_walking_param_.hip_pitch_offset; - curr_period_time_ = current_walking_param_.period_time; - } else { - hip_pitch_offset_ = 7.0 * M_PI / 180; - curr_period_time_ = 0.6; - } -} - -void BallFollower::stopFollowing() { - on_tracking_ = false; - // approach_ball_position_ = NotFound; - count_to_kick_ = 0; - // accum_ball_position_ = 0; - ROS_INFO("Stop Ball following"); - - setWalkingCommand("stop"); -} - -void BallFollower::currentJointStatesCallback( - const sensor_msgs::JointState::ConstPtr &msg) { - double pan, tilt; - int get_count = 0; - - for (int ix = 0; ix < msg->name.size(); ix++) { - if (msg->name[ix] == "head_pan") { - pan = msg->position[ix]; - get_count += 1; - } else if (msg->name[ix] == "head_tilt") { - tilt = msg->position[ix]; - get_count += 1; - } - - if (get_count == 2) - break; - } - - // check variation - current_pan_ = pan; - current_tilt_ = tilt; -} - -void BallFollower::calcFootstep(double target_distance, double target_angle, - double delta_time, double &fb_move, - double &rl_angle) { - // clac fb - double next_movement = current_x_move_; - if (target_distance < 0) - target_distance = 0.0; - - double fb_goal = fmin(target_distance * 0.1, MAX_FB_STEP); - accum_period_time_ += delta_time; - if (accum_period_time_ > (curr_period_time_ / 4)) { - accum_period_time_ = 0.0; - if ((target_distance * 0.1 / 2) < current_x_move_) - next_movement -= UNIT_FB_STEP; - else - next_movement += UNIT_FB_STEP; - } - fb_goal = fmin(next_movement, fb_goal); - fb_move = fmax(fb_goal, MIN_FB_STEP); - ROS_INFO_COND(DEBUG_PRINT, - "distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", - target_distance, fb_move, delta_time); - ROS_INFO_COND(DEBUG_PRINT, "=============================================="); - - // calc rl angle - double rl_goal = 0.0; - if (fabs(target_angle) * 180 / M_PI > 5.0) { - double rl_offset = fabs(target_angle) * 0.2; - rl_goal = fmin(rl_offset, MAX_RL_TURN); - rl_goal = fmax(rl_goal, MIN_RL_TURN); - rl_angle = fmin(fabs(current_r_angle_) + UNIT_RL_TURN, rl_goal); - - if (target_angle < 0) - rl_angle *= (-1); - } -} - -// x_angle : ball position (pan), y_angle : ball position (tilt), ball_size : -// angle of ball radius -bool BallFollower::processFollowing(double x_angle, double y_angle, - double ball_size) { - ros::Time curr_time = ros::Time::now(); - ros::Duration dur = curr_time - prev_time_; - double delta_time = dur.nsec * 0.000000001 + dur.sec; - prev_time_ = curr_time; - - count_not_found_ = 0; - // int ball_position_sum = 0; - - // check of getting head joints angle - if (current_tilt_ == -10 && current_pan_ == -10) { - ROS_ERROR("Failed to get current angle of head joints."); - setWalkingCommand("stop"); - - on_tracking_ = false; - approach_ball_position_ = NotFound; - return false; - } - - ROS_INFO_COND(DEBUG_PRINT, " ============== Head | Ball ============== "); - ROS_INFO_STREAM_COND(DEBUG_PRINT, - "== Head Pan : " << (current_pan_ * 180 / M_PI) - << " | Ball X : " - << (x_angle * 180 / M_PI)); - ROS_INFO_STREAM_COND(DEBUG_PRINT, - "== Head Tilt : " << (current_tilt_ * 180 / M_PI) - << " | Ball Y : " - << (y_angle * 180 / M_PI)); - - approach_ball_position_ = OutOfRange; - - double distance_to_ball = CAMERA_HEIGHT * tan(M_PI * 0.5 + current_tilt_ - - hip_pitch_offset_ - ball_size); - - double ball_y_angle = (current_tilt_ + y_angle) * 180 / M_PI; - double ball_x_angle = (current_pan_ + x_angle) * 180 / M_PI; - - if (distance_to_ball < 0) - distance_to_ball *= (-1); - - // double distance_to_kick = 0.25; - double distance_to_kick = 0.22; - - // check whether ball is correct position. - if ((distance_to_ball < distance_to_kick) && (fabs(ball_x_angle) < 25.0)) { - count_to_kick_ += 1; - - ROS_INFO_STREAM_COND(DEBUG_PRINT, - "head pan : " << (current_pan_ * 180 / M_PI) - << " | ball pan : " - << (x_angle * 180 / M_PI)); - ROS_INFO_STREAM_COND(DEBUG_PRINT, - "head tilt : " << (current_tilt_ * 180 / M_PI) - << " | ball tilt : " - << (y_angle * 180 / M_PI)); - ROS_INFO_STREAM_COND(DEBUG_PRINT, "foot to kick : " << ball_x_angle); - - ROS_INFO("In range [%d | %f]", count_to_kick_, ball_x_angle); - - // ball queue - // if(ball_position_queue_.size() >= 5) - // ball_position_queue_.erase(ball_position_queue_.begin()); - - // ball_position_queue_.push_back((ball_x_angle > 0) ? 1 : -1); - - if (count_to_kick_ > 20) { - setWalkingCommand("stop"); - on_tracking_ = false; - - // check direction of the ball - // accum_ball_position_ = - // std::accumulate(ball_position_queue_.begin(), - // ball_position_queue_.end(), 0); - - // if (accum_ball_position_ > 0) - if (ball_x_angle > 0) { - ROS_INFO_COND(DEBUG_PRINT, "Ready to kick : left"); // left - approach_ball_position_ = OnLeft; - } else { - ROS_INFO_COND(DEBUG_PRINT, "Ready to kick : right"); // right - approach_ball_position_ = OnRight; - } - - return true; - } else if (count_to_kick_ > 15) { - // if (ball_x_angle > 0) - // accum_ball_position_ += 1; - // else - // accum_ball_position_ -= 1; - - // send message - setWalkingParam(IN_PLACE_FB_STEP, 0, 0); - - return false; - } - } else { - count_to_kick_ = 0; - // accum_ball_position_ = NotFound; - } - - double fb_move = 0.0, rl_angle = 0.0; - double distance_to_walk = distance_to_ball - distance_to_kick; - - calcFootstep(distance_to_walk, current_pan_, delta_time, fb_move, rl_angle); - - // send message - setWalkingParam(fb_move, 0, rl_angle); - - // for debug - // ROS_INFO("distance to ball : %6.4f, fb : %6.4f, delta : %6.6f", - // distance_to_ball, fb_move, delta_time); - - return false; -} - -void BallFollower::decideBallPositin(double x_angle, double y_angle) { - // check of getting head joints angle - if (current_tilt_ == -10 && current_pan_ == -10) { - approach_ball_position_ = NotFound; - return; - } - - double ball_x_angle = current_pan_ + x_angle; - - if (ball_x_angle > 0) - approach_ball_position_ = OnLeft; - else - approach_ball_position_ = OnRight; -} - -void BallFollower::waitFollowing() { - count_not_found_++; - - if (count_not_found_ > NOT_FOUND_THRESHOLD * 0.5) - setWalkingParam(0.0, 0.0, 0.0); -} - -void BallFollower::setWalkingCommand(const std::string &command) { - // get param - if (command == "start") { - getWalkingParam(); - setWalkingParam(IN_PLACE_FB_STEP, 0, 0, true); - } - - std_msgs::String _command_msg; - _command_msg.data = command; - set_walking_command_pub_.publish(_command_msg); - - ROS_INFO_STREAM_COND(DEBUG_PRINT, "Send Walking command : " << command); -} - -void BallFollower::setWalkingParam(double x_move, double y_move, - double rotation_angle, bool balance) { - current_walking_param_.balance_enable = balance; - current_walking_param_.x_move_amplitude = x_move + SPOT_FB_OFFSET; - current_walking_param_.y_move_amplitude = y_move + SPOT_RL_OFFSET; - current_walking_param_.angle_move_amplitude = - rotation_angle + SPOT_ANGLE_OFFSET; - - set_walking_param_pub_.publish(current_walking_param_); - - current_x_move_ = x_move; - current_r_angle_ = rotation_angle; -} - -bool BallFollower::getWalkingParam() { - humanoid_robot_intelligence_control_system_walking_module_msgs::GetWalkingParam walking_param_msg; - - if (get_walking_param_client_.call(walking_param_msg)) { - current_walking_param_ = walking_param_msg.response.parameters; - - // update ui - ROS_INFO_COND(DEBUG_PRINT, "Get walking parameters"); - - return true; - } else { - ROS_ERROR("Fail to get walking parameters."); - - return false; - } -} - -} // namespace humanoid_robot_intelligence_control_system_op diff --git a/humanoid_robot_intelligence_control_system_demo/src/soccer/ball_tracker.cpp b/humanoid_robot_intelligence_control_system_demo/src/soccer/ball_tracker.cpp deleted file mode 100644 index 9cbeba4..0000000 --- a/humanoid_robot_intelligence_control_system_demo/src/soccer/ball_tracker.cpp +++ /dev/null @@ -1,267 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include "humanoid_robot_intelligence_control_system_demo/ball_tracker.h" - -namespace humanoid_robot_intelligence_control_system_op { - -BallTracker::BallTracker() - : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), - FOV_HEIGHT(21.6 * M_PI / 180), NOT_FOUND_THRESHOLD(50), - WAITING_THRESHOLD(5), use_head_scan_(true), count_not_found_(0), - on_tracking_(false), current_ball_pan_(0), current_ball_tilt_(0), - x_error_sum_(0), y_error_sum_(0), current_ball_bottom_(0), - tracking_status_(NotFound), DEBUG_PRINT(false) { - ros::NodeHandle param_nh("~"); - p_gain_ = param_nh.param("p_gain", 0.4); - i_gain_ = param_nh.param("i_gain", 0.0); - d_gain_ = param_nh.param("d_gain", 0.0); - - ROS_INFO_STREAM("Ball tracking Gain : " << p_gain_ << ", " << i_gain_ << ", " - << d_gain_); - - head_joint_offset_pub_ = nh_.advertise( - "/humanoid_robot_intelligence_control_system/head_control/set_joint_states_offset", 0); - head_joint_pub_ = nh_.advertise( - "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", 0); - head_scan_pub_ = nh_.advertise( - "/humanoid_robot_intelligence_control_system/head_control/scan_command", 0); - // error_pub_ = - // nh_.advertise("/ball_tracker/errors", 0); - - ball_position_sub_ = nh_.subscribe("/ball_detector_node/circle_set", 1, - &BallTracker::ballPositionCallback, this); - ball_tracking_command_sub_ = - nh_.subscribe("/ball_tracker/command", 1, - &BallTracker::ballTrackerCommandCallback, this); -} - -BallTracker::~BallTracker() {} - -void BallTracker::ballPositionCallback( - const humanoid_robot_intelligence_control_system_ball_detector::CircleSetStamped::ConstPtr &msg) { - for (int idx = 0; idx < msg->circles.size(); idx++) { - if (ball_position_.z >= msg->circles[idx].z) - continue; - - ball_position_ = msg->circles[idx]; - } -} - -void BallTracker::ballTrackerCommandCallback( - const std_msgs::String::ConstPtr &msg) { - if (msg->data == "start") { - startTracking(); - } else if (msg->data == "stop") { - stopTracking(); - } else if (msg->data == "toggle_start") { - if (on_tracking_ == false) - startTracking(); - else - stopTracking(); - } -} - -void BallTracker::startTracking() { - on_tracking_ = true; - ROS_INFO_COND(DEBUG_PRINT, "Start Ball tracking"); -} - -void BallTracker::stopTracking() { - goInit(); - - on_tracking_ = false; - ROS_INFO_COND(DEBUG_PRINT, "Stop Ball tracking"); - - current_ball_pan_ = 0; - current_ball_tilt_ = 0; - x_error_sum_ = 0; - y_error_sum_ = 0; -} - -void BallTracker::setUsingHeadScan(bool use_scan) { use_head_scan_ = use_scan; } - -int BallTracker::processTracking() { - int tracking_status = Found; - - if (on_tracking_ == false) { - ball_position_.z = 0; - count_not_found_ = 0; - return NotFound; - } - - // check ball position - if (ball_position_.z <= 0) { - count_not_found_++; - - if (count_not_found_ < WAITING_THRESHOLD) { - if (tracking_status_ == Found || tracking_status_ == Waiting) - tracking_status = Waiting; - else - tracking_status = NotFound; - } else if (count_not_found_ > NOT_FOUND_THRESHOLD) { - scanBall(); - count_not_found_ = 0; - tracking_status = NotFound; - } else { - tracking_status = NotFound; - } - } else { - count_not_found_ = 0; - } - - // if ball is found - // convert ball position to desired angle(rad) of head - // ball_position : top-left is (-1, -1), bottom-right is (+1, +1) - // offset_rad : top-left(+, +), bottom-right(-, -) - double x_error = 0.0, y_error = 0.0, ball_size = 0.0; - - switch (tracking_status) { - case NotFound: - tracking_status_ = tracking_status; - current_ball_pan_ = 0; - current_ball_tilt_ = 0; - x_error_sum_ = 0; - y_error_sum_ = 0; - return tracking_status; - - case Waiting: - tracking_status_ = tracking_status; - return tracking_status; - - case Found: - x_error = -atan(ball_position_.x * tan(FOV_WIDTH)); - y_error = -atan(ball_position_.y * tan(FOV_HEIGHT)); - ball_size = ball_position_.z; - break; - - default: - break; - } - - ROS_INFO_STREAM_COND( - DEBUG_PRINT, - "--------------------------------------------------------------"); - ROS_INFO_STREAM_COND(DEBUG_PRINT, "Ball position : " << ball_position_.x - << " | " - << ball_position_.y); - ROS_INFO_STREAM_COND(DEBUG_PRINT, - "Target angle : " << (x_error * 180 / M_PI) << " | " - << (y_error * 180 / M_PI)); - - ros::Time curr_time = ros::Time::now(); - ros::Duration dur = curr_time - prev_time_; - double delta_time = dur.nsec * 0.000000001 + dur.sec; - prev_time_ = curr_time; - - double x_error_diff = (x_error - current_ball_pan_) / delta_time; - double y_error_diff = (y_error - current_ball_tilt_) / delta_time; - x_error_sum_ += x_error; - y_error_sum_ += y_error; - double x_error_target = - x_error * p_gain_ + x_error_diff * d_gain_ + x_error_sum_ * i_gain_; - double y_error_target = - y_error * p_gain_ + y_error_diff * d_gain_ + y_error_sum_ * i_gain_; - - // std_msgs::Float64MultiArray x_error_msg; - // x_error_msg.data.push_back(x_error); - // x_error_msg.data.push_back(x_error_diff); - // x_error_msg.data.push_back(x_error_sum_); - // x_error_msg.data.push_back(x_error * p_gain_); - // x_error_msg.data.push_back(x_error_diff * d_gain_); - // x_error_msg.data.push_back(x_error_sum_ * i_gain_); - // x_error_msg.data.push_back(x_error_target); - // error_pub_.publish(x_error_msg); - - ROS_INFO_STREAM_COND(DEBUG_PRINT, - "------------------------ " - << tracking_status - << " --------------------------------------"); - ROS_INFO_STREAM_COND(DEBUG_PRINT, - "error : " << (x_error * 180 / M_PI) << " | " - << (y_error * 180 / M_PI)); - ROS_INFO_STREAM_COND(DEBUG_PRINT, "error_diff : " - << (x_error_diff * 180 / M_PI) << " | " - << (y_error_diff * 180 / M_PI) << " | " - << delta_time); - ROS_INFO_STREAM_COND(DEBUG_PRINT, - "error_sum : " << (x_error_sum_ * 180 / M_PI) << " | " - << (y_error_sum_ * 180 / M_PI)); - ROS_INFO_STREAM_COND( - DEBUG_PRINT, "error_target : " << (x_error_target * 180 / M_PI) << " | " - << (y_error_target * 180 / M_PI) - << " | P : " << p_gain_ << " | D : " - << d_gain_ << " | time : " << delta_time); - - // move head joint - publishHeadJoint(x_error_target, y_error_target); - - // args for following ball - current_ball_pan_ = x_error; - current_ball_tilt_ = y_error; - current_ball_bottom_ = ball_size; - - ball_position_.z = 0; - - tracking_status_ = tracking_status; - return tracking_status; -} - -void BallTracker::publishHeadJoint(double pan, double tilt) { - double min_angle = 1 * M_PI / 180; - if (fabs(pan) < min_angle && fabs(tilt) < min_angle) - return; - - sensor_msgs::JointState head_angle_msg; - - head_angle_msg.name.push_back("head_pan"); - head_angle_msg.name.push_back("head_tilt"); - - head_angle_msg.position.push_back(pan); - head_angle_msg.position.push_back(tilt); - - head_joint_offset_pub_.publish(head_angle_msg); -} - -void BallTracker::goInit() { - sensor_msgs::JointState head_angle_msg; - - head_angle_msg.name.push_back("head_pan"); - head_angle_msg.name.push_back("head_tilt"); - - head_angle_msg.position.push_back(0.0); - head_angle_msg.position.push_back(0.0); - - head_joint_pub_.publish(head_angle_msg); -} - -void BallTracker::scanBall() { - if (use_head_scan_ == false) - return; - - // check head control module enabled - // ... - - // send message to head control module - std_msgs::String scan_msg; - scan_msg.data = "scan"; - - head_scan_pub_.publish(scan_msg); -} - -} // namespace humanoid_robot_intelligence_control_system_op diff --git a/humanoid_robot_intelligence_control_system_demo/src/soccer/soccer_demo.cpp b/humanoid_robot_intelligence_control_system_demo/src/soccer/soccer_demo.cpp deleted file mode 100644 index 3a0bba6..0000000 --- a/humanoid_robot_intelligence_control_system_demo/src/soccer/soccer_demo.cpp +++ /dev/null @@ -1,619 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include "humanoid_robot_intelligence_control_system_demo/soccer_demo.h" - -namespace humanoid_robot_intelligence_control_system_op { - -SoccerDemo::SoccerDemo() - : FALL_FORWARD_LIMIT(60), FALL_BACK_LIMIT(-60), SPIN_RATE(30), - DEBUG_PRINT(false), wait_count_(0), on_following_ball_(false), - on_tracking_ball_(false), restart_soccer_(false), start_following_(false), - stop_following_(false), stop_fallen_check_(false), robot_status_(Waited), - stand_state_(Stand), tracking_status_(BallTracker::Waiting), - present_pitch_(0) { - // init ros - enable_ = false; - - ros::NodeHandle nh(ros::this_node::getName()); - - std::string default_path = ros::package::getPath("humanoid_robot_intelligence_control_system_gui_demo") + - "/config/gui_config.yaml"; - std::string path = nh.param("demo_config", default_path); - parseJointNameFromYaml(path); - - boost::thread queue_thread = - boost::thread(boost::bind(&SoccerDemo::callbackThread, this)); - boost::thread process_thread = - boost::thread(boost::bind(&SoccerDemo::processThread, this)); - boost::thread tracking_thread = - boost::thread(boost::bind(&SoccerDemo::trackingThread, this)); - - is_grass_ = nh.param("grass_demo", false); -} - -SoccerDemo::~SoccerDemo() {} - -void SoccerDemo::setDemoEnable() { - enable_ = true; - - startSoccerMode(); -} - -void SoccerDemo::setDemoDisable() { - // handle disable procedure - ball_tracker_.stopTracking(); - ball_follower_.stopFollowing(); - - enable_ = false; - wait_count_ = 0; - on_following_ball_ = false; - on_tracking_ball_ = false; - restart_soccer_ = false; - start_following_ = false; - stop_following_ = false; - stop_fallen_check_ = false; - - tracking_status_ = BallTracker::Waiting; -} - -void SoccerDemo::process() { - if (enable_ == false) - return; - - // check to start - if (start_following_ == true) { - ball_tracker_.startTracking(); - ball_follower_.startFollowing(); - start_following_ = false; - - wait_count_ = 1 * SPIN_RATE; - } - - // check to stop - if (stop_following_ == true) { - ball_tracker_.stopTracking(); - ball_follower_.stopFollowing(); - stop_following_ = false; - - wait_count_ = 0; - } - - if (wait_count_ <= 0) { - // ball following - if (on_following_ball_ == true) { - switch (tracking_status_) { - case BallTracker::Found: - ball_follower_.processFollowing(ball_tracker_.getPanOfBall(), - ball_tracker_.getTiltOfBall(), 0.0); - break; - - case BallTracker::NotFound: - ball_follower_.waitFollowing(); - break; - - default: - break; - } - } - - // check fallen states - switch (stand_state_) { - case Stand: { - // check restart soccer - if (restart_soccer_ == true) { - restart_soccer_ = false; - startSoccerMode(); - break; - } - - // check states for kick - // int ball_position = ball_follower_.getBallPosition(); - bool in_range = ball_follower_.isBallInRange(); - - if (in_range == true) { - ball_follower_.stopFollowing(); - handleKick(); - } - break; - } - // fallen state : Fallen_Forward, Fallen_Behind - default: { - ball_follower_.stopFollowing(); - handleFallen(stand_state_); - break; - } - } - } else { - wait_count_ -= 1; - } -} - -void SoccerDemo::processThread() { - bool result = false; - - // set node loop rate - ros::Rate loop_rate(SPIN_RATE); - - ball_tracker_.startTracking(); - - // node loop - while (ros::ok()) { - if (enable_ == true) - process(); - - // relax to fit output rate - loop_rate.sleep(); - } -} - -void SoccerDemo::callbackThread() { - ros::NodeHandle nh(ros::this_node::getName()); - - // subscriber & publisher - module_control_pub_ = - nh.advertise( - "/humanoid_robot_intelligence_control_system/set_joint_ctrl_modules", 0); - motion_index_pub_ = - nh.advertise("/humanoid_robot_intelligence_control_system/action/page_num", 0); - rgb_led_pub_ = nh.advertise( - "/humanoid_robot_intelligence_control_system/sync_write_item", 0); - - buttuon_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, - &SoccerDemo::buttonHandlerCallback, this); - demo_command_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/demo_command", 1, - &SoccerDemo::demoCommandCallback, this); - imu_data_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/imu", 1, - &SoccerDemo::imuDataCallback, this); - - is_running_client_ = - nh.serviceClient( - "/humanoid_robot_intelligence_control_system/action/is_running"); - set_joint_module_client_ = - nh.serviceClient( - "/humanoid_robot_intelligence_control_system/set_present_joint_ctrl_modules"); - - test_pub_ = nh.advertise("/debug_text", 0); - - while (nh.ok()) { - ros::spinOnce(); - - usleep(1000); - } -} - -void SoccerDemo::trackingThread() { - - // set node loop rate - ros::Rate loop_rate(SPIN_RATE); - - ball_tracker_.startTracking(); - - // node loop - while (ros::ok()) { - - if (enable_ == true && on_tracking_ball_ == true) { - // ball tracking - int tracking_status; - - tracking_status = ball_tracker_.processTracking(); - - // set led - switch (tracking_status) { - case BallTracker::Found: - if (tracking_status_ != tracking_status) - setRGBLED(0x1F, 0x1F, 0x1F); - break; - - case BallTracker::NotFound: - if (tracking_status_ != tracking_status) - setRGBLED(0, 0, 0); - break; - - default: - break; - } - - if (tracking_status != tracking_status_) - tracking_status_ = tracking_status; - } - // relax to fit output rate - loop_rate.sleep(); - } -} - -void SoccerDemo::setBodyModuleToDemo(const std::string &body_module, - bool with_head_control) { - humanoid_robot_intelligence_control_system_controller_msgs::JointCtrlModule control_msg; - - std::string head_module = "head_control_module"; - std::map::iterator joint_iter; - - for (joint_iter = id_joint_table_.begin(); - joint_iter != id_joint_table_.end(); ++joint_iter) { - // check whether joint name contains "head" - if (joint_iter->second.find("head") != std::string::npos) { - if (with_head_control == true) { - control_msg.joint_name.push_back(joint_iter->second); - control_msg.module_name.push_back(head_module); - } else - continue; - } else { - control_msg.joint_name.push_back(joint_iter->second); - control_msg.module_name.push_back(body_module); - } - } - - // no control - if (control_msg.joint_name.size() == 0) - return; - - callServiceSettingModule(control_msg); - std::cout << "enable module of body : " << body_module << std::endl; -} - -void SoccerDemo::setModuleToDemo(const std::string &module_name) { - if (enable_ == false) - return; - - humanoid_robot_intelligence_control_system_controller_msgs::JointCtrlModule control_msg; - std::map::iterator joint_iter; - - for (joint_iter = id_joint_table_.begin(); - joint_iter != id_joint_table_.end(); ++joint_iter) { - control_msg.joint_name.push_back(joint_iter->second); - control_msg.module_name.push_back(module_name); - } - - // no control - if (control_msg.joint_name.size() == 0) - return; - - callServiceSettingModule(control_msg); - std::cout << "enable module : " << module_name << std::endl; -} - -void SoccerDemo::callServiceSettingModule( - const humanoid_robot_intelligence_control_system_controller_msgs::JointCtrlModule &modules) { - humanoid_robot_intelligence_control_system_controller_msgs::SetJointModule set_joint_srv; - set_joint_srv.request.joint_name = modules.joint_name; - set_joint_srv.request.module_name = modules.module_name; - - if (set_joint_module_client_.call(set_joint_srv) == false) { - ROS_ERROR("Failed to set module"); - return; - } - - return; -} - -void SoccerDemo::parseJointNameFromYaml(const std::string &path) { - YAML::Node doc; - try { - // load yaml - doc = YAML::LoadFile(path.c_str()); - } catch (const std::exception &e) { - ROS_ERROR("Fail to load id_joint table yaml."); - return; - } - - // parse id_joint table - YAML::Node _id_sub_node = doc["id_joint"]; - for (YAML::iterator _it = _id_sub_node.begin(); _it != _id_sub_node.end(); - ++_it) { - int _id; - std::string _joint_name; - - _id = _it->first.as(); - _joint_name = _it->second.as(); - - id_joint_table_[_id] = _joint_name; - joint_id_table_[_joint_name] = _id; - } -} - -// joint id -> joint name -bool SoccerDemo::getJointNameFromID(const int &id, std::string &joint_name) { - std::map::iterator _iter; - - _iter = id_joint_table_.find(id); - if (_iter == id_joint_table_.end()) - return false; - - joint_name = _iter->second; - return true; -} - -// joint name -> joint id -bool SoccerDemo::getIDFromJointName(const std::string &joint_name, int &id) { - std::map::iterator _iter; - - _iter = joint_id_table_.find(joint_name); - if (_iter == joint_id_table_.end()) - return false; - - id = _iter->second; - return true; -} - -int SoccerDemo::getJointCount() { return joint_id_table_.size(); } - -bool SoccerDemo::isHeadJoint(const int &id) { - std::map::iterator _iter; - - for (_iter = joint_id_table_.begin(); _iter != joint_id_table_.end(); - ++_iter) { - if (_iter->first.find("head") != std::string::npos) - return true; - } - - return false; -} - -void SoccerDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { - if (enable_ == false) - return; - - if (msg->data == "start") { - if (on_following_ball_ == true) - stopSoccerMode(); - else - startSoccerMode(); - } -} - -void SoccerDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) { - if (enable_ == false) - return; - - if (msg->data == "start") { - if (on_following_ball_ == true) - stopSoccerMode(); - else - startSoccerMode(); - } else if (msg->data == "stop") { - stopSoccerMode(); - } -} - -// check fallen states -void SoccerDemo::imuDataCallback(const sensor_msgs::Imu::ConstPtr &msg) { - if (enable_ == false) - return; - - if (stop_fallen_check_ == true) - return; - - Eigen::Quaterniond orientation(msg->orientation.w, msg->orientation.x, - msg->orientation.y, msg->orientation.z); - Eigen::MatrixXd rpy_orientation = - humanoid_robot_intelligence_control_system_framework::convertQuaternionToRPY(orientation); - rpy_orientation *= (180 / M_PI); - - ROS_INFO_COND(DEBUG_PRINT, "Roll : %3.2f, Pitch : %2.2f", - rpy_orientation.coeff(0, 0), rpy_orientation.coeff(1, 0)); - - double pitch = rpy_orientation.coeff(1, 0); - - double alpha = 0.4; - if (present_pitch_ == 0) - present_pitch_ = pitch; - else - present_pitch_ = present_pitch_ * (1 - alpha) + pitch * alpha; - - if (present_pitch_ > FALL_FORWARD_LIMIT) - stand_state_ = Fallen_Forward; - else if (present_pitch_ < FALL_BACK_LIMIT) - stand_state_ = Fallen_Behind; - else - stand_state_ = Stand; -} - -void SoccerDemo::startSoccerMode() { - setModuleToDemo("action_module"); - - playMotion(WalkingReady); - - setBodyModuleToDemo("walking_module"); - - ROS_INFO("Start Soccer Demo"); - on_following_ball_ = true; - on_tracking_ball_ = true; - start_following_ = true; -} - -void SoccerDemo::stopSoccerMode() { - ROS_INFO("Stop Soccer Demo"); - on_following_ball_ = false; - on_tracking_ball_ = false; - stop_following_ = true; -} - -void SoccerDemo::handleKick(int ball_position) { - usleep(1500 * 1000); - - // change to motion module - setModuleToDemo("action_module"); - - if (handleFallen(stand_state_) == true || enable_ == false) - return; - - // kick motion - switch (ball_position) { - case humanoid_robot_intelligence_control_system_op::BallFollower::OnRight: - std::cout << "Kick Motion [R]: " << ball_position << std::endl; - playMotion(is_grass_ ? RightKick + ForGrass : RightKick); - break; - - case humanoid_robot_intelligence_control_system_op::BallFollower::OnLeft: - std::cout << "Kick Motion [L]: " << ball_position << std::endl; - playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); - break; - - default: - break; - } - - on_following_ball_ = false; - restart_soccer_ = true; - tracking_status_ = BallTracker::NotFound; - ball_follower_.clearBallPosition(); - - usleep(2000 * 1000); - - if (handleFallen(stand_state_) == true) - return; - - // ceremony - // playMotion(Ceremony); -} - -void SoccerDemo::handleKick() { - usleep(1500 * 1000); - - // change to motion module - setModuleToDemo("action_module"); - - if (handleFallen(stand_state_) == true || enable_ == false) - return; - - // kick motion - ball_follower_.decideBallPositin(ball_tracker_.getPanOfBall(), - ball_tracker_.getTiltOfBall()); - int ball_position = ball_follower_.getBallPosition(); - if (ball_position == BallFollower::NotFound || - ball_position == BallFollower::OutOfRange) { - on_following_ball_ = false; - restart_soccer_ = true; - tracking_status_ = BallTracker::NotFound; - ball_follower_.clearBallPosition(); - return; - } - - switch (ball_position) { - case humanoid_robot_intelligence_control_system_op::BallFollower::OnRight: - std::cout << "Kick Motion [R]: " << ball_position << std::endl; - sendDebugTopic("Kick the ball using Right foot"); - playMotion(is_grass_ ? RightKick + ForGrass : RightKick); - break; - - case humanoid_robot_intelligence_control_system_op::BallFollower::OnLeft: - std::cout << "Kick Motion [L]: " << ball_position << std::endl; - sendDebugTopic("Kick the ball using Left foot"); - playMotion(is_grass_ ? LeftKick + ForGrass : LeftKick); - break; - - default: - break; - } - - on_following_ball_ = false; - restart_soccer_ = true; - tracking_status_ = BallTracker::NotFound; - ball_follower_.clearBallPosition(); - - usleep(2000 * 1000); - - if (handleFallen(stand_state_) == true) - return; - - // ceremony - // playMotion(Ceremony); -} - -bool SoccerDemo::handleFallen(int fallen_status) { - if (fallen_status == Stand) { - return false; - } - - // change to motion module - setModuleToDemo("action_module"); - - // getup motion - switch (fallen_status) { - case Fallen_Forward: - std::cout << "Getup Motion [F]: " << std::endl; - playMotion(is_grass_ ? GetUpFront + ForGrass : GetUpFront); - break; - - case Fallen_Behind: - std::cout << "Getup Motion [B]: " << std::endl; - playMotion(is_grass_ ? GetUpBack + ForGrass : GetUpBack); - break; - - default: - break; - } - - while (isActionRunning() == true) - usleep(100 * 1000); - - usleep(650 * 1000); - - if (on_following_ball_ == true) - restart_soccer_ = true; - - // reset state - on_following_ball_ = false; - - return true; -} - -void SoccerDemo::playMotion(int motion_index) { - std_msgs::Int32 motion_msg; - motion_msg.data = motion_index; - - motion_index_pub_.publish(motion_msg); -} - -void SoccerDemo::setRGBLED(int blue, int green, int red) { - int led_full_unit = 0x1F; - int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | - (red & led_full_unit); - humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; - syncwrite_msg.item_name = "LED_RGB"; - syncwrite_msg.joint_name.push_back("open-cr"); - syncwrite_msg.value.push_back(led_value); - - rgb_led_pub_.publish(syncwrite_msg); -} - -// check running of action -bool SoccerDemo::isActionRunning() { - humanoid_robot_intelligence_control_system_action_module_msgs::IsRunning is_running_srv; - - if (is_running_client_.call(is_running_srv) == false) { - ROS_ERROR("Failed to get action status"); - return true; - } else { - if (is_running_srv.response.is_running == true) { - return true; - } - } - - return false; -} - -void SoccerDemo::sendDebugTopic(const std::string &msgs) { - std_msgs::String debug_msg; - debug_msg.data = msgs; - - test_pub_.publish(debug_msg); -} - -} // namespace humanoid_robot_intelligence_control_system_op diff --git a/humanoid_robot_intelligence_control_system_demo/src/test/button_test.cpp b/humanoid_robot_intelligence_control_system_demo/src/test/button_test.cpp deleted file mode 100644 index d6ea5a0..0000000 --- a/humanoid_robot_intelligence_control_system_demo/src/test/button_test.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include "humanoid_robot_intelligence_control_system_demo/button_test.h" - -namespace humanoid_robot_intelligence_control_system_op { - -ButtonTest::ButtonTest() : SPIN_RATE(30), led_count_(0), rgb_led_count_(0) { - enable_ = false; - - ros::NodeHandle nh(ros::this_node::getName()); - - boost::thread queue_thread = - boost::thread(boost::bind(&ButtonTest::callbackThread, this)); - boost::thread process_thread = - boost::thread(boost::bind(&ButtonTest::processThread, this)); - - default_mp3_path_ = - ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/data/mp3/test/"; -} - -ButtonTest::~ButtonTest() {} - -void ButtonTest::setDemoEnable() { - enable_ = true; - - ROS_INFO("Start Button Test"); -} - -void ButtonTest::setDemoDisable() { enable_ = false; } - -void ButtonTest::process() {} - -void ButtonTest::processThread() { - // set node loop rate - ros::Rate loop_rate(SPIN_RATE); - - // node loop - while (ros::ok()) { - if (enable_ == true) - process(); - - // relax to fit output rate - loop_rate.sleep(); - } -} - -void ButtonTest::callbackThread() { - ros::NodeHandle nh(ros::this_node::getName()); - - // subscriber & publisher - rgb_led_pub_ = nh.advertise( - "/humanoid_robot_intelligence_control_system/sync_write_item", 0); - play_sound_pub_ = nh.advertise("/play_sound_file", 0); - - buttuon_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, - &ButtonTest::buttonHandlerCallback, this); - - while (nh.ok()) { - ros::spinOnce(); - - usleep(1 * 1000); - } -} - -// button test -void ButtonTest::buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { - if (enable_ == false) - return; - - if (msg->data == "mode") { - playSound(default_mp3_path_ + "Mode button pressed.mp3"); - } else if (msg->data == "start") { - // RGB led color test - playSound(default_mp3_path_ + "Start button pressed.mp3"); - int rgb_selector[3] = {1, 0, 0}; - setRGBLED((0x1F * rgb_selector[rgb_led_count_ % 3]), - (0x1F * rgb_selector[(rgb_led_count_ + 1) % 3]), - (0x1F * rgb_selector[(rgb_led_count_ + 2) % 3])); - rgb_led_count_ += 1; - } else if (msg->data == "user") { - // Monochromatic led color test - playSound(default_mp3_path_ + "User button pressed.mp3"); - setLED(0x01 << (led_count_++ % 3)); - } else if (msg->data == "mode_long") { - playSound(default_mp3_path_ + "Mode button long pressed.mp3"); - } else if (msg->data == "start_long") { - playSound(default_mp3_path_ + "Start button long pressed.mp3"); - } else if (msg->data == "user_long") { - playSound(default_mp3_path_ + "User button long pressed.mp3"); - } -} - -void ButtonTest::setRGBLED(int blue, int green, int red) { - int led_full_unit = 0x1F; - int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | - (red & led_full_unit); - humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; - syncwrite_msg.item_name = "LED_RGB"; - syncwrite_msg.joint_name.push_back("open-cr"); - syncwrite_msg.value.push_back(led_value); - - rgb_led_pub_.publish(syncwrite_msg); -} - -void ButtonTest::setLED(int led) { - humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; - syncwrite_msg.item_name = "LED"; - syncwrite_msg.joint_name.push_back("open-cr"); - syncwrite_msg.value.push_back(led); - - rgb_led_pub_.publish(syncwrite_msg); -} - -void ButtonTest::playSound(const std::string &path) { - std_msgs::String sound_msg; - sound_msg.data = path; - - play_sound_pub_.publish(sound_msg); -} - -} /* namespace humanoid_robot_intelligence_control_system_op */ diff --git a/humanoid_robot_intelligence_control_system_demo/src/test/mic_test.cpp b/humanoid_robot_intelligence_control_system_demo/src/test/mic_test.cpp deleted file mode 100644 index 008755b..0000000 --- a/humanoid_robot_intelligence_control_system_demo/src/test/mic_test.cpp +++ /dev/null @@ -1,238 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include "humanoid_robot_intelligence_control_system_demo/mic_test.h" - -namespace humanoid_robot_intelligence_control_system_op { - -MicTest::MicTest() - : SPIN_RATE(30), is_wait_(false), wait_time_(-1), test_status_(Ready), - record_pid_(-1), play_pid_(-1) { - enable_ = false; - - ros::NodeHandle nh(ros::this_node::getName()); - - boost::thread queue_thread = - boost::thread(boost::bind(&MicTest::callbackThread, this)); - boost::thread process_thread = - boost::thread(boost::bind(&MicTest::processThread, this)); - - recording_file_name_ = ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + - "/data/mp3/test/mic-test.wav"; - default_mp3_path_ = - ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/data/mp3/test/"; - - start_time_ = ros::Time::now(); -} - -MicTest::~MicTest() {} - -void MicTest::setDemoEnable() { - wait_time_ = -1; - test_status_ = AnnounceRecording; - enable_ = true; - - ROS_INFO("Start Mic test Demo"); -} - -void MicTest::setDemoDisable() { - finishTimer(); - - test_status_ = Ready; - enable_ = false; -} - -void MicTest::process() { - // check status - // timer - if (wait_time_ > 0) { - ros::Duration dur = ros::Time::now() - start_time_; - - // check timer - if (dur.sec >= wait_time_) { - finishTimer(); - } - } else if (wait_time_ == -1.0) { - // handle test process - switch (test_status_) { - case Ready: - // do nothing - break; - - case AnnounceRecording: - announceTest(); - test_status_ = MicRecording; - break; - - case MicRecording: - recordSound(); - test_status_ = PlayingSound; - break; - - case PlayingSound: - playTestSound(recording_file_name_); - test_status_ = DeleteTempFile; - break; - - case DeleteTempFile: - deleteSoundFile(recording_file_name_); - test_status_ = Ready; - break; - - default: - break; - } - } -} - -void MicTest::processThread() { - // set node loop rate - ros::Rate loop_rate(SPIN_RATE); - - // node loop - while (ros::ok()) { - if (enable_ == true) - process(); - - // relax to fit output rate - loop_rate.sleep(); - } -} - -void MicTest::callbackThread() { - ros::NodeHandle nh(ros::this_node::getName()); - - // subscriber & publisher - buttuon_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, - &MicTest::buttonHandlerCallback, this); - play_sound_pub_ = nh.advertise("/play_sound_file", 0); - - while (nh.ok()) { - ros::spinOnce(); - - usleep(1 * 1000); - } -} - -void MicTest::buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { - if (enable_ == false) - return; - - if (msg->data == "start") { - // restart mic test - if (test_status_ != Ready) - return; - - test_status_ = AnnounceRecording; - } else if (msg->data == "user") { - is_wait_ = true; - } -} - -void MicTest::announceTest() { - // play mic test sound - playSound(default_mp3_path_ + "Announce mic test.mp3"); - - usleep(3.4 * 1000 * 1000); -} - -void MicTest::recordSound(int recording_time) { - ROS_INFO("Start to record"); - - playSound(default_mp3_path_ + "Start recording.mp3"); - - usleep(1.5 * 1000 * 1000); - - if (record_pid_ != -1) - kill(record_pid_, SIGKILL); - - record_pid_ = fork(); - - switch (record_pid_) { - case -1: - fprintf(stderr, "Fork Failed!! \n"); - ROS_WARN("Fork Failed!! \n"); - break; - - case 0: { - std::stringstream ss; - ss << "-d " << recording_time; - execl("/usr/bin/arecord", "arecord", "-Dplughw:1,0", "-fS16_LE", "-c1", - "-r22050", "-twav", ss.str().c_str(), recording_file_name_.c_str(), - (char *)0); - break; - } - - default: - break; - } - - startTimer(recording_time); -} - -void MicTest::recordSound() { recordSound(5); } - -void MicTest::playTestSound(const std::string &path) { - ROS_INFO("Start to play recording sound"); - - playSound(default_mp3_path_ + "Start playing.mp3"); - - usleep(1.3 * 1000 * 1000); - - if (play_pid_ != -1) - kill(play_pid_, SIGKILL); - - play_pid_ = fork(); - - switch (play_pid_) { - case -1: - fprintf(stderr, "Fork Failed!! \n"); - ROS_WARN("Fork Failed!! \n"); - break; - - case 0: - execl("/usr/bin/aplay", "aplay", path.c_str(), (char *)0); - break; - - default: - break; - } - - startTimer(5); -} - -void MicTest::playSound(const std::string &path) { - std_msgs::String sound_msg; - sound_msg.data = path; - - play_sound_pub_.publish(sound_msg); -} - -void MicTest::deleteSoundFile(const std::string &file_path) { - remove(file_path.c_str()); - ROS_INFO("Delete temporary file"); -} - -void MicTest::startTimer(double wait_time) { - start_time_ = ros::Time::now(); - wait_time_ = wait_time; -} - -void MicTest::finishTimer() { wait_time_ = -1; } - -} /* namespace humanoid_robot_intelligence_control_system_op */ diff --git a/humanoid_robot_intelligence_control_system_demo/src/test_node.cpp b/humanoid_robot_intelligence_control_system_demo/src/test_node.cpp deleted file mode 100644 index 53e1209..0000000 --- a/humanoid_robot_intelligence_control_system_demo/src/test_node.cpp +++ /dev/null @@ -1,393 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include -#include -#include - -#include "humanoid_robot_intelligence_control_system_controller_msgs/SyncWriteItem.h" -#include "humanoid_robot_intelligence_control_system_demo/action_demo.h" -#include "humanoid_robot_intelligence_control_system_demo/button_test.h" -#include "humanoid_robot_intelligence_control_system_demo/mic_test.h" -#include "humanoid_robot_intelligence_control_system_demo/soccer_demo.h" -#include "humanoid_robot_intelligence_control_system_demo/vision_demo.h" -#include "humanoid_robot_intelligence_control_system_math/humanoid_robot_intelligence_control_system_linear_algebra.h" - -enum Demo_Status { - Ready = 0, - ButtonTest = 1, - MicTest = 2, - SoccerDemo = 3, - VisionDemo = 4, - ActionDemo = 5, - DemoCount = 6, -}; - -void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg); -void goInitPose(); -void playSound(const std::string &path); -void setLED(int led); -bool checkManagerRunning(std::string &manager_name); -void dxlTorqueChecker(); - -void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg); - -const int SPIN_RATE = 30; -const bool DEBUG_PRINT = true; - -ros::Publisher init_pose_pub; -ros::Publisher play_sound_pub; -ros::Publisher led_pub; -ros::Publisher dxl_torque_pub; - -std::string default_mp3_path = ""; -int current_status = Ready; -int desired_status = Ready; -bool apply_desired = false; - -// node main -int main(int argc, char **argv) { - // init ros - ros::init(argc, argv, "self_test_node"); - - // create ros wrapper object - humanoid_robot_intelligence_control_system_op::OPDemo *current_demo = NULL; - humanoid_robot_intelligence_control_system_op::SoccerDemo *soccer_demo = - new humanoid_robot_intelligence_control_system_op::SoccerDemo(); - humanoid_robot_intelligence_control_system_op::ActionDemo *action_demo = - new humanoid_robot_intelligence_control_system_op::ActionDemo(); - humanoid_robot_intelligence_control_system_op::VisionDemo *vision_demo = - new humanoid_robot_intelligence_control_system_op::VisionDemo(); - humanoid_robot_intelligence_control_system_op::ButtonTest *button_test = - new humanoid_robot_intelligence_control_system_op::ButtonTest(); - humanoid_robot_intelligence_control_system_op::MicTest *mic_test = new humanoid_robot_intelligence_control_system_op::MicTest(); - - ros::NodeHandle nh(ros::this_node::getName()); - - init_pose_pub = - nh.advertise("/humanoid_robot_intelligence_control_system/base/ini_pose", 0); - play_sound_pub = nh.advertise("/play_sound_file", 0); - led_pub = nh.advertise( - "/humanoid_robot_intelligence_control_system/sync_write_item", 0); - dxl_torque_pub = - nh.advertise("/humanoid_robot_intelligence_control_system/dxl_torque", 0); - ros::Subscriber buttuon_sub = - nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, buttonHandlerCallback); - ros::Subscriber mode_command_sub = - nh.subscribe("/humanoid_robot_intelligence_control_system/mode_command", 1, demoModeCommandCallback); - - default_mp3_path = - ros::package::getPath("humanoid_robot_intelligence_control_system_demo") + "/data/mp3/"; - - ros::start(); - - // set node loop rate - ros::Rate loop_rate(SPIN_RATE); - - // wait for starting of manager - std::string manager_name = "/humanoid_robot_intelligence_control_system_manager"; - while (ros::ok()) { - ros::Duration(1.0).sleep(); - - if (checkManagerRunning(manager_name) == true) { - break; - ROS_INFO_COND(DEBUG_PRINT, "Succeed to connect"); - } - ROS_WARN("Waiting for humanoid_robot_intelligence_control_system manager"); - } - - // init procedure - playSound(default_mp3_path + "test/Self test ready mode.mp3"); - setLED(0x01 | 0x02 | 0x04); - - // node loop - while (ros::ok()) { - // process - if (apply_desired == true) { - switch (desired_status) { - case Ready: { - - if (current_demo != NULL) - current_demo->setDemoDisable(); - - current_demo = NULL; - - goInitPose(); - - ROS_INFO_COND(DEBUG_PRINT, "[Go to Demo READY!]"); - break; - } - - case SoccerDemo: { - if (current_demo != NULL) - current_demo->setDemoDisable(); - - current_demo = soccer_demo; - current_demo->setDemoEnable(); - - ROS_INFO_COND(DEBUG_PRINT, "[Start] Soccer Demo"); - break; - } - - case VisionDemo: { - if (current_demo != NULL) - current_demo->setDemoDisable(); - - current_demo = vision_demo; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Vision Demo"); - break; - } - case ActionDemo: { - if (current_demo != NULL) - current_demo->setDemoDisable(); - - current_demo = action_demo; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Action Demo"); - break; - } - case ButtonTest: { - if (current_demo != NULL) - current_demo->setDemoDisable(); - - current_demo = button_test; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Button Test"); - break; - } - case MicTest: { - if (current_demo != NULL) - current_demo->setDemoDisable(); - - current_demo = mic_test; - current_demo->setDemoEnable(); - ROS_INFO_COND(DEBUG_PRINT, "[Start] Mic Test"); - break; - } - - default: { - break; - } - } - - apply_desired = false; - current_status = desired_status; - } - - // execute pending callbacks - ros::spinOnce(); - - // relax to fit output rate - loop_rate.sleep(); - - // for debug - if (checkManagerRunning(manager_name) == false) - return 0; - } - - // exit program - return 0; -} - -void buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { - if (apply_desired == true) - return; - - // in the middle of playing demo - if (current_status != Ready) { - if (msg->data == "mode_long") { - // go to mode selection status - desired_status = Ready; - apply_desired = true; - - playSound(default_mp3_path + "test/Self test ready mode.mp3"); - setLED(0x01 | 0x02 | 0x04); - } else if (msg->data == "user_long") { - // it's using in humanoid_robot_intelligence_control_system_manager - // torque on and going to init pose - } - } - // ready to start demo - else { - if (msg->data == "start") { - // select current demo - desired_status = - (desired_status == Ready) ? desired_status + 1 : desired_status; - apply_desired = true; - - // sound out desired status - switch (desired_status) { - case SoccerDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + "Start soccer demonstration.mp3"); - break; - - case VisionDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + - "Start vision processing demonstration.mp3"); - break; - - case ActionDemo: - dxlTorqueChecker(); - playSound(default_mp3_path + "Start motion demonstration.mp3"); - break; - - case ButtonTest: - dxlTorqueChecker(); - playSound(default_mp3_path + "test/Start button test mode.mp3"); - break; - - case MicTest: - dxlTorqueChecker(); - playSound(default_mp3_path + "test/Start mic test mode.mp3"); - break; - - default: - break; - } - - ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } else if (msg->data == "mode") { - // change to next demo - desired_status = (desired_status + 1) % DemoCount; - desired_status = - (desired_status == Ready) ? desired_status + 1 : desired_status; - - // sound out desired status and changign LED - switch (desired_status) { - case SoccerDemo: - playSound(default_mp3_path + "Autonomous soccer mode.mp3"); - setLED(0x01); - break; - - case VisionDemo: - playSound(default_mp3_path + "Vision processing mode.mp3"); - setLED(0x02); - break; - - case ActionDemo: - playSound(default_mp3_path + "Interactive motion mode.mp3"); - setLED(0x04); - break; - - case ButtonTest: - playSound(default_mp3_path + "test/Button test mode.mp3"); - setLED(0x01 | 0x02); - break; - - case MicTest: - playSound(default_mp3_path + "test/Mic test mode.mp3"); - setLED(0x01 | 0x04); - break; - - default: - break; - } - - ROS_INFO_COND(DEBUG_PRINT, "= Demo Mode : %d", desired_status); - } - } -} - -void goInitPose() { - std_msgs::String init_msg; - init_msg.data = "ini_pose"; - - init_pose_pub.publish(init_msg); -} - -void playSound(const std::string &path) { - std_msgs::String sound_msg; - sound_msg.data = path; - - play_sound_pub.publish(sound_msg); -} - -void setLED(int led) { - humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; - syncwrite_msg.item_name = "LED"; - syncwrite_msg.joint_name.push_back("open-cr"); - syncwrite_msg.value.push_back(led); - - led_pub.publish(syncwrite_msg); -} - -bool checkManagerRunning(std::string &manager_name) { - std::vector node_list; - ros::master::getNodes(node_list); - - for (unsigned int node_list_idx = 0; node_list_idx < node_list.size(); - node_list_idx++) { - if (node_list[node_list_idx] == manager_name) - return true; - } - - ROS_ERROR("Can't find humanoid_robot_intelligence_control_system_manager"); - return false; -} - -void dxlTorqueChecker() { - std_msgs::String check_msg; - check_msg.data = "check"; - - dxl_torque_pub.publish(check_msg); -} - -void demoModeCommandCallback(const std_msgs::String::ConstPtr &msg) { - // In demo mode - if (current_status != Ready) { - if (msg->data == "ready") { - // go to mode selection status - desired_status = Ready; - apply_desired = true; - - playSound(default_mp3_path + "Demonstration ready mode.mp3"); - setLED(0x01 | 0x02 | 0x04); - } - } - // In ready mode - else { - if (msg->data == "soccer") { - desired_status = SoccerDemo; - apply_desired = true; - - // play sound - dxlTorqueChecker(); - playSound(default_mp3_path + "Start soccer demonstration.mp3"); - ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } else if (msg->data == "vision") { - desired_status = VisionDemo; - apply_desired = true; - - // play sound - dxlTorqueChecker(); - playSound(default_mp3_path + "Start vision processing demonstration.mp3"); - ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } else if (msg->data == "action") { - desired_status = ActionDemo; - apply_desired = true; - - // play sound - dxlTorqueChecker(); - playSound(default_mp3_path + "Start motion demonstration.mp3"); - ROS_INFO_COND(DEBUG_PRINT, "= Start Demo Mode : %d", desired_status); - } - } -} diff --git a/humanoid_robot_intelligence_control_system_demo/src/vision/face_tracker.cpp b/humanoid_robot_intelligence_control_system_demo/src/vision/face_tracker.cpp deleted file mode 100644 index 20de21e..0000000 --- a/humanoid_robot_intelligence_control_system_demo/src/vision/face_tracker.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include "humanoid_robot_intelligence_control_system_demo/face_tracker.h" - -namespace humanoid_robot_intelligence_control_system_op { - -FaceTracker::FaceTracker() - : nh_(ros::this_node::getName()), FOV_WIDTH(35.2 * M_PI / 180), - FOV_HEIGHT(21.6 * M_PI / 180), NOT_FOUND_THRESHOLD(50), - use_head_scan_(false), count_not_found_(0), on_tracking_(false) { - head_joint_offset_pub_ = nh_.advertise( - "/humanoid_robot_intelligence_control_system/head_control/set_joint_states_offset", 0); - head_joint_pub_ = nh_.advertise( - "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", 0); - head_scan_pub_ = nh_.advertise( - "/humanoid_robot_intelligence_control_system/head_control/scan_command", 0); - - face_position_sub_ = nh_.subscribe("/face_position", 1, - &FaceTracker::facePositionCallback, this); - // face_tracking_command_sub_ = nh_.subscribe("/humanoid_robot_intelligence_control_system/demo_command", - // 1, &FaceTracker::faceTrackerCommandCallback, this); -} - -FaceTracker::~FaceTracker() {} - -void FaceTracker::facePositionCallback( - const geometry_msgs::Point::ConstPtr &msg) { - if (msg->z < 0) - return; - - face_position_ = *msg; -} - -void FaceTracker::faceTrackerCommandCallback( - const std_msgs::String::ConstPtr &msg) { - if (msg->data == "start") { - startTracking(); - } else if (msg->data == "stop") { - stopTracking(); - } else if (msg->data == "toggle_start") { - if (on_tracking_ == false) - startTracking(); - else - stopTracking(); - } -} - -void FaceTracker::startTracking() { - on_tracking_ = true; - - ROS_INFO("Start Face tracking"); -} - -void FaceTracker::stopTracking() { - on_tracking_ = false; - - ROS_INFO("Stop Face tracking"); -} - -void FaceTracker::setUsingHeadScan(bool use_scan) { use_head_scan_ = use_scan; } - -void FaceTracker::setFacePosition(geometry_msgs::Point &face_position) { - if (face_position.z > 0) { - face_position_ = face_position; - } -} - -void FaceTracker::goInit(double init_pan, double init_tile) { - sensor_msgs::JointState head_angle_msg; - - head_angle_msg.name.push_back("head_pan"); - head_angle_msg.name.push_back("head_tilt"); - - head_angle_msg.position.push_back(init_pan); - head_angle_msg.position.push_back(init_tile); - - head_joint_pub_.publish(head_angle_msg); -} - -int FaceTracker::processTracking() { - if (on_tracking_ == false) { - face_position_.z = 0; - count_not_found_ = 0; - // return false; - return Waiting; - } - - // check ball position - if (face_position_.z <= 0) { - count_not_found_++; - - if (count_not_found_ == NOT_FOUND_THRESHOLD) { - scanFace(); - // count_not_found_ = 0; - return NotFound; - } else if (count_not_found_ > NOT_FOUND_THRESHOLD) { - return NotFound; - } else { - return Waiting; - } - - // return false; - } - - // if face is detected - double x_error = -atan(face_position_.x * tan(FOV_WIDTH)); - double y_error = -atan(face_position_.y * tan(FOV_HEIGHT)); - - face_position_.z = 0; - count_not_found_ = 0; - - double p_gain = 0.6, d_gain = 0.25; - double x_error_diff = x_error - current_face_pan_; - double y_error_diff = y_error - current_face_tilt_; - double x_error_target = x_error * p_gain + x_error_diff * d_gain; - double y_error_target = y_error * p_gain + y_error_diff * d_gain; - - // move head joint - publishHeadJoint(x_error_target, y_error_target); - - current_face_pan_ = x_error; - current_face_tilt_ = y_error; - - // return true; - return Found; -} - -void FaceTracker::publishHeadJoint(double pan, double tilt) { - double min_angle = 1 * M_PI / 180; - if (fabs(pan) < min_angle && fabs(tilt) < min_angle) { - dismissed_count_ += 1; - return; - } - std::cout << "Target angle[" << dismissed_count_ << "] : " << pan << " | " - << tilt << std::endl; - - dismissed_count_ = 0; - - sensor_msgs::JointState head_angle_msg; - - head_angle_msg.name.push_back("head_pan"); - head_angle_msg.name.push_back("head_tilt"); - - head_angle_msg.position.push_back(pan); - head_angle_msg.position.push_back(tilt); - - head_joint_offset_pub_.publish(head_angle_msg); -} - -void FaceTracker::scanFace() { - if (use_head_scan_ == false) - return; - - // check head control module enabled - // ... - - // send message to head control module - std_msgs::String scan_msg; - scan_msg.data = "scan"; - - head_scan_pub_.publish(scan_msg); - // ROS_INFO("Scan the ball"); -} - -} // namespace humanoid_robot_intelligence_control_system_op diff --git a/humanoid_robot_intelligence_control_system_demo/src/vision/vision_demo.cpp b/humanoid_robot_intelligence_control_system_demo/src/vision/vision_demo.cpp deleted file mode 100644 index 01e0047..0000000 --- a/humanoid_robot_intelligence_control_system_demo/src/vision/vision_demo.cpp +++ /dev/null @@ -1,227 +0,0 @@ -/******************************************************************************* - * Copyright 2017 ROBOTIS CO., LTD. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -/* Author: Kayman Jung */ - -#include "humanoid_robot_intelligence_control_system_demo/vision_demo.h" - -namespace humanoid_robot_intelligence_control_system_op { - -VisionDemo::VisionDemo() - : SPIN_RATE(30), TIME_TO_INIT(10), tracking_status_(FaceTracker::Waiting) { - enable_ = false; - - ros::NodeHandle nh(ros::this_node::getName()); - - boost::thread queue_thread = - boost::thread(boost::bind(&VisionDemo::callbackThread, this)); - boost::thread process_thread = - boost::thread(boost::bind(&VisionDemo::processThread, this)); -} - -VisionDemo::~VisionDemo() { - // TODO Auto-generated destructor stub -} - -void VisionDemo::setDemoEnable() { - // set prev time for timer - prev_time_ = ros::Time::now(); - - // change to motion module - setModuleToDemo("action_module"); - - playMotion(InitPose); - - usleep(1500 * 1000); - - setModuleToDemo("head_control_module"); - - enable_ = true; - - // send command to start face_tracking - std_msgs::Bool command; - command.data = enable_; - face_tracking_command_pub_.publish(command); - - face_tracker_.startTracking(); - - ROS_INFO("Start Vision Demo"); -} - -void VisionDemo::setDemoDisable() { - - face_tracker_.stopTracking(); - tracking_status_ = FaceTracker::Waiting; - enable_ = false; - - std_msgs::Bool command; - command.data = enable_; - face_tracking_command_pub_.publish(command); -} - -void VisionDemo::process() { - int tracking_status = face_tracker_.processTracking(); - - switch (tracking_status) { - case FaceTracker::Found: - if (tracking_status_ != tracking_status) - setRGBLED(0x1F, 0x1F, 0x1F); - prev_time_ = ros::Time::now(); - break; - - case FaceTracker::NotFound: { - if (tracking_status_ != tracking_status) - setRGBLED(0, 0, 0); - - ros::Time curr_time = ros::Time::now(); - ros::Duration dur = curr_time - prev_time_; - if (dur.sec > TIME_TO_INIT) { - face_tracker_.goInit(0, 0); - prev_time_ = curr_time; - } - break; - } - default: - break; - } - - if (tracking_status != FaceTracker::Waiting) - tracking_status_ = tracking_status; -} - -void VisionDemo::processThread() { - // set node loop rate - ros::Rate loop_rate(SPIN_RATE); - - // node loop - while (ros::ok()) { - if (enable_ == true) - process(); - - // relax to fit output rate - loop_rate.sleep(); - } -} - -void VisionDemo::callbackThread() { - ros::NodeHandle nh(ros::this_node::getName()); - - // subscriber & publisher - module_control_pub_ = - nh.advertise("/humanoid_robot_intelligence_control_system/enable_ctrl_module", 0); - motion_index_pub_ = - nh.advertise("/humanoid_robot_intelligence_control_system/action/page_num", 0); - rgb_led_pub_ = nh.advertise( - "/humanoid_robot_intelligence_control_system/sync_write_item", 0); - face_tracking_command_pub_ = - nh.advertise("/face_tracking/command", 0); - - buttuon_sub_ = nh.subscribe("/humanoid_robot_intelligence_control_system/open_cr/button", 1, - &VisionDemo::buttonHandlerCallback, this); - faceCoord_sub_ = - nh.subscribe("/faceCoord", 1, &VisionDemo::facePositionCallback, this); - - set_joint_module_client_ = - nh.serviceClient( - "/humanoid_robot_intelligence_control_system/set_present_ctrl_modules"); - - while (nh.ok()) { - ros::spinOnce(); - - usleep(1 * 1000); - } -} - -void VisionDemo::buttonHandlerCallback(const std_msgs::String::ConstPtr &msg) { - if (enable_ == false) - return; - - if (msg->data == "start") { - - } else if (msg->data == "mode") { - } -} - -void VisionDemo::demoCommandCallback(const std_msgs::String::ConstPtr &msg) { - if (enable_ == false) - return; - - if (msg->data == "start") { - - } else if (msg->data == "stop") { - } -} - -void VisionDemo::setModuleToDemo(const std::string &module_name) { - callServiceSettingModule(module_name); - ROS_INFO_STREAM("enable module : " << module_name); -} - -void VisionDemo::callServiceSettingModule(const std::string &module_name) { - humanoid_robot_intelligence_control_system_controller_msgs::SetModule set_module_srv; - set_module_srv.request.module_name = module_name; - - if (set_joint_module_client_.call(set_module_srv) == false) { - ROS_ERROR("Failed to set module"); - return; - } - - return; -} - -void VisionDemo::facePositionCallback( - const std_msgs::Int32MultiArray::ConstPtr &msg) { - if (enable_ == false) - return; - - // face is detected - if (msg->data.size() >= 10) { - // center of face - face_position_.x = - (msg->data[6] + msg->data[8] * 0.5) / msg->data[2] * 2 - 1; - face_position_.y = - (msg->data[7] + msg->data[9] * 0.5) / msg->data[3] * 2 - 1; - face_position_.z = msg->data[8] * 0.5 + msg->data[9] * 0.5; - - face_tracker_.setFacePosition(face_position_); - } else { - face_position_.x = 0; - face_position_.y = 0; - face_position_.z = 0; - return; - } -} - -void VisionDemo::playMotion(int motion_index) { - std_msgs::Int32 motion_msg; - motion_msg.data = motion_index; - - motion_index_pub_.publish(motion_msg); -} - -void VisionDemo::setRGBLED(int blue, int green, int red) { - int led_full_unit = 0x1F; - int led_value = (blue & led_full_unit) << 10 | (green & led_full_unit) << 5 | - (red & led_full_unit); - humanoid_robot_intelligence_control_system_controller_msgs::SyncWriteItem syncwrite_msg; - syncwrite_msg.item_name = "LED_RGB"; - syncwrite_msg.joint_name.push_back("open-cr"); - syncwrite_msg.value.push_back(led_value); - - rgb_led_pub_.publish(syncwrite_msg); -} - -} /* namespace humanoid_robot_intelligence_control_system_op */ From cd4f6adefdf04889ef4a8ed4ce6890e116b64931 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 23 Jul 2024 14:06:35 -0400 Subject: [PATCH 158/172] latest pushes --- .../launch/face_tracker.launch.py | 2 +- .../launch/object_follower.launch.py | 2 +- .../launch/object_tracker.launch.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py index 6d4beeb..d7d94dc 100644 --- a/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py +++ b/humanoid_robot_intelligence_control_system_configure/launch/face_tracker.launch.py @@ -25,7 +25,7 @@ def ros1_launch_description(): args = sys.argv[1:] # Construct the ROS 1 launch command - roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "face_follow.launch"] + args + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "face_tracker.launch"] + args roslaunch_command.extend([ "usb_cam", "usb_cam_node", "name:=camera", diff --git a/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py index dba557d..2788682 100644 --- a/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py +++ b/humanoid_robot_intelligence_control_system_configure/launch/object_follower.launch.py @@ -25,7 +25,7 @@ def ros1_launch_description(): args = sys.argv[1:] # Construct the ROS 1 launch command - roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "object_follow.launch"] + args + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "object_follower.launch"] + args roslaunch_command.extend([ "usb_cam", "usb_cam_node", "name:=camera", diff --git a/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py index 892e0cc..49307ae 100644 --- a/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py +++ b/humanoid_robot_intelligence_control_system_configure/launch/object_tracker.launch.py @@ -25,7 +25,7 @@ def ros1_launch_description(): args = sys.argv[1:] # Construct the ROS 1 launch command - roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "object_follow.launch"] + args + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "object_tracker.launch"] + args roslaunch_command.extend([ "usb_cam", "usb_cam_node", "name:=camera", From 7406fc62b02ac16fdce7f4c2c6c3b9e9b86ce454 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 23 Jul 2024 14:19:45 -0400 Subject: [PATCH 159/172] latest pushes --- README.md | 33 ++++++++----------- .../launch/face_follower.launch.py | 2 +- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 3ee5208..8da2494 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos +# Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Architecture [![Website](https://img.shields.io/badge/Visit%20our-Website-0099cc?style=for-the-badge)](https://robotics-sensors.github.io) [![Discord](https://img.shields.io/badge/Join%20our-Discord-7289DA?logo=discord&style=for-the-badge)](https://discord.gg/Yc72nd4w) @@ -6,7 +6,7 @@ ## 🤖 Explore Humanoid Robot Intelligence with Us! -Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos repository! Here, we invite you to delve into the fascinating world of humanoid robotics, showcasing the innovative capabilities of our intelligent control system. +Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System architecture repository! Here, we invite you to delve into the fascinating world of humanoid robotics, showcasing the innovative capabilities of our intelligent control system. ## 💻 Functionality To Switch from ROS to ROS2 Checkout The Below Repository @@ -14,35 +14,28 @@ Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System Demos reposit ### 🚀 Key Repository Stats -- ![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social) Starred by the community -- ![GitHub forks](https://img.shields.io/github/forks/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social) Forked by enthusiasts -- ![GitHub watchers](https://img.shields.io/github/watchers/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg?style=social) Watched by curious minds +- ![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg?style=social) Starred by the community +- ![GitHub forks](https://img.shields.io/github/forks/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg?style=social) Forked by enthusiasts +- ![GitHub watchers](https://img.shields.io/github/watchers/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg?style=social) Watched by curious minds -- ![GitHub issues](https://img.shields.io/github/issues/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg) Actively addressing issues -- ![GitHub pull requests](https://img.shields.io/github/issues-pr/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg) Welcoming contributions -- ![GitHub license](https://img.shields.io/github/license/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg) Licensed under Apache 2.0 +- ![GitHub issues](https://img.shields.io/github/issues/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg) Actively addressing issues +- ![GitHub pull requests](https://img.shields.io/github/issues-pr/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg) Welcoming contributions +- ![GitHub license](https://img.shields.io/github/license/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg) Licensed under Apache 2.0 -- ![GitHub last commit](https://img.shields.io/github/last-commit/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos.svg) Latest updates -- ![Visitor & Github Clones](https://img.shields.io/badge/dynamic/json?color=2e8b57&label=Visitor%20%26%20GitHub%20Clones&query=$.count&url=https://api.github.com/repos/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/traffic) Engaging with the community +- ![GitHub last commit](https://img.shields.io/github/last-commit/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg) Latest updates +- ![Visitor & Github Clones](https://img.shields.io/badge/dynamic/json?color=2e8b57&label=Visitor%20%26%20GitHub%20Clones&query=$.count&url=https://api.github.com/repos/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture/traffic) Engaging with the community --- ## 🌐 Repository Website -Explore our [repository website](https://robotics-sensors.github.io/bellande_humanoid_robot_intelligence_control_system_demos) for detailed documentation, tutorials, and additional information about our humanoid robot intelligence control system. - ---- - -### 🔄 Updates and Versions - -- **Updated Version:** [humanoid_robot_intelligence_control_system_module](https://github.com/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_demos) -- **Old Version/Previous Used for Different Context:** [ROBOTIS-OP3-Demo](https://github.com/ROBOTIS-GIT/ROBOTIS-OP3-Demo) +Explore our [repository website](https://robotics-sensors.github.io/bellande_humanoid_robot_intelligence_control_system_architecture) for detailed documentation, tutorials, and additional information about our humanoid robot intelligence control system. --- # 🎉 Latest Release -[![Latest Release](https://img.shields.io/github/v/release/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_tools?style=for-the-badge&color=yellow)](https://github.com/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_demos/releases/) +[![Latest Release](https://img.shields.io/github/v/release/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_tools?style=for-the-badge&color=yellow)](https://github.com/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_architecture/releases/) --- @@ -62,4 +55,4 @@ Meet our dedicated maintainer, **Ronaldson Bellande**. ## 📄 License -This SDK is distributed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). For detailed information, refer to [LICENSE](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/blob/main/LICENSE) and [NOTICE](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_demos/blob/main/LICENSE). +This SDK is distributed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). For detailed information, refer to [LICENSE](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture/blob/main/LICENSE) and [NOTICE](https://github.com/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture/blob/main/LICENSE). diff --git a/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py b/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py index 917e490..44a7599 100644 --- a/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py +++ b/humanoid_robot_intelligence_control_system_configure/launch/face_follower.launch.py @@ -25,7 +25,7 @@ def ros1_launch_description(): args = sys.argv[1:] # Construct the ROS 1 launch command - roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "face_follow.launch"] + args + roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_configure", "face_follower.launch"] + args roslaunch_command.extend([ "usb_cam", "usb_cam_node", "name:=camera", From 7406f340f968c31992cd7e2b31564f6be196fd65 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Tue, 23 Jul 2024 14:22:49 -0400 Subject: [PATCH 160/172] Update README.md --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 8da2494..2f508a1 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,17 @@ [![Discord](https://img.shields.io/badge/Join%20our-Discord-7289DA?logo=discord&style=for-the-badge)](https://discord.gg/Yc72nd4w) [![Sponsor](https://img.shields.io/badge/Sponsor-Robotics%20Sensors%20Research-red?style=for-the-badge&logo=github)](https://github.com/sponsors/Robotics-Sensors) +## Mobile and ROS Control System +- [![Bellande's Internal Sensor Mobile iOS API](https://img.shields.io/badge/Bellande's%20Internal%20Sensor%20Mobile%20iOS%20API-Bellande%20API-blue?style=for-the-badge&logo=swift&color=blue)](https://github.com/Application-UI-UX/bellande_internal_sensor_mobile_ios_api) +- [![Bellande's External Sensor Mobile iOS API](https://img.shields.io/badge/Bellande's%20External%20Sensor%20Mobile%20iOS%20API-Bellande%20API-blue?style=for-the-badge&logo=swift&color=blue)](https://github.com/Application-UI-UX/bellande_external_sensor_mobile_ios_api) +- [![Bellande's Functionality Mobile iOS API](https://img.shields.io/badge/Bellande's%20Functionality%20Mobile%20iOS%20API-Bellande%20API-blue?style=for-the-badge&logo=swift&color=blue)](https://github.com/Application-UI-UX/bellande_functionality_mobile_ios_api) +- [![Bellande's Internal Sensor Mobile Android API](https://img.shields.io/badge/Bellande's%20Internal%20Sensor%20Mobile%20Android%20API-Bellande%20API-blue?style=for-the-badge&logo=android&color=blue)](https://github.com/Application-UI-UX/bellande_internal_sensor_mobile_android_api) +- [![Bellande's External Sensor Mobile Android API](https://img.shields.io/badge/Bellande's%20External%20Sensor%20Mobile%20Android%20API-Bellande%20API-blue?style=for-the-badge&logo=android&color=blue)](https://github.com/Application-UI-UX/bellande_external_sensor_mobile_android_api) +- [![Bellande's Functionality Mobile Android API](https://img.shields.io/badge/Bellande's%20Functionality%20Mobile%20Android%20API-Bellande%20API-blue?style=for-the-badge&logo=android&color=blue)](https://github.com/Application-UI-UX/bellande_functionality_mobile_android_api) +- [![Bellande's Internal Sensor Web API](https://img.shields.io/badge/Bellande's%20Internal%20Sensor%20Web%20API-Bellande%20API-blue?style=for-the-badge&logo=javascript&color=blue)](https://github.com/Application-UI-UX/bellande_internal_sensor_web_api) +- [![Bellande's External Sensor Web API](https://img.shields.io/badge/Bellande's%20External%20Sensor%20Web%20API-Bellande%20API-blue?style=for-the-badge&logo=javascript&color=blue)](https://github.com/Application-UI-UX/bellande_external_sensor_web_api) +- [![Bellande's Functionality Web API](https://img.shields.io/badge/Bellande's%20Functionality%20Web%20API-Bellande%20API-blue?style=for-the-badge&logo=javascript&color=blue)](https://github.com/Application-UI-UX/bellande_functionality_web_api) + ## 🤖 Explore Humanoid Robot Intelligence with Us! Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System architecture repository! Here, we invite you to delve into the fascinating world of humanoid robotics, showcasing the innovative capabilities of our intelligent control system. From 14f2671156082beb8e79980d83cdd41d648f39c0 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Tue, 23 Jul 2024 14:26:19 -0400 Subject: [PATCH 161/172] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f508a1..b3b5c8e 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ The repository has recently undergone significant updates. Older commits and cod 🚀 For the latest versions and updates, visit our organization: [Robotics-Sensors](https://github.com/Robotics-Sensors). -### 🧑‍💼 Maintainer +### 🧑‍💼 Maintainer & Author Meet our dedicated maintainer, **Ronaldson Bellande**. From b65b463f48a50eab657cc8e513272d92a591c89e Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Tue, 23 Jul 2024 14:37:10 -0400 Subject: [PATCH 162/172] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index b3b5c8e..c214325 100644 --- a/README.md +++ b/README.md @@ -50,12 +50,6 @@ Explore our [repository website](https://robotics-sensors.github.io/bellande_hum --- -## 📢 Important Announcement - -The repository has recently undergone significant updates. Older commits and codes are covered under the previous license, while new commits and codes fall under the new license. - ---- - 🚀 For the latest versions and updates, visit our organization: [Robotics-Sensors](https://github.com/Robotics-Sensors). ### 🧑‍💼 Maintainer & Author From 8711e44eb4950911a9ede38ae0c6188155bc6810 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Tue, 23 Jul 2024 14:38:20 -0400 Subject: [PATCH 163/172] Update README.md --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index c214325..412d3e9 100644 --- a/README.md +++ b/README.md @@ -25,16 +25,16 @@ Welcome to the {BR&SRI} Humanoid Robot Intelligence Control System architecture ### 🚀 Key Repository Stats -- ![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg?style=social) Starred by the community -- ![GitHub forks](https://img.shields.io/github/forks/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg?style=social) Forked by enthusiasts -- ![GitHub watchers](https://img.shields.io/github/watchers/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg?style=social) Watched by curious minds +- ![GitHub stars](https://img.shields.io/github/stars/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_architecture.svg?style=social) Starred by the community +- ![GitHub forks](https://img.shields.io/github/forks/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_architecture.svg?style=social) Forked by enthusiasts +- ![GitHub watchers](https://img.shields.io/github/watchers/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_architecture.svg?style=social) Watched by curious minds -- ![GitHub issues](https://img.shields.io/github/issues/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg) Actively addressing issues -- ![GitHub pull requests](https://img.shields.io/github/issues-pr/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg) Welcoming contributions -- ![GitHub license](https://img.shields.io/github/license/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg) Licensed under Apache 2.0 +- ![GitHub issues](https://img.shields.io/github/issues/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_architecture.svg) Actively addressing issues +- ![GitHub pull requests](https://img.shields.io/github/issues-pr/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_architecture.svg) Welcoming contributions +- ![GitHub license](https://img.shields.io/github/license/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_architecture.svg) Licensed under Apache 2.0 -- ![GitHub last commit](https://img.shields.io/github/last-commit/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture.svg) Latest updates -- ![Visitor & Github Clones](https://img.shields.io/badge/dynamic/json?color=2e8b57&label=Visitor%20%26%20GitHub%20Clones&query=$.count&url=https://api.github.com/repos/Robotics-Sensors/humanoid_robot_intelligence_control_system_architecture/traffic) Engaging with the community +- ![GitHub last commit](https://img.shields.io/github/last-commit/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_architecture.svg) Latest updates +- ![Visitor & Github Clones](https://img.shields.io/badge/dynamic/json?color=2e8b57&label=Visitor%20%26%20GitHub%20Clones&query=$.count&url=https://api.github.com/repos/Robotics-Sensors/bellande_humanoid_robot_intelligence_control_system_architecture/traffic) Engaging with the community --- From 3018c828c6dc41dab09752896dcb169f090247e5 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 23 Jul 2024 19:44:16 -0400 Subject: [PATCH 164/172] latest pushes --- .../src/face_follower.py | 26 +++- .../src/face_tracker.py | 132 +++++++++++++----- 2 files changed, 115 insertions(+), 43 deletions(-) diff --git a/humanoid_robot_intelligence_control_system_configure/src/face_follower.py b/humanoid_robot_intelligence_control_system_configure/src/face_follower.py index 3f923e4..40fd0da 100644 --- a/humanoid_robot_intelligence_control_system_configure/src/face_follower.py +++ b/humanoid_robot_intelligence_control_system_configure/src/face_follower.py @@ -24,6 +24,7 @@ from geometry_msgs.msg import Point from humanoid_robot_intelligence_control_system_walking_module_msgs.msg import WalkingParam from humanoid_robot_intelligence_control_system_walking_module_msgs.srv import GetWalkingParam + class FaceFollower: def __init__(self, ros_version): self.ros_version = ros_version @@ -40,6 +41,7 @@ class FaceFollower: self.initialize_parameters() self.setup_ros_communication() + def initialize_parameters(self): self.FOV_WIDTH = 35.2 * math.pi / 180 self.FOV_HEIGHT = 21.6 * math.pi / 180 @@ -233,7 +235,7 @@ class FaceFollower: def run(self): if self.ros_version == '1': - rate = rospy.Rate(30) # 30Hz + rate = rospy.Rate(30) while not rospy.is_shutdown(): if self.on_following: self.process_following(self.current_pan, self.current_tilt, 0.1) @@ -244,6 +246,7 @@ class FaceFollower: self.process_following(self.current_pan, self.current_tilt, 0.1) rclpy.spin_once(self.node, timeout_sec=0.03) + def main(ros_version): try: follower = FaceFollower(ros_version) @@ -256,15 +259,26 @@ def main(ros_version): rclpy.shutdown() print(f"An error occurred: {e}") + + if __name__ == '__main__': ros_version = os.getenv("ROS_VERSION") if ros_version == "1": - import rospy + try: + import rospy + main(ros_version) + except rospy.ROSInterruptException: + print("Error in ROS1 main") + elif ros_version == "2": - import rclpy - from rclpy.node import Node + try: + import rclpy + from rclpy.node import Node + main(ros_version) + except KeyboardInterrupt: + rclpy.shutdown() + print("Error in ROS1 main") + else: print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") sys.exit(1) - - main(ros_version) diff --git a/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py b/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py index 046f5b0..138d645 100644 --- a/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py +++ b/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py @@ -15,17 +15,31 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . - -import rospy +import os +import sys import math from sensor_msgs.msg import JointState from std_msgs.msg import String from geometry_msgs.msg import Point class FaceTracker: - def __init__(self): - rospy.init_node('face_tracker') - + def __init__(self, ros_version): + self.ros_version = ros_version + if self.ros_version == '1': + rospy.init_node('face_tracker') + self.get_param = rospy.get_param + self.logger = rospy + else: + rclpy.init() + self.node = Node('face_tracker') + self.get_param = self.node.get_parameter + self.logger = self.node.get_logger() + + self.initialize_parameters() + self.setup_ros_communication() + + + def initialize_parameters(self): self.FOV_WIDTH = 35.2 * math.pi / 180 self.FOV_HEIGHT = 21.6 * math.pi / 180 self.NOT_FOUND_THRESHOLD = 50 @@ -39,25 +53,36 @@ class FaceTracker: self.y_error_sum = 0 self.tracking_status = "NotFound" self.DEBUG_PRINT = False + + self.p_gain = self.get_param('p_gain', 0.4) + self.i_gain = self.get_param('i_gain', 0.0) + self.d_gain = self.get_param('d_gain', 0.0) - self.p_gain = rospy.get_param('~p_gain', 0.4) - self.i_gain = rospy.get_param('~i_gain', 0.0) - self.d_gain = rospy.get_param('~d_gain', 0.0) + self.logger.info(f"Face tracking Gain : {self.p_gain}, {self.i_gain}, {self.d_gain}") - rospy.loginfo(f"Face tracking Gain : {self.p_gain}, {self.i_gain}, {self.d_gain}") - - self.head_joint_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", JointState, queue_size=1) - self.head_scan_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/head_control/scan_command", String, queue_size=1) - - self.face_position_sub = rospy.Subscriber( - "/face_detector/face_position", Point, self.face_position_callback) - self.face_tracking_command_sub = rospy.Subscriber( - "/face_tracker/command", String, self.face_tracker_command_callback) + def setup_ros_communication(self): + if self.ros_version == '1': + self.head_joint_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", JointState, queue_size=1) + self.head_scan_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/scan_command", String, queue_size=1) + self.face_position_sub = rospy.Subscriber( + "/face_detector/face_position", Point, self.face_position_callback) + self.face_tracking_command_sub = rospy.Subscriber( + "/face_tracker/command", String, self.face_tracker_command_callback) + self.prev_time = rospy.Time.now() + else: + self.head_joint_pub = self.node.create_publisher( + JointState, "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", 1) + self.head_scan_pub = self.node.create_publisher( + String, "/humanoid_robot_intelligence_control_system/head_control/scan_command", 1) + self.face_position_sub = self.node.create_subscription( + Point, "/face_detector/face_position", self.face_position_callback, 10) + self.face_tracking_command_sub = self.node.create_subscription( + String, "/face_tracker/command", self.face_tracker_command_callback, 10) + self.prev_time = self.node.get_clock().now() self.face_position = Point() - self.prev_time = rospy.Time.now() def face_position_callback(self, msg): self.face_position = msg @@ -75,12 +100,12 @@ class FaceTracker: def start_tracking(self): self.on_tracking = True - rospy.loginfo("Start Face tracking") + self.logger.info("Start Face tracking") def stop_tracking(self): self.go_init() self.on_tracking = False - rospy.loginfo("Stop Face tracking") + self.logger.info("Stop Face tracking") self.current_face_pan = 0 self.current_face_tilt = 0 self.x_error_sum = 0 @@ -113,8 +138,12 @@ class FaceTracker: x_error = -math.atan(self.face_position.x * math.tan(self.FOV_WIDTH)) y_error = -math.atan(self.face_position.y * math.tan(self.FOV_HEIGHT)) - curr_time = rospy.Time.now() - delta_time = (curr_time - self.prev_time).to_sec() + if self.ros_version == '1': + curr_time = rospy.Time.now() + delta_time = (curr_time - self.prev_time).to_sec() + else: + curr_time = self.node.get_clock().now() + delta_time = (curr_time - self.prev_time).nanoseconds / 1e9 self.prev_time = curr_time x_error_diff = (x_error - self.current_face_pan) / delta_time @@ -125,10 +154,10 @@ class FaceTracker: y_error_target = y_error * self.p_gain + y_error_diff * self.d_gain + self.y_error_sum * self.i_gain if self.DEBUG_PRINT: - rospy.loginfo(f"Error: {x_error * 180 / math.pi} | {y_error * 180 / math.pi}") - rospy.loginfo(f"Error diff: {x_error_diff * 180 / math.pi} | {y_error_diff * 180 / math.pi} | {delta_time}") - rospy.loginfo(f"Error sum: {self.x_error_sum * 180 / math.pi} | {self.y_error_sum * 180 / math.pi}") - rospy.loginfo(f"Error target: {x_error_target * 180 / math.pi} | {y_error_target * 180 / math.pi}") + self.logger.info(f"Error: {x_error * 180 / math.pi} | {y_error * 180 / math.pi}") + self.logger.info(f"Error diff: {x_error_diff * 180 / math.pi} | {y_error_diff * 180 / math.pi} | {delta_time}") + self.logger.info(f"Error sum: {self.x_error_sum * 180 / math.pi} | {self.y_error_sum * 180 / math.pi}") + self.logger.info(f"Error target: {x_error_target * 180 / math.pi} | {y_error_target * 180 / math.pi}") self.publish_head_joint(x_error_target, y_error_target) @@ -166,14 +195,43 @@ class FaceTracker: self.head_scan_pub.publish(scan_msg) def run(self): - rate = rospy.Rate(30) # 30Hz - while not rospy.is_shutdown(): - self.process_tracking() - rate.sleep() + if self.ros_version == '1': + rate = rospy.Rate(30) # 30Hz + while not rospy.is_shutdown(): + self.process_tracking() + rate.sleep() + else: + while rclpy.ok(): + self.process_tracking() + rclpy.spin_once(self.node, timeout_sec=0.03) # Approximately 30Hz + +def main(ros_version): + try: + tracker = FaceTracker(ros_version) + tracker.run() + except Exception as e: + if ros_version == '1': + rospy.logerr(f"An error occurred: {e}") + else: + rclpy.shutdown() + print(f"An error occurred: {e}") if __name__ == '__main__': - try: - tracker = FaceTracker() - tracker.run() - except rospy.ROSInterruptException: - pass + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + try: + import rospy + main(ros_version) + except rospy.ROSInterruptException: + print("Error in ROS1 main") + elif ros_version == "2": + try: + import rclpy + from rclpy.node import Node + main(ros_version) + except KeyboardInterrupt: + rclpy.shutdown() + print("Error in ROS2 main") + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) From 45f825d41320224633606b2dbde2dca151e62e4b Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Tue, 23 Jul 2024 22:34:35 -0400 Subject: [PATCH 165/172] latest pushes --- .../src/face_follower.py | 205 +++++-------- .../src/object_follower.py | 269 ++++++++++-------- 2 files changed, 221 insertions(+), 253 deletions(-) diff --git a/humanoid_robot_intelligence_control_system_configure/src/face_follower.py b/humanoid_robot_intelligence_control_system_configure/src/face_follower.py index 40fd0da..e6d4b4f 100644 --- a/humanoid_robot_intelligence_control_system_configure/src/face_follower.py +++ b/humanoid_robot_intelligence_control_system_configure/src/face_follower.py @@ -18,16 +18,24 @@ import os import sys import math -from std_msgs.msg import String from sensor_msgs.msg import JointState +from std_msgs.msg import String from geometry_msgs.msg import Point from humanoid_robot_intelligence_control_system_walking_module_msgs.msg import WalkingParam from humanoid_robot_intelligence_control_system_walking_module_msgs.srv import GetWalkingParam +from humanoid_robot_intelligence_control_system_detection.follower import calculate_distance_to_face, calculate_footstep, calculate_delta_time +from humanoid_robot_intelligence_control_system_detection.follower_config import FollowerConfig, FollowerInitializeConfig class FaceFollower: def __init__(self, ros_version): self.ros_version = ros_version + self.initialize_config = FollowerInitializeConfig() + self.config = FollowerConfig() + self.initialize_ros() + self.setup_ros_communication() + + def initialize_ros(self): if self.ros_version == '1': rospy.init_node('face_follower') self.get_param = rospy.get_param @@ -37,38 +45,9 @@ class FaceFollower: self.node = rclpy.create_node('face_follower') self.get_param = self.node.get_parameter self.logger = self.node.get_logger() - - self.initialize_parameters() - self.setup_ros_communication() - - - def initialize_parameters(self): - self.FOV_WIDTH = 35.2 * math.pi / 180 - self.FOV_HEIGHT = 21.6 * math.pi / 180 - self.count_not_found = 0 - self.count_to_approach = 0 - self.on_following = False - self.approach_face_position = "NotFound" - self.CAMERA_HEIGHT = 0.46 - self.NOT_FOUND_THRESHOLD = 50 - self.MAX_FB_STEP = 40.0 * 0.001 - self.MAX_RL_TURN = 15.0 * math.pi / 180 - self.IN_PLACE_FB_STEP = -3.0 * 0.001 - self.MIN_FB_STEP = 5.0 * 0.001 - self.MIN_RL_TURN = 5.0 * math.pi / 180 - self.UNIT_FB_STEP = 1.0 * 0.001 - self.UNIT_RL_TURN = 0.5 * math.pi / 180 - self.SPOT_FB_OFFSET = 0.0 * 0.001 - self.SPOT_RL_OFFSET = 0.0 * 0.001 - self.SPOT_ANGLE_OFFSET = 0.0 - self.hip_pitch_offset = 7.0 - self.current_pan = -10 - self.current_tilt = -10 - self.current_x_move = 0.005 - self.current_r_angle = 0 - self.curr_period_time = 0.6 - self.accum_period_time = 0.0 - self.DEBUG_PRINT = False + + self.config.update_from_params(self.get_param) + self.initialize_config.update_from_params(self.get_param) def setup_ros_communication(self): if self.ros_version == '1': @@ -80,8 +59,8 @@ class FaceFollower: "/humanoid_robot_intelligence_control_system/walking/set_params", WalkingParam, queue_size=1) self.get_walking_param_client = rospy.ServiceProxy( "/humanoid_robot_intelligence_control_system/walking/get_params", GetWalkingParam) - self.face_position_sub = rospy.Subscriber( - "/face_detector/face_position", Point, self.face_position_callback) + self.face_detection_sub = rospy.Subscriber( + "/face_detection_result", Point, self.face_detection_callback) self.prev_time = rospy.Time.now() else: self.current_joint_states_sub = self.node.create_subscription( @@ -92,127 +71,103 @@ class FaceFollower: WalkingParam, "/humanoid_robot_intelligence_control_system/walking/set_params", 1) self.get_walking_param_client = self.node.create_client( GetWalkingParam, "/humanoid_robot_intelligence_control_system/walking/get_params") - self.face_position_sub = self.node.create_subscription( - Point, "/face_detector/face_position", self.face_position_callback, 10) + self.face_detection_sub = self.node.create_subscription( + Point, "/face_detection_result", self.face_detection_callback, 10) self.prev_time = self.node.get_clock().now() - self.current_walking_param = WalkingParam() - def start_following(self): - self.on_following = True - self.logger.info("Start Face following") + self.initialize_config.on_tracking = True + self.logger.info("Start face following") self.set_walking_command("start") result = self.get_walking_param() if result: - self.hip_pitch_offset = self.current_walking_param.hip_pitch_offset - self.curr_period_time = self.current_walking_param.period_time + self.config.hip_pitch_offset = self.current_walking_param.hip_pitch_offset + self.config.curr_period_time = self.current_walking_param.period_time else: - self.hip_pitch_offset = 7.0 * math.pi / 180 - self.curr_period_time = 0.6 + self.config.hip_pitch_offset = 7.0 * math.pi / 180 + self.config.curr_period_time = 0.6 def stop_following(self): - self.on_following = False - self.count_to_approach = 0 - self.logger.info("Stop Face following") + self.initialize_config.on_tracking = False + self.initialize_config.count_to_approach = 0 + self.logger.info("Stop face following") self.set_walking_command("stop") def current_joint_states_callback(self, msg): for i, name in enumerate(msg.name): if name == "head_pan": - self.current_pan = msg.position[i] + self.initialize_config.current_pan = msg.position[i] elif name == "head_tilt": - self.current_tilt = msg.position[i] - - def face_position_callback(self, msg): - if self.on_following: - self.process_following(msg.x, msg.y, msg.z) - - def calc_footstep(self, target_distance, target_angle, delta_time): - next_movement = self.current_x_move - target_distance = max(0, target_distance) - fb_goal = min(target_distance * 0.1, self.MAX_FB_STEP) - self.accum_period_time += delta_time - if self.accum_period_time > (self.curr_period_time / 4): - self.accum_period_time = 0.0 - if (target_distance * 0.1 / 2) < self.current_x_move: - next_movement -= self.UNIT_FB_STEP - else: - next_movement += self.UNIT_FB_STEP - fb_goal = min(next_movement, fb_goal) - fb_move = max(fb_goal, self.MIN_FB_STEP) - - rl_goal = 0.0 - if abs(target_angle) * 180 / math.pi > 5.0: - rl_offset = abs(target_angle) * 0.2 - rl_goal = min(rl_offset, self.MAX_RL_TURN) - rl_goal = max(rl_goal, self.MIN_RL_TURN) - rl_angle = min(abs(self.current_r_angle) + self.UNIT_RL_TURN, rl_goal) - if target_angle < 0: - rl_angle *= -1 - else: - rl_angle = 0 - - return fb_move, rl_angle + self.initialize_config.current_tilt = msg.position[i] def process_following(self, x_angle, y_angle, face_size): - if self.ros_version == '1': - curr_time = rospy.Time.now() - delta_time = (curr_time - self.prev_time).to_sec() - else: - curr_time = self.node.get_clock().now() - delta_time = (curr_time - self.prev_time).nanoseconds / 1e9 + curr_time = rospy.Time.now() if self.ros_version == '1' else self.node.get_clock().now() + delta_time = calculate_delta_time(curr_time, self.prev_time) self.prev_time = curr_time - self.count_not_found = 0 + self.initialize_config.count_not_found = 0 - if self.current_tilt == -10 and self.current_pan == -10: + if self.initialize_config.current_tilt == -10 and self.initialize_config.current_pan == -10: self.logger.error("Failed to get current angle of head joints.") self.set_walking_command("stop") - self.on_following = False - self.approach_face_position = "NotFound" + self.initialize_config.on_tracking = False + self.initialize_config.approach_face_position = "NotFound" return False - self.approach_face_position = "OutOfRange" + self.initialize_config.approach_face_position = "OutOfRange" - distance_to_face = self.CAMERA_HEIGHT * math.tan(math.pi * 0.5 + self.current_tilt - self.hip_pitch_offset - face_size) - distance_to_face = abs(distance_to_face) + distance_to_face = calculate_distance_to_face( + self.config.CAMERA_HEIGHT, self.initialize_config.current_tilt, self.config.hip_pitch_offset, face_size) - distance_to_approach = 0.5 # Adjust this value as needed + distance_to_approach = 0.22 if (distance_to_face < distance_to_approach) and (abs(x_angle) < 25.0): - self.count_to_approach += 1 - if self.count_to_approach > 20: + self.initialize_config.count_to_approach += 1 + if self.initialize_config.count_to_approach > 20: self.set_walking_command("stop") - self.on_following = False - self.approach_face_position = "OnLeft" if x_angle > 0 else "OnRight" + self.initialize_config.on_tracking = False + self.initialize_config.approach_face_position = "OnLeft" if x_angle > 0 else "OnRight" return True - elif self.count_to_approach > 15: - self.set_walking_param(self.IN_PLACE_FB_STEP, 0, 0) + elif self.initialize_config.count_to_approach > 15: + self.set_walking_param(self.config.IN_PLACE_FB_STEP, 0, 0) return False else: - self.count_to_approach = 0 + self.initialize_config.count_to_approach = 0 distance_to_walk = distance_to_face - distance_to_approach - fb_move, rl_angle = self.calc_footstep(distance_to_walk, self.current_pan, delta_time) + fb_move, rl_angle = calculate_footstep( + self.initialize_config.current_x_move, distance_to_walk, self.initialize_config.current_r_angle, self.initialize_config.current_pan, delta_time, self.config) self.set_walking_param(fb_move, 0, rl_angle) return False + def decide_face_position(self, x_angle, y_angle): + if self.initialize_config.current_tilt == -10 and self.initialize_config.current_pan == -10: + self.initialize_config.approach_face_position = "NotFound" + return + face_x_angle = self.initialize_config.current_pan + x_angle + self.initialize_config.approach_face_position = "OnLeft" if face_x_angle > 0 else "OnRight" + + def wait_following(self): + self.initialize_config.count_not_found += 1 + if self.initialize_config.count_not_found > self.config.NOT_FOUND_THRESHOLD * 0.5: + self.set_walking_param(0.0, 0.0, 0.0) + def set_walking_command(self, command): if command == "start": self.get_walking_param() - self.set_walking_param(self.IN_PLACE_FB_STEP, 0, 0, True) + self.set_walking_param(self.config.IN_PLACE_FB_STEP, 0, 0, True) msg = String() msg.data = command self.set_walking_command_pub.publish(msg) def set_walking_param(self, x_move, y_move, rotation_angle, balance=False): self.current_walking_param.balance_enable = balance - self.current_walking_param.x_move_amplitude = x_move + self.SPOT_FB_OFFSET - self.current_walking_param.y_move_amplitude = y_move + self.SPOT_RL_OFFSET - self.current_walking_param.angle_move_amplitude = rotation_angle + self.SPOT_ANGLE_OFFSET + self.current_walking_param.x_move_amplitude = x_move + self.config.SPOT_FB_OFFSET + self.current_walking_param.y_move_amplitude = y_move + self.config.SPOT_RL_OFFSET + self.current_walking_param.angle_move_amplitude = rotation_angle + self.config.SPOT_ANGLE_OFFSET self.set_walking_param_pub.publish(self.current_walking_param) - self.current_x_move = x_move - self.current_r_angle = rotation_angle + self.initialize_config.current_x_move = x_move + self.initialize_config.current_r_angle = rotation_angle def get_walking_param(self): if self.ros_version == '1': @@ -233,19 +188,20 @@ class FaceFollower: self.logger.error('Service call failed %r' % (future.exception(),)) return False + def face_detection_callback(self, msg): + if self.initialize_config.on_tracking: + x_angle = msg.x + y_angle = msg.y + face_size = msg.z + self.process_following(x_angle, y_angle, face_size) + else: + self.wait_following() + def run(self): if self.ros_version == '1': - rate = rospy.Rate(30) - while not rospy.is_shutdown(): - if self.on_following: - self.process_following(self.current_pan, self.current_tilt, 0.1) - rate.sleep() + rospy.spin() else: - while rclpy.ok(): - if self.on_following: - self.process_following(self.current_pan, self.current_tilt, 0.1) - rclpy.spin_once(self.node, timeout_sec=0.03) - + rclpy.spin(self.node) def main(ros_version): try: @@ -259,26 +215,21 @@ def main(ros_version): rclpy.shutdown() print(f"An error occurred: {e}") - - if __name__ == '__main__': ros_version = os.getenv("ROS_VERSION") if ros_version == "1": + import rospy try: - import rospy main(ros_version) except rospy.ROSInterruptException: print("Error in ROS1 main") - elif ros_version == "2": + import rclpy try: - import rclpy - from rclpy.node import Node main(ros_version) except KeyboardInterrupt: rclpy.shutdown() - print("Error in ROS1 main") - + print("Error in ROS2 main") else: print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_configure/src/object_follower.py b/humanoid_robot_intelligence_control_system_configure/src/object_follower.py index 87c320a..5377ce5 100644 --- a/humanoid_robot_intelligence_control_system_configure/src/object_follower.py +++ b/humanoid_robot_intelligence_control_system_configure/src/object_follower.py @@ -15,193 +15,181 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import rospy +import os +import sys import math from sensor_msgs.msg import JointState from std_msgs.msg import String +from geometry_msgs.msg import Point from humanoid_robot_intelligence_control_system_walking_module_msgs.msg import WalkingParam from humanoid_robot_intelligence_control_system_walking_module_msgs.srv import GetWalkingParam -from geometry_msgs.msg import Point +from humanoid_robot_intelligence_control_system_detection.follower import calculate_distance_to_object, calculate_footstep, calculate_delta_time +from humanoid_robot_intelligence_control_system_detection.follower_config import FollowerConfig, FollowerInitializeConfig class ObjectFollower: - def __init__(self): - rospy.init_node('object_follower') + def __init__(self, ros_version): + self.ros_version = ros_version + self.initialize_config = FollowerInitializeConfig() + self.config = FollowerConfig() + self.initialize_ros() + self.setup_ros_communication() + + def initialize_ros(self): + if self.ros_version == '1': + rospy.init_node('object_follower') + self.get_param = rospy.get_param + self.logger = rospy + else: + rclpy.init() + self.node = rclpy.create_node('object_follower') + self.get_param = self.node.get_parameter + self.logger = self.node.get_logger() - self.FOV_WIDTH = 35.2 * math.pi / 180 - self.FOV_HEIGHT = 21.6 * math.pi / 180 - self.count_not_found = 0 - self.count_to_approach = 0 - self.on_tracking = False - self.approach_object_position = "NotFound" - self.CAMERA_HEIGHT = 0.46 - self.NOT_FOUND_THRESHOLD = 50 - self.MAX_FB_STEP = 40.0 * 0.001 - self.MAX_RL_TURN = 15.0 * math.pi / 180 - self.IN_PLACE_FB_STEP = -3.0 * 0.001 - self.MIN_FB_STEP = 5.0 * 0.001 - self.MIN_RL_TURN = 5.0 * math.pi / 180 - self.UNIT_FB_STEP = 1.0 * 0.001 - self.UNIT_RL_TURN = 0.5 * math.pi / 180 - self.SPOT_FB_OFFSET = 0.0 * 0.001 - self.SPOT_RL_OFFSET = 0.0 * 0.001 - self.SPOT_ANGLE_OFFSET = 0.0 - self.hip_pitch_offset = 7.0 - self.current_pan = -10 - self.current_tilt = -10 - self.current_x_move = 0.005 - self.current_r_angle = 0 - self.curr_period_time = 0.6 - self.accum_period_time = 0.0 - self.DEBUG_PRINT = False + self.config.update_from_params(self.get_param) + self.initialize_config.update_from_params(self.get_param) - self.current_joint_states_sub = rospy.Subscriber( - "/humanoid_robot_intelligence_control_system/goal_joint_states", JointState, self.current_joint_states_callback) - self.set_walking_command_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/walking/command", String, queue_size=1) - self.set_walking_param_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/walking/set_params", WalkingParam, queue_size=1) - self.get_walking_param_client = rospy.ServiceProxy( - "/humanoid_robot_intelligence_control_system/walking/get_params", GetWalkingParam) - - # Subscribe to object detection results - self.object_detection_sub = rospy.Subscriber( - "/object_detection_result", Point, self.object_detection_callback) - - self.prev_time = rospy.Time.now() - self.current_walking_param = WalkingParam() + def setup_ros_communication(self): + if self.ros_version == '1': + self.current_joint_states_sub = rospy.Subscriber( + "/humanoid_robot_intelligence_control_system/goal_joint_states", JointState, self.current_joint_states_callback) + self.set_walking_command_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/walking/command", String, queue_size=1) + self.set_walking_param_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/walking/set_params", WalkingParam, queue_size=1) + self.get_walking_param_client = rospy.ServiceProxy( + "/humanoid_robot_intelligence_control_system/walking/get_params", GetWalkingParam) + self.object_detection_sub = rospy.Subscriber( + "/object_detection_result", Point, self.object_detection_callback) + self.prev_time = rospy.Time.now() + else: + self.current_joint_states_sub = self.node.create_subscription( + JointState, "/humanoid_robot_intelligence_control_system/goal_joint_states", self.current_joint_states_callback, 10) + self.set_walking_command_pub = self.node.create_publisher( + String, "/humanoid_robot_intelligence_control_system/walking/command", 1) + self.set_walking_param_pub = self.node.create_publisher( + WalkingParam, "/humanoid_robot_intelligence_control_system/walking/set_params", 1) + self.get_walking_param_client = self.node.create_client( + GetWalkingParam, "/humanoid_robot_intelligence_control_system/walking/get_params") + self.object_detection_sub = self.node.create_subscription( + Point, "/object_detection_result", self.object_detection_callback, 10) + self.prev_time = self.node.get_clock().now() def start_following(self): - self.on_tracking = True - rospy.loginfo("Start Object following") + self.initialize_config.on_tracking = True + self.logger.info("Start Object following") self.set_walking_command("start") result = self.get_walking_param() if result: - self.hip_pitch_offset = self.current_walking_param.hip_pitch_offset - self.curr_period_time = self.current_walking_param.period_time + self.config.hip_pitch_offset = self.current_walking_param.hip_pitch_offset + self.config.curr_period_time = self.current_walking_param.period_time else: - self.hip_pitch_offset = 7.0 * math.pi / 180 - self.curr_period_time = 0.6 + self.config.hip_pitch_offset = 7.0 * math.pi / 180 + self.config.curr_period_time = 0.6 def stop_following(self): - self.on_tracking = False - self.count_to_approach = 0 - rospy.loginfo("Stop Object following") + self.initialize_config.on_tracking = False + self.initialize_config.count_to_approach = 0 + self.logger.info("Stop Object following") self.set_walking_command("stop") def current_joint_states_callback(self, msg): for i, name in enumerate(msg.name): if name == "head_pan": - self.current_pan = msg.position[i] + self.initialize_config.current_pan = msg.position[i] elif name == "head_tilt": - self.current_tilt = msg.position[i] - - def calc_footstep(self, target_distance, target_angle, delta_time): - next_movement = self.current_x_move - target_distance = max(0, target_distance) - fb_goal = min(target_distance * 0.1, self.MAX_FB_STEP) - self.accum_period_time += delta_time - if self.accum_period_time > (self.curr_period_time / 4): - self.accum_period_time = 0.0 - if (target_distance * 0.1 / 2) < self.current_x_move: - next_movement -= self.UNIT_FB_STEP - else: - next_movement += self.UNIT_FB_STEP - fb_goal = min(next_movement, fb_goal) - fb_move = max(fb_goal, self.MIN_FB_STEP) - - rl_goal = 0.0 - if abs(target_angle) * 180 / math.pi > 5.0: - rl_offset = abs(target_angle) * 0.2 - rl_goal = min(rl_offset, self.MAX_RL_TURN) - rl_goal = max(rl_goal, self.MIN_RL_TURN) - rl_angle = min(abs(self.current_r_angle) + self.UNIT_RL_TURN, rl_goal) - if target_angle < 0: - rl_angle *= -1 - else: - rl_angle = 0 - - return fb_move, rl_angle + self.initialize_config.current_tilt = msg.position[i] def process_following(self, x_angle, y_angle, object_size): - curr_time = rospy.Time.now() - delta_time = (curr_time - self.prev_time).to_sec() + curr_time = rospy.Time.now() if self.ros_version == '1' else self.node.get_clock().now() + delta_time = calculate_delta_time(curr_time, self.prev_time) self.prev_time = curr_time - self.count_not_found = 0 + self.initialize_config.count_not_found = 0 - if self.current_tilt == -10 and self.current_pan == -10: - rospy.logerr("Failed to get current angle of head joints.") + if self.initialize_config.current_tilt == -10 and self.initialize_config.current_pan == -10: + self.logger.error("Failed to get current angle of head joints.") self.set_walking_command("stop") - self.on_tracking = False - self.approach_object_position = "NotFound" + self.initialize_config.on_tracking = False + self.initialize_config.approach_object_position = "NotFound" return False - self.approach_object_position = "OutOfRange" + self.initialize_config.approach_object_position = "OutOfRange" - distance_to_object = self.CAMERA_HEIGHT * math.tan(math.pi * 0.5 + self.current_tilt - self.hip_pitch_offset - object_size) - distance_to_object = abs(distance_to_object) + distance_to_object = calculate_distance_to_object( + self.config.CAMERA_HEIGHT, self.initialize_config.current_tilt, self.config.hip_pitch_offset, object_size) distance_to_approach = 0.22 if (distance_to_object < distance_to_approach) and (abs(x_angle) < 25.0): - self.count_to_approach += 1 - if self.count_to_approach > 20: + self.initialize_config.count_to_approach += 1 + if self.initialize_config.count_to_approach > 20: self.set_walking_command("stop") - self.on_tracking = False - self.approach_object_position = "OnLeft" if x_angle > 0 else "OnRight" + self.initialize_config.on_tracking = False + self.initialize_config.approach_object_position = "OnLeft" if x_angle > 0 else "OnRight" return True - elif self.count_to_approach > 15: - self.set_walking_param(self.IN_PLACE_FB_STEP, 0, 0) + elif self.initialize_config.count_to_approach > 15: + self.set_walking_param(self.config.IN_PLACE_FB_STEP, 0, 0) return False else: - self.count_to_approach = 0 + self.initialize_config.count_to_approach = 0 distance_to_walk = distance_to_object - distance_to_approach - fb_move, rl_angle = self.calc_footstep(distance_to_walk, self.current_pan, delta_time) + fb_move, rl_angle = calculate_footstep( + self.initialize_config.current_x_move, distance_to_walk, self.initialize_config.current_r_angle, self.initialize_config.current_pan, delta_time, self.config) self.set_walking_param(fb_move, 0, rl_angle) return False def decide_object_position(self, x_angle, y_angle): - if self.current_tilt == -10 and self.current_pan == -10: - self.approach_object_position = "NotFound" + if self.initialize_config.current_tilt == -10 and self.initialize_config.current_pan == -10: + self.initialize_config.approach_object_position = "NotFound" return - object_x_angle = self.current_pan + x_angle - self.approach_object_position = "OnLeft" if object_x_angle > 0 else "OnRight" + object_x_angle = self.initialize_config.current_pan + x_angle + self.initialize_config.approach_object_position = "OnLeft" if object_x_angle > 0 else "OnRight" def wait_following(self): - self.count_not_found += 1 - if self.count_not_found > self.NOT_FOUND_THRESHOLD * 0.5: + self.initialize_config.count_not_found += 1 + if self.initialize_config.count_not_found > self.config.NOT_FOUND_THRESHOLD * 0.5: self.set_walking_param(0.0, 0.0, 0.0) def set_walking_command(self, command): if command == "start": self.get_walking_param() - self.set_walking_param(self.IN_PLACE_FB_STEP, 0, 0, True) + self.set_walking_param(self.config.IN_PLACE_FB_STEP, 0, 0, True) msg = String() msg.data = command self.set_walking_command_pub.publish(msg) def set_walking_param(self, x_move, y_move, rotation_angle, balance=False): self.current_walking_param.balance_enable = balance - self.current_walking_param.x_move_amplitude = x_move + self.SPOT_FB_OFFSET - self.current_walking_param.y_move_amplitude = y_move + self.SPOT_RL_OFFSET - self.current_walking_param.angle_move_amplitude = rotation_angle + self.SPOT_ANGLE_OFFSET + self.current_walking_param.x_move_amplitude = x_move + self.config.SPOT_FB_OFFSET + self.current_walking_param.y_move_amplitude = y_move + self.config.SPOT_RL_OFFSET + self.current_walking_param.angle_move_amplitude = rotation_angle + self.config.SPOT_ANGLE_OFFSET self.set_walking_param_pub.publish(self.current_walking_param) - self.current_x_move = x_move - self.current_r_angle = rotation_angle + self.initialize_config.current_x_move = x_move + self.initialize_config.current_r_angle = rotation_angle def get_walking_param(self): - try: - response = self.get_walking_param_client() - self.current_walking_param = response.parameters - return True - except rospy.ServiceException as e: - rospy.logerr("Failed to get walking parameters: %s" % e) - return False + if self.ros_version == '1': + try: + response = self.get_walking_param_client() + self.current_walking_param = response.parameters + return True + except rospy.ServiceException as e: + self.logger.error("Failed to get walking parameters: %s" % e) + return False + else: + future = self.get_walking_param_client.call_async(GetWalkingParam.Request()) + rclpy.spin_until_future_complete(self.node, future) + if future.result() is not None: + self.current_walking_param = future.result().parameters + return True + else: + self.logger.error('Service call failed %r' % (future.exception(),)) + return False def object_detection_callback(self, msg): - if self.on_tracking: + if self.initialize_config.on_tracking: x_angle = msg.x y_angle = msg.y object_size = msg.z @@ -209,10 +197,39 @@ class ObjectFollower: else: self.wait_following() -if __name__ == '__main__': + def run(self): + if self.ros_version == '1': + rospy.spin() + else: + rclpy.spin(self.node) + +def main(ros_version): try: - follower = ObjectFollower() + follower = ObjectFollower(ros_version) follower.start_following() - rospy.spin() - except rospy.ROSInterruptException: - pass + follower.run() + except Exception as e: + if ros_version == '1': + rospy.logerr(f"An error occurred: {e}") + else: + rclpy.shutdown() + print(f"An error occurred: {e}") + +if __name__ == '__main__': + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + import rospy + try: + main(ros_version) + except rospy.ROSInterruptException: + print("Error in ROS1 main") + elif ros_version == "2": + import rclpy + try: + main(ros_version) + except KeyboardInterrupt: + rclpy.shutdown() + print("Error in ROS2 main") + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) From 619c52349cda1202e53a61c64cf0f80586f9bb4b Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Wed, 24 Jul 2024 00:05:59 -0400 Subject: [PATCH 166/172] latest pushes --- .../src/face_follower.py | 5 +- .../src/face_tracker.py | 157 +++++------- .../src/object_follower.py | 5 +- .../src/object_tracker.py | 233 ++++++++++-------- 4 files changed, 200 insertions(+), 200 deletions(-) diff --git a/humanoid_robot_intelligence_control_system_configure/src/face_follower.py b/humanoid_robot_intelligence_control_system_configure/src/face_follower.py index e6d4b4f..f12b5a4 100644 --- a/humanoid_robot_intelligence_control_system_configure/src/face_follower.py +++ b/humanoid_robot_intelligence_control_system_configure/src/face_follower.py @@ -24,9 +24,10 @@ from geometry_msgs.msg import Point from humanoid_robot_intelligence_control_system_walking_module_msgs.msg import WalkingParam from humanoid_robot_intelligence_control_system_walking_module_msgs.srv import GetWalkingParam -from humanoid_robot_intelligence_control_system_detection.follower import calculate_distance_to_face, calculate_footstep, calculate_delta_time +from humanoid_robot_intelligence_control_system_detection.follower import calculate_distance_to, calculate_footstep, calculate_delta_time from humanoid_robot_intelligence_control_system_detection.follower_config import FollowerConfig, FollowerInitializeConfig + class FaceFollower: def __init__(self, ros_version): self.ros_version = ros_version @@ -116,7 +117,7 @@ class FaceFollower: self.initialize_config.approach_face_position = "OutOfRange" - distance_to_face = calculate_distance_to_face( + distance_to_face = calculate_distance_to( self.config.CAMERA_HEIGHT, self.initialize_config.current_tilt, self.config.hip_pitch_offset, face_size) distance_to_approach = 0.22 diff --git a/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py b/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py index 138d645..a7776ab 100644 --- a/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py +++ b/humanoid_robot_intelligence_control_system_configure/src/face_tracker.py @@ -15,31 +15,17 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import os -import sys +import rospy import math from sensor_msgs.msg import JointState -from std_msgs.msg import String +from std_msgs.msg import String, Float64MultiArray +from humanoid_robot_intelligence_control_system_ball_detector.msg import CircleSetStamped from geometry_msgs.msg import Point class FaceTracker: - def __init__(self, ros_version): - self.ros_version = ros_version - if self.ros_version == '1': - rospy.init_node('face_tracker') - self.get_param = rospy.get_param - self.logger = rospy - else: - rclpy.init() - self.node = Node('face_tracker') - self.get_param = self.node.get_parameter - self.logger = self.node.get_logger() - - self.initialize_parameters() - self.setup_ros_communication() - - - def initialize_parameters(self): + def __init__(self): + rospy.init_node('face_tracker') + self.FOV_WIDTH = 35.2 * math.pi / 180 self.FOV_HEIGHT = 21.6 * math.pi / 180 self.NOT_FOUND_THRESHOLD = 50 @@ -51,38 +37,31 @@ class FaceTracker: self.current_face_tilt = 0 self.x_error_sum = 0 self.y_error_sum = 0 + self.current_face_bottom = 0 self.tracking_status = "NotFound" self.DEBUG_PRINT = False - - self.p_gain = self.get_param('p_gain', 0.4) - self.i_gain = self.get_param('i_gain', 0.0) - self.d_gain = self.get_param('d_gain', 0.0) - self.logger.info(f"Face tracking Gain : {self.p_gain}, {self.i_gain}, {self.d_gain}") + param_nh = rospy.get_param("~") + self.p_gain = param_nh.get("p_gain", 0.4) + self.i_gain = param_nh.get("i_gain", 0.0) + self.d_gain = param_nh.get("d_gain", 0.0) - def setup_ros_communication(self): - if self.ros_version == '1': - self.head_joint_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", JointState, queue_size=1) - self.head_scan_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/head_control/scan_command", String, queue_size=1) - self.face_position_sub = rospy.Subscriber( - "/face_detector/face_position", Point, self.face_position_callback) - self.face_tracking_command_sub = rospy.Subscriber( - "/face_tracker/command", String, self.face_tracker_command_callback) - self.prev_time = rospy.Time.now() - else: - self.head_joint_pub = self.node.create_publisher( - JointState, "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", 1) - self.head_scan_pub = self.node.create_publisher( - String, "/humanoid_robot_intelligence_control_system/head_control/scan_command", 1) - self.face_position_sub = self.node.create_subscription( - Point, "/face_detector/face_position", self.face_position_callback, 10) - self.face_tracking_command_sub = self.node.create_subscription( - String, "/face_tracker/command", self.face_tracker_command_callback, 10) - self.prev_time = self.node.get_clock().now() + rospy.loginfo(f"face tracking Gain : {self.p_gain}, {self.i_gain}, {self.d_gain}") + + self.head_joint_offset_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states_offset", JointState, queue_size=0) + self.head_joint_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", JointState, queue_size=0) + self.head_scan_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/scan_command", String, queue_size=0) + + self.face_position_sub = rospy.Subscriber( + "/face_detector_node/face_position", Point, self.face_position_callback) + self.face_tracking_command_sub = rospy.Subscriber( + "/face_tracker/command", String, self.face_tracker_command_callback) self.face_position = Point() + self.prev_time = rospy.Time.now() def face_position_callback(self, msg): self.face_position = msg @@ -100,17 +79,20 @@ class FaceTracker: def start_tracking(self): self.on_tracking = True - self.logger.info("Start Face tracking") + rospy.loginfo("Start face tracking") if self.DEBUG_PRINT else None def stop_tracking(self): self.go_init() self.on_tracking = False - self.logger.info("Stop Face tracking") + rospy.loginfo("Stop face tracking") if self.DEBUG_PRINT else None self.current_face_pan = 0 self.current_face_tilt = 0 self.x_error_sum = 0 self.y_error_sum = 0 + def set_using_head_scan(self, use_scan): + self.use_head_scan = use_scan + def process_tracking(self): if not self.on_tracking: self.face_position.z = 0 @@ -120,7 +102,10 @@ class FaceTracker: if self.face_position.z <= 0: self.count_not_found += 1 if self.count_not_found < self.WAITING_THRESHOLD: - tracking_status = "Waiting" + if self.tracking_status in ["Found", "Waiting"]: + tracking_status = "Waiting" + else: + tracking_status = "NotFound" elif self.count_not_found > self.NOT_FOUND_THRESHOLD: self.scan_face() self.count_not_found = 0 @@ -133,17 +118,18 @@ class FaceTracker: if tracking_status != "Found": self.tracking_status = tracking_status + self.current_face_pan = 0 + self.current_face_tilt = 0 + self.x_error_sum = 0 + self.y_error_sum = 0 return tracking_status x_error = -math.atan(self.face_position.x * math.tan(self.FOV_WIDTH)) y_error = -math.atan(self.face_position.y * math.tan(self.FOV_HEIGHT)) + face_size = self.face_position.z - if self.ros_version == '1': - curr_time = rospy.Time.now() - delta_time = (curr_time - self.prev_time).to_sec() - else: - curr_time = self.node.get_clock().now() - delta_time = (curr_time - self.prev_time).nanoseconds / 1e9 + curr_time = rospy.Time.now() + delta_time = (curr_time - self.prev_time).to_sec() self.prev_time = curr_time x_error_diff = (x_error - self.current_face_pan) / delta_time @@ -154,15 +140,18 @@ class FaceTracker: y_error_target = y_error * self.p_gain + y_error_diff * self.d_gain + self.y_error_sum * self.i_gain if self.DEBUG_PRINT: - self.logger.info(f"Error: {x_error * 180 / math.pi} | {y_error * 180 / math.pi}") - self.logger.info(f"Error diff: {x_error_diff * 180 / math.pi} | {y_error_diff * 180 / math.pi} | {delta_time}") - self.logger.info(f"Error sum: {self.x_error_sum * 180 / math.pi} | {self.y_error_sum * 180 / math.pi}") - self.logger.info(f"Error target: {x_error_target * 180 / math.pi} | {y_error_target * 180 / math.pi}") + rospy.loginfo(f"Error: {x_error * 180 / math.pi} | {y_error * 180 / math.pi}") + rospy.loginfo(f"Error diff: {x_error_diff * 180 / math.pi} | {y_error_diff * 180 / math.pi} | {delta_time}") + rospy.loginfo(f"Error sum: {self.x_error_sum * 180 / math.pi} | {self.y_error_sum * 180 / math.pi}") + rospy.loginfo(f"Error target: {x_error_target * 180 / math.pi} | {y_error_target * 180 / math.pi}") self.publish_head_joint(x_error_target, y_error_target) self.current_face_pan = x_error self.current_face_tilt = y_error + self.current_face_bottom = face_size + + self.face_position.z = 0 self.tracking_status = tracking_status return tracking_status @@ -176,7 +165,7 @@ class FaceTracker: head_angle_msg.name = ["head_pan", "head_tilt"] head_angle_msg.position = [pan, tilt] - self.head_joint_pub.publish(head_angle_msg) + self.head_joint_offset_pub.publish(head_angle_msg) def go_init(self): head_angle_msg = JointState() @@ -194,44 +183,12 @@ class FaceTracker: self.head_scan_pub.publish(scan_msg) - def run(self): - if self.ros_version == '1': - rate = rospy.Rate(30) # 30Hz - while not rospy.is_shutdown(): - self.process_tracking() - rate.sleep() - else: - while rclpy.ok(): - self.process_tracking() - rclpy.spin_once(self.node, timeout_sec=0.03) # Approximately 30Hz - -def main(ros_version): - try: - tracker = FaceTracker(ros_version) - tracker.run() - except Exception as e: - if ros_version == '1': - rospy.logerr(f"An error occurred: {e}") - else: - rclpy.shutdown() - print(f"An error occurred: {e}") - if __name__ == '__main__': - ros_version = os.getenv("ROS_VERSION") - if ros_version == "1": - try: - import rospy - main(ros_version) - except rospy.ROSInterruptException: - print("Error in ROS1 main") - elif ros_version == "2": - try: - import rclpy - from rclpy.node import Node - main(ros_version) - except KeyboardInterrupt: - rclpy.shutdown() - print("Error in ROS2 main") - else: - print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") - sys.exit(1) + try: + tracker = FaceTracker() + rate = rospy.Rate(30) + while not rospy.is_shutdown(): + tracker.process_tracking() + rate.sleep() + except rospy.ROSInterruptException: + pass diff --git a/humanoid_robot_intelligence_control_system_configure/src/object_follower.py b/humanoid_robot_intelligence_control_system_configure/src/object_follower.py index 5377ce5..ebe736f 100644 --- a/humanoid_robot_intelligence_control_system_configure/src/object_follower.py +++ b/humanoid_robot_intelligence_control_system_configure/src/object_follower.py @@ -24,9 +24,10 @@ from geometry_msgs.msg import Point from humanoid_robot_intelligence_control_system_walking_module_msgs.msg import WalkingParam from humanoid_robot_intelligence_control_system_walking_module_msgs.srv import GetWalkingParam -from humanoid_robot_intelligence_control_system_detection.follower import calculate_distance_to_object, calculate_footstep, calculate_delta_time +from humanoid_robot_intelligence_control_system_detection.follower import calculate_distance_to, calculate_footstep, calculate_delta_time from humanoid_robot_intelligence_control_system_detection.follower_config import FollowerConfig, FollowerInitializeConfig + class ObjectFollower: def __init__(self, ros_version): self.ros_version = ros_version @@ -116,7 +117,7 @@ class ObjectFollower: self.initialize_config.approach_object_position = "OutOfRange" - distance_to_object = calculate_distance_to_object( + distance_to_object = calculate_distance_to( self.config.CAMERA_HEIGHT, self.initialize_config.current_tilt, self.config.hip_pitch_offset, object_size) distance_to_approach = 0.22 diff --git a/humanoid_robot_intelligence_control_system_configure/src/object_tracker.py b/humanoid_robot_intelligence_control_system_configure/src/object_tracker.py index 2d54fba..4f00592 100644 --- a/humanoid_robot_intelligence_control_system_configure/src/object_tracker.py +++ b/humanoid_robot_intelligence_control_system_configure/src/object_tracker.py @@ -15,56 +15,68 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import rospy +import os +import sys import math from sensor_msgs.msg import JointState -from std_msgs.msg import String, Float64MultiArray -from humanoid_robot_intelligence_control_system_ball_detector.msg import CircleSetStamped +from std_msgs.msg import String from geometry_msgs.msg import Point +from humanoid_robot_intelligence_control_system_detection.tracker import calculate_error, calculate_error_target, calculate_delta_time +from humanoid_robot_intelligence_control_system_detection.tracker_config import TrackerConfig, TrackerInitializeConfig + class ObjectTracker: - def __init__(self): - rospy.init_node('object_tracker') + def __init__(self, ros_version): + self.ros_version = ros_version + self.initialize_config = TrackerInitializeConfig() + self.config = TrackerConfig() + self.initialize_ros() + self.setup_ros_communication() + + def initialize_ros(self): + if self.ros_version == '1': + rospy.init_node('object_tracker') + self.get_param = rospy.get_param + self.logger = rospy + else: + rclpy.init() + self.node = rclpy.create_node('object_tracker') + self.get_param = self.node.get_parameter + self.logger = self.node.get_logger() - self.FOV_WIDTH = 35.2 * math.pi / 180 - self.FOV_HEIGHT = 21.6 * math.pi / 180 - self.NOT_FOUND_THRESHOLD = 50 - self.WAITING_THRESHOLD = 5 - self.use_head_scan = True - self.count_not_found = 0 - self.on_tracking = False - self.current_object_pan = 0 - self.current_object_tilt = 0 - self.x_error_sum = 0 - self.y_error_sum = 0 - self.current_object_bottom = 0 - self.tracking_status = "NotFound" - self.DEBUG_PRINT = False + self.config.update_from_params(self.get_param) + self.initialize_config.update_from_params(self.get_param) - param_nh = rospy.get_param("~") - self.p_gain = param_nh.get("p_gain", 0.4) - self.i_gain = param_nh.get("i_gain", 0.0) - self.d_gain = param_nh.get("d_gain", 0.0) - - rospy.loginfo(f"Object tracking Gain : {self.p_gain}, {self.i_gain}, {self.d_gain}") - - self.head_joint_offset_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/head_control/set_joint_states_offset", JointState, queue_size=0) - self.head_joint_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", JointState, queue_size=0) - self.head_scan_pub = rospy.Publisher( - "/humanoid_robot_intelligence_control_system/head_control/scan_command", String, queue_size=0) - - self.object_position_sub = rospy.Subscriber( - "/object_detector_node/object_position", Point, self.object_position_callback) - self.object_tracking_command_sub = rospy.Subscriber( - "/object_tracker/command", String, self.object_tracker_command_callback) - - self.object_position = Point() - self.prev_time = rospy.Time.now() + def setup_ros_communication(self): + if self.ros_version == '1': + self.head_joint_offset_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states_offset", JointState, queue_size=0) + self.head_joint_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", JointState, queue_size=0) + self.head_scan_pub = rospy.Publisher( + "/humanoid_robot_intelligence_control_system/head_control/scan_command", String, queue_size=0) + self.object_position_sub = rospy.Subscriber( + "/object_detector_node/object_position", Point, self.object_position_callback) + self.object_tracking_command_sub = rospy.Subscriber( + "/object_tracker/command", String, self.object_tracker_command_callback) + self.prev_time = rospy.Time.now() + else: + self.head_joint_offset_pub = self.node.create_publisher( + JointState, "/humanoid_robot_intelligence_control_system/head_control/set_joint_states_offset", 10) + self.head_joint_pub = self.node.create_publisher( + JointState, "/humanoid_robot_intelligence_control_system/head_control/set_joint_states", 10) + self.head_scan_pub = self.node.create_publisher( + String, "/humanoid_robot_intelligence_control_system/head_control/scan_command", 10) + self.object_position_sub = self.node.create_subscription( + Point, "/object_detector_node/object_position", self.object_position_callback, 10) + self.object_tracking_command_sub = self.node.create_subscription( + String, "/object_tracker/command", self.object_tracker_command_callback, 10) + self.prev_time = self.node.get_clock().now() def object_position_callback(self, msg): - self.object_position = msg + self.initialize_config.object_position = msg + if self.initialize_config.on_tracking: + self.process_tracking() def object_tracker_command_callback(self, msg): if msg.data == "start": @@ -72,88 +84,90 @@ class ObjectTracker: elif msg.data == "stop": self.stop_tracking() elif msg.data == "toggle_start": - if not self.on_tracking: + if not self.initialize_config.on_tracking: self.start_tracking() else: self.stop_tracking() def start_tracking(self): - self.on_tracking = True - rospy.loginfo("Start Object tracking") if self.DEBUG_PRINT else None + self.initialize_config.on_tracking = True + self.logger.info("Start Object tracking") def stop_tracking(self): self.go_init() - self.on_tracking = False - rospy.loginfo("Stop Object tracking") if self.DEBUG_PRINT else None - self.current_object_pan = 0 - self.current_object_tilt = 0 - self.x_error_sum = 0 - self.y_error_sum = 0 + self.initialize_config.on_tracking = False + self.logger.info("Stop Object tracking") + self.initialize_config.current_object_pan = 0 + self.initialize_config.current_object_tilt = 0 + self.initialize_config.x_error_sum = 0 + self.initialize_config.y_error_sum = 0 def set_using_head_scan(self, use_scan): - self.use_head_scan = use_scan + self.config.use_head_scan = use_scan def process_tracking(self): - if not self.on_tracking: - self.object_position.z = 0 - self.count_not_found = 0 + if not self.initialize_config.on_tracking: + self.initialize_config.object_position.z = 0 + self.initialize_config.count_not_found = 0 return "NotFound" - if self.object_position.z <= 0: - self.count_not_found += 1 - if self.count_not_found < self.WAITING_THRESHOLD: - if self.tracking_status in ["Found", "Waiting"]: + if self.initialize_config.object_position.z <= 0: + self.initialize_config.count_not_found += 1 + if self.initialize_config.count_not_found < self.config.WAITING_THRESHOLD: + if self.initialize_config.tracking_status in ["Found", "Waiting"]: tracking_status = "Waiting" else: tracking_status = "NotFound" - elif self.count_not_found > self.NOT_FOUND_THRESHOLD: + elif self.initialize_config.count_not_found > self.config.NOT_FOUND_THRESHOLD: self.scan_object() - self.count_not_found = 0 + self.initialize_config.count_not_found = 0 tracking_status = "NotFound" else: tracking_status = "NotFound" else: - self.count_not_found = 0 + self.initialize_config.count_not_found = 0 tracking_status = "Found" if tracking_status != "Found": - self.tracking_status = tracking_status - self.current_object_pan = 0 - self.current_object_tilt = 0 - self.x_error_sum = 0 - self.y_error_sum = 0 + self.initialize_config.tracking_status = tracking_status + self.initialize_config.current_object_pan = 0 + self.initialize_config.current_object_tilt = 0 + self.initialize_config.x_error_sum = 0 + self.initialize_config.y_error_sum = 0 return tracking_status - x_error = -math.atan(self.object_position.x * math.tan(self.FOV_WIDTH)) - y_error = -math.atan(self.object_position.y * math.tan(self.FOV_HEIGHT)) - object_size = self.object_position.z + x_error, y_error = calculate_error(self.initialize_config.object_position, self.config.FOV_WIDTH, self.config.FOV_HEIGHT) + object_size = self.initialize_config.object_position.z - curr_time = rospy.Time.now() - delta_time = (curr_time - self.prev_time).to_sec() + curr_time = rospy.Time.now() if self.ros_version == '1' else self.node.get_clock().now() + delta_time = calculate_delta_time(curr_time, self.prev_time) self.prev_time = curr_time - x_error_diff = (x_error - self.current_object_pan) / delta_time - y_error_diff = (y_error - self.current_object_tilt) / delta_time - self.x_error_sum += x_error - self.y_error_sum += y_error - x_error_target = x_error * self.p_gain + x_error_diff * self.d_gain + self.x_error_sum * self.i_gain - y_error_target = y_error * self.p_gain + y_error_diff * self.d_gain + self.y_error_sum * self.i_gain + x_error_diff = (x_error - self.initialize_config.current_object_pan) / delta_time + y_error_diff = (y_error - self.initialize_config.current_object_tilt) / delta_time + self.initialize_config.x_error_sum += x_error + self.initialize_config.y_error_sum += y_error + + x_error_target = calculate_error_target(x_error, x_error_diff, self.initialize_config.x_error_sum, + self.config.p_gain, self.config.i_gain, self.config.d_gain) + y_error_target = calculate_error_target(y_error, y_error_diff, self.initialize_config.y_error_sum, + self.config.p_gain, self.config.i_gain, self.config.d_gain) - if self.DEBUG_PRINT: - rospy.loginfo(f"Error: {x_error * 180 / math.pi} | {y_error * 180 / math.pi}") - rospy.loginfo(f"Error diff: {x_error_diff * 180 / math.pi} | {y_error_diff * 180 / math.pi} | {delta_time}") - rospy.loginfo(f"Error sum: {self.x_error_sum * 180 / math.pi} | {self.y_error_sum * 180 / math.pi}") - rospy.loginfo(f"Error target: {x_error_target * 180 / math.pi} | {y_error_target * 180 / math.pi}") + if self.config.DEBUG_PRINT: + self.logger.info(f"Error: {x_error * 180 / math.pi} | {y_error * 180 / math.pi}") + self.logger.info(f"Error diff: {x_error_diff * 180 / math.pi} | {y_error_diff * 180 / math.pi} | {delta_time}") + self.logger.info(f"Error sum: {self.initialize_config.x_error_sum * 180 / math.pi} | {self.initialize_config.y_error_sum * 180 / math.pi}") + self.logger.info(f"Error target: {x_error_target * 180 / math.pi} | {y_error_target * 180 / math.pi}") self.publish_head_joint(x_error_target, y_error_target) - self.current_object_pan = x_error - self.current_object_tilt = y_error - self.current_object_bottom = object_size + self.initialize_config.current_object_pan = x_error + self.initialize_config.current_object_tilt = y_error + self.initialize_config.current_object_bottom = object_size - self.object_position.z = 0 + self.initialize_config.object_position.z = 0 - self.tracking_status = tracking_status + self.initialize_config.tracking_status = tracking_status return tracking_status def publish_head_joint(self, pan, tilt): @@ -175,7 +189,7 @@ class ObjectTracker: self.head_joint_pub.publish(head_angle_msg) def scan_object(self): - if not self.use_head_scan: + if not self.config.use_head_scan: return scan_msg = String() @@ -183,12 +197,39 @@ class ObjectTracker: self.head_scan_pub.publish(scan_msg) -if __name__ == '__main__': + def run(self): + if self.ros_version == '1': + rospy.spin() + else: + rclpy.spin(self.node) + +def main(ros_version): try: - tracker = ObjectTracker() - rate = rospy.Rate(30) - while not rospy.is_shutdown(): - tracker.process_tracking() - rate.sleep() - except rospy.ROSInterruptException: - pass + tracker = ObjectTracker(ros_version) + tracker.start_tracking() + tracker.run() + except Exception as e: + if ros_version == '1': + rospy.logerr(f"An error occurred: {e}") + else: + rclpy.shutdown() + print(f"An error occurred: {e}") + +if __name__ == '__main__': + ros_version = os.getenv("ROS_VERSION") + if ros_version == "1": + import rospy + try: + main(ros_version) + except rospy.ROSInterruptException: + print("Error in ROS1 main") + elif ros_version == "2": + import rclpy + try: + main(ros_version) + except KeyboardInterrupt: + rclpy.shutdown() + print("Error in ROS2 main") + else: + print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") + sys.exit(1) From 981060ddc27802fef686107de251d5b077c28606 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Wed, 24 Jul 2024 01:51:43 -0400 Subject: [PATCH 167/172] latest pushes --- .../CMakeLists.txt | 66 ++++++++ .../package.xml | 46 +++++ .../setup.py | 26 +++ .../src/follower.py | 52 ++++++ .../src/follower_config.py | 159 ++++++++++++++++++ .../src/tracker.py | 30 ++++ .../src/tracker_config.py | 126 ++++++++++++++ 7 files changed, 505 insertions(+) create mode 100644 humanoid_robot_intelligence_control_system_detection/CMakeLists.txt create mode 100644 humanoid_robot_intelligence_control_system_detection/package.xml create mode 100644 humanoid_robot_intelligence_control_system_detection/setup.py create mode 100644 humanoid_robot_intelligence_control_system_detection/src/follower.py create mode 100644 humanoid_robot_intelligence_control_system_detection/src/follower_config.py create mode 100644 humanoid_robot_intelligence_control_system_detection/src/tracker.py create mode 100644 humanoid_robot_intelligence_control_system_detection/src/tracker_config.py diff --git a/humanoid_robot_intelligence_control_system_detection/CMakeLists.txt b/humanoid_robot_intelligence_control_system_detection/CMakeLists.txt new file mode 100644 index 0000000..c427fc3 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_detection/CMakeLists.txt @@ -0,0 +1,66 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +cmake_minimum_required(VERSION 3.0.2) +project(humanoid_robot_intelligence_control_system_detection) + +if($ENV{ROS_VERSION} EQUAL 1) + find_package(catkin REQUIRED COMPONENTS + rospy + ) + + catkin_package( + CATKIN_DEPENDS + rospy + ) + +else() + find_package(ament_cmake REQUIRED) + find_package(ament_cmake_python REQUIRED) + find_package(rclpy REQUIRED) + find_package(std_msgs REQUIRED) +endif() + +if($ENV{ROS_VERSION} EQUAL 1) + catkin_python_setup() + + catkin_install_python(PROGRAMS + src/follower.py + src/follower_config.py + src/tracker.py + src/tracker_config.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + + install(DIRECTORY config launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} + ) + +else() + ament_python_install_package(${PROJECT_NAME}) + + install(PROGRAMS + src/follower.py + src/follower_config.py + src/tracker.py + src/tracker_config.py + DESTINATION lib/${PROJECT_NAME} + ) + + install(DIRECTORY config launch rviz + DESTINATION share/${PROJECT_NAME} + ) + + ament_package() +endif() diff --git a/humanoid_robot_intelligence_control_system_detection/package.xml b/humanoid_robot_intelligence_control_system_detection/package.xml new file mode 100644 index 0000000..fa6c357 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_detection/package.xml @@ -0,0 +1,46 @@ + + + + + humanoid_robot_intelligence_control_system_detection + 0.0.1 + + This Package is for Detection Math + + Apache 2.0 + Ronaldson Bellande + + catkin + ament_cmake + ament_cmake_python + + + rospy + + + rclpy + + + python3-opencv + python3-yaml + usb_cam + + + catkin + ament_cmake + + diff --git a/humanoid_robot_intelligence_control_system_detection/setup.py b/humanoid_robot_intelligence_control_system_detection/setup.py new file mode 100644 index 0000000..ca93ba9 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_detection/setup.py @@ -0,0 +1,26 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from distutils.core import setup +from catkin_pkg.python_setup import generate_distutils_setup + +# fetch values from package.xml +setup_args = generate_distutils_setup( + scripts=['src/follower.py', "src/follower_config.py", 'src/tracker.py', "src/tracker_config.py"], + packages=['humanoid_robot_intelligence_control_system_detection'], + package_dir={'': 'src'}, +) + +setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_detection/src/follower.py b/humanoid_robot_intelligence_control_system_detection/src/follower.py new file mode 100644 index 0000000..8d32487 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_detection/src/follower.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import math + +def calculate_distance_to_object(camera_height, tilt, hip_pitch_offset, object_size): + distance = camera_height * math.tan(math.pi * 0.5 + tilt - hip_pitch_offset - object_size) + return abs(distance) + +def calculate_footstep(current_x_move, target_distance, current_r_angle, target_angle, delta_time, config): + next_movement = current_x_move + target_distance = max(0, target_distance) + fb_goal = min(target_distance * 0.1, config.MAX_FB_STEP) + config.accum_period_time += delta_time + if config.accum_period_time > (config.curr_period_time / 4): + config.accum_period_time = 0.0 + if (target_distance * 0.1 / 2) < current_x_move: + next_movement -= config.UNIT_FB_STEP + else: + next_movement += config.UNIT_FB_STEP + fb_goal = min(next_movement, fb_goal) + fb_move = max(fb_goal, config.MIN_FB_STEP) + + rl_goal = 0.0 + if abs(target_angle) * 180 / math.pi > 5.0: + rl_offset = abs(target_angle) * 0.2 + rl_goal = min(rl_offset, config.MAX_RL_TURN) + rl_goal = max(rl_goal, config.MIN_RL_TURN) + rl_angle = min(abs(current_r_angle) + config.UNIT_RL_TURN, rl_goal) + if target_angle < 0: + rl_angle *= -1 + else: + rl_angle = 0 + + return fb_move, rl_angle + +def calculate_delta_time(curr_time, prev_time): + return (curr_time - prev_time).to_sec() diff --git a/humanoid_robot_intelligence_control_system_detection/src/follower_config.py b/humanoid_robot_intelligence_control_system_detection/src/follower_config.py new file mode 100644 index 0000000..8bd53d1 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_detection/src/follower_config.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import math + + +class FollowerConfig: + def __init__(self): + self.FOV_WIDTH = 35.2 * math.pi / 180 + self.FOV_HEIGHT = 21.6 * math.pi / 180 + self.CAMERA_HEIGHT = 0.46 + self.NOT_FOUND_THRESHOLD = 50 + self.MAX_FB_STEP = 40.0 * 0.001 + self.MAX_RL_TURN = 15.0 * math.pi / 180 + self.IN_PLACE_FB_STEP = -3.0 * 0.001 + self.MIN_FB_STEP = 5.0 * 0.001 + self.MIN_RL_TURN = 5.0 * math.pi / 180 + self.UNIT_FB_STEP = 1.0 * 0.001 + self.UNIT_RL_TURN = 0.5 * math.pi / 180 + self.SPOT_FB_OFFSET = 0.0 * 0.001 + self.SPOT_RL_OFFSET = 0.0 * 0.001 + self.SPOT_ANGLE_OFFSET = 0.0 + self.hip_pitch_offset = 7.0 + self.curr_period_time = 0.6 + self.accum_period_time = 0.0 + self.DEBUG_PRINT = False + + def update_from_params(self, get_param): + self.FOV_WIDTH = get_param('fov_width', self.FOV_WIDTH) + self.FOV_HEIGHT = get_param('fov_height', self.FOV_HEIGHT) + self.CAMERA_HEIGHT = get_param('camera_height', self.CAMERA_HEIGHT) + self.NOT_FOUND_THRESHOLD = get_param('not_found_threshold', self.NOT_FOUND_THRESHOLD) + self.MAX_FB_STEP = get_param('max_fb_step', self.MAX_FB_STEP) + self.MAX_RL_TURN = get_param('max_rl_turn', self.MAX_RL_TURN) + self.IN_PLACE_FB_STEP = get_param('in_place_fb_step', self.IN_PLACE_FB_STEP) + self.MIN_FB_STEP = get_param('min_fb_step', self.MIN_FB_STEP) + self.MIN_RL_TURN = get_param('min_rl_turn', self.MIN_RL_TURN) + self.UNIT_FB_STEP = get_param('unit_fb_step', self.UNIT_FB_STEP) + self.UNIT_RL_TURN = get_param('unit_rl_turn', self.UNIT_RL_TURN) + self.SPOT_FB_OFFSET = get_param('spot_fb_offset', self.SPOT_FB_OFFSET) + self.SPOT_RL_OFFSET = get_param('spot_rl_offset', self.SPOT_RL_OFFSET) + self.SPOT_ANGLE_OFFSET = get_param('spot_angle_offset', self.SPOT_ANGLE_OFFSET) + self.hip_pitch_offset = get_param('hip_pitch_offset', self.hip_pitch_offset) + self.curr_period_time = get_param('curr_period_time', self.curr_period_time) + self.DEBUG_PRINT = get_param('debug_print', self.DEBUG_PRINT) + + +class FollowerInitializeConfig: + def __init__(self): + self.count_not_found = 0 + self.count_to_approach = 0 + self.on_tracking = False + self.approach_object_position = "NotFound" + self.current_pan = -10 + self.current_tilt = -10 + self.current_x_move = 0.005 + self.current_r_angle = 0 + self.x_error_sum = 0.0 + self.y_error_sum = 0.0 + self.current_object_bottom = 0.0 + self.tracking_status = "NotFound" + self.object_position = None + + + def update_from_params(self, get_param): + self.count_not_found = get_param('initial_count_not_found', self.count_not_found) + self.count_to_approach = get_param('initial_count_to_approach', self.count_to_approach) + self.on_tracking = get_param('initial_on_tracking', self.on_tracking) + self.approach_object_position = get_param('initial_approach_object_position', self.approach_object_position) + self.current_pan = get_param('initial_current_pan', self.current_pan) + self.current_tilt = get_param('initial_current_tilt', self.current_tilt) + self.current_x_move = get_param('initial_current_x_move', self.current_x_move) + self.current_r_angle = get_param('initial_current_r_angle', self.current_r_angle) + self.x_error_sum = get_param('initial_x_error_sum', self.x_error_sum) + self.y_error_sum = get_param('initial_y_error_sum', self.y_error_sum) + self.current_object_bottom = get_param('initial_object_bottom', self.current_object_bottom) + self.tracking_status = get_param('initial_tracking_status', self.tracking_status) + + + def reset(self): + """Reset all values to their initial state.""" + self.__init__() + + def update_object_position(self, x, y, z): + """Update the object position.""" + self.object_position.x = x + self.object_position.y = y + self.object_position.z = z + + def increment_count_not_found(self): + """Increment the count of frames where object was not found.""" + self.count_not_found += 1 + + def reset_count_not_found(self): + """Reset the count of frames where object was not found.""" + self.count_not_found = 0 + + def increment_count_to_approach(self): + """Increment the count to approach.""" + self.count_to_approach += 1 + + def reset_count_to_approach(self): + """Reset the count to approach.""" + self.count_to_approach = 0 + + def set_tracking_status(self, status): + """Set the current tracking status.""" + self.tracking_status = status + + def update_error_sums(self, x_error, y_error): + """Update the cumulative error sums.""" + self.x_error_sum += x_error + self.y_error_sum += y_error + + def reset_error_sums(self): + """Reset the cumulative error sums.""" + self.x_error_sum = 0.0 + self.y_error_sum = 0.0 + + def update_current_object_position(self, pan, tilt, bottom): + """Update the current object position.""" + self.current_pan = pan + self.current_tilt = tilt + self.current_object_bottom = bottom + + def update_movement(self, x_move, r_angle): + """Update the current movement parameters.""" + self.current_x_move = x_move + self.current_r_angle = r_angle + + def is_tracking(self): + """Check if tracking is currently active.""" + return self.on_tracking + + def start_tracking(self): + """Start the tracking process.""" + self.on_tracking = True + + def stop_tracking(self): + """Stop the tracking process.""" + self.on_tracking = False + + def set_approach_position(self, position): + """Set the approach position of the object.""" + self.approach_object_position = position diff --git a/humanoid_robot_intelligence_control_system_detection/src/tracker.py b/humanoid_robot_intelligence_control_system_detection/src/tracker.py new file mode 100644 index 0000000..369d84e --- /dev/null +++ b/humanoid_robot_intelligence_control_system_detection/src/tracker.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +import math + +def calculate_error(object_position, FOV_WIDTH, FOV_HEIGHT): + x_error = -math.atan(object_position.x * math.tan(FOV_WIDTH)) + y_error = -math.atan(object_position.y * math.tan(FOV_HEIGHT)) + return x_error, y_error + +def calculate_error_target(error, error_diff, error_sum, p_gain, i_gain, d_gain): + return error * p_gain + error_diff * d_gain + error_sum * i_gain + +def calculate_delta_time(curr_time, prev_time): + return (curr_time - prev_time).to_sec() diff --git a/humanoid_robot_intelligence_control_system_detection/src/tracker_config.py b/humanoid_robot_intelligence_control_system_detection/src/tracker_config.py new file mode 100644 index 0000000..5310436 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_detection/src/tracker_config.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import math + +class TrackerConfig: + def __init__(self): + self.FOV_WIDTH = 35.2 * math.pi / 180 + self.FOV_HEIGHT = 21.6 * math.pi / 180 + self.NOT_FOUND_THRESHOLD = 50 + self.WAITING_THRESHOLD = 5 + self.use_head_scan = True + self.DEBUG_PRINT = False + self.p_gain = 0.4 + self.i_gain = 0.0 + self.d_gain = 0.0 + + def update_from_params(self, get_param): + self.FOV_WIDTH = get_param('fov_width', self.FOV_WIDTH) + self.FOV_HEIGHT = get_param('fov_height', self.FOV_HEIGHT) + self.NOT_FOUND_THRESHOLD = get_param('not_found_threshold', self.NOT_FOUND_THRESHOLD) + self.WAITING_THRESHOLD = get_param('waiting_threshold', self.WAITING_THRESHOLD) + self.use_head_scan = get_param('use_head_scan', self.use_head_scan) + self.DEBUG_PRINT = get_param('debug_print', self.DEBUG_PRINT) + self.p_gain = get_param('p_gain', self.p_gain) + self.i_gain = get_param('i_gain', self.i_gain) + self.d_gain = get_param('d_gain', self.d_gain) + + +class TrackerInitializeConfig: + def __init__(self): + self.count_not_found = 0 + self.on_tracking = False + self.current_object_pan = 0.0 + self.current_object_tilt = 0.0 + self.x_error_sum = 0.0 + self.y_error_sum = 0.0 + self.current_object_bottom = 0.0 + self.tracking_status = "NotFound" + self.object_position = None + + + def update_from_params(self, get_param): + self.count_not_found = get_param('initial_count_not_found', self.count_not_found) + self.on_tracking = get_param('initial_on_tracking', self.on_tracking) + self.current_object_pan = get_param('initial_object_pan', self.current_object_pan) + self.current_object_tilt = get_param('initial_object_tilt', self.current_object_tilt) + self.x_error_sum = get_param('initial_x_error_sum', self.x_error_sum) + self.y_error_sum = get_param('initial_y_error_sum', self.y_error_sum) + self.current_object_bottom = get_param('initial_object_bottom', self.current_object_bottom) + self.tracking_status = get_param('initial_tracking_status', self.tracking_status) + + + def reset(self): + """Reset all values to their initial state.""" + self.__init__() + + + def update_object_position(self, x, y, z): + """Update the object position.""" + self.object_position.x = x + self.object_position.y = y + self.object_position.z = z + + + def increment_count_not_found(self): + """Increment the count of frames where object was not found.""" + self.count_not_found += 1 + + + def reset_count_not_found(self): + """Reset the count of frames where object was not found.""" + self.count_not_found = 0 + + + def set_tracking_status(self, status): + """Set the current tracking status.""" + self.tracking_status = status + + + def update_error_sums(self, x_error, y_error): + """Update the cumulative error sums.""" + self.x_error_sum += x_error + self.y_error_sum += y_error + + + def reset_error_sums(self): + """Reset the cumulative error sums.""" + self.x_error_sum = 0.0 + self.y_error_sum = 0.0 + + + def update_current_object_position(self, pan, tilt, bottom): + """Update the current object position.""" + self.current_object_pan = pan + self.current_object_tilt = tilt + self.current_object_bottom = bottom + + + def is_tracking(self): + """Check if tracking is currently active.""" + return self.on_tracking + + + def start_tracking(self): + """Start the tracking process.""" + self.on_tracking = True + + + def stop_tracking(self): + """Stop the tracking process.""" + self.on_tracking = False From cea1e7aca83beaee1f39fee5cd19d01b5d8dc5f5 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Wed, 24 Jul 2024 01:53:54 -0400 Subject: [PATCH 168/172] latest pushes --- .../CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/humanoid_robot_intelligence_control_system_configure/CMakeLists.txt b/humanoid_robot_intelligence_control_system_configure/CMakeLists.txt index 0277ccd..48ef842 100644 --- a/humanoid_robot_intelligence_control_system_configure/CMakeLists.txt +++ b/humanoid_robot_intelligence_control_system_configure/CMakeLists.txt @@ -13,7 +13,7 @@ # the License. cmake_minimum_required(VERSION 3.0.2) -project(humanoid_robot_intelligence_control_system_object_detector) +project(humanoid_robot_intelligence_control_system_configure) if($ENV{ROS_VERSION} EQUAL 1) find_package(catkin REQUIRED COMPONENTS From 56ff1dd06c01a81dfb12338aa4598449775897b9 Mon Sep 17 00:00:00 2001 From: Ronaldson Bellande <47253433+RonaldsonBellande@users.noreply.github.com> Date: Wed, 24 Jul 2024 10:15:33 -0400 Subject: [PATCH 169/172] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 412d3e9..a3dd60f 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,9 @@ - [![Bellande's Internal Sensor Web API](https://img.shields.io/badge/Bellande's%20Internal%20Sensor%20Web%20API-Bellande%20API-blue?style=for-the-badge&logo=javascript&color=blue)](https://github.com/Application-UI-UX/bellande_internal_sensor_web_api) - [![Bellande's External Sensor Web API](https://img.shields.io/badge/Bellande's%20External%20Sensor%20Web%20API-Bellande%20API-blue?style=for-the-badge&logo=javascript&color=blue)](https://github.com/Application-UI-UX/bellande_external_sensor_web_api) - [![Bellande's Functionality Web API](https://img.shields.io/badge/Bellande's%20Functionality%20Web%20API-Bellande%20API-blue?style=for-the-badge&logo=javascript&color=blue)](https://github.com/Application-UI-UX/bellande_functionality_web_api) +- [![Bellande's Algorithm through Bellande API](https://img.shields.io/badge/Bellande's%20Algorithm%20through%20Bellande's%20API-Bellande%20API-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/bellande_functionality_ros_api) +- [![Bellande's Algorithm through Bellande MODELS](https://img.shields.io/badge/Bellande's%20Algorithm%20through%20Bellande's%20API-Bellande%20MODELS-blue?style=for-the-badge&logo=ros&color=blue)](https://github.com/Robotics-Sensors/bellande_ros_models) + ## 🤖 Explore Humanoid Robot Intelligence with Us! From 3c1b5a85df7d790d1a4185f7f0e14af3f4e7942b Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Thu, 25 Jul 2024 10:07:05 -0400 Subject: [PATCH 170/172] latest pushes --- .../src/follower.py | 2 +- .../src/follower_config.py | 86 ++++++++++++++++ .../src/tracker_config.py | 98 +++++++++++++++++++ 3 files changed, 185 insertions(+), 1 deletion(-) diff --git a/humanoid_robot_intelligence_control_system_detection/src/follower.py b/humanoid_robot_intelligence_control_system_detection/src/follower.py index 8d32487..b19ab4c 100644 --- a/humanoid_robot_intelligence_control_system_detection/src/follower.py +++ b/humanoid_robot_intelligence_control_system_detection/src/follower.py @@ -17,7 +17,7 @@ import math -def calculate_distance_to_object(camera_height, tilt, hip_pitch_offset, object_size): +def calculate_distance_to(camera_height, tilt, hip_pitch_offset, object_size): distance = camera_height * math.tan(math.pi * 0.5 + tilt - hip_pitch_offset - object_size) return abs(distance) diff --git a/humanoid_robot_intelligence_control_system_detection/src/follower_config.py b/humanoid_robot_intelligence_control_system_detection/src/follower_config.py index 8bd53d1..ae09c01 100644 --- a/humanoid_robot_intelligence_control_system_detection/src/follower_config.py +++ b/humanoid_robot_intelligence_control_system_detection/src/follower_config.py @@ -58,6 +58,92 @@ class FollowerConfig: self.curr_period_time = get_param('curr_period_time', self.curr_period_time) self.DEBUG_PRINT = get_param('debug_print', self.DEBUG_PRINT) + def reset(self): + """Reset all values to their initial state.""" + self.__init__() + + def set_fov(self, width, height): + """Set the field of view.""" + self.FOV_WIDTH = width + self.FOV_HEIGHT = height + + def set_camera_height(self, height): + """Set the camera height.""" + self.CAMERA_HEIGHT = height + + def set_thresholds(self, not_found_threshold): + """Set the thresholds.""" + self.NOT_FOUND_THRESHOLD = not_found_threshold + + def set_step_parameters(self, max_fb, max_rl, in_place_fb, min_fb, min_rl, unit_fb, unit_rl): + """Set the step parameters.""" + self.MAX_FB_STEP = max_fb + self.MAX_RL_TURN = max_rl + self.IN_PLACE_FB_STEP = in_place_fb + self.MIN_FB_STEP = min_fb + self.MIN_RL_TURN = min_rl + self.UNIT_FB_STEP = unit_fb + self.UNIT_RL_TURN = unit_rl + + def set_spot_offsets(self, fb_offset, rl_offset, angle_offset): + """Set the spot offsets.""" + self.SPOT_FB_OFFSET = fb_offset + self.SPOT_RL_OFFSET = rl_offset + self.SPOT_ANGLE_OFFSET = angle_offset + + def set_hip_pitch_offset(self, offset): + """Set the hip pitch offset.""" + self.hip_pitch_offset = offset + + def set_period_time(self, period_time): + """Set the current period time.""" + self.curr_period_time = period_time + + def update_accum_period_time(self, delta_time): + """Update the accumulated period time.""" + self.accum_period_time += delta_time + if self.accum_period_time > (self.curr_period_time / 4): + self.accum_period_time = 0.0 + return self.accum_period_time + + def reset_accum_period_time(self): + """Reset the accumulated period time.""" + self.accum_period_time = 0.0 + + def set_debug_print(self, debug_print): + """Set the debug print flag.""" + self.DEBUG_PRINT = debug_print + + def get_config_dict(self): + """Return a dictionary of all configuration parameters.""" + return { + 'FOV_WIDTH': self.FOV_WIDTH, + 'FOV_HEIGHT': self.FOV_HEIGHT, + 'CAMERA_HEIGHT': self.CAMERA_HEIGHT, + 'NOT_FOUND_THRESHOLD': self.NOT_FOUND_THRESHOLD, + 'MAX_FB_STEP': self.MAX_FB_STEP, + 'MAX_RL_TURN': self.MAX_RL_TURN, + 'IN_PLACE_FB_STEP': self.IN_PLACE_FB_STEP, + 'MIN_FB_STEP': self.MIN_FB_STEP, + 'MIN_RL_TURN': self.MIN_RL_TURN, + 'UNIT_FB_STEP': self.UNIT_FB_STEP, + 'UNIT_RL_TURN': self.UNIT_RL_TURN, + 'SPOT_FB_OFFSET': self.SPOT_FB_OFFSET, + 'SPOT_RL_OFFSET': self.SPOT_RL_OFFSET, + 'SPOT_ANGLE_OFFSET': self.SPOT_ANGLE_OFFSET, + 'hip_pitch_offset': self.hip_pitch_offset, + 'curr_period_time': self.curr_period_time, + 'accum_period_time': self.accum_period_time, + 'DEBUG_PRINT': self.DEBUG_PRINT + } + + def load_config_dict(self, config_dict): + """Load configuration from a dictionary.""" + for key, value in config_dict.items(): + if hasattr(self, key): + setattr(self, key, value) + + class FollowerInitializeConfig: def __init__(self): diff --git a/humanoid_robot_intelligence_control_system_detection/src/tracker_config.py b/humanoid_robot_intelligence_control_system_detection/src/tracker_config.py index 5310436..43bd55a 100644 --- a/humanoid_robot_intelligence_control_system_detection/src/tracker_config.py +++ b/humanoid_robot_intelligence_control_system_detection/src/tracker_config.py @@ -40,6 +40,104 @@ class TrackerConfig: self.i_gain = get_param('i_gain', self.i_gain) self.d_gain = get_param('d_gain', self.d_gain) + def reset(self): + """Reset all values to their initial state.""" + self.__init__() + + def set_fov(self, width, height): + """Set the field of view.""" + self.FOV_WIDTH = width + self.FOV_HEIGHT = height + + def set_thresholds(self, not_found_threshold, waiting_threshold): + """Set the thresholds.""" + self.NOT_FOUND_THRESHOLD = not_found_threshold + self.WAITING_THRESHOLD = waiting_threshold + + def set_use_head_scan(self, use_head_scan): + """Set whether to use head scan.""" + self.use_head_scan = use_head_scan + + def set_debug_print(self, debug_print): + """Set the debug print flag.""" + self.DEBUG_PRINT = debug_print + + def set_pid_gains(self, p_gain, i_gain, d_gain): + """Set the PID gains.""" + self.p_gain = p_gain + self.i_gain = i_gain + self.d_gain = d_gain + + def get_pid_gains(self): + """Get the PID gains.""" + return self.p_gain, self.i_gain, self.d_gain + + def adjust_pid_gains(self, p_adjust=0, i_adjust=0, d_adjust=0): + """Adjust the PID gains by the given amounts.""" + self.p_gain += p_adjust + self.i_gain += i_adjust + self.d_gain += d_adjust + + def get_config_dict(self): + """Return a dictionary of all configuration parameters.""" + return { + 'FOV_WIDTH': self.FOV_WIDTH, + 'FOV_HEIGHT': self.FOV_HEIGHT, + 'NOT_FOUND_THRESHOLD': self.NOT_FOUND_THRESHOLD, + 'WAITING_THRESHOLD': self.WAITING_THRESHOLD, + 'use_head_scan': self.use_head_scan, + 'DEBUG_PRINT': self.DEBUG_PRINT, + 'p_gain': self.p_gain, + 'i_gain': self.i_gain, + 'd_gain': self.d_gain + } + + def load_config_dict(self, config_dict): + """Load configuration from a dictionary.""" + for key, value in config_dict.items(): + if hasattr(self, key): + setattr(self, key, value) + + def validate_config(self): + """Validate the configuration parameters.""" + assert 0 < self.FOV_WIDTH < math.pi, "FOV_WIDTH must be between 0 and pi" + assert 0 < self.FOV_HEIGHT < math.pi, "FOV_HEIGHT must be between 0 and pi" + assert self.NOT_FOUND_THRESHOLD > 0, "NOT_FOUND_THRESHOLD must be positive" + assert self.WAITING_THRESHOLD > 0, "WAITING_THRESHOLD must be positive" + assert isinstance(self.use_head_scan, bool), "use_head_scan must be a boolean" + assert isinstance(self.DEBUG_PRINT, bool), "DEBUG_PRINT must be a boolean" + assert self.p_gain >= 0, "p_gain must be non-negative" + assert self.i_gain >= 0, "i_gain must be non-negative" + assert self.d_gain >= 0, "d_gain must be non-negative" + + def print_config(self): + """Print the current configuration.""" + for key, value in self.get_config_dict().items(): + print(f"{key}: {value}") + + def to_ros_param(self): + """Convert the configuration to a format suitable for ROS parameters.""" + return { + 'tracker': { + 'fov': { + 'width': self.FOV_WIDTH, + 'height': self.FOV_HEIGHT + }, + 'thresholds': { + 'not_found': self.NOT_FOUND_THRESHOLD, + 'waiting': self.WAITING_THRESHOLD + }, + 'use_head_scan': self.use_head_scan, + 'debug_print': self.DEBUG_PRINT, + 'pid': { + 'p': self.p_gain, + 'i': self.i_gain, + 'd': self.d_gain + } + } + } + + class TrackerInitializeConfig: def __init__(self): From f6a58b7f38e6f4308c0cb8d1004705dac71d2870 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Thu, 25 Jul 2024 15:02:40 -0400 Subject: [PATCH 171/172] latest pushes --- .../CMakeLists.txt | 60 ++++ .../package.xml | 46 +++ .../setup.py | 26 ++ .../src/PIDController.py | 50 +++ .../CMakeLists.txt | 62 ++++ .../package.xml | 46 +++ .../setup.py | 26 ++ .../src/HumanoidRobotController.py | 327 ++++++++++++++++++ .../src/MovementController.py | 73 ++++ 9 files changed, 716 insertions(+) create mode 100644 humanoid_robot_intelligence_control_system_controller/CMakeLists.txt create mode 100644 humanoid_robot_intelligence_control_system_controller/package.xml create mode 100644 humanoid_robot_intelligence_control_system_controller/setup.py create mode 100644 humanoid_robot_intelligence_control_system_controller/src/PIDController.py create mode 100644 humanoid_robot_intelligence_control_system_movement/CMakeLists.txt create mode 100644 humanoid_robot_intelligence_control_system_movement/package.xml create mode 100644 humanoid_robot_intelligence_control_system_movement/setup.py create mode 100644 humanoid_robot_intelligence_control_system_movement/src/HumanoidRobotController.py create mode 100644 humanoid_robot_intelligence_control_system_movement/src/MovementController.py diff --git a/humanoid_robot_intelligence_control_system_controller/CMakeLists.txt b/humanoid_robot_intelligence_control_system_controller/CMakeLists.txt new file mode 100644 index 0000000..e7de26d --- /dev/null +++ b/humanoid_robot_intelligence_control_system_controller/CMakeLists.txt @@ -0,0 +1,60 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +cmake_minimum_required(VERSION 3.0.2) +project(humanoid_robot_intelligence_control_system_controller) + +if($ENV{ROS_VERSION} EQUAL 1) + find_package(catkin REQUIRED COMPONENTS + rospy + ) + + catkin_package( + CATKIN_DEPENDS + rospy + ) + +else() + find_package(ament_cmake REQUIRED) + find_package(ament_cmake_python REQUIRED) + find_package(rclpy REQUIRED) + find_package(std_msgs REQUIRED) +endif() + +if($ENV{ROS_VERSION} EQUAL 1) + catkin_python_setup() + + catkin_install_python(PROGRAMS + src/PIDController.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + + install(DIRECTORY config launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} + ) + +else() + ament_python_install_package(${PROJECT_NAME}) + + install(PROGRAMS + src/PIDController.py + DESTINATION lib/${PROJECT_NAME} + ) + + install(DIRECTORY config launch rviz + DESTINATION share/${PROJECT_NAME} + ) + + ament_package() +endif() diff --git a/humanoid_robot_intelligence_control_system_controller/package.xml b/humanoid_robot_intelligence_control_system_controller/package.xml new file mode 100644 index 0000000..0ab0b27 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_controller/package.xml @@ -0,0 +1,46 @@ + + + + + humanoid_robot_intelligence_control_system_controller + 0.0.1 + + This Package is for Detection Math + + Apache 2.0 + Ronaldson Bellande + + catkin + ament_cmake + ament_cmake_python + + + rospy + + + rclpy + + + python3-opencv + python3-yaml + usb_cam + + + catkin + ament_cmake + + diff --git a/humanoid_robot_intelligence_control_system_controller/setup.py b/humanoid_robot_intelligence_control_system_controller/setup.py new file mode 100644 index 0000000..cbd6630 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_controller/setup.py @@ -0,0 +1,26 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from distutils.core import setup +from catkin_pkg.python_setup import generate_distutils_setup + +# fetch values from package.xml +setup_args = generate_distutils_setup( + scripts=['src/PIDController.py'], + packages=['humanoid_robot_intelligence_control_system_controller'], + package_dir={'': 'src'}, +) + +setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_controller/src/PIDController.py b/humanoid_robot_intelligence_control_system_controller/src/PIDController.py new file mode 100644 index 0000000..0a87c58 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_controller/src/PIDController.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import time +from typing import Dict, List, Tuple + +class PIDController: + def __init__(self, gains: Tuple[float, float, float], name: str, output_limits: Tuple[float, float] = (-float('inf'), float('inf'))): + self.kp, self.ki, self.kd = gains + self.name = name + self.output_limits = output_limits + self.reset() + + def reset(self): + self.last_error = 0 + self.integral = 0 + self.last_time = time.time() + + def compute(self, setpoint: float, process_variable: float) -> float: + current_time = time.time() + dt = current_time - self.last_time + error = setpoint - process_variable + + self.integral += error * dt + derivative = (error - self.last_error) / dt if dt > 0 else 0 + + output = self.kp * error + self.ki * self.integral + self.kd * derivative + output = max(min(output, self.output_limits[1]), self.output_limits[0]) + + self.last_error = error + self.last_time = current_time + + return output + + def update_config(self, gains: Tuple[float, float, float]): + self.kp, self.ki, self.kd = gains diff --git a/humanoid_robot_intelligence_control_system_movement/CMakeLists.txt b/humanoid_robot_intelligence_control_system_movement/CMakeLists.txt new file mode 100644 index 0000000..ad4b2c6 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_movement/CMakeLists.txt @@ -0,0 +1,62 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +cmake_minimum_required(VERSION 3.0.2) +project(humanoid_robot_intelligence_control_system_movement) + +if($ENV{ROS_VERSION} EQUAL 1) + find_package(catkin REQUIRED COMPONENTS + rospy + ) + + catkin_package( + CATKIN_DEPENDS + rospy + ) + +else() + find_package(ament_cmake REQUIRED) + find_package(ament_cmake_python REQUIRED) + find_package(rclpy REQUIRED) + find_package(std_msgs REQUIRED) +endif() + +if($ENV{ROS_VERSION} EQUAL 1) + catkin_python_setup() + + catkin_install_python(PROGRAMS + src/MovementController.py + src/HumanoidRobotController.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} + ) + + install(DIRECTORY config launch rviz + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} + ) + +else() + ament_python_install_package(${PROJECT_NAME}) + + install(PROGRAMS + src/MovementController.py + src/HumanoidRobotController.py + DESTINATION lib/${PROJECT_NAME} + ) + + install(DIRECTORY config launch rviz + DESTINATION share/${PROJECT_NAME} + ) + + ament_package() +endif() diff --git a/humanoid_robot_intelligence_control_system_movement/package.xml b/humanoid_robot_intelligence_control_system_movement/package.xml new file mode 100644 index 0000000..7cc7687 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_movement/package.xml @@ -0,0 +1,46 @@ + + + + + humanoid_robot_intelligence_control_system_movement + 0.0.1 + + This Package is for Detection Math + + Apache 2.0 + Ronaldson Bellande + + catkin + ament_cmake + ament_cmake_python + + + rospy + + + rclpy + + + python3-opencv + python3-yaml + usb_cam + + + catkin + ament_cmake + + diff --git a/humanoid_robot_intelligence_control_system_movement/setup.py b/humanoid_robot_intelligence_control_system_movement/setup.py new file mode 100644 index 0000000..1450a13 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_movement/setup.py @@ -0,0 +1,26 @@ +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from distutils.core import setup +from catkin_pkg.python_setup import generate_distutils_setup + +# fetch values from package.xml +setup_args = generate_distutils_setup( + scripts=["src/MovementController.py", "src/HumanoidRobotController.py"], + packages=['humanoid_robot_intelligence_control_system_movement'], + package_dir={'': 'src'}, +) + +setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_movement/src/HumanoidRobotController.py b/humanoid_robot_intelligence_control_system_movement/src/HumanoidRobotController.py new file mode 100644 index 0000000..13adf37 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_movement/src/HumanoidRobotController.py @@ -0,0 +1,327 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import time +import math +from typing import Dict, List, Tuple, Any + +from humanoid_robot_intelligence_control_system_controller.PIDController import PIDController +from humanoid_robot_intelligence_control_system_detection.tracker_config import TrackerConfig +from humanoid_robot_intelligence_control_system_movement.MovementController import MovementController + + +class HumanoidRobotController: + def __init__(self, config: TrackerConfig, controller_type: str = "PID"): + self.config = config + self.controller_type = controller_type + self.controllers: Dict[str, Any] = {} + self.joint_positions: Dict[str, float] = {} + self.target_positions: Dict[str, float] = {} + self.movement_controller = MovementController(config, controller_type) + self.current_balance = 0.0 + self.current_speed = 0.0 + self.current_angle = 0.0 + self.current_position = (0.0, 0.0) + self.last_joint_positions = {} + self.control_loop_time = 0.01 # 100 Hz + + self.initialize_controllers() + self.initialize_sensors() + + + def initialize_controllers(self): + joints = [ + "head_pan", "head_tilt", + "left_shoulder_pitch", "left_shoulder_roll", "left_elbow", + "right_shoulder_pitch", "right_shoulder_roll", "right_elbow", + "left_hip_yaw", "left_hip_roll", "left_hip_pitch", "left_knee", "left_ankle_pitch", "left_ankle_roll", + "right_hip_yaw", "right_hip_roll", "right_hip_pitch", "right_knee", "right_ankle_pitch", "right_ankle_roll" + ] + + for joint in joints: + self.controllers[joint] = self._create_controller(joint) + self.joint_positions[joint] = 0.0 + self.target_positions[joint] = 0.0 + + self.controllers["balance"] = self._create_controller("balance") + self.controllers["walk_forward"] = self._create_controller("walk_forward") + self.controllers["turn"] = self._create_controller("turn") + + self.roll_controller = self._create_controller("roll") + self.pitch_controller = self._create_controller("pitch") + + + def _create_controller(self, controller_name: str) -> Any: + if self.controller_type == "PID": + return PIDController( + getattr(self.config, f"get_{controller_name}_pid_gains")(), + f"{controller_name}_controller", + output_limits=self.config.get_joint_limits(controller_name) + ) + elif self.controller_type == "BellandeController": + return BellandeController( + getattr(self.config, f"get_{controller_name}_bellande_params")(), + f"{controller_name}_controller" + ) + else: + raise ValueError(f"Unsupported controller type: {self.controller_type}") + + + def initialize_sensors(self): + self.imu = None + self.power_sensor = None + self.joint_sensors = None + + + def update_config(self, new_config: TrackerConfig): + self.config = new_config + for joint, controller in self.controllers.items(): + self._update_controller(controller, joint) + self.movement_controller.update_config(new_config) + + + def _update_controller(self, controller: Any, controller_name: str): + if self.controller_type == "PID": + controller.update_config(getattr(self.config, f"get_{controller_name}_pid_gains")()) + elif self.controller_type == "BellandeController": + controller.update_config(getattr(self.config, f"get_{controller_name}_bellande_params")()) + + + def set_target_position(self, joint: str, position: float): + if joint in self.target_positions: + self.target_positions[joint] = position + else: + raise ValueError(f"Unknown joint: {joint}") + + + def update_joint_position(self, joint: str, position: float): + if joint in self.joint_positions: + self.joint_positions[joint] = position + else: + raise ValueError(f"Unknown joint: {joint}") + + + def compute_joint_control(self, joint: str) -> float: + if joint not in self.controllers: + raise ValueError(f"Unknown joint: {joint}") + + return self.controllers[joint].compute( + self.target_positions[joint], + self.joint_positions[joint] + ) + + + def compute_all_joint_controls(self) -> Dict[str, float]: + return {joint: self.compute_joint_control(joint) for joint in self.joint_positions.keys()} + + + def compute_balance_control(self, current_balance: float) -> float: + return self.controllers["balance"].compute(0, current_balance) + + + def compute_walk_forward_control(self, current_speed: float, target_speed: float) -> float: + return self.controllers["walk_forward"].compute(target_speed, current_speed) + + + def compute_turn_control(self, current_angle: float, target_angle: float) -> float: + return self.controllers["turn"].compute(target_angle, current_angle) + + + def reset_all_controllers(self): + for controller in self.controllers.values(): + controller.reset() + + + def update_robot_state(self, joint_positions: Dict[str, float], balance: float, speed: float, angle: float, position: Tuple[float, float]): + for joint, position in joint_positions.items(): + self.update_joint_position(joint, position) + + self.current_balance = balance + self.current_speed = speed + self.current_angle = angle + self.current_position = position + + + def compute_full_robot_control(self, target_speed: float, target_angle: float, target_position: Tuple[float, float]) -> Dict[str, float]: + joint_controls = self.compute_all_joint_controls() + balance_control = self.compute_balance_control(self.current_balance) + walk_control = self.compute_walk_forward_control(self.current_speed, target_speed) + turn_control = self.compute_turn_control(self.current_angle, target_angle) + + translation, rotation = self.movement_controller.compute_path_control(self.current_position, target_position) + + return { + "joints": joint_controls, + "balance": balance_control, + "walk": walk_control, + "turn": turn_control, + "translation": translation, + "rotation": rotation + } + + + def execute_control(self, control: Dict[str, float]): + try: + # Send joint control commands + for joint, value in control['joints'].items(): + self.robot_interface.set_joint_position(joint, value) + + # Send balance control command + self.robot_interface.set_balance_adjustment(control['balance']) + + # Send walk and turn commands + self.robot_interface.set_walk_speed(control['walk']) + self.robot_interface.set_turn_rate(control['turn']) + + # Send translation and rotation commands + self.robot_interface.set_body_translation(control['translation']) + self.robot_interface.set_body_rotation(control['rotation']) + + # Verify that commands were executed + if not self.robot_interface.verify_last_command(): + raise Exception("Failed to execute control commands") + + except Exception as e: + print(f"Error executing control: {e}") + self.emergency_stop() + + + def get_robot_state(self) -> Dict[str, Any]: + joint_positions = self.joint_sensors.get_positions() + imu_data = self.imu.get_data() + return { + "joint_positions": joint_positions, + "balance": imu_data.acceleration.z, + "speed": math.sqrt(imu_data.velocity.x**2 + imu_data.velocity.y**2), + "angle": math.atan2(imu_data.orientation.y, imu_data.orientation.x), + "position": (imu_data.position.x, imu_data.position.y) + } + + + def balance_adjustment(self): + roll, pitch, yaw = self.imu.get_orientation() + roll_rate, pitch_rate, yaw_rate = self.imu.get_angular_velocity() + + roll_correction = self.roll_controller.compute(0, roll) + pitch_correction = self.pitch_controller.compute(0, pitch) + + self.set_target_position("left_hip_roll", self.joint_positions["left_hip_roll"] - roll_correction) + self.set_target_position("right_hip_roll", self.joint_positions["right_hip_roll"] + roll_correction) + self.set_target_position("left_ankle_roll", self.joint_positions["left_ankle_roll"] - roll_correction) + self.set_target_position("right_ankle_roll", self.joint_positions["right_ankle_roll"] + roll_correction) + self.set_target_position("left_ankle_pitch", self.joint_positions["left_ankle_pitch"] - pitch_correction) + self.set_target_position("right_ankle_pitch", self.joint_positions["right_ankle_pitch"] - pitch_correction) + + if abs(pitch) > self.config.get_max_stable_pitch(): + hip_pitch_correction = self.pitch_controller.compute(0, pitch) * 0.5 + self.set_target_position("left_hip_pitch", self.joint_positions["left_hip_pitch"] + hip_pitch_correction) + self.set_target_position("right_hip_pitch", self.joint_positions["right_hip_pitch"] + hip_pitch_correction) + + damping_factor = self.config.get_angular_velocity_damping_factor() + self.set_target_position("left_hip_roll", self.joint_positions["left_hip_roll"] - roll_rate * damping_factor) + self.set_target_position("right_hip_roll", self.joint_positions["right_hip_roll"] + roll_rate * damping_factor) + self.set_target_position("left_ankle_roll", self.joint_positions["left_ankle_roll"] - roll_rate * damping_factor) + self.set_target_position("right_ankle_roll", self.joint_positions["right_ankle_roll"] + roll_rate * damping_factor) + self.set_target_position("left_ankle_pitch", self.joint_positions["left_ankle_pitch"] - pitch_rate * damping_factor) + self.set_target_position("right_ankle_pitch", self.joint_positions["right_ankle_pitch"] - pitch_rate * damping_factor) + + + def check_joint_status(self) -> bool: + for joint, position in self.joint_positions.items(): + limits = self.config.get_joint_limits(joint) + if position < limits[0] or position > limits[1]: + print(f"Joint {joint} out of limits: {position}") + return False + + if joint in self.last_joint_positions: + velocity = (position - self.last_joint_positions[joint]) / self.control_loop_time + if abs(velocity) > self.config.get_max_joint_velocity(joint): + print(f"Joint {joint} velocity too high: {velocity}") + return False + + self.last_joint_positions = self.joint_positions.copy() + return True + + + def check_power_status(self) -> bool: + voltage = self.power_sensor.get_voltage() + current = self.power_sensor.get_current() + + if voltage < self.config.get_min_voltage(): + print(f"Voltage too low: {voltage}V") + return False + if current > self.config.get_max_current(): + print(f"Current too high: {current}A") + return False + + return True + + + def check_sensor_status(self) -> bool: + return self.imu.is_operational() and self.power_sensor.is_operational() and self.joint_sensors.is_operational() + + + def self_diagnosis(self) -> Dict[str, bool]: + return { + "joints": self.check_joint_status(), + "sensors": self.check_sensor_status(), + "power": self.check_power_status(), + } + + + def emergency_stop(self): + self.stop() + self.reset_all_controllers() + + print("Emergency stop activated!") + + + def stop(self): + zero_control = {key: 0.0 for key in self.controllers.keys()} + zero_control.update({"translation": 0.0, "rotation": 0.0}) + self.execute_control(zero_control) + + + def run_control_loop(self): + while True: + try: + loop_start_time = time.time() + + state = self.get_robot_state() + self.update_robot_state(**state) + self.balance_adjustment() + + diagnosis = self.self_diagnosis() + if not all(diagnosis.values()): + print("System check failed. Initiating emergency stop.") + self.emergency_stop() + break + + control = self.compute_full_robot_control(self.current_speed, self.current_angle, self.current_position) + self.execute_control(control) + + loop_end_time = time.time() + loop_duration = loop_end_time - loop_start_time + if loop_duration < self.control_loop_time: + time.sleep(self.control_loop_time - loop_duration) + + except Exception as e: + print(f"Unexpected error: {e}") + self.emergency_stop() + break + + print("HumanoidRobotController shutting down.") diff --git a/humanoid_robot_intelligence_control_system_movement/src/MovementController.py b/humanoid_robot_intelligence_control_system_movement/src/MovementController.py new file mode 100644 index 0000000..d64d2c6 --- /dev/null +++ b/humanoid_robot_intelligence_control_system_movement/src/MovementController.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import math +from typing import Tuple + +from humanoid_robot_intelligence_control_system_detection.PIDController import PIDController +from humanoid_robot_intelligence_control_system_detection.tracker_config import TrackerConfig + + +class MovementController: + def __init__(self, config: TrackerConfig, controller_type: str = "PID"): + self.config = config + self.controller_type = controller_type + self.translation_controller = self._create_controller("translation") + self.rotation_controller = self._create_controller("rotation") + self.path_controller = self._create_controller("path") + + def _create_controller(self, controller_name: str) -> Any: + if self.controller_type == "PID": + return PIDController( + getattr(self.config, f"get_{controller_name}_pid_gains")(), + f"{controller_name}_controller", + output_limits=(-1, 1) + ) + elif self.controller_type == "BellandeController": + return BellandeController( + getattr(self.config, f"get_{controller_name}_bellande_params")(), + f"{controller_name}_controller" + ) + else: + raise ValueError(f"Unsupported controller type: {self.controller_type}") + + def update_config(self, new_config: TrackerConfig): + self.config = new_config + self._update_controller(self.translation_controller, "translation") + self._update_controller(self.rotation_controller, "rotation") + self._update_controller(self.path_controller, "path") + + def _update_controller(self, controller: Any, controller_name: str): + if self.controller_type == "PID": + controller.update_config(getattr(self.config, f"get_{controller_name}_pid_gains")()) + elif self.controller_type == "BellandeController": + controller.update_config(getattr(self.config, f"get_{controller_name}_bellande_params")()) + + def compute_translation_control(self, current_position: float, target_position: float) -> float: + return self.translation_controller.compute(target_position, current_position) + + def compute_rotation_control(self, current_angle: float, target_angle: float) -> float: + return self.rotation_controller.compute(target_angle, current_angle) + + def compute_path_control(self, current_position: Tuple[float, float], target_position: Tuple[float, float]) -> Tuple[float, float]: + dx = target_position[0] - current_position[0] + dy = target_position[1] - current_position[1] + distance = (dx**2 + dy**2)**0.5 + angle = math.atan2(dy, dx) + translation = self.translation_controller.compute(0, -distance) + rotation = self.rotation_controller.compute(angle, 0) + return translation, rotation From 62c5b11431d262acaf8008757a89fca4ebbc0cd3 Mon Sep 17 00:00:00 2001 From: RonaldsonBellande Date: Fri, 26 Jul 2024 15:25:19 -0400 Subject: [PATCH 172/172] latest pushes --- .../CMakeLists.txt | 60 ---------- .../package.xml | 46 -------- .../setup.py | 26 ---- .../src/PIDController.py | 50 -------- .../CMakeLists.txt | 71 ----------- .../object_detector_processor.launch.py | 108 ----------------- .../ros1/object_detector_processor.launch | 41 ------- .../package.xml | 61 ---------- .../setup.py | 26 ---- .../src/object_detection_processor.py | 111 ------------------ .../CMakeLists.txt | 71 ----------- .../ros1/speech_detector_processor.launch | 41 ------- .../speech_detector_processor.launch.py | 108 ----------------- .../package.xml | 61 ---------- .../setup.py | 26 ---- .../src/speech_detection_processor.py | 111 ------------------ 16 files changed, 1018 deletions(-) delete mode 100644 humanoid_robot_intelligence_control_system_controller/CMakeLists.txt delete mode 100644 humanoid_robot_intelligence_control_system_controller/package.xml delete mode 100644 humanoid_robot_intelligence_control_system_controller/setup.py delete mode 100644 humanoid_robot_intelligence_control_system_controller/src/PIDController.py delete mode 100644 humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt delete mode 100644 humanoid_robot_intelligence_control_system_object_detector/launch/object_detector_processor.launch.py delete mode 100644 humanoid_robot_intelligence_control_system_object_detector/launch/ros1/object_detector_processor.launch delete mode 100644 humanoid_robot_intelligence_control_system_object_detector/package.xml delete mode 100644 humanoid_robot_intelligence_control_system_object_detector/setup.py delete mode 100644 humanoid_robot_intelligence_control_system_object_detector/src/object_detection_processor.py delete mode 100644 humanoid_robot_intelligence_control_system_speech_detector/CMakeLists.txt delete mode 100644 humanoid_robot_intelligence_control_system_speech_detector/launch/ros1/speech_detector_processor.launch delete mode 100644 humanoid_robot_intelligence_control_system_speech_detector/launch/speech_detector_processor.launch.py delete mode 100644 humanoid_robot_intelligence_control_system_speech_detector/package.xml delete mode 100644 humanoid_robot_intelligence_control_system_speech_detector/setup.py delete mode 100644 humanoid_robot_intelligence_control_system_speech_detector/src/speech_detection_processor.py diff --git a/humanoid_robot_intelligence_control_system_controller/CMakeLists.txt b/humanoid_robot_intelligence_control_system_controller/CMakeLists.txt deleted file mode 100644 index e7de26d..0000000 --- a/humanoid_robot_intelligence_control_system_controller/CMakeLists.txt +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy of -# the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations under -# the License. - -cmake_minimum_required(VERSION 3.0.2) -project(humanoid_robot_intelligence_control_system_controller) - -if($ENV{ROS_VERSION} EQUAL 1) - find_package(catkin REQUIRED COMPONENTS - rospy - ) - - catkin_package( - CATKIN_DEPENDS - rospy - ) - -else() - find_package(ament_cmake REQUIRED) - find_package(ament_cmake_python REQUIRED) - find_package(rclpy REQUIRED) - find_package(std_msgs REQUIRED) -endif() - -if($ENV{ROS_VERSION} EQUAL 1) - catkin_python_setup() - - catkin_install_python(PROGRAMS - src/PIDController.py - DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} - ) - - install(DIRECTORY config launch rviz - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} - ) - -else() - ament_python_install_package(${PROJECT_NAME}) - - install(PROGRAMS - src/PIDController.py - DESTINATION lib/${PROJECT_NAME} - ) - - install(DIRECTORY config launch rviz - DESTINATION share/${PROJECT_NAME} - ) - - ament_package() -endif() diff --git a/humanoid_robot_intelligence_control_system_controller/package.xml b/humanoid_robot_intelligence_control_system_controller/package.xml deleted file mode 100644 index 0ab0b27..0000000 --- a/humanoid_robot_intelligence_control_system_controller/package.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - humanoid_robot_intelligence_control_system_controller - 0.0.1 - - This Package is for Detection Math - - Apache 2.0 - Ronaldson Bellande - - catkin - ament_cmake - ament_cmake_python - - - rospy - - - rclpy - - - python3-opencv - python3-yaml - usb_cam - - - catkin - ament_cmake - - diff --git a/humanoid_robot_intelligence_control_system_controller/setup.py b/humanoid_robot_intelligence_control_system_controller/setup.py deleted file mode 100644 index cbd6630..0000000 --- a/humanoid_robot_intelligence_control_system_controller/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -from distutils.core import setup -from catkin_pkg.python_setup import generate_distutils_setup - -# fetch values from package.xml -setup_args = generate_distutils_setup( - scripts=['src/PIDController.py'], - packages=['humanoid_robot_intelligence_control_system_controller'], - package_dir={'': 'src'}, -) - -setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_controller/src/PIDController.py b/humanoid_robot_intelligence_control_system_controller/src/PIDController.py deleted file mode 100644 index 0a87c58..0000000 --- a/humanoid_robot_intelligence_control_system_controller/src/PIDController.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import time -from typing import Dict, List, Tuple - -class PIDController: - def __init__(self, gains: Tuple[float, float, float], name: str, output_limits: Tuple[float, float] = (-float('inf'), float('inf'))): - self.kp, self.ki, self.kd = gains - self.name = name - self.output_limits = output_limits - self.reset() - - def reset(self): - self.last_error = 0 - self.integral = 0 - self.last_time = time.time() - - def compute(self, setpoint: float, process_variable: float) -> float: - current_time = time.time() - dt = current_time - self.last_time - error = setpoint - process_variable - - self.integral += error * dt - derivative = (error - self.last_error) / dt if dt > 0 else 0 - - output = self.kp * error + self.ki * self.integral + self.kd * derivative - output = max(min(output, self.output_limits[1]), self.output_limits[0]) - - self.last_error = error - self.last_time = current_time - - return output - - def update_config(self, gains: Tuple[float, float, float]): - self.kp, self.ki, self.kd = gains diff --git a/humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt b/humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt deleted file mode 100644 index 55bba24..0000000 --- a/humanoid_robot_intelligence_control_system_object_detector/CMakeLists.txt +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy of -# the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations under -# the License. - -cmake_minimum_required(VERSION 3.0.2) -project(humanoid_robot_intelligence_control_system_object_detector) - -if($ENV{ROS_VERSION} EQUAL 1) - find_package(catkin REQUIRED COMPONENTS - rospy - std_msgs - sensor_msgs - geometry_msgs - cv_bridge - ) - - catkin_package( - CATKIN_DEPENDS - rospy - std_msgs - sensor_msgs - geometry_msgs - cv_bridge - ) - -else() - find_package(ament_cmake REQUIRED) - find_package(ament_cmake_python REQUIRED) - find_package(rclpy REQUIRED) - find_package(std_msgs REQUIRED) - find_package(sensor_msgs REQUIRED) - find_package(geometry_msgs REQUIRED) - find_package(cv_bridge REQUIRED) -endif() - -if($ENV{ROS_VERSION} EQUAL 1) - catkin_python_setup() - - catkin_install_python(PROGRAMS - src/object_detection_processor.py - DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} - ) - - install(DIRECTORY config launch rviz - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} - ) - -else() - ament_python_install_package(${PROJECT_NAME}) - - install(PROGRAMS - src/object_detection_processor.py - DESTINATION lib/${PROJECT_NAME} - ) - - install(DIRECTORY config launch rviz - DESTINATION share/${PROJECT_NAME} - ) - - ament_package() -endif() diff --git a/humanoid_robot_intelligence_control_system_object_detector/launch/object_detector_processor.launch.py b/humanoid_robot_intelligence_control_system_object_detector/launch/object_detector_processor.launch.py deleted file mode 100644 index e61d87a..0000000 --- a/humanoid_robot_intelligence_control_system_object_detector/launch/object_detector_processor.launch.py +++ /dev/null @@ -1,108 +0,0 @@ -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import os -import sys -import subprocess -from launch import LaunchDescription -from launch_ros.actions import Node -from launch.actions import DeclareLaunchArgument -from launch.substitutions import LaunchConfiguration - -def ros1_launch_description(): - # Get command-line arguments - args = sys.argv[1:] - - # Construct the ROS 1 launch command - roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_object_detector", "object_detector_processor.launch"] + args - - roslaunch_command.extend([ - "usb_cam", "usb_cam_node", "name:=camera", - "video_device:=/dev/video0", - "image_width:=640", - "image_height:=480", - "pixel_format:=yuyv", - "camera_frame_id:=usb_cam", - "io_method:=mmap" - ]) - - roslaunch_command.extend([ - "ros_web_api_bellande_2d_computer_vision", "bellande_2d_computer_vision_object_detection.py", "name:=object_detection_node" - ]) - - roslaunch_command.extend([ - "humanoid_robot_intelligence_control_system_ball_detector", "object_detection_processor.py", "name:=object_detection_processor_node" - ]) - - roslaunch_command.extend([ - "rviz", "rviz", "name:=rviz", - "args:=-d $(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz" - ]) - - # Execute the launch command - subprocess.call(roslaunch_command) - -def ros2_launch_description(): - nodes_to_launch = [] - - nodes_to_launch.append(Node( - package='usb_cam', - executable='usb_cam_node', - name='camera', - output='screen', - parameters=[{ - 'video_device': '/dev/video0', - 'image_width': 640, - 'image_height': 480, - 'pixel_format': 'yuyv', - 'camera_frame_id': 'usb_cam', - 'io_method': 'mmap' - }] - )) - - nodes_to_launch.append(Node( - package='ros_web_api_bellande_2d_computer_vision', - executable='bellande_2d_computer_vision_object_detection.py', - name='object_detection_node', - output='screen', - remappings=[('camera/image_raw', '/usb_cam/image_raw')] - )) - - nodes_to_launch.append(Node( - package='humanoid_robot_intelligence_control_system_object_detector', - executable='object_detection_processor.py', - name='object_detection_processor_node', - output='screen', - parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/object_detection_params.yaml'}] - )) - - nodes_to_launch.append(Node( - package='rviz2', - executable='rviz2', - name='rviz', - arguments=['-d', '$(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz'] - )) - - return LaunchDescription(nodes_to_launch) - -if __name__ == "__main__": - ros_version = os.getenv("ROS_VERSION") - if ros_version == "1": - ros1_launch_description() - elif ros_version == "2": - ros2_launch_description() - else: - print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") - sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_object_detector/launch/ros1/object_detector_processor.launch b/humanoid_robot_intelligence_control_system_object_detector/launch/ros1/object_detector_processor.launch deleted file mode 100644 index 6799e95..0000000 --- a/humanoid_robot_intelligence_control_system_object_detector/launch/ros1/object_detector_processor.launch +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/humanoid_robot_intelligence_control_system_object_detector/package.xml b/humanoid_robot_intelligence_control_system_object_detector/package.xml deleted file mode 100644 index 706fe9e..0000000 --- a/humanoid_robot_intelligence_control_system_object_detector/package.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - humanoid_robot_intelligence_control_system_object_detector - 0.0.1 - - This Package is for Object Detection, detecting objects like tools, or utilities - - Apache 2.0 - Ronaldson Bellande - - catkin - ament_cmake - ament_cmake_python - - - rospy - std_msgs - sensor_msgs - geometry_msgs - cv_bridge - image_transport - dynamic_reconfigure - message_generation - message_runtime - - - rclpy - std_msgs - sensor_msgs - geometry_msgs - cv_bridge - image_transport - rosidl_default_generators - rosidl_default_runtime - - - python3-opencv - python3-yaml - usb_cam - - - catkin - ament_cmake - - diff --git a/humanoid_robot_intelligence_control_system_object_detector/setup.py b/humanoid_robot_intelligence_control_system_object_detector/setup.py deleted file mode 100644 index a2eac39..0000000 --- a/humanoid_robot_intelligence_control_system_object_detector/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -from distutils.core import setup -from catkin_pkg.python_setup import generate_distutils_setup - -# fetch values from package.xml -setup_args = generate_distutils_setup( - scripts=['src/object_detection_processor.py'], - packages=['humanoid_robot_intelligence_control_system_object_detector'], - package_dir={'': 'src'}, -) - -setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_object_detector/src/object_detection_processor.py b/humanoid_robot_intelligence_control_system_object_detector/src/object_detection_processor.py deleted file mode 100644 index 6f44d68..0000000 --- a/humanoid_robot_intelligence_control_system_object_detector/src/object_detection_processor.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import rospy -import cv2 -import numpy as np -from sensor_msgs.msg import Image, CameraInfo -from std_msgs.msg import Bool, String -from cv_bridge import CvBridge -import yaml - -class ObjectDetectionProcessor: - def __init__(self): - rospy.init_node('object_detection_processor') - self.bridge = CvBridge() - self.enable = True - self.new_image_flag = False - self.load_params() - self.setup_ros() - - def load_params(self): - param_path = rospy.get_param('~yaml_path', '') - if param_path: - with open(param_path, 'r') as file: - self.params = yaml.safe_load(file) - else: - self.set_default_params() - - def set_default_params(self): - self.params = { - 'debug': False, - 'ellipse_size': 2, - # Add other default parameters as needed - } - - def setup_ros(self): - self.image_pub = rospy.Publisher('image_out', Image, queue_size=10) - self.camera_info_pub = rospy.Publisher('camera_info', CameraInfo, queue_size=10) - - rospy.Subscriber('enable', Bool, self.enable_callback) - rospy.Subscriber('image_in', Image, self.image_callback) - rospy.Subscriber('cameraInfo_in', CameraInfo, self.camera_info_callback) - rospy.Subscriber('object_detection_result', String, self.object_detection_callback) - - def enable_callback(self, msg): - self.enable = msg.data - - def image_callback(self, msg): - if not self.enable: - return - self.cv_image = self.bridge.imgmsg_to_cv2(msg, "bgr8") - self.new_image_flag = True - self.image_header = msg.header - - def camera_info_callback(self, msg): - if not self.enable: - return - self.camera_info_msg = msg - - def object_detection_callback(self, msg): - if not self.enable or not hasattr(self, 'cv_image'): - return - - objects = eval(msg.data) # Assuming the data is a string representation of a list - self.process_detected_objects(objects) - - def process_detected_objects(self, objects): - output_image = self.cv_image.copy() - for obj in objects: - x, y, w, h = obj['bbox'] - cv2.rectangle(output_image, (int(x), int(y)), (int(x+w), int(y+h)), (0, 255, 0), 2) - cv2.putText(output_image, f"{obj['label']}: {obj['confidence']:.2f}", - (int(x), int(y-10)), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) - - self.publish_image(output_image) - - def publish_image(self, image): - img_msg = self.bridge.cv2_to_imgmsg(image, encoding="bgr8") - img_msg.header = self.image_header - self.image_pub.publish(img_msg) - if hasattr(self, 'camera_info_msg'): - self.camera_info_pub.publish(self.camera_info_msg) - - def run(self): - rate = rospy.Rate(30) # 30 Hz - while not rospy.is_shutdown(): - if self.new_image_flag: - # The processing is done in object_detection_callback - self.new_image_flag = False - rate.sleep() - -if __name__ == '__main__': - try: - processor = ObjectDetectionProcessor() - processor.run() - except rospy.ROSInterruptException: - pass diff --git a/humanoid_robot_intelligence_control_system_speech_detector/CMakeLists.txt b/humanoid_robot_intelligence_control_system_speech_detector/CMakeLists.txt deleted file mode 100644 index 78abc20..0000000 --- a/humanoid_robot_intelligence_control_system_speech_detector/CMakeLists.txt +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy of -# the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations under -# the License. - -cmake_minimum_required(VERSION 3.0.2) -project(humanoid_robot_intelligence_control_system_speech_detector) - -if($ENV{ROS_VERSION} EQUAL 1) - find_package(catkin REQUIRED COMPONENTS - rospy - std_msgs - sensor_msgs - geometry_msgs - cv_bridge - ) - - catkin_package( - CATKIN_DEPENDS - rospy - std_msgs - sensor_msgs - geometry_msgs - cv_bridge - ) - -else() - find_package(ament_cmake REQUIRED) - find_package(ament_cmake_python REQUIRED) - find_package(rclpy REQUIRED) - find_package(std_msgs REQUIRED) - find_package(sensor_msgs REQUIRED) - find_package(geometry_msgs REQUIRED) - find_package(cv_bridge REQUIRED) -endif() - -if($ENV{ROS_VERSION} EQUAL 1) - catkin_python_setup() - - catkin_install_python(PROGRAMS - src/speech_detection_processor.py - DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} - ) - - install(DIRECTORY config launch rviz - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} - ) - -else() - ament_python_install_package(${PROJECT_NAME}) - - install(PROGRAMS - src/speech_detection_processor.py - DESTINATION lib/${PROJECT_NAME} - ) - - install(DIRECTORY config launch rviz - DESTINATION share/${PROJECT_NAME} - ) - - ament_package() -endif() diff --git a/humanoid_robot_intelligence_control_system_speech_detector/launch/ros1/speech_detector_processor.launch b/humanoid_robot_intelligence_control_system_speech_detector/launch/ros1/speech_detector_processor.launch deleted file mode 100644 index 014521f..0000000 --- a/humanoid_robot_intelligence_control_system_speech_detector/launch/ros1/speech_detector_processor.launch +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/humanoid_robot_intelligence_control_system_speech_detector/launch/speech_detector_processor.launch.py b/humanoid_robot_intelligence_control_system_speech_detector/launch/speech_detector_processor.launch.py deleted file mode 100644 index c11ca70..0000000 --- a/humanoid_robot_intelligence_control_system_speech_detector/launch/speech_detector_processor.launch.py +++ /dev/null @@ -1,108 +0,0 @@ -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import os -import sys -import subprocess -from launch import LaunchDescription -from launch_ros.actions import Node -from launch.actions import DeclareLaunchArgument -from launch.substitutions import LaunchConfiguration - -def ros1_launch_description(): - # Get command-line arguments - args = sys.argv[1:] - - # Construct the ROS 1 launch command - roslaunch_command = ["roslaunch", "humanoid_robot_intelligence_control_system_speech_detector", "speech_detector_processor.launch"] + args - - roslaunch_command.extend([ - "usb_cam", "usb_cam_node", "name:=camera", - "video_device:=/dev/video0", - "image_width:=640", - "image_height:=480", - "pixel_format:=yuyv", - "camera_frame_id:=usb_cam", - "io_method:=mmap" - ]) - - roslaunch_command.extend([ - "ros_web_api_bellande_2d_computer_vision", "bellande_2d_computer_vision_speech_detection.py", "name:=speech_detection_node" - ]) - - roslaunch_command.extend([ - "humanoid_robot_intelligence_control_system_ball_detector", "speech_detection_processor.py", "name:=speech_detection_processor_node" - ]) - - roslaunch_command.extend([ - "rviz", "rviz", "name:=rviz", - "args:=-d $(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz" - ]) - - # Execute the launch command - subprocess.call(roslaunch_command) - -def ros2_launch_description(): - nodes_to_launch = [] - - nodes_to_launch.append(Node( - package='usb_cam', - executable='usb_cam_node', - name='camera', - output='screen', - parameters=[{ - 'video_device': '/dev/video0', - 'image_width': 640, - 'image_height': 480, - 'pixel_format': 'yuyv', - 'camera_frame_id': 'usb_cam', - 'io_method': 'mmap' - }] - )) - - nodes_to_launch.append(Node( - package='ros_web_api_bellande_2d_computer_vision', - executable='bellande_2d_computer_vision_speech_detection.py', - name='speech_detection_node', - output='screen', - remappings=[('camera/image_raw', '/usb_cam/image_raw')] - )) - - nodes_to_launch.append(Node( - package='humanoid_robot_intelligence_control_system_speech_detector', - executable='speech_detection_processor.py', - name='speech_detection_processor_node', - output='screen', - parameters=[{'yaml_path': '$(find ros_web_api_bellande_2d_computer_vision)/yaml/speech_detection_params.yaml'}] - )) - - nodes_to_launch.append(Node( - package='rviz2', - executable='rviz2', - name='rviz', - arguments=['-d', '$(find ros_web_api_bellande_2d_computer_vision)/rviz/visualization.rviz'] - )) - - return LaunchDescription(nodes_to_launch) - -if __name__ == "__main__": - ros_version = os.getenv("ROS_VERSION") - if ros_version == "1": - ros1_launch_description() - elif ros_version == "2": - ros2_launch_description() - else: - print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") - sys.exit(1) diff --git a/humanoid_robot_intelligence_control_system_speech_detector/package.xml b/humanoid_robot_intelligence_control_system_speech_detector/package.xml deleted file mode 100644 index 416194b..0000000 --- a/humanoid_robot_intelligence_control_system_speech_detector/package.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - humanoid_robot_intelligence_control_system_speech_detector - 0.0.1 - - This Package is for Object Detection, detecting speechs like tools, or utilities - - Apache 2.0 - Ronaldson Bellande - - catkin - ament_cmake - ament_cmake_python - - - rospy - std_msgs - sensor_msgs - geometry_msgs - cv_bridge - image_transport - dynamic_reconfigure - message_generation - message_runtime - - - rclpy - std_msgs - sensor_msgs - geometry_msgs - cv_bridge - image_transport - rosidl_default_generators - rosidl_default_runtime - - - python3-opencv - python3-yaml - usb_cam - - - catkin - ament_cmake - - diff --git a/humanoid_robot_intelligence_control_system_speech_detector/setup.py b/humanoid_robot_intelligence_control_system_speech_detector/setup.py deleted file mode 100644 index f4a55e3..0000000 --- a/humanoid_robot_intelligence_control_system_speech_detector/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -from distutils.core import setup -from catkin_pkg.python_setup import generate_distutils_setup - -# fetch values from package.xml -setup_args = generate_distutils_setup( - scripts=['src/speech_detection_processor.py'], - packages=['humanoid_robot_intelligence_control_system_speech_detector'], - package_dir={'': 'src'}, -) - -setup(**setup_args) diff --git a/humanoid_robot_intelligence_control_system_speech_detector/src/speech_detection_processor.py b/humanoid_robot_intelligence_control_system_speech_detector/src/speech_detection_processor.py deleted file mode 100644 index fcc60d2..0000000 --- a/humanoid_robot_intelligence_control_system_speech_detector/src/speech_detection_processor.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import rospy -import cv2 -import numpy as np -from sensor_msgs.msg import Image, CameraInfo -from std_msgs.msg import Bool, String -from cv_bridge import CvBridge -import yaml - -class ObjectDetectionProcessor: - def __init__(self): - rospy.init_node('speech_detection_processor') - self.bridge = CvBridge() - self.enable = True - self.new_image_flag = False - self.load_params() - self.setup_ros() - - def load_params(self): - param_path = rospy.get_param('~yaml_path', '') - if param_path: - with open(param_path, 'r') as file: - self.params = yaml.safe_load(file) - else: - self.set_default_params() - - def set_default_params(self): - self.params = { - 'debug': False, - 'ellipse_size': 2, - # Add other default parameters as needed - } - - def setup_ros(self): - self.image_pub = rospy.Publisher('image_out', Image, queue_size=10) - self.camera_info_pub = rospy.Publisher('camera_info', CameraInfo, queue_size=10) - - rospy.Subscriber('enable', Bool, self.enable_callback) - rospy.Subscriber('image_in', Image, self.image_callback) - rospy.Subscriber('cameraInfo_in', CameraInfo, self.camera_info_callback) - rospy.Subscriber('speech_detection_result', String, self.speech_detection_callback) - - def enable_callback(self, msg): - self.enable = msg.data - - def image_callback(self, msg): - if not self.enable: - return - self.cv_image = self.bridge.imgmsg_to_cv2(msg, "bgr8") - self.new_image_flag = True - self.image_header = msg.header - - def camera_info_callback(self, msg): - if not self.enable: - return - self.camera_info_msg = msg - - def speech_detection_callback(self, msg): - if not self.enable or not hasattr(self, 'cv_image'): - return - - speechs = eval(msg.data) # Assuming the data is a string representation of a list - self.process_detected_speechs(speechs) - - def process_detected_speechs(self, speechs): - output_image = self.cv_image.copy() - for obj in speechs: - x, y, w, h = obj['bbox'] - cv2.rectangle(output_image, (int(x), int(y)), (int(x+w), int(y+h)), (0, 255, 0), 2) - cv2.putText(output_image, f"{obj['label']}: {obj['confidence']:.2f}", - (int(x), int(y-10)), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) - - self.publish_image(output_image) - - def publish_image(self, image): - img_msg = self.bridge.cv2_to_imgmsg(image, encoding="bgr8") - img_msg.header = self.image_header - self.image_pub.publish(img_msg) - if hasattr(self, 'camera_info_msg'): - self.camera_info_pub.publish(self.camera_info_msg) - - def run(self): - rate = rospy.Rate(30) # 30 Hz - while not rospy.is_shutdown(): - if self.new_image_flag: - # The processing is done in speech_detection_callback - self.new_image_flag = False - rate.sleep() - -if __name__ == '__main__': - try: - processor = ObjectDetectionProcessor() - processor.run() - except rospy.ROSInterruptException: - pass

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�Z9BJ?gVl&&cxiaDo%=U}|_E`zS@MiqN@ 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 diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Left kick.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Left kick.mp3 deleted file mode 100644 index 142b79caf4f0a27e10e68a6f0cf26f8a8d4502f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8271 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 E0^0m9SpWb4 diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/No.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/No.mp3 deleted file mode 100644 index 44b4aab885832b0252bd1a195b49fa42d70e546b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6861 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 S`z5;mR{U$s{jKqLr2hn^`~nUD diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Right kick.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Right kick.mp3 deleted file mode 100644 index a428de80459a904a3b7f717c672770a12fa7df78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7958 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 f75_uR{VR9UGlu^K)L2^L diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Sensor calibration fail.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Sensor calibration fail.mp3 deleted file mode 100644 index a0e3ff9fc52c0d9eae059eb831279e247d925142..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13600 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 Re|GiXXv+QFq5c)=e*l269vJ`t diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Stand up.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Stand up.mp3 deleted file mode 100644 index 821361e8b6b7a2f7667f4326ec1953475cf359bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8114 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 Dp>zey diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Start motion demonstration.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Start motion demonstration.mp3 deleted file mode 100644 index 3fb573bf8d930f423015bcc65daf16beec97bd51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13443 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 I>K{@37m@rx*#H0l diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Start vision processing demonstration.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Start vision processing demonstration.mp3 deleted file mode 100644 index 3daa8679d4ef77f9472688108653f2c81188e1ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18146 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 diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/System shutdown.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/System shutdown.mp3 deleted file mode 100644 index bdc2be4827911869c744a158772378f837ef5235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10309 zcmeI1cTkgEyY6Yy1f&H8DItLL77&o$dnciY^d_M64$`E96bZeHw5Ui80#XD7sR5DR zq)S&2so^=~-E(HYv;W!W-Dl>TGiSavb7xjEYd!hpTGzdDKkLy@7Qx54Zg^xcBO{gT zj_7r0E9j_z#YAnLeZ0Yb4qo2Q?rvZafd>)-qF}DaK0Y3jf`b13{sK=uMC={>1l+xx z1i4`vFzEG6mg`W}Gqh4x(b3a2f*C5nH1u?>^x=m3dPXW%db-+XFntx_>p{fV;T34( z28Fu96toqu-?3hYf|7#1infB4lHT=%|8fx{4VVhdOvUhe*p2Ie3JHrV>FMZPcjd0b z)YKG5$=xH+%h~C%4_Lv@#>3%>4Oq>~-PZ$bB%mO`2Nr(t;66Wg7TD&=6YzhG^K$TZ z@bYu8hbiglUSEXpI*i@zY@Pr|)=RDe98EW?Q4Q#-Xr|u#=}_Z7c2OIUCkxEFvU+o2SahY$%Cc}jdz`dR||=ZYcivaz@zs&HFjE+Tv9@K2v= z?U+f(#f#AseF0x+_O+>1e6$iFYm5=N4{;{&PjNcQYslp36rkYnA!>X9XuRl01?>4z_0Yh}d}Uf=%;>2XP1WAp?7jCpnBr29g{xI{n5h$+ewDnIbr`ckK+ z?`0I@OE3o;q?YP8$8;wa?o1XzXK9s^jdRE&pFq?{^k`AS24^oYX?ewuwZ(Pl3ebVi z=g%Y}%u@0;ykf8=a%c(RCvOXfD8%(3e>#Xb4BF88Lr=|r%7eaL<(c=#)EC7HBr+OeTH zM_MQe$Ajjorol+>R5M)3SE@I;vMIgc@#!M^IlbZzGD1CQHItwOft*iW{s}j3Du?T9 zejDwVVbCRrg(O;_Ha3Z?C&6oE(3eywGj7#~Pby_nR>lNVKjlVt;!c-G8s33*rs~B> zmqbp});29T2Tg399Zu>u>=6g>37zos zPjkt23|2Z*^37!btgQ@)&CaqiBX9OlcOZvV@~n92Czf*4L|VhCf$HNpJQw%Uoct~0 z$FwCy9|?Q?^_Jw8maxK!vfbR@VWy9*IvHYCalO++%o?`G8|pm^j^rA;tI?o%>oO$T zZeRVm`wnIQrZGq9e*AEYN$w$=qCRMU)elR4PJzHAwa{xt-X4|hNStVUDxjvW7uCvJ#$85j&xUed!<|cL#no5N+)B0?la*srT zd{E-$DBo=rq**r!3=7A>JWqYXd`B%RL0$deMuLchRb9SS85_Ip(*o*R*!gJtPX;6T z#?cy`S-j^PVSc7dS#tYHn zDY#FM!~{){RrA9QSYXTy9ED^p;q}G)yo+yK+%w-D-@k!-m!jr=`1=)9ro~z~veV{L z(-s`;R3W1|tW!-jDK&FkL(s#i;CHplxw-k`bzxj!(&xFi#DMn%R= zR&_PFOIla=mTfv#I4$P6AWWu0LQ&Dxq$o<&Z+29DnyRY_Hmrdc(3=kdkQAy=^9G ztt;ivSwrhLP1V%|iJO0}9Rh#Qc1fPI!qFUwX%1VT;%Etk8c57Q5@$c6xAOY|jQF+> z*;WM*HrNjVtzhA-Sd38L7lQ~bLN{Am8^b7^4MZgsh9P%ltt9zXnypDN%gYzio%Gw` zz|&ks1GnEQ3aUe8?{n@zQzt_6z6Lo!TLix?p)(mmO@9gI6v*Zh2l#AkcBA+5L>$0{ zYigK7K6?hLGR2~8s#`%5EEl$A{>P#+R3t0`QNG~>GE!Y$P<2(f;3ULdhBQlz$L#>R z0ZTbJZ=s>V!g;c=UG25g$9~2q{AnT1rmidiwG0Xd{s1mtZVaxKpjofe6E^aoe?o^K z8e&}=>$QStgRzUn)?zHC58Y0n1%}kx9qKJkJR4c~0NZ4d{7saAXcW5aT1IDY6Bxz%+MVSs|f7O$ST-R#6ardG#h*vFCHi9t7JNAEXVnc=L-!u9L5bnbjV3JIEsv%cUI89BUn?bbu%-p z?YK-iur3vhUB_FqN%zhS%V8+x3@IV@^6?ICiQ7<`AoWC%)!Y|t^vuZYvw_WTNGD;2WBPA)j8aY;#`lfU`0T|yD)x2SA-|&GVNc6O zh;EVj!@za`=*`f6m$N(l`{ZlddGRwDM_8p1pYs;T(Bk>##^kf7Q*(ZwJ1&6Bu#>0j zO3|WNxN=bfo?Li*0FK}7gSng%g;LTAsu`0U-R~mLT+cj@06^|S6@C6!sRCR+yIp5~ zdk2Toh3+OA;N3gVR!^VfGFa!1nOP5K%{+Z_4qSzBY149BpGc-fz3BfP zf`xMwzv%jEl@frrLFAa?e&u<4f-p*b+DAy36$h`EAwG#nJV50*7;wcVJ5*)9t4h~ot z+RyGr>T@YO_h5{B%(VHr9tW#9%kwf=3;2?=Q)IU914DSl&<2xC&x!&Y|EUgtuj_ir zdWep7o?`c8NFMKglWy1ouqF%NyK8(Z) z$HXE^w_X?+6`IU`k6Noe=&Ctj`AjpHoj{8>)KN(iQR$FrhiE~(jVV#UrT|aRXd=V731p++A-7W}`~Oz3UIDIAR*ykLO4a-O(FI z8P~Qy+BE>pL?HsBG^s$wX^=`EYS%H498cv+Mr;zLl$bSpDi7Z=zK7kdDu_jcTq3YN3Owr4LBGOC<$d)AE(B(_%gn57M1P zENY_}Ctdag<2&1D0ote54A zaUTbeIQ^Hetqni{sR-{k=P0Jpjb69F8k3E{0jpDQ$?4^)?IL z5q-9 z6IU_b7XBO`ixp{-+8D}tid zX-TV8E1$V`8$9h2Fem*_zgO^Sn`}P~Svp;0Ud;2z4kt?2#%5eRO!*ZKPOQeGH^3#?(rBk{1J|u%1>}Z7Qh7Q$X`bIX zsA>=HbiNz*QwZ5nf0wz>_hMVy-|m7w1(Uc3haZu0$SZ_SXI^H_v4;o z0-C9~+#CxK5)>iQm=&p7G2r2q_|A3Gr@qUct^2tzQLlv8%Ih;@EL<5&p4c)fNR``T zkufN;D+=Bkat54voO;n$QBPr(ykkB|slUH^8HNEej{;T3DGfkngTU6Ww;*(fSIEYu zl>Ol$O9)%1cEdaKOa|jDwu42(T3!0A`y9B`^3E^3NOPT0Wpkm+4SXQp9*nrp)kcfABJ62~w3~(nq-hqO$(k0+ciMD9K*ss<# zk+?nd$jSUbH~%a>DZgkn5Ng_eW825ye@aTjQ^IFsZ0h3(tuQ&?52;c39)FS%ej+@0 z_TlmQZnTZ^H?2@ z)ZEiKoA_I%T7=V_PomOWYpzd(6d@13;}PKE5~~K}NoSJ@e9wW}_s^At6ELG?r1o=! zJnoo5?I+qlhxaeE9t=;21~^4K1z%YnY@80+Q8uBlZ~%`8g*I$fd%nwl{0vC?gINlu z-xt3GW(rG4KOQrN%XG8}j<+R_4(T48{?G)HIeo| zS$vB{7tT&Sr|YJspVY^l;k525Gs5O8CaDONo-Iu6eMZZ+CMyd?#Xp7gJI@0sLc6+@ zq}oesK2&}2k2!P(A1qb~mYUs?3(hgqx}X>N%W@lF7q>bqRUv#$0u{7ew{*2qzC(JE z-K}BVd%el8iRr`^^0Pdr27gw?`gfGR*Kn#{dk|FAkStS44}@DyP5g{&tMh~PPj|y6 zo02651?*D(aNB;g^ybkx&tz$S)><>)b{1-|$ncoFSbo;~1$BzX0@1re&$=o9^Va0+ zG8W_X9stnIC&0zU!Sa{a$K+d&YzkS40ODGCFC zqrML|!6g|ug6j_iFDwcB$kB_)G<&kHn_%kR^}$#5?;bjM1{~eouYOxvZgexAs833K z7m=GcouIx3ip{>C>apQn(?vBg4y-G?=6Met(!T(oFbJ>&O1d?0gd@ALr2!6 zvLor>Y7f}5^>jKiXshAgW5mhNqiAEB|Jq1`SnRGaMZH}3u|qW(gro>m_4%%dw(Gi? z#MR#GfZ9kzn)ds7-!0A;%vy1%MkZen*)JisH+e^o!k~leuh)Dl%W2{-F+CZPAHup0 zTTA&~x0@AQCIK@kp+auaF)B~fMSw}eLc_qh9Uf9x>x09l{bAQjC!OsF?YE?=suNgVa-X0P2}r%OrTkn3cXAI@};o4R*pPRkyd#rxu8&pnp4 zbnb9Hco_Tx`aWUJ+j;-;wLtDf%LXhVb{91giZpBQn0h8hGZ>??gsQZ+JB>d0 zXsg?*W@ybk(+{daCekM*Amc}4rTDAg_#=7AJPvtWf{Kc_jN+JOIXx>gU5E#8tD4)YZQN#K*sT>kUB)*+pUWdcJ{#+4J+myQ6yPW48OmbG zlHK2zwHd#~HdorJBRqGmo&Om7--TkyCmcONOW^<7_?Y_bSv(K7nu)#F$a6!4k$Z*R zH3u2*8~_a6$M6iROo+r1ma~>#r~Xwee_*>!l2g#z9q<;bhRw< z{O~+~sth_G_||*seBE{Que<49W^KA26FmvMrboa)<9YK50vHIU<~F9Tpq~vXdYt}( zKhqruuDHm8?oYh1=k)SM>$TKYX6=MvZ?G}I<`Tvo5a>LN^FtjkVjgkbz5et(Aqp5> zEmDcL;UFk)8?0&ajdED1yw~`7o8}#;+VEXf*CEd;KKM5M&zHnDb-YRTYvwdu6-fhA z_wU~`MjxFX_Oq$VSz%Xoo(p391xWdV=Ro$BLN7;A4*R9ot$&$_P(st$h65U)Y6NYT zh6d;nA7Czlt57xRl!1ZA7y`0!MtOM;yZ$abqRtv?Q3>*<8#ppmypE{3BuLb$_DA+4 z>Gd#BwJ#c&lrf`zb5B84A&o?B!s5uAg|NZ%D(v)1%*pDo&r)MTH7-`CQp$odZUiyU z1Es!qeAm>W9}73g(ttNp)PDzGdhbfI(Ylgb{~HvVSq~IphH@s}mnfZUe9a$TdgA!D z?Q*f?c0uaF#T22OVLC`{>$)((soY`D;G3OA+$oawa71zK+|}7@&df5}Pd3-_Gd@hl zA-E&KK{s4dKqvg^!6S*-KXr0LD7N>HX*v|e8x4)^;P-5-h$5pI>eUMVtivs`T*mZ( zbKikR!HuPStmWoeL?)XH17qaem#@rqCrn={@4$4nJMDFd0lDwnw02V*iuR^~Hmuv& zBI!RKYF(E~|I^0N`m|~=>^p8O$A~(}+|t}}yK-l+PCn%nZom<4$WNcomB#0zdy5n2 z1y;Bn=D9+orFG0A^_@&K^4jSi&vyMjt{c~%ag0q|hLES( zYu4W~T?D>DY+t=Jb}?4g&Muo{$j~r_yyQeCtTO+#kx*Bm$}NSG(ot7$pe~9=Wf7&F zV@|QQrhX7cauSR0;}>#~$V;ttdCmWX`ya_Bh{M-<>$uogMMW6^#taM$;2=;@?emiF zar&n6T#rAM67&#!QNw6_Mi8>=r?NU?;ntYwdl^HGY1nDN1snan2s0HrgI~?{oD!9l z?>C}VRHCD!^MFej%<%t`?H~UjtmQgsel2^pbCE~>ceDS+a9H8o|MyeO|Bem$|1#Xa zm<@?tRgeEu<^IKR|NpG&zb*H-r2Mz#{wBsh>Hhzd5C7tg@-objy diff --git a/humanoid_robot_intelligence_control_system_demo/data/mp3/Thank you.mp3 b/humanoid_robot_intelligence_control_system_demo/data/mp3/Thank you.mp3 deleted file mode 100644 index 6778cb128d06fd21262327597aaa77923c331918..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7174 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�Z9BJ?gVl&&cxiaDo%=U}|_E`zS@MiqN@ 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 literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Left kick.mp3 b/op3_demo/data/mp3/Left kick.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..142b79caf4f0a27e10e68a6f0cf26f8a8d4502f0 GIT binary patch literal 8271 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 E0^0m9SpWb4 literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/No.mp3 b/op3_demo/data/mp3/No.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..44b4aab885832b0252bd1a195b49fa42d70e546b GIT binary patch literal 6861 zcmeH~cTkh-w#FmPh)5HV5+Ff(lM<04N;Clx0s#V2-1KND0){3?Q9znV69OnjKtuu( z5Tr^~>Ai}8s5DWUfPj>IH}U+j?>#f;+`IRj*>|5a`<+=cZ{}O;&2OIdtZ%+o7pY7S zqAofXtceMVx`9(eAAv?eRp9ncUY<}N9KqAc-3_WNucj&whf3nTygbxTobdJamA~ep z?1=M`cPCsuA%)e&Dp4zisiAFXY=cCh4Gm1N#t5vgp@9v?)EHxEg0e9*(6_*1P>R$f zFf|B%c5X^aE?9*AIqEMMH4x_!7?eK3=DZ=b;O`DG(Z!;$7ARwC8Y4B76ckULH$$Y7WW{V&(YcR95EX&z(jAs7WR{$sr_WcrV*A()x zN%2-`eC3i7!y9y%1<=jPqZ_&j>yW=FDc}wO2M)D<%F7PVO*i19Qo16Ca`h zW+3~zqyYEcVE(d4oFYDq@~!vm9;oce9hU4%N-7|Uj~b7BIGP)W&d@^mGFSR!+Ks^N z*xj2f5p~fmF*StH?!6&l^AY<&7=tFld+;WEru+LmFIF`@c(5n>6WAk~$wvgcItPMn z+<3r+3FY8HZWkTwg(^YC4P&x=;6$3j#ZSx-LmiBz7DWBahl1O?9yj za*%5KR!fRX|G*A!Ji&OxzS2f1`cpHR2YfRFwu7s~W&lVg2e@B5^DuWztUBN&mXzP0P9gpCEHLPmKb@ zyDNdSOBf#r92ZP!2LRy1Py}7*fsum;o?o1AXHF?SYPArI+&|fOAvsa;b&MN-lfNm zC{BjK6*SmBtudb1(3P9_^)Z+IrLplAMwp|QO^m1xd}woA+Tc6HP!(mrH98cW=aX@> zuE`@xreWjHx;+LbGuBMVLR%; zUL^$s9(spnwD0^D>uaXQPZN$?#HFIYqM11}OBCGSybSNc>e#zW9baC>N);}yMJg^E zPg$l4GaSxT*~9x0XH=dolBWH;<`rY<(rwEdfd0v1IW_ZpSAZwokkLq1PBxBC8HM}c zs6)KSFR?cH^}Ud3mRA-hSS}q=j!vB@3ab&|hZn<{72a#zyd2Jk0xc&o%~n#}M3DwH zA)P~$_2`m|FB)XlDEn$OI00x3>u_dc&(!lnj0|CNLH1fOqV|mEMfZ#jw?|Kr!3-nU zFIEOwm)&B{rUZp}oW3HZLJr<-*$@<;7S%4>Z}={$I@@{#@+G{m#sc%o;PhG#rm(tU z@`+TGpYarz~-etH1VX(I!g1?ZT9rd9K0_!j*9Otf`Y^!dD&K z731*{O3ml>U|{!IM<#Nb4H}53{Y;u051u*xU3$jLq_iRK(!uo#iDwzGHqD@S=U8A4 z_l>TWzx+tH*pm2aO0%5Y@c`C^Ouy)c7NS0Xh)FoyIQnITct#20@Ol}NQ4)d=kQG-z z81x43l(IQ4M0Qn(M0^an z?_Rv|Iqb&woT$6QlAd?x7*@uf%+*pvIc+{Y^yQZy9>M%DHcPB~Fkz)?^WCs+PG_7O zKG>aS?e9?hbUB75oV-Zr=6{4K12vjUT?E$QdR8#4=O6;=e3H()&> zx0}wLqK@hq80cPmF75*)X?a@b}n1=mw<&CYrYOZo_S%W(vq}ke? z93P`^bg$co)_x(_#%2x)oZORx#SZcWoSwBRU#_&7ygGJU46JLJ^A0OwL2tXM>ZTIo zcYgM+GY`klVMRb$m{vC}87N%^XzkYXUw6*rW#hAeE%d@rcv7nlL2%CWR#jPoAdA)6 zaW;?T##YFT;@d~vN6&Hat#|_&5;_H+{h8FywGE4<=t@-p9g|@C`$f;_MzO;XmAayb z^-hHYBi^HD2pE?X$8M1&og{v{p|ZGAOZyDY>n2rP(=D*JF!g<1f{&_MsmQ6-gvV!p~b z`7&ocPh;pBz$MY8AwAJ@cGYkLFNSnO@Cwz&az1 zLrTu39;>SX!M4fe*L{JhPCty21Kk#L6ux^uN;STTkNx#rja=1D1uc7ns-W|o(=^Ma z3%P90)@w!dCUtL)pXe;eV692%jfu*wcP{Z3UVVrDqQM|LTUw?=h8^Xt~u7<^Fc83)@kU&*b z9C;>_JI{&k4;U}AA?f^aue#0DwN_6p?~#JZ9Y%RyC%3OIq~*6SlD+$B!j(czC~t#w z!=_ZKKQ9?W{bI1jOw0Sd^w=jv(0@g$vd8WZi7 zXO>5p1|V$;iUVs=MxCfPq=Q2#fw-q}&t+B5dJBH3;9L^S-4R`N;S`DpVdSj4m(??J zE$iMcptf%)+HOC;vineW-YSWxFTlU;S)$vP7!V+~K)Kiztz-~LgKH2xIyV&L7Z#MJ z(V+PDDV7SdQ$0LZcuG&d($ruqVd09544*D%^sMJI4RUVRm*`s|Ei5cZhDx~~!w1Y~ zY8OO5N&~YIm^#j(n#d3!{wvWG0I7KoKs>A*YHFu(?TO!SKkRAuJ5w;3!4g| zwrOfmIrWY0$C%}g*nPpRSPSk?t#V%laU}2xcg3ag z5l4^15)u;lf+0|m4s^bx9t(FOE6kZxd~5gABEC8Ub>A! z-AVqR!u>12{^=Ps;R;xdCiCh++L`|}llJic0nQx+qQ5}BUW5Lv;r?LZetw~Q{9l#( zgW+hF`_Jg=pL!nt;I95(mu)n8ToO~U=DXZ24F_m}1VvfQr<{NCMf N8`j_ZFTbJj_Y}j>$>mrInVRHpX0VR(_{qE1_LMB z+1Z?yXwd?Rurr71X!!<)lb{j!Fj8O$5vr-GucxX7g$0C%hZ?AVy))Vgfwp$A$D%M!C> z2#23UBakMvr^B>Bm?BW-NCei@f!6TyRmjR05fKrdGdKeLa7*_| zr;U`M1-Pd4I$TrUR#R=k7k;?Q0NXd*EucP^K4Pas0q4#8+R0IPkjxe%fwh%`PjJ^A z?6j^6^X%3mlil&TULv9{k*gRX&UV22&ZC;`8d=%)SA*do5O1&kSNYxiqh#O~0PGh4 z?P3)Hu+-z|B`09Rw_oZ|$$L($i7{v`B?WN-(WJ{9S9}13Ish)#f}>EP3{TcG9VOOe zJdGl`!KH|;6p;VBg7++F5T`)o!pytksd|-&ln^ISBC#<{ zEKrmruvBe9SvGs~_JwygD!}2LM2G>GiLoSUc@U_|7>-0>d~@ zrU0v+F-lmZ6a@2j@(#=eH=sd-;D)#!PHG(*npjdAJ;Dj&3<_=o{v{WJ= z%&pLsm6Hbmixycy>~pC839lim&v@}!AHMi6?}lc!`tB24C)1PjCrL6frk*xw6i5zy zB{JwuXv%Eq9n~boZ;kspX`r4=e!{mq%Eg(JQ(ZoZ?5D#LESy~nyWWT9KY6mmSo49m zg|4c!B%^&_?6b6(-g8E_&)RmH^U0C7h>lLGFxYfEuuX*dKw;-gOi~XWf=F$Kk%7Gs zsVuL8kNpXW2*!NkKzYp=85qf0h{8#WZ#*(vR*y3l$-QCO-hPz9JCdd(;UFs$5r?<; z+cM)2Ix6uVTwN|aoHNSiC-T?c^|JCU<$3ldPUodDLoT(4pKq64R!?6;D6art_oM0H zbR~~4kACa8lm|I$WC`OTirAOx)F?E4y z-d80~D|h9<{UB6xw^#cy3i>0P7E!mZm)q8Ya0{>4$Wyz*8Of`~`VLjW>$S&RcqWBs z{lZTAQ8ttauo2h|Sr-TWq;dmA7o!#0F50UoABi7A&3E|tSIUrbJOE%tqb3EQTh2yO znR~PCIQ!fE#PG5FGilQ1Dee0eRH=b`frEyYqU;bMJ{~SXjY6}85i`pmiM=r~_#k!t z(?WSqIvk9vXjlPuV@RX?wNqC%_nfIZ?(yv0VI_ zn6=x(Gjbp^<2Z!308v|v15|9{%h&NvN7(h@crs9=`+ZTKhx_^)By*M$9o$)gD4|NM z11|#ra%Es;HzvmDCvbu=aUK`+K)kX>gXTKUrg18B%)GNt4yrc;Bbc07HwZ`+Jj$l7 z)_a%45Cs6=)&n*UHW(M9GH0b%~p~c8S`44F_#YRft>A!PHbubV>B>X z(4<(>`WfhF!hIT(!w&`SV1dmF&RM%DYS8Epsu8fK_6qEC@T^HA(eeTDHHT_qB5O*v zo+NEa6B*7@|Id8qWFq{G53-<|m`$`WHt)>kV|%0jTHHyyFKvT8e9rfCSv=U_&f+17 zoh!YCtPFfyje%wsM9?B_0sz>Fy<{^5Hst?W|Lpa9#;_8)e1{bTCeMx_DJ} z$2e>(ecqZAuU2mTPNMhx0KS#%!pb5_QZ7_0QE!GlzC$*gAe4QL^1Nu6nZ6_)zRrdB zQ<|ugP4=I1xXr|SM+kA_358ahv-@~~Je(UX$b9L!S^Q0sV)8?Gf65y9lmDA0X0Q2# zijMkdXM>vgehaj1916nNxeh!P2207{kR`EE&zb>X zjogLYObowKpY!GJ{l$WT1qHZ*cUG2YcP6&w!?gz~d66Nd&_iC*REY}1^KG8aa?tH` z>ldH0>nI!-eVEkk*~YU<@!0&gHQM=W)}sEcIReM8C6R4)@r`ad=o&7Y{PE2kMe4vw zRt1vuw<2ncP>(6@T&t6N-S%)o$Az`yS4{QNcIe;&B+5?gK-8&4*)KKszhtQJCm((t zy;dJoU3D@4jDx%Jp&<6|L$=~m*_0322)E~9W2K(+;o82Q)JtYo=Ad=W7LkvwvlXfK zeJ2~Kold1&b*b10m>nD#SzPG!vwX4N7A`(2_K#(iqibH@@mbDCE<3$E(+4Pb=O5@( zM-{i@1iv3MZCrnq_(3F6aZC8+!+_i8QVGG1AbC2tc!?dI9f%0U`V1bHbbuuhbD?#f zlc;a>qF1{^^0gf6jc9>p>T%@}G*&Om#6O!e%cN`Ro_J-hf!fM5>jEjYskX?&&Gvl+ zF4u8=eqfLGLxdl@Hq$MaFQNEq3nFZpq`FoE>kH4hMvWbT zEOYMrZxIOEtv@h2r1fD9$egM2<-2R<`dluP-h~rIv)YFEPYmu*~R}RQWh-TpYN-i7PH@gH^TMZiG=4(Lj zE{%1}qb~6t6IhhpPTW1nQx_VxTR z{6;VW?l>5GyHV=aP5b@GS#5bKf{_x>fVifIP@wgIcvs(}qt9Jo!5Y%nKYCG0T13S- zKH5AZTJ3^v>7Uk$k7V{Le&G&(LQJ3I`!128o-w#>-|#8BFF+w|GIg^k*p-8;nj}52 zgX(gU5a$nO&9AZKaO@gLz$x!C)#BX@e* zZMd6%>|<^HHmJ2qdKG!DM^pB$J!OBm+Ee7BVb-Zczdv9UZY$$$!74Ao{BkwZ4WT5s zSxX>^MP+^acJ!%!CSlhvUwR%pO>WnwpPy5Fx;%sVM%?vdcYL5;YW1a)G*Bn-d^sDx zjqHD;jViTb$H*PI0OhNWt#sWj(JgYCgV0r-hD0|EyQo{t_O1dtA%x&Fvps&m_nGb7 ziX^b$7q)`L{=2Xo>_;{eI-Y;sUoaSqc7i9U%bN+5APa_CMfaPCpp=8Ot&$u{rEPi_ z^m*Bm6LV90t8y04M+KFgzNu@M{7jlf#;mp=<7NhSYiBQZOn<{z%1Y*%wbWcln^xfo zzMjqGueUaXo?_+X4CD?VPK?rtTa`>?e{_P6B2sYC`oUeyQ;0XT5W$Xm(#c(ztCh8j ze=K4xoBbIG^RW2|uI9fV+;$&jgD4~P;}Y2adL~4{rj)Sz=GcQXDez-6b*i1ou*?tY z+Qu3ZaW^F15oG(qb%ixZHY=@O_H=OT&_~PO;?|TsGJx@uY}jMJ+u0D8_v8gPm^}a< z!F8~9JkM2WV{-I|;{OEh-#-Jy@euH4+2A|U)hsArca@)?kG$&u*aun5J->ajGIsJq zd8&<7d5|F;995{aR9T$Aw>)0PiKTna=g8gd=S9}Cj=-LvH<80@AXe? zG*y4Ypj)nqZ#(sSEJL@>e_HQ1gQF7{0s=8w(QdGy|AY^*5{f$8vuY>X*_#s{RsPKZ}2fxIYKUPvZU@B!A=Lm(o9$ S`z5;mR{U$s{jKqLr2hn^`~nUD literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Right kick.mp3 b/op3_demo/data/mp3/Right kick.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a428de80459a904a3b7f717c672770a12fa7df78 GIT binary patch literal 7958 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 f75_uR{VR9UGlu^K)L2^L literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Sensor calibration fail.mp3 b/op3_demo/data/mp3/Sensor calibration fail.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a0e3ff9fc52c0d9eae059eb831279e247d925142 GIT binary patch literal 13600 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 Re|GiXXv+QFq5c)=e*l269vJ`t literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Stand up.mp3 b/op3_demo/data/mp3/Stand up.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..821361e8b6b7a2f7667f4326ec1953475cf359bd GIT binary patch literal 8114 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 Dp>zey literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Start motion demonstration.mp3 b/op3_demo/data/mp3/Start motion demonstration.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3fb573bf8d930f423015bcc65daf16beec97bd51 GIT binary patch literal 13443 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 I>K{@37m@rx*#H0l literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Start vision processing demonstration.mp3 b/op3_demo/data/mp3/Start vision processing demonstration.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3daa8679d4ef77f9472688108653f2c81188e1ac GIT binary patch literal 18146 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 literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/System shutdown.mp3 b/op3_demo/data/mp3/System shutdown.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..bdc2be4827911869c744a158772378f837ef5235 GIT binary patch literal 10309 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 literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Thank you.mp3 b/op3_demo/data/mp3/Thank you.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6778cb128d06fd21262327597aaa77923c331918 GIT binary patch literal 7174 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ƋBvJla?j5uSZ}TjQDsa5^(|*$)^k|% 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ⅆQ9>_FuKj6@TnF{L0+OI>+%9 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 R%khuSKA?umD35j_000#2z&-!~ literal 0 HcmV?d00001 diff --git a/op3_demo/data/mp3/Intro03.mp3 b/op3_demo/data/mp3/Intro03.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..cc307405fe02326ed503a498c962148015e67b6f GIT binary patch literal 196858 zcmeF42UJsSm+wzV2mu0wo*fRp2*re^C88@a!$;P3i>QGwsc{YAlkoBv$}ek1pH75rWQ zFDmdGxxXmbZ}Y#az;ERKu7bbo|3w9UBli~t`)&Sr75I(Z-&OE;{lBQdZ{+@>V86}( zt^)Mm5t@Hj!r%4(k^;Y-++ULGxAEUs;1_c2|5q5gxXDt#taeuGti~{z^A;y}&3n1@ z;X|W=2V!_bCYeOpMmdS&bB72;GwH^TZwwCPaG?aL&12R#j&nA&MezlSADHI1tQQZh z%1$f7yi|@LXVkh)>JuB7H|kxg!y9jLW?PH1elJfk&Q}}f--psN%{fy*VVu`s-4@@b z5%T>fV_q4r217>VqhdO~A$5n0`|1mQ3?B2urYx#g)^6}$`kNOv$uq#rJX=p|g63w4GEt8sATudR#PS4BVKQB3c)^^VVm%#8|W+ZR>>OMAFPE2=Zw$AAkl);NX zO$vXRScII-@LIpo=AVD)+NfLa*}J!p&AG9I#~)6>!;Kbh_T1OYIT6au zIZB>654`ehXs^+EJ2V{hb=Nv*$xK?D?|7vDwm!SQ{UyF!)vLU1;^)>go_t{MeH|T? zA;~dcTOG4n+jM;N_SwAY*Yu$saf~Yoj4>imBh5N`snCKaT3h@ogs&ziCx@RR3=Tg! zbG%P=u6du1XyKKcr*fOIktc6{3Vsg%RBNPL4QJiFhc0V2In~v5 zEiCM|7&J6ew-_dA&)k7-ob?jurb)t!7}A6XlzB}vJ}lcaf(-+0;g|$K1Ys>2tEAHE zU_=g&`oxo5reW`-P-q#3iv@*=p&v7&og!yQ@Ps1WGMC<@{en!n4_O-C_TFg<)Nst- zv5#B~*m<^^eo*`dVsT+*LXA$(22WyeV@#e&RM5)Y`NbpsFmnciaq1Ce@(}@){>7BniK2c6d35_^S{ab z135;zuBrJM3~+q$f>%L2kgd#X*hnMq87YPB9i#w&fygHN{FFdodB?Nt#VuwE&AiXt zw#wSsbpf5|@8iKI>rw7ur{mihCRQqpu=oX4%kaw(n7 zm}sq4s+qO_+N}JfYl?OdeN*?)*7aiTa_z(5*HL1e*y8qKA)`a!sx_F;^o!SxT2Fq+ zS*Xg?DMA|k1ScT&jfA~x&_fh)Mug+FGEA~_Z7NRg9FfmjYErhmd;j@KI(>&6;d7h5 zUD53NrrgN)=<}na8D`&0)}C5&Pq~8b*$W7tRn`z=Jlbo~*lXw)Jyvie~l;YG=rupe0`Og(0{HO>xEnDY(q`sGLue5%guUO9#S z@GAR9TE^4|t}@ZUCiX8SJDCGdRwjJrIz&+?=7EGRlM>HC)*qbL=s(NHYwx3_%Szol z_epjX>|N7;UHPM9{VGDR;0Pix{LJr~0YD-x%<{aS08ky^#1M)Df#7dGYwvIF7ZA5$ zGq+R26WRw#MwHM*b~#1X_MroF%2EjfMk-X&+l692O#BlA+@SpgSYb6`#43%UOs}0W z43r~~O0oo~rRi45CwNc0vnJ)>bZK0K0JnW)fF;CGY%~Od)bP*^xNGmuPj(S7C~X#1 zKv+tBk>wQ1+F$o}GR&cUUD+{q>~r(FANTQ`+=KzMz}$t^rlie1vFw&TU5;M%@vuSW zmK0M8TQ+Y;qD};Tf9$bMGd&1DTJq5Ib2FdIEBr!y@hWLSTS}j7Ar1#~;pFfLwkq;5 z++D`i78sr)HX;dhK~k;4EQ?Vh+>LR%SCGXKjUgC;w3D>Yl1k3ugH%^$ZuqdQVxvJz zry?(k=*5W}s-w1Y+a|$-PqC=>=^>SnV;yhSkx_7AUVxPdF|#ffOpMo&RY2St>=d)Q zMA7wd#ZqofyAI(isHGx0WCIT?9tsxfOw~nrU6fi=iK+a=53!dzwn`w@V)N3wTGyi( zvU{9M1rwKb&3oomtwpbV`~LD}jPkoo)Pwa#n}Blox$3Mw^Qp|L62^Qx^y>$Hoo`0& zI*%kgn_X;M)5W7g?wORRe8+ty0|Edi#W|&IfP=#e-~d3JR5%C6#f#Sg@C<-LfRb0g z>UYjSuL58IKykonT33N}Du4z+l#9``@7nh2fC@mUNEBLYb#?D#s{kh&pssF4Ma=*@ z04Qaz4u_l8b-gU(fqPljm_KD4xR7Rp{?l&qx~`^(LFO4xwB23R1GI$Hb3;B)zSm$-R^y#4!bGL z96CpQ0cZ^MxN249w z%Uz#v!D1?bV9VF;#gEcq5y77-XtT&!1nOYXc}HZ0bmIKM?Unp1w%i$#wIcK(!J8Kx zRFnJ3@O2~fTW_F++E8WCd=ZN=AcOR?jCS`G=k zvt6@RohzvHbE=v!ASVD)xYhDhuM8=7Ct$Gf5lM~ndEcNV&^#t;%jJ+DKBVg+MFE)2 zu$S#Lk(Ni(*E|pO2-*@+JX9| z;Ggo`HTij59jyZ(WB{knu{wJlDo$^UWID^_fj3&&bvvO^9C4G5dppM)yek}C&$4wl z%6J}TdsuIPPVem`^3?OkNwFTK(?9T5Jw~>G45F=F`UQ%UMX~kpOG;LI=iXr~_m*RK zI|tbtLGFzm|3psQ%=X0|azDKs6#zt>85M-4$$N4tg^>XWc(2I}!cLh;)RNg~Bi0Z; z94%92F=4nsH;4u3N`j%G0xUX69tL$(%syUyanyhp4|mn)&v`9Sj}uh{lWi!Z6X#V7 z%wV5E)$iST3&mLU_Q2S*#+%fP{R^C9Iaz)T<}8Q@FO{m zeCOP%;}r9D?aqDvDdp}j>fVfc2s3*yZb?-NMqVd_gq%~nL3hIeR1FwiiWN2zis)d4 zEXajLiYJjo7u&cRNYDt{S;6*(&Kwc;Re zA+Pfnr&tOA-k17K3^Z|W839%rptR1*I$X#7(*s3$AvJ$pNZ2!G{u;{6WlT3 zgUT4^nL+O=HJ1=;R|1BCAq@1D4?zS_%8;3W*@QZ>ZDN3Bz^!ixV&3VtbfN*F&m6wB z*gp@w6K{LEB`N_;EkvY8pAC0o8?upfwY;z@50n@wc!^6YSQQKF;Rz5!{OTJ^8xFW# zfmJFv#lXZg>eK!R4RMYM!K|Exb1bT-uD0XiB@N#pBA`99Gx;qw8G*q(eAmhA{pPXSFhpVy+^sgJPlz-yu5qSw2Ja z(}#&12pU-kC?qGK@Uj;aaCzX9&^D{cu;j?Y=Y?T|&bJC*b$cA<&l^gI!37khJVsh7 zi;S-De0~C-`Rx%GFv2#IsT!NF zZtJGTM*#p^2`pF)bpLHBEiaO`CWR?2%FaUPWeJe~Q&jwy8vQYr+i2763!4}!_!Bu1 zPA2r>AaBB-$l+K4S194Qk{fsgC>T@7W({IY_QOA97&Jx*l&8djv(-Q;;v9acZqAky zHw--dTJ9i`m`V~BDWM>ilUm#YH<~-4W~^T9S!@NxlugKCTtvepa1{z=QxbM*KdwgLXyPh!V5D2-Ges}j5O(Bqw_ouA{%?)`zC&6Fu(cldK% zcMfyw4-M{QFqGGHe(1dOkGqlqP49adw9}7dvowZ4M1fhXz^!Vj=P~$K$ur^%0d_Wu z=P7a*P)Q9B(s*ObTs`O;^!Hzi5{~8lN296#QlkFDlmCg_Gd&aV0~^yl<_^BVM58cPkImm5{qb7Dj^;tn@B_; zs)Q3=Quj6H*T|9jmlTc+{0Q)1ykR{=1uRpSzuljHJfk4VATBryRay)etp%KukRg@b zuT5V_3=a}N^h#cG_RRKljFLanw(@R5WQFHZ?GHyq6E>qx06R|B^#7ljrC*P zc6xXyMc~InyDxLbA(Lw7;ydi!N}_s7xC2m&+vT(QGs2{4whkaD&ku?1*bi;LgaSMw zU-*{Uxlc%WB;PaW5UPzz1{D+h$jC5~EmQ)dk=&IgkAxA_-e;8Zr+YmS>>;6{-z-P6 zv&2%->DB|A=f&UNk=qJ^sdX3Yxl0Kadc*)#w$Ci0i8Ms*tdh-nsTuj#or@pbU8Yy2 z+iLEJWL_wfp$>xK77@!1=cVS_bHNoo>lx2xSbfdEL>Cx54UmRJT-LrPcxy6WfY$QG zQ+(XhBo518!!s)L&>H6F8%F=bw*4P! z@C!M%jUnA$@YG;|6M-K9TmkzHCi%k`NFlKm(*Q1!8D{~t5m;YRzQ-8GDB-W*&8}&^ zfY-86Mxxo}i3wc!HZn*=*%Kq>m{4I}WT~D4xs@O)7EV(SfKelFvx2hcuOBXC4(5>x z%}Ve))N~U9W&l7Dy*K#_Lk9>r6MZ{$CnFsC;f|R{y!O*??)M+}z36y&>2mJV`*#Lj z?+U*ViyLZ^Q+beh2K-=-_K+zF_JtR0qrajL_b|(#UwzZlk@t~7^vKO-xgPlywdM1A z@1&2FuIVhDA$&eeihr1iI7pp2e2`1CB%aO@vL)_4DR$6?eCX3fg$e!ki(7#{8i!`O zT{#dUvs>aK!yOmbR&}&g^5U!L2oVl{#bZk0hZomGF1|mg^p2h+vMRo?&3WTQAfs%Re!`T9wI8r@GfrH|Ux$LLHv-IT-UqIE-ESbU_j1G>8d%6{Gj ze;~*BkkH5dsC&k)fT;`O>gR9{EPvnvsU;qdrs9%97^q;Vk^Xj6n51h^eczl=nf|G1 zag6~*p4QbX`VaiEq%K9(j@DjUGN5->1x5nN0k^zU*%4Yi2u5qv*~v@9zvwzoxISZDustXdV1H{HN~@ zcxTE4K7@YNT4*zOY4%>s7^dM3-)wRUhzptZV&_U(E_a>W_o69|sV!mHzWvpaOkcp+ z;+t-LG6;wQD@{=EX{*$qc;77Udkla3{H^iQg}N87zZR~a58fZ&8n-(Y$8%(Nr;8p@ z{lMniHM^CxP3`(6!y7l3Z?aA&T)*&Ub~rh~X6W1I=!?yj&u<^!c@o0dy7kibRKJA9 zfbX&RF+JkJS7Fp30X}YM9Ymi zV_O2(3*0ry7zImg1|tn%<^Z)wJ`{!H{P+6ca7b z48XB!vEd(#`e|Ja2g2mPrhxVMpbmVeGYymRC_)Hi9jT=DeNii*}V3l)9Kec%J{%>2r3F4YFx ziJ-Ex?^QgdFBHhkR;BSmDa)Y|7Y~>-s=le?{RS!h*Q3Z^$iX*C2o~H;gROsdtisw% zQim^u?e()tH1^ak6!w>RbM*Koz^f~Sq3m6wfXQ==ecZpQ+FIvSb&oY zEv6pVqbF+oOt-zwYJ0TM@|9O}&lloXBJNuob=6a`+zVcg796lI)lm4A_N;mnbX-IZk^8PzbKejht(|0~Q z(gOSjTkjsfD|c7>?xm&EfiH6$OR$yvV98ZNmnD3?+HU;imAlmf>fjcQ3EXIeMb;g~o89nRGG`N^uBWNFyfw0^O z!>@R_qxiQd*wv*96rH|}`TSo0aPP-YKgrWP#R`5~T3OV~BZ8T6lh6URsI>JdyqIwH z)=p2yAD3W4?zzS}=1~r1$+NEKI71aCCD#Q&jJR?sSEiw2TphR;EGmmX2W#WDisb^k zN`THOl(N=}y9z6)9xXP|b5>N~3%k)pqo`^YEH8Bx`#UGFb?hf4X~Sbe6eO#rJHu{a z&5d*LPDpaJ>x^i0++6rzyL3m&0!NZSf|F}7y@!(Ct}`#wEs~&97^Thx8B+h@LO43se+4GzU> zr6q3eQ+fRc$MCb1{)k%4op@6bMNl&tz~>T)IFXg7<2Af>b&T zq-jg_)^G&ED1a%u-=my1DJ`rzr}&5gM$drkL%*5#^G2c5n-qh0KOG1^?^AMceLm5K zShrg$v*Z(S|87t^%5YxhTSB81Z2hHB=Af>{s0i5R@%=ufJ4hcke{oBv>-){v4}K0g zJ0L@}%OJeSU>nOAB)XjT+Q9$+IGOkrF2}x+t7|6ss@u|nbtD<&Qstoa4SC=UQ_Cf? z6BQKy^ZAC`wkpI+JOy15SK*IBi7j0S8lM5Bw_couT^QrYUc{v&gnMGd(+bW(rW00; zjNgaLI)Fy?mU2eIs0xXS?=<(TvM4$-pj~vd7!1n!9~ph+-|%^Ez@MR>ZR17uoG~fT zecwYA3(|9X*MH!T7J3rAtM<~#+nys!^ZK}tJ+F4>OwQOOij(QacaJYWO3G-w zApK#ggYN5CYxceV!jG)0jxjpEJ5R5N9QQv66gZ98&=QeT^{uh^)MDEx_5DGE)ta+u1a1Y~v(yEp5>KL?TB%v1dfr0nn>yXr zWEStE*{h-mrFZ*sNA*E(_u1~EJL&6Fk2jfnD1HKs=F*gl<<8yiv0jy4O}gi#D%hzi z)BRfhnSEhRVtN5yWIgM}$s=P;oTc$CNngBM{gNxD?wFa*cnRz+q3rfN64n8NzwB*V z(HEKYJL%bItuFd386HI^!xB;301g0ebC4Mh(g6@oXchblxDb^@1?>u7L|)m|6rJ6^ zupq3XPDkUD*LMM^^Sf=ZI9YRb6=1))4RDf^sCxeyANz-sQ<~Q_&K-ANwU@X+f{5$b zm#x4#yx)c7Gzk?T;=ci0kUA|JRCCAYO1s2SbNe0qhlu%Wx?OpJSZ^I+ zy`}~4Xt>t!i`-79xGcv6Gwdn<#e7y{^Cr$dt`^U`Qren#p1gQ`#YRUA9h>Uf!-}m7 zFPd*BSSfJ>JuCJxi6Se6j z+U`Q%<%@3CZKQptf4K8>W9Yk0y4B)Qj(K*=yn`#rN85po9u6|-!}XVBk=ych{`A@W z4^Ya!h_!@*^Atje1KCoDV!$vSPQ_F9gDf!@VaYt@i3C?Ov<-BCbL}eBmH|r3xH3t4 zwqJm=IEP_eV9j)mEQLV&k!>%Pt@fA8zLxImf{Y)xi4J0!#i6jHW$zAJbt+)ZpS7eO zVW?`qyfA!EKjTh!yUB1>>h)Vrg`a%V*XHDGDv73VO@44HWVoc~s~J_E=xeH4;S1il z@r-g7XxEBo(-&d=0r|L+6!CxCh{z495Jg=dD zXPk<#pJA$pxH>u1bMnj2erzdzFipn5TMz)K#ELhE3u@&(Fco_jyh}(%Q3Y^gfPsD- z!a+B8L5u#hPjdd67_OmK^V$oLhidhUmJb|YBRh#=KFTMngMP18jH6~N4_0kCVYsr5 zoX!QDQ|f&X^Zt6$5{F#z?Q;unu4JcLIV4$`Oka9$`@Ed(eZ%Bsi=DR5+u}&w#Aizx zu0a>XlBblp=?7lEjC{9Y;<9R+{RmoZE6rX4e_k$=bMT0$3HWR6=ADl}C{DVJa6)qM zVF&bC(^pWxp@0=CaJb^V#HaeDgOaD`Ad*+k%w;Yw>7A3tcw;|X+|bz$lcTP(_rD!e zc%2>igRH-~`|07T#O}k+bJHJ9e_Y*o{L;LOFW9<^%7WtpY`qSW{N|pxEiyP9+A&YB zwr>0AOXRsG^NQOc&Im-dKmTNE>Os*sipBx2H10uYdCR(KM1~QxlDS3-^Gid+u`G^q zgaFA{Yi5&6&jD%Kye1ffoT*N6&qujqQr^of^0JIyKbbJLg1v)v)7Hk64^`gBL={Ps zCi!fR!!U2RD^yKV%N@_f&Z4giK*iqkE0T?PRt^!Eotd1<`j9@wU!Zu`8(I728ZO2< zB;T^8gzrG)$ny$pjF5qrb@|P-lU-YxeMdK52URN7%O$?lDasDEkK;SJMm&p3aiI9|u(wv!$mm^{HZ=TKQ`SF_+t|?SHxqakO6u#xLBL%0 zysSp>4@gi5S%83up9Ly>$Vd<)GtwYK=AEZ`z?Qwiq_LGaC0^lkU7_CX(hG0axZcKN z9YmRIpr2}n%z+ie5$9GuQCuPy%(~Kz0kOy~C8k7MxX3JaQH+_!B_Iwv5!Z5An^~%q z>jf}hs_`L-Ae*{g@U>di_qFkt0p}%b@9_-*FvwzDbA{P#gYSSoVA^xOV|08s6f&&Z*pKYkUzO{QTu}v)%g-%Y|vQp{I*CRK~BIWeiZ=^0%BkK2y-W?V1?&F%WjD z$7|Y3gF`}P_yx$g{Hh)})XEBF*@)v~i&yrzHS*j_{m44CA8Wf{U+TpZ%5zVy?7Vk@ zI7U#wobtI?H-a~hPwKP=JBIDN=$rwLMX&0PxnRbd%iPTNw!)Z)ZtoX7#7~~$n86u| zhL07OT`)GeaxV=t3S&6wLLF(qa!PY(JMF(b=c$XtCkptnWXHC&9Xiw^THJAoP8eBNmx=DtM7woMBtFf=_ z3pty5f(H@P2<*)&7+Vsp{b$(VYPdzpv6g!s!w2RL9rrr1(VZ^=H#;Xa+9iDaeO`0U z2M)8v02hK+*U6~6UgLfvw1hWic0f#9m>xs17%PrH{FS?gfe`_tK4-6tm1n6_U0n*S zIqFR64LvdcCK4G04OjF2JeakGWP2>$OS&}L0XZGbVoCC17~<~^BGBsR($$C?J{9hs zjErfDL&0(+wQhA-sPSiMe2>Xb58f3w+Vb^8S*7sH|t$8R~=sb){0x} zg9Wm_?p_u~I_lHwz8jfguYR^(|ADd`Ze_h2sLAc%$@hY%Ip&AmZMBVZc`b{nHQb7w zSYx6K{e$&Tq;LPF4-&RwY~vm4?kEf@G9e~}!J&w-x2wjm zFN7R#OlsleYboXkH5FJ3*-t*e2xpJ1Z0T&zq7mK7jClF@*k$5xIn*)<#^R5ya*ENl zT&NfX=JV&8OQzKP4f)fV1MQ{sB4dmJ*{PXI3b)!PBukwow$MWKG=&^$Gz=aV|@Z1RLGd^^Srvx zO6=8x$=F9nzMfsBc*w~=9{2t_a{l$>fvya*gV!rv+^jT$k#;G_{J6Qm56UZ_4xe}Q z*^)dql_K+;K{e)I(gyr2zmVhD*dX+WJsNAZo#B_3@5eH@;~t=Ij-j;brywA4eA4)O*qDi}Q*MLvPKy8@B=~wUl~W-gxwN zclbUzDj)1Tp^&?l)hcl1jrD#z<-mE)GphoKWUAnrT;*NNMN^X*P$cX2P(gwM`2BdC%beJ%EmF;efyQEq;(jLEpMb;l zak^e4+EY+7ukB71NIqAIQEYTEo8+T;fO?aJepGzZmYWW1JBHk`?wF_gQ~f>%Y<^0 zF=LjN{d#Pi#HG~)*1T1iiYJJrU9L|wWhktG)}nF|Y75Z|)kk7Zphk6^XF!H=ymH*L zE_NLy?4fNX>PIkcGpMkO$hLUJSffTJ5eP#@$#Nkf`04kODar4eK`K{tWv16^O@fZy zIms%JJ>S?(E~$AmRU6oU^)cuD>(;v(y&02kecdbG_w`ln?E@b8DJaK|34GDSjTC<# zf7DbwGqBx8Tf9Oi1MGAJo#kFw&R)f)0K&f>N-WibmtY(=;$ZPetd_{vh!MeL>$gMVgI2vXz>u=jereT_q z3<^A?XA8E%&TG0crKfo;y}}T4b@N@W=H5S88M9mP5sgeN`Ij-EtFIxtTpb8mECM00 z_z-IMc%gAq+_K#1$x(se#8lDC8LbLjwJ(nE%G|avyA1NzVoETx)le5%s!u$f?9a-c zW2zuzP`HJYQed;RLsQtD-12fxy|oe69?j@?^Eh;xNTx2QC@KoGXH^U+mJnE&@>pNWzAon(vB6DU`X}gl0O1Y2NyGW)=V2%k_p$jfEZ|^H%}lfCHK?!~TP0a-Mt~K*WP^ zUW_)zfTNNuRFNZ8Q>nQRy!;MkbV>rS9^qoc+u_hduWqAES1SlE4v8UR)rhf~cDI7& zCn2rT3kb2Hi6DT0J3kXt9WGdq=VkAus6%sIKND@+;A}Y@#o#v3hn=#ESHiv^b9+G& zDT}0}p0lBjIzGyhjXJyX8~u}_3OPfRd7*=j7wn4EUKiK$o^>>{OzptVynDf#bi4=I zzkGMeAH~v{potJH`_Svo>9Bd(3hwG6^y!@c%X5mPkSAvQT!;1@IU5ycnC?}Pmk@X6 z+taCxr6f=%eQRZ7FlGKpW}ExSa^1n;58{o7>$lk+ewp}2n*a?9bD7@Gc`O*Xp}I|s z^?qip#4%;<6fEwc5`459bxc7}(kw?gy*h3v5Lq48U5s@E)g+R?P)*q`QfMB;tMGZ| zejPYPLhUM!)Y@TuXtwtEmI#qo|d0`kG})j~2iI z64^-Uggep0O3OU~x^>=#ub|bxH;h|yZxYAYQ(&5+VCF8ib0X69x#)|l4@U6k>LM>s z3Uy8GIPBQM^eX9FfHSCxx9&Wna#LafS(&xaw=3VW9^*B7oP_qRwHkLK9%k!PD z`^h@WyEDwv61S9e1ApA-v46{NS(-`rHG>@qk-hP8XXM2VH!eKm10?_|EG(i9KYttp z>@Aj^`w)KDdoGF$SgzDCBP^yT=szBM;Cq7UyIzsyQytSEUgXuVAnX?;2z%9TDEwQC zCcltlS57@h15b4093}Q;K*TNVQ$X^5D+VpOY9|O7xGpXNYIDeP0guJnK&qE;d9XQd z1f%jBZfQ8qI#3_1C#qVkKT)DU7+iMukXDlA#$SYm*@;oRG|UNs`Yn`D)PXpdb_&dE z-|6^=2YS7?3NXw3~k;PUS8)%YnvTu1{vO*#^qjUFBE4 zB?Z@C81LmPJtMi!c)0y^_wu!Z^MP-a7ra{C53ehytME;v>otX+0)<0gG~`Ld4+ApW5KOHtfPz{1x8`{96OTyh@F*=4tCE*1#v!x+ao{^P;OLM-${ANkR`q0G@TSrWhcMhv!mD zabzOlYhHDhP4o$tMC}W@H+Y0$b~1G#-#A_K3_kNKLK93&yit67GQ~@QgSMrqL5q^y z>BBt^wv5+R&s^MFLu?6@J3Mq%lP@xP%O6-vnLl+S=5rttEbEtWjdY{*J$J?8{f3Dz zFOQEs7JTsXo3+YX?`@A+OV=3AFp}CC`g=o1`c#1NW}s6{f8#9`sa}>lR>+2r8cOjV zr05M9_l;V!i=&w-$1~qQ*imsgcznFnQ*fZ-iJsoDSh$f9?MA+}k~AvOGnZR`JKwgx z`89EJMPB*IZI0aR)y)V_(>f3Pqz$9-ly>|_qv3yxw>@nC@N(z&cJ;#^T_HK%d6^6s z|7xEAQsM}54mr)cH+@J@l*F_5SQ1z65*Lx?c|iOnJgt$Fb{J+5+Q#0t&KwcOY?Q`q z(x%Bt!iHX_2^AQHk44+_SOO+7?A~a>)OS4IMgCD`5H5KLfaNjvuL|AUxp{AYH5TqW zGUOQp#ubK>v%#$B;;Qnu*ocDI{E#)L(K}oDE50wM74OsOTZ+nxM#r<-sP8zRVHy){ zoVp{giZX6tVWlO3m!6G()IRq7)UEFUrk5}hwb2RLA`^qf+POTo}h zJt-+M6tdLi^IBN=Z7Bh4&EOlv@4oo&?)=vk%;@YAnf3h(+oL~6wavIdym0;h-W@B)w$}Bh~d_hVE2o+ z=Og^ol4Z*;H6}2RH_AQ11nq}Y--m@8OT1I?88WTOe82miedKV}O`F*57N@QozA@To z{R(GZX{+{bGJJt=gGwBO`K!#c?^Zj-tGIu4Z}s_Dk?r|G{L=Mv>_@-*@!kK}H*%j_ zS?)#RPxAycQ)#j2C3&`Dl z5qX2@2?>&!gmRBkGe#404mm#L6XDhmSuhgT;3~VX0%t)rkP;2!krjSmL-7asO7jND zmd-y{dMfy*#yf9&9Aa&Q&Gvc2z#uDS7B2U3ArNWSUoyGqz?Hai_~S|q_T0$gJL-xH zj;=*p{SWU(!2<48J@l>8HEC{4**JT_G=MekN@m2tUPX{t<{x4lf8dG+YA4qLc=US-l|C zu?3gsI5UmzV|H6T)$@HhasA21PvFj{n@4RQt?ayNXnnd_dAYG@@Z-lrd~gJ_OeP=v zn}q2x&iWJL;nRV+N0c$X=(_Omr)!3CUWe09&2EY9MKlVQto#&r_m{#S{<|WF|L}5O zMRm=i_K^Fz#k!Z^C7it%haSX9{l|>8%w18@NTEJQakW|5K@#N*M}TR~LU1r5o`IE6 z6ksWfLq;MHrRE1cFtH2MF>ksY3h(ASge>35VKB7?pu7t8g;(q@WPNeCr;y2i{wS!) zT2k1e0?fgI5tMSkx8usaTqw*~I8;{Qrc6gXXhj8wD9UJU6DK}diIWh@LXR3a&d#h|dk^*g!) z5KVPUlrFs(Hc7ISD3!+Ca=VH$;&`**dJEhUWJx)VL-fnXgy;duT=ihW9QB=?GpfPg z`ncXqO(rJ4gO3II-UnfTJ9Bj^!shy|ga|>EOI;J8Km)R!Ax$!wdl}Bi0zo|t7ILTG z?vR-Kb%~>`5$>gz^`ikPWoBemItwZWL1aLkA0!o^qm~v)@{^o-FntuTjt)SCg<_cR zxYuAgTi-Yti-usd)b3oAl7`tA8`r;S|oM5X(nxO!T<~bg2b?M zC44ZSE+GqT2v~%FC9$^!MU3cVo@@vxYIj30E_sNEr#>s;=EGjWRxTMiKhi-8g7C$Y z6%_gV0U0n*?#2hyd7b=HMpUIdBYBlfr4|gfitc43C^*^Ssrt(4FqI}%JnpI%?VX~y zDE{oE$~Q^eRN0rvF!e~dLN2Zh16Mj3Mh*Z(&zBfu_tt#QfCy(x4`2snTOjKUDIvFP zAWz{HFhv_;e?S3FX;hvHQletoB=c!HDqIi{xbjl}yS*!$`;`nCtgtJ!2$Pc0z+=8p z=fw|b5npkr_~*5I=yL-!4IIuJ_dwLLnA$4=vSN98z$%JS9KhgYn~m$)qNy>D07ji* z3=Yo+M{~Jhl0g@`LZf42x>;It(i-MYa*}U)Nj75dto{$A?oThryqEgWJh=KNaze8| zk#nW~i5x>%LVk!1^&dG%lK%^UIwlCt0 zVRd1wQJ8kV7N5^&^|p8@SqMpBQEG%#$P6)&<3kFBWeUot!`??OhKBP)>Pcb*KDPFX zL639>Ok%;3aXXJZck>s**WjPf{ZXo5x*#iqc47gJq~Ng-u7J+MA_RhMWV2(kpZC0Z z;=}T}W8X&S_e0l>UX)xAdG3CVWN%O!n7ZS0YOTzb`H=U0Bmk2SL$+IPUee*wx4GT>PdD_4^#>fB}RAA&J ztj!4VUu`k{Q=Hkq`=P&(gKvEL87?6^gbP zS`EL&gNKrEWB|*l2!87U%vpG8~NLT~2U# zxw{v>_^W(>TgeJCQ#e79R!Te36rIJMR_%j|`_yi9{)!YZhHREeMO{1oKIltQuNgD( zde-sIZ%?iXIX0J20Rng(R8Xpvl(#O`sHZq4T&y_Agqz~m*NZ3S3E&ao2CR5X1Ql)r zWemXtB$K4QT-vP4%=GVv1yr+Tn&BbnnS`2Xlf-LKtcKv*!N5k{5_V8$keq-yu0s!X zR;apwAu1A%m3bV%I@VWsOTYj_!cduSGc^0?T_*GMVcCbSOB^I2+Efw_ z)Xg@^g?*-{x@WF6d0f68^!8wz)U&hd>_J@{?$7KBgPdIh#wGrpg|L6O@&7q*{6da> zgSwacFg>>SFZ>FZ6B1>@oC(_Z59Bz(CdrC9NEMNk0?X7~T1e#sWO6bkCKk=aQJ|EK zBe;3aOWpHvFClRTxtS>1h|BY;7R})p;I3*)>!)heHi~B&bsE++-v%XyHcanlqjcd@ zuGH{mfCm~^8S0uo^mCl3`d*PG@uYvI3t8oD&vNlmdO+g`kxf_hz{8-Y_kuq(j~Wxy)#}qK3$4Y9Y%)Miy*fyx>~=l)PYM@VqD|K%EqOu`uB-*=?OyB!i;ox_ zG*U81Ib(B-wHZQp7@OtQq`x#B8m?#KiSQDD*bf@RR3gjm0@YD!|gf4P+N zk%{TU4iBj^_hYdy9!gi6d49f>JkzEhV;qFwE9-aek~d+ieCa+F=B75@x%c>nehd1N z)Y$C1ClQ;wmts6M#g;54eKW?BNagF;|G&O1_s?*-VBKEsSL3$-7|Stp2prx#^bh0! zAdE4&1cmoL!FN`>WuDXV3byXo?2%}+QgRJSj35uln2ClL&$FhB} zPyq0H6`r6r*e(U|l5FfVJ-mPI3gxH6+g0Q$Z3;LrSd_gQR<(Qb zwfxU)0QzM*Jv%$rQqNsvk_qVp;?E`MPoQqcTtY!zo}n;=R>}onhr&Uwpzx4*vp*q` zWJ`+hQHqnYfUJN3EN<> zmw+sE;iOsJvQCGe759w1rOJ8T_~bXDWVK$E*I~^ym~RPN>k+~HM2E;_tKhx7hJ5ou zFB@F*97^#}0s>EU0p|3jUO(JXb>|+<{duL+8lP%iPk(fHBVCcDbTiOCXh*m%*6-17 z{r~U|^-rJrr<0r1?*YG>CH+YpdX_`t|8R16GwCqB%>7DF-Srj4ND6A8G~OyE1;6;q z$x3tQNx*VPrhH-JvNHrU5mreVhBT6glVDT^|8up2YU_zg6EuOx?6Z_h7?N8f*{mZP znJ0@y#-W)b89CQB9itcM1-eL1AvQCA#6f6y^3vn?Tz-7TxU8ppy8nRU6t-EI?9>T5O1-Y?!-w^`8n69)<7fF_)V&8(lU>&> zngj?51PDE$8A1^dF!X?k3B5~if(8g3k*=s{=q*Tx(3IW;q<1y+-ixTHAVsl)idf0b zTfT9>bI<>dd+r(Mp8r1?0}`G*fid=;%)RzrbIrBoD;i+Ne|KM<%De-T&V~ADeNS9ac!Q94_Vh1SQ6y>N7{N z!htQ`FbsZf>;H@u^)Jl*4Y?5=x+eH>pcx8`W7Gx+SVB=8AMlLaff#54 z%&-C+7I0FgMPqc=5@u8MAkWYsBO7zNngoo?RRDfEgdc~zA|!iN1I1v$2#2#N`cC0O zV5FH&tSdW_P_T27vv0`VMtFDpO;q9l*L;e6&d!cf{xyXJo=Wr_pM@q1pQn9`^M{vW zD5HSch0nD2mH|q4ABA-0^r_!MSS@Zd-H)ILLNr=tgnP~HvZy-Q65mVg`VI3_dc-37 z#8}h6Xx}Hpl$_)e7KLfFgPRQ<75(+|>4}Xsl=130f3VD~B4NdQOxNy+xcHf%U?&hx z>~8>Tqbt~U6@7l-+{(E1LnPTkL^&-sI<1KF4JZXmXt{b8xH~xg7mRw-5`ymCcFuOlpJ_XTs7m!Aei()^34=SzU)|RG|x6Dmaaep)1 zA5VWlE@uEgk@Y0vi(TsFN=C66`wb@fOMV_vX^Bsl=qXkJJ?mR0>0>XIOPaBVPM!>eA3R%X7bI-_HfzF@f&&MB*Iui7~|hJ8dtFCoxDgYG) zmCAu@0R;+fLsp0cOs(3JuRm`bbRVPr2>YUpNi;J_Mf_+^OSS1@0;Jj!xHt4Bc%C**Q}0UY11Yam-pqf+@)V6;S%0x#@-vm~lCH5(YjOpl1T>(J;u8fYafl$`!HZmU z`>aI;QX0s)w0(+qKfeXf6)MBw zLd7T%jLkZcIeB%mZrj%J5<;XVgK(L4LFbH#OkG_~>q7nAqM9^1SN^VhU)S=);VNCF zIs5wz?YC{DE#Hk?+Y2_@vkN->z}C`QG3GjV!{L~WMpHzD%4-;EhtMp*J;0zZ3}+#c z(ad}tTqMwX7Cd#zR8zpKs4bY#H2w(?EJ_LRl!dn81YWyl>S(K+ z^eVUDhCu3ovOa1)OP1h)Bm#D;05T!Xp&Q94xBLE)I}eYxlP}cj1Sqf@G~W+co7lCs zzlFG2KG|)SpZUgP&gSR5V@GhM<+qEKz0(?-&Ah#yGeNgbef))Xg!%<6j!H$GS9@;e z={jeV!t1*6dK9Bw5&v!!6jI1EeLXXXVd}v#Bd)P^)aA6$E8MGHpRk@E`iAzz zRi&cr2h$3ECZ>1X!jZr~Mz7U(^nog~Z+ha%JuW27ttf?1Ej94Gf`~YbpFE*Q z);-R&Itm6w*Zg1?FJgVY=hjv*g*h3^;$1dWA{h3G4wVT)Niq&NA zL=%`DueLHvd<|S2*1fInuV(>_WfT|paNcAo4L>rx`D*?Cq^W;5EncK$tZ1OZ{G81* z+eQ*g+l?;FT!W`Q3vh>AAKkT3F<1Q3_*IfY`V$;3yM@P@D)170s~PD)V}DwA#! z&fhSKg2Gski6z;Vw`-9LmMzHwiDe8aJ?HJS^;yo@N3y(s50tQQFoY7hRK3>q--WYy zp5j(AF+u|MIH^`8EWmhx^H{>oBYUU&g*1Cj_jkTP54MPj^W*7jyfVfuf!@$-ySG=l zqB>otR}dd}-~3Fw8(VH;!Oo-R14B)7r*d_Od1| z3U^c{UfkC6t;x__*){20K+36RwJLc}4HqikHu2#+r*u8X$Eln5p-qn6(KKSJ;WT2k zalz#JjG?FFmT{*>MO}x&UheO1KCc((sg*({%udHP?5S3y)5!IYI}uX0e80on{yoQ}ja&a33VT zjLJf7^vB>Wqw=Q{Dk#dEG9vOvbbpyt3trmLqIXX1f8MqZC=DnF?k7t8)W zO_|ap>VQg^#*11z?yuuOrp}~w2F*X!r9qL-!_lEuDKPr=oI!gCJ6_D6;IZf$F@GiW zzUp~RyR&)xY@5TxpKhDoFI#@<1?HF&?Fy$Cy zL@vk+p_)?~x9*y6z!VkJ#gH1$sEgQeJH`w~03h(bQG=lhawK3Tb_M}4y6$b0pFJF7 zp)JM5hQ_qVAT>3(86^0Pz_8mjiY<=1J>f%@hY|B@QG_yA$R3OV1b<_qflKQJmh=ZR zR2vImJnr%2I^4f)&Gw+qVeR2@P})Lv%h*w6qxYU|uCf&UPypv{Ag2dphF)_F2^)k} za;ChvuwNBYa;@%_jK45MM4fy-qe!dy`wu4{o;u$fzAj!7r>5WhGb8=A6#lRM{#Pt_ zFsE%6(>q4^*Rk9%t9-y`9PV$(DM-~T+?7_p{~4>Swbfd*tdPkqzynCB>@jAKE#r)3 zO(y4CNK-`f_J!uq%@njzl@y5^j^`v)h*r-p`dLb>uMZ)IqVGaor32A~<|WDXoVdnyQ(7VZCdxTAdtPEkYOFPw^e!E>U%?VA$Y3K)VWF_7=W$7$9tMLA z(RiH_NL)5MM#r}Fbe7RMD5-(}z=^LC9iu)w`8C5gvR2yZGczELf-%z6m2hBSEOlVq zh=w>j5v49CChH8urd$-mQG<+!q^{@fN2nEK`98hhpLBk%d`&)Lh#-ivzCY` z*&}gAgS6QwqU$ygEb{WI#%LKma{Ya0Wp4ecgO=dwUi1mA~@^6T4UMTS}X3xg? zfRj0IdvT4CmIP-czoT%uFv^e~z*yKp1`bItW$Q1iW*O}C*s415?9M&O;H|vKBD7Ew zBOsF%QasVFGnIb9YrW40dyBIfz@jnTA$v;drj1BAPs0LH-$G?)Mu4UZOvQ?6@)@R( z7OEUjVt82;xj17yS6;HWAQbp01GBA6y134dN8TXdmyaTNvD#%(yN!*him}2IE zppc{S4V4V+LhQIGZtXI!lsSQys}!eNJc?-YPLp9E#hj2|`dEP3C?^&p!IZ-i!@$j2 z%jyVLRUl42xEL@1aM$UNE>9>^ z*V6^tL=g7$NH_*iq7ly7QJK`_HccVuE7!>2@4`F`lHr`ZEGYA4Zyho4c?s`qc!@i^ z@+eS&xW?yi6D@_H3Y-+6&{cW_Ls;cM>DB(%lGgv{-}WcVF&yk_Ta;t^N&kY}I8>R< z-SQ6)P5LE9xc(dfOZ3Nby}@cSXVvi$UN*mGVs*T&$R?V~?H4A{C7 zbjs1Cj2rlER#Q74I~3+Vj-Bt*5>}im{nX0h%korPV6yztU1^6U567pB(Yli+H>MX9 zOy|Z@jn_)aWAKV%+t5;kc1L|x+e)$RucjLCc@`{bq+UdIY`F+T5~!8@!297A&44b;L>HW8dAb041wn~jU*wT<8Z5Zb zbu_k?;AGWlye6mb&( z$Y@k6QglZEc*l+irc1>o^7TUi-p0xQ)qFGm9hZMW?kiGzUJN;!{;!3#lH(NYt(L>z zkYnpg2Wa&-v-_4u>%f-hw(<-$p5N1d^Q`2u@NLbLK39=-Z=B7QHzkPjKX1?6?*1x8 z>bZ=@k^rv$`E@+V-8I8_lg%y! zK4`iK6o)6*jYCuz`2oq;!Vi5V>dA1Jh19w@mvphT#5K;dVPm5glW;&`WwAi8i9MTy z8dIL^OVHK(h2LycotG`WWSj%EoW_VSF3Dc%R@u88$T@7L*l?8~t4DdX@~7>ZDGzg7 zQoW;XSXIf?7D=&R28@Ar?7atL<1y=mA){zrl@wjYlJyeH2s|_aCq+txR;5CoW!E^u zOKZ#(r5KFQ!R<#@tBQPNhGv*W(M1Tj)pGxb$6^0I>;I{*|7N-G+VkZcgI0e-?pOqe8tm;A`a=6B%h?Y5 z0K~h708}0p4!J6+S;4w<$xzP8J}{tVUi|gVGUlt&R@UtzGF=xH*l`yHleRM6wcIdp zInLqUZ40$qK))~FEu8V^bc>ny;sR?9X8R~Drdn6`{4{ga7OM%fcjLCqePG&eFPVAd zTAA<0mBRsM%B|;&G^~%l=Yxi?gNqp9jBRqSH?%YOxEkRk+^0m?nzcUD@nGR8Z40{{ z=M5J9Mi_vY<3f~)SkZr~79&VWk&r|EWFI1?hg#5PnZis5#RC_oAk`p)5l?S!Kg#u?qj^UUYeMPa=)EF{rw z_w+VyeO?>u*~-~i5FS@))Xg+o0%Iq@PjAx8$1fAkBMB!vW9%XgExCGqX zO!t`#wN1NiM)9VM>HTc0?~n27{uh)k{T0iB4!&v6iE#`m{)^>|STO-_kJJAb{)8L= zf&gGz7h_k+iDE{QL{04_>4=DxH&C6KV$M%rU;Ey55pi4(%i0H?cIJxbf+#Y&7!yVH z#;?qul@^@l3X*ydk0fi}@t!#s{Zt9DaO&i%ukdllDMz1*6EvZeZuZ5G;p~wDrkp3( zS#H};0U4s#?H)~^$kJ;wscEX6R2*RqE{qD4x0;0|is?kNGOEhHn`Cf`t#2stjT?%t ztThI*CRb@YV+#Fu1WYTC9u`W3ONgan_W~j0I{+Z29((XbXgd0CoL#j*|emOj%L7sm}R&#DB)Ze zzSLG0AjG5!vH?PGgYpW4fW4`SIbeAf@h3JyArd%a1tAZmF!zhBkzxb{*0?~NG7fut zhDKZdk@a7j-u~v+KUt3BUgb{L?ILGYP+|T?s1v zw%DuNef#~n<*Qj=+U^9zUr=ER?GJ>T@>4V)O}}0&9U8P78(cD7+N&5uQASJWsCb*9 zJ)U8FETc5S5FIx($Ol@KNG?}0juD>bj$?H{p1IJhyHeg{37K@YmV$sv%f+G$fRbX0 zh$S>}$2De9GK__Vb&3(@=7|(+rcyH!0s4Y$01z0YhLC+pd>K)a6OXu2Y%}Fo-W)Rv zc7PO+?TG6>8I0i542TjZR|`>}Cl-M$fexT;l=koEH-Gz>dY()5oT%YVf3S|ayFwtz zoH%}tO29aJ2_`nNbHf_x$;c1McPZr;%vJ~Ms;!=QKDIjHXGE0a(;i>5``(}VaN1`u z=vj9NcR(G-N%O9$6aNK+y1yVd{FDy4g6kIMC$hBxn^TVc%o^-o9>6MqbL<~Ag;LJ_ z1*DFW*_d^d|CDy7#HVAFAx1)T4c37Y8--v0?w|~U3o{{b?8e3z4fs&(qAWBjb!ZmJ zi6=s&M0sK$U9y@hgs9+KPn6nO;2Z!FOet7RNiZCo5EoB|>n=N_`uA<;ldqaS zF`hC^e=;`3(}XY<;@ckFfw2(EqHyV?3M1l7%7NEU`k2sYX&YxBhiV_?-I7kE`1-!> zA`6SbKNOQn9z_<93gv$Y&;jZSBiQa}+x#R=z3>j(%9wJf%%_AuW$aEKSYuHFTtR4p zK#BtlVijmjEs$z#Vp@zOGgaStAGpWGd5i&U0^zuop16mFOhN$k7aMy@-us+;g#JAx z;y&kR@5DU_{T zR*P)$T(CrCV`g?PWWL*_2Dq9U-F6nSDHcVZTV{}KlMU4~&WaCz&>$R}n?xy6zR#t=Ic|cqu-aso0$%+oCOhpSc#+&_%O#((@}+Qo^nkz}J3dM;gRgBB-9+GSr9dj*I^ z$ok0aB#XH2)BwThs1`*qgaY`UN(N?{N(BxNCzYi>4b}H|mo)rp#xu;Iq}Q)AHO9b4 zknY=XQj%jzrEJ9Wc(149@(c&7l*D1^ETZ@`Tc!BaUQre}Fw^#I$$EBNL^j|``6)hd z5C247+wL1PuSVlD^s%8``IvumW z+D?*|+|GG<126p_m_yJP(!W@a=@mWURWQD1i{nqE7wbEkK^56w8AZi+ivTd>?-*j= zyot_}JhGOaB0-sIq$AEV#m6hC=(vbL4c$_zVV%O9##{3|Kr48AC%Xm`NMPsM5l>T( zVldQm(wn4^m+np#gu0H5v-3lF_h-bd{WS#P5R8b4%-{dS7l&k59yQT%OT93Zso|IbD2{ z@alPj<+|@Je+*+Je zP4^AzPyf0peD;ZyakaL0#|ekSpvkeyhZdY{C)@Rp&U146Ts1IU+LS%@LtGkt`eUYk z#bp(<)*IUIm40X1PS{p>Z7W?4(VRBi4SnJKsBPm@*i?76mc7Hq<*yT`uc!0m%PFRh zOa4E-g8x)#axgvDHfJat-?Lk14y2n?JM`0YtZ$k7!$|_!@YD#*@9V2JI+=BY9NK2? z<^WT3eO5;Oc>P9ve+gYIqSZ&xORuQi%VuiX&+8IUz>Q0tNmX&=4Q)x*9iel4RRqRn2~cZ8=u zUA{sBYZi9kXK3u)AoAg+JmtYQRrC3SZ#@?yRJa6ExiZn@~zchMnFE9S`AwX zyKx^mRy7$J-Li+D-ty+lNhM7r=KVHdoNGS?j=y{C*TT}&vkY#o;|ZhjexE1 zyh;6wF!Oo4TItN?ijJelR#s)T(nh(Rzh%lAoZ7fKJs1CBFZ1{Ap@W|9Di{y^d-s5< zgo<-qiX;8Kdr-J|ecE3~podIlQ})JAjuU#btZ=elU~^-+m^#c99{2DIK zBCpG$J2uwOgo4yAH!?41iFZ+d=|jc_O%)rqwWlSANMIc*29+o(;}-6r68`$GrTV5M zM&NO{o5eXF*La!Or`;T99=R$cDonKh*@Mf*{?njS!5yMvbvPvVA^hvTPal0sE##C0 zD_lQ-DsMhlx&FGhu}85qnx#DCLLfmr`JJ$n{+owf!Y@5ftK1+eWag{sMXpg)oT~W$iT|-9>EflUPvj65$ zU2L*2YZU9t$4`8LD3>+A45N&>9u?_)JYL>Z7N$!L3=~4kIgA;i*cAZ+PzqK6#)fD^ z%O*2P>Ogkj;8-A;=U6I&5p?b)L5Behh$TtO%>BPMaHFqt|GOW5LXQ35owi9#{ycrh z`d8(H2Q%vIB|Z9&$|QR7fuLV~x1eyH=vJD-16G0}#o1jgp*#D<$euR_#gF)LgRzc5 z8B8EW5aw1Or|E;C5|FhWr-QzS^t?H*r+Wrs6pT^#UQBdg71GQB!iea(AEmBt73B{vvv##k=XN9)IeCnV7F&(sLKfhf*l6W$|;@enVB=`a| zK@8j2BTbIkh^ByV;bS-t?i+eb*k+oIUBeIL-;LqL3$8TCoMRq#9sPhTA~ejxrG^!F z$bJi5v%kJh!3KYg!?Ix4bx`ko*iPdn^2}nr=K)jSoFAu>=ehX_x00Au1*6tIn!8KlH z{h!~>FVu`G5{81(sf5)@(exD?>ar4He6CFwn{U%s(AQ2GLJI_E3s&;yOM{VTWd#74 z6b*CAo@jK`XCOWp1#^(Y7@GyQUU8n1P_9e;9m6Nye^NOhCas_p+~_!fmi>aTWe_qr zXxx!7+Y^XlZ)QA_ z1d2US1Th%|Vwgx*v-JGxjC_f?@lpl8+r;}kw@xus^-7Snl4aR>Pp3*f-0r<0wVgL` zmG9!A5QX-r;Xl#A>wg%5e?zViH!j%gwYnr`(a;-Gwp;Gla`r>VJ+{tyN80GsA6 zYkp)RZC$GO(N;O_q1e}^C@Z7jz=2{VYcVa52Af{P!LHgPo;GeJlHvjYW(>%R$gP8L z@x-d4#8p3+i%YBE7KxV?keiWrvFnO87IR+|^QHSLY?|392mq`JCa&xXsIAC2(SsUY zeU}{F@bt%vdWZcV4j+xa@3vkFzn5sPm7o7`ineSf``pEw~L%QO>IXO>1gLhs& z{LRU#t1I*2b@64oy1nWSolsro)h=It_G~t3pS$rx@#V{hmv7SA*J$)$@@;STD8nC3 zOsQv{326>{w3-55P?tTk$=Olsqr}jubFl;}MShAmmM|uYZ}J>!lhh32im$rLz{wy- zYB0^gSW<=n(`I{hPrOs~XU+$*8Gr?XM_vg9`d4kA7n?{>E3LQ*XQn`qR~BrpL7e06 z!9}ZbL1jp{abUD2>U(^U=1fmrXth41eYyGDQm_53&VfWR z-Ca39t*)UZGY37noxQQs^J%L6k>9fIL7kn@N<jqPjBQY2&<(`@2>Lk6LEs!hYaw zjhby;2MgZyH0adbRaKQS=y>)H`xI%easKUHC6)?*q{=`gaV_YZ)jz9R{(@Zl`e_5! zwfR8XRD*Ozu|~UZpHTrn3BaTiMRXmyIt1p)TQuhqZW@hV8*KBKYGnL2ImQ56n8#c} zBnNs%?`N2xbVcjH@nKT=rBZ~2ZZZ`N0~Y{D-Ukk(Y@(}l84gS}72ti~X`7+9zOgh2 zwwRSXRCt5kl~&ziu0zR=va@oDvTIoI5R)EPcw^p`BdcV2aLOe^aTXTd3#jGbA8j3< zCN)1y?C07Hj9z}=e)baWZ0ohW!xJua(az^XvM0bl@Iz4HlaGg=Gul0?-H%PLT}WoX zkNPpeQ`;}D)7s%-Eh(;(Nls16>F@TF?wVfa$qu&PS!3_p&9@2h3bbOTrH+4-oPTSj zlD=G&Z;|g=wR=vdVf!JxmDZh|FC1?s6eZJcY#3;o`aX$b*#rzc&c=7b%<{Quc5Vsv zIzG*|eo<*=`pc-W87FCSkleMp6wlV6`DoO%X?=_bH0-G_-eu~H zwU&v`Ucu6fQLi&J3v%o7Q)Rx^?q{^OZ_c*ddh!0s)4msziZ6~H-t2K!d-%&^a=Lcd zCwd(>eT??%0j1-i-zg(_9K@1QGxmq%McXu67s^BO&37Yp4{ePow9RAt1$EgTR^%5y z72ec6sT;YpdF&Ok-PXl6-2F&_c2}V8r((7{jqYIU#OuH!2>H0@6&=0B3b{0L^9w)R zo=J#@mO`VePybzt`47DJcP!U<#vtoy#NOWvt580W@81ij3FUCzPncq&n46`r0w3>Z z(TwYg#VjGLP1dZ;wZ*Lkt~ET_O9tj&DpsHN*X_tF+oG7Xku^RUGWj@YoUA}*U{0xW zZ45u7d(qeR3r#zraSr6yzyPVT>smF|LfjkiibjDy6q&?>qKj0tWmPle_1;g=qq1S7+!wlI1sp{l+<%gu}-Xd zZHo{?E2q)EUaSCYq~ypWXZz-7zBJ_bN9UIX4pO4iL^EzxIja`Dck=~jBrbvjRgsoc z9%cB}D9;{9K1IV-Of+3UQd=vZTIEOgj*yzF(UE!xi^M4s*Oxk#j6V-h7JU(BddJFY z6Pk>)38ak8a&f|jq$Mhjni~g9m8W*&h-Ns}y|0Ix!CspePIjNDb&I~>+5Xt{#{0g? z?ELb#`I8*}Vuxzkx4*BxXdibrl&PQ^F#lgaSkz3?6hU5|(5agJf1^Sv!vJvC|zzqMx#Q*1A{)^>QZs5kapGE}! z4LOm=Oz^XZ68&#`p71E7b^~#rnTN)d#Z|d=C4VR$XV4LB3RmcZFIweeOXh;HM1}e! z%D4GDDp7T&*k6-Orh!5LFi}R|DV->#?_}uXJ5pupeIow6MG#$G?RlknbhPI54&%#Q zYxqSaVc-DqPDha3@RLo_nUwSqd5yvyS&IAncTIPFd=g)Dn87A z{#N@vS`o{Di~bc;2n3vMHSBAL#;W0&q>;VTrp4f&R!_6 zu{Q8B9@;nC(2%Y?ZalUZdy0ElIcK53`tN(Kjm@*?Hz4c==<)yf$oC&m{TJkzYVd}F zYY~BG0nD}Z{UaY6Gdke?c7Klaa~zz^3E%~I51qb9mXGQhNR@6nn$Gq(+P7GRQINmBv!HvlqCwLi&ogf_78C@)X(s9V2Os) zkaa~kR;bEj%?n|Fkb>@WFRmaPnOuKYJ*jmLNh$d#BIK=JsFuVX_~iCL^tRkf-xmF6 zDn(w3$DdvKbRt8S(j1Fr7$!hp)vBwe`93-~o7ye*_6ei#DB-!A-pvCadi1sHY7}m3 zYgBI=wc_)GDZZ)JLna6n& z4e}J0X2!{~>HHwo`Uiq{LmHk*F7Kk0f!V|JMJo?pKYMSw7+o?o%sAt=G&wT$u4eiX zS*R!!pw@@fPo@VuAYd#SJRFQM6fB9?@KGj5zwFr3OcyFUNM7WrLRi|m zuAj=}cUNJZ2&jlb$gY=Xz}ag1>?`-2yIm(V8|?yfE;!8J?b?4Y{`^P8T^en0M4z9* z**67nq?rvH(axwo^gl*sHFVc<5B4V0UW)x4GsjTA48W+uq=Jahm2<$&Qynvx%N>%&5fk* z9Z=vT)AEVTJ!WTRcUFcgB~tp;@fL9lSUt>ZsR37akvMWeBa4Y)(}*I7lqgOu4hi4; zAe5;Nf6q0Vuu=-JfHO&Pc7B}1CJr8K!r!g^I&wLBwN@(|c{Jj+<9%sdj1zWBs;D=> zJ~(TW{~^mh%N2?6S*;+ir$~vh$a9;yCv-Qy*Xr>et=7UU^ySCiep+TE&}c8{&CT^P zG%sy6EjViWG~ZTUy%+Cq@33~+sH?1g%{7oyR$eHVpQV8{K{RgLg=O1C;C&(AZ&kU> zLca5vlmPK6!K??)dHdaJo0bxRPcpkMDFn7SbXkfwD!*=|)L-acfW>2@!CNPoN7>`U zbHObL$;sL;?oc~Tu4#34ZgO($m4Kn6iIu9^0_T@%aeeWa!nA2(v1y-Uq?;| z1JBwlA5=u55ZR><_T=R_fwdOOmDMici6A!lFMcUb5$H2U_t!TZV->4# zmJNkoIgLdl4)~GmuM$TYHCsk zY|*QNh@oV3v#Y2%R+muXeS201e)m~Fc{H@&Wgm+Abyc#MqVkJqDHSf9c7~JBUM#)Q z3)sAyuHp@y${IWwa`uMcp{LDiNrY+SVce9}TE$KI(L4M%L_%MD0RV*0*k8JO{*8%x zFR2scvzI2xQ(@EXc^<_S2;CmQPK{OAG;yDVpAO|7k9SwIHh#`}sm&`m;!L@kz3unY zXUW?S`R{%|wUu#n(m&Mm$3kc9tMOCcPMU>X`~XG>Aa)wBUl-bY38V(#%5{u!0HMmd zoTPqaQGHRAmA-;vXFY7K8In#Z0(;AtwRb+tqbk06%d#9~m0$^2$Bl@J*2(f}xZ!|$ z6rWMxo*u{s<<&o8TLUv4OY(SQu^P|7h%h-gX&83MY7GIFj9X4mreT=dO?j4KTynjY zmKeq_J}6O-SzM)uX}J8NV9$twW6-tb{a79leBSmxQFI-`;BxIw$A)YmlG_4xZk+danxrKb`{NYs%mUz^8%dMU(qp!n6XH!FQ+ zWw8_XX1wY0F0&yXY*OYuCr}YPBJQ{AaQI+@_D0t&q>l*V65AwtN8cy6_5*U`_LnZw z($wesgPJPs{2Bkjsm-5|V_-U>cYV+p0l2vGBVb}U2L)z*vL6EI3UFEaqk)&2Hvkx; z+7`>p^6=pif&M%I?s24X&%@^D>3QAc!B*KX*z-BrJ-nF*>}d`*<9)Y_Mru znTNSDpA zzjpp>U4idMx>0y;_ed&IGb_r*8URY?e_VV|<2he_1G9+4l?925xy$ZO#$!0cOGg9< zqQHK`jFQu$qtPx@Kj3hvbsJ+?jMK&5AZK$WV?XFU;9Y-C;ou^D($@#|?7~4JUBY=f zes)ZAi2#VS{N3O37ax6n_v&+jXc_C-(n8Jnd`bV7xCu@FVn}ndC&U=fW*!{@LL%pPU3oxW<&=Uw7K8>6%GIdM!nMeZ0 zn3qhDYR|JlEW{-kc#mbz9~wyXV4yHNt=`g=+3GpMdNx(mT`k?}xiy%RU1j7$!=&R9 z5HA30h~RSJz!@9Pd7CnxPZeq{H()_RBuw^Q-I`TRA1t2&hr6W>MjFyRW#g?aTa5y? zLHghK&F7hrWshG^#KCvteO`!gX>h^cgNb7;>alpyHq$!y%*vII3_4Gsr}=G6vgHE*5GrN&rw zR#J6h?m|N)LO*bY@Q+KM_Y8hNcJCp_ugbDP`8VT8E@UE17nPgGxPz_%J22tghQGN2 zQdw2(Qh7qG{D&WAQbKk0@V5+rU?jX62P{@CXALz%s{<23Ai5P<&P=*qg=3s6S9SSb zvk@rI7c~qx%T8^v@zx;tRKEoT0j(9jP@AA2lw`YwgxCXSYSb7EJA`Oza*$ZJSY3$i zPYv1*RbD0fLO$8Lum!EfNozlI@DofpHp(R3CoSV=m?9RSulV*;J61QOqf_H^M^^Z( z(uqe`m+rs)PBp!TbiQ*ziq@Ik?s+aZ)}pkiK~dWdYdCg0h|BRsqDi}(Qo{05|EIC6 z&wXO~Th&kd+#5YZ1;@Pl_UIY@u>YRs{(>ABpl$V8U<6=KWv2WQ%k@L`rY>QD=PK@0 zz>~WX);8!rb{~ksJ&se3Cqv94AAkBJ!NujYX8F{$v-nYMrkW&Fjg4wmd!BbaZ?{Sf z8^-n{etag=w@*QyOE|jX+89n8%ZPh2tSHVkucu$jY3)F@M4w70w*rUE?Gp7oHjiCk z6%Ex1N&v{)bDmqgU!0jFow1u&lX0yq@kg!6p#Fu-RyjB!C%+^E>T@F9Y4ZB*5@}77 zD{>Nk#$RYY7<6cRoV9sAMWi=8baP=Mv->S3H%!utW6NBHZZi%r1OQHD3z=gNTC9KS zX>B~X|L*p$tMOZF*7)`(I|ne;!KZ5V!qW_XH14C%#R1q$mouLH%Ilo}V)gLHZ?)Vv zcf6gCKE7T?_1;HS6)r}S9o@Y?zNMA$l=4iQ0)Q+g?XO|1x(=@ElI7<17!xKDjSu*a zv3HF_zu>u%zCHCjkg8N{`?0W6-Hh>gQXZTIZ+&unAWNc>Z?Kk2X9vla(H=%bceH_JBxbUn(F=q7%?r z;sHiA+wFT+shO%@yUi_c^aHB*V#U8)Fs@4|A&ARLoR#3}AvtD$E_5_@UVIz=gV@xGpr&l29vm5Td)Q!J-(hL{Tk|$42ty=N$<~nno zT&;sjUKy}_;^a+GcSLHMTrWP`$Mq3uJHn@SEMf4Cb?>v<2g*IOw4bzVoi`tTt^4QX z+utnrfL`E*yn%55@az4dUAhm&GAW?5dZ zSVA;Fq{T;bSg`FwBN+;Xa0M~zXf*fi0-P6kdjsByzz;brG+mf^u$L!hw-UM# zT2t;01TYqgckOL9haTTd0}p?jmiVPl8wS&i6KMT64|tbVS<|#m^zP%YjddNYChuG6 z{jwBXynejjGNisht)y{sU+ot`_T>1BUr^eZ^z6DlZQ#;39#t9yBH%iz$63b?M>4p$ zvtWlwER1?qaKnxTZyTOI=~9l93@jct#w?f^2-}^C<}ixyjWb3g2Q3{h$#oInl8trQ zc17_W3{DE`vRfN-ClmK8zpSHashjkq4K494DN>0~p4 z-`S&9DcZKak`(rIZ=MK(md;B)xGkmL9g}1AKed={}~&9(9Hi2k3S&?I_Sku zT04yW>s(IQ3<|&JCr0`kax5_V9|kcb*9&cNEGEVjCF)FGw&V4$^4Cg!Tu*-d%XLAC zd{uJ0o>9V2W0s*6NjUqq?fazgH{OgG)m%`Lt9Y=2Hhb$V5wMRscP0M0_`TnxMQ)rh;wbIS3y>;+dDy_YsKr!?%%o+Wqe zzULpWQ+vJEN)iHuo=_xILk|#| zqK4ifQ~^N~nt&+Pf;B+sMS5356%Y^v6|AARAXP;Lq=&=njRsiFm3`6;8@$^0HGpJjvKcI}T(9hZRUX?>Aue_<&A_XV< z4YU;>2edp1L^D~VP@iiXGA41^YLl>rhG*|y?stVB7tqg_{uFC{<+|*uw`}T-r*z5N zM#zRsH+z1q+)kGNziY4m4N&=Cb;>_L*r}Lef|YG{Np#9e0~e8e?bnz|6D3_ zTy8Gju>S-a3v*l3gI$PWao?$Pm$OxlIo^^Oel|3lxl8EPyMD7Yz^g;~9tqxNTrl_c(#2MxO)`mkwL!rN*6p$F@P|GXoO=>`K0pLUN{Ij__a0MYw# z`NwTQ#>PQGTa`&4XHrQSH^MKdUOSNUuF)<}uI(pUMnKp&RgORl-{-4qIkF+X$T%lq zZn-xwe)E?pVM1v+cLK-M&}weonVnhuylKblq;cQ&iJsZk)C7r9T2H7^!3g77$3V@I z6yf^0qk3+Zj}F)iR*G%mejZ40*z2^%McJ#_Zdi&Ro0F+I@OmQgXs*6NQw94?k1cV} zx%gX~N@wrfyZHFXnmE<$Z0GJJhlAD-%GKnW)Y`KzU>VcS13y&ls+wPKeww0KpQM8X{F2HU z@%(o;>)IWoc^83bt^FEcZ$kwCGUtr4(ksN zmf?qradPER!T^ck!PqdxbblLd!8##vD`PukI=ox2>}-2Em5dt~JB~}N_NCFXj9;6n zc{9!U2xkS&?q{6p?{hRz%K&zQ7K|+op>RP27BwHIo7B_Q%ed^ri!jxkY|bEKMy+Cp zwL~lR*-WB zVneg{@^zdgk@mZuI^b}=xRZ-p1mK1U(+Nk}5m)o=2K{Ai-&uO;1LKc;pP)i zj3Ahp;9z-?V-S!7^yc@qv zh7&?KP6m#Yo8?HkdZgO%ze?N0&;jT%E`kW=G)SHpriDci=fXxX7N`!9drWCU;TtF$ z5V}#?RT?U9V)j0>U4>df?4R&nJZYTw^G+hXN+5wB;I}UGK!?8HZ^MNSzT6Aw|hEb@BSFK)3+Q34xr6oCtYN9 zom2JgeZ-F`K4}+GmdSoTP+UJ`^(>n}?GG(M2VL=uxh%AJ)~XaiH@+x9X%y*s-e6vP zu+7s`F^UL8m=87k49d3dl+BKXs2RyBm}{AvhLu4(Gb)I`;P4(Wohi-ep`ux#_)t71 zfdMjH?>K(6_y|#>uO}iwoQW|kBMa{`a(>n26;p_gWq%h~DHCwzRv^YO{N%wz`M1Gr#iGHT^RW8p-UKvAz}wGNyg6ys zB&T4Or5A!U8TT~AAVaa(2(wk6xK4tz3dl6o&7W~#5-mXJD$$h5AzFqyX9xdaZ8W1q zxnTA_0JK9&)zX==+|7S;KGynqOm~CYq>nM0G|lHo>lT=2;j^Dq5fh3bxbO`0B7ERW4YX?nB zKHETFYlMtR9Q~G_Twr+TtkFmY9;1%PII`+RO{!u^XFKw^h4-Fmxm4S;T>v&63IZ8v zOZQLQGr1nEpoa{Y?MqP*0{7s!%xs{u znFRx-)IrBCmZ796+F6p#M?n9O*LlwB;TCk{VkfBWY6K=@J8poo2bmq=vC;AI&8mga zQ-LuWNhUpe1aX*{U?C6dnpwJjiDZ?ectNn54^_I%vufYDV)kV!HESTQ(5t`)lXcpL z^}23vk;*YNNIB6X#VE^lGL)z9jQ`ByAaC!LfLdNruf!Wmm4veDnFH9PEg9~~4{kHR ze!{t}MJS^H&*~V7j3+PNtiG^TYp4%LX5u7k-Nbg|PF{T*9#nY1jdTN-?>|Z5 zQ9ZGs*Bkb_>_+RkXZJZHy){_&^7n}6W<#VQ#0lpGc*H!>73#z{yFq}>a!8R7h=l0IlvXOMQDTIqH%vo! zhGhgyYvLn_j1XcZua+tx!-ehv**GKFf?$?OI|HbRjX}oXiKIkKa*trb0+(f6mF3m= zwrp~At~7mCh32N|P2A-w=&;L_syTi1%6+G2fdkXU(8D~DLXaCVV+yC!r3H41jvarQ zX7(_xE?ml;{pNVWO$Js3Vg*ca34ubVVsM3qnhKTR3SKZ9267q5vljkddZ-Dj8Ikkt z?X|}vhuAy{PMAA`&w?yx&XB(Sd)DNCBjWxJDcqPe9ERLE+xRc;k}a3oe~Q(Y0BjJc zM(MPRvd+Ru-e^xBSj9RhMT0OsIco{ zHan!cp&jcb;tVYic_1EDY-neDlVSqQsZcxOu`_#)dlc=Xby2Mg;=zZ%kj)(MP^0 zJ0EXsA}8CZ{Q9Hnuh)-o{D(guKbv*Wm*@bG5Zq|c7IoXT=BVvvsfqZaQ9@L3Fq;3! zpe1E{v*eUC5L%iDxW?KEVvdKFi8YB)i4sY`=fbbvQNXYJEBY3@H2U76UB;PhsTX&l zXsp15WdGm;F-8e#vf@19Xyr63cx6BdC-Epi=;)(&j9^`T&Au^^JJ0VfmS*~o&!w~d3TQbJ-W(L9 zW)CGQiHT!{W@)TZI_MZtP6-S!h177w5xr_DVLn8!tYNJ9F(Ogx%r4SEr+m34)7W*7 z=0|BcV7Axb6nV4*&D!iWHMAy|@*@#?_k`$F{PJY>?5KP)I7ZXos0_$fOpc*jg3*JM zQwOqzb7?B^QK_#T3TLeRHR^S>ta(TUaq7Fbw;#<7e@CPhO!)IP$uz0I{;+pkvnIH9 za8LY;-~fM(p8D;r52rk@dwAgn4!D7!Kqw!?oyQf*C%0w?b{KBAV+)ac;svE+7Is3) zkqk;`tuJARPbtxlxF*ewR#rw^;%xbL+Bq`QDtOU1)c~{1+F0pWBMRA(I*S4DHZ>}# zsz|izp4=Q~O-)LNrt@KqY9vuYTf>A~vra__6b&TNXFpzqNHeIRWHB1R@Y4vunk0ji zUe9HN145l+`AD8!?W|66^(l#v#c-vOm7r0cZxPSK-<*5A_;|G|=Xf2ArFSIaYx&^E zs}0tUIA2q@{ktQI?+UL(GbahM{@A9D!P`4;73HepEfh0lP^MP$mxAqtcUQH;qV;4? z5p{U4*8CRiTUq+QzuqQM<^ecB<5+<)pm}`eLg=B%V3m*5eP2rwemo$FBbZWOK2|du zGxWFblS_%G_`y=|Z^plZr`kZ#7k>OSMfSwfm?Jy+ySKM*&w%{6I_3I+wG(>Wuzj5R z6l>3jr#i!0cSE5pjE-==0;g|#>*eXhNV$Gr(J<&1F}Q*0)(fvR@?%bv1zu2k&)U z?2LWdpCVVlbGuF zBnhwL?$%825N@27)8_FkY&Jy32S)Lq5AJ&Y;`74LOz%VWoJ9}suS0`voV(xtKK#2~ znCQa)dBvn)0**SvkNC?c13|&r`e3wP_PyX$4ylTh%mG zq=-NO5g|)#B@#0bLe4L5M2v5;N7Jd=BFkbK0r1 z{`n@p=kV@_ccK1IJqF+M8HaF}3_Tw_k^CgZYI%Eg|Lp-(qm70@>fP)ted`*L(z2zk z8YPe7^*7ZkKN?e;dKOixro?x{4wQ8-ocy%iw#WLb`Ws6H`a#j> z+e!mp4{xtJdE8IqelTgVBR^9w=(5J@Kk5C{=d*XWlMeFg6-o3iMIj z?YE+C8oRokyz07LTK&$?dRrqW!AEESjR}J!q0y<^O%Cn@e)hj~eVZt+!V4{izZu2o zWq3PBm&xsU`9oPr#;HIeYlrZq5^G4YkOG{{Gv+{iqaviC0RSvxD&D3;Ce(@8PKZEd zp?P_F*+#{oaRS6iXask5p%y;;T=vc)p6aX42Je6%^L8;{RZ;J0%1}}a#N}zE6 z+HJC6KX^DQj@`JuU2v0YC5ddiUbl5Xc1tC=h_j%Yf$+w?{h zzRB4_2zHHDbu$f~)wZPP#5^Z~);EYzS96Xf_ z=;!Lt80ieOl$a7-MvYU!VE_ZYhp(-&ZA!2?Mv*|g?FPky4nH$Kc4^4&%y!6=MaSnE z@B80~<@;AU-W3iEy?(8ArlT_Gk;!Fbg7n*w2|m}$7f#(f3foHVbj*KkzJGtc<5aHe zqr(z1PuB*lg&zv%^&AGI3aaq9o3irQ?UxRzjR^(Z$Y;?bCne4VW(wl;SENsmYT(C% zQG3b(S$;YlXAz2-7_4MRV<(4)E@AtexZrdfGtUN}BxK@*nI6CRESPYXJ62$sF4p06 zPWV#J$_a{!gtS`p8Ezvo4?h=YO#>dCv*K1z`{>N`U}4ChHa2<8vhqn#o9equ*B(YX zYa(3*wLc6jgmiukTg%b@?s}&S8+-k?a|NvD`8uMKewfkscC z$E6(iX*ghY!AF5wxA@EDU0r+dpm2;zFVBzMfl{{O@r|mRj*q2A=7u_to;O!7@(sFl zrnk)g>X5FI;<1G~TlC;wS~@ibu6Y0(JTNxs>3SE`bk*=WnetUz`*4BPjYKnfL7|2( zmCvid?50VzQ9>9=A$ zLA*A4Q^c;WK7T=6ybaumh%6cG)Y>V?esoSVnbFbH)UoVrN2B!Tj3!Q?_7sp5YJE$q z!<-X@xbeJ{Mym;jwI+DKZ79?&(R2+RyzDt#0!BP$MGxkEQz{<$)E3TN5>sbyQnNMq z-fEINv9`A3fXkQ!r}$Tg*g%OGz>O*LTaB7aTCR4%1NzoDey&@{|j=Qmu0p+GBr)1_f>BfAr;%_HfaVKZLpb7Cq;jLQavu6Muy4q zW%P(>aoP9<6HS2$;Z(m**sR7d=}2gYj9!N`0puK~aIuO%dNP4L{jND-ZpY3-R2Up_ z&%rjjwz;QvsBqv|{T@e6zt)dEKH<;L+zR$s+J5Br%WryUY~SuPQs%a4yWf4=@$A*E z@pmS#-iNz(QhR^-$vYmp_B!CUOUI9x`L_oh*_Zaae@nOTs-L+aJ)r2@SqK`WR$bs4 z=hUG0xnXxzze9E;6Y~rEE4ySr)jEIp>~qS%>>!-ip>Uby9W$C}V&>0P_?~2>eH!u;rgBK-XaVKt#iyMs+MLZm<%xriqQ515+ z99!8FNk%4O@E;xVNELQ=;jTn_V-+|@(7`>L8FG(SU5dYJ>Y%6;6E~}d_B#B}l7N5D zN*QExghyM~@eV|WB?v!e}SnPQlrQCe?`agjv&C|!X;K=3PY#UC2e4IE8mSG<)q zY$xaRxkZoch-WEDpUKH3w-6WQ`7GfGS9YHGQy%n!*B-a(#td?Vgl95zKp=|w)wWBKr zj%e`;^QyGy##M}@jYjtuG2$Ny<4Tlx`LKjLG-gtjBQ>f3?Y|t|V-jLhK#!+J$EtaE z#nP_@GDyF~kRU&Dd{1s^FE((bve1tQANpb5ksh74hEIXSpaaPCw=$>nAaVySHe7gp z+TrOCnCN1gde_SfgR`|6g7&$c>l)Ey9%`*#?`07(93yYI$41c!FzAM;R(u~0O$~Lt z0SE|>3X8iY&YC@0X8DF0O_8rD z?mLu%`-GMsGX0*lGVnAql}!{g%G9E7#%t>DbvYI&R<80|~f<4 z<21+Va9J{5HmdJj^NhBn%{+_g!>EbRw4Hjhm%HhgWc|icwwlsYLau|c%aE~v%a*2w zdovCaM}!lyXD~ii(h+7uT4WxGNwO0^_kulW!PHVqm%e}?W5^Oz)^l&SgWm0RG+KbK zqJR$$bvWkLF_Hk)A(0xMMNRzd-`C^0D@4b?jSiy$hT^*lKCLifxm@Fw5~Q)S8p-*o zU|Gjm5eI=C5Lrkfj~j!DHBmd5semUVvjmF9E%UC5Nu$iLNk}?Fbmf@w>VoFM)H%V4 zDF(=rL*zGg&tP)HeBWzFL1LVQ#K4*u6I6DMikv5&m&jZI5CYtOeRvTu)$&6ZJ{`|( z`sEq-LyfHGWzq6UdL!CC(iULkw;NpApH!^y-9x8^!tIeD!h;!?-aBSm|M8zjZ2AK^ z0QTL;4tA2v!T(=Ok{VSV+aRhN z(V&vJQSoqqTIx&y;2;p4S|-#$ieTV7c8Sp{KMVNFPd$Z#^SJio&3sMiSK>M* zr#R-h)$)?+^K;2n>p}0F1200>nk6hN*6hu!ykId=3lTcU#$SKimv-81%WCD?!_VQC zsVWqu*e3A4Tt%6zr){~yK{joAmd8 z74+1;EWmc3Qta7vEn~mOKx*H8ysa zj#9!>fF7`DVt3Deb*!xdt=-KKK>=r0zakrGU;=LXc3=_gH=U>OMj!<+k{+X`^$mKf zCG?Y?E|=rMq;zDYXJvGNnz9#tT-CtcS&BP$vAe}Tc#n$ckw*tarjKb>N*%1NhwHCR zpM0XRTijc_SV_Coxbs||g2(nrTrt{P`Dt*ay3uU%u|KOr%fEdu+i!Q0{&_RHKXf?& z&TH+w_Xz$EusCt(e3 zS!!dY(viz6N1!eiY5J2BSd~``?|_ZLDMwa1+)p;~$3Z~ORc}yoN}oek^)cW=wb|;o zdp+U<;QkhF?>jWL<{@Ieeh-w+>I&S>y&d-=-=N9OZ|q7!@Tw@Zd(JH=UJ)6+D59=$ z6J_e=4GX6(v$=1-AG|RA9eFkgn{V4GL{jyS{*`(3@UA! zZVVj+F#3rsVc7m<3g!VKdVvnp5P-S7*1z*H`F$!D;V?%FjEkj4E5VasVh&_UOqOl9 z0(WoKL#}2S7RcHW)^z7xdxNq1RNIe}C9Wv;;qzP#>ncL$eA)xuB>0VMZ|^?(wv+!K zS#TNe$y}Dxq#<3n$>HjiVSv(Z?mJqRjf@KIH<=aRake=BrRyFe# z4uRqN(;3Q{+hs-I{se$uJr@wP!NRNKVsdS@Qc~GYl2OU=I0PaiFex@R+V%9gnlTrp zcDgtI2%pg%h-6}NYW3`s1?Xk8+ll}h0QIVJmt9Nx{>l=W(I_rgzt_qw)z@0^;?pB1 z>T2$>6#SP-2~j7NpFWCor71sQRLF@d?*fXkr#YLUX@(3<2Z|ANb?_H@?eLdobP2KEuo z@G{0!L({Vp)LzOTL!P5(@to-8Fu3|gptVpaxMMCtnJ0z;tUb%Ka zM(mo6{K1L9>)NLGm6DNYxj{P*Co=JA^bG+7@2LenHB6(Gt*5q5U*Dyrpu!P{jP{g< zDcWLnbRQ7&DkHH%TOs-7DT=f57$!a=aTc z};|gQT8^`nL?WN^rKIOfVVlKg+L$-WAk&nQ1eII$WJ0>hE*5WI{YL-wXkupbr zcK6*QPC0ZJGc-X5>sNjw&eq#jGT%aA{Q{q!4VhBQuIh3By5)ZHi!hR)l;GifyvUp$ zFP`ADBr~%Sx$7cV!*sKXl8201nHDbyf~&mPR=&QA(WkiNYjB5htU0K5O}kvL_QVOmCD-0*r>Bw2rybP zXYOPHM36DFdOrg({pM&Qk=27nOE@4pCVB1ygO#c8Pg(em0jbW*Oq{Jv8nbu6a00Gl zLdM?F2P%x)W-Ajk$CLLO*d=1PVPruhaJ|OMF;=yN}V_(O}D5wgJWn&7_0Yjre$th#5|zJE5`B%ofO)UzP4d?a7)7DoneUrIZ;xIyOK+*Ct=4izC|eQpEi%sb6$@vvgZ)Z;>zr;pp~FQ^TA zlm0loe*Uumty=4?I8#g*KxZLAH96C<3B$%K`(_9oGgFj^?U@(_KGE%CF+P^tFGXvG zJe{_`o~`l`2AkS%zxal+F^OKUHRqh-hbhd4voy?bOr|XTJ|%|{RZNO`McBOO0}jn2 zSxPU+7^xDyah>8L*EKXHIwgpm#8;4P{>*S<0XGCq3?&wzK7mw-2f$7!Djzo(495xp z%Y;5UngEv(Abwnc!gvkwGQ_5GB?K|7b4Q9+w;{B!4OgH@ONfSWj*@f+vAU}+I5~HA zG4MVXaH5P5uZ%gdqj{&CiC$S&+F zSi$*6OcdrDq+Se&nh}hc`0!QM_|u`iM{)i`lNWkrN^a6>2CmV*#YqoY_J*ijUa>5E z_;lI-+p}b^>oY@rPXszro}Em8AegnTZrW4)AA0={u3t&tn5d$=X@%ltZ zXfyY06VV?k2x7s-m;sc~r?Fs)z*c**l1WmYLo$;HF)&(Ak^v@%B;4{6;g%g2X3eth z9r@RRq3_6ke# z@7t#)7MIP{onvyud@6qNbi=2{qLyse=8lIix4*}!oYt?)5SKAIsVi#i!#Zf!snxJF zq;p^0;C9#vlQ@|mPhvN z7ZK#iz5ex@Z+eedeKf#^$69G1W5+u_}kDujDvCYH#R5$GC#&lVFfOK|EB z+~M`%3B#ZKLG-S6%C)aLXFrGBz1-lfXZ!zGfc_1+b0#J!ZB}cp%s=TN4ya0txJ=PO zS3pzq@fZ*{`|~f}`X#hPB->JgtpsK(aieJ%{(D$x92mnQ-lxSN6+-PKQdM;waGj>Y z$uTY-of1f^x}58xn09`(Y4A(kQ#+(EuJAxdDE=6S9()vJKu($qs(bli+mcL2=iR=oqa=D~r1;p9!#miar`xphhqdY? z!o!eci~Ysht#xPjhn;!3!A-WGvESl}TR5%0>B8n&R{!a+&)ENm%)=k)^Nr3f_X3`8 z#S}3(6pGZiTP$VP^k(WvF6H@L$;5_Ud{UTxRo0f^MG6DgD$Y-M{9u;}U->?K`dBCsNAj;NbAwS88-1c}8OMxIt1}-6&6Y>oCLc3CB|PG4 z=qVH_+a#RW0E<*^_kvEEd+TBjLK}tFoH&O^;_D1gqgYNI=`bBaUHqCd^Bycxwp=o? zE-qBL{W5CVtYf#}Y2|234y%g!ABq)WJ$l}Uv-=k*cn1%U!nymucmFUnF1tyy7;^(ZJ$tj_sz}Cho5;% z29{1}4(KYL4X!%Rr9J)9e9=`TU4@Kj|`Bqo>GJIHj4;W!(E zf^M+Qh>fN1umuPK7Z~$jDrLhDQoMyq@_Qr*6YF~9x7|QnLa`$!z!Z7yTqt|T@Z&bm zYOU8#ERa}!O&2iPalNmu45sF{Dvi~XMilh#DThA1 z_+6F#_rtC7>)k2e!~Fda|6$u-=ED~-CpmT0nSXipcSOTfLPFFzmr9~@h$OmSBVNnv zRLO>Y&^TFY=%fqMPVB^T>-88~G#`>R?&LyhZeWgN)?!e&LVl=Bo6UEtB`sGp^G;Itg5RcEO#3SHu+>HXwGtHLLa z-eB%q^TL5PkK1oNsdj1=fjX+(ke|2Fe3Eae=Wj=sDsbj0%z6G5r;gCb41;00(?4FE zwJUfglS!v);Mzd6Sk~DBjby@z9M&SmAwJXv2SEd#cBy7SOBX^UwYzI9IlW+ZC=J#+ zRPwXa)mVPW20uG6bd=F`X*{RPmf-_eff9I0{w4x6X|o-0Uta}8QC*dP4pc&K-nch& z;bM+J>#H1r&<3t(a{<(`AEE(F+g-NXXRf)Ef&*Pe^Y;!#wRt|cR}>CESE-}!WRmf! z2~^JNMX|~l;1s30Sf;MFh`0647uNC$#mAt~H$KWOBeH4e2Ms?LyYzR8ncWQ}y)9GD zTdWPZy7gUWUVO8R1Zo&?<1=_shU~TcBZTycX~s9zJ3uHd7PY zWk%n$74B53pb@U+vQx8BbF!%$!Wg$?cJ=t${v^KI7bfqn&pV<&dMaFHSrax*D%QA@20OXS zuKB*XQS;0@H}IOna#nr+7W;|P1Vx<9vyW2mRCNM!T}ut3UEEP zD$b(wN=FI^1eL--@G#&AIDW4jt=tUnNGs_%0Ow!$lSYC z-srzIBO#tBePQ@(q)V98r-)%@KCidn_OAzDopNGu=AnnSKUog%Gc#U1jxdsVz4P}O zIp(X<^OzMGIuHN`;PtoqvH>xd{$X*+)1!@W$)`~dB@3T_ynh)*kRU3yNb^%N2old| zy;kBH(fMrAch3;r)CIRf$M2lVn-vk=K1J!u0kg?L9SvHD?5Vp;(i5N;H6r}*PNz+1 z4j-Q?MSwa#B0nLBl@;+2J2v+6Y#&dzxq`3ZaxI;1> zMz?ua5y@H}j;V3=;dYIr zwndzf-Fe;c4`)($J@wu1+x*2(@J7m4&HL(yMeAoC9^NrVF{?i?xa;Hj!435j?=Eo0 z^2eJm5uC4I@2?}6Mp!h$1Prj~WGoLcvN)@(Vj#p(lSf#DO09&9_3oNbn~0TwZT`(uRFvtQJ)=-LUIx8^C1jm?-k zysN-(lN59Z>|5qfR)os*NWmH1_)#67zDDolpNEw;1BiFPnKnc`n+MTD2HCM3$g~!! zTfI;!WpcWgcLPAlVTk#&6yZbzftb3v?^RU+Pwu+n%)BX}_I0#_0M1wztVbN9mA_iH z-qgoA+)NM@NToMEIW8YZxqH#`{j$g_;lQs!6yvqAPmkVZZIJHduGgH8KO_*ZYVuVv z$^PW_!|l5*^>6!CQaiQ7Z|ciOA9VFt>r}gO{a`=S5f1|B$pJ93GR*LBJ2OBSX3|Ct z*q}8?J|2kQOc`?-oA#nMFay3$@c0?-cjn;=brv3kPy%r66zARWXr`|)%#h-2!UHkS zL&Y%be*cK$bZ~l^0b(5f;D3>{e?yMX*e32I9_$W?S~F7tT%m@;w>kiHy5!}4I3Ccf z3DP>Ft52HJx^JXOF3_;4B7HuqG2u_VhXhB*%O*mizr`ATOQ(O!f;~&@w2T8hY&B>( z^wF3&!&o_(BDWZq5IrI))Ug%^F%GExG-futeH~^x-S?uac4+!gf)cn&3`dZlV1w#z zImIFmrfcpa^~fq+x!eQF8?4{MzjC-Ic;9qFrER*z$@z=-%21~c6jy9ME=n1Q<$We{IRn?W;gdZ-(hJqlR@Mow5lT4%xLqTgl$;j9b+k&xk z-$Ktyot5Gm-o#+g)-gbIKbcGf_$hCioG|O!UvHi9%?}0j6H0(@_)$)B{n3T+*{;mp z8+0;zGQ%PQj?ts&8Oh&A$~BF zI1j0mIddalr0J@-OYSA!Mq*2g4onCRSL7WXy;NH9_Jw-xqRmRBC*~$@!mG{t!yTvk z@MByF)4kL?i@fT|PNIRd7n16VL30vxFRs<@APWKi3;OcJEJufe-sjC10ApUiB`f$- z&dWI9b*hTj3=tp{nxB)@touDPVCZ<$>V_9`6n8Cn>zY;N)#LK2oP1~A z$|b43kFSv?CinC$a3y33>Esm%x5uULc)FTQsQzRouH!IrgD+O#N$XT%*&*TmpIbFa z#jx#bo`d6m%R2HO$nm|FGagFdNI5Sm7kM@naKj<>c$T=^b-_X=TB(4BY4fZQ$w3e& zjiTeEDRTFfxIpb48+t}~8~7d0H^wof5#ytyZ~X!kvuO7=U2l%xI5p+TJx&XKca>DDE}RnQ8>uEK z+|lHCP=4}>6n9nka@}R!o!u)c{z}QJT)rP$TScon=AH#R1zgouDr^1g;8QcgvEG(` z6*-4QvwL0zA1oH{DYMpa_P~16xL5+m>=KFKqxL=!6bg>$8e}^23!x%0dCBPayJOH` z#DT}D)eGvKoA+?s2+xY%eRY*R$v27>CmNgL;xn|DlOGX4uN@f*C9`Pw0hiD|H(8Ic z0C6GWlc$Wq&DldU#iUCuzR&K0e6P(<#WGBV*0pK?`>|1xETz&6+6ZMv+AIYTZRVPY zph`ef5OtT;ap6)r6{ezllSV_k@DExX%m|kQEd7$5OR7gU$nQpnHArNiQ{sLV+f`0Z z%VyDiil&@UU+X0PM=6O@i$t?`8^J>`Q&{Y?89dLLj;Zg*gZDN(ynB6u%H7QCot; zx0$G7mw`7ozufocVeB34^;da(WZ#<5{RUR{f#j}=vDY`bI{BXX@7Re7&Y6g}uxjyP zIK+EH;XY;lbcz!(6x@u&Ly3lnQR*IIGR&BV4u^5|$6#d(EMjn+$_Usq@lAcKg!-hS zimHIHVmlIz(9abuH&>nfS{aEArbL&NqP)leuL!2^z6zL%Fo z&OJJr!^xAK2s<|}oYmQ6vQyJMcRp%%$x)t1_hjjH?W8$dASXYYTre@&2>_V5)#W&^sS!Q#yWeHox=d90`MDbaX)V4} zr%s*zf5=Snw_=sBb~?{-c)6fYHgW>Iu%JJ4Inep0gQ9;NUKkJth{XelBjv9BjX)=p zJ?c5-g{ZU>|2&PN8(t5?xG}I$(mEMv&n)FKXhgttfEXDdFr5oeO6@kj1X04~RfR%C z1EYI=S_)hkBK{9f2sX@2=;1%*)G5CZO2Nj)6N#a)rxq{p@^xk(_kUG*^Jus=PtEpP zKRRZ*;H`dmd6ccKsf_#RD!1?Ey`zVC4V7M`{Mx&&U9>Ck$Qk7}mn&us2U9%He=N9k zO(Eub@9Olm2OPbz{ZsjOyXDlmpb>22X{pb4kMg|f`^g}u{Fk9kimU6^5sRG2<6kH1 zeBTT>ANcYe=bjTs8ps;tR0BStF&a@6enB%5GSlhw%{e1F_QxGtt(qsljF>R zXk(~V^LG=isKjg!`&c5KQ>t1J!2(+I05~^DF^)MJM{~zek$enkH$;IZ+K70soK!FP z{sxzQad!0G`hr<3)}lMwdUC?~xyqoJv&h!1)4_p(UYYZ;JR~AC>{U6KTNCq1-WaFH z$;{6q0Bh`^_@Hk)Gp9eyJlKcHvhP!x&Y$Yt@Obp*akI?_*X*BmsIqwf zsTB5HoI#p&ZWeH}s-$V=YD{wY3~}M6lj6};$HhURPyMDWC}3(OGEy1u*RbBc7+|oS zaBwWY@554f|HWO;gyxs}Oa%{$>1uuuR}{OnQSxl~dH$0NI^kby{X?IAtqPOXy`;$7 zuWs>f%*y>up?})e&O+qNbYAW4V^4GEb)(*Xw*5Es(7&V{?3*E*Q{{Ztiz!Nma)N-R zIaSU>%t4%NG0qqOL>v>>oI7Z+2dwFJK`VOXm9+Hx0FF${kdB2_$M_I44B4GBf_%Ab zlYJWAjEN?){>bn^?B4WLM3jzUv|WEv)vny;+EW^r#~x>DocZw{F>B;QuT+>VZO-74 zfM2E=;xu3Dp9+nITTT;a1=__XY&8yl>yKP@KXl*P+WthvnU>bo6N^W-e=V&Z$X=d1 zc-7ygZ9p2_^whvBdfzi=3n;t22yRZW7?E_%8=J9feylGw%W;n<#5kM}r zBCuR`1zht4J}PDZ%(3*^WLsF6fMa7zOU9TP^HBE(2zmvw@8c7xx-d7v?9wcKj& zwCor4aZ*2DJB_y4lh%du5TO zcSlOP+hWh;2feQb<94LCC~;!Hf1HS#+af#MDn(&3xKK9j|Dx_az?%BLHQ|#&2oN9% zEmT95PC^G!LT>@-U8GA<37{f25_$>JAs}k#ML?v82x{mcMFdn3REiW)6gw*Ai~fH9 zxp%(j-kG`gnYr_y&GYO7w%S~ z{6Le-ftqbq$oqj7iFZW6g{YfxHSs1!tSh?bLQVP;kPvQpSYel2p&i+2^e5W?&WWLE ztLnOgoc$%X;Pwwg$Z#&;Q)c6P|K}}ElZv<4u(xbNY?Q58CXg*%JxwczISDyD_>D{F z2ZScx`^XeMNUV?fEv0^y8HALr+#5{AnxnBsCWN^P!L$w#BKLT(dEl5Y8Bz>aZJqUk zGLF?g7XFlcf;ucoI$%(CTB=cPxJOXWQ=cO`a*&sVZ!(p%@0#LLb%=OFtlL!2ltrG? zu4a5NQLQPTsfS>TM~rbAy0$OZOBsv-sYqhwBRE_$vKVLUO`?z=iccc2C6r`o1Q;gO zSj`Ee=1fxgVG_tj5C(^M6z0>gqD4uU379E#fr)@9xnU#hNhkoWiE{#_o=K7Ss-@O{ zEodD|HIEPn^)%?QSe+NVcu2J)JY`!vIU->=tY%&}(A5bXgcgjd>z$xNuOqQ)Aj(Yc zDH8on&(IVI8S=3>!k>7xe66?+M%hxZdZL}MKuT|{_V0s|aiA`GR;v+D*7xH^;_hh= z_I85*$IB_^ga5zR{zPc9e?4w6)G^1v{=JqHy~v8-{vcuS_MQ;4XdKg*3IGC_Fe<)b zZCFt5Q&>&()!4)*VM0(x7`$+ht$lv&xm3kVx2_5#wmsN3Sj~hy86DfM(_@z`W)|q@ zRH0RWe>lB*@}P`SIUC8a%W6RR;#vHg4b!m0gW;Jk@0}NJJJ9hoplLSOV>@h5+VLWN zL#1EbuKo1j$#ljAk8&F;SijCre$(1ro*Z4lm>bQjAxd~bTF-?iDK|9r4<6%h+Z)re z*HBUxm}X5o)C0Q{!ei(d;)gO8T4JTjELpf|4MjF^YB@3a1MqgMHs7djHs!r1u0gw4 z_;6iMF8|=V^^g+ZaMv}}OW>uJQ*Mc-P3@xySxza>d|A(u4XWd1q-p-iH;lS|Hw)fC zYFp8yyVW_Pw%=J6Y^=rDpoeaR>`?@_0ldHBxVg+W(ZwUI_|LPPfwhQet8hj{!F29L4l?>RfrJhwb_^7#hpFG{hi*y#;-~3SHB6D=(O~K zn+ULtNF-Orf0Wm$IBRnlHLCE;@QmfjpqogYBp<%-DDe;a45_r`QO&#J|gu zEA2%6=XW>$2syBco?7!$uAhZ> zq#no7hsb1}LpXnSc5>f3sSA)#1OxdajbrMkb^5od}(Sd1>lh?AM1asP0f2w%MhjNq_LhQcHETZij@)4K2 zczfh;TQ|5^+LT46_|M5%H%VGiXa>ep0m9-o~YW7r?Vtm3VIq$&7 zpt^$;7(c4`%+jN8r@d01Er}-g`Mnp5LF$58$Na)3H#Q#Vz5^*Hp4QG{Zq}YZpnvU) zZXM>)(WvIP5xXy})Pj{F5W`MDhGi3KFkpCX9WS{7q@Z`{uN!f^Yclt#> zujolR$MVD*sIkT~w+`(O8nV%n)X=>YX6xM~{|M2VLDML4ysq_dDQ_k--cV&YZosww znX`d-&EQ9?B8;aabQc=wx%XwmVE70KZBM0p)+n*zz+}R zo=R1ZRh8nwq`bR%{n4J>m(=2Nn^BPw^^6pc`xM|WeH4pjeOq@25t^UkwC&w^_#k=|8@!fzf{ zb|V%Qu*+3dt@tG)EBRnH`OYoJ9|+;4WCt3G9yg2iiVGjfYmmktbSrA?ym*LoQS^;3 z&2bZfu$3c}W=QkDUwVRGOSN=MKV{|e!8t4RoNldkbLF$sW-?;~!B#4{&jw7Ncxsvn zbs>>}@4L$a`4ZRpP_G14V!NXftiQ2rU(NZrB5|LG^^(*Jex6$!}lx-_@jV}G{&5lXsJS(fr znJS=DSD3#im$uo!ZcW=0(GFtED&H2z={KagJ|YKmwAq4ZZVx0 z9$Ou8h9LFL5X-Qc#CxuiWnSQsqNz_ls-#4=Ax)hfs2n3`G`)sGF%o$-_V3)&ZbfL3 z8UqTHYt6IodZS z)aT-L?c|A^(Ib|}hC1kMUl42?6=4tLi2?Z<(024O@$IHI8Y)Lz?@QN7*K;{3thpkr_Zj!2q8m^u0n_<%_Nab>oQPbP~6d0(DC+-zB% z>nQOo?zr$k_J?2?Pr_AwN%_^Q<)O&SR^0_Bi_Yj(Me2|0UY9=~Df#LQapKB~+eg=1 zd%*mu%y^CXynWUgN@r&8U5iF2eTqB``B(PC-;m=r80`xs0Iu@_sdNM&Xrgquy_3vb z!Tm*O*b4xfQeAHB@Ou_aLEV8Hf+mKhKe zQ);8Sw62p>Z+R%Jsky6!=iwA5&s$h(k6Bz3Vn*2G#npU~?@&s^nNuka_vzIN zPt`RP&)!tz<5ZOCF5?bE9jd4%Z91yEf@JPblYvBHs|+{_K$K&Z`2(h_Y&?Um6Qmq? z#UeQg2@#1QTq$(p_IcZUetII)RXcurrq9<%Hs-jyhn#(Mc~ zYiM`1xI9$IGSZG!7JpqQsXi9rQ&VIBc-kKn+5Iv4cgV_+rz=g(@xU5({-M*(7DE>Up z1v`fes=)B2+|Jb#RDJ8}TIoa2q7L`NRIXs)$0iJFauQVzW9Z)g^CYQxA8`Vk zI@uoUC_>r{E`WoPy32+5B|RN>MRC&nc5@L9j?u>6X?pU6(>TfF?Lk?Q>sjZfkc3S! z&7ri@O1D_{8_6a1QFxwt$=B7?ReE^&j2?-EkmVxUeL4H|ax~by=^kK5Ia>DdEF_Is z(^ym0#rm`0^#2cW^5^zTodRtz4Q$(+R| z&>yH>f3@h^FuT{*4YsHj{*f&};MqEMhP5Vm^yc8sdsEectncnFsuON$fk(O3(_f@B z?nOnp7lCM(#2-#zKowR2nIktlmv8=_Ys#N~$Bj8MUu5T=CAggj}TaXn)vY&=dsIDvyh>CQeRZCfsH04$QD1aTc#XVVlx zpA3#jr*_tIC=Z=Sou2n{D%$wKoQduKL9viF8`xkpu48fjA3hQ}R_x)> zB*NcrIULDO6?Q@cq^dqAgKx}KBbo8TyBIK;$-1x)e;@pH=>17+NA z{~oWo^Z4}fBNZ_|Q-aEqlLx}PPhX!^9S?z9$`Si=qNAy(4fqUYD#1#XIGN2a zYFLd()WR_S5ZZ{tRviVPay-4W5|uRiMmDpS6CH2WsEefgj0~Z9WenV&s7H1ceeak0 zvAX8-iIQ#SJ*9KGPez7|b}APpOw(&AD3gffN)_EDPbqc zUL0g2F&An(eD{V+kEfe_-gH_CI=6qOe*IXzb%DI9gqnQP<;e6XA@%AqN0U zti6#dGip%hoTCX4!`C;m*T=H+H$gV6;w2$d90&}jQ+7C?8qYGEMrl}P{bn;m$!VctxvNh zV|L1nrdD)0->v6Xq7!>z>i6rN`Y~T&$|^WaGIftVg$>Tab<%MxwNxy(o+S4DDm+a zS#d|+K~@7}83_^c#Ika0?kd@u^LEgDA9eiB`W+h-?b8|}-ZT01PnSBSx>BAFfund? zxrOkPcG@b6!LL$UYIs~r&f~HcCv<$xS4{(k-yBo75G~?RU4NK9lWSG0ED0cEO^yLs zdV1uoB+wfs8L^+;9K}t;Z{>!VR3euS?XXaukV%b6aCe2 zF(di3)wiMN9iH+$8c$A~SeC2*&t}8?N8t0HIrlHc%F<$N)E7O^yZ|Sb&fL{cz)ME| zOHeR~4FK>Q#7T6{INlB01KT_&#?}M&hA;!^qMjQMJ9}OP(%FbtaxU-ekAFPAt6<>< zlX)G8M#pe|HeV2HanmtOa}GkJwJTS8*wxiyqlYv`uU0d<4t4@Nk+ISJk<>${YTy5@&L9;&VrJa2wHkD$1zO$S=)xs?G+xfi@ zTpuCmFSpKSRhOg_)?e^Rg@4?9A|Dtz{MahaD-%j5Gss9O0Al$tVzEf%1{9hkFDk=| z3S@`$vr+f%LV@-5F#?Hi*9TIBM0%te!A93(I zXsvx(4U9%`M$frM9NmBN!&;*Rr9LFH{|94kQfRgrV^>Z{8OFG3>IY`=O=pkr(lD=5kMQan$RUr)p2-oRS|z8JN`A4 z(j-8cO2>Rm{N~e!g}aAC$>locV>cb0>XQ30=zjmk@jxae_m?BSvocxd^4cqUkgAW( zr|zLxEs`{{uxtQPBfm${RPcQ8n`IsnpTf?WU?)cwUfb!8hlqx&wI(+kE^{^kbH0{3#Y20Ya^h z%6@ix+nx`s4|EJUt_90^9q6}dTp7Bc>Q9$2WtAZNAu%w%(o`R3b{WFrr!$v^Iti8P zM&yzeJ~W1kU=ycg6BdKX-DR;n0`WvdiVmq9W12$GH1k<)>iH=T)!-ZR6oQ! zIMHhuJVs6^OK#MvGD>_~MWru{XtG$aBeBF0yq>^t{(JrekR*f>XZ-1wQ$-LjEd8lB z!H1oS3?^0f%2hwC5Hgw0^-5IMRqSK4m?IbJiIjULhZnaNq`!;r4D}&Z^cqBHnckhI zeR}U}t41U#cVS9x`ZELCC^@0Qwr4sb5g_*vy=L^0su zQ^V(=7?XTZK^Z*7aEIn9FDBP~;Am4c^y#UC^c&Xuj=qcSy#ywS{_HHynRI%0>|lS{ zJ2oZk>G~H-2|HoM_0}xU-`yTNIQ;G*X*pxy%2Pi7sZFP|SD$0j`5GaKw$y>a=(KqW^G1AVKq8f6k4kG&)aR8bU zKedj(qZgFP$qvd*G*l7(PK;_Ay1z`&t-0N6%F7mKY-EryL>#0_NPywQOGE^*NG~Kz z(vC)kT{J4v9uNFnU6Yx4$a{PfV~i2OBmHMNLngcjiKs~@M9H$8Ah41x`-Sjui7e0{`3#(j3KhEaMKm@w?Y=6N)~+t!!Ow_I*U zvPjL{Js|LK?)8r1sEVxr_r1L`=?(kTo!Ynm$`kgFhyBlS{2OxD2t>%;bD#c(oR|)a zY*=If^A7(=Iot}TZsn;%XCl?Ad(@04R9lpA+I2W@IozNH9!XS7c7RsEG=s+*F0x`; zO@m_}D>iCx#nT*V7>v+NjtoqhfS{M!7D@!-7Z^f9{$M+{6yGNpzd(}hqL+iRx8b&E zrica~WqL%{>7m|D)oRCl3tQvS&8_N4#|_7_!xdtt8LR@)Lczs{#7s|;4o;UXwB}LF z8H1!w7m>lx(o-W(yPu_+&P}Y2ea*Tr67_2<#q8&C(8qLaTX6?_Nei|W)1CM+%{)Yq zJ!z2gX#5vlC z{Hi6)X5edt;sJ>$n*46A>g^?oGg2gv-i2q8o`F{mQUy`>e4VW1V_sRFQ?OrM#9DVb&ojW z+AYzDkt3o+3O5zYPUYb1qKEV7dC#LIZHZh6PHz_K>1@k>12(3=fZ&)NZ)%J87IY1N z&0g)vdM~L!%J}$0;6N-d(N;WxHz);z@+QZ26Z)tOqeB-+^RjkmM(w9@HhkiQcP(c_ zJ?XL8hv!Pg!JO~EeV>gvy7DRHf;;;~(wTJcd7h84F=Ddztu^`UeXILP^N#|0op;=! zAA`9xFNrfo>(!0#u!*(*a1$*O!_Q=FsSCP6y3*G23w_zb6UIvt+35!FX#rW{$%K5` z1Y1dl?DxWOHiI(RA(}I!B+YwJm{=X&_@k5>s4XtoX)whvG;2`OQ+#EpUnG%DTq^w3 z{lKf};B8Zxh9Ju>6sw^(R71n41Q%%;Dt87sN8_@~DNFn=GA{z%O0ZuysKi z$7&8dnLU=>eUwiJ4Y76%^3^dTr0|yCtqg0MTl}#NUBwD9da*InCh&L_B?ic~wMweMEQ^WeIz*L_ZT%Yz~Pxt}(Jq}McJ>Soc2r`0DuqeqoV@9*^GL zy5ocKw#%ZE;ooeAwjr6ZS~t9ET&7n-h~k;m6%JR{Jn$ES%|+5yu6&K1_Z96ep=8PD z>d7S|QU*U^>Un%7804Z4Qi55H4`>C#DT#Lag}Z6D^6u=vVgh&@v&C6fVkCs7j|btj zBNZ7RAmUda>1%2m6~D>gk-K49Xxe&;Kl|Vm&k(2jb{y!iRvhw-YXasW%n(L>w*}1v zqvWA*N-A9j;~hX>BeGX!xX*IdL}*=KjLD;z1XUnpO4^D(e`E#KJB+yxFdzjG&k-Dhs8gZG}&P$x@1Bs zhtXYImUQ~9SOhw*z(N5=<`MmJErJzne}@6dcaoz3`~gA>14<_jbrY6=uygS1%TMEi z#Hn_@X=l_VUG`2^y9Ay&6w{v4wV{#!!M;_AbEZNjVPIzZ&h3%g7nAD39=Od)%zPKE z;z_Fey(G*tzo}tm|FmLRqOqrk%7Kk`X#ez3Gs_x2Q)X|h%^1cIk%-L4OXG8&E#0Sz zy-tRVH>NZM{4cE||CVyI%sBLp!Fgwf0GV0;($$((ojXjDlHD#!Mx}-0TIp&RowOb4 zYP>X!o+TB(LpcuOy8Kshbc3wy5l$!@TcLqCy3rNrN$ttE7@{tddJ_oG3bTcS=)CK) znG~Ql(3nAZBU}2RsN0BYv&iE{@&key@sJ@f(G4Z>D(~9ULZk4&%{!WWsJPb+r{8{U znBLG_i8?B1!WGH8vlSxL;kO^uI8ferA+&Atg8L~-0R!=Hzd&gEL4uT3>&l7Zf}eyR zUC251XQg)2d0ysg;%(ydhx)j;%A45V&QsE5Wi~B9znZdVU^Pk9_{)eGE#hzpd5_4c;eX zjn8VXowE$)*RgxD?3&AJ{@FCRs?|%9%Y;so+Y9q~_LIpoSz4RgUdPb;`GNOdYjODV zFI*3RE(n`Zj#h-<)JDh8m#xbaUrk=RyWezp0iI25UE>^%?|EG0%Okrs)Ea!CQlc4U ztlTRjQRKhhjM#i#>Rn=Z<`}Nb$Tax&{S!|MI^QKuWj@D`1&%+;91F{LQGBgnDQv3v zkp1}7Y`s!vtK?VnHwN~#R{}?e`=ikZug=gK`mV^jizLQ2cGmyfQNe%0<+#2U7z{&R zj3d1Wuw|x!>Jki*4+}FS{9`S*PhHK_ZcWYbfbPgsRbW|dsqNG@|r_VS$+ z91k?7m`(y)V;3bb;7qR`O?OR4ZAWd1OJ{n87R(CTONeZ;$rWIu6iItKJs%J$q=ERU zKo)$DpZx)NKL2M#V_^1hu2TKPkXNCxgKksJa9)RpP>WjYtqqmazpjtCgfmJa!hAZg$!T42Pa16&I}EynAwga6|WT$6KG~0&ck%_q*v^gs6f6wm|KPlqmem z?jv&(b<$~aRXip&VH>4SE=xU^br14Ngel~Rw5fq+9A1{|CX7*IWpC04cjM{=l z5^ud;Gy=~%&LlL~2F55heNZ=K<}XFKebHU(Fj+DT`RP+D^zg}!$d{?gt-tx=A2 z#)uZxrcYazH*s!%+{!uZVwZd@muuvtTDuxcuL6SM48Q%1W5!hdd!f9d|C~1KAINciWgHs5^8CMXXznxL5jp(**gqf#0Kgo^CeVg39};V8ijk1< z?%g*}Ph)}7>7Y0YiJAR~l{bWnTS#|l&$C{|O!OyEvb}vD39+)|3hDar7B17fSIm4G zF5z<7MS7?@-kf4;yr+iZoF)9~*Fi@#`Fkdh1aN}!aUgNxDc^*$aU{JtUNUp7FX5vT z3Z3O}tNBA0^Fe$L+uLiI(24oQeYDz${CYyXdXYcifpQr&jlYyD+ab8s!F_MnhY&*1 zc=cxQo661+X6Au{4{B6~o-}G%a*nDEBuoE?&OQhF-)+zh6?WOed0L&YOi2HXwjy&(Gw@DO{LqO zqRO(nYsN^|3;rzzNkZ zL{pr-ac3egT(yLH^6XC0MC_zR0p?+)i}A66{xx;*lDf1XZb+Oa|cHK&JO;Z=?M#Tg1e|YqQXI7k{J@xMO89<9c7cQDSak_uQ?2 z{_XT-x8;Ow07P!XE!#vX(LR56bl+(xqmuKN5wAzuGT0J#&{A z=ixQ#uV2G^U(J8o#q9OYjAi43V4iDy-!g{QmNJ^w{n-v&`k=qJn|{# zq}k)U_-R*^kSiRa)}1`9UUNB|@~$^?-$)<}yi1W|SPHvB96@6Zw=9CYwPCp=)+=~} z?q|UdzMWTu9J%Jb{}8GtpE&il9A9c%u2X(R1U{5$Tc~K4E?$)KID@6xSk7cwFvbsY z@tlBM2?|6`bs`KIjZ|aJ=MX`@rTqYy7v+{>hPwK5Oz)Cb?i0_**1f&_PmelR_ug}d z#_a8Wtu1{Z1IU0KhOWg8N!*v*0Q=VY=DW#0V^UqMM|RR151bY1AhKmfJFl`7hS5-}x#lQsBXmx`=T{Q(( zm1>HG!M4797KMGLe9Tw}Yke|)X>fc8G7^i(MyUVr9vsSH1Dk;e3pheAt3v#3)dXrz zj*S0+9?L$Y5QH0t9m|S~Kl?0KyZ*4{V<~cGS9hhKGK55IJ#O#hvl_l${UdUoEu~Xw z(j)ohc11ooaG|+kvoH-Nr{n)oCr+<)z8+n2Odf6O3YRsM zRfod|@1f6NMSK|zDd(ZeT@e#fdAes5nqf)@EfV6)lkLQ;k`C(de-=405;1eAOsPla z&@;jFp5#|gtN6034Fi%yLM08B8a6VvRzqDk8ZI7+*`Yt%{oz~m{rz08SJm#NeuO>!q<87-{MB0U$&(EEAsfARXO|f0WssC^k>QI zCl7s9vpP|)cai3M*xcjLvF|lC zSH+@-@159pEqFxCy}|nFYKf*2j6XN`e_>Pzr_wrEyXg$Y=31BxRn2iU$R0L-Ow=gAm$$+=Y$F#9m{Bl#~cI zK)RdhNe)*}?9rdqa_&JvaO5>rLGwh@qK)W;t~dUP6?Z*a-b{2BdanUESzLlrJlQU> zbN76TN1jz>_|8(~^{)@U%Jxq&DOtRP>*coJEc}3KC|vHk{IjvZ0!rMmZ!Xk(*U#sV zu~|4%_HIBPb4Y1^-2 z!xR_3ynQ1$cDH9I`r77V7UpN()R*y!+9LUymo-{2x=k}1e%o#iaW)o zcRUCIb#9&Ih8SX#u|e8yw$oX7INqq=oaD%Ur4XJ*@x8J70=-`ct=2{T!K-(aYPXmg zI>5%JCS)g9r7dgAj!;&Y5ce(1c~#*4!$n_Mz0vDnbNbtY>ub~w-4{<+{F;>|2l57$ z+O9n?3UR;>omO^r>d}57b0phDt;p44@R=|Amp)VX?j^=ByWJ1kWCC+6DB!|@Psv-E zEc0mL&u}uGd%I+k^}!}P8E+i3&7w-K#GT*!lnF!e$>xwB>}_R6Ka@v<2z7}}*GUip z7Hum5q^?VWm{;6|8DWfBfB+Pl8z7*zn3vwWoy~~_waCk8%LtoXf>Ewi>pFjwV3D?n zgP1g;Wfj|`ky&;c5I|W({qjh?&vPq0{$qjxZS74Z%#{~R^q%5V9qO%aQ_sT>IJWe` za9|EHJKYt06+0MsbiDI3x``t*mQxT6gS#47^gME%w@`&mJoS)yvGHEB>%{WzH{Ix% zUoooFg<7XWI%gH4mLkKyx!isWwW?WAu~B=`>;-Oi$&^<5{&DWfyWOJmLP1jw}NR&&Fqp8aHwlm^<{p5rOfk)E1TDANH_LdJ_vM7s?|iSgmjtg_QN=2abyMPB0Z zDc$tGG!zPQfFC)V&`lfYCl!XXXC;}*QT#{Y4(xhl6z=J6@q!qSreA6X_sCo>{{A8zkh(vR%z?z%u%-CrnID9tJz8t+_L&ey0lKY1-?iT7&H($m-0LsyI! zZfxhR!KLp!x~tEU76nQZ#iZ)F?Ikl{gXntL!ZUMu#AWpB z1SpG6=q5tyMKZtu)~j{F-t&F0aHI-9Pvvq}*`ooo=kkk2LgY#AxykaJG+EWqScA-a z`9u5u4F4#SHHJA2v(0J$9D8DaL5}5{mBYz@ft)y-(t-BBgMyjQ2>=c;enaj(0Kfr= zlaNLZ#PFx8eUn0&gP05~aVYM(A@*%Z$aU$bD(GLH-)J!p@X36FELOR!iu_DDCfh$f znoN**g7aolU6lZ2#uTHxpUd)89_7*qJ_m>8MDP;tM-ISJ81N875XA#)$nG6i6U?@{ zi+xZw=99)SM(-Q|NW|h36 z?23rnnm7yI$=Wj0LaLXQEHnuNVKE^2T#j=Kd<_chdNr79=SD$12IXU;&T_kR z$=JL20dxG%{Gd#OYH!=R^}kS%{Q=Ft*ZqMU$JbqhF|$Z-=1G5Im-c;S!*U<1BK&Q! z0x)K#N*?#+Y@M<%%O_%e!>jrL$~nVI_Ac?r1I{x^KVJK)Z?H^<7rEEA_}4;HAXz3h zMDsO|!EP||tSg$x%Z)eqQp818=UWm0iIMnZx%BZYIr0jcP2}2=SEW~_*d9*`UM(!) zAXiY4y(uk>I0Feb&wBxPm{Y}+RNp_P+U3r@>X*OuB` zmdCxVe%zVAGNvYdOpW^7LwCdD9zq}I(8@Jc)_m-N^Im&Zoe-^_HbOQW7#j2j;s8(cp5NXc=OG?-``h$eSLCl4JG0c4 z@?K2FNO3l6_`pEQ%1BH3Dt0a?)R5^b5mFwn7Sm%@@dFqJSXWzaA$A98%MlpFcDiMW z5rpG7oVQXtmK#lyQe7}!^{5%V`6enLzjvzbpDl0y59HWcb_hc~v(rpy{c)0r=CPu0 z9y^vbEGOcRqUr!_1OS)B-oqtzSNpmHSyycuyDE7>4i6%9$vY`K^K!aA^#3*NV&&o8 zxVRE=?MuA0Aeapkt3&1@XAngIQ-5!XQu>ObvZ8x_zpP@4A&-MDo}INgZV(O~U8PpP zW6-Gg;(K!tcj&_z-8G4q)Q=F_!;_`skwllvuad`@)@hYYna2y)uXR^%e51=L+}(R! zQyw|(da9f>b-2cU$lc?*ug{aj1r3QO`-?^nfDT)VU$u>F5*E&XG#ax$?F;j%n#CU5%a})pM%2q=q-|&XnU3o?6Z+py|nJ4(WBZvJ+AYN?p`GLq%&#L zKlKcIfT6Dm?3(#xDs)6WXb?o?%^W3C{lme52;i8kLF@`SHIOP(r|M_7dPMUWJf+;p z08e&+fu%*%P>Z%`UsgFs@w<8Trjq>f7E;8*m4Fu87p}@vc|Yq>As?pFTVvg(&ghF! z%}P0Ds^o)uV!v-&6zY9G5vY5^H+=90Dzqu+X(Wmkm|D~-yuLm2%jxJ$@KgN@=ZgC< zJ`pDyxYYfzzFFP;?D@e~<63(^y-iCkB`AyHrypxYU4*1XKITbI_UI@$@+ev9i?MY# z+_2&O=@&bwLlOd>h9}>zQ2LleNneb=NBw+%!R#OkS&WUBf4_QUZc#!kIi(}n`UR6t z>DDG70tEWJzpPIVBTF(6Bl_e^h$@fgD)FT-*4@3?tKdo|VM3 zSe-g&P+ZGPl&k|Uy^+)(FaSic6Ds7_e3MOq7xJ=1UnRtrbsBT?N*t@|Zc`9}c1v+B ze!H3|B13HmwzmTfE3!*#nI)b$!qym3P#|FP>3oICXMkNa5{qeiEM8LZI$%GaEZsjb z_e;UoUT4~`!-4fh`od==Biw`H53)CNF4&vC5PdG2b_1Q~p5>J{65(6_P*@C+T%TM6Yy?N$YRWF`n%lx{-4J*0?%JR z{f6}N=OKp1_Y&&yHnsPka~u{u&Xg&f!s*-bx&NBWo;CZjt8mQn?&Ar$i!URU?rO{n=8#$mS8e}%_ zY;*#@?tl-4r1#X3;A>wl=hUbt6nt6N@oE+iQ4FBI)9K;!N*CJy$v6ZfU0d8^IM%NU z9cr0q{e|4ID>3&_?k?ppd(dwOEM$6xjtli3Pq5u zeX3*M^~t|z;M(g0Djv#JBrm;f!)OE3Dj)8&>b!Oq^E$vAl6{vBFLKs4w;f(tuYBTg zy88N?%9Vsxwd92%Hm!?Vugq&lO9M>`JO?wZZnurJU-LLoYc+;{vZ{3Q*UzYt9|u(} zlPvc|9eN<7Wy2Sf>^LK+Ree>SRC7xNdvb_K8w_y%kD~0q)3JZAJN zGC4HeMV0VB{-)q(o(%y&bzci<<%OwzK3P7~RB<$TV*0Ft-5IWiBNm~tlg~Z2D}1NL zp`Cj&0k5yiT7PF!!|1a#RrDUu_!iz0uF%i+Q#T{BanY%O$N$uu;6>Uan*?{g=u%hT z`!;D7I;NA5*GFl?g#qR;AE>A0rK?ZE&g|B6td~dI=shnx9YVU#)4ou>n&tYuQZedR zGnB{rIp+Lj4X@2h@|YpQyrV%Rl*`4#d=%T4#U5Qh?DSP*$L8>*IBH=06Mzf=XGkg@ zpAOHD-|RnbN7^`Fy8S}yu@=XIXV~KLqr!3zQrctEcV7R}TsSJwuzgwQam@1IhYM{V zT|4Tc$Jkf*JbM-{^_`ltezx^eU#j{6`N0pFZBJRU;7bY7A|KKt9bqy7jfK3Fmw{TZ!dNx}+>0pCS>1=73s`My<) zu5@xXl1W-dyR}!YEXO8F^%$ia`>AO!F*){MmApmr%-VB%l^kJIp5 z)WxF#a~mI8Psg|%4@`Y`^!J)&xbDfX-$&=g|H?S^zaYm<*0%}_#e)A~v5w;P3-2)> z*I!N&tcTLYSsn-!p9vsdsk>{uBlnL5R7q=HzkO|@|4PDG-NADdn z*MNauLjm3cS{PAImbf4pCI83yHs+r?sCm}UXTK_*A0M3#oceGecTA`S`ne-p-jtsn z_N7(_a;D?{MvZ?{qSwI7T;nNZ7Y}FB@YDNRQis3P+@E8GY>ok!S@1u)eybN}el@96)%!Z7<&LQXP9OcMf5 zV8AYD2Q!Yr&iIN4I*OFW5`xYJ#u1_BL~ZjPW1^#CPcId7>XcHOs&|*cV=|rc#8zb} zJ2`+k&ITq6+2&&7;qCU0!yGx!(G*bTpxHF#?lFEgSMpZ(UEF$FF>OsvDyHc zx3JUVxOt;Csh^Wer(JIZ%XtlF+-uf1cAcf&X4TC|_%(pRh^Ql>TnZ{d_km*|P99LfJ8zt8Ze}ty~_M07G{j)mTvi{h~oSMImkD5!^cs6 zSSH5)m=B_(ELxnaLX=;3=KwtC5P-2$XTAhr>4ijt3UdHX>8HxL7we5%IybrSi?So4 z!=!3k+_hkyrie8PgMLtyY z9pJ|r+Xp3>xV?RYm@!)ET&ZbJl`}hD+o5$NSZ0!^HCVy-lH~f~xL6xrXz;XbF8 z93#~^18o2kuQ?GO2jS!qV}p^|;4s$m8qy0UYyQ-wrx%o-Lm`w@Hq(*#P8@cS5z8vJ z*l3Ws$;j0PSwLwBsI`&>XoP&Q)w`128AeazMTLiD{zy#v#W_@$4hQID5a2><^>OoJq_=jd2`FVB0=QUt;S$QNuMxMPcDAT7g z&A+-1HH0A}?TDljO^kSgH58VB#@nlzgR`}*(zq0KUb5~J(v6RM06B@U)#-N<=nVj; ziC{@q<;vnqe1@IF#km1vmVEfbhU;+?gM6*-{2LJd^Y<^m-{D$=eWs+v93{;M79mMm z4Ikc%{uFUL@I_m=J?uS9aTJ{t6=h7+Zk_{7VxmqNcG7)^lbv2XMxm2p;K0#m#_;QC zGJH|o#n_ktj`{*1J$JxxWpO$vDB06^9sr5!!GYwYEdodcB7kB;iH;&0$>7)5fcXCz zuKz%eo1evCEUsuU(>1n$29;!Y)nV1<`d~!4MD_%bR1gQ}D3`Xbr1!|l$R=CGscEt< zgQ~`I-+*0>3kc#3kvawqLEacd%bZ#^Mq%mw;><5NN|;mI<}~rN<8AZTJ(jX5>3UeS zw_zDFm!CW$rIY2uWzR^8Rlz4=_yTp;WXtdplX@wKuEE34&U~t*Ea$Iynw>jJ*tsbX z;lO(>Ppxli(_cmD8EnRM4VnP|w~zHjpWt~>V6j|xk;Ydp*6+S#wv$=h7-7A5-P-ELb3EwJXgCsHKXyYoD z?%)A&zRIAQ3^89M%V;rrWov6>(h^?x(b2SI$ zsCy5vrrzycaHo<$fY3r{5~_4UDALqWM5=V8o6rPAq)AgDp$SN@0Sg@gQE4h5NGQ@l z5U`+hL9l{~1(8hr9nXKxeV%jg+&gpU%y0Jdu=j>QHhX_>zV)rO-u14a-(SlCBH4B_ zSF;CAF6S;+g`0$!zAHh>mmR_=CDbdpu`C_wSMEt=E=Dl)2YiRR&F-SIL@?lOKo z9ah#o?J_bo4~ng7=hVwDhD}s+^c7l*q)7fd`2C^FJ^|Kaa@ktk(mc%T3+loF<;zl$A z4NYiO)gbsNpu@auH`|9rgUGoxLPm7l|fe$n3c&eCb)!*(uQ{ zlAlI!F0nV7ie-PE_z{Zwd2vbhLe(_yi|ThC;M=jkmKyViwOTzdT=3>v?{v<3#R8MX zSO~eM-jGT9&Ny+?dp4shJ927yx490XgM7kKTk~nfCd>hEyzO}G(T36+@^N4;D@2zXl3mCzxFJpoZ?!+=ai}-K}2v5WsCx@9R!PYd!jkb0=*``yCQrh^s_5%_e#s^k1C~~=BBz;@x;CD~3oy-cNgH0kCs!F^REMQ71)i+k8O|up& zaMFz3GdZfGz@_(JO%sXqy!C-)(s1a@?#c5b)YkF1cLQsvfl<_&QvJ*ImbZhhy&mU# z$rhEj)};;I>1Y?1GjXZ?M`XNWjkL`3)(3myGyw<@N_d+`odS*>d2A-6AcQST#!Gqu#8$0ozQ?vQM3F<%IgW#c| ztLG@p_xP)DT9m3N7sX69{P7-`9xE_FCZnpKPA^O1Mzi#u4b>b;W20=+!!V;Q*Jd9GC#LC41RGPifcqkOX6+V1_;ilPffsS+O2ixy# zR5pEgd&U{`>%Du=Wn~6q?c5{Xo&IOe_X>#ITf-zn>;@0#j(Pph}c06w5Vp7)oh%HSW$jNe-JDi z!L^8j;;pz;o`>+D4wNOv3OnV=s}Tyw%(E=6J!dlXvYz%sE0ZYj6WUaP0;*8^P=mG ztho?sP$iva+YjInTlH}y7{bd2#r*(eg6;=RQDp-;C0=#TJ9MR~=r|`CSjgrMdfPmi zcl=-wJW8r9_ES8S*U5CkK8DSlTot}8Kd_7{dq&Pq30*aO+nnr^Ay9EOX>RDnt+{W< z;4!ko(K8Fi*HKc5=#3!vvC#Z!x@4ZY=|Ecl_haT-#Eyq8Qs$zR$R1bRC<2*KoXeT1 z$~!bAo>(E27|(6Q6Mh_W+`IYJGNrXLpsCfn+ti;`(2I1%Ka1}3W%yJ}GFk`=*PuPd z!RUao1KIH!9}fzrfN8w9wo1pQs-&7c|9DHb&}R=d)R0J8qs=!O z9A;Eq{MkY&@5zm+y?Qn5H>YAZV?c ztDo-wqbS<{cKH2cmSf7HKVlE1FpD1kArGOVsOB_JVP5PnA_)RjYosw(|Nc&|mR+@_H>jPs~{3g`^|x{A7<}CuFMJU`+9A$j0xj%(G@xJYV}av$?mx7$^1lW{!u4N z{AA*56)L@H|0ND-?F_grlhcMK-X#OR!Nx6~Q!(esa-NR0qWnHc#4qjCmT{XoU3WX#qWY>!unBoeJh+haCd-PTC3Lh4A#j6$Y7$ zAx3RjiZ@crWHd$blBRePXDaOtoF>eLMYAHIrw$tAYR$a+IWf5~bnyFr0_mVQ?wA4B zxgW+P=uZ?dmHKu4ovF3DaBPvSVP(!eXH=Vv!4^p|W3)ozhEj&Es15$b}wCZe$RQ%CWQZF@a?~k)IWw5VrKK;42k(`e-TMUixjo~C94ks zkfN2{dfb3^pr`15)y7Z=R(00Xfm@XuPef*<9>j@-h@n+v>>AZcfGJFcyVMw2jS;lU+7h>>X_g^daYMe{#spF?juh4OHVIaw1(iK0 z*ztYSPM@tUJ91Q51j-r1*>~7-$j*T+scP;%`$-1l(NB?^?1o+1+fnG0y*us3SCse7 zjo0@_4xIdX@l=fS4V#bO?DyVBJ2P!A)9U`-?UfLrhRhEW03fXZ5D_@F?SCrgL8!ly zM{Q3S&)(@`VX~MENi%@lDnp*g^9oYShYKc3L#atTU=V203X3;41aop+9LHn5CKack zFbnn~yr)e6*k_hx_Ss&-GR`+CoS#A5Nl86`Jja8H9}BzFM%6#RVa`4X-Fi!M zu76IrstUv%I3w!~fgFz&sVXGOeA+#7?bK&Np(#_ysTY4Fawk^0!k}L$u&&n(q-k

>apCx*u<-4bCrui@nyV|g7pZwT`{s31*Y~3}MHZh;{S3+&iO+P8Rkt$@T=12W}_hHW0 zRu@s~l++RB91BDV@JnE>cP{abNuhDjB74GF&7_NA2Nd{TL&{tx?b$q$)sUrEu2JRY z8wmdUkBhcZd3FZzySIj#PLnjfRkBCm11$+xYh5qJ?^H>xHde%S;iOFgpvsGsq6;u* z;@+V0**~GKs+B^>SON;+!{wTZ&;KrS_=q#Jz_No_s?(sc*BHl>36jR308qelsMP~3 zxK0m0@L#>rW$ejiVb&Gg-u{yXK=&8+6k-Q{GxF;!)l;^d6D7V~s7X;BG!GpHB#=yv zaRpTp^*?!te&Q})NP+(06ikh?rUl+5DKE49JE}MOdg;|+v&QZo8XMjT z(UWDFBTPZiyEw01-jDTGS@Gmn(1t*EnPiJ|CMhX3!6)iWJeE_glPuv*dyG1nV7lbz z%65=Q96PfXrL?mYfbT}{^_CJ(_FrcHzda1B!%PBW5%%(u&rCv_t0Ie1^jgOKL_7Iw zt6w!z2B87;N{vxj;3y{ev=w-P{0!bc>_lIH*?G_Rz@>VmHKh8slfJc!xQs0DEo|M1 zI2gWdRQCmIF|quUkA?4LR2DptxVll)Zd=ZS4} z3`)S}-enJVg%P&+Z~L$Vl<_zNOE9E7b%Ff1tsAmR9L1X1mOaeX&2`xB)^jpcCAYE! z!MN*(i6XE(X$9DogI<}RoWGpPF$LkwRs~M|6guqH#1tCg|}% z?gD`3cUx~9o|&Ag>FVqt#*}yyazl=y7@$6!ims~_WMe2Bt+XA(TU`IsMnr^3-j<#D zSnyY;)I2x@<*E^z5vD_|S5{-(XQ3-`?w{~Y`ZGx2aG^n``zedxF5q%7M&fqQmOHV* z3>jGWSOPhZ_hHow3R!UFPyg^1sw8zGi+Lm?BAya*sTy$MhB#GEA8&8L8^&!fV0hQ(9U?rZ>#%{PI;D+fD}zq?lZ z>`O44`=u`c((>7XmbwbKt!35?9an^uS~=8%S4X|TbqXzB{VPJ;Y?ut84U$w*gk0!> zS_tXUZR0NI1Kbg9F7mR0kDQcyrrbn{_qx8GRk5fIeC{y9o^76JXWcKnFA8Xx?1DS{ zLybtr^`%(mJXxO+G3Pok6`}K#miaomj*qjRvkJUzC&>_&grZ^;Xp{imkLatP{t04y zw(_`SkRw@Q3_xFzuDNWCDP2E;vOJi)N>i~!WTnI(+G&s?r3)nl{2X2Ysjj6xw>w@B zjDu?ex!dPIz)cX3udl!NODL(RP}I)F5KYjgonqL5rUI&QZJefu9gme(bY#T_$ukb} zvsDrqe<@46q{OVY%cCQNwW`Nn7OIk7O3EJ)b^St zj|&gTBTvQr$cC|25Ks6*U#B`m3xJ^kKxo%1))Xi3`%fkyE4S4~CN4!B^N!44-(s6^ zdoQ=9$LqxiYF^i%B$uV@$RD~=lnF_t6)H=kOQ4hxvb+n4d0LR6-*UW9dMPD9QyWK# z&^!db$Nv|MJ176b(Iv0|oqPYN{k4whSVSu%q0|H|^WIX0f5EJTQ-^eZ%F>N`%%>7A z8n3P$5g5w#L#3=5Kn);ml9zN#5$?@#hJwAVS(+ECIyRu9t0*s+eyF9S(4LZU=(tCc zQxGv75#BXAcvGd_J4R=@TMaOXYo#>~hnKBJ2yiUWB=&E;ZhM~xeSX|ILD{(rg)~#F zHahiV22T&*jAfELmR^Hj;fS*&5A6nz({eMN2?3E4AjP-1NmI4bwed+))X_KVzYAnr zsnwG)>gsupdSTYi(Ht7FQ4Z)MeEeO!Yi9t&?|>M8#(ZF@6tbJ7k-X)buUs>S)*Yqk z%Y%);O|>NYk7+FD9!bUO411H;5&UM;#18Wddm?GSVp;vG(<;g=7k|6qn=sBfW>pXB zlbrdL+SU(nw^XW4tr-*0Z%)kVwWP$%=wWO5gqCxDbXcg77*ET3%80ZSP(&4Q9I+t7 zgT&}YarlAVREP&?#RQAr2rs%`NBCS$ct(1$e^6-=^2o~zyU>hnNGb%hv+W%#`))BR zg^l7I8}KF_Orrdwl%q#DB?cv^!`@VCVnWoi$#@Wp2-QP z_p`{o-Hk3T7554|We~ytTm1S4&%>Ho9pTXCd(Tccry@g0IxLWhqywujV z2mF7s&GNZ@MRsU7n4ex)!xFIbj)3wOTo=j3KVxq3cH1nd>*ZXSNAeOb6_{6#yVSFM zEdR4A=LPz@fpPw;wP6zS1hbJn9!+9v)GjV34(iv`_+K{xru$iR)^3;n;hV|rTtJ@- z$Kau}EGU=4z@`FLmr{2FqO`bnXm%J1{@1k=qQ2tj$5UuKNWk;{!a-SvM^r{$esA(2 zTB*X^+V4#XUPh{7yj#@0?_TV*xFkYuhQz2t=b5a0_pAxrBa~N%6wBRelNZ_(wx-x0 z#HD_vo8KprTC-MIVKd*a{88zk?zcH-jPt{zl|#txmOh})-M%Bi^;Gw*N~`-it~-H+ z-KsjKGSe^<-ZaLhVA+WX_CAAvNu}t^ygEMB#%^yE5Py2cN$of& zZ}V)XiGD`Ey++d?+rO`=xulwh#trn`%4qsse=dFduYGU9^P{I4zxDef=VRUWY}|*- z1(9GtPA`v(brxoRK|2F9#4qOXIh+jVJf`!M%Fn&mAPk52;vwiU%#Ty79DaMkN|zEK z)@qI$dhTPl`lIHmZ#~82O(VUPMo*7|bF`o@i49s`Z*HJmARMaU9KBh>`DPctwE zhDC$&o6(n3I zg|7fTeNC%m5LmtVlfS-OAKM24k|Q9lb8rfR0`HSeguc7{&=S(~eN3%V0BVZF3C`xE z1*?uEk+Pt)?p)X$sUUv>7`wP5)X~^J%fG^FY$3FsZ;=2_yPztegoF7;m43elM*Z0T@OxUSTQ4aGm9Q%Y7JhjDxG-w z!pHCBxHGDoW9un+h}ic9IP8E8z~FP86wFt zO@$bEJO~aWf^K#MBP;zaJ*^oiu#n(psDJwTZ}`!9M7;ggYWD39=;4hu1<>J`p^lgU%wDKftX3&9I&| zyd?!xU7FKL4wXrmRS-Ut;+|X;El&1<{KnOVQBxO5`EEy~6)JE+Ro0Q}Vn|C)Muqq* zg_g+4D>&}?NoheFY z+1Yt@t;dMO&gesjtBLNd$Mbe)HrSb+yb03$A*lfg{Wxxs`_WnWGKst&;0}pZDTjK0 z#Vn%vHpEJt?}1^1-fcnB9wTpWZKS6Q8t#-3QblGlS)h!p*BZ2wj6Q!<8zdqpX@Rch z1__kkcw#KCuCxLyvlMbjFh=3)jPqx<%x4ioTFCUVnlEJG z?WVMPr}ULFu~fnL<%TZ7W=a;vHhXlSE`rh|?&vttmphkY-=LeoOle|{Wvl-uS^vCsgDE)^qDKUDF`P}af zA~-oH-t{eG7Ou&o&b}kO1@1l9pqrKb*Wow$bHR}gR|d5i*JN3@co%s0O(_!^WFeFR z!+5Uj9lJ*)S3ci7#@nNZdfSe}i1zx!Z=O4#x`vs$UhbV5MSk9|-#&=D7HGi|g8+-* zTy6Fm(yLtx3>>Q@r%02p_X~&raFqKA0llw9xcGG+0T*P9i57#Lkr;w~d+nf%}o}6byT)W-X3qloXWZ{+W{{R=pGjUWqk(~r+ zG#aw}OkTu7jTR<_PBn=Nghp+X!$fCfflWi6#?9UmzoZ~fYpDQnvhf(w;^w3yPR%d~ zq@?Ibt36PZzIRu7s;{2_Pk>G_cm#}i)brv92`r&ZYVAil>O5j|kfrjzY9p70A}G~x z&=}K_bTXgx3Czt5L^WGGmpyR0yW&)Y6X$j zvPva<@q{e>WkK!^JK6NhST;U$?dC4I*S}>Uij1=S;&j_qwzTXN)$-!gJrh%M#fcJV zY~f8FWWXT`8ZgWMeefhzGTVA{495t5hZa5G!EKL^|S)(YZG|0l(tOm2AqYwNAS*Vc_25r z@lM6I&?80&L5{NkHK!yjDgbx1d*{M&a4ukfReHn@c z=Rb#v>sy<{p?0Gu|4J5SVciQ9>$2CkAkx7pak`Lyq7@vM{QyTuf__yiFfNmO7`?Y+ z@M@wK?xGyxp`$Kee#WF|8H=M%S{xyXkPtZwDtMw^qB#|8E&q#!W)g#=2ZP)qU!ZYf zty$7jrOR@@aJ@$F%-W5s?{=vvjdA4?heLf0F&Sn9xW4;*qDNHW?^v%zO`Y z&;T-D0`JVFw_2r0A-@V77sUdR$%WzY1#1VFA$O_2e zTvc{#g(Gp)gw$4lwA?ljo|>5qitQnVOW{JrzCDylJ4S!F90z?)$h>}{6jY&I6b?Bw zsz*}F-lf^qK7Ybs)F8U6Jv*1WZjVjU&iCm}j27y%_X`rjiJkUcb-qr^vFQfJMkR$N z*B4h~X`J*I&{qoGvpbZZL8(<}a0SNA>KJnMIwqkwCa&c9GWdtBToT;h^JJ7CaNdOa zKY2l)>~{;=u|g2}9?m}`2t$X!lSzyQY3Yh_UA~_`1bz^QPBhT}u0Ku`PZXBFuEYD4l0cK{-`Rg?%xX#7UOVYr=TWHMQE$J_` zrOR~cijbs_8Mmv6&gT^AmB}VmjtGyqWIT#+1uu^f1GSM8oX=?}p5@213fKssPITgA{30i zpJjstm{f8ooUi95uu%BU{=y>#NUe**v7FS9uuLIkVttp`O%{TWi#@|K?zyw6$?yqh z*Oda$F!XOw1Asuwh9fT{w4c95O(%;6(lMs@9QVYS+FtWip zRb_>UD04r>hzu+*t5oZ}n1W(OFuhW9X+^C2AWjVknSV|+I`|LNcX}^7x0E_NLkELy zvL$0dClVw9TTIIC8!O9~6y*}s8n&fvDJxic8(O2rXc8JkQ?1LS6~oINVWa{8mczZC zYdFOGoXD#~MrSMR5m6^mAm4rjN4irrx0~|n*PZDx1x*+*{wI1Hl zD^ywxfhQ-+6rf_`6M%u^miUzF5ED+L_1W_SoEh=1#8Ae(B;1=)sK{R7-Y?MmUQ~gv zbez(Hk1Y{)%WDbao)3CN&D zT`Qup8MkPpV!3JorS}kX{Aha_QM-G`f?} zDXJ(eOA!~;Z||>EnDqKfXbQ+8sA;rLaZxqZ$dkrWO^OSnEFqo?4T-}-ngiE`Zl4g>5r#e9Pww1B?BLX-aA9vGn08Ob{(B8b6fQW z!*P9`1N7Hhgv8CX&OeeS7N3f~DX!Y3Eh1zX$*z=#c`*f z^*8$z*%Xys0GH=r9#*;WWk%ahp44G<;T1048doS1G?W z`Ghr=Ay-g+w`ifh5}>dbS2{9=4J|~6`5-Qz7_EBBU>MQw=QQ0DKbW8>0QNDp+3>d0T@HDUM@mBJ*3K5*#M&mtoQyA@;pE z1ZciuO&DX$Ra2A%^?2ByU2?`A2&_r^uIMJ8MB$jK8sBQC`x?Qi>rd^hr0iF=SY}f# zN~mg>k0zQVl4*nppaU~IQn8B|+X;b}u#v(-^+UZq=p;;+c!jXx4$SC))K-|)iC75s z?;YW3d=Q0{Ur~gVW_6he+n0a2?|%@NNU)Z1P9y+}x;SMqnHfef_Pelh0%AbL!o|j* zye!9O2{>%f@?$Av^fozKEl&Bu@wJy@BtwZN0#kE$SVg7SvPwPo?gaxiPK-)CuJ+d4im&Ib942vKo zSJt++?&{Wl<)V?mw)iyF!6$-^{P4wIJ;j>DGWLf#Rtf?_COs8-(iq7S$;A_H7O=)} z?UGFxLbkR9i76CKNN6OA;0Pc-tL1t4k1~J~_oq04GSY{%3zW*8>8}34o4JIWXbi)lRq1oh>N@(Gk%tY z29eE8vYu3m7C+Q&HlSit1wXcOpqKk+q9Z-jkqmEifz~?@io!_zh#VHLKZfx{bYXC5 z|NRF1Chw!F5sc0Um;C3$(5z&T)M<-#={}MDa|ls z@hII_y|j~8x$5oBYck>4>aKj0T_b4Pc~ED%OW0n0d$7L-{p&ji#a`*^c7XoASl8J* zDWs#IO6k#K$w2St;(S=ui;Oh8lzmkTK;d`n=Z2*Us$ z=YV(XosXTRMH7XKD>YYvj-vvEubqj6h*u`DW*M4}qy3D`zSI)dzHX)!FW&)+fkA`A zEAo%Q$s2`}(+GLE7b4msUW{F+xk4i=ivAM{7fFVSkaK{*?HiypT7W7yPiV3_Ph=YpCPT(MKWNq2d=f&DUG#Vbz&c}LjiOLD zA)$xzs=6sL>4PG$f4Sv-V9-z8L&*dNhsIbNvN=gv+dk*ExVf=fvQu?U8ytpk zV+CbIC}BY0AektA0jVWhg0$$RYViOJNmvKn56hUJn6jN%W0TAe>D7dwCk`5|dia*A zs&#qaHb(NQMyQlE?rQ9MkRXedl^{?OTL0derBqty?(nDiD zj~V8Vw8jCYhwb_e3&;2Gmq9<7gDcTpkZ``m2Fc9|qw2<@c+TNYONw*LgwG(cpX9W> zw25OXn{|}sW)E-iKtb+WjpGd<+I^yF7%Mu;oyb}GB;sfMPgzabea+N0gdnZkzaR>2 zk8$9EF}+*mDdxlFY`O1Lu z{78TNCYY}OLNh-LY8ap|GcYLjL{mxUjb*QLVr`1z$+qa3m$=8}59Ql)uq{S?b zKZ5Sa`u_*v|32Rvx3Q%U0!W?V)K`1>iho1|fbH_G0>_~Ii<%V={&2Kl1N4-Ym7kUS z0qzU=Ir5LXaU($1j~%-8mv7fSy=lftab$e&0Q^M4rlj zUG@%P*&+LkD;p2F7{+ilq;1UZTDtS62cpbBslPY3zOiyC%W}TWv9{@Jybcl@Ko?|gZgJXwBhNAL@kao;HH z0~`u*=-1_newyS?ZINMk=1{`MvWtg9pGX?AquVH|U3z)edEJ z81&*jRHCzLac#LiHFdj38@i2^)!yZ_C}mVnGbBspGBK*WP{QQ61~c(4x~xmythhuE z)@s&kaHrICLVui-IHwa_^Ch#qx*rw%$of6(i-K48lICq*@>DB620*^$tKNJqBv<~EdEZvZ;o1~MePBKA;^+g%04ajS2ElOG>mdne6&F^AxgohrrX24k5=%SgW;fQu&FEUkI%13~K% z+`mkfbxj#lfm2H)A?1l=Z)IXZ1CmT?UD2(yq7fVP_oJ1t6@k^T>+;y^ z?i&V9lrGNa0!q^N#et~9u5JsSOUAR~pHLQtRztpr;ct8+6swi(WhANMK4i>_iTE$3 zBu?DDeg-bF?XDS>pe_b_>xqQ3I#l+79vmtqan2&fN6iHKK=(R0KHq2zV$R;u`@o%* zeFW@I%CL%Vdp*NorP&{X;DuAfmPp_s{*b$T&4)6E&Nh+fFPYHi5qPt{9NMbUU&w!6 z*U`U$lj&Eo^W%mfWu9mYcio6wZr)%&-JZ$H%59nI=IFc_?4p<<$Zx&433VG>sqb1{h!h1++`iIL| zadac-J!Jm`Txq6#bNJL&el1$54SzKyw!J1FquY7S*Hku=$8d1^UDjobS2y_3>p0RC z^ln)n@KSdN&eVRdyXH+8JaEwM`|7g$y7Sul`W^uCdA~ONcyhd~yn}T54eLF%j8z`w z0NBW#AQ{w_(>h3|+tW1YZ3aY4&JAm4=k+948)^V-!0fML+pF<`jB=uA+5fVs2`ELf z6AZzVzWJCzi%OAhSsjG}P9bzJB~s*{!A`bVG*}mZOnLaf1q713YSj zd)FI}lT+n?7}1m+hCT#YLE|aplA>uB6x7R9jn*~GSfI8?&~VdF!}Pkbv#Rt}Roa}S zbKMo(cW^2F$CXg;Pj5NjyGaa7kKN*-NI9@}`1d7XdnYJJNev)`Lhq9q(x3n#z;yJdSNN(+e2NDJkIv*CgLLs1jD%+7o^HU zGrJoF-wF8o_o|6ChR75ba1e8V@^wW&-M+B??%Q2mMw3<( z*L1Y)BWV~r{}LTj+F4)!p3-@0QZ|1{=jh3>q%K}0@i?XSbx?nhLgvnQsvQ%_%3P+_ zFiTY#o1IR5lXP@mPL%TYWYp{yc8p>_TbY8~2o~_KipGs|j!EQWI3N?7u8+$}Me-Ya zVyTOeUJ60wlNyuBALwF)TAgFZ{R^R04-aD{xwMc#;dPzaj^=3T?wQLkEw41iA{e&O zi>X~S6O(jX8)Nu-fA;cvk!Eo0ouL?L*WuCQ#=tTqRp!n{MW%oY)W`~Q2>*c{BGr=^ zc9~(7PCVX58bJOV79$$!^BF&{_g%exE^YWrc-=xT626x`D)Q2-EaTlG@Ua z0BM;7IJrz!VTh7RRJ<>-M*qtQlD=iT2| zJ!x5b%$p3Xj`U36c7;R8dDX(31~;c`p=bKV3cez36qcb~ahVg)dRSSsaU8gyLSs>z zmG27+_kW4g4N2&j;aIX3mvNCR!Hnw2PQF=jHH|~Him`Jmtp*1lOa@tqd78H0g(SzS zQ!QO)skt@sAzT{G!(&Nh2yepqAv|D+cO#zC!#UgAux{c zhdY8^d7jo?{Z}TqW%$myyfgyy`i(7{`a)!3X4C6ECUqLt$L^7{@%;W9$Ze`aZR`5) zxRqzb4J1T`T$q~k>pcp(jdZ3+L{w1%fc{B2Sco15*1j60I|cx&W7!&2f}+aafC>pQ z5_@Qxm7Y0@xI zP=LRXhjlCf9_=!;NP4=iZLDv+LG7wwyBNhlsxnQ!deIqyR@m}WJnwYx20`|)8Bh#@8*C7wF#t|=^bO}1iqohRtkREZU z?8}xMp$$fsnkEScjfTouf*x3p{A!oq|LqXXN&Vr96gK}XRs$;zF-IMxwm;4NjmAl4 z!v_eo68p(8xQ0S2Ov9sb#L37}{Jn{C9~Bx`tAsO4RHc>Hl=a7l%ViQHXsmPek5^MK z>45{b%Zp>WI1bO8c(yvW_GV^TCmC`Y<<7(vnX+2m`t<8K?e}Y#Vc}t6lR{6h@}OtJ zKJX0H)YYkeOtU6);r@ng=-!-cRUcA@5|0U0IIe6UX7^X|-N5j4qT_f0z(h+JYU1?d zKS{~PJ+z%3PbXWcxmZ5bE?i+*+vnNu9*R8*#H`CGSx{=RzheTo~GQbL2i_) zC`CMS2e(#?N^%-yf$V)j#T+ z?gI_^ckchEp6*lc@49y2WI5?opu}9m7yU>Nr?CURb1=ARUOB9J!z?dS@K?~#M^zlzM0DSA5?7lsXW|>T$FoK}HsJY3ISkEC#If;5)8ZA8{vP+<2wB z^{etHYevDPN=DSL5ARWs9)LGCFu=5#ODg5Z8CtzzE=re@qmH=cNasduhMvbx&QYZm zmp5~?s0n$UZJ=4KQ_^mH6=S!5w}wsDKp{J5$NF$NCm#H>Tkw(u3VN^2Gs9M|UEDnW zQI6gGVDWIiioP3~L`(Z(ETsZx z>gU?vm?M})C4-ihR)({{zpWnNK<4wDID0-{TX_Yjv|JiXm$AaP`qXAIdwDv*e~v?* zTrRDwIP;+jUQExP{SyF%S}>h02&Za%1v=%!s>q~J)h$;O%KmUC-#ZG*hW62Y$PQiEYPzKbFJ zn$v@YQq!okqU)ZNHw^^cyVSsc#$91<`u2=xnYEH#mvyG=jHZ$?--`Hht&Cbp zm+llp0TfDjWAO4YBN7`wAu?w!TeqmpoB$U*8VzC*>5v8)tV?u6z~w4z#{VeKQ2*s3 zK0AfbQLP#VFf-nFQiq2>%%0(^PH&3dO_nB;R}=)jFCMRvE&U6S=r`i%_o52#Xu(CH z)s79yn8t^6KO20BxBo z4j*=a3MsOsJEe6?@%3SsKDAWZ9ixX*8om}Vv{VZcGGvCA6fuj(fso@k1WOy9!Q}|m z`{zPGs=yCSHz9*6i zcVV;#U4mG3cUXM;j$D1~8Wjz87EoFlNg)RjG42(6haN0>f-YL1PYY5eai_X2@&C?O zle-x9Ils)okMDpr$zOUc?Lb!*Z-M7$LQ2#Gh_FzhK|hVS*f2y(yj3p-THE#nV|&{5 zZ#8e7S2H>uKM9jjp3~EsIor{|&==z5{I~C7r`_}D|JXhxlSG6R5+kz4O^6MJN2Lw# zD`$3yZ|#UiA2w`=Bs#3I{keeqyWKb3w{(=Kbsu-fYJb3m-MVK(aDCkq82M*^OvdK1 zZ;QR>T9EDi<>PU5{5m-CcsB?{{vv>*i$zz}=Y?39`%({;#1&%l<=430H>-kwA=yFz zL6FoutYmK++4zE7*sy!bP)2Jtrw!GI%i&V0?kxspS^*HlXPaX;LmDlVu!U}9;^2k| zNEEm}7fUhBgt$m@z!?2-$SNXtD_#)MhvgtDJca+0xoH7@9+6jJOyO*|BZ(@vL`uvETJWo6`D1FyU+Y(Z1lpnGM9`k1u!H4jy=4%RcRkKh}_R~^CS9cfI# zYVZC}rzU6c0Fi>Nbpw>|D7aJT|22I;Cb~5^Z66bYEGJ3xlkf>(ndU zUhxc*iA+yhL#Lg3(~C#HN|ulu26jAn;KU^BtxyT|yE3$n4C)y}{R=&o${jntSGRuF zBJs+Ue|?!#b54!EwaN*(54G8c%aIb}bBt>Ai!HUBQLAJ_4eyGYo~*ubZm!%-W+nmrb|~oaCKc0%9X}3eWP78 zZG@Svr611&eSO3}2R6HtB#-@pl!##V&K#!mbo6gS)P-(GP38|vCx#RS%I4-$mV7DS z_l&oO3xfK%-z&M*)P$7;ZZvoZSsHYy;V?LQP(ZnxVsbFHNl+( zcXxMp*AU#bad&qQ5}e@f5+G=Bm!N%`+*{{+xu;J3Rrj8{5C49lYxgdC)R=Scwbxp6 zjv*uQx5IW0oU%8y*7>q{f6eQObb!plcUWX_ zd-;eNCVcc?8ol-k>=GL`=zKofSpa+tGJDOZwuVE3PI!Isc}x1JQJAvYrV&%(m{s`* zP(#~>bUC4!8WdXO0Cd&x`7R4vn+~dc*+FvrJiqTKSQKjXJ>{f`S2NoV`sK2B$U>9+ zSdj*>QKRX=nu=P8)KnKBds`fi__8Cdh)4|14ovJtb^eu^er%fWdjT!*o>c03*9LGL z945@gA1fM-hb$t+*Tsr|g}PHc$bb3>^hY%$KQsj)dRMG_MQc81U^7_MO3ISxg{n3PAS~W^&8b?UJvz?#4-PeIh#9(Ym?;7=iWp zGn}Y;rO&c^2WJNew5slk!XU49l;+_f_yr8B;cysq{|?TXOtf<4LXigw#JX@RxckIY z_T4PBY+t5G1i+P&EC$hHUK2%@Jn|L1B21AXmH$$Q-^3uFu@IDyCSvA+Kh$QC3gIBA zjF3jn`qJUixVFfo*KKSZiC>sf@!6;hDa)mO^#fa0Z8qh645G{5iBLu@+F%N|F7j%2 zNs})rbq^TN26(Hn_;R;pwhEMR1WuMN(J)S%IXuJvCWQf0S`n?HdKsivD0} zj(z?+xl9l!_5_uE(hxN1+^GwS0p-Q|%Q%9rdanFy7Kc4RFPm%KM`#=_HLtt6>|am( zkMp#~$JQPbiStL}GXq6o=ThpbHF;4MuWU$7{`n8(?$SOZ{N+m*u zDpJ~~G8}iM))sY4PR}QjWzEb>;2r|3*rcYyHBLX|uU(3fS(WEvy;iY$aYXiol}y$} z(!D`(Z)w^=k1_fAbMB{3@tV1~?SYyGODRi9Kq0ss!emgA^knCn%LjVdT>eYOv4(`j z#Irmfe+n_qs;;6*N6R`$^)zKO+R~iMzw~&B6BtS$uKszQqPSR$u^rJErc5_(L#jKO zZu99^KdvgK`iuf~!XGp>J73X8FG#(bDA=^Q7#zz?xu((w4_!`y)Y140j6vntY4%r4 z2#kzTn?Gg)vp0MM82CfNkU$`*t0hi2_JALBeF-i(FdDQZWs5sDR1|{BF9T)s?S*k3 ztUod47v?bHHkkBDIsmBLCx=|TbCA)coDuRh**{hG4<{6Q;ewG(|NFnB>hg8 z&Q)zko4`Ou4UIHNMUk z@x+B9y5L1V#DC9dBhjV0o8+)7eA%Hmt8Huhe6_WO`O<8ls@ zw3*~GHRKN)mg-E!vPJQwxM;EnJOM;XCUR_m*} zi6xB@dE*-!(enC4$x<*c8y63Eng`l?=A}7%&F*=Avphau_k8C6euE;|v32Kqb>t#S z@OAOTktMHZbCr}S#Vm~>ZY=mSNm}O zB998GHMt3R{{wu?V(K=FW#R{yTdReJPkE@gX&a>zQ3U^X<{c3BOe?6;o|pCi+inDC z05F7kB0w=va~}g>h8@8D{4xx9l@6jk6dSC<2FH+IKSzbU0i?Vj|Ji|GRgo08Xy`hC+{&!0J4hoz#}l7uoj zU8{iR?Mry(k+e)tfm9$okAbJ(xJX0ne&%uYgdrI68>lqIWJ-;lr($Ht5>rA=^=(!5 zt|c)xvTArCjV}!AR0u}<^A}_57Q3SDfPci1aiDH03?R1K`2I9-g&~Aa%|t{JgFoLd zo9Q-3^hDon>J!f->eN_OSguR`v08dxrDJT)p_o)aOB%T*FHjPuMyH4*g%x2np#x?F`tks125}6VC|^_8Qu(A!xa&49@L) z|HepAa5WsCAmvYfdX>zz_7s;Np%9XokYcp{hZ7Z*t$*C?iS^?OMr!}KSFF_%TMh2N zZP*=0y`8u{8G;Ttb>_+K;Q3Ky%R^;S!euhz2U^*RT^r;$)vBr1V5u#LWXhAI%VU;c zyVNW7Onc)RHfu98=!t_OiTZ0p4BpQjTfE$v-x}q!(oJ_ZQ=IsAPST9n?B6;3_Vy&nm(|aU z_9|P=fOzKaA&CzAge{$*gZ+D3W=%R4vjM`A*LLD*ro`f4mE=v4`(jO6F7b2FajRku zUYzmaL3n15mzXhZBhp_HsVeGxoPV`T;v^q75A^UQDh6Wp_eVSTay=RRYeNtA<)Yac zbua1^+cm8RI5G(gFQf0ZuW^OpaR3o1^z-m&Xx&!ncj}Q|sbTg6a8EN|xQJt}7rM60 zY|n=fhdVq#cX{wB-1=fuG0sW|Skc;lm+hg)i$>(}SD8Zfh04q^pY?Y82mqY>M-~j_#ZQ|sSvKsowD=g>s`a8c6#7W17v+S{ zbZTE}e}uFXoi^ca-EJ_cUoW&u=yMa`?y=)`=nwJ{&w7Y?N=l7Id+6p(OzPBLRO)j zkO-hLf-j#ZFma>xJ{;39#kUNx20|(l5dV;fgW=Fj_b82;*(ZMPXSu7_!WTIVFO64D zg*QbPnzbxx8G&$`%WW(~3@jK@2o~P<#AUjsP-bASKQb3pvKy&HtrwGJI5}yC96z8uEc;V92Rku3bBT1<)r;0nK1H8BfO&HsR{} zjRSxX4-KbIAC?u*3G~xg-_QL~&CH~R3_*^84kx6sHtfOk4b?;|1=dKR;5k2CN)vr6 zwqGf>=j@jD>oYO9=R7Q}sNqLk-hE+0ub-7NPtLTyekZQVde707U}Y|$kVvgzRyss~ zrUM4lxcIL(Q>72J)SLm^r;(E7KV;qw882$g>Yu zmdYd2@L!l2F(RT57Q}Uuz+1@qCq&ISv10x7dNp0zq+c|2t<7umO#I(kW@U<*J6UCe z`qFw*RnQB$;R1FiKzd@Vd$DmoKPw%YPpv36*0%nRu-40=E2k-_DX`m5A_V+)8c^&F zxW@*5t0`<)0&50vEq6i5<= zAUPOsABP)Boi`eOJEt2|Dq#l(ZINrL?av?G$#qCu^mw{jG`_kuSSW(J%L=>3ICvv= zp}yeJ0X9DU6n)H)`gC5!|)GJ3D5t#cjWGu z;XajXzOizspcA6geS2RU@t$%$q#;m<23~`pOmd?91(SvmTTTqbai6;9)OM1^vRU;0 zI1~YIu))#MG#XPeu9uuxKLaWziID5MwNV#5V>wwG-}kG zm+zApxP!rZO)U(%!KR_vv>+50ibhon3Xcq=BG^84LVYK)zAuTUvVgCv@3?RbA5MJq8Yg&4>k1Rkv}8n z0KZV8QMwUGOfAS(QZBv^totN4pJ#A=#5#pmxMpM-_DbmMs&wbCU&F((UZ=5LsJmtN9hJxO<>jf;7yDU#}<&*Rbu6S z2I1x4AW^{(p_Apj0Uj33{qvX^vpyYzxIISG_LP=2;t zJ`v>3vT$7UvCXhi5PT=@FCErWGi<*&OB!#W!%UUQ_{Tj&bx~1j$1vq_&SPnpFvYYz zz57zp4k+gl;NQ>}g#ui6wvC6I=_k;WY!(h^opJi8TN}IBmSehGI19S`0NJ^3L>-#i z5?PoV2{>Ubs4#3|p)hZ)LB%g)QGB%6QH$Q5zR1#A;t-IhuTbt7^Sh65b^(=T`N9_w zc}2|_M>){7l#MzMyWyf*<@mnk2bv&Luv-ysGTZAu%X&aC3HK48Km+MvjcmnbjBM78PIpO!%!YR~}QP##w&4 zGQe)#-5N%Yld;6yRBl^Oh&t?1_oFPRqZU+O)x^MxkSR&T#BY_ipJT7k{)bgWiZlmQ3~fjy7B6U2f`GH;2h(aIW7boaW~n_fS*a>=FGXdWz;-HC zB}lW@NZ(d-9f!9wq;h?kn#k-vsN3ri7pL;VHv5#Ws~+WH2NySd6~O! zR>;LT840Im8bw7zv6$=~rC}u6DK!(8uTO6sg4)c7mXj(cYSmL`s-H5|F^gCCS~M$* ztER(2HRD}rrVDiNDathODd$1LzF7##D(TI=pDGtiJ|jfgTz?pxoB#I_MMQM~%D+MD z@wl}j*M2v+sI0nUn!ifNC&wbgoxbuRwdq&Anx*{ECxR|@8Ir9Gwv>C91!!0mgWYn{Y5If5yUuXz6hxjHl**R>!XkWj+!RE zR<+ndeaikpl{9V!gbp-bK}3SDw-HO=z$SsTqeAX1ze%dNSU9x3)h7pA@STH;d|h7s zuVs*DrG0ikpikn$XAPEAKS#-nBQU6lY0aoz)7#*?F>y4_^lMb&XG6y&Mkyo~xO>z+ zYl2_rIjHt0HE(EuL+{{n@U#()aZQn-OXt-U52d6BBN31xS)AMd5cbquM?=KJwi_|# z&z>G~qK-?;iYm5JFvu>kT6$Afl`~RNd_DdCWb+?Gp346>k9Tm>#ItvQ0X}kH|9AiR z|04|l%b$Huxql8V0Pyj@yz2k{;{PzXcjEr1XWah|TjhU)`wvC`CFcGQ6Ic1)Dfgd1 z{g*!dcU1pNbp7Yz{}OTk{UG@dao~IPzwikD?+3|$nENjg_y6ydLo9<;+%4YWl(|l* z`6NMKZG+c%X`T%~xGu6Hqz!37WFr-aEMRmsAPGyt!W76p#uiH!J}3z>LmDp683&@&2@u3)M7GyW_LyF0#;;s|$|AZJHa z86AZDATu<&1t2O9i*v{biE^WiJ&10*h(!y5(t19F-+({GARLnUBlbbjix40Y2CN?u?zHx3HvXk>;!i7 z@+&S8_`39$eh-URTqbtvNXwJujEtV|nYNCvcs)Ku_`FpUxT?WqCz+crFng}IO=4~`JYNh)Bv9MX8!lK}3r{SGv zXRc!raBWP^=(^z0ax(Hh<*j=8-8Y1cjEqLqb>;oyR$BM3kYtue3}*#G%Lw4(kpl)2 zL!8mwn}7lxJV^nm78K9`#gWPpC~aq4`Xw@TzB6q1Pz9fsVbd*%Yov-sX_-WyadIT= z5LH_W(S*mJJ^SFcci*n-;Oqi41@b(%t-~)4V_o*GdGMQh%{WmD1$`?h&+20uzj*Km zJv<9OZY{5+ ztM3_t3z2(<$oxU*QvsVM{ns`Htn=O9%^L29e8?G2ZFi-OM&&$+BSZ|$>o@GK^2c&P zDG`x=^W3~!zR&uwrCF5+u^dF#G=(%4y1F<>2mYYLf(k^^!-5h{H#Oigha-3fbMy-P z7);2n78r!60~bfgD}w?m`-SMFx(>zUPdp0K=I{+1R--{o(rd_O#uYDsVvGaNsq~o) znH&Y$5Xy|)>_KlW9EBjT1<7(@`nSr%kmm#Gr`3nNAD}D6A3_?8L`Lc+Z!}jC2}Jwh zR#6Wb%{~KLoAft5c^6spuV5GX%E6K=`(qv&B8(4i1!YAbP^RJC)2<>m)3FU3dtu)! zEG&(RF>+<-%|)kDX0m7;)@zh5Q(8a1zH$Ukn&`g@O>*Md{vUwxdHUliol&aND7%nL zz<7NZ(@|vSlEs1obM;idu;q9(-}#hV-QyA~Ml4vwMYFL8#zJ~^&g=MaPm9&WL>BtY zI1If|IZ1|%mu3JFy+y&4bH3q2di(l)WuR2~ulOHOB@``fFbHuaNNCCO{H{cubeXA} z8(AFB$-R!v9b~)GTcM{HEiegJ>ORnr#wrMm*M09P$4e`sF{vjt6PA~$#{IAJy1U(;>U48;ciU;@^XH*~$JU;aK^-}nB(c}1 zpg?LTmKh#LkP{@i(tzqVW}Gy4;5^^Q)^O<>m@Sd;>z`5~Ayai3!WJDHU6Nx6h&k3` z3k}eS8HF?YX(GUZ=h;a*UG>kUY=qulM?MMy zauRt~gqh({EH<_15jquk%oJ%^x|6KC=CzWIf87O~q)EpcVBMw8m)%N?{jp_wKXYbf z!E+OWWD$+$-y7~0-Q$K;1dFX)xgZd|a*U0@JdK8iiT#DAn5wRbySkff6Mc*Y5j@7& zG(9nOe^Zji69c&#FJYyw=dC#8>tvu8R__r0-VaY{&Qd15Eco=PE2>+YS5B8=#YiO9 z3bh}VQ{}yV+cBj)G<3t1f~jXfsfcnjwi%Cqo6{1c>x~CoK4PhTdMs85V=QL${tG3a z&dOdo{9kn|tC|lrn>ugV3v$$npVU9Gra5bpUvT@OPpSMUh@ivaQ{RLfaR2ahFwgbf z|0yXF1F!RgDaCNCGHu^7mNPs$dP+1>arWP2za;lxl-@8L;_7k|G&~ILR7Gmcwuf9A zekz_N3e4B;mRn_MDW^dZ$^Ng}J@iuE+CT=k_mtBhYEn6B9T@akui>DmA@D5ZI=u$H zZ5@xqsUe$c5kR=uDT3YvArs|{oo6d&En`mM*1iFl{stnqTLYbgr?wvtW;)zvuk7eZ ziC-0 zVe8`%S^%>WLb$JVr}r6&1sO6bQ&jCt99)891TK;fmYJ*_K+FTzY#X{KHxwHitOqs5 zL=;hHy;_R)_}h`WlUNU2G06-+ksN9$^0QMxW8x!QUbgdcEw_DdOw)TSJDZmdBKRYy zT&nT8Tw+8_913?16M&8EUa=0ENkZ42DC^XzwIL1#u7yyAi!pSKh+u&GWkCC#Sn=%I_Z$B1r>2_n;Qy^gjc`mrizGyHr4IDw+Crt*^I&pB z0Oe*FzRXcq)>*htuVbOMh?dqIu|A`cro9^$4yc)o>?u|HYcsRFSi!`JytlZ(Vy&j0 zn!<-EKc1(ig)FyfM-4fE$8^BBs(9P}Z<#uUWc_VF)mxJPDS`0=GVSV1WlZ+?5{~(= zxpM{B%k(MzvKm?tquNnJhN~+4`2JO4c4z3AwXA5URPYaMW}sDI4f6 zBeWz_XTO2Ci2T9@Imj&Fuyo^fYV(Qy?F&{W)p0T-P<|tg!n7>>w8I|pj*b$uHxNzX z6Wh;X9jVbFDJ6Mj9Rzv;Q+h0Sq1scQcjhWce1eWry(T{b%gD6~C!pEVCu@(hTxK!U z2xV|S;`2_yACHZ`Z8}V@KYzT_w81!>mSFtiQF!;Z=6|0rmVlDIy#gG@P5I33vKE94 zvZ}AA)B~-N#BcjfCzoS1K^@#u$S;Q>Z$zN@s3S z7pEE)1G8ut#83RsqoSV-_7lOrKb!Bw&5>3d+;w{=xK11or|N$6_`aAPF5!JB(fVt$ z#_+SJr725fSiT*xZ0&S(b%Y;GTy}{JKnS8%H8@Ivdv8(mGrp4M2I`qi7_eXpx1v;- zp@QDB+#12u&bcPyr6h{#8x89-L{NW*)%8&2zUDlCmt>3L?cr$S1Wz$)1BRF z9Hnh(=v2;AixUZ>Ocm|Bmik&NZ~qSNo-SjlWp99#DdXu}BTw`9$Gi^^_9EyDiQ>cM zVyV&`fweig?q@j_#J*=Bjg*fX%-X~$*=c6yH+)TPq6jH(Av@~SW%88%QW1UgP=nMu z2PMed?Mc1_^R6&(PK(GAx-v86b2vsKqO#0la||$u?en8@)s_O1*jNr6lif|sueC-j z1!@&^)!ExUdGn$#ZKuB}l!hrN{uwLm(p>kqNQ}eatBmI%s=Q7!O5Jv5@`-Hv%OiG3 zmx52cS*B(kS}9l-c<;T8Wmpb^ZkdGPIJOl1Z$(9FF&G2r@Vg)Z@FF)MMD9@H8v2RR z9{8%-rl3w|@5gHA6#bHARA2(S4n9xBjuF<03yXR=DuGq+gEB2zIgZjfyb@512qUhG za&=v%5`WmYbRmmrQC*Y}oZVpJmMF|{o2mLGzNS2gn`y9*C!Y@STT8ZDvX&pu%U69V zI;>X7VvaLsR%f{8hc96Q)mWu2g!z8q5DP~@13*y%Uu zA{SKCC2q7Hj8tY6n?Wg@inax}el18(X^#)IR7Q&EM_LzKloPm4Qb=@VN|;w_B}IYE z;$yYzsx-xN8l%u-YS8on5i?wP-W z8a;-FS;+^)QSIHyLqiI%OdHVTV4+x7dB*yLl*ro|_-wACY*puh)|y*Onx6#;@#(7HyL%V4(>i1Dgu z^$#PVDF0G$8`d8l=F}v8f66^lQXVLg&4zia6qV*^SgSket6TW%TYFVRl`p24+xVL6 z_;jyRVQ;J*MuEEg#=TL~OW14bh87qAQo6O|*#pLnw_4BuigCQ#sgzEXO}P(el>S?n z&WNNn;!i%^1%AsDuB8b>uCOzCZ|j}$ZK5V*fkVbq&dmj<1N^csciA$gvDCj-%*@MW zOhpD+JOmm@CeH6S+y7NlKhum$h>`0FL5N0(#_bq3-r{jf>P#IcvY(dHSH{;n*clg95why7L%z^wDKp%N8gG z@%>3&h7>%Bc|Ts~Oh0Y$cV3U#lA3zY_nrq=m>aM1w@ndCe#>14ft%p|ACBkus9p%0 z;f5Jzi~xAtxnBF^*@TWdt~>o~QCysJdOR*0#^mT};(dKs5@r?3uv(4wx_UYJ#9wPW zHElnJlSw4&nFp#IHt`mgOT{L|5)IN9ok|U61j^!&m9k^Q-i;oisA`TaYTRq~`zXe^ zy0=W`xKnrPs?$Q{iwn$oi-%&l4*imsVQO{st7ze<37IT+>5IGO_}iS|;w}3gRd3#; zbFe;y7lhP;J01psN3CC^O<#$Mdn@d=#E`wO4(>s1^}7DcCbYZ>WT%F)t@+mtd!PAr z?zDlW6T5>R(mzZ7HFNiiw9jBm<^~bn*i??nPV|gjS`z_>@e`q`f(!5A)~+u19O2q; z`$J_D1eCG^2O$o}7zv@gKf0pXO=|#FGeU%{A}~NI$nY?ud@5;2^wh~ThIit~>G(xj z9M`lUe5p6aZH(@XiB0@`r@KE?IC_#g#PjOD5gUAchKH!XrV(w4&d40>u0d$g3@$nR z5diV~uM}ATtBJ4~$7U?D^tB=h+#ssBV$;@(X19ObTU~HW)pv!b*4DanF2x(yD?Raz zo9SuLS3~}8o`-fnkIUZqj#px&VE?=4GdJbyOx`d}*fy+Q|6m9qP#In@L z(5`Jp0ra;@ah9OPH_)Bl>!6GVBp75@FO86 z00i{Z+MFxm>urKkmqASq4TBjXm6jYc>0AeYEL`w)Z*{nMoEUt7?cBylN+3#Uxel_E6-g!K--qwrCM1OGPQFLB8v}=aaRa zj4*jpSDXlsoX|dZ$(jj#fF2$%SqY4^p+Y;q{S8HW3nTIDkJNwrzvLwBK?e%KV+M=u zsIs64nv*#49fFaOH)0{-F?Af;*HdK-(Ft=}@e8v8xd~-eJoX3-3l)r0kSFNXXH8uq zL)-t>q4N01g1bt~m1%&`%@!$pf*N#^5E5BUfi~v)(u(hZrOGUc+bTJZ_NN zHI>LqEJQ)y4S69S6LQ!Zo?!X zk<(wlL7SkGPa(hBpT+^=5FdHN9`P|UEouM0%KR8-o#(Kp$8PW<8~i?)D0u<8x2Xnu z`U#tRja%57nvbvYZj?PgJoEFn(iIkN^G6YYXFcydsAf9gHA9m@RnqaN0~+s;=ei}$ zjIvxD8Z%$!8V#lDm_hd^{(Uq4rXs3nb~bj@RiZsfOG#a(F^iD)Z|cU3{=eI)Z{q<{ zxOJm{jjB&40k6WDt?5>BD}hXUJ))oVw~$8$NRP#={C#lYkk79%CMoo0vSU_F_H2YE zh?IVZhO$8gVmM>CMB&~SKZ|dGmz;8vJV%e$s&Evv;VC?kvENh9lw|Jy{G-=6uEt@l zFECUVU&;Rl(QX=8>HAYy#VoncDrOzb?L`&mG&spr24YjjZ@6f`Kt&W1vuFkBHZBHb6)o7 z_xc%hCVDDI(C>4y+RgrL9hhO%kSW-%>~0V+2&MXd(BJCx{@W$Mp{syZ@L| z8fwixa%|gUNmA0}QXxwyR6!6$RCA@b2R->$;>c7<=cEkAX-q%j#iGZf*YZ(grZgR6 z|5V#}#@q*dg8+yWdG4}MC_UzKXkZrs0y0%8bL+Uie`k3Imql8b*nB?@ogK{N-W1;v zjE5)6_D8lDA)7_AL7y~RaEe845GgRdoWWW{k}Z`AKEKzv-A4@4CCC|4p7i6b2o=H| z7A{28k5?fsBJIjUtkCcTy7M-JjwQ@^NV|~^NXSb- zed3dq_RE$lJHMrmH?SWYENGbtRr|d2AaBMq4RMB8%m2NhSCgW@jdl;ru?#kc_k=g? zkY;GcW9*rS2u>qNq0C>JH+UVMU)UlwwOsltZmc9m2`BOG-?B0UI`{+A>*>26$>uJA2OxU;oAbGIv@pCyHR zds@HJ^n5Khx-(_;#N}%^>ej>ab#mIL?~mO*t2Uw!8}Gz*^H$>y;(jC8i>p;OXYb*A zXmKQVB&jdDd1PZufE~Q~onJ?+QmL)$n<3KPsLS)yn$V?r!K@lsvP~W|!Xyx?DOM!) zjcSpXO(xdEBx7SJ@w=_V`GRLlio?sCt&(IUM88xilVB(z6p<9G2U-X|?rNM%oLp5A zYhf~?`TPeLr=A+p-&$lrGR^%}L}I5dG*Q7b(n!WL|72S&c}~Gz8uWP~N?On(=dkI4 z6`1gsZm{XkxFYAMPM8BV=-)^K7+~;)`j;4nlp(08h`OUO1^oMkTWIo(Sz(-NYFE-2 zDt)`lF3El@*uN|ZczIp-*ZR?9yxp|<79*A43+G!-1^95$qn#h)UB(2N)y-tO_6lH@{7QQw}_KQ5<()yt_VteoT0H{F>XP zpuk2XsGT?U?ZEvl*gDdjFas0gRQEZ>Utr4cODM2+AGr4{I(bUw;3?G{JjV{R{d8mf zvbdffZh&pXD`RYo?Tk@IYNOp7*JwXP7D&cd6q~)^sOUPWJd>$P@Es9}rF=)hCVh@1 zNcdTBpnzB-Mtyai`vZVICwmr48EDNY_m*?;7&r< zN$w*LsHLk!{g`+@`YgFV^@KbIsnBNl^u6J~b6k4KgN4Rd{PJiC6hrOPoHm5Fu(Uo& zkXB<^#eUu66(OQhGXOjtHa#c=IK5Z`R7mS<2yl(O$sj(JGFZ0tAWXo?mXdfRR6NXx zw}i&fm4+jrAPNv93V`^M9O9sSo1Hd(Dzo*dUml`L)Tt>59gi`QdPSAIL-E-f%a!e| zPRI7ZgP&j`N|{0mhdUKEFkcM^#>R`2$=npGUI2L3CNVyA_L?CQKh&f9!A;2mO0DCdNGe_mzI0QSJ2OsjyM5TCMpA9$l zaO9(~-?O*uZNbG$D~!boc7i%jc~N{Cxm+*zgZzm{D9Xv6D*rO%)5KNFuo8CNGx4ug z)Q79_jytuzsJba2qB3t&G-9b6^9LA(o4)}3T^5`-$`a_%NsZOJwjv;g6zDnDg9iHo zqhLMR07XDoDXlOD3_DR0_tW$g(fBDCa%pu!*)S&%nkCs8X*loGJ~8F;XT0 z4rM8pJa>Giyvrpak}m7Veo+$jsv8`ZryGUM==qd6iY6@zvdVbujEX!|A@xZxxI0e< zJSl{W;1rN~R09()FC_#A{V@qsve3EuS{VL0J&f&G5`m*kE zts?;Z_(yB{b6vImp$tZbUb#{I(B_dtNk!hjd6x(&W%oI*7tnxSdu*iCr6487)W@(O zrM3rjc;G&%f`i=N)xiz!;u+dG`P0_z`*h-|Cdrt{JdP5DOB~9NCRB2{u)?2vz)WVWz-ps#65_M9f+L2{N9>__~7LJRzA9h8i*{fTN zoxZf7#~R**-ME)|W#t(g#DKtjIu5DjkxEVp(Rx*uG}BscC`c^m=m1I<(U@j3Tzt9a zk|Hyf_5_%|T@)1|nX(b`idh4!dM=>8*+|W>GXUv@>52~3`D^OOG?@B$3X>$F0!uu2 zYaF)EM(#ry&}5>0XyTms4HXTKPm@4`#)9{hv*J#E_Xmgo6gWi@uy#aL(iLjsTEnW2 zmpSMuXVQexPt1#t4-@0gR2n%S>m=y5FH&T5ECfjsa3Cj-OB8c2eb?ELa;)ydR+Wb- z?^0n3`gGY2XwF~)R^G}9bh`Dx1WCiN@;AFI9=PLkh&q} zl*u`eHOQR2wC#F}HDStvt?6qszcT2sw7S|d z%~U>xDf&>&eM$5BJW`V0U}ufD(qR2woQ*!g(p7m8xU^<&et<@R+?RmB!k{)VWoxD) zhmRM+s_X-oKxo+X^;dp{P7@dNnITYNH4FWv^VG>vlHbB?;<>nPAN{_ig!sE zvp*_{lO`Q9Ws$7n`1^RpC2S|AcGiLo*=YLvTf>&aV+hL2_aB0gvVB(hhz=ypOgP4f z;poS1sF6ohu=O|7_{jeC|H_bJ9*n&8%cPd$yAnj~Ew$4hsUI$n4N2HA(i`4OlRo%A zA&{l#dx^1mu7jF8;A+vG#&n!g=Ap*J)sfg_+iK0siokAYHa6`vI2vxx%5U9G)h{oW z1edm2lOBJ4yI!~??a=1j+_-m0to^<`lucgPTxk4s)jM%!mo*=m5uHaxk#UjQva-9n z$+8O+cU9siK}3h4=Kv3^MuYk!B0CG4J}~{a4rR2SC5nyU=PkHLF_b4G5A-^9d#4kI zB%MTjo}qQIv@Z4`q6Cu-sP((8P1g==u2=Iw#H|^3UW$9@HH_Vq|5#z6%^ls|(Vt{( zi{Z@tr0V9%m)wAXt6Q|IL#0DBjM`kByJNHiO;l!D(}`=!SKGKcv)VCEuQUYGp92?G zfcW@%vCkjwlWPxOPv4{JN;-eAk!yn3x$J390ly;Me_afHq>f16>B7Y3g(^qrrPUC@ zh^{zFs5gq|Hc@Mzwm;;x?zV|Fc0rLkQQ21}oc{a{i|GAEX;+mMJw+<-<($B)3Jf+|H>55Ys+zvNz;n0j-_ z$^gnzS!7ZayI`)}KJNb2NA{F($n49}$-xM;LTot12{g<4X+N#I44N6Eg#Tsrn7q<_ z^LK3fx-c0fT{}acD?51FIGJ@Z<`e1aTZPVJO9~oPHEC1%ogoc$A+P{smgx>p9jGB>{4xwZpB?baRvN#u1z^};9v00T2bUXk5$Mw^gK^* zj7Y~fLf&WU@_0|VGLiw6O#`o3!^`K`SX(4y3p@RjeSUSvii}5Ok#j`V59aIk2J8G@ z!7(FMe=mBbpCSS}myR^hVEYQh@uh*RMn&?-pf@~W7B6IM9)O9^)*+E##dnouI(dm{6|XgLq1Aqpv(e2QqLv*}G?6^ZS{O{l!}1qk+;$E` zEw)UZTW`j$Z%h8*#7YI-jAg3F<~(>X$+ok9%LAVR^?*|O2Hrn_hmDQxRMnd)yGCtk zvcE0o^0JmLi<8?=k80mq);Uj)raT*^2%B{QP*hf7Vz~-4v7_^lB|PcGD;O5q<$u=h zC*MH6!R@jHiw3@7OBm|g&-bG*2A_L>TG=J^hM_$0OqV*POnae5`P;NHVQw!!Rnuy z78X@sf49VFZoSHSo|ATuiLyX6B)*fouW($~!PdwF{#mYpwI8R^ft&m&iz}kkgG5<2 zp3R_OEKYG(>W3PpOOt^gR#@Ui6u=Vf!#Q5!f{OlLL-gC`Ioc1LgjBM_{)pxwZ2k|Z zv}EZh^2lnm7v87`VKAr$46NcoLcc4>kEkia8;r(3zDkopS%c>JQ)?tFw3&7XF>~Le zicZ;II(5)L`1&IdzvVQsuzC>UOB|ZzHP)t5lgnF*h%mk~;{l<^!Il%pRo^a6 ziJBY+jA&+JqG&QPl@Q#wRh?g>9WX*12*OI?Nv)n7ew)2sk>?o?ZTEw4>jy(5U%{0m zMuXI(tgS;5-eK9FH(olYoGF_XRyi3^^%Hz)#n1~!k-$29Vzs+aP(&Nl*C;m{5zTNRX|U^$rZTX-D){q7S1v-aV5T5Y#j6%koq{Sj0UDTarIW4Dr2w8i zyj$BSZ}#r>ZhGyJ1!9W6imWUi@CDq-#hMGrAOAq?cYTY;ToN z>d)08%oyFL6w`+B2VHYBm;tsyBZ^({JvG**Th9(p41pfI>XGyj)aZp%kPIBcr>TbO zzBRfWGNP#76*A(_y8Jb(-OD!2n1#>-6PU8{$=YlQY&UQ#OEdBxDyUpiM$23Ku7lpe ziIYUWZPa?rHBxZcrso+0W^&4#m}oqhe$wXVAn-qETR=%`5BlF}%?e|P2lO1tzWto5 zw6RdDAV=m(LP1z0&v0v{&=~)oI1{R-F0?CL(qWk{!G#T3G*z8hY)fUL--gHrFQA$T zr|FAzS}uspA^=&R6obnsqxwZuPFtt?xC8?y1$`a~Rq34KR0qYh@mM7#2|OqEQF{lc zLppA9pwTa*+f$>n{?U>lxscZMo8$TPq)bs0=TEPVj_uk-Z>>G;sHi8C+YJVYPP5h| zqAkZmp$cbqGr7FjST_WCCBRL#ZDINuQg{!prVyq+tcMc&|CJpoAg+DI6;unzojo5 z5?zV|17BzZ4hmc}*tm8r{M)JnTMv78KpKTTV6S`Quk>bgn?7ctDbXJFI4MUZN zo(S7Pz9q~-8DoAYqR}E%Lzm{fLBr5|SA^zLoB%vDee&3rIU}_vQ@BX>i2Y@i==nx+ z$zs>ZY!9eNE;`c`BT6;>(C-5Xv{oycF5H)|Cq#mUfW&n2W&Mq(ZRWQ(fZ$&tiU0p# z@2!IBih^y?jXS~JosGK&cXx;24gmrL4ess|+&#F4;IeTKPVnFf5`wM=x%JMe_jT&j zyLIb+oK+M>v4K4p-K*D}v%5!=UEwXgV9SmSVtszMkA+fL5w<)t0u#)v73YQrDILvxL=`9l(J2>^A{^O`Hv&IrxkfA!-r@Mc&xtB zKnkoOrjeVwek#1=m)(-Es+&bDG7r^yKUH^=N%NogS&j$YFN-1jV+opy=<3{nmpZUR zEH0RWAgEB~d{=0EmdAGVCmIB7QFAcd`2v#2)YE;hrgGhp@6WS&CCF7o!_sBPy7MPK zfb{}>SMzpj`f>!R^EHr^kvS1B0#G{5GVts*mcL zlvUJ}KS%MQTwujCLF&XsLolRBjvYRt*HimBO$Di|Kl!2yJE(I)`ac5m#TS4)!DE*o z7n#f+G{uhs9L%sg_6lYWsOY*EkGdz6ME!Vz;HcetcO-41{=PiYT{0Yu)NOq&hs2Pm z9F|C##3{Fc1RW{$dOLKmO`vb*^~X)aB2#kGL@ZK(*yNI}f7mD^NmEb0xe z`~a=6f4^if-VKf(t$BNuc)e#e`O)}0W)x3}uAWvU1r=Q;9{lfIF|N|+eS_Hu+Hwum z?wpeG=8y_!a&`U}Nm=v3D86yl5}hTy4f2n#>j(g--&V(QhL_p?1$P;ADD?^KJ^O=; z38&8@#KmPa$IA8#<~t#l^j%V_Y#w?t5oIu+QnI71qvh49eLnEq-mX_CVzNvFF12vI zTuv5s_iw(2n@u+$bV^!i;Z~}}w&y_MW5rc_VfCSmb2n!maXh1i=RWm;^r&hU(jpk7XH$G!}HmEKV}THYXo@GNCz z;ZDhgNcVZpo_|Hbl+*&z1vE=0G;`ZB738CP@~)D~xJs4^*l-=$M$RZKdTH940*&eW z{G+tx$HUKO4%RK39`BJ`>O9g366U`<>xwF&xGq$!@oes&nFjZ2Y@L00W+)yESonDu zjddxmhAB{!s715HGNfPagH!%i5vd}>PZ|+Xd(a~DnY;~3k_Sdi{bP*Lq8?ZO@vs$E z8=a@Nk2Y&o(JOJ(lv_xGyB zQp*p(QGl1{F=K0-<4jP=tF%>fu4pNjsqV3gSNAuhg9O1WM>5x{CGG7K2mGI#- zCUzor4F=~Bhc~Y@msbI|S5RPPyC1t_8q^^%%hTi}B@{ojOGOQT0o;3T19gq-D)ni)v083-v}J`(9dJ!n2}h{Z8}H=FIjsC`pwH4Q=_vwTe_pN z>-SQ_LT|9-%ZYsmfx(IKWI7t%SH#J#OW$HdbIv8J%AeWVl6nuE$jf-ulHYE`>AVZr z3h^1$g-@xl!HNlGL`y{ptrOX`cedt`JQE~C2^$W+z#$y|U~<`{&O!by-?izC?P6t& zBg^Gw?C^_hE7^A0;CWx3Pkl`S*14-q7cs;GDMOuw+et&@W8|L%q&+-{_88Jc*s8x# z$A{=Gn1H@g57=Lv`&S>Tg?naf=aw&?fmOLjiXVYP*=CdqNhi>J@)BgTj8>q4JVtkWpQx2n6~_DC15&Q-`twe%cr_IY3c=HMsvj+)dC1yS-c^rxMYf)Klr3zmA0-?pGj1-EPXZ*^-}aaskwUTw&eDuk)^HMA<16MxGqsijPq7O#fvaTijTFux*<}bVvq$1mBB*#q-W&df|oOv z-?jcIQ8u35-6c^ z7&zA064I#fT8M;^LvK*RGO;u;j8tH8MM3bOP`p%b6@PD~RX*he0|gV)9|gsc1PUg~ zH=q9H(e zastHKk!I;e8e#x_VVU8`4--s^3T(u%I5~L~C`yU=K14S7#A{-yCo{Qr`mi74Xc~AV z<|3oDDm|g2itB%aipR5J6NAGKn2_W0-!J|?PB7-+?9*nlj-aulJc^r4;aE%(8d}48 z_;(WQ&)?MF3M6=e7R{W#+YWttT(-%{hJd?@8H8^!F#W|mc!D9w%d&hfB&!LQP_H=Y;pEW(<61};u(e^ zbeto&tR5f^8Ox~JYQNYCTmdUV1z3U&#xYl!?6e!E#GjE?NGnuLV=zP6ry)W zjU)SIP?7hwME+N!ak@+B%u5(BPE}IPpzYue58V}HWr7Ir6~aR0>JLR~q(y6kOG#l~ z(wL@$LgbAi74P&IKvR|Ij3i||qAU8xkQ;`?h7^nXz60)3EjPma=h1GJy~0`TO>rpd z&2OIFbtOgle{QZH61qjnk2do;@9|#j=D9rS z-k-F2*zk4#{OmSGp0JznTwl9V<SX!>RWXBa8&O*Q>m-4VyvxD^4|# zl>)nB^qC}CDqDk&)rgymhYdegu`-vklxkJ_R%G~?znaiCODUlfsVwO79;p*n?`uor zO;;oDgpPY3EQY0;+~_fwgU7lP{8RItQ@Ki+EA{04i!?d-Wi#>IFo5_QhW!nbalyYT zmp4=o=Q-M$YET@?jQn=`y1pM-B$c%jD?+vCqXtXFwUo)=3RCmU>LNHg?#n$iY#PeH z-f%Rf?mOHA?rsMgd)~EA`m?qcKNn?kxn|KVPp3kqMhYs*7oP7Ez3f31SFVpr>haYRm8ognm{n{;>AK+)K#; zO^QUiapuc}mYVicYu@c|s>(EIqdD23FrnuBGEjYn5fTJ?!b#c|4!mG^!4K-$IEX=` z>S5JnVvRfH$Zt61mjr}}IQCKntW2_^O$-l;wW3t=o<|VOZNy{TdN%qSih*Zt=4ki7 zKT2_N(c^6y3>gex5x!i{;uVYxdazO4S?&hGX=b9O(i3YN#c~a;~(c9`?U5=Uf{_S6- zzHsIh4xY?G6M>=BqcjO zax57%-NI57#`iQD`B0U1ZYrk#?EKdL|9!oJQv!it z@6#=+4ch?#SSfBbd}i`}itVuw-2^NMPd6XJxvbs?{99N4uTKvvs=nJW$+oVX`d#6D zGm&28$OFqKMl)G55sVkUXVBi)2xc5*2Z#S3=JpQ`{sf-VVf7}4!q#KMx)o4BORAAU zo9X$IIwT{Qj}mdEPEHpHy?h|W@zJl^Y&C?(dKW?Bue@lmi9iwzh)^I@%F#hL4jd4? zByu1&Osq+N8$Bs%qiXB&uH3ih-9RNInbQzaS(74YHC!kx*=lMTQ<1I3IVN%z1RivWC<9 zF=(jo&?_vkl;A%dzKmt(#@B{k!gCVbep0yE>cUBzkW3uHe%@~2OKBWYK?tW6kll*4 zdwAMc(fZ*>{j#r^T=svp>W&bWvq$&p3^c{}M>i{E6awssV|j)^-`W*Q#|g%in6EdJ zWR~a{#bvOFVs6U>Ah;54IMhBEMDcy2WAta92=yG+VYMAmf;kv%T-0z$pUW(T$r9JG zTH$2_d_>713o3#dZ*o!fy_hmt$5@Ej9aWylXR7Hhz75qg1BIwAmN94#-ZQpfVw^WL zE}yYFW>u;KNJaHDWkX)Ug$W7cRq+{kK{GQhx~3(S{BDW1+JiH1tQz_|dqkFW=suhz zq**SF-lCD&wjb7Dy)q0ez4w1{?UVV(HPJ(&k-vX$CvUzwa9nx0*Tl6YwM=Ve>x}#^ zlJ&Mty3M_Kckwa=)#NUrTXbVnFh%WTKL`=Z8Uz4^~Ixy7krN7{JI1?TcBxpgE4Ba!AcUlA;~iTtCAaf-pDgy|k#ZCq2_a z;fVKbL{rvzedgH6hQHy6b@-6J(wX1!wEbge^ahE&5JA8W`-!Qyqxh^r7XUa+o+y`$ zzYVBtT-4M{_nE#0fG?Hdej{%#PHz4NaFo7`0Y7i4GFrz0Y_0>oZT)G;FO>P#QpJn~ z0ta2nAC*i-XoS6JQ@;%GBAe};fO?sxq>^!t2_r#%dowB#HmF~WElFrPu7ko6{0kgq zpGi|>xw*PQhD$Df{-WaWb&AFK0>i{vNs%gcFZ!-KK6>uJn@KAM1Cyy#V-4w>JJuhM zsGEREw_l;P{NkH;y%xy7{f$NP*&aB13oPk}#OUm8AT~@4Tpp$<8$ZmZi26sV)r_#Y zRN3V4<~s<2wD^ha|7G>5$RVvWui$7h=m#D>Yq2r8I8u|PL+c@UvUSRue>)~>wetCO z#FxxQOC_D4 zE`)s`o1ij&IzaY%(XNA0Uw*Rt$BgELYG9a9+HWdSY@YNH{$*WGT_ttyeqps57#v$< zXi#vZFh2u0JyZRaIZpDcgL}Sd1{h=tS8GlYkHrao<}!u>CcIl&tL)HWh4gHIwmP4qW6{cFuDp3h(?2{JfZ;D#co?0hw#8pji)kwKKl z_oj!}C2hH``;|B{Iz^E=x&ibJs{MFzdkc@1vQ49ww;IdMVjGk4l?!}#l)J}bm5La}J%ytP*wH>F6_rN`g2fBcD!?+Yj zgmI~M67gr%p5r5pTWzib-e(6&+vQL1A3kK{e!<{)$7b6jJJ!LX9Y&LqL^G$@fNF=9 zmO}(L_7PT->lGXhxuM%19q-VOXu)&bNt*PDH1;c897jsZE&O$s!QN7NIGU;Q)}6Ro z9D!-;KTACv@Qa`KP3t01J+~C+Cr)v5qFFRO0z77#aY~TocsF|*XNB%-k&1YjfW+YV z(N?=K0T@h%cwQz?9m_RyoOQQg#S`ba9CVgRSyxC+n4#;B zdF@C2W^hRuUad+;_L+CGwI6m-Km+r@`=uJyH^YX=s~d})#Gu7xJr>qVBg4N@E_zYQ z+G%q^M%t&UniMBAYcr0Ea@@Yr>FZ#p!E-LY7BHP(mmgpdB5$sH8X(%`5-+&5IRfqJ z0iwktMP>Ea`1N+Mb(^9EaUp)yR$zb>zN?U)gJ|${$M1&%{U^Ik!uQUNpK!HOtQs5k zLNNWa(Tv<*i4!D;eB1Q&j*!~4xI$5qcJ;XMMvc0@%{urLCPesy*T8=J8um&zETk}_ zHtwhX!UCnO`w2GiJS9VfoF(pxEr$b*Vyl?wN5Dx5A7Ut9g^7VuqFDFHI0(5iUHFB$ zsg3`hZN4qWAp{zmB_R!M5{8lAi8>|fjG+-)qCXry41QGZp#Spuxo+O}$b)WBJFHs1 zt@cA>F6zJJv;sM&{i=+QG%A;IR$?(>3~*XwRLup{`80BAr;Sj(MYP}hG9)d75N3(7 zaAQ(&rOm7z-4K9l4r`H6#@Z@}Gzr|nG89L`@KYF~m)4TDHF)?^VN36dIDPE@PScIY z+N{w0^QHlDFdaUEpXE%eae>Xz|Td*e*fk1DU-7+K*Z2AMdi$?;Bn-(6b zfE=4J3M~&|B0(+v!cuIE3JNp%5U7=)8um3!bf_3C@VIy1#rzckv!3TS1^O2Q5&9Pa zd*onT*n0awiiOCmCL-hfhFsD~8Nu@7U9LhV#g_-*@mxzzsSvK-GpUO;hFQ zh@c9D#pB;}F-NklsufRP*ok8V&k)th6_j@<)0SEE1jAi>>2VU6`}! zwNP|=ixS9e4ViF~=&j}^X%wHHJcJFMOj~Lulfx=eR<1aqDwa?$JJSyuY%sF^K=>K>Fq9$5QnxANNnIhHU{?dRxaIZXCDx z_h)ufmyUUug}pH%jd(vq#H&{l!QDBgE7q;O>j-U+X2-Q~aG(@?^NAZa>aQS1&>p9= z=W6uAD|1EUC0MN{UQ>^}Rd{P_N%H-OT-NKDcddcRlrHczU}6~rOU|0m0M%kDWT~ME zXaqzGL~h^246n$=EabDH}tpgXI(xMHht zX>gp@>aofPyN|ljrq}oD8y!*?fmi6?l${i1y=U*knNpTsBGwTreqn zOJZLdV@lB;cJC5B9J^fj-w-JT)JCXzs6nVms6z^;Kua|m_Cfe~XUAx(`54`698+6I zH8FGaq;`GU(Mp#LeYs42W4d{6u@yeSIP8kXqZXx-q)sHq(qb#8>%5c`o9d@5ZN5rp z8|!~(=&ih()-G_ynNafvh+5J1_KGdsE2&a3*054_ruI$lDs+yst{Y`Fr!MbQJ{`Z* z-{Ot;%QRsw8Jt-bu*sVur{U)>l`D0VEE*ERC6giewZ=8`wIBD2r4-^zuHwhb+;f#8 z5M9o`l@YCBe_y1!%fG=k(H#3@<&8~;pC&jRUF$OHzQ0jeM(Jfyyu|1@_P2+5FO;I6rNrG)Vw=Y+nYGq4gYb(!OaXPofV+se+-g>dzO~+IA zq_p?wtF`Z*)=EQi503$Zkyb|Ab~WXP6X(;@m~c0}cAK)EJ77-eU^(*}h3uk3JJH5P zw~zI0`AvGdL#~}$xF$x?Lr-Z79{!YHedB#yZroz^opf2UqCu8n(EMUaMqzB3<{G9# z`b&$g`5-uL)k@s}+0Zg@02Rx9CxMxo-xfiM1P?N-#ut+<&EjpX#R+~a0KlsP4LWAtb>Qx&9 zUx~w_4B_lI8I$_WA_=})7?ND4OO2bZ_0i4ORMyz)rE!r;m9xlj-lJxU)^gSq`c*{0 zP3xx~&#lj`)Fga&Ajz|c8)-EbuWi9dQWLHb>Tb>6pd=OWGBmVlcKQ2DyE&kNtU=6V zcsv*O7G4I!h24>Z)h@ z6&wkj(A0s5kJ{E<-F>J78<2NpcH>{2xA#3bb6PC*&xaZyd=x1Pr3eRHPtm{a=8Ky$ zXWlC9X37e`*k0%F4~3)SWJ?JXTQN^0~*ldEl(T2JY7^TjYZpN`DDjfbdhSX zN@nG%FQOL1BSy^B!D6!SGSX8tWVM5%!BFy+NyzsjqHDyTM=97F!n9tA!z3#vJJ9J1 z?Ud4`rCL6t9ZA0lW*5^NRoxhG;jHZDx&`h6fK>+`u`BM4yO!3V=*v6tMkWfn2-;yu zBxwq2IEn(^SZ{UFvBjQSou6!MKv{&W%$@ooc?-Ujt2Cap>zDW0QDX?O87(D4Fugpb zG4fR)Br6w?XPYQxbUBK!^IoD?bE3EVkHM}(N6T9DP13MkmI)hN_d z5aBUl2QdQlPK%Q%0+v{7nJgbE{Lz`Ic{AE6q0wr$&&e?aq2xUmYCR!c%-4o)MdyZ3 zAG=5X-bYa@@Y^=x(`YJ0`9iV}-jOfg0gv6f()w4x%Ou*<$X-V%S;JRwf@C##J38#@ z{N)2Tv-j)6$A{zJwK6`U|9MirRhdS*hIEe{onNfqs5NMRz~)0Vk69-%Gbadui4;e~ zBN#*q_3#VA;72ACCLY2LrddpEn%hiK*0G?OR$l8yC!(FsXft7-8f^G4!z6qFR=l$%tZ~AAQ5&j+71(u8R z`gB^XS-FWeAYemPs$rMi0+-q%ZR0#kWW+vUG!VlY6+48OD%j}zD{)q2zGZV7VzQ&0 zq7u|pQt|7>X=++r`i4WsWWP@-r&f4<3<&hx(1H|+X2hD}hF2o6`6eod(!VEaamP>4Bj`YR98W?)xO#I2H~cXp{Y^6&CD-nsI;g7YOS4xZx_lZ{IY z*Pan~7K1u_+O1{K&(pX$#zXg)^ShqOL- zfV8C0ToQF@?%%0pMrw}!kt$rVO5~;pR0bSRk7{68W$e0!iKt(}C6b#_O|4I%YQdD? z*iBJE*bppM&QNok_1uj_eoLtu5mq<0J-3~IvJJSeUtE`mS<1?K?DBzz7B3hhS1e^? z8!dC{*6!7kR6^+a3odkJ3MecpbfG{Ex~*$WW+4Xfe?U8a-3fLTO^S1Dpq~J|Isuv(<5ELA3a}JSjxHk~*?yWnW#ci1c^f+_wREKNWgz zqat{Dd~d-r_w3;!w8gSk0Qxy_Y+igU>6L+p)afiP5RktGt3^T?#xhiWMf)w!`9T3a8RHJi*zSN@;jg zozAu7qR8?FP2xUXn+`9HhZQ>DhK769IxM1&u2kwsF-;@7%8J1rJ`BRb%wweG%*vsG zsgv4>Gv!n~>FtqCm)E78!0rBIS+j>yeyOm+o>A)*@3{2}ZjeSna8tw={&DrYCw%^0 zwPrl#L7|+Dd6>o?L_Go0?`*NsLC4G5C;?yb&gajU=PV-4hxX(2fF2g2(0<=wV`Gt* zf{`%4`d?C0IBB?P!3Rqxgnp$@z^9(J=4nx7t)|n*+R@pJ_iT%v;}w(C4PXpVL=b5A zBN4+gr#-F!hN2$!653Z=)nK2Y$}ghdd%OeAKa)-vK489r>!-80Jmww1$cNzRb-Iym z8a0xa)NV%FwWmrSkU8nh7%Y<^wlezn*xvlTquCIbZ=!$;#Q>#_P9JpkJZaVPy<=js zUpCC#k+aKvkvZZ~D;3vh7}B2E`j$}s2Y9~rH`ExFB-DsrBpk~g2BA^I!pP5ViKCU9 z#kq3+ViIJ&YRaLl;1O{6fGt2`uT&TwMtID=F^M}vV)yED?Nm*xV+Z{x>V~OxXuj|M zidUPVE9<`HD=c+#8YW3;z?^0ZxK9fq43b(f8gmP%COFRZ@AR8~|Dfd4vA6%&vpAbO z>O`1H8M)nGfX*;5BEvQpvSD6~(3x!yf}sFW^5VbW8CHQXfbV5vwEKA*Hdnozhbt(* zDEd0(FygH$8y*Xy0PasJE$+&bMHLi&dY9}4(dbf(uf%;NPvL!CF69KoPs!@Yte0Ld z+)XDz2c~Y12FCw+*O(XzjGm9=TqK5;oQ7kxHZod&dCt9Y()7t`LW}B`$}bs zO1In2qadXTk$92(_`5lW-WHPB2PTH4W!Q05E!-NL$|Jo{eR34rfwl0B_E&!WHoh<-N(K~dwD zpt4YbxTvAeck_KDjP7uu$~{=yXIEHigTpkIU#+^$y@1|tGBEkpr7g!v*XIwa-j~|! z?y#OJFaE!+XSDQXw|@49emmEbP2E7v!QZb*x6og-4+b}o9JAqWw=hzBwT5Y#)H#Js= z!x>&Tc<-i5CC7A|TVGAg?}p9DL?Vcnd{kHQYSkRx8oVi!Pndh1*+R;vl&R&dBB5|m z>q5RB1PtsGqh*^1Xx{Vl=Xb|KiVZIf4fL#kdjC4=@uyrj72Y?Es)Y=rl>A*2Y8p?_p|@a663b)w-Q|1ny`|;oEn{w>kxwUG&(>2o zeRwUh^!FaE1gW$uqPHls1u;!wBh|7UZ-T)xzAxwBwV;5XmtWf<}ehGsQ}u--KL$LNk$0Co^JXTVIM|}ef;EM z{MegA`=f8Cb%tq*$P5fGMZ?G)g)^B^#%8ZBXGrGlGt4?Lm|5!#xo@6mr?JhH-}^}V zoFv{``8}ZrNQlg1!b85*p}^;XUCWaXKqy#({0uIv_x}-y3`q9dC1JTm$a;0ANF})KiKOrYkZvoDq2b ztW7$}WLag-wAo^%rE87A--(Mv>|FMF=;5KL*gVa@lA0rPju8L4C0kylAs$Jg#@!zp=@@15eo zP|NL~Bg+${-0-Qtq59a&Qa1X_KvgTef=eS;tlJUsj=tazK`w^>k{E-DCHqI3N9tYt zga`T)SF<~QN7+bysE6RU`7!Y1I@{w&t-|NIv3#rEqs}H}ZZfEt(3uhLR%vHfog4+V z;eZMv_!>bX0#Y==a{4PUYO23l@j|B^m!P393pI!aeeWmj3I3wd`;^^4x?D_3?f8iX zt~>JlG2^eLf1Od!P&#X{G72L_u^E@}kHO7U@`1(Ot4X5-n0K=Ag#WVmNJaObsv98I@gIv$a&P?ZXrOYgS66lOm|CN| zmNe75mNAv0bIm`Wcp4828I~N%ekJZJxx7hV-T)jT?YN81R;#)a>Gx9bNU*SDYEfdX z51|_yDV{hqlK`|CYTL=Dm?Z+{i@V?NZ}d!EL{J&B%nEk~0=z~Y3BnKIV&G%b?UJ@Z z%kJzN&05ydk)SDJ-dR zyHvAb!{i4j#;RnaZ$RbD=aD?eH%g_Q?9O0gi(5CtdE{0biYRC$4e#II= z%*NEsH2Q9jfNwx@7~!+Ps3YA@^#vKT0dW!{x|`}P8`|A=+q}eec$)8SH=R$1RwyeO zYdR=4G?MxU@q1qpweC!;@6_D~j#qFKWSCPcCSLQw3FbDPU6?r+y3z!F5sR3-z=O=_ z5Q`|V)}4QE)%9}jZ^6IH@KlA;2y}{VdqOa-Ng%7{rppydU4TG7>E@=@hYrcwr_8G2 z#(LWZTQbx?qoVX3hnoBHRoAE@NT4-T+O-d|H7;9JLnHJ0E> zlInbII+N*-Xv+l5uTFCJ$RuM@N6+@X( zfZ!xgfQ8Z*snnCk7M{$h(pPXdR4507b^R!K9@g5H0KlU$*1ae_QB&gZ-k^z==VU$M zUGe!(4|SamZ4ihckQ&(n7p#QS6ADF;`nwR+2-ipwrZ0*UcVq|~fxpDZ{W$Tlkd=|0 zoYwA}u`ut+HEmkAzGu_jmdw$85QNS!zI3)AUUKNNK98_+QSeL?n)QS7mS8#X?$Nnr zp+4)gF^{xFF;(W8N}$e*Rm}$?bD<|z?;nL+vsECd0u0+pCze{@CJeQM)|*(-y`KiPuHf&O;wP-RcD9nVHlhw{Dek97h~<_G{)GnQH{($XPhvRFKlh(BySL z@zi8@8bKb|Ja{YQq!9{UT@GL{lt~|6TUg)omMM`{;@`~xu4WUu$j(-M%b(9qD@I;y zu!67U#vaqpQD2UTKDN7r1 znQ%BuL|oDl!FWjz!w4}I6CpuZjT#%dyWi2tkR-Ab_&I_k@fLO()uA%K3#?}Rda|f> zD;4#f9?v>?X*jv)>@oRPyYa>TMtJ?%?Q72wtKQl1<=>o}n5*>4_lMqkOPFAGmB*lI zHOxL3ne!6FZ7g2of7%s4MHcXSpZnRLy{+&q!=O-5b5G>I2J6f<)w^QgLUn{2!cbj; z*k})uVkzD_q@t?9ai#`IBW^$xeP)z9eOlfxme;;zeZY4b-oJ?Q+OSGB$E39158^C4 z>Lx;Egy}PRhgmo7`vGG59#iCF!k4Ho-WE!*hIGID)A>FjvyZOvX%7ZPBUW2F|dQ{f4Njl*-g7 z1Jx}iItU(z+V2EEC;*g<0-gFrh0<1gX7r(4mgo3$>3N!mz$_}=@f|~{js-2#bw;XI z6M|Sx@UTV`u^DzLNO(?Tq>X#g726;ek^8(BnWt-v&OY#Kn8s-9VSCf^2RtgrJ!>$c zQuNN^Tuyd}$7kDrg(TeM^MX?^>T;R>>+B*86gf|=Jwu#n#3sY6?-o6zk;|alap6b^ zhIKwrMHznDdg8UmKP%llqm5!jB~-_Dx)L$D0IswPhS?o)%_ym->Mj7WVZ<~{No0lU z66+sLpQC2q+)>O3B4QfpwbGEJZ8H>?xCv1P)qJbr#z&(i9?LX7$u2X8bUL*!l)d7Dn-`KXBLVz>&|#xvxF@^rb~26vwob zGTMSN4!G+wNPl__BwFNL&m|_1(8U$P#bfi84uu*^9cH+sKla)R8^AOGyuayMyDn;7 zl)P^eDog`4KpVj4Sl_sl@E2kQsv)*ZzBKOiI+;KtK*J`Uht0YDlFDoN!7%U85*c@e)0Wj7jjr4}MyJt~G0ZX+svOV|{7 zGxx&&q6mT#j+bs5(?J_Dj=V&pmGGH`jj{*gF2F6r?aM)GBJvT~*-60B6GB&yC2T^d ztRNk385f-)v~*Bmbs2udfgEmru~$sOX0l84)tHkJ^{vGkM)0yeQi+0a$@W}-Wot|r zeU>+&?<1X*)J(75J`Xp{K@Cy2S4?NUy?c;Bl3~dj;4ioAc;azY zE7HSn-hjd?|D{;ts3b2Z$-IYDb#<+YDCRc`I;oNthK+mkvJz)z{Xlu zWK}_;3YNw^_T{!^iOW@Fbi*c|C2l?j%93+7KYDqIV|?fV&i16yQPudPksHP|D+%I- zr-9CdXZ4^Z*aU>>WV#aJ8$cOC!oV=_p==1g`HJ%IQXmfUdYLvTf?7Y>yG;Z(a&R=a z+8JGOFNpYG$w4Z4R3jv3U@X0Fu8NL!pwdLY^R3GF@dC$;c6cm~m?e6vP}47Ie~D}g z$wh5(d_OzxO9cR0MIBRSz2`fzsBqMFjfTNz>$9!Rh1&!E)lvu(#zv!TGr3eOv_VK^E?x#7^q~KH%Vr5JB@P#0oQ>y=_ z5vslX{_kFGCClzV%JWgkpEZiG$d;%NqRQEmFp3_Ll?4vx20cBcIXARpU$R->xfu1e z_Z>=CwYt(STE?27E%eRxJ4^G;b!iDQ<&d<4E^mdj7a71Ym5S|D%%GsDUhju-^3S~cc|KAZixg3X>$m=gAXwYb_@fB(Vp7C%;Hm&>DA_%eWGClKDs%`9 zSxQi(DD%=eKU!%aHF9L&1(inm#&Eha=HW`9cwd-71{(T1?$GTWp#+@9cX@1dtzX|E zzV&AO>t@dLsjQ(R*T9I6F?O}ZE`x#T@%F0|Wk$Da<mC~)tySaYCB5G{#5mA;ujGp)dG zdaBlND5SfgIZ+iThC}C*If+c5t9&cg1{I^RO3EWmwTM}7Tj~Ed$A={W&x2MB9c(yh zXYaVVVDWZ3&l^>#Dr`ZClYv^I(lgZw4ubk3uKl2+_*U1%PD`0JX9kIGOssgq4PWa6 z3);-9Rkz4vz~?3du${h2cZSA<&F`O$N!lZKiqo~h9BHLsJK#Ap@p9K>r>`JRG_9eb zN$~hTEBXK50iZ!p;rdR)r>5bBboG+K-^y>UdkWX)%I$sAYB#IJS-*s}!n1$rjo0@6t@3qg zOyMudXD=%=E0P`P&x>WGwL7p8dv7vCBo4{3L2%(;MbLT0%$nuL8*IW(=^XO%T{K-j z+odEyCK{%aEzmzz={+7jq?+IKaLf-*Ja0MW!q7KcJIER1eTGS(44(Ro@|F|(eR`rX z^xH=C!Ly#OHVLN!Qc(=cOtGi@y=+%9j3rnQs$)WT!#QQA7v6fOrnuX`a=Cp{j_h`m z(TTsnjHt^-wQ84;C*w=n`NZAV403A@pRr)4h+8YFdJ;RU=ZAvlPc+o3H?=6#`Yd5X zI~|{2{`)Z?9bI@M9Zdcl0n!1?5u|J)1(k#(9JB~Mv6Pg06c7|2* z({L_(Fn(5eq`LX9P(-Mj?*xdphK10DBYAMRSeOQ+L=2S6V^Z64$W5p-E{#yVcOXd+qWq*{|f zA+o3<66SSE{E6s7>NQVNc9h#c`8Cfxqgz`y7f&Jg61Z2B&3>le)KrcR5 z!L@W7?03DJgoK@GyE@0*5=Pw1@&qvde)iXQu3DK|^1JX}KN3apUvPe+70%`(_NQoV zy&Fg}?s7ZoW$gXV>Ge|#i|7Nje;SRDQU`@TG0dlOgLQj#(inb>*Fa*(>CnHO*E>Ic zbv$-hvyJahjgCuudrpaNoUz{GQdYajiY{BQlGw&)E zd4*zWa4kg#ODw_s+*nhP6Y_}E#+z+yFzT#u5IV0u=ak6@n5$RfDCi~a4@{zEBhm_v zvV>P%D}W-%ECcTPEI(hSig+mWQm9rUsF|r?0cCzCU=Kwcs*x+TuiE%Md z=+M}8`nr{a0 zx|P%x#@f+@+-*myw( z2kKnUi*7aZ|KaE=1ESo5=+fPdba#VvE*;Vh(%l`>ozmUSN~d(!QUU@30@4kNgyg>E z{pZKw%q%8|J;Vw}#0k zWn9m#%%AFgeVuV~?*D$+F5LcPS-ewc6a1ppj;CkT*PQ^6-ndvw!=PJRi*kA>Ao_j- z{G>Z&%OZr6hhl>NKA0D-S7r7|NsyalpHqA0rUru$7bSyBL)+$!IC07y!VOC3{$K3I z&}fWlX}4G;)ToHD7*tC7jSoKG^OZ7pq7wqXTcR}O9 z@c9#?$h&8nU#CI@0BnJL!wq?d;WUB$q$riG%(*p_dnr*Wxw=_1^%Wd=E;KpOmj*S@ zK96J$Zk!lpOYT{b{0yX2Q%1a~*QT{Z1$1;2t|uYMLHHeb&i{=y)OcC15A~pOxx{l@ z7P^;a7oN1!t~DBkYBQ%WzZvChh4JHtOwP*I$c2zs%*t#&NGIMt|G48GQ36pQawkiad_-P5Kg2m1?u{kHJ@zvb6{vz4y7`{#Edjkl27 z&e8U{_kFgI&yc>`z$L@pAW(~BzcyTLm#$_elfrOLN`vwLtuGuZyu0P>A55@fHSHM? z_n=y#Uj8hxE~k{7Ud%`=q+}MlQf!tCg^P^38XGQBHmC&NhYbh}Gv9HiK9ahO!sGI) zGY4sJaE3s>FXetOhCp69(ljUhw4u{$=Nr9uS9neOb}+wa*@^g;a#WOX(Q~FFsGr;;ju|lc zda~-{ZyTYv+fLoCq!5Ek(@^tSosT*fWlG-iQgtks<36kwbDPHT(0X^PskZ`ojiX_U z;E3U8e(aj@m99$;B1z0DyAJ?Y6zsNC$25T0%luTX?Xh8NPYw6pPjPgy!15sGebNe; zt#tNZnEDzX&$}%`*OAN6tgVFmS+|qpwF!9?(~GWJ>n-JYDNiisUPr)*l(m-}$D~3@ z)|QZqj0~*LT;GPUBWBwl036$Y;F2kjLStqLdnHqz!b-U!@fhUWZBR%F2>IS2!cNR2 zYBVR>Phc5d$rdJx`z=V@dt<}Ilp5ygG8~BrTEqUF{R-C;Q1;Z7Xl90SM?Bne`0%*z z;HygG%Vgf$%9>MKFo;G9lPWvNGiU1&LAGmA=V7}K{jFMz%24iB&Akq(3NoogIFgC( zYY^I%GAWC6_?m=3Ekt3%ez*(Arj==lErTR;V*9FsCRB22XZ23%IWT8@j3Adp`f=3l z9b=LtH@L(mvVAXpfT+Sn7qQJyA~oiD(4(j0$dSmuRkf?OTbUG1yp~-8OlbEDqg_)z zP4v-RYPT%`&lBe2seiaml%WX1f*RT^cGbu%Il65(-CYx;P1P#y|dU4 zdsp|6&)`M@=KS7YUQ(X_3q4X!tb7fya^!dfqX0S}jVtZ0IhdXw-4>m-JKrrq53&X=l7NI=nQI ziFp1X7r#9|1HpOwTqTb%$@y;FYb98~>$zwT5MrI$uf4=$O_YWtF{E`%=W zeO}Z^h$MU+8GN99mFMTJu8`k{OJ`lBL?PLT*15z&Dg}iwNXp1*!9A~Zk6KZ$twqSp z`1=Dw5A%KZDvKf4xoEUI_*L={l@wVxcq$S2*!?$f-jph+ho0sV1cG9a6WlvXP5F@z$eY>u{48AQE49oh-0~8tE`pLdIXR z(oy*tbTktu&WVwc)&FquVIVo<79yxkixOad1hK_jb`<#tFxw7B0C-qJ~){=gDlFw~T3adX32M?_0j@ z16&y)a#K=>X1jCLW82XoFD{QMf{2n2uyGHOt@=?rmNaHL*4rn-0hv#PQewz8I?$>9 z!Y>uQ-4vnvkNQ_xn8D?^OmTsdF;tvc{n{)?*&=T#S4z>tqYZe)T_%HHkqXP!lK+W{Ubekv0+4~iv8%$BDIk;akp`qeb z?t`DIA=NhzoH(PbD66VlC4(t6l-NXqAsm9(Rmeydiljebm3y;*l`55_jn;BwAhKCv z3BDQ|)(f3V-M(DaXy!3Rsuk4v>?H;89?rO%^BZyPRNM_yMPSo_oT(epzVsGCZ((i5 zO&7bKEJbcnViu<4lnoID#@*}@)!u5TTPdpQFkK?H4AW)S7X>H31bU^Guf zCGw@BSl&}pUE#{}kEH}!Ysn4OFtXo8Ht$l>-oTAg)^;D722f=E)pLupf8gju)j-K%~Y$xAREo) zWs>nt?|LFU4-joXwPGkbl0qcLs%Eb8beO*Vnc!PJQ914o9#YCVH~Q?vYm(2qS|#&+ z+K%{1m&*L1IP0=bLDdSlbGX6hW2M+*@%4|;F@weEG6fIpu7ICr%cmaadiO7;eM_8p z>dpbdk+b-Ep`rw7u0i7zAckRU z$)@gwo$YfRrxAG7e;ms!!~D1u<$M46(Y;e3FMv)ros#o+qx)+fO$b3eoXobll1ez} zoBA-eMt629`2+}=h&GhzXK%z4$eI;yCBN+XCRT|*ixmIgpDX(oOel4=UDzSa)G^aRf> zcjk*zG+qh@4EIOI`qgMV9a5a8zcn95lf>!&k19hV;<&citk9SI;cS_xt5vq1A6Db~ zS=(0z&lhsM3oHKi*@XBNMx89{&co!nT=EATqU?GWra0?_zI416NslR`0pn1-J1E*<3457o={`+ z9LkqPacQW?nt^1@(lAOqM`d-fRUcYTlT6}pl%hd&093_(=h-O~Cr*!#;VT*M>5>xk zH9DXNAsYz-M`i18V?)tfnLC4W3Vm*>MJW|L0a@0dkA5y>;eSFlkCYTEqo?slCPXG8bEy(dyt8J(%A?Nk#1X8dR5k}(f7`FwirbbrrbTaSR zTz8UA{wf{MG-o8NqjyWit;eNjfKEm%MmL}b>yM5=#Ngcp+wFr6qgOlRz%pG%1jUep zA_8IG7AKq0$GiB@IKc&)>!)(0KkB10-mNO^SZQ}KpsO_j0E z7<>vq!5p)VPz41xRL!ievzO98wQnhROUJ$2ggK2tXHCk7GAf`XNL@=xmj?` z&=v;4GfDq&hb^npL9w1kFd8gjBu=xYwIM8V96VvNERmi-+lQf<(H$i+wKE`*xp#`> z+QFY;wmVk7*$N|>0bp;@gd-f6e@P9e1?zGmynoO+>CyWV*CKB z<{*pQ?I-U~EtFR&kSEd@&wy0#9jbwg)x&?uNm1D;2y_?D>-LIaR>9FC42D9jfIKE@ zA^H&*5a>7!SlDG8ys2*^#A2;{VbOpPU+-YHFGOI=T}xFOLc19Anz`!ot$pi^x-5qk z{yot$=+Af9VEVC zulx8sAi`*f*9U!z&^_lxO}t;^vQul_eTD&( zPXT+lEF30Aup3`NL7UhEHD(F$3`1Ap%*Gvn@!oZ(iD3f)=qw2gt62%O-)&~~YRPl9 zF6M4$&KS3KRy7Q9;3HVv<+Bbg8$p)_AJi40i2LqjLp`99;z|Tn4s)gh$2X8W#MYvhhJP1Ul z@Y;xO8TgruOxs8TvZW`7CIyell+(1ER2Xl?eZWkIFHPm%7Zmu#*fXVeI$CdUk_pB3 z`WQA2ft^S0g%nY!E^RO7EvmyDtPW#EBh#)#(=z8kCcS=-ig@?~dtC|U0Q>3?Q8w#@ z!|p!E#sRb={q43ooZ^C7lx!u2RjL?tHyp`3RE5e|BNP%=k!0Dxcj)I>l#{=PL>x~P z?5Z*qOFHm=izlR*CjnyVl)S$k%Sh$uOX{(gBfqHDA(Nh9crto+UOi(I6Dzp8P=%A# z0KK`@j-l1{rVMtjqTv6#O)lFx;X(h%=&Sl#`r6EBxdf!E=#F#w(vf)Xz@RVSF>^9l z3?O)!*m1BWPMz4c?2Z%724~_hv-2=7k!0?QJabt2)8t>s_Sni5THsdyGxI^K2S|71 zSJvV?VLiMP;R8K->Hxhipt6>xo`0L2M90^Wby=f!9Aawa?9tz+#+|G~Y6iQte}le< zR62)DSLnDKYPwtn-$UL~&YNMqXjpFg+vdsBF#S3;yfm5U*3|>##w9lQvO1{SHu*u^ zmDA>m^7Ny)YrHdCyyUxvg<*w8_c#C%NrB%=orsTv36`a*X+J%kPeVVoZuf?-{F3F( zCyjR@t<5K?P8ZtKxH`_RJ?)*U@iBqfY~Gn?>_KF!+6@MAmN>j9Yhqwa%#i1;p`9O> zR%XAlD#J_7ihTGe{vRpXakXKB)rNBVbZCjmfR8*t<>h4f@KMu>^PHXfSjJ)4v4n-j zAk5p&e!u;XaH(9kAH!Dm1dlk`_b@&E-#g!4&2qj3UOgYF%&W|K&CKxzu5+6G8DH(H zWAi|ImlXJ0dVn~MU(h->nn?nZK_<-c+46hgM1p9gnL$?WQH`cWzNiy_h|9%R?RB4v zE##7y_wI`C?#D|u>RZb3v%)=Ypz|V~JRqEgE-B*0L#4iS$hti7HGFk###514;OKlZ zHNKW6-P1>w6Zg0q~$>mRYRUTzu1tg0%RGJP30U8mI#Mc7e^!m9W^)4ibhBy|7@D~8WE zMXC<_r{q;1BVBm%H*h3Wc$)W6A!LRX3{@s>%Z@`xL#`ELo2NNf7}Y8FGGFgZC*3;x zKyiKnkjekhVCgvH->FwRhMpFON^C+`mErQ%$g#)11kJ*LuvM1r!w3`2H4)_1>mkJN zJPwKJC|(d3Cx*apG;H7Uhv@o6z=6X?enEGxGcnbBBG_i(98vfEI0Eb)hRP4w@8!bJ z?7?O4j{Lp+Rjp6nQjUpoZ(cIymE5KXcrQfZ0+_tQfGFK_9yJj@2;o1stYGgB{k zkLxT+4udtnEHK%ATe5R4Kai3%^-4aX%eW;uX2F0{7RD$0`vrcq(rR4u@cbusqT6SU zdgfHn*F+R8E9ZDXRaKI8GCx#LZfu)c=P=0aAdLJ(k+v|45L+0(1 zgZuSx&{bnR8k;eftnSE{VP8j5*4j#1Yq_iL6u5NOJEf1433jC6>F6$F%9CC)-0GE_ zQw<_^7bl%jv60%^yABz9{^#@kC9!BUQ^oIt(#`$ZobJd)%!cpx^*B2mj`!P-m2+$I z_jeZ9U6U3X(9_6b)RZ!9c-M3UoOi`RD|jRREUXE_>(v2v^j`!yfY ztP@BcdB-ySd^7^f(kT7IZ&uQQsX-zV6G-H1sA5_sJ(b3LAL=*s#jsH8OYOwXb8>-Q zkc%W!|GPhx-bf$e>hHU6tT^Q-qBssT96rw%7z`g&VW@31i$G68S%FcX!=PL&xSkISQ=k1t%IO?zmV6yy%4 zS=%1xhlKce2;|d{OfMyxkam@aB*?<8mp8M%LJB^E&50ga%~GHcXRQlj3=V=6>uyAz z*SQD)#@Gx-_>H&-N@37u{|IW)MrW0c1z3%i$9C`_!?|@3jpPwrcgqiM>wU4-E6(np zFAwP3G%Ib$%@|g}v|9Qr>yO&vZy$AI$Ff%UxN_It`j=o1MT~@=Eg=p#a2KX~te`|d zr=!j*-=a^4fLfX+7Y^*K$!4$JmzE1NAJkLGC7goObO^bSW`F-a0e!A6sy4O|vwEk%Q#fghkekk^7I3k`EHAWXb6ZYGgX@_}@ueL;OsfF!aYTReP< zNSZ?_zHEk*j2VyKT@c5uD|9-{2}48JN&P(+9|yw;@^e1bFQPaVHH%QuFel?N-b5=k zB5cV8Ve3T(1@y0bI6Lr+D8q57Jn;HEM9)cb++1M!@*lMtC zB=P7)23!hnQLPpp**Xo$34=RzhCmqMve_uGCA(dCBBgkC+`esko)9gROtPaM(?EMQ z;>H|kY!Ug1VJgLpb9hlBip>Br*l`uoy2-DdMefM=8>Dfyy`XMk0KMwtL2C57>bg86 zIwt%EKAOpfRSkN+nID;Hvq{s*C8pZ2Y*pI0Ta<|FJp!#3s?-?YazFL&-=h#@eO*4o zawONdiGCwanXL}@igHRHkomiMg!G=DR&VZrVzuz~(nNFa%gg1~hLf1RWf}8TmfVQf zre-(pL*V*Uds5*T>APADw(?ALBUcygt=(?nE@@|-Q=wH`;#RCL1#F%yI&%4hc6T+o zOHD!NwK2;>yoC{cXNPeNnaS*xJFo!Qt{+lZ8m<~-=+{GflhHJD0;AlT99Z$Z#7vU> zo`+f!{}&P_>TsJauK>iKQ%p-3-f9$i&Rrc#@)a!M=?UC<*E$vJX8(R2`>|l#r7KXT z?Sk4ft=3?8W~KtMCI=X{?5N(f6TZ^gl(b|IP&B^+lOkwNZYxdjUH?XR@W7cJs_MvgA~wbY8_JIwZ(c0H&08G~k939rW0kP))D+5?ZF3M<9z^ z!QyxP05*$ZXXGC+kJqAM0qbtk>6Xo7hN^s;6WP4qbL(}rCD+sO zDjQ+ZK`VP1P9+u=+%G4xh%x3r3|N)_nrB0xqc9C_XYLIaS7uk(OR98)*>IReM6!i? znurjyZ%>Fr$Xzl~Tf43})Pqb_6_t-HseY5J1ZhSB@owDPjfBg&OXu7*vlQ^Y%^F-; z+)x__C~=gOtQH3y{_*|c8~VFO+nlZ9PGpZye~4Pcdvwo_l4@<8XW!dza98nU2y1hf z&FHHLhaHp-wDnhVzF*7xS@n|FTJ zy3r{=kXugnoYvm3!Nbx4v(MV}wDBGztuV@%v`V-;T)8aT>vLh6t|cH8MZo5IDl8_-28NhU5Q!QI z8QlsM6LXr`5k|@$Q3Wd~9nceG)03PE03 zyVK<=+6o~D5wTPW6Bh}wLzrjiw*{H))7Sf5CsNoNV=MK+Z{K{s8-0X$)9T$pEUavP zP8O*A92Q(ssj)dby@OUu2(aJf)8GPs>dw&-y(ABfCh@4W6mh5|6%M0?1fJ$2O)|GY z_ZxA<^d1fCA9EA{-OIFx;Pq$BSJT)zKCH5!YUQEB$m~E?$(bR(U(qFQX?sav^Tcud zF27D3!NKMj#Em+`yvYNT72t4~If`_s6Lv^;eY?y4V2Kl2Jg0P^4x6*jjtW(zqr^RA zfNdKB8F~2^0p}UH5oP)>L`#|Sm>|UGoAAi}svlIISP6V0)u3`JRzxvon)(v<31FT1 z1`d~!IcsxZUIAdLG!3)=Qskg{8$AI>>=Y!FLQ{&EgAN$6z~z$Ur^DM+^yMbR4-E?a zOJjj!?XnX*@B}?Ewq%CeIoj5>hk28*7fSy8wj)V(95|02m0y;H3u{8QchUNO-5|5} zh^1D-$L1%9O1lhs21yDYESp#AAb_H{@Ql=~zt?J3>Z|SIqor&oX*+A{ezBsX>VRJL zEucH&q_W!O!0Mm$r^dr8Ku0(E?+{gI&?0rSf+7<8?T&~zL?m>b1msLEZK z$WA=tW@BBHRbU!%?m{u1P5F$I1@0aCQL2BzV|J4=i&bQGtMkI#uP1%19vwOqv4%xw`vMPL3j-P|7N@tdV)`MK5y+_D7D8IkYWBpV_x8 zrL#;ZCo@(#)}un!;F5f#mboOu*YKe!9l2s7umF3arT#F$dUbY5>y`V=##L3>o^;-@ zW0Xc9iG3;*d%QPy*pf0b<Eu zpm34(=QKIi1GSD0fQp&qt6X|}`K)W>>T^a^nwcW7oXC}6<2vlbbh|&^wMv4DgkV}q z^BX1~1|63Rc*j8WcLzKyKq`(5V^lM*4fqG3gc!=e&2fT`mSL=eK9PPz>2$t};qeB} zkZ$)(74O{5A3JMPMQAuq+?uHAYor$ZIN z>(q2+K|6{^W0j3#M%CBVFvmsW?sZnQD$j>09M}th~!4dU!Yk_God+?#r z-^cFRYSx!q8|SX}f~k8`Pe)r~Yd;Iv`E^jJDY1ULrZIISJu0!jBUzsVCwkqt!MCUq z(rVnz&_dl7x#fr}2vifh1iH$1cpB2;Tc4#7sHV{Ln@bU9yoW9Q#zc+~fpG7RPZzg_ z_b1C8dDe>LMAZaUQh5_}o&~eV%4E!glxHzT1rT6qSd!UmWdm}uizk839~EzzY1uCi z26{z~phbj2(DoP6i!AB2DUvkBmrD;2H!O2~$2^)LHF2iWbef|-oIo(_OLx~BaYU4X zy2tl3lCTP{j)Y`fw35d`^JJ;8I@(>ke!udNXR)xdD|{8&GGZ2{c!^JQBD5(jVle7- z%+Br&_a2I0YC|BOLEZh04G&P^MUFjFmIgsXPVfoBLBLB0)PCaS)-I~|w?H%iy2Ms< zU8jnF0UJ@fBKf-t7Fe>@EFUKflxDum>xHcRQDK$(XO0vrLK%R9ylvmY=>L_|%#>)F z-|x($FqayB-|Bz3GCb}$!ILE`SS+4f0@3HT*|!;x3IWtm=Jul85ItB6K*`6KN4k$R zw7dZZ(7O@aN!I6O0}S{;7PVr?gOUuYL0De_)J@=5E-7Ir2ie%%7g2Zw3emGmwd z^Z})om}8aq6QZ0|B)`KjitQjKAkc9KB*1({@saoEs%L7UGpLFuB-gP@`i(hJ3MJ_o zUH|xNvf*&^A@xNnDqf@+@>W*n5M3M;b~8~12g?IBK6d%5&vDnp>ki^Y}7WroaXzH7~ROF2zSOOJ(q z|H!`=mY=?Mq@U^qELL(STE4q4>bMnJ)oX;vod8qeu_a?%`=etZj}I|dS|*u@xhT#* z6r;M{;V|6$st&noGJy?h$r$wNPNrt`$nVTy;34Z1uya-3T z_P#t<{1|Gz*tt>lcr%KH1Mpo!zAZB`Z*XShS2-BeQKUI4`1(AL|K+3c&?Q-Z0)w+` z|AG-citRy`0L=nqDqyTio($74`Wj(gpyNk-4)ggy@5&0ekJ6t19{=1!dOq&=Tg~jQ z-;s7yZmEu3k@Sz5-rKW7j+`Y8=ip80*h0G;&nZg5CMX7gG+YWT_0{jtEyUn;1DREm zkg80{?ZT~hu6G;gg|P_1G!pG-rDnmH?yh7mD&%2956mCn%@n4geQLAOA_^KzZP@Wd zbUqcdSVU`_Mb_OUj}Jrt6sG<W+~$h+C!;X? zzR%4_N|$0Q1Jz?k0LyEhR9X6vAxu`fkk@@Fu9{gtwGyqb%(P2M1!X z)UGFX#|8f+?%BWk2E2}g&hO|&6e7Wtu|ah}3nFXRH{6RLP0j~X>f#=b+71#Z_};W=6zk8FkC%54htn!1`P0jBW)EQ^=7a zr^&&DbRn+mI>>C$KWsWj zp`Y!kzRHm&_6BXvs@;2RM_NCIlTNXpu+B_uPBMF7hDcVP)(Bd8<0S&g>H-O7=e8C{NVL^8N>9j3{`c@aqHKFfk%6e*RCR6N8v(s zsc+Ws4z?mclEfj)o22sTSheFiGjdyva*)$n&V#XLEn+tf|4ak}v@%{g`;%Cr`NM%L&%9#}l1)-1m@Ce+{&Mv(riqIQzz0^y0!ve#oPm!61 z(Q)Lkl4Ag6+>lyT$kp+6X+h~K4n78EGMArdxb)=V1G#2;N^2#FYY61I67twim;^bn z@=szR-dWIK&ijE9UU$=@&?C5m{d*CBhOEkrCMboC9Ik@p2?I~!M5fOsdR4|N`LUUJ zgp`1F)Q0f+scwo~fXBg@k9wah8!M%VEd6pnb|N7$k%X)N|8KcbDo63UdjlreVY7I= z-Cd$#H~i2`m<)PYYL#%(CNKt!dx|ubELlIR2aQX99#z<u+K@45= zj7TueHEitOfsCbKIX=Dzp7H|{6mch*chcXD?-%VZ%i>YPwCo3HuGBR;gDsQ_Ic(Rdb_g8XKEd|lqceoJ_bsId^VeFRm;IMvi8&DU& z<)I(iAt!j{!crz3876(xq3VY5dA#+_l)z*rj; zm8wh6(tpj;&uF(2exkDr_VYHYUDZhsK+18iwSbd2n4t$1B@^{CJk>hx>ssucoar4* zHv|Nv{ajkDx4rbT5)H#4)YjhqCu3&5N7sap1XnK)UgDqi90`&>Uu2cVn&K;Qb~G|3 zo4`T|8eIAg`Hub-7{KK3VUJt*%(RT70c07ZmP`@E|ChP-Mw};webv{w5p18pUkmDb zX{wFD{_gkNB@F_o^r-WkB z#&TqhLjsN9cXB)w#fdw^e7)cRkk?~)Z*0S5k9MmNSe*vvM>XW@2MF|L_%~N-Ar)Hv z=+$Rz@$thfB4uj0++b4@Bp_!T03vGVN~?8M83mxN{{J7EaTGmrCE`o)1vQV4D$iBl z%ZQYAr|Fm3f^izRgeU3ti&>2~Xc-ZlS0Dd<-`C)a`_061_z8Od`5@72dm;3+cb6?6 z#CtxIpK03DuIJ-OoM=MWfutwK(GjAkae@iiM}yH>r@@0Op${+ncycsJj4tF#VNU>1 zJ1;?oFCPZ*!t6=l5~LsqkP7=tp-_q7Nb@l?c|3CjNqR4~o|ESLeONFf5(3LXz z?Q(c9I025u?VmRVsnxRvjWY7rFPDF?9ArLo)0q&Nl(v>(@(}U(t-Qw>^V5wrhoNMY zP8MI=-nJg9*wvNO5X4JUisn$sG=B;-#rvt5+Y_;vy-|-rQUD-F4fFv1MBKF zh#O;%#{(&4jitj~JJk?+5dlj7oB~P2r~e zhhCPzJ9ATXrj4j~klVMvg+Mz0<=vm(Es3@FT0r#vjdjM%mx}w0&a$4l5bR)J#{jc! z4rmcW2VLsp*OZSFo=)GKG&^IHn}cc-Qyxas4;pri8Sq%~{Ii7@j-`&__l z|GW%-pcU@0s#2&PySwa`=3#zG>zxlKLd~^>JieuzF6H!NW#$?&04LA&k%+Z9SLZ{Tbwtq5x>h7ko@c8mN8FY`otfxOay zIb?aFc&V^n0Ko8Fox26FNlrda({z@RzLR3{VV`s)pJwvId$OnnH!5y>q~JpbYYC#Nx6)`(hfHH?)F^c7Y9q7#APk+dAZ(Ey^cnpcKgZ9!2;$o*gIXwSn8X4 z48u4}zCZF82OkJzsd1t3v{BPUX}AJkXl?ARkoZxy;r3LhIe@4a9LGqsd!%I zVZRlbZnTy|wbE;$rCf#lspic>2!ldyg2v3Bb~e;!#TU6t=>D%UT{`g26EeqcubdQ51X2HWBXWw}2t zyql1})yZ|RR%i#taTY*_p;yNV5fU(xrp+61v6LFoV9gQqoaMCd)bbiJ2y%+ZqvGB0 zCpg%I3|!^ILvg4%sn5Q7qxiCsfNnqmCk#BzPKg4h3{w-?SR69(-uVP-Sc!?+RJMa$ z+kvUcvx09s^~n9K<*4t^?XeFnMTjS0^|JYDe)7VB9Be`(#L7kpqyX|{)g7{8X#c*7 z20*kDbZrHE|50^~?&wdIGYvn9El_{z;0;_J6?a-M0Bl-grNG4;w`FQjzIH=E#z&u1 zVnRmm*U7ZY!qU>9z{x`3q~o*6fh+RKRLgZ{zW#9UBqrYqAr+5W5qEYu2OxnLf|6O^ zs6ic1ib}@5)NUy7uv}v|#;)wl2)#AygkB;T{+uehwX zc&LP{r8TeR`#vuvW0rU+AaaAhSf4YQ6q_zsS&O# z`2XXtmm1+w5Z5E{U*a-QAY*6(gqSb!Xi$lR5UFODVu+>C+)J`6kNQhuFgOwyVM-R;r5!=9xqum zr%q}3yR!y-(eFh=!GPLwf}cEv|8HncP#U>hnhwKn%}^HYTjEYSkBuU|ht9Skt2s~;)VHXvQBpg!Q%n=Uo2K!Iv^M1<gU}+FA>3 z&ag(lx>&5P);qq=zdU{WZm>|B*afciDeQbnk>7a7sXU(1L8WsE)-R~q>TQTXx5XNG zy6?2TyZBpsIqgQqr(%_CiimK%@CNRj7Kk|&JOVb+euVqF<0L_!84(td{PjTO&c-IB z3;K5V1N2{6OE`N8bUb_M5hId#(ky5*2GJv|y3}?=H||{}7|bh08Rh88*@nl*K6 zC6Ejg!>ZurSI9blB6a8}Ogib4c=QRd@nq_VOG(VA=@yF<3}vFJ64l+dIaJe3SIqku zTx|Q%=^)^E9>{kLQ2CjmE$GGYR^_hf9XtB&rV*Se<|l1fZhFhBIP-5HU!0DUIiu39aGA5x z=i0Zlr{8{mp;!04(CtVlye#yMxMNyS*`aPA{A&^2i@0K$q^3)f-YD8TNYUfhN9yqX zT0l6BUMRR}qJq@kK1x(&we|u$iyAt-6NWPc8YDWCgeUJQXA47Tv?Z?)I_=fZoqkBd zSi6ln)j;>SZ#Xep!ryXD+$w@cLgYVo2=_w4qYOw8ZPt}XNj3e{I56I?mMTA*(W6lZUGl4Wm&32#ey7^K|ge zoU+DmnF2d89J!2@PpYKo3;bxO8j+Y7A|mcV#3c=;_>kW2wZzheqM1FuyfO6$?K1s& zb)|n}4)WT5xA|+n-h!pw`Yoy#w8Ef8-2hp2E`~Wfzv#}w>Fg=G{^bS!_Z1&i%dQ3> zFXZB1$~ERPt(Zn&u2m#+v|+2xYjjWoM&+VI))84Ql8RBo6j=bw#14{d15e1{*aIQG zX{WIV1ej^{+>S?DezOmDADWyr8QH%WC(*z{^|>1%Y8xikWK;%${(+l!Ig`(o6b6$% zkc;m=OH{dT(FOPF_XB%x#9c8eRkZ_`MxPH|8Hv%U@KF&k6he_rQL^x1t^PVkqS~T` zn>VQ*3qSTQoVck3({$JdbP4m>tkGuBB>l+?6wVL!?D*r8Q;?0z(W5{WUN37ZIddrA zlm5kloN?r!B78?b%Mqm`bPeunY1FE-0aygjUWbNHmkfE`OB*#YPFiqRRlJO8&7;G& zW>a{3wWnC+B!6akb@lcQ+z!VK?sC6>+Vl0Mgc!smi~re3v9O)8(sq3|r^Bahz8vLs zQktcLFGb`c3xg~>W-ZN&H6iV`l_Z*n1SXXeW2{rNVdZs3H=HH8Nb{iXZD7zN9rmvO^%z_@^UMY&8}IpcSw8;a@Z3S6Q#QR%%qZ z5KvRWb=EjW98brgQEw?1Ob+r`B2|q3qz!w{4xV_o2&a85zkKGjs(Y5sIRxQvNJcq#z)wC@}a*a&hswJI)bE zxU9D)J$oF67_qs(5tl__Asue$xA^n0{W;{w{E5EvL(6PZfF*{Ii-t!r{KEq1r`25m ztKrE?9!8F7_Fk~1{HNmlmg^VwF$xlQtqZM2xnC)&^Dt9ka%f$#YTEmI&W@|fzTJrn z)!eA%bj^t@hn2YGSTI!tC4LtC`FE;x=FM3rs9jM+^OvdqksFtH~V%WfpOJB z7Ya=kZf=f=Gxh&ZM(W6$S5#OHxd77IAC6lhM>GaD4p33j&^+I{zy1ntVIkYp{iAjD z-8Gkl!dWwsa|Zr+_5;yUO2&$_kV~9J;xk-UtXB*z48y)>c&jMHTs>9)2us2>uCU*}J z@`v4ayFbgw z?}m}x*BY{rxC`VyqN zp3Z%@Wotkd_E#V8SKgtuETE2*7;DE=t;RuDCy$Y5{zg-TAW(W@u7?Onh!*m6i0X4u zSz;56;^!NyIh6h16w2%UJ|Pe#-w$AMC}P9wJ-s3@`M$CJPZuRkiM-o(W#x;KXAM#L z%6bw-eSW()EW1U(R%%e^?mEW)_9konR&G6+E81W`C#=DVtzm~_h(h;D(A9^&e^*o= zjIO+5>Rwb6mRDE}J}z$-xjyeoTtj-eg?42Zd_{^r5PjZU+xLmKm}t-+r%>XtvGftx zM@h|FA9~Iba*2NuTaxjkZ{@OuRLTOjxTjU_c^0d$oB+k}QM7?>hx{_x-yo&;wbBc@S?C*TxnYdoWsQ|K3w z@m(P@w%b&dg|?|I-oh--pfo5kCcx#SKdKKw_tDiLjZGqTMo}Yz1Iyw;a@_`;|ZHIfy(#-gzLcC6H%R1&F>3RzeFd_igQ zgYw0!a%)Z2|E*wr8YS@+-4WEFA3vfAVJdb+@?pwE($Fsc{?Q2_m@*4GT!!aji}d!1 zy2r$)?L{?NRg|;@iB^?$tox*Dz{8GdQ*n)=#5co_85`^L9=JY1-vM_Ja{cvd`>0vd zp4XUWgT1Jr2f3H@CZ4txynG7z^5dy_7HM1;y6pV&@@3f!7FO>2m|~9f=ho*1>yJ|I z<-Z+h>SW>xpyDO7QBq3#vQg7OL}U479?Tg2s3n=^(Pea5_4?f!9QT8UVMQKs|IpBy zl(j+=U`Dj91jp-_Avx7$Q$zxT#BO3P+_0K{?gH!4D}x;^5I3)BXDo(3P0P`YB7sA# zdJMp4E@tcR4t~uJmB^%$;3I&^pR}*7+N^>U6u&_8n@dw}yu84gH+59iBLvInS<_cn zfOV0f#ObTtpSP&8Qfgy@1te#KJg=kF=!22pllw)op9Y(TKo~{;UO{dqzx5OG^tl1C z2dedDtu3gsq&Evz#fvkm?0=S0+wc1yX}oK>5)--5LGz(KwS4Sc|MA5qJi`WU@wkg+ zwG{Nb!*pf6w!&O?S$ao<1apx&m>ZR+6xW3Qa>@F~=&zyU(ig?p#PJe&WOkuZiCWGu z_K3gEC!Bc#pf_-0Z^Nitg@Mf|CIk zqP&rC&h?BJijAAdxH>#jpKnDIinGLbnn1H<$4pah!F((W44_4}SBnKkB-DY1#Js$^ zODqbCpCi(esgf~0=wJfz^zM1ZgT{AX8F(mCK$D54suil5HnPf^H(eBwFZ(yMj&x85 z*sser4i2p{Z&B5y*c0g2CkacjT1hl7qlcIwtTL8&%S_NnJ4US zy!9V@Zy6M4*L4jx(70=Wpp9#=V8PwpJ-E9Qg1b9SaEAcFHMj(K4}=@HKyU(t?rBmr z&--KMt?zrknt6Ub{iEr+it1jq_CDu2*Os+w*yY?r1ObzN6lS^nSQ33hpOy1Dr<=k% zK+BU60k-kf&_h(Fa4rCTcVv*yhL`Dg>?{gbnUNMFjsj>_ z>qaLQIwhXiv66+U7+9=>&S|pV(qcYr|FZ#h6JhrYxFm{))NaVc$cKAojk~FQ9}2mQ zC89drIYNwKoba2qguQB8C2BRcI71(5K`vUWyqZixMLB7%^tL~r)604)NUNMgSdhmw z$mG$eA|#+U_h-!=ozQ11rg-2e2ou#_Nb1OwR!(s;P!-Wpe@WgdA9OWy3>4GldE;D3 zpIwM#PN-1jO^x=?czQ8OJU^TVhHRmXSqjM^*Taj;l~9HzuH_F%{gAnc&n#R7cf8q0 zbp}aQR@PUdGUKE0KL-&=l=w85bjT~3R2Rc>g-6JeDb?BI)8Ho3Qwj|KFnSV&DAL}s zFFk3~2w`Qp63p_jk|XIp_I5MF2{^UBb6noyLdmZcbS(X-LYp&kJlA4lzwpO%Edh;E zc~{CXBlOeZcjq@JB$D%G=9#F~ak0l$F^s8t_AkUWlY{SSe#|RmV^ZI{t#gc2#1!2a zOWyO1JgF(X#)?8!TW005Dy+g)*RQy=D>WY&+_2&_9HfJZkz77^+B+q$5}+|N;{*%_ zk1bJu0U(aYlrcGtpp#Gm>~jxtAQ^TtFoknsCRj;^vtUu1Tw4s$+)Vx|h$lYO@4- zJZ`6;_o9arrmMFYGSrw;6Lb%2y+LGEU51}tz-_!^k#Xw=j{;_l&z$prJZ-HyKU69^ zt-3C0=}Tto2hJ;QG(7&)P5{Knqx9x2!W7ecP3oG&e8@9;l49J4bRDyI-=V{kRy7Js zjzv~`BdZ2=RO1u{yLNUy@;HXkI1B~s=H=(u@{0zbj^0}B(?08>)<;qI()x& zf2?dxaoxN9ZRze2$V9v7dv!uiF&Grhjzj%@y)_|0=3;v;#l00)o-RxrqhT&rGmdEJ ze#~iasa_JuwTIz%i+2}XKl=}lT>1_s&I@t$3`$s4F=JwI$mBLf%uXc)l#`j_3Zhy@ zuhG!?x2^a_-`~qs|M*p)(@oGh$EkFTI9Qj}#d@hBe9pHJ>e2pw25-VSqMt^Nn8PTD z6R~oaep!(@mB?Ez^%t0Bt0%tkwo2+z@Q`A~o=@6WLSM-Cn8KKU9?#lZiCvC;63qN< z372R-n5Glx!UE*z;19F&uJS$+?5d`{dI3jFJ4w_iCpQ(J&VJ}#r&N73f}0XMj7lM| zH!)zfqEb-vrB~#T{y>k$q9|CH`rV*choL}`Q6|J->fO&7I|}93Uui2m;G1Y%XW2Bl z_ej6z*CKX%IzH}uE2h9^~+`@8j%3{U=`3GRxL$(g> z+Ayq{0sB;5do>GFam?3OzCk+`^OQAWkvQD@8b(^W8p6Sts+Mq32IxqoiFHuQ1#q-Uhi0!tMJI^2-LGHbF;R-iStYR5;-#Rjq=Uz z4}|f7n7os0KYV0RiL!@220M08d7;KOoER*hg`~uYhT;a%s}ZFlbgh(MW!Gr6`%6VeI-Y5_?`HKH3$+$xuw{Zi+MAOX9N2-QmQ>bwy8Onb6E0RV_#o~W{=NG%hbDi2*p62yqi$+s$&!4Tf z1@e3J14}J`w$EDL#FTJ4=}^|8=(qfVl~)q4f?%!7)x!dPoVen;uoB&S`zFG*1*kvy z99bglf zG55qlL{YElnM;jRV;G3Cd9}TNcyPIuzc9y5d6_tW&^Mp%*qTbsMH4$@S%K4+hs#kI zF2sob3O>Z$6<(&}=oOt4eQX#bo?^QGub^`=_12nQFPp7(NLdptZDk|z8- z2p#U5o#u8rJ6%_8!Ye!W6Y&GaAMCO!t$Q zeXYsbr4<8Zt(kgDabqJXi(KcqfZIq=vp`?b`*b4~JcJh436|$d4sER^i=<^%h+@z@ zo5ZnRlrQ+E!|-~EvFyI4)4DpnGbF*ggBa8_oeoWz{w9T1oE+JF6Hvbsi;?AHWisEY z0qHFk6j&2?ploAGWJ-)+CpHfOq2XcF>9>;&y$C@6bxm>-4 z27GM505D2aJV6NJtp8EajMhI2RT1E9|0=S0-TU6Ery@a)L#u{$zP}JR1za6JGMAu( zR_uOxlDc%51&P4ex64&%$R1&NZE3zZITTQEmcpWdlTZd5O<^rYlVN3LGy;=SWi}ae z5>7C96eJ%d$D$>c1ZSv;$EzLuJ)!$iHWd%&`wnB+jeasD??m{aOOt_)5t8lRT(wlm zT(8w0BUb6d$|UT%sbL$_)4lN7@Gv~RdFgEwmES=N&Gcis8ZHjTFrK%Lm1l3`i9{ZX z+Rp3=Rd9a;iv(T)^wuE*O_7A~YZN?xp+p3K?tO7!Z_u;84@ScqKGQGI2}wZ@Md}DC zw9rSSR@J9J`*QGQjV)~7k6iw$X~j@}u5Q;E1e%tv5o=+&?SbGrW3bFvJcaSL*DqCf*F|H{p%bwI)uC7jPkFH9z67-h1J2bSdwO|-7l!&&9)C^h( z9H)?_0iiTbYmiWDP>{HeNW;BYHHXq7bgIWMw!kGsvMiMzZy-hB{QcB*5;x%_(CzIg zXI@Gxr(P!~I};%?(YX!nI(`Q+ClW8Ib{8j9bV8GCij^m95c-_>3!3@Sqf1{6EGfts z>Qn;#{W+1-^Q)1jLGmzq7X3=+Wrw>bGum$f7LQM_-typ5X<{MKVaZZea%IsiuyGV= zYXCxss^qIa-D@~ z+5q-?TPhwK&Y$&aXNSss{B=pC)i<#N9Ct>^vHlso2Zoq%3^e)?E3aP~sH99f;$WFL zE)~lZz3uD7PX-ejYjjnls2}T2bmAPiltw$1GgIDji1_UTO2-~M4Ho+=_MLDe30g?p z0B(H^vulx5lIVr}gL7kIC@|*ChPv59y=@T;li{T-$b{o}P~P==9^pt%NF@+2uu~@u z(60eQqNKhT_vKh=qytJN`t=-nFTMkjsrICFG(q9XytW=vi0qj${KFi{q{FqgmI|SfTWn@>=zCs+Zt$!bI8Nt)~53-qQQ3pPQ#%RdQ^} z@-)*N)S7PrVl>s#WU*_OFhy=TghY^vdLat!d?5!2PALULPN)IBmQzvl$20>Q_`x-l zlA(Rm+e ze1mFPe}Q6t(Z`M5xE8lP|0LdFHD`wtE0l_`#_EaOfX~&>mx?F0Wql^MP1N`T}W}8e6iE}P7Y^7 zcW>wu1iG6T^kuKKNBfP1u7J*9>I^Jr{n%kP zfL~uK64`yA=wWCcjpN1T24@rRrmLTRIIJ*Tn~im61_?~S(zDBpmt z2c(9SzfZ7@OHX{Ak#1b*nr5dh5+}Q7Tu()cMvCRnZpO=|2=6N&VMWwubw?lSuer*F z61E6Ue;F8FHw-*_)~0)YmX;0l-|&FRJ%00C!No_LQ?Gj#KAQ?i6t)h~%Bf{$mT8QM z_Kmg*R0Fg`;KsWBeeS}dUW0rmlhX{5w;D~s_lVB&F1FGRFVmvUr4_e6G$A>|O_$4w zvtO~<%CPf4kKp~<5NnYs-=Rpo>+~?Ps8Q;5X{c*spabT0o4Q;?KC!2vO4nYC`N-uf zS)i%yvZV<9m1a}d$+w2xd;9%yCNCU3a%<`-XwVy>6M^$M3Mw#YU-nmQttYNolO2C%Y)W5u4c8&97LOk?f$e)j z?KHd1IsQJvP26U1cX${e5*K8Eo{$=ZQt+%t&Ec zZ|eyfR1RtG)()aPD4t*Qln=3JvwUb+uSHvQ9vuB3pWQwOU9);0v~8Trl3&t@u^WIw zOG)Q)F&J4$FkgsMC%2GDRge$=(_*J>pJ`{*cx|n5c2MO~1}jnIYDu}aC9t)v*G(0^ z^ZFJUqAl|JI}s)!hi&*a+(>1{G?{kEguZwvAw+qZx70yf3k?2{&5WitJ5liZ-Mkf0 zRv`^BF47YojdLD@#jIEfg?}I&_qT#q3Y?rBiM57^ga<{n|>*XnJPUVaRw>T49oRNE|rt zE=bW_A^`PAwmkmu_~A*4M05}4{LnZ!xn=kXFTHZ@`LPXAxju3uEIU#uEOjz@R| z@QeKLf6HM1cYpt%g4zGwfBt`R{e?Ie002P_0DJu}zwtld{)?jj5p(}$;{Ljv>;JA< z|IOh3N5obC2i$*L?!OrLKm7C`m-{~??r)~>fBXLMZ(gha+2#IYRlooc00)4_{R;mr zq}u8qc{rv$T+#me;I$AWpCM)>Ah8P+rqKtWMzDmB4iv=>77#~6VdSEO2G7FHQWPct zk%>5dLm|IL9)M_Q2mpXO5P=3IcnbC`+bjb&576j0ffIxK4Ht?*WQMuj7k%-sjRZ~% z0D#v)VpJn8ghhnz19}*P3Dhv)sdy2B4{#7*@}x<@YU0F^+z4n|7^57c!IlHj8y&E( zg>G3J3E*&oBrOOl-S_%NFHFUFBf^Lxb>INvh>+?=wiL7ZnH4L zsexYT_pd1W(=3KTwWdCk0Z^sKpjzmsmWEeILpfI+s9Xz&G)%LVFW`E4rHG8KlY9Y^ z3$$iAz(W2R7d^f28zPy_s_OS)I0Z~O))_jx+N>(7d}(6`Lm{n_;B^#K^XhW2ZjpQmn^`1PvHwnFBISPKMTr6%0Ju$48Fw7>>D6HHR^J_XYRv$k- zTke;e7HP1$_en+5E@FY?w?U2~Z3Ef*jh^WUDTnG;f z6o@CYlxK7-xCbglW?QPGgty0};E~$9o)8d??bD|ED;Y^`Y|2q}bqERAAoC>BBfH_U zPgB9#dlc-7nw}aE7$(Y^@g}d4U=i=;}I0;caaY>>Zw^XA61);ePCWX4c<-^SSkV)p(hd6zi0;T33mC z`SI4fK=u+JZ~emI3A90}spyEDFg=5{96~RCAE#a$*klNpRe2~w>MpZp+P3b*wXr3#3`Uqd_KpW&{&sm1OPmpY-I<|}^BB|Q?-%y7xeuncX%lm^ zq+F)%?Yie$bz7HLj)Saxe1sk=!O>FG41UH2=Il4xa~UWT_p2wNi8wmU3_UV~_VCjC z>z!JFMmur>o^B;pvT7EHwpseENzDVdK!&ZUpYq>Y4G`Ul!I;b-x{}h?Pxon$^n2?S zsX>r5-wy5kP)p$)EfC`S+tV@?d7zjB`+n+O{x740CbIsuskIic*XN9q*x&-5t>6@Y=FNhBAXp~4&GXo4yIQ@%CU(5>%XC~{z!)KQX1 zOh~NPr{5`nv_{kF#*9QrGCO2o$BWMXGpG`<`8P~WN|`or);fq5)!?EJzu_^!rnZhg zOFQXKRcR%i<6oi`4HC}aTWKrmwNt5PjO5tK#?dMrUQcMfiUyHIx52uLiaRTw{g@Sb z%BALr2P|1As;JjzbUrr_bkI?wEU75xe`-m>a~z6X_IAka)gJyG1N_=(JdAOFBtqbQ_%=E^r>8*Sfk%^p6i><-{=wxWkchBYXFAKj3{)Eu9WUIs7{*V z0k+tn_GdkbO~_;^l~X!n#H{fdh^VYY@co9+o`zT(6A^l>)OIOyK|0JT2SNRtm~>18 z8fm6i>O0(vObk-r!o_A6id^l)fIDuoYYiDaxmN1vH5^9#g|jS?T^e+C+leO&nhGVF zTipI&)-)_E34AFWB*gyNzyKq(oZ|9p4RYicmlLAG%}nPr5Cg0r8`M?TPgOT@2c0-E zR#&=X8YsAF>W0d?#K>jB=OcxDIaAm)j6;fJOd7MwC&&9!>GZyg&E}(?Z(LVi)caZe z{iw(c0DwlNe8F6rB;yAP0&bdBd3>;iV60gmYDs3&Br_g!*dQUC8OODh96LOGrCV?x zMrpLfm$99r$yi`4VsQws6cCvpgr8r=RpDhLQQ&++@;1(m28_qC`y!$F{vS>m?a}X6+H3=@u*x#QyiRT5v^v4 zO=h8aZf~m8xAy8|2s>Z83QPge6|tFFvN>7WmJPaT#|1rVq~OKL7>_ec^3g z|Iv>x=EncwwbeLJ0#V)4cXS@L*$@Aeamq|7=hj`7Vcy<7`)9lr$OMI1nbn!^yB=LB zTBtzx5AW;zI4)4BPF97TY2l-4=pfncgqVgNbvd*xfYxAm24~}mVH~L=HU0Q%jiJ)H zHOtOS3f~jq&!(D3tH!M7T~0CFe_f7=(vWv7e-N1aUWumK>Nu&vp{C0crsH7j{7Oj` zT~TK$z&?qENvpB+h~o5K zm&1;{2OhSkHl+92s?QV0a2kbNUJA~Hhk*4%NwyeF5}>KgyM<65aAIp3nK_oRjFd_M z^tHi6<{U*z;q%r-Rmx;x#*xcN_rN9~GOOgZh$%m-8#Y`WJae)?V z+p|C+WixOVhTjO~uxs0gmvOy6%jL%;4a9Tt3FUkfl#_k!H_IJb5G>OK5%-~AJoF|pJl z`_;Qcvqt8%vBeF&y&Qr~@G={6qO3meG*#7uM>SYh{0!D1hi2f~c3Up)oVbI4oKbSp z*>5@OkB$l7VBb=2a*^gLaBHM6|A`psMBfnB&DSvXGUtUOk~5GSRRmr8#p01sLwJ1-e#vgjGv0{ZM{Om zB!)~0P&S3f^=1Z*=Mor*OpZrKcW=~E3YucXIvJoHI# zDgykU`L=XFY4m&9T^=bU#2?viEaWUUA&M=O)85c=Ydu zp6|BRFDD(Du(`@;=Z`v6@8f=WjUFf5}T6{-T zUW`W^3cQuuJw-uWdjZEoc|8NK(>HXNuOwa*FXNK$b(69gMNljeiidf13t3{D8|)x{ z&j|wK>i6DHd}fM|O>~tQUbpe~OA9(2V;&M`y#hrJ&{o(6~Oyk6EO0X&H5{(hMK#p;NLv|>n)Bb6RY#*Qp zdS8SO0Kuub32mnw5+v6b_Aa$+`AO6Y;;@e$`j=3F9KwNJW*jys2c{ zHZip`Q&r2DujW~LSDLl8F?os*D^gIo0S@6!C*RqY+cWh;DG}y+QJTjxwd04_2SVog z&Q!JG>{1zBLWCFMv?%=>m&-#{m0FPt_t#EpE1n6y2^g;}W#9Hf>(2aYyOXpuMx@_7 z&w!u5+ZJyRI8ajVwL;`t&#hx|>c@U$Ay$lv>pV!rFP34|2V~VO=6|cU?vC&6yKnsR z8^fSfe-d*mXp5tZn0C?W$))79=!jORXckTZN~Cn)r8TR0g`I+@s@ zP!MqyGnE;y??NTgz*9;|QjHrkrTFIp4SB3nI)$33-ZUjQ)xg`arZFOgs*d-k&oUii zwTw9UE3&fUt$*H4U&t}=Co^UdW<@rB#&&t|fkGsN;4E2$Iz*v=9=HGvh%rvDr>WxK zGVTP^wR5roV_(4eP)fAUkE9NlqDoR|h^vHfGs5*}2)E}{5Y-5<8V`vlG;!`o&{qHA zke?tlJ|(_s;(nXQVnDdFT1{2;`yDHMhLMi9K?908PK7pSSe?dFrBl!nrrCubun$+4 zMKhxpI=4EaZ6%upg|5d+l1POsh1M9iChNhWf+*F7e4wfD(P0BLrTO0%0hK5KZ7y`> zrb}X*$;k%TS z1M-{#sL6e&^7-V@1c4{NXMMy!d{8M1Ru4HbCv#>1@L;3?tGbH);eizuDFk~Olh~HO z4l`ZZ34h)0g}4GLO_ALt)3ccG zq}^8`?&IZJ?E=h%HSEf(8ftTNZ}iRk%`KbBO@#OoY+gV1SZ_Rk)+rYc4D61T%VxtlM= z_~*gk{x+EWI1F6vJ2Iq!AlMd6b8I2sp&cI^E^OB#6F^#LKPj#;y=hx-Gu#0E@u7WM zq&Ab!G4VQX;lN+xcM`>8PW*zrgIG7W-t83iw^C|C>2Bwx<%JKHvEW(I6ylS+KI!}M+yiw3KYwLDje|6v@^ z#AvUbY1dfzRBC?xj#o5L*k(cf2-~BYY_qzCahCbZ{WQ^Nu3o zbDBqvpG4I#jpdithik4=G7i~2f^b}3Ka9%O2=86X?z=NNqi$|SQsmD}sHk-vrgvXm zR|j~RFzWCO{34@VaDaru|8Q|m_l>D(5zQvSieG+8xM~aErK%ikJ=1%9#-N|GIV+;j z^y0vxj#L#?@_}SwYgkVhY)U%m!)GTCtjcQ_8-X&-xcrG}J3vLnhH-jl(q2Nz-q)oS zikKM9m8=9W#Mx2mPoKiH+CT8ZtHmbL;fz^j_VH8_GT~BSp@eE@b>&7``~IV|Qczr_ zX^Jy1gxKeCFd?lVE>X?#mA+JlpRtsRjDjQ{&y85IWq}pt$zyp7s_1|V8i=jtReA4( z|K4|0Vc~w5=~f=p<)HmT)Zm=M?N?hWsS*3d*ivM!T^MB%Jb3F{r(yFwbXZdt>a!9z z5IRh4e!~9(E`X9Ba!Rpmg2O;x*IR0yQlZZ<(iz^j&m$MOt7qJ`{Eyx1lU_Xs|C`K zKlh!8Qhw}dl%SdwqHBq9d3NH82#yI_o>L8uPsO@>g%?)x#!Hc0eq72uiBv+9mqMU# zY%^r3llA$;q1 z)5{KT&swMNZp%9!ZWlI}FwYN;-bzx!zK{F{ZMbK8Dd!-*?_e(83 za^`<#Ga{NwlHtR|G|P&M$^bph<7E)1FyJYxoVA1{DNF!N8IwJ_I5eNNj?;;Kf@Nuk zP+r>n?{X-m*sg1q8Ou&*u}H&xKSDLa(u``6!gg(IzW|+GU>4FUrsXagpK!j@$juZO zv-tVZq>Vl{wItpHOY(Jb^7pdWv)^Q4$J5mGP6bVL;u9UneAncA+v4KX1(=`@TvcJ0 z)v{5fUZmq(#TU8e$yRL}u;#|V3cF24MtM3S%_r;l_xmd=UWn*Op-Ar+IYMhvRl`UH zAWlI~FIH`*MCciYO*t10I_s=r3j;fQf1itE9P+3=jHbe=l8)!!L17MGc>2uUR5jNjQmi3w95<8&l4>9HskXZEjBg*JEzZ@%3n0Q}@Xb84)FbRe?R}T}kv}=p2_oY$?e^g)S=kS7m`sZp@h^dW# zX&E*E1)c%8m&+FqCz!#nI9tRlh{n_r(2x|ZgKA`oPK|4r>6M9!Br_vXlA9n8AYcSl zbfzxxNG+ONrkyS>n!GeSI$Ys`MpAm&o9q$JgsONm8U>x%5zag%3(_(sWtapOXYY}P zA58ck=5kw9_#%Z6zsLeeAs)!I$cTcQr=XGErJ!+Zr(pW0Grf$-po~djqex6l zAreDP-Gq>E0kA8iQa0YdXsXE^<(~<>bgG!O>$v{d<+#u!I>85C5?hG;*5oVvFH-6%bYGuLxC_}+hyU2g!Os6lp_W?HYyZk z0qadRA36gC+&N+lNabb3yQy6aCcc$p1@R;?CeMjm2uMZNH>k(gye}ofCFNhBV^Q0w zgQk;O{a12H`~Sz+3%F|C=qasRsd-+cHtW7B?dxqp=$ z{5P2Xb@|^6?tes_wvu+Vw1k=?2MZ2HY)D~nZpv%SLYZz^cXhkS*AYvLUO!buoK;St z>MNZ5`Xq?;*kDanW!xtvGf_K?4*EVzODF2Vro~!Yqj$pQX>oBj)l*YbajiKy(zaA8 zxM+^@xSsxtyRp|MbRlkd#y-RU}+HJn%prFn3>A9xu{_=`b8C5)! z{%O&P#KM5r_&I7wh)f^vetj=}l<#umC%^ef6}8i2c}g-H#YlBKBDr}kqaSTZ&6Hh( zjJ`6D-yKb=sx%M^OQ7IPZ28oLwW{%B@^XZo;>*Y+kP2T%Oy7|R685}m@0wL0N}yPv zd{|U3k!|A_NBGSAx6lwm^Of)eP)^xVg@nhygWj)hJtdbK`2EXa8ev+AV?6J=dF#r$ z`ocvc$Mmqtn72k(BQ?+jSUXYKoo6P`Fh;&PCtl2y-KCc-TNk z-nwt4lEK%>=e9}m7ng&wUhn?|^rvoeHx8YBF=;xMjw?dwo3AdN z_$GLH0@{-*b$mj@ny4wV(`k`3M9}2l#UUxu>6Pbq{8?~8tllf6H{f|Lv~!?}txZ;8 zyK{_}i|QYomz6=imRd#D(+12Zu6;w1i>nq}X%#9EY@|vtB$%p(u`A;ENoV0TT*BK@G*-OxY}EKa6RuY?rii@Ln|EiMiEYP+G!A6%$~$iJ$67kF zKh8DZXhV|>zp79UN-v)^6MVjIFfPX*QF)m={U49ukKcsV9-I z1wq6I*9=(oWdndQqbs@EnHzhJqQZQtkxl7`wEm|3^I}3j@*O{y?yjy3uYSUH~5X4i<)mf+$(w5gNl8WwKqLFUER}4(BhDPasu**-SD1=BYB5xD7!lbehP4JK zi>Ku-63!)3nxE28C3f6>|M*+nLbjlPvUqZ^C61N3-PK@VUP-R9_ ziK9@lkEeKzro31co5nwKI3r09zzVk4-e)r>_ipq@ibYK_J11Z8bc@2ZaqF{&+d)j? zcN_y#e-rzI5?&8tNdA_oHk_2K#9}hVc_BlYe@}NLoahYp8^Yq$yk^Vib1Dy7>4?@m zSPh*Kz;vM;%6qp0EBDqPym{bj=MlivAi#)>(fY1`m54kM)sGl8Q(XC$TDp3w!#(;7 ze44VlMln^^-}Qh?Whgk6w1$IF?fC}y!NBSpD+%vCG7WH@+k@qf%`Xqj-Mh(c=NV8v*lZgad(+(Zeze??L+Hswt zQ{>$xq67n9T#k|f;e7ROQ1LaND1xc?z4t4|_L8wi@Vo|=bMfw{nn$JTY9F!5&J$Co zfX3XuXYNdTEFFGna*X(hkl1BuR((0z68}jgb@R{0bX})M{$*V6^yKA=_@uErb0d5j z8?fXFqZvHneFUPVzI?ISDmEW{&cKwMA*-lyjkVQQZtYSBM$q#HTu0os?oa z1l<}Dp<}#Q6^{n3^Q^TmO+&ieoaCy-ck^pgam8lzoKwh<2c1TCS5Ma=^%(isTg2Rp zaesAsDi5GF-Ata!I{=ROR{5P5^BO~LbDE{mH=$bS>E2e*z{hP8?ed}yyVt;9YI5tg z%bfL5kS{)yVQk#C)N#bV@-w2?<68UZS-27@rqJYB{<(*@+ScVu$I@*dh0vMAP52Wp zyyI!D>;5*M5mJQhob&ol(345@6B;sIV(;J+bvdBUx9EWs2;uVKX{d)e;JMXYq(Ti8 zWK8YUv2d}_W3fbi47hPx6-mJClc~gyLC?xIG?1rS+$Ee2?O0PtkH&p>w?hy_MaU*<3m3ugj^rgeRVdbvrl>ZB%Dl)TT%~K5a$>-7cmB37@3eU;(xPv|$szM)i5}K0t zkC(ktGL%7SDBpYH)GmpwMum{saau@NF=Wikp`+#dPZfB``#5L3z&{!lwJGrS3C-|g zEEQPIeMLXR@tmlFK~XKZP+U-XHgj}F*@CoLgTTjo%I48QP1U!Si(7ou{l3S?HStMeV;Zi0F!ZnLh!eJoA z-lM=~`nQbZS5sHY3tz%fO~_$qA0pO*-_?jQ4h~|2!=o5T$w+HuU;N(K z|9yP0qM+V+R2h&NF*5N*Ypk(F!z1J%cc2Y76OWM>beeL^99P-w1=k0|y??bO4K!(e zT)-Wd?&%FdLt0^--C6G0nOEWN9F>>qscW{)@zJ&0X5bXv z|7Ed$ppvwK*BL?nAM}2mI#D(ubKfXpIZP-6Y{70hEvEsSZ zyBC*>qpZQZQt=1or>Ze)MrPEAHY*4!P}oB19lV+AXvp8^Xq+?{7}Bji{y2NsWZWgC zq6*MFvaTpwcu30PtfXbt^A*bUQ}A#U+LlyEfF9A7K@PktSU{YcP-R2N`lUUS3M;c_ zG5Oti4edbxaQ$0cYE_fkov17YqRx4$(X*_lWR7`HUL|P>+Go`-9G~}w;=}4kQy6bv zi2FowYQ5PypzyK8$?e@)Q5uJ(43AZBt(Fvydop5Z4CMaZQC{V8(ME&9iFZm{7fv`e z+vtR20;Hm#XX+hyfrO>}iQTk!3Fqsx)NftIBHHGkxu@TL<}p=QedTH-hG34GM?`}H z$Z=Bcm3t8^D=xL#d;aF(}AEmmI7K~e^<_%YlwziY_|Q19&c^*Qg4dhSo# z7jR!F0u=UP;{m3N)Q#q)1`uzAX&a-e*A&6iQE3RbN>LHw@wL?MELf2;@How;L#(~< z$)&nq-}S2n1HQ5kxzYlYd%+Iv6Gw)xub*`)M51bKQ?lBmyPaxiLW%RJ?Y4hoa3&Fi z;{({SLR<_#P744mj6j=N--ziFjs8iScdGpT;bM5p3*&?{ef?K%&RtgZUsY35L4!zVcrqD2k;vAM+fLz%GGFVDK zLdvNRLaA=GKa%P3NwvxQqxVgPw~gmrV91JnH3H9No3UG>m#f)*x;xX_9KD~e= zqP1_`C6-%YqMbA+wdl9X`@LT$xq5Z9|NlK zK~$8yBwA|O>(t8KRa_fS<`D!6>s1n$K`~tY-@5TMB7LSaXckqkI(Wy=xO(Gl$gOI} zB^*Vl6eH6+M&^yo-;h1Zv~^<{{Zku^dH(*AP6L78N6{RBR1PPLIK}Dz^}t-v@x`hH zAdj7cKMIJ#I0S{)>&lgW=I&pQsXpw7mJbe2*J@%zW3OdzOJ;Sn?Nn6+m&v!2T*R(v8X&RrwUlHb6KJgN7Ljgmymkd0iaw3FpblvS+t z)=`D_9%Ri|L6UkRWG(euwa-Q9z|!s9wzr`L|= z4Jw1)xY+V2J=1g=_N))AzoJ_*c|c)?OUhd3deQ8L4NLPi@VDtccJ`}3mbqT6N=V7v zcrG$9fmZFB=j}8Nomws*Iaw%O+CTWhW@9PjZ`#w1)SXW2JYfIxIj3m%T|8pde1nO7 zE}KUhe^C6x5W|oq5xv=Ros#6pL)BH1N>gNq(1s999c4spK_kM18rXP%m(Dl~ z$YrLl^qZ$T_ko01IUB$P1YAN=-}_KSLpEK#6yAkUO`Tm0yFEi^hwO0T69aG^rN@JM zp^prn_gc`&QXdTg>tcmOE><8%1EV*m3LTav!8Z;Kd#dWF8U@1dcAjGSbd5n(6%2dr zWYvQy5vU}kGJUI6X;{2yrFoP*;xxFUehXl$;3x*-&#Kqs$^OMdsVAlWqkoS}luby- z-u^PFlSb}nC??y@;%=NO+s(c~(2HI;n$;zePJ(z9-Rot;lssqLYf+iV$|#664@<6% znRwrmT@Nd0+o=;)CFr4OX`_sVHgL8Fj2IbR^`#y@TRTx6>*Vx6HW`E z&3i-~_reE{cb(dfc9L+U#qN!yWp;{^Bnrf?L{#N&e9TJPaA+D8x3FY9j5rmFiGkH= ze<@LD=KiDw>-6|cliWQMdgjxTva~daENSJL?&)JE8+qa^va~x8B(ggEF)lPh8(@RN zW!ZD@IDq0Bfy@Evh(kA`BkHNEGdkK+L^J*j+`G#&lwNM%p(CNG{%Jo_Ht$sk(yz=O zT7mFx>iw{S&gb_`-DK-lN50hydaObc?D^ajG`J`F=FTGOwBZu$js91*)tnNquB9gc zNhpI@$^+qi2(F|AR9<|Tcw4c~ruAmY7+vsrlIH|4Dag8f-9!pCm$k%RBxz3 z(l}OK&#HgteFf&JogF@molTa;ih z!iQ}vYGjfedJI!Ok%Vr@GU#x4B!z$hmk-1+Id)|>`Osopm7)o&;*rA|a}9vTFN?hlq9+>(&e`>k=)NVt!dN7#4M6&?vrlM_w0B)9Ly4Cv9e z8zIS)rHq*JBqwF_?6)auTsGmZhGQ`c%f4Z85}7T%M9CIE5^B$RA?^)J({hh#wjO{Y zO9nHsV>FbJ47eXnV|7(TcIoOTZPAw-=$Y2IER^lUCUt2ffH;++KNIaJnOMdSuVr^` zulXicyH*;nL@-R39$J;!qwTK^SImV;s~8a^767f&S4fc&mMA z*cB_Cq-|M;9S{@?eXQ+;sI##7T2sN8c+P6}4>Gl_GyG^?@B`cpI@M3&ZEF?0 z_+RH%-7TGi-ODLVa`)e7AWe{-kKNfIxm+#L9-pbXn@p(&kqCX;=Iy{k5!fRNEd8_v zd;8t~NVy3yD0uovS+Uku)JOOy7T#8f@>&)z6ty2w!*;dkZyW-LrmC)H0^A2!r5?bU ztIZ9`RgrC>GMNuC^U2%F_?|xDI8c_nAEULin(v7ROJwYqXYV(@xEwAmxm!x{xA04GAPa{+7|5K9^Bn6I0Oyu?(Xgu2=4Cg z1PSi$65JY>-~@LI7PO~Hy}57x+Kw`P4kCvXI3f42&Lx3q%aDl$S;yr#;n~GfU()v2o^W z=uUmbu3oqV8yIu6wEoL?(ogw&zUWPfm(IIhk{ z3xiEx;N2zCHG`_R0R%6mGnljTgwL#IT{^y|D2#!n8uiT+Iu(d>f)FN2f7m)OQO`K( zl7L=ndd|V4`?No=91SPgk52k2u^I5zBw5phH8sTib1q`v-ZWm-Q%^2|EJAW9!n+fi z5+Zg4*Qp4Bq9mO4QaqMGcQcDCrykH(u7Q3dm9Mj|wd}yv*1+{o7TH z5R2*NwE(oxCalsS;^qAWs#W~+S%i+ML{pUbsOXEtX4ES|Oq2%bQsDJ;mT{|KCjVlO zZuF821!0Weja8iGglHmh`5>_+fFPo6TDuvKFSl!*2b7Eb?ATb@Wwd|73jdWXPWol$jV)D^L|w;A^%;fHO^#zTFx-MrvJyU4HpZ zfc&EfHpU2(E!`pC^y{Hu<{`8_zLjDnAYKbO<_^snJTX1_R2ockP>sM~K0RLX zJ2*!Ia<>=EzA(K2#14a znkgH}SSSUph_=9_|Kl? zKY957+q?e}_kW*F{$D=X|F6N3LP0z6$bg7~ozaG;|DbCNUdHe&XsI!p-7{*{0}Zeqmm^ZTDT`|rF4}}4spabS(y5o!?K3H$GxT0D;xaY1QefdFr$uH(-j2v_I@cKRX zKH`A%Ve`fD8gFx#Pc+#u#>ILKRn!1D8S$?f?|)PZFY^OGT85Y!)!`ZpwIBbD{~Hk! z0F}A}z&MC(!^N9J`E)$pkEMVbLkf_D>*2mLmvtv&ISWYmGYcIJ?Vt~!rBacbQE}!* ze-)k;kV)=Cz!HGGlvf$zyExG;8eT8Ft!eDlv4AZq@@Ldck)T%1bxa3@IFkpXG6uRr z$FPiuo1c>FS}ldN`i6H(N8AfuzDo{7W7@nTVjS){XIN6_VF-B%>9R>flQb2L(-3y% zPE}btwGmbO>}p}Z;k(~SQgymFU-n8B*VStJm+vO~scjw0qi>>@qvBa{lCgdu6xQ;5 z#eZ{1RJ0|9%a0HV!sQy3AP-|CaF!GTKl4pMRj|OvA08Dx!jX+Cv*$qYi&K-VoScib zg5!|~QiN6r&odrg?=trb8Ph+n#ua}K3M%RZa%Q}-4I0;)imrVU3l{W;@Gw!~ypQ-U z>5-ip7Et_nZHz{B++~b?q6Or}A%iA;&4p%BG7$XnfMT21_1IQufJxko18zZUyRL4m zjPB6Z$BDyrn0ij{Aw7t(h zVWCz-AzLo$%6x%>2$HHgZSyNa2*|KT11e(cX+$fAkj*j^a#}QimvM z5?XshS7{YR6b^!3hFK>j$F1K?q#fE0y6ewr>++rWo+^4@?DD9<^4w?-DvV$CjQ@7} z5*+ml8$pX@N+#Jq54YgPe!aFgZdQ80o`_K1^1?tvzS;4se;tpw8 z_(vt$iRWC(ao)q=5wLx6G&LdArl8j`vR|j3;H*(Iubm<#%wGQPUnMm9f3i& z^7eV;eoZIsRAD8!UoT|=aq7m`t)@?Fy(6xXzn&3vd(9Js0O62qC;~9UaF*^m`=HW- z`t%Q7u%bC4WeH^Xdv5`M--**EnbR577=Td>^r0kDwWbsbc|F(tR4X`xyLGeIGx|5r z|E0IqON8)q^PP@dws{3U6deTxD-6by2qX%ec&r}k4k|2MOkdG>338p(FvQ&K$8|G2 zrhe8mD=kJiR3o8Cr;AqI%)wo!jmS}kZ|1Wb1BvBg?nO-K>m;3uCayTnS@}&SXYApp zh|QNbS8tl2jouggha@0)0|)Ho<6KA2U|f^`IZV}+ZGEjN$AnNc_i9^i`gZ_*aU|{o z2h3lF9SvDj%0h5r{n}Wf$TB|0S#3WPyn>MJ*!jKZ;qBWn>yteDNP-Zs1so6mp4mK? zuT4M`V&lu15NgzTU*KhO)@H_ZSS}5eA?v39(Mi;gNy^2afGUY*s>b{CZ9LSVJ9@Kn z^OgP&Ra96UHm-;2h6V76X$ zUQT7=`A`CtUSA72Q{SUXPm(>pW8e)1wtiSWrqVoAd)=^;Q(0zAN&2t2HL}q+AQ25V zrn;cus}QZNtvBG0BN0>{o03R2(Ek|x1+H|sF*c&~aoPL7*_(^gFHa@md0kVHhqyLG z$?Xm%Mu`NR(aDLX(LHr)CBn5l_CzOCv;?Xm#sI2()|4I@Ds7;ON#u?mB1@yLx+GVl z$&+hdrUj_H>-Y;#-of#ah+NDW3{2In7gTF|mSFnz^mr@HVxfzP|C!{d$GMz8R7UNT zOR6SL-JGtkvLTF>^#^5)U-i1>EmN6;B}^$Q${0W5_I=Tu&Jt8 z)Xkjk%CuSzucAc!n71^h^6{9`uAEb3$ zI3I)a?Oa*rP45U2ROMVE<aBC$LW^e9dU!}- z)H;~LK+G;Gp#~h}5UT{4S$i6DwH zmrA0}S6ELT()XzP@h)JO7-l3uz*NdOPXL+sj2e+XR z#c)1g5W*BaLJ~SqTzi7vjyNw%EF2u>wo$nV`$@$P4w8?uhhVs8z^8AkC+FpnXBy5f zMf6Cagq%xhkqS_;wP9(-!z}i;oo0fQ4^LiYF8#XA#moyz_F`ZI$L||AjNZOuXWf0r ztikm-k1Z~ne+NfSZ7b3j3idTn>qy8m zto5|?nqAEAlEbC)qTbX5AL~}JRPC`|7$bgc^U|d{TBvZbw{Y%$Kyh2D+P(3J@l7=3 zGGQ=k@AfAe+{6CbdD=jegMZ^Axz$xWclnuL3W(m;6N&!%V&i3#ZXt>^tgf-{h+KD| zLbbr-cC1(no(PFbf5_DPJhFa72I|s1<#JuYQH;t088zZso=7#ILTKqsmf3=~DhA7R z>dqQ?sosf0qrgAdgT$w1x?94FDy(XL(b6 z)V9LFJ2*^o28k1gzEGSsgJUDU+Hkk1=wM(ojuK-c2q-6bn@h&UUe+#-d9GIcmt8xm%cO(%4S=LOM2VE8-EjGV092y{OhyC>NZH7U z!B`d6BTnxd&I>eXKq&o626GN4Yw6bDsSzK4h3P<_M z^SI*m%2(_5^vqh;6vl!V8FXbC9mLvXP+({2y3SIzRjx&@Jn=}^3wkS~W}&2@CWOo+ zrTv5Cf2U|2F}H(}J+X2t06=IST+5UA>sil_vtlVJD%d9$hVwCFDI7lr5oN2fKVUfT zoj3{-wuV&{FL5@_J+HA@XZM!6A*fv!mujy0qN2^T#uM>u11lZX`iy}B9vZH%8}N@> zl#4uwm{E5We+fEus^7r$fbxFbiQ=}Xgh2!pQZ&nfEPvy`ejKe5F;igS)gHrY285Fl z-8~iH#UK(v!izh58*c(v!v|9XFRjj}4QMf?A?(idr!3jK#uSE=@#ew^b%M$OyNvJP zxJVMePoWG9^Cz6V3F`|17K{f}z8X;>g4?|o%B2JX=1Xw37Xp-8wmf%{+}jphB6+df zXr#ohwA52dDeY#YIwsF(pTDXMv0W`&TYS{HDaI1vq5PYiz400X;Y%VO;+wGiVa&B@ zZAK7lsw3QsyGXR_S2%&K%8fXK?cvgIm7S*gjLWx{a%5{4J~npsMVsX86uohwZI^d& zk|e4p_g}muvP1jDfzfZ?iJMcPtEg9l`-b8(MLsX>JTNnkHHDO&PUDGwHHYTY)B4_^ zygX#hOWF8_{H|1jTl&fl`$wjkQ8pKe`zT1F*p!w+b=NPNUcePOiE&x`xHdFrrw1xo zJC!|C)Vj`Jg2$fN!e#cS)!h@>RF#92Vr*vUDQ zJvf(xG8ivHEhki#J5$PbzN1vnubbIb|By4sHRhKit+Ktqiyn#8-{Dt#sn!)%IJYcE zfeEC)Wn2y+3MliEIv!J}-A}bU+ZW9`AGuH-u4q+cO_s#HGdG7A-BD!7D8(v9=)J+) z6$IxSk|YNVF;z=NV_qj`K~`=9Hm)$5QmHy7 z%gmKbl#ZZkPKXFBF1Innn_USn&{RzJ!IXhPU4<ch>bYGi&_OjPa`G-$4Nn5-(&kIN|0k> z*F%kweIlZ??n|T?^3aq(4H*mwFJUeGMncgdiBSYM2?^;EB*KTM{KrBj&bl0hG780j zi-m>$llhIyjs>-u^B0L!+490dCVl3ZmAS`3#L$~lCLCnKMd;*EN{tdT*LULb`Q*_1 z4KpGjViefs%J9!`Ws;;T!S>^XyH)NrgNo`!{v=CQSZG;yjl zVdjfUicu)|Tpa0@TEKvkK@8_5!d7tdQUN|RhCrA|>$Uv0k>4F6IT%L$&+0A00{MMY zKi&v3w6>{dfm)E&z8s#_y}$ZbBC~{Dy}=Vfo$J-?4aM@*8fjX=2v_nj>_YWHrtJOZ z+d2kE?qjas>rD%=XugtlA)~t2l=eBx5g$vp=KSDME_>ec$=c?QZ+Yp*`Ed>9IFF7g zvUqQkb~|LAq9gU|GwZsaQ*&T8D(FNk4Kki>UFrU+?k|4YU>FjIk*CAIiACrXMG$kU zqbwg{*1b*Iqw0@47npp0q}lo|wOlZ}VT0VbsbXcqwG?{tr zac`SgkKMQqU;pg&((}OC;l+nmcjBMcnm+ywCza%;*F_QsImmbMEpWa^^KKes+)XkN1$F8#)1JI*ru#*wOr_z~X)>1n&UW3~4)ttcmlNu&s z387W|mw7ij7cSkNj==uZ&@zt_!XJ#jO7|Uu1Q(>7lO?a_)$)S@WDhw+b zhpAIxII&_R;AU^6#=_||d$Y<>L5D_>mX{Pc!|R)5Ox@R0oK z6;S%Iqq7M`QmeI@-ObB*#=z{JuOtE)$|7{^wU{pPwV-D_j*^@=+hTs60+xS#L_$5I z+WtbEHP000>z%YYMFl=CKLRno$(w_*tvNhF6dfkP>L&SL&EvJ&;cC^zaht5W_Rs!4 zw9VE$aB0Ztl+Y$rfM9Y+mqRP~3o#B@+OwKZHmZuXS$=bt){PUVrnB$hXi2tfmV5?? zyVh?9A3vP-Eq_CVH7XDaz>kTHqqICgsCUUK;z~>23b?7t)wQSbds5>!Gi8bp6Yg=S z%pO1`4gATN-^z;^!uB`+>l-wru**jg{(VEx8|a=D^z8rY>1HKxVJsE0XCnxMsspi^ zh9H$4-&B^NkxL3W^5!ImQl@VMzC4%=8j$oAUSbab zV^H(%s%<}JGKyQ_R;pM095ry*IL?)G6>6Q}C!lIq73nII)G?esTGNyfyPKJ3D}P zOiMIz+^dX?vnd}LlzQJB;w)KZdO{ogK|W994E2Gzl(uiVWwq6r|29b+Nf|meFZ#vS zJ^w~djda7U+O3^fhVkvwepf*e3c%`siQ_0G258XfL6tCIbu-$~W!ny=(g<>Z8woG% zE&ndU!$c30BPDmIuK>^BRoj(MB_E3XK8aP@(kTl{X58vZB#*s`q_*J^M~9K{2RU6k z9xWjRl^Re%OLW$xr$v~{hencO8BnosVw@PHb7&no-0J27y3r65-X-Tp^qBVZpkL0% z@Dptr2~HcERtZly^PVcV`thL@oZh0IV6My-NqGvE7n7A9nLO^Hvqpqje{o{fOqT`W zU)F2M#lW8 zS@410z#q&iMbO(Vt6Et}Zbj^x!i44)U0wwTd?n8BcGIAr%c+2(fEnK73l$^eDu7JX zPnC5U89=glh6Mp!R5rKIztY9@&@Qi z)0$PHlrhbMmXmh0xU6{~6tF8Hi%^zeV>!rAugr+U`7GXz zV(=S_2U!M<`JK}`C3a}&si9c>%QL5`Iy)LTW@okOe$XnA zFY(6B=YCvBMT{;N-#_>sQjlbLA&YrItQt#5LK;wqs)j%bg%Th_>Ke_K+Y17{brMe7 zqtRNv-hC1$6hg}(N27{!Dz_sGO)4J}$Lxo0#^E&M6O|Femq*?nMrz7#{yu#I?z9k4 z1iglAH#KO_BL;(%N^4rN&cB9J#)4YM;v313*>R;G_lHLEU2>x|H#QAwvy$2=z9kc7 z3u-KB_F_p>h*5JoUXR|)UzX}V3`JDlxzI(N!(B=&YK5zYqsD!eU}sdt3~ocMqqGH+ z`ckS?$kxzY4ti=?2}T(;cd6Xh$RvUlCyRDx)GF*#7a3VvUDa#@GDj4@+A~+&$u8bf z05lq=`#KRrmKRrDrXb`+>x>k9JhaS4)Eqz>r34xpL>uqm+9)Tus{O{qg=;jiODBDw z*|Rt@BO~**6cT~LGKIiRc8P76PZj&R?0hEmRn&~s+H#ZXom*Lj$+P1j(joX}7UfDi z7b*;wH$NDXw#=mI$Hz>Wl^p2GYD2$|9+QT6BR{I5%$D*lRUN6MN=qo zJ)Tv`@xnFGsxZm%9t*vY&1@F4XzUL0$C6nru}tmWgC$hWb;f5d6}owmKuSi9hHaUV zH7cVBh=`epYTgvnKPfQ=4}4s%DKy*)9sGJ;pOT!X`lf1PQot&>10Hie7>t)|PYPem z!fq)BM$g6#lzgf2X1x9xJv*K|XHy=XFJ=d_UQN`0C$5Hu-LH<=OI$r|UzX_83aTr^ zO35P^ir9;P+9p$?fSBwXMlqbs_FE38!?VBlsgxw^l-TrxdmTS8uAHrrj0i!eE(gnm!pY&eTe~ks2jKB-Xt1Vs9sW(Nh!|{+y-w@ zgiz3zA05@iW6hk_rtLrmQ)o~>Z?xH{O@g3`^vA!guL4qrp0V$qA&XrRWwzgd@DLE1 z$&qG5FwRjwdF=A=hj+^}AK!SqFW^z*V%8~%80DrIYVC)AWxgKOZR?}pN*V2cMCW#* zL`TAAJkC;%BPNd2^#q)5RAuBK2~`Bp2p4Mj7yNv_$~WFFnii<4u2$psDlitxG|J~_ zsS~@jv4Mlor&;*Qz(D0-wa7ib;zsTuVYxx~&3O5pxjL%ElJ2hq%d~M!oaMO=-@kFY zpA}ZiNIn5#R@{HhOF{PyB1TaG&QY@qu@263IesWI9VzZ5DK^8O5R})&I47CF2+bh* zz(eWqk5d&BFn~9eE-zKpiphdGwULUmL7gfp#LmFWNtFo+hL%>)JyW&K+EH0t8k<_s zwV9&6aBtKdydM42gi$}Bkb6bBpm>%77d(Q_;9uFMoHBcONMT%@RTeE#Rcu3|sZrx1 z_mo?tPHT=rx%}^QtYkAo$7A_P(W}k#{9=_ld&ZJeK1+WigGVt068r5!2eTD zXC9G)k7;#`2gCdEh2u3`vCo`zkLqMz?HVJ$Gv)rivn?Tifi^cY^2MZWCoZ*B5R|ue zJlkY!#_)?7^i5M)0-5aj*-ssJlrYEOVU*rTI}KR|GklRAfCy^UN)POB9}MeO6a+k`s-qbk1gKHs2bSP?>N67gL4<6y2x#i)>F29a! z(t5&lwV3RQ;;r+0;G7b{F}LTkv{4mb#49IVdu>x+ALjDe5jGV0^mPggzMwdTmOz2pleyW($uAx9eBx4)XjHi zX^o9ZgAyjxgN83LW~-!Oj-`ql>N#bj`cMA12^Fp4ujS@yW(I>QVr`31)&WZs=4Xt; zc5xmEUV8E@JmXp}Lt`90@%&##K7T4ME~ecUfd;aL6B2eOrwDwnd9Za8VGSJY!=XG zGkSwhzkgu5!w0$qUARXiCQ^!Y{gD}8uw}FV1VhHm@acJ2{-yciHiMsW{iXA#O zGwUzXrk*|298u1us*hCd0g0lpv(uqWEMZuyxO4Gw+(|)7trata^FmWtWkrt(bU13H zs@9LcX?`vMgknW040!o3Q$ur!&FR$6(cXzWps@Ap`=%`fISbu^^HvdJW{Bg#F^D{t z1kv9O|FL+1uQCU>by^R&xwJy?XIOTzRL{-3%S+MM#}qFR;%1C*xb5mZqG4omAzYMF zYnpJUGdiN;rF2z!_UqG(!Q*x9Mdw=5&~n9}Dy*>ShzefX-`ri_Wre>co17fH)Aasx zNrz9=e0-PZahqzcUai(29aj%7Q^!>G1iJ z4jH#XA6r61%dV>dEk{7nwmKFwvuVYA7CR!sE~eM0^G-Y`P;KX2E0kD{_Q!1n&rIUC zFZYH~81k`tew8Su#`sP&V>`IhnF)VP>h!dbxs40Z7A|oz<}-usHPGG0Ih)hwyPGAB z*C_R+*05gY+jvY8w&j_Kwqg>#2wK*{vlb|g z%mY=y&Nj>M)UW5zw?z{ZHlA{ae`?Ma$`T+|c>+%78)`ncTz5F!|C%6pq?2O4iM4rJ z?}$d3lZ>>TI|Wrv`bfV))9&KnoAvGhe-`hg629sM`kZX#0_Ojg(7~rdnJ|* zX3sB+!A>(L`hh2t&)2<9JsC)+ItI4#nG7=0{+JqaT+xEu7j7i96Y5HWpkzds`(D+a zw4|!@I5l3@fo{#8UmgwO>WP4b-9YvWtt->lOO9GtUn zTj1KdLq}9C=&>R??s?@i0fpN_!v%8|=&z3==!Q`9T6J--=#km9Z2OS*Pax60LWvt( zU*Pe#LtLnz3eW_@*qbK1dE>FyutN9?O*g!Sys54X%(wUjo;YWJ&K&CegBZbq54igXKSWlo3_ zHE$&B%os0TORT#Y7k#r`XQJiHw$2N9X7E3q*(-mAj>P>Ch_OT;dpr}!7A+;#H)~Ov z4){Q%eX&*zmEoSiqb3u#kyPSVQ}+DN%ZEdah%ye|Ltor!Ln3RLKXPf9P1vc%Osu*N z*NQ1`f~N4M`|I=(%Ttgu)3|a|VGR1Nm6(Bmk1;;$`&=+?y|r+^ly}!;6zU=C#ZRGi zE|`-+=jl>!^fzVx&OPzRH&g$sDwV&Mb()d0uaEmoM$igqxDeP*Ert^W>L*CUi02^j z_C8!MdH>9*3K^3C3NOPNA*k8d0h@oy&_-JW*h%c68caF@1n{|A+9 zT0MJ8gOksOtDhKsWbhfQ6_i(atOb(D$8fNTtaU@(s3%|D7MLCIG4MM42Vsty(OAqff(5&2qGK7KOl@k_j&0Si=V- zH@k@m4Pc=PX$584i}lm$pVh&nn^?6)1It{!z0BG3(de-7c6@pP6klV~@;S}aq*IrW zAAN@BN|>i#>SnFVY~rgWgJl2!TN|#k=0&TfwgDqZ11ZJ~$)*hw&S>zCY!Z$fk8L3Y z+Z8k%d0`WOWe>Dw%ZO5Csn=5FJ2< zuu~y@>jR@+sZ5)D?yDQS9W9*557VBhD%PEjGJ>@=XciKqzofw*;OQ+d1iG}fSTANnyn8waqnGH_9H zd6j|{Q!T0h`)3|F_IyG)-NxlmErp-QH5A&(a|9TM!(8X(L;U1XHQ+4 zKnd%EnV|X+K_tOm8U@X#(iA}{7Xt#)zjky%{-Na|LSOvx&>5?x6Z(3`b5 znyCUB&-mP?{eeqXf>j$shZ2e08o!DGogO8YT+l{cUp;Z84y75jzL1{W!@TA zgt@fHzwun@zuqOMNir}zdfzYOZ>YEVM>V(NoP4==UIOg6&_~k&x+b`^+ZS7}s6{9b zW3!{g3%UuUz(E$pU=x@fNGN<~KBFh{O&KH4(Sd#XBx^~#u<_YurP`*3SIeS#yd_c1 zQ4LlI0#WKqj@k;PMqKI}^Q%8-r8o6W>y%R6-=bXyTv!36Mpy1=Flolezv+Owja>rg z`gRL6v84W$SS?9(Tq-odE*E~NImrYo{Ry@XUmJnf6I?7_B3o%+8#qK%2@IelGC3Qh zdn^YgixRMJAQ>wnGcq{9R7kDeu=>*2y`ao`^Y_M$Nv(b@y6$ATx$bCVXTY^8d>qso zHswp?Fs<5PMiTa)-+ON`d7?k`KuTuK)KQmms>Q#kCUvrXR##}c=0t<-m#%i@ei7HG z9xTLaJ8Qm2)su%2TWB`N1Mq9%KAi-uI&yc@N9F1|;yE}+unBo34ck16t=(ni10ox? zx-3T#V}ITjZ{xYd0%N1f-(Y;Ahnu$aakt_chG7rIuWe}*QS-lQad*2zsk8ads+)k{ z-!wZqo+>TBfOpE9=^Vthx_p=F#L>#$X*3zGA zCFjJj;8~w=f`S&HVh%l7o{2|cGPS&tiWQwrL4FXNHkZ)y!YjQ`uD{SWcfs|(;|-{7DoS5Foc}l(H7sn z8+B}+^IdW%Qls{D$#a^T{BiHdIdUh* zd@z}z@JFola>K;nMV5&EmN&8c>9-OA?t-5{QUEkO@)OKxa0T`gGoN0z;4Zji?{sshOq-k5ri{(BTBv(0{IcV_ z>wNJJj*28`?t$22k`R@fJg&lqQjdy%CS?_iWrZhQt;hf44w?V!AF4+aZ?)Y^C8K@O2Vf#LMG~ z^78iZ*g^m_2BVDN14e4vFiy*I6zWBlgypCD@&^i1ZAi6kjQMnrlhHwQ$v7h&tC~G%<6zxSHn)g1RR8F7FhX=4qfkzu*2DjCAB0 zmwhKrmc+(kjX;qFAWxCn`!MWNRhtKTnTJP^eDL%7UyFaKHLA~pJ`u*=N1SGheqLV9|WkX)(X zqH)xQw{65B1(T#LbHv+ekX^gDyK{n~5sHnMQlT?lcnEGpgvdUeTN~~^tE7B_c6p=DPE^Pbq3!`vLb2dev;C_mEG0Tudv&G!Q`*d_=E}0`KPfQPW)fLv9L6V_6{o%jPpbhOSbWzfp zkGhCy3AhL#@}o8n0tk^On*XAUZ8^q-{~QX^7y9wRDr_bOhIs7nK>kOMGrxCmBqS#t zU{f$m$~{r#=~4;#GM_r$E_TScOMA`Z?;i*daut6djxxp0HcC&=d_q^H5kzb8<<|S) zppztcE6fxo9l@L|OP^kygI-=rt>w#uU=SjzwEHP96tqA6K|1-tBIY?G9=JlTAddja zCq@Y#u`90pY5Z%vVitIUrufyNp;a?MHVkvpka!7I^9lIe#CW&2ke|~}aJ>tBjFlw1 zVHG^AyDoK#&AZ2I%5$HTOtE)SC$h35vzWa->cm9H4bn`M^QdA_Mz*mQbY|wVs3K7= z*sFG*c_yL4)-_!$_}m)As#aol`HDG2re@K7`ekqny#fvjzH!UZVkS5>R)jT3s4z9t z+(3;`+9kECIFqVyqVG`q;ebkDowgh+P! zXVbhSsti1D2*iA#hoZ+j<9QCRR9X;i z@uP_j6A2|iPmM#5SKj9!3-VN;<}Y(KXCi4w$acq~=fn>e9QX%f2v~lM z1VQxl`0e=*Af$_!71?ub&ui%rYYub1{P)m`j4jVWoL0kvw#@ohc1ijEDmKot8sq?( z<>`}yit^Tu?8hCOj^PX z7INgVwpDt@E98oat`2C=N~bC&X7>uxxaKw*l`BECL1mXu;Wvj)??toLMK^Gk>Z-7T z3A(dHel=A!bmrGdskv!048hc5yqWy0V6PPc;;5;7^dbCSnJi`HEXuL=^p>V9Tt?0a zM~VU;jz|VO!W0gA2nt*pQSa{HqWU_FgBCs%2cs;L3g8`-mZ};>&-mv<4<$~LsB-@~ zfeSyIj>3+Y-&V2%++Tge zJDIh}tk`&*h=zloVp1rUiZ~z7)?4~e$k>Po34u9YRc6zkyT3nw3#z?wSI7e?N>-pL zJ#65PX{aGa%-9sYvH>mqFS#I(khS`6ppIej$}nak$&ti zkeP_4(84+pVw#aom8u{@rk>WL_=?x$?GO5;R&rLMuU5`RaUu@<#~C)75xF9 z>~AoQy#vj#ml!m$4@?>o$=`T^qEJzc{*^4=gEn$^F(D2beMULM_o!BqFl^@dd4|-X zf-Wd$dd1$lALOS?J5o}jnMzVx7GA1A(|_jMFZBm1RaXHx1YVgha2e0fD*m9C9h4t} zB;X-#6S2k>IX7f=q@5_XnwKQ)0;`NhB<|g99;>9MD!HmshB;C67YDMMH8rh0V~8~# zqL6oS4%X5uB=UqjiI3&@&aJSc0bOkwbhmC0B6w z(m`cW4-sdd?QRVZncl*$B&WOSrA*M0DK)}nh3TRGL`dM23(lWUeDaw&j_6E-X1MsH zrL2YH?qu&2-{r+0uCIgK%J@Acw#(mxrR4dkcO9N$~i&VN7S5wfw#_D?Q<5M$)BAf;P2;cUXY+-K29>~9! zIu02VL8LKX*M}dSV}uFx{wkKY<1?y-i@GbEu$}T8l0a%@E$8zN&X@Zudc&ya_Z)l+ zli7oQJ!$gej}j8L3KFcC)-h5cHjIYVl_mvtl21%JuK-s$*kivN@vRs1!v zJs%cOZe|^5drEjps0HG)z;Wkti(VoSo#;U9X60Q+I`y4uP#Auf90P6A$@m|m6=|oG zqA+2}L=@_#2<%)r@L2cFB9>ah$U|F9mJCkjkB87n+AkIm8WA`!Spsy)XwOt>Md?aVq}&A(h1StQ-yi4UXnISQY;A*3H#%v3r`2OU0A zTpoj6ey(9U8$Wecqd;rbPQ2G{@D!eG^jTzrb@a^Sd~DA7*=9$#gXzswYZZGk@g?11 zLLXc;in93=G*E1)XsO!VIie02{m}oSh8IH4lGdDhwi-JZ^9~M+VhyE5#W-PI$F3-f zf#b|#QAKY|t&thHy_Gu=@tpngc(b~F{oVXIG5yKT^Q$xuruaudlGY+SGTTsmU;#YD z??oAIp8DWl(P2kcr*tjhh1E)5xC@$X07$~m^l#^6ic|f!sCfl;0oA?a)NdK;+{E3rr>-p^_ z_q$KCf7q1vl)ZT(G$|D%#G#m?O+4*2W~8ON?Lhu4=~0u6dn&A=#t{}wh|+#kRV*A7 zZ{WwcNQnS6wlZkdv{11ksiKTxR@p2~I*S$vQv?WVI;Wpt7o^c3HNK96wU5-`%kZ@D zPhoC&a1YNd4ffB6LNZm~m9}5_*#ipxs`ONnm9zVU4Bw*ETrw@bYB*s+(OzCs4&l$H z!sC~DH_#NUtT2OK=`m)dKPOb|Y}Q%T=%rc~kYU-W$G8+Fl)F1C%fgkHQ->l_Dq5AL zG#aR+X@brS(?RMo`27g-V&yO~KszWTStTs336?_bpEBiJ?@^T{)bT5k6&pF@s4zn4t=~#13Eu`fq6Ttgh^kBnJ9-M<)EEED4xYb*v;J>!9{#_Kvj5RF z;9YY6OXNbY}&uK&k_|NBS|g%kOUYnDY8@!uAhD!tkBs1Z2F|BJb|3X1a! zzD03&9SH937F-6m!6m`nCAb84cXzko9$bREYaqA=4>|{ax9XfaPyd%&x9;~u6~nM< zb=Us(-o1MDVK;8LaX=DiyNZAtRln9EPKw)G;LfYdfPhbFJTrCzaR^4n(io6$T6O0w zyi;Gbde$3C#}G6v~+Q&XK>O>#%C<(rEvwBeeJ;Od{x6Zv89e`#XfGY_3JS zaN~lXtvPmsMD3M(Ns1B)x*no=rzKuoj` zvj(mZ2KKsFLL)!~B47j|Kuk9m^jTzneyvZyLmN3A zt5N)NKN_$iHXeLv|8&nqi3kOfgJn;969^@nhRAi_XV9bbCu z{KXy>4z2^H5N;Ga`jqs12+5II z4^9&*VM!Jy(@}b`BKXFI09KD{A;PCr5e?GN8R08C?a+jD+5lwqEKn45=l=@=#TF4A zQqnNL&H;jelT0)nmk2Ks&QgZ3&d?HFLv_4m8~oCPsdKE!1`A=RbZ6~KxG_-iDOzLP zYpFHY`xX3d(|6nRv`7zr>N<}Uv{ok%6B`*T+F0{5Gj90LSVM%>J2BT_#RC#I7Q9=U=b+H)AC;Iy*b7Zm`J(Ox3^rY?(m(h$<$DRq8g$n0_{sLXj{#G~|38 zPj4NAuQ4v23kqs;BuA`GTM>rn5C)bNfp96~;*c#!jTRJ)(8u9QU?({{BqmWF5L>OW zgXgr@lXxpO6Bl0Fb@3*&5Q&l%6fi6$9aUnKh|Bzv_paD`*Q>uf^HuB7=-IE!%z{lA zI=NLKM8P#dIWG92!Iy6<3N6j4n+BhMj5@qrzSah z%7E8j!(?qrr;RnVp@7_4P;RlQOcGJ1*yL|j9!iA@M> z7h6rpC-I`eS$d*gE^iG844Qq#rF-|AzwLhU8`?4-#F0~yx4h3pC;6$rfQ&*QM$}*T z_Xk;Ae?FdY^Ii(G@hL5)v1MZQIpizTZAptk*=dIUXin>EDFKcK2-(@QyrY2@bx#73 zL4%D&wU!lsiA%NT)x2NK;Ps2mYYoX#`i3y~IKU(2u%8hs8L1v(wmjlQ4krWxn)=5| z(pmL;h0hYs5q}(KPK%qqSkp%2=F*HsH8ZohTMgv{92NPzYB#I4C=^<(aY$J2jIB!& z>VRndD$P6>7K2RX(js^a3?AF?sf8NRrpL6CLPiG7>aKsNEWoSA?^25j?f0MFtZHra zS+rg?yL#TN>B?}cN+h){9YS>J+fs>%Zsy8@+d@6K14~jqt*a-&8j99n*f5=QEM$OA z28-DGReG%LLa6G;k~hN?SGrw5Vh^lQAfEpenoNwyV-+ds{*WC$ZP40P&L~{Nrb(PG zgZb*RVcKKq7>lKWShky~5tyui>Bjuri%d(h!naBUy2N^SX9cq2&WK8=RJeS7bopfcL7>NW#RqX{qy?c}S}WQRUyg|G8(B@!Uys){ORJZ% z^Kwe-X96_@k;AdSdZ^dRDuQ;!^2HqM)AS5rT2>q9S?z!nh|Mg(=o7NWq|Ogyau_Lbf~U z%G)0W^$Q+~55dK@k1iORD|t$zZkSgg`vV*)Y5UmF%Q!~%R@D7?`O;R8p0BNG28TM$g4i1cK1 z3fBU*s>!=EBpD!T2+#YCtdETkzz_DbcsL{Whk(TJ_ts*CRgt14Kkl_mqhjk*>!&uJ z|EhfRX`FjoC@9n_Jk^TovlC}~Ru|>o2RJrTdCj$ZFPIlRIUKd@Km_d_xv-j3?~{Wp z0|%?1^!Qs#ZXC2BNXNgr6nM?nxmUGdgO7AOYu(bIZxmcN09zlOm`L#T+f&0D)T@je z-omF^XrwV13iKoze_yx$rNYj1$`m3UT;8M524bp#n5D4Vb~6vgT*3;pmq=hTM2=bs z1zpQnlzJ8~gzkRB1tJw)%<}CO@O&&J;v|2>*M$3FI@N8WZV!^DhUof3tZOBi!7THm z@kt#eBk#%t>yG*qq7u6nW}b`6(QltR3dwjPg9y)ihTM-O53O~fp7t1*6#p9YP~tY@ zk@&>&g{$K`lKKz>aOF-PKL<)sLU$KjZ7Sd5sY-g~Bb1@}h(YKrF1q(#mMDBh* z&hmShw95l`6`NEgNHkP!3oS4ISJl@b7LQy^9T?OdMJNk4+A$;}!AFKs_Fsy-?JW|y zj_;og77a&_3_wYOfZkR7_T{H6WsEH)<6k}hIG%~`Ik&;`e+z6H9<21)$YrS5W)S|c z#U~rdDC~_X4a*V4FRH;1MDN=ZBv+a3+c%H>eWjQfV@7iKB`n@V_q=&n^yBZLG{*V) zguYK&CV>e#ed2-=)?2Wt6fXk(KJ>wO(2+FIzMrIbuz6%Z*!Qax0X6;=KbTV&rgMyp z9b>PWLr7UZ?>OwqytuRKASy3g3_)jqdY=-d|9z6HAG5AY1c)xuT>H7SCK!aqCIAna z&xDSK*uM)hFn)9a4i5ghp4-ox?|kwbgogw6T~b`Iyg!9!;uzs{EZ>v-iZ5~5EDB8l z>FxU)gX;yj`p(y)jy`b-CKHooAK(JXZ=?n*dqFv(m@jVMDNy=?3!ZoU2P;(Gz|Z3n z;Cnx?`f4K;sD=E7Fc@FP$#zAW?hKT`@}l_59|C}xJO@>#%7OrN+*skolQ4%MrnH`| zmhty7j3IAk(o{0ShCx6)eD}h;i$Ex;%An2{8bq z9o((!3yf&dE?_&Np%qV%lyx006-++$2 zql3t(OK(3kA@9gphKBu!Cz3xLmqebS!5z)a(8?A3DW8s7WI)6e z6g&%`UU7D`7LHNpmmgAHQ+AJ2Z;D;p-}pPY?DAdNzoUqy({Nh|E&Eh1NyXT94_SOm zU&JJjscvtyJkiPCe%VfzAw)}slMpMw((3A~u3t_RM7D5Eh3gU69&1mUr3WpxbnMqZ zv3&jloBWx8h>c8UK-529>VvsdG6uODk~KM>j#vn6o6$*v$hlLzhe;bK9J_WKIlb53 z*0c6%fJ#fEqwi;cd_hgHZF}2~lygV4+j*1Enx_u)aZJ(=g_c>>7kg-p31ofw9>b~c zT_%>)tEw^7lixgkK{_bE>aH*?AE0N$t6H3Ra+?Y5tinm%)xZj)Ds@waoVz3RBZoWc z=p3)I9>sK5zO9B;7$j+3exzIpsZr{a=K5eRLlJ>0vlv%|W{~ba=md&LXPs1FTBKE_ zYUM6oR!stn+z8?C0G2eyv>{SEk=JPg7e!Z^u&FrM!G=hxo*Ocv`iG z_rowY5E(@^f3i|^QlDIuL)tZThGt*_PPAAzBl`2e)J{a4(aO1%p`e}wbUFVzu;8xi zb-dIJPeq+Yo0)As6y)|nTnlN?)Rwsya6_zvXxa5`e(dQ-tT!Q&I3^4~yu{pysivAI zj$bagXQ?D#3WI@A&K%O1d4W8IN(xs8ry=7Z@B$q&&_X;ws^%|SC9d?p_i~=I@}7bU z2XjwE5Z84+i`>gZD_iW1Fasz3ayjH}y;MioGzDqeX4)O&V5Va5N_;*JK+nZxePZ8A zAwuE{=j?5KlF%*N-Fxxjy;GEAws6hf8zcHv@5^cfc_BrIANb7ffG3Uz z4s@RCmslqO{*=z8sil;PQ@kn&Eyxju;rj~^D29U~N(KCJ5w7HNdU4^`7S!$c zWNvoGkCw%7I~pb&{z2R&)hC{UgDs?NS)S0aFGkOVpEp-6?7eaxJ|_Ubm?ogD=xOxFF^BYAE4O#%EExp?Oc1SHpXj5|A~d9Rm^);S?{tlbM@11Xt$DdUoR<4;KV8-W!0q=bs#9x~J;~P=SyN-f zet&i*e`;Asq8B0~e}FrrT`Qa?85n%A$BD_Ph*J?jeY5`){aSu zzTL!cOY~)$AYO7mJh0*zoVCx1b=n=U>tOl@;A8Jv98&M{t5rEJxj)zby{P720Q?<~ z$;wGf`^Av+;R*<7Q#5#*T-VpLMqmH=^&t7mZ$$n8Qg|TNq}lB%cnKEW5^YNYyiTDfQHh zj|V$YqlK%{v`w@YMgNm9qw-iE}@_;dJy z8!NbV*@S$h*hS9Fu9U0#06TJUb@Z5mQhA}-Ka2*EsId*=3{k7Ef+ItIDW7gGZUq~M z)sUXqH|B5yK4Tz+bR$FWLSkOGNII0K)yUVr2`{o4-)jj+l` zT)}uQYN)NKL`d3vAoi#)alEzTDYK=q1X*~Y1btFvvN@q~zT;llrPGkgu7Q(+ODE$5 zu{LVl#Me0bWJ%MZO8lLQQzcZE8NXXfE&9(KJ(rr2MU@0Hjwc93@t1H!-#&qV=3O?N znDQT`G(B*9q}(2|J`TcB-`XLZ@Vv98xgHxfEUv@BN3@I|w={m642?;GZ=3y|*|62L%fRGmz z69c7^&ykMyFV9X98NXjxxCom-r>*l<+qJ~)=k&zHWcT_0_CLmoahqSfXWGrNm+D>#xrYUIarrNF@Z@F z1la+V7dr+2YsP#K1>)ssZfXCd3pc>&+gw?M}_Dxd1 zP3vTVSAhjRh(2VIf{2LuXNyTB78W|&)>{)H#D@Dv{+r8F3 zyY`2YYv3q;s-ycZbN{|IUDuA&wv@9mps~L4z&XgIGN4|n-M)kD!MO|kP`^4eR;)>% zBy|U)MbY|h@M$<`OfuiSWA6=0zO(;RtG!0We{hqu6G#r$zkqlxNB6(oB(yt zS*eVn3Wv_|FPxk3UaU2fi82HJ&JQ^Fa1!OrTC&sj@M@(0N|T8ry2Cj?csn$Y$yyE{ zbBOakU(G{r;P)I?##=cck3V_<&qOwz*S>B-ET{xyqB#>6q`6CflN;Q){vN6tj)pKm z^o#Wr43_`T9>SIEdG3j)FL)btO%RlBoc%*41Pg+%rRkXOQFPVpdkI-S`r!c@n4TMf zRD3oSbBEX&Cj9ho^7n!$l~^b*1uiFCQAs!`>`GtWurUr$_>^R=%>8@?ZUQ9V0h_96 zVL+@G_-(|Qy5;+1;cE8pxjzkQ;J1scx2~-~ncWy9FqjGw5sl9D>yZn;AsxV@cu`~O zGm$CE{kiQ&R0Bvp;a#(M3_f+D!3CkN1`4N#77=nhQ@e(FaA74ezyK@v`*^d~K zs-E}-2Fdf&6$8}ZMA(|D12Z#=ZH+d0^huDZ;(pNu3c5zmeVw$?iNFdTdAx0(M`mGr zb_@c>JBfWnHJ!M_`bl$OjORwCd{#xxtwB<(-Z=k=Sq3e(55&?SR;e9~D(&cUhup}E z>do6!*|aQ4v@|(V`D0uc3|>%vt9P=&^nDq+8IVk5lgA2dC^I(M9vAW&hK$oBWcn;N zS48rIkjVpAR_Zo&GBrxFuzp?ASp3A59_PaH`u0l<*GV~Nq>B?LDjU2po6o3NlRrM% ziodbne=q&IcinB9va%>t2$4yyY-lXR3x|awB>19iRynC!EOu6rOO~_hp3KGHXNAT& z$wh|eJ|`E1%;Qnahv(aQEiVHwXGV7&0gm0uv=Jy6%6lK12 zp8eOHY|cK2*X%xO2x0VPilF^M`$h@-O?BY_kAy#8UTU>}ag4!hkw}2k=llUFv?_)~ zd;hp`UZ|X$Q+Y>8jEG|Ttf^;xksNGb*Y4lyeCwANkL1?9m&&RNbou@5h^ z$BBQW94iA8+?*2UWQ2m)V?1Ej=oZBYU;x7b%hgAPz!W_W`lF>CQ6;7Qkj5L#(~4+2{X%%AWPpL4r6P+eYUW$-H^#?II(^fEFs>W zb{=1PvF&3*rZ>N%Ll{b{i00+8h;J84_bh@f#C;|np3xZ|Dnzo(s}hPpu}a8;gv9|c z`iLqn73bIuo@{6rHbom-AdKK^so1W~pT(uT5~IVf`W6-XS&HC^n{hv9S?QGpNU1O# z47Ngjj!)e4{5a8lEj{Ff0xw7|^`6aEEYXoRsOkwbi@jIGzilP@pm0d;Q>gSNk25qW zyUh;^gFhkMj`TGP77~fmI%s7OxOEViP)T7ICj~^?TWdENvLTQ*0Ng?zO;mD&>$49f zKEUCSS~;(&dnRV@7jxKzq)WK+M_Z1!fCttkPl>Lhvu^n7HjNEsiT*7%pX*4P7Xif! ztq`;o#zqopWQzmCf~T=6nfkQ2`1$H0#$lDFvBDe5vC`PmsM_6$W*jUL%?}z_poroaU?&MFPD@TNJ4m~;@GpjfJ z07pZzQ+n|3NJ66$o%u-`!Md~IRw7n|lPP+lvNB0Wylx}|wGV7YJ4TvuhNFG1jTlmw(Xw@y7CW9xq2<*Cz_=+Xl zSjzS_yLF;!U*?FN0`yG`ji-> zZ`Bu~ZKpgB^#-Z9Jt;q%n!_>AzW#x8<8YprnxOVDeXCpP!!QL386@h0xf&vik#J=T$8yEL-SX>JFFAYzI<`xb4bbXh+XqaEAYW2c9gB4 zV{W6#^)hy!4cJZ^(X3SlFZ-t?mg0>dD1%4L^1$HJA{jCl(HpXN4D*HLxN`sbKU)wN z>2~vsz3>7yM9GUQ1s6;)!+|k&+{}yED%!F( zgH3}0jkk&bJ)_ab)tja9Q$~eRoBoE?-Hp`DM)%78>wWv#MwotfVNj&XbMvXm=CV}t z$byt6#`O2Xkaa2l!ylpOn0% z;eH;b4Z7hLKmZl1Z(K^lR3g9JkWp0{1gN5R+D*(*SH)zE9jo4G)c;v{^NifmK=n;> zFM84ED%O5)?}|-P(y(xfTe_W042puab?k=;UMJZhN{Ik2V*kF92<}l!8UjI!l}A?b z-h?0c{dwvE&r#BG2}>BmLo39rUCHMUkgyrpqXBTaONzZM@8Z(kHvau53Qi)fC~dbL z&6Byyw7~OjId~AdSS@MJ^tRzV6ya@reYG$kS$tR!H0LfFwohfS`l^spO)Erqk#ap( z2;!`=od)~8U$X1H|I3G3@UdHN?dMtW9ng&#kz;jE3GH_yj@$8iW6Y+n`3%FZUF=Li zD3v3s22u`Nr!tKcqS(mJ=s}_E)p4wBgoaA7n7EkH;lg}_oSa_Gf3|#8q}cZ>OCB-v zrS2vIpRSimB*>%bN|BCCT$9V4Lq17}yo^m$R_U2>_;oa->iLa>!8QVZKNroaw3k{B zGA$%>qRVU4RK`^^aw>6?OHe$u0SPA%kW^O4T2_g46Y}h`iWq80q9ep|$(2@A6oDAy z2x8$Ka`8J@JebNsN%Yp$IAnXUz%!J}UyQJjkQ$@%U@+7DUi-n~M^w8>aPS6MJcGX@ zKBkGbn7mfxelao|#-MZVh4_Z~DjOL^V(NhaBgfn|ONWp`w$g5-f4R_LGEg4mTIgBk zPaXe{8)gV9k=p{7fQU@cm<%!-9nO}KtS<&)Nd|J1qa(w(g^I%5gwf;&KD1>xA`u;x zl6LojlI422c^?f$Oj9^4oFshV${9IyXXBPHVGJcliMeVBJ-npK2e?I2&yz^aIVliS z{8?DjSZwh(lwC;xOnI3FqaM!DTfe% zYLkS2oeTsyq-I+_RB;x)hgw8vxq!Wn+v{1tr+*>;l1}FEBF*_eR=GpUBu$s4U0~BN z9OOW+xEDncMOYGbRu_x)Zm2P6V@iwlmBni)E@b|&!y!-o&vL#!#Cjk7ZPuGbe3(i_ zh0>$xBk&RV&~zv5yYKeT>4xTYa2G?5QE=cMayVvKU`-asIMS#mOQ@tSTLA?XscW?& zRJGSVLzbAm%!)xIniI?zhEYkGk3W-KnAZ6prmWoQdW*^1%>R!1hwSo&hEzxM$>>d& zVop)6U$85XV@9z>8v+LjZnKOF0zzeh=449I`eaLFOWoJQmm<}uISnu%lSsn>5}YXc zrdu(YsxQIn2W~f0q^(T-lY&a>%jCnud8o|G6-@4f-M2kepJ5N)MaRxn?K!;>f4 zVvOV&4G3X2UbvwJse`omNk?2oGUVP=C#;thdCZb~i zMCELRmUHH`5mxG0B+&GgX_44>r>K8`#pjR2PG!3dv_-rUIo6bv)U;2oD zUpW6^VN4$p@mi&{LXpw$s3I!jbab|p`7a7QV7N0WmUy$i@8t{!jd+W?i%GWRUbkpC zW@b|Pj2s|g5HesLQM9Rnom@!l7N6%iCGC3Qu&^uwll~0#qQqp2;BXub25PaEjTsw+ zM5UQszT^gK#XH9Cjm)=WN_T!{fd3pa<-+{+mMU_N=UeW`9yx>0i3^!yZGMr`kSXJq z&!g}*cyJ2z&!;~}P`(u+L~Y9p;t0xHpk`6l1yL#-W%aD?|LN)`7Ym(q8^HS7H$u$( zx8`>Iio@etIK=EUIj(Y#r2tP11Hs%L#0m7MR!~2|^0B_~!{TtM6pwLHy_Ca_bk35) zWkH7-`UNc^mY{79bFgWP9*hzL1-C^gAKg7jL<7Tv~PfTT1v*6eH$F?^sgj`7_6b6s2I^DX?NHu+oBVqxoTe+^Dy*7pu7)(@PpA zg0p#Fldp%@Dm{aMphgJpBLi%7g*$J(ec2{yd2b^^`z95okc>o=hMM*^fiM5ZsU|FQfw(XRPCjf3A#QXK}E-+uq%HcXjjA zOU)5*wDhaOV6yvy@$oK&Q#Zzrk%W^`4TkU8G5RV*;R@>`s>(E9@fKS=Ri<+MEvOU+ zjIhk3>6qG z=~&`LzI+ka$u<5ig-#eLCQzLc+dXP5iiAk4@!M`R-kVPeU9Iov#N(O>K5X~_R>KWJ zSbHn>C$y8pf#(K(*n^z@DPjEn-F;D`T_Sq`*XZWZf7&HU(&zpYO)p8#!JJGjCr{Ow zhE5s7!ny@<;vc%;Q84)05B#bu?h{kM?faQ->>}9wYl@$Sv*uF4QHu`+PXJdQdTjt1 zuW3T)I_+ta_2lsOhLyvO2s&cz>e5KZ)_!^v+=YiGg9%N14EgiVUsS8!5T}s zE5Ev*8Tg?>$vEGMmMw!MI`R_yNa*sueb9T$(9rpBShvP|W#mH1BgXwEU$KT6nd@u$ z--CaZU_?woRZ~~&D>8g6CA(}!w=0`Ad2Gh#hq@AZ(|VMr(eLq6DMG8kg?qlT#_EW= z7J6-Xf5;r7Ef}nsM?o74SQYq=X=O)a=3{igZzlyx?q$bKQG@mV8JG$SSMhpk7NN+0dHT!{$%WkcbHZ&R* zQzvqMeH6?AZe?~CBC(pHt&IM1G8YukOlxbRQ61(*XDLBbs^+%&1b#X5nU8MCpswq! zZ^+YYI?{BF*2~ToZ|z;annujBO1H~$vP=7Q8A`6MP>4}E_atsikx$oTEgBPD! zd@kMj4%IZ`lU6g-!Qj&Fs#lLH+q-@8 zTBSaB#r8#y`T9_q@X-)^O8PPb*!y$ZI}q@j`?nN033m*pty_Uxo6| zI4Tm0L?v!?WWX)DUyQrd5Z*IRnF7^;C1y0jULWA1NsB74H9dp3s1y88Vmr(OukOw* zRciI>hOnUFL$a;p)Bs;pFn^)bqxiFVK;hBrNK_j!^tz#b zZx)>IK%T~8%gs*lRL9idqe;*K!@dv2CCMFN@Hl5d>A~EHV18k9!aVb9NpGD71T57Q zUy$5Tc8D=u-L%Q>!HZ)a=Nm;9cdnx$`xExZo%F#4sI%wk6VM&jKe1eo3s7FH{ z2sZlOwFq8C6Pk=VOe`EG2uVOXZoOp^K?nuh1|2dKMxSuxs3Am)Q3PTjndH*2k`jk(b_TX&|4srl8ygORscP^O zWjr1mUOM@u-+c|RufV6gX(S+{gOLc1{Cx>F9IWM6fQvN9$cG&M8Waf;Px~uTXuyHU z4}6@zh9qWw?{YhV00{!Y9K&M}DVhBOb}P|*wC5ksIlKz-RwT_-ew9#Vc|;$zH4_P*WluZ@wm4T1(3xGfo+H;iSifcm||^O10Vs zgjXDJ>y258<~$y)wfR9v2XudTtP-vLK8RE2=7Jg%iSvMz;v;_ju@kj_rsF_d#g|Kc zik6eGD_%FR5H2p{xbf_CgZfJ$X3;tHP+|Lz*7M{dlS*E%pL7g=<&U(jFK&0&O$S=T zHH<%|+X#bxI(TdfcLNC0iHPVsY@CD}AATBm6w6)ePS*%;@8)@KUV8tT%ba|xk9vJE zP9CnktlmuyO-yYl5|xA6Fr}jZtrBhV-Z=eX^`$norP0R*sYo=s4F>zBPG3F$JHI;= zURreL6+X0$K6_0Z_+GQUVE5|!XAN#v1Q7~>9*SaM3H5~?D2}*8_29iDTN)OnfrnAB zZjKN-5*VG*o{1JpqwUcti()ox!}9jpapnCWXy@bR-ZE_KcWJ!);C*qx3vO&39(lw{ zEr@7mAiA?ob2Y0?BY=QQ8glB`nw|RkpBXPErQG-37sGj6emd5?TuJ6l@VBxRv!iXB zml)CbPjsbX_I1N3?zCzcyXfyDT?iVrZp#wFj3oC8fpGbFeK0^&wUq|MmLWWw%BB-L z<#riGZ0wXtL=CE>kw)_{74MqCgItI7dC7p8ZWRk~^WEcv)%ktYmC#uIkhTVJyef^^t&Nvhp&F?JC)_Z)Um)##C8{s zb$~OUDqt+8FEErR5ltG?pKh+9W#TS1F-L76DnxK`K}++##ILf{-&Ueu25NK} zVU75#VIjGX?Qw23+5ED^xyzl-(y*3r-b)d|7BTHv`8XKKrc>$V6&bzd>74%8f~#YD zt9qr)YD6|06AeUtP7`!8+1f&M|AAv8<8zwmhj^Ygg^ zgcnZV{_>;Iz(MrZuG>H)!W!ejVFNGl$x7Jy9?!olo$Ai(-c?Pq*bd%97s{H$PN`0) zv$d!mgopc+Rm{I>W-Lq<7Nf&|EF>btL2iTh-bmWX?^904h^?Yk0n_00X)ySPutpPX zuM;CdNI}8KNS^aWQ-a`QjpdJk4+)kORR-VXP-!y|qA?34!qat?*^k)FSgPe7VZ!nlg`4u;)sX9yz>t%_gA_@ zFM~e5PZZyCcMrp^J}YS4eWaW%89#%I)>l!8d{X?G^PNC6iLY@3f^+JDW#U9^ z!GoHmdel+DirLUjlM=w-6hN%~@}g~wjdi+$nKfb#C||8+8j9-3Bm~1*{Z^yMKqOCn z!gCoZm|gU0Pq8PsU612Gw?%IOLAk|UUFWxj@l3YJfl-SSnSnvGM35x6LeJ%baUsAZq zGkaAbf%6^bfH%UM1*dT8J^Q~uL(cZl*&Fco~HxVf)6ZSmZJ{k>-*I+s~1_?UUF z;H?#G;0+)XmW9XBp`e?7;43G02hYmV3SlbIvi38?O zwK4?!MEBqZwx+e=U|V+M4}TxI1yujWn6(VHmW#9QlMUt(p z6PmGs^L|?q`GFJC02B0+R`M<%0zbvotA6>L)Z)xI_@f-zl8$+ekw zb7vE9SwQPUNk4+wQ}h8&gVaXuxW!{|%i{A}G1Z|z4j}Zv?ApD^lLIrN03iSZk`26s z2LrQXSce+Uas{2PCJ80pybi)H;vI;Gg@HbH0v#Fc76$ywB#<{o{tPEarJ8`j@h*Y+ z*ZF()kP-aC@ZLaDFat`_n6_52MxNXIGDODNJLN`dt-())a5RXk3wN+9&IM9vfGh(T ze2w}VyDrzgj-)S+^pSEFY(98v_Y(8|E?rY9xcP~*%`~T)JYJ&@G^KLUWy<5hBpc!K zWLc(mqnN=nRMl71l%G%PGF3-yU1f)TeTwgBt~um9pRPmyJ!ktC@#Kdyta5Vj7*;gY z5UK?F(p45IkOz8bS7mgh5{gn~=#B)k4Z+-u;!OGUE$&4Er!p)W35AZ^HhZ>x34X3F zl&Ew9rb&=PSUi4y5XVKb7J5p;A?-hzj~WhPIAdDr$x3Y;8JeL-NkFbc+dMH|_CVh; zMPgbi?Na)Z(ZC6X=dTLg9|HTMVtc`KUSBbYh6+Qu%IPlv&^yO=(~lcbU0xZ+2SN4O zCms$*3Ha|;{1cnzjaKrSdIyYriAKds-u+tcn`-rd!vZg(2AC6^XW_F3=r4k6rN^R> zTz7`U>1ulTzW(2dRfY_E?2<%AepDJl{^6-{;MIsaawNU!lz_cIJeG(L#SGAZs)h?v zIf_oCrphj1p55-a%ppBluxNKnw}2nW_?n{X9_E(900DzbR%Zxll?XaOkQpJ1U3*@e z&mJ`TNt@?-!@lG;@wT~H#rOg?_+%O@6OqF zuyFoyT;bEO5b+UJEs~RtZ4wU2U~b}L)yCPk^J30~VWvbFxP{-Yz`}9yshX$dg>a6~ zKTNBJ+Y*5up>y%^&Ript_!4Z@6J5L}z4X!1Y{q@5{(*(C5WN%-;qZz;HQ)%sQJ|QR zs%m`0C%Lfu^>`8hwRCG_yc;xsY*>NTr0uc9s|k@g3KfhZB$fgU6gBz{H64)xk_iKx z;1B6HEtSjv6gbwT0WJM!^Kf;q1@g`fiSOt#_=eKtK=p|ltDZ(baMw|X-xF=e=04+^#oG_7bQy*}BQl(p$uQux z{*du><#~jUl=C6!q-a_iK>8jIS>^zQ(WEW7v8AeWs-!mcz0<2kBCJ=|!tYa9+x{J` z@YyV5_1v=5#eiN%}yj$VYb@xElV5ukwzvqut$6gr-anS_JHg{5!OA%!cs>-E7qp_!&+%G1MDdM*3oZokW=*< zu|q*5^KO!6I9Ntn(I2ll50~xmx)C4fux-{rz}$_dildF9ShTEp^Li%jUQsz>b)u0X zU!%;8cah2o#cBN`Op{~%{UYo@iyV$$qvpr)du{HHMm-*LWgwu0r;;1t5ZOLEpouprh2?Bj+@c+yCT$I z66F$OQS&3Jt;AU@>H4$5_bKAkI)~m`SU))cjfVUy5~+-pVmEV2a1i;%i*9->eVvNh%cbWDmDK}`bW z-m*j|A0UK+WPqq%s@8(?jXX z2}dc$`PuW^s90dv*k~kjUw#R)nA$MdDwxQT5-vV%f8H?%Z)y(To7I;n8M2K3!3Mjz zbmfD%5MIj4kvA#ST5k#a3n_*llfQw%rZntD&&8q9;@D&op6h?Zm~+|{?qKOn?V%s} zp{X$u*pJ&q41aUjikhsUDP+1DhFd+GD|K&gbU&@$i5<)^YD)XXBB z*#!J8jr|9${`z*=h3AJ9<wX1==+ZCt3EzB!#09PqXoj&rAz`03CG2!Zm3%$D zKbQkh&y$Qj8Ls@KhQ#X=Ey{uD%~nC4W3YLw5Xbe#o z@%^C5_dzBe$OWC2D={!y-%W0jnEksNU`a_f?-3Eou>Q;g9_g%Ecp8`~cqM64yGg6P zcpm_&{7uiV=j}yvV^LU)VmCyTIx;FT>{QYCB(?ndr0ogUGR*Y;R2Kp|U;CKOT-7=0 zBjqqi8}z4MWF}=~M%_LovvX)D9ZW4O>A0?Om8hi}^?Nk0E~%-Y=^JER_KQsI)6&V4 zWVV9S57C0}CnZ~`ff$gq(YKvJBTuzmv&$2YgpXi*u$$)&wnQdM93C`vB-#qyHG@Y1 zm9}Z6&@WKu$(Cn}q=Mww57#tVzefa!ucFs`2&RUhjY8WgwK=0$?V{`$c{SnWi}%ac z_oF^Zzj244Y-HO%qy^emi_6uOd3@#yMHS|nvL^x^g`?+N?lE<2beyphBQih{3Ke$_ z9tFcG`*?|riC-DF97UhR%q)i04lgGqf1yexgA_F)iD1Q_YLC>GvCw+PLQJfukpvm0 z-|*BSQsEL@+8PA7qW=_;Ic588KNH_vfTsX3v4Cjl?arW$I6WeoDFP8tw z<+w=*PW;bgCYfy3Ef~Dj_mLn0P)yW)>arAU@}_fq?#_vcdjjW!x$Mg3%^(YVq7+%{@YzBl&VbcD-OR{YD{+A^kL=wxzz358JO}%Pjs)iV_VyYA0oWoY zG?lGrFgpxfZF;_AbVIxe1>*K!F%-Kndh}_9=dK2;^zzOI_g$h)+Xwen_xk8C@0N$U ztKYp4{ocEGJ(re1jIf?hSV}7aMxNlXm8j0k@6^Z^orMVcEnNI|E@EiEcWga5tp2a4 zUfRA4az6jfmPk_8e?EqxAl>!~nit|-B99I=kyzcEw|^ii#E?MXw;l1z_zh#tA&q)y zV!Lw0q6k95Hb2{H=c$}D5;F?vgbIL#*1q)qYMQlp==-hd-}l@dCdgjT$JeRtUu$ee zo3;Y@v7u3Ku~Gtwzr;<|FTWoim^r;3+R1qa1O)W|0;NKWZ%+OC_TI(%ZVy4Lwz;?4 zuRuNi{SPErJQ)B>t!m&we;w5EzsPsLl{_`!{ zFq#6ee)GHG-_4bA*EVn3)UmxgnS$A~r`HM9`3G>z9i5D}W2L1d0wR={e}rAT=3~ivOg7oe+?sC2AB8XBBwF>MJe+)qio54i@`+hfi_?qt!Qw`lt7rjd(pG| z81ds-(qMZ@(gTft{x9CXF}lt$TJyxV)7Wm@xUp^9Xl&ay8rybb+eVwlY~1k7N$1zh zS~GX<%&hzU%lf``@~mg?SNnbT-lah{ov@S$;bcbXL#4b+LDuGtGE&E(W7t|Zkfg%p zzubjViZN}I&eSNGFA2knb^Dxy$q)>^&W#`RWTckO8nP?CXuFUzF__RW1kL~AkKkwh zm`GyTUC?D&G7 ztN3D(YDhX!f=g!VzT*>SnX!ZZn`kB!_G%}wV7c+2R?^9XyEa2y1 zqE#R;(keWA~~(`csI}}GjxXTH2Ls@ zIB8Z2@J53eLokz?n@06yC9mKwUDDSH#fIpBbsr!o0VJb@dCcww+^EMrjKYZH0~q_#LYgy zp%KMk?->l@0(>_-eNt|n+ao;@!jJO4Dl>GC{X!)Ql~Foz2p|b0?Hdktb~FqVEkKB< z-N-eDq-5nyxB-{40Bds6|xTHcy6* zEQln04^=7v@?vanXij7_^@Qsbp?V>T5pIV4TvteWt6Ru88JC=?p0<>DA;VlPYZxF5 zCOf0bwedGiGqEOQ`zb5Xq~)3x`Y~W{DxD>%--^ z7@Hm@{&=k2-Syg3rmbglBqh9h>9>Rw*Kq5OooXmr2R+X#`kak2Nx+RonTGiIVMCjn zr|CDI6*2~xpf7?aLr?sii{MqHWTuW!BTV>d=6J~(qTThWKA+@ff2uPzywlb0bovX? z_Nc{mwgP|h!^!S!Zf4HO`qg;vjKaf_`@NlxGS5Vzl~q(kMpOb0E@j9Zck0SNAqgrO z`a&HZsLDP1Lv9ZS=gwieH$3mg4@Nb%)ESzz@pkDKO1-Mb_ujX*#Yvk3Gxf)bD{75A zAaG?yH7ARMrTCkiA`5eZ$s^z6g!?onI!8`B#Z#km$7p^xJQQizfVMS&lsZ4L<9+f# z_q*lc0%hJfglJGLh4$d7h%*YUW6ti8Mc|qu;OIxUIu8N`BC6A zxc1Z_MiAn)t{o)A7GRKIkU|Zi=@@`@eVsQxog>1ypVRG^CLu3S^?tr%)fL4dszPsB z{`TzK``Jb7UTrDXTc#Zd{DXrs4*h$3TZW&IE~&P*%m2Oi1$aTxQsyma83qHbQoZxT ze{=Wa%nK}W{lYJ%OCAvjtY`P-e?=?UP&f5h_#%j)Bx5NHAahI$LkeX}LHYoPMFLj3 zbHA<$hzb%xMAYQi%81{JlAy2Q=8ePVUZ=dUcC&O=wMQ}i^A`|8XQA>Xv=rCrV83M= z8DE8~ROBlVc=`U<^zf<~4uQ^cNW0Z&02)s+bRA`E(8Cg+jM?$@J$Fuh^qxpbl{x-3 z3cjV;$k0z&}?%*z+mgT9QLco9DKph;;XmCZ;B6eKYOb$u}2 zxgzou3+Z+mjsL+p+s??g9+y}1d)5HjTe@`1XiB|FQ21!cs{AWnOv9M8dj%3M(_CWC zAUmEVWrBTfSj8Odlo)$+^{eiI6|Fc5baa2FW&;}fiFhr zIP{u zwK9x&ypKU{uBz1){c9x_FCVNx1Wu+6eG18@<$o9gp14@$Aymy}Rh^4E7@)nq*u+_8 zVEqR=yjKb%mq&iLd%C4dZ*HXi%;Si(C)Zg4U}Jxiw#}DNIf@>fe)e@B|?TQ zR*Zo9LVc(F(sqbX*%vb|eF0&0Kh08}Z5YXxNnUKDR5N>M$@hB5mWFy-cirWei~vQd z-*}Il8KT*5m^sm}hWD@DZ(PEPe!ykymThaa^zbGb6^pnQzawu>KwocR`^~q3 z5?Thaz5UTmUIiP#LXrXXwy}2B(yj9in{IQ`5LC-1Y>2}2&C3SV*u3tdW{^ne#c=rA z-c(BwDOq~3U&qG}%e9GN0-i|vGx{Ff?T*%MWzo))>T3zqVozPI4(p6N9y|oRX2y;l z0dp+q@jHUSJVeRns)By6y#=3^%u<@^^c+k%s1#c^zmxH)eo>SE<=^rFE`$dWeeWyi zzRNplo2?oMTwv5p-~PG^d>Ez!7XS@K;O^by?n(_ZkavV$tGL@{y}yzg2;5IfFY-p; zQb0!J>09Eu?e>&(ypq<|{F^S1`?908vH4w@U`pL><((m>{_M@9(;`sXUyiepr4kv= zO-3KFMJgB7g3@P6eXLV!m~qKE9EMRwTD}V_4R7wIupoGY6Q82_pInZfxbb~$c2*Po z;d9}!zulalb+&@&IWRkWcXpX4>saZ*X+c}Lxn%wp<-PXzx1yYeZUuj05M+g@A0Orb zKHiUxY9O`ByGA9z=#b%BJffoW-vqk3;v+@q^L(p}YRlGp@==NMG37{nITwr?8}a|{ zU|HK8``v_^FnP8aD?H#0!qE}(thChmYz47mDz|xCwE<}^R65~xE_gATy2_bPf=0SJg zitY2x1M>6c1EM>a;#K+{ zmAD7)jp}g*t~OS{`+|NLcvwO#3k6_}&&7L5H5~$Yfyk&?ppm#oRd4JVvn~2)vnuHfZJXWz^ya-G0F4v>&_KuDIu1ZTDWtCZ8uNk1xd5SnxX}x=nTYJ=F=V#2;?5L*Pf^J5PhwO-qvV5Tz5qTT5m9=U5~sc5eMyDDQfjl+CR@^=e?t_YR02oi{_mwEE4g2(u}aUi2>+#wK$ zUOetzAkPap`~n2lsQ@b>xfvRzJ|zh)H+JEhaR-*1C-ksgqU`8xlpo(|$@< zpFAz}qJkg_5rZh0#|akJQ0`O3;?+#SLP8+1nnM@`YlV&23fi95-?zmgn>kl;QI7SZ zBgrN@2|&&Mqm>?vr=xhSV;Gpue_#UxP#f4jM$Q;({2;D?1dS-oKr;ed(EK=ZE-1X# z_DtK+IlfTnJP0m3I~yag3Zh6^L2Me;w9f`GMjFgSQpCG1-zK{a*Pa{L0KSjWX9j9b zW6AqP??UUQ6EVW&*D16fQaLifo}^%m%g43oOugm1&PsMiSAkOdc+5N)Jv0qI%qWFU zI3NYKwB|dt#ZrwmJG&`{9Sk4<@@K%WMA01Q4{-H7uh^<^*%1I3LG7RWF~=RF z1#{exK|Gl*XKs}iO)(RMHO8d{n!1l(xuX-^?71- ztBhNke&Q>4G(o|QQ-|tB;rs%(Zfx)o_W6o_n%;QZhCl5jK^B7p@cBv3?&-;d=Sumz zw)JwB@zX_1p=BMD#;ktlQ}45pla$h`!wffdAD{v-r`ZxS=vg5i;>$NNDX5yj%o5w;fs-bI;;=hG^wf3wqBNCYqm=te74NbdPz$R1Xm6)MpP z@_=u%A{lb=_IJXW5iUx`%vFipW%##wa*mvqkHEMVbl>HN|urBW?BZUQSffXjIS4 zYW3SLydOAbZMfco7OIKkT?a_BN+mQ43uK@|I3HGJAa1%mRUd#{4IJ~X8QrE^C#zNz zV^C}qd(i-9)1{1!%#E;SjMAjBRGXMFa%W8JDx7FHcv;mP+bBt^XHHpES!JH?0MU?+7I6 z4K73C?xRU+ZP(8gmS|`?Pi93g9A?{kNuT*3y*M5S_?N<^A3GSYNuqy`Fma9hY`1Iw z)sG5?%b__YETqABI8opoBqX*FGcLuUk=6aMsw{DE?t;J|at|r+}fETl>uix>@OpOS# zh0SxfeZ~&XuyY2_l+C~p^rsdgDs79^eQTK;0yD9#A1iL}d3tTqt1$cm>gTl0&NWk#g1QfjFfsb~l81uGec9 zZ)ypqCpq-NY=+&)MNi>`aU^$>4(6jDBd835j;Mc~=8gC6Qo;mZE{PI+5f~bb&Vt+g z7snS2;N~M}pZoyQyuYQ|4r~hs$QC2&}dy7co00-JNMS9~e+famvIgobn_ zahwh(`%G-Ue5%^4*QH7T;2-er^sGjtG%z%LD3NFd3&paPq!Fi%ncJgt8*8`7rNXJh zixv#a%QcfUhd-kcg)Z0iK#o(~4{%LHUgAIe#uZ~)!`o_aWs~J7nUzZMy@F4TF#7}@ zHS?Jbb5y6yop$(@5_|8YIC0^D192Abp-Aw}66G~|U!?-dSJh?BYnon<2D)>9Ox&W8%c&wYk0MG^T~vU37dPV;mZrz^4$F91hboL1ibQ z_sM6qtT}C|@zq-!bZe}zp22el>b7j&GYUIhB}MLY9XdFPCauNyXnk9%@~DXU{i*(F zq2VCr`qH7x+%_KFY%5m!pF;DBN<_K?auUj}1baPkB2A|;9rD=`&X9Q~xjvkjW}wzp zo3r?Qmf}hrpC5smvfYoAww+8eOC3|BZ=Vif0C#Wbp31SQI}))K=iZ@@PsTHzV;N=r zmwbe}SS;SF8vc)mIx<$*XO6ps#4{*3ntVvX3fT2}W-vTiOmHZ9+gv;IbF1|T>wW?uk_>IW?PMz#(pG zSy^G#qJIMJRQS8D2(Hr#T_mCTRBVY&@Rm4QvgqzR;$Mx=VcslJp*T4`x-Gwu6dOgq zrKqz0hlaR37pBchu*kF;SlRqJRUKzzyn+(fUZe;*?1t8A4op*5H4JB!2 zD7>sgS++_^VghYbeeT!4O)v#K#58#tzIlxsa7FGlfx%IwkP%U9F2PX-_i3IXki_a9 zPH)zy{#jG?465)a*#zGw!9U=&nt-9d1^lfuH9C{=J*_R(6U$Xz__fP2KT%PClCy}L zuYh4bsWPKi5DHSO^K^isOU6SS1Sgl7DTY&j*G-64QZ+YS33%niW7n-cLn0y(B^$aa z>e0yi70YLN8OW0OdeB`Oeoye*hf^eYsS}!}sx(!0N2P(I&otNY03s<+$CQ+$>Q?db zVuH~t!)1Ea@dr#ETtNRQ45Qj zo?_IUf`pbU1)qem=gZhW#qLZ@!u#l*Gajk0DQ5kx&vG&nzTzE_Q$RY!&>IXN3~$m( zyfrAnJx#`*R?TevR&DavTCUl=GInfPDpp!8##+B2Rw_QmTGqeC;BZvqw~(60&P@F~ z5I@qE9cvB~(=~=B0~fUDgE|2cVnVIKdWi2TQ41Ot7FPbRZ&Lr)Z~mhT(EqFVAK?Cv zFQ@;DvHj=nfB%cY{ilelB!gH3>z4w@$IRzog@Po?mhayuZ-8Vb@J$$F1BIUY?tqQtIlrt+Uy?N zI&UK+tcch-##+Q5k*}7l7Vh-gg#&2p%nX0PfuQkNz+b0%@}GDDD)&1SCiD#aJUO3QDW0 zg~|GZ3I(Wc8I}!+FW|JHCkX6rb;(wKkv5Vl8Em95Ym0WFl-5l3Yyc5tL75EAD*R#p08jynY_2$^Ws z@|yR=TgMPt`*@Ng_+iy3uG3t*?iHA*MD9~5iW0#U-qzKPx5>0(c~u=( zn9p9T-=LPn!;ON3=n0*qwVwl^IPzD>09x7te#?PvT4APZZ()&y z(f7m{8Ix*jlTV~Get_eo6Ylf?48lZUBND)zucDVLpWFuNxwSX1KDRRPQfWqCLK{VG z9JQUUlg2i7R8t1wUB4jqHJ+XLWtjAEIe5Zt2quEvHtNi$qTuwr{d6|a7#}~Y0{eCi zw{=(h+1bB45EB*9%&<87vKU&1aMlfQbbBoWC&+m%dnYN`EUFo@H&&sOct({*MjJ|! zrWl9qAj4)s8@`?R07pm_m6ZbqYL~&|jkMJ4wy_Z^ZHQMLmNh%c32xnP>Yx%N8 z;wwtc>!QwxbIz_m@bUIKp7_g7-S;z)l-j~`x!W}hF{-JOUOtKV5m-4wmp`Y4#%pa> zWSpjD*SdE9@C%eFY6wb=qwU!<$S?%Z!7Frh@^}ntRbiH`Ge3qXq zRm1W@9EjtPIQUglJdVNBpNckVW~GFOXXpcJ>@3w(Q2q9~hBO=r!1sUoO} z9?^{gRSL>C*c4E*4M;9W1Ft+byXFB7(^>ahU^q}wK`>opiWKnqP;ts91pBY!Lh^<2 zhPk&yy&=~EIiGuz0TcU>-IaQ5h4HNAqTOc5495EF$`AUyw&y1QT8_t)?kk}Ezc>N# zF+!kG+xPF^#GeFwt&4{XkJN9!A;F8|V8BbEz%58oC(s0vM(G~PNuFqYf6NZ`Zvvg*&bWqaOI*RlsasAt zA8Y{k0GC^=FxMI@&)>>yq1J0L{-&|x=x(2mgdCvC$2Ey+!ohYdx*2%8;ve0?FWAFuZJ?xSanozHNToulFKn1! zgEaU7IF)L@KbS)$W;Nb+^9*_JAXe+kFO`Ki>ddfFw~plviJcIiUUnZ;GWS`1RK1Nc z(}yewo%VgIDf8T#T-dYGnJpXGrda{QK6eEjTcwtSQ%2RX-J$oEBB)_$Z6!+%WeBOQ zhd(FhJhc201H-l~(sEnLVE!e=+=3nTBLJYqiXO@-r`|6Iq5PGgHH;bBbrph#F5fdO z4gP*atoaOdd@vj$CszKppzkG}puVLk*Iuiw^?knOa84@$aVBi)GODqF@9g) z9}g1bPi)r9V3HHeHaBGhE!FSZ-=%AHA_`*}mbYy5Gh3Wx)O*iX->%3B0@FZwqF|z@ zUCF*?b(O#VX_wfEvLEJrJmmPXgILJP0*E+KKzWN|GyYrafYDx1Ii9z#9j_v}x&0@= z*)IFX4#aiaAK{%L!cP$xE6jngZNdl$vVo?HtK}p@>R!2q5Onxu1c|Lr{$S|f6f{XD zCOkjtOJ88gP8G={GE53SqkU0POKvkIZNEUsi0$$@1SXK}`}98Do;MdUGnwTBqEuEy zqgLC<`RWostSUwDiha?ItKwxTD(pY~=idA1-P}W-`)sjHgT`V(ZB>X8Pp;M0bz_0d zCz1|_Q&y`mSxDK;CRI&`0(83P93C_c=d?UcA#wU$E}flHlK98?L@A${$iyyS3ImU4 zdMoUdjn>j)i8%3&rP=)l@Z#!%5Ryz_Q~c7cwO#J3?ay4NcPixMl@YD?2NRM3=u)Yv zeF*KdIyBCw&uoMbNQ3jl4}DVV7d%&`fWjqowR|v;Gl&++oc6jmZf#m{ zE?Shc(fb!|O(Ggl&%x3Z1W@G*fnPJk-}BLa3hK6v#Doaw21BK^cKF=;#52|>4Fk&( zg9Wi_FUO%>k8-6pinbQ5wDDppkI)Wd&RP@5Q%pVf7w1-)8P?jARNAvq2B_nAL?Cg_vCuR0oP7fPDf99OXx6b%BSQn@xd z!)HH$U7$2t(_7$%-bw6sm;(94(Cq)P@=HtoMZ7R|CF z5r-p(MM@XBw$-AHWGmvvkwctmDHJE;XSVD67fpX1-(ZpP_X2UG$-p@{L-aM zV}}jSA5{#nR8u8$?ug-#H$2s#dlB0mGOHj0K?$*BQd051D$o5iv|2HL(19`AGVj5# zYRP@LoHPmk>4wG>E*L!q9X>ZByIwgp=1%FJCQZhaX=%z2Ga!)4Mrsw&y|T#MFDn@K z)QN7VclXGP%H^@nsD~B<3kyEUUi|C}X)u5U8FD6EeJsdW*g$OUl1-eL4mQCtG`SEt z8@CaXY8{5EXwekWH-khX2qOB+1V#>QKe+jg9BB^S8&`H$yK_YCOSk-fWw&z2Uo+*; z|A^Bh`Gh?oKOdIz(eJ3?wr7F(#d*ikGxhH?7BKTRc)FsTFWB020lih39~qpOXIzgC zbJ_f>-U|c#HCUVn$N9l9DfopI#eh@J7pxE@nv>F{qW>+Q!(K52dgNntD+e*h zJ5^9ZT_l+$M;F$}oz_9RM5HK_aQ%U0#)B{!D&8YI(qxH6LWBY9xN!x1V}?N(6zBY9hzJVoPj{$@$4X*pm8GNeox&&BPoN{t{3{%KdJ|Y!!4qJX5Y`g zsSR}k7VV7hs4tisBrs+n98nQAsx2eCiJ?za0ljSQ*AH)|dS%wW03?Lq4p0+a>TPjW zoWL97LPK=M4dWIRi!|fL-FM@BSNB(EZOaCF+q-@%S$kNmi_1NJr%unXY8oTctNw5~ zd$Q=~Lr#xG9bKg$9Reyw$|t-lejsq!6}Y6oiohnLJ@PfG5*iUFa{I5z1=Wi;=b7DD zuVk-dSbR3WZkpD*_vRQ`u?%E16?{-%w-^K9*I1Ai8-IkrEd7R=dYQW#@XVQJ0at5q zRJ~WY5uw6*7x=7hW#bQWA{~FAJ5TCV`WsfMo2qa|@R~TV4y4nHVh@K$cQpO5sxu)4 z_!KBJEr~y(uZ4Teqqu zD~>FebI}&4yW*~N4e0acSw8i}gFF7gA!XwzF9BH6Z2y&OW{KfVGK~77#r6R%j@ZV0 z-OnS|+pL2=x^k~0oN7!SiI_l@rL(HOA@TNI80|`xEHy6g?zH4wXV)9&2gVzQ?rv4{ z7(4|9IV}~5&tATx;x(k$+_BWQJZOjk-`uOSE4C`FYUIlNCP_56rj8>*Y>fbl^1n<~ z_c5}4JL)Q-rprIE29$8G!Io2=7Us@%;ZE1LfQ2oM6q&CF+SQ9M5M12+D>Rc&l!Jca zr={YD@M+Xz-^Gs<8Q!@$zI3qSymT-~2qk0GVD{sEBWOAZg1;-Aw1YQ%DFEZ>CIi!=pDTx=Lq zpF*hvVN7G~Jzk`l&WCG!pU@3wt#d$OnOa^AlB*Mc?MX`|FYUPDWGoRA z3e7c$6*G=R1`Q)C*Z{GKYxF1l6oL@2jY>u(3i}fiH-AKNjip?#WbgyrIteEBje!&m zI0uH=20WV46v4GjHXapiG2}Hg4WlFvv^eDu;`BUu1fFc6RK9==g(nz+WV(EumFQZf zm?90%0=pBgA{&<+df8Hz)`Rv80axl-;c`QyUZoUt%_=R1*q-G$dZOnToLlp86IB_g zY@cw}HdN=f_~AXh3RMwSMqvx1Wo?mK#b!xw?=yU!BJ|+1FIQb8C~ePh=$PAkMHB9O z23WHqDujrJW`Y+xQVOd1$~qX$hF6cw*urgz8vyV**uZ;7bDS9<30|ybRVYu&fp6R+ zHCdifkB`gMN8=Kj5VU8<`V|GyVJ9+J@F!(V?DaZkRdU>v!zM;JS%C&vKQW)zfOY71 zgVC9-N4CFr3RUad$}RrijrMi*-fFT|S6QCqPxBH4LHr6cSk=@;Ay?4&> zn!(leKw4pHcgG$)DbGnBZ9U#w7X~Jh+g- z?#+$yp2$jJ;ii5nfd$L76f1D2hRpk}t~JOTK-;MmzVtFO8sE(nzRXH&x0QTOxd`f# zYtz5GX!<;>-SfKaxhNF|znqrt-q@56kbnhj>tJvy9OG91OHRfhKb_gRW0mXQS`FdV z`*OGT(sRKYf!7xQ`PLz~wg`AB(DsD3!DhMi-Z}f(2z@`$5CR64JOm2-n=D_^n9>Zb z3cbd*%J4mNOi}AS3PByX#Ntj<`|e z7*Tu|!Du<)#ou(1PtVheA&om93%c!B%eLw&Ea*&t%PHwZbF{2yMA*`RE zg_{ytqpCb*EhoiUT>r}?ze1%Epgd&Ffu?~*#3(98A1Er#ch@DgT^P?psS~kCp#~=+ zqA78V5?^_*pgY=1!sU~_~B7@EQsppi&r7k?o77^_ZzcI)=r;bpeLbYHBSlkJ) zvE*#;^~!`yQqpv202CrFUQP8{PUDWNRnP3gMD2EQ>A~U$I9g(>0aXqiX21Z>JgNo5 zf`zMVUhd}SetX_0{mQa4tYT+k4(c51nQ5^MsixI?wGHR*b-*LLy>j#{3e{`{DB>7V z2RE;K=3!yysI;_Tbrs>S4fC<4EhsvKth>_C^9l^$g0PA~`k$=~uU7~dcv7=Wf3u7F zKj}VKhAE_t73Av_AmMyvW2FYn33kDp9fp}7{uaRV(e3*H$IB#&otX;C8R>s2Tx6w& zp{Pb$Mat0XoyI=ATair$55Qr;R|IZDh;{lz1=|jbx?zZ2Lyq@10PpV0l%XRRtRZou zk{5&1gk(aU17AQfg{;ivM~xUq8YZWVGqPY#CiYS0CniY}YkSa$-UQxQ7HZI?!8Ou} zO+^Ri8fs_>C=`Cv{!9d~NFg}&H6MI5upTp$CZ7cZ{=?jr) z>O>x&p?bQ=Uq%}ij{Ix(Tlcp|x9?>#Wvmc2p^)MLP(clJ8m%wl&Q~^>N9h1m1HW#E>cR0)G2WJsglDQmdySx_yTl|ffhjGI|> ztN;Sfc@k#sX4`6e8`->gad_8O{l)fc!t#Mv}`}fM8+f zd_5F0;NC6Cw*%{}fcg|c-79}MRI+ahV%A#&;RC!)HR%zd$W(~~CxYGD()5_)%^Lxs zbNmjv`0Dd}HY=3BIX%@Wbzc2#>}FNT#@JGRLx6pN6DN)q2X$x>ZAUyLh(UL^;FScv zxl}04ACDA0&=O_&S@eV{e`4v>Ib8rgH}q*KO4E()XQb*x^IekZn8)%(MOJ2Mf_;5! z5+aAWbDLYzfZRk=apb*8w?aB-cCPAGxiz46&p{(03)L8On$x zqV-TA`WpCJ^G!{HDdN8%W3BLRuWi0TmMAGaxK zTWWYBX}NeHk_bAVp{;7VlFKJBI0h`LZVHlN&(+ZR9xYGdA5uCwNmQxbQQmx zf38GCmgIN;MS!*F(|Ya zfrnapv>ipxd&Z}(E4P$ZPV1eYSjW7XK-(qbp%mh(jf-3_QT>8&tIC^NmAYmynE6g+ zrb+9F5-bI5hEw|XXmU{RRmLZ@?Ms{Yr#(D1sL=1Y=0ydhN9UfDhtQo7n(FqzcP*le znSu#7bKv>9%S9{j4RHfsUAXNN%Hvmgp#tPwN1eH58~R0JEJ<(Cq!?eKg*T}9~PSLlzBz(xg-|< z5spu3*?c|P!&=nnjRN`2W2TeX2uLyY@qG5@OgoM?0T)E2p&)`o!Q@(XcZjNC#I(Z# zhbEv%P%W=2P6Vw`aHu9=;IIy@GAr=fO>Af+{NpRPJyyr({P_eyig*D%B((XyCBO1T z7bKnFAySCuF>$ZANHVoV*Eo#KKERC;XJb#NgYq(v9g&cKqM*UV{B<(nWCFJhB_T_| zs$f+mJH=~6mQP0&V$Cv1mvbf~5R{uUBW1^HY(GjqVZ>tYMv2HI7Ns*ii7Yr2J}69a{STdN9~T7CrY_&>Q^5HW)C*yAi0_*$P68KfV_;v|8)i?*-NJ<8pNNd#UkdSR zFHOZ&=ncrHMmg+(ms5AAEMxr#==_AE2nhth3l=Hu;w3st{F|A1Lp*SE{#oU~fkH-` z9GqV(NP)~j$62_p>x6*(x(}4ZNvO5`~sog(nO zFuL}8CF;%UvNLzgm+}4deAyoe6wR_zkCq{;I3ZRGJn^D8|0osW*Ij%?OD_!B^Mv1n@e=m9 z8xC9Fc$-%vZU|67b_dRWxLgr;2zIVPya(W&ijAoHn`>^GCpx6;I5?!6)ZVbqFQTPt zoX>T@8Q{zFC@9G2YnX4F#s&SRo+AVRP zg5j@6s7l8@p4%5rchjJsPgf91zZSWc_z$luuI%49dT)DAB-0;9Sl+KSUarnG&a18O ziA}?a5Xgzt9=~E*qQ8C+C(Fi;+;czf0j9ZCfh6x)G!AOzmfTdc6Yb3g$zBYoB8ejR z1lLOAZ%1Y#lO&W3CA0B$%@~v-7nqSfG}^m;0?1~*(Ho4F5T_*ElUr# zz+-_?FkX>5yz#YudTiVA4~Ka6_g!c!t9eD?}NAt@sg z8QYEE2-XUbEAWL7_9%cQK230FTJqjAp^aAbXbAwK$`~uMBP~rsb`1Or0s;fMSb0ti zxoF(RAXQAL_j>p0(FZspBCVTE0_JJSOyx^ue823vLiv&yF(8U7Gzqr*%hslf&*q~W zUqA*FVj${r2{?s}WHQgJdXDFY#$bsgJa3mR#SuLBU`&I8p`M9aBTc2)B(hch)U`AZ zfn1}Q4SSI#SV9AQd0DxKs}um1*O(bu)2jz&W6PnKjX7w(-@cTf&8K_YLhMa;I-p8t z1FtzJ#EO0+NxPo*!{ykC;T9GN3>PKQXAce=#V3>gBw@A~(A#@xnOc8hlX#R0T;G9hVk;JRH4^}$1>|P!rEymRc z1;s!>yYIN?B5hwW4_P0Ds+r=?2`)2`czGc~Ano3fFKK6ch;M|S#TPYp(ntkE4MM0zE;~`|1$Vn0BuY{00AXrRWO!@MHXeLxT*$^lOf4Rwvp0; z*M`bnnd5~%ghy0q>JYb1O-&7Z0O`C8R@KKC|8 zT+o#xmblg))CV{Rye??fJINtkr<;@$j`|gR;MYucjyMWt_VdPqT9wbhXE}f17%M!q z+$n5UGL(?&y?CWiK}i~VDw*p!d>7CRUDixcl@?7z+w1!EN{W0V0m@X>%-rp(^#7yS z>BHqRv8`HO&ppB*|0CVl|KtDqkAD7te*Zz-|FI(Ne|f&@LZ=ctCH^>+Obzc@+1{ z4c1w?$g=-|xIMP3AJ=(6_g7Jg7+|wRjQ2`}NB9rRa1ulBEpp%=Hs;&WU%#H34Lz+V zm@{SyS_Hh!*TV59-HAkH<3HKUI{KCpA6>l;2cklgz&B-|H|hv>94Ij!Jq@}xrZ7?8 zzlit)uWp;Q48%uSLa2wn=7GSxJgotH`pF%Ba(&4qmgDyat@WROzYb_AI}LQ@eSiZ} zk(==$C@_ODWQnB{>XQ$;LUDsW0zG$}x4X_SxbHm$9_S=q%p_7Is<1otgahiJkPc$I z{J#X-kMGX?aE*2cH7&HAgueCFo8uooojf$`|DD6Rf$~>o=!c}S6nXpj?!P~82gXU? z3_fQ>NwP+XvGnFvD;X45kI2?bMko$S4&Kd?hLGe212C~MKfpZ*v19!O%NhgdhRi|$ z(nnZiijjiqv2$%`cZQTz-mfWZOq1?kz}NftHZHa#uI(yX%hkp5cAmF)*MC!fi(F*L)e%}^pig-*+mbaP zezovk@&O%vHeW?OtA|XSc{WmEM0J4GZ+i>Rr-)OEsgr;9&VFn3j`VQ&?BxWI2+;f-r>cbAP@ zaCdiix1hmEa1ZVt+$FfXySoKXZ~_Ep-%aYTy63ODRkzN|dARlUQx`li7;E(GUUQ8( zXJcYC%b_yKi-tywi$2evp+R7Uu1DQmi`H|K(l;V{b%h&$<2#PeY~bU@_sf|0W#t2+ z%JnTcXUFeP?1DZ7L}qQ6Mm6zCMqDq!(u;+?k_DdN$nDv=)IDa3*MCRFHK0BTPk#r8 zLF!WQJJlD%FL&|`5lK0Pv>vhoBa#~h(HkA zw(m;#Btb<+4jqBCS-isDE4D_3XhWAC%HH&*dsU^OZO)vHt|>Wlaqvx>3hzX``W+k< z^*~TB&A4Qw`rn4J>5olxIEqlea0xmcLJg~ynSb8g*ET)Pl(>dz%d)6-d^~)u$KUm> zf8=ahDO372Ism9223SSI7kt&}zC4#_a5{fMek|4+1~N}AN1tev3xk=v)hi694BY~i z#H|sC4MvWhFoN<=W4qmrjh~_DH}4p*X{H*iV3;~*QmI!Ot5ShoJ;3ts@%K&XdbT;TAmlYj^6x1Q zZZj`ERnxt%Ro&aQWNc26w4c&*e&!SEUPzSoQ6`KQGst#;G?~(64ST@Z#A-vV=+EgD zf95c@o6e;QIVTzWF#SYnnNn;CSf!kyKQ}>h&@zmVScj+~GEzIRKj=3`cqQ_^6NgRZ z`?s@ZEYzVqmX$=;nqYz#l{LoW?5Ko-XI@E#52+bi9p;0JSya`A)b~ugIHVgZUFLF4 zk~%Vz{6M4%##k}M9%jo*&=!84MIw(2jm!%2!xB=)^j4O?*@c!?$qen6$abtWueTyJ`2H!OPxhe_I2 zQ0K7#{e?H0qO4xXR`Jf!*NV&6#B#fd*@zk~YCi&pgNHrFEjvA5&?VXtJ0+7E*KqF)WvZ@texG6Idyz0*xwu=Q0FT5K|*n%@zVuk+CIt+X)dd zAGY0SqD>wa7BR%oiI2-T$6$CNM!0Y!@h_8>Kd>#3@|jfz-q|L(jxxU(hyM*$pd!WO zDFZg=vmR9MsZf7iBP2g@Vqf45^>kxVx#l(BMN?Nps`PuGl+3 zBl`+5PQEcJ-o#XT2Lj!#rGe8Ycao18n#AEj#bMQ*?3l&R$E1M35k%2g;maS*o%gMPXmM(D8EaNo0M(- z2jghs58jzYyT2zbK>m|m#IaY`X#wXONs+n)UP#3Xk-^wzI3heW!?*t3CwL!RGvOEZ zAFB-kqI3zfqEzKL5d-A$>)RqqrNe>%xERv~HKz$QK|I?5b)SA`1`>HEI29IFzio)0 z9Y{i4wtCV-6M8Nne~?QqCe(4119~*c!t9wUv*CsRZEH(p13DwWIV7vb`>M*4usyX~ z4WP-``0*rUPFR0Fj3&}8EH^1@F4qB9-X9#n3Wng7*1-^Z9x=Z$mr$I4&XaE3P0q-N z;MX+GEKb$`Beh#^QzZ)Xv36v1)#aHMP@ofKpC?Y(h7ZV3H1ke#n>|4 ztL~||Y10gMWN=_vi~Pul{a%Q~}Na8`d(!ADh^eQ2+gBmop*LXWj#w zAba4|!ztVJE`64_aHGespTPgdpk|@0&T<@Q*r(c=9e+>-076fuD#F+E`9r*x;3s0v zD7Jz#*p#M^W;+^58|4~k#V>(mCQqz=RPu8V{h(L6ihQVq?@L2>27G8s(Ag42ME0^l zyAM&M*%*<1SKbnA$9JInNpG285T}gLxhU2OWSU7lDnNF5=&yDi|OPI5!s~i%5!WlxZF2d>*yw-DY5NZ0$u8L@W@|yL+ zv7c#g2JvdpWL)`_)ie+mMa-*h_;VB9kiI=(h*_*my3ikJIEX7lPLZ`DD@cepK^*^I z?507#@eE|pFt9NRAfSUQd3cTbsl^cWbypd=sEE#KM@I4tl}^<{{#C{WklN;Mz1;j$TAJMrUQNN6^9K3@^~5a@b6ttrLB*xZE=gGQSMQH3j*WL9QC~ zQ1Z);Z;smV56H)zL2fimH($hnSbgFHU+a*dbk>0p1vsq8UKFSGrG$)!1(vz>17;hy z`Ua?y;fN)8CV8ab{Vvn3)2GTAD4>eCmY4%T1VI;C5CJ*F^58@T_$+OLGRC=_; z4W4e7Gi*zh?)N4{{L2S@9&_4n+rr(5pQALiC_h=B#64+LS>KIqQFs3x9Zxw|OjG3J zD+mq=mJyH|B&i3+`g}m;^U)(jz>1SI%Ewqs#^Cq?5J83=OnxV>iEe-|9eM-ilZ9+g zECZ#3RuO5;v?YPnX0GL?;MAW#ZC1J=*`gv^IK-XdOTW|!Z5yyI{gS=HDB|wCA9wLe zZy?wu%03Kc?ur~A=z3#3Pl5f356eQ}Bw0_6OrM%xe8W;RcjOVLATi1x;m0YaIzrGB zX3iba{y?e932VX(2N0cQ19Ue$_faM`2ei?x$0WLhXpQM1^A4_n{-(bOXJh>J3D6us zkO~3sEbabyAlACs0=CbS;N=@NlSTL?bPP32d$j9`(DSuY0z`mTO!hPJX%h1a1Ngd@ z23ZQ5lM#P;#z)w7_Qn(fFZ3|)TeAG$QcWRL@SyOZU<-oi0|qmCYQb*f>4`h@iH318 zqDv5HN|kC+ZRSUw>LI;|$|L{MhX^b}76`m+RlPN*FK+wq;G#&MaoSPFmm=#|B>O5>i#*Kc4|>s+ zkc_ILfZ>3@q_=#tzLx@ljy@B5@ciXZHk}1e;{AI&;coupOJDG)CAsPKF^$9n05XBz ztxi<&%V&xJcNl%3VsX*4(;u>53Tg`Clo^AIhd9lY@EyQ+$z_u6YfXRbM{F;ODGGe6 zu2|Nwp3tn8nN<6If;WQ>?-54Fg^KUbuEAPLRt}QfmeD^%D4Jxqa0 zL9gvx9_tmLGtZ8WuGvE^TPqh?_WqK=5~D92{&qTx@Bm~^VpckUAeq*|cUe0TJAw() zJF#lEGHfrjXbzKof_`J9izLQPBSCaJ9x4*HL!ta!g?Hl0Njk)ijJ#ruWVje5WgPJE zGN!cE`deUxYyiG(->2JM8%?ZtzB)X034=hJ%fKttS_Trgv1dOF+>}qn@YE2oICVH1 z&KoV%s1#ZRhEnozAG_LXyRYe1NFhr0+hzU4EzmG&qp<5O(55SGJt<;?=P!rqCpce- zQ36yx78=cAoY0#yZSU*5T%!^{ea3F>ktX=*C6T{&@eZz=v_ElKs2_HkRiJaGHaY#t z^9I9uw`1ko^Kwr`-9~xnnq5$k8kTU!X_pPn)QK(t3e)jasv1t?&x|Zv05BU)CLyvl zt6?wLE@rB^<7reuX6eO+DH!wfJP-1fGuoanyr{Uh?-Ff?pWhh=x#t<3D_2^6Dm$#- z*gh+N9i(_7cjRUuS+gXa=N1$z#U$;3{?{DYD#pS2cW^VL^L$H2erR%{C?lCRcPI6f zkRo{s5Y5tKyIdJV6Bb9mSR2_sc4AS@@PWWrfBIV;wFvnEQuB7n#)oVwk<4MT1|%~D z@yBzy`y=-GbCgaUz3=iXhGV}@b5NAh3(>klX%z3^!xD@4>}7c4yqzz9geTs2w6sRk zWZK)2;0DlC1SXc=gLF>_1gi=sb8m}_n#QbLC0E`hx5JJ(+)Fa9=qAk1RFbOOpcj?8 z*!d@9HFrc|`mHwg$bIMA^a8D3-W$QCLIZ=Q%Jhtk z%Wls1P^Jj&U`3>o{)*s;uYF^GET{T6_s+rD`gh`r8C=^JI|txCgJ$>9Zfkp=PsDiu zo=l*g*$_2+jXwz(Ru~z!UZ#c-4Vu5Lv!XVR%3LPAluwq@9#?$y#*3{K#NiJN@4s#E ziirra(NnQtq-7FsB?TpzTF?J&zC9agaOm`O_fT~jfwqpyv!d-(A)^Bi7=c!9UcTW- z%0}*oJ9BR>lIz}r4|f>52d%Hr>viA0RCg(!yn_p;>6oAUI{>2^-6F|nRcOpo>m07h z69mP&dG)Fu5N`k|s-G!`i7;GTwBs()jbt z>+>h-4V|TST6;c;h)Vg4>fuLFrC_vtr1-!HT$E*Hg)&soCy+0+zJUb%W%Xx;30mzU>6?m84~_}*ru>_x6!wt{Wv$z5JEtYaaT5o*DMS!noUD$* z0ahAYlwTWX2(mvkva26CDjf6WrfqqQlERfy>bGHM6)FkS>i!Q&e}$uu_p;A3KApoi z(L6G{1h|39pH37mo$vh-HG{lUc62EzJOsuC;zmE0;K0guSP=w9n-Ve8P4p1X%!|X| zh<>+xIh{5Vj@9TsFi+W`Z%`2>rYUinya5+Zn+*yA&Gq(P*rk8ZyOr1$TiFg5sqR9d z1A&UpRI2f)qgY}IfvN=bOA@Z>L+rcs(7?ixL#YmYLi-{e!N;5=v=leev}Tc zSEHhwt^DIwjK7WZ-=c}t@o4NR(4V{=Hp#Y#ZR!*?yLON)3+Sya(r_#Z#bGC!1;L{@ zy?W>VZCp;ASG-tG!_0y+4~>lEJ4s9=s>Hb=@(8olu1kV~<*d{;Q>U0jc30Z6`USG3 z1vht`KIZTH_qQ7J#ZWf!);`mHsWZZEw-OMmwqF3;LQQmnHYKL5@|=5$JW z?EkXDSNc%8@?26^IWTn}ebWASx@U_%^DC&f_R`QFw5aI#P^54HTF@U^ZhpIwEuFE~ zrN5D36}o{Omp)ZqN^P@D0lLak%UeQAxs+eOgF_{g&HSUiP6x^EfJIJ5BqGL@+I(NF zrhkFiF+Q`ljD5*FUJ-&C_AM*~^~>2l0w!v@%7Mv4r`WaU)MWy?;#NQZArb5D6`Io6KH|o zRLAK$;eyxENIwWJ1c zFasje`r>!{iNX071>1mB5cAW85W)*3+mvJx4k6~SpBC>6qdK=yP7 zteSS~2Z4HOHtvqc5im$ZqK07PMe;Pq%kDwrq1GY!lsg$J7L1-b=&VKvFaZIo+-prt zR6*kc$dS4B$Fhf-&}RTZX`BzP2oyXybpuunv4^~aB$4*a)@lu}J>Ggni&;8R(MP?G zw2!?hm13HmyiCcv9*Mv#qSGp9(ToRW(E`coTG5 zxN7X_MGHV64^UQ059p32$#P>WkKLjfJt~eUS=rLEd*DtgwwS|Ps2IJyE!H8( z$yx+z$TC<*7c-Bh^=^K8mYGgEh-`z}_)Ya@1~6&feh{zsm+2|jxZKRPs-BPY!{!b6 zBgejv&NVh~06PaYBf9*7+tcd#2X}fy{W~}fl8Ksiu$M2_*lt33h@Ys&<*RkaTuB6y~DSf3D}mna~P z^VmC!aY2$Z_pC9uMRDOE{=Ok08`Sc0!q|()dg#KA$D?|noiGR^&}DyrE?x@GM~S+b z7vm2c(S2Qgc6h6)S8{%U6;KhPk|6*0?y@2MX0$D2t8Vly*et-nFj2x1-v{!z7w#l- z+aPQ_0<4mKs#;@tf0?wXtq*aQz?kfFX1n@$%qaO@*;!Uz#YP#`IsUI8mh$|H40;mK zbE$EJY!osi9IYD~ImKlM5jeR{%Mlr{cbShDqL%|dl2F^4FEQq#-YUW~#t%kE{f%x# z11c(fC>%}Ha6S6KxLXn5@O@-6m^d%ePS^`Aukjw!5|-{&Hj zzElnQ@mbpieeUX5C%HnL!l~i3uD1{&G$;z5-O@9OV8^$EOp7E_h(PG;4CrBN9ltje z5m5|^iL2lY1CxfE=~jGc#(yQ>lEO#(EzJM2XBNES0{!MLKhAtS1%b*Z&z5-gD$3mc zFnY%kCWy-~1vEK^0Q5F$RQ~yHBT1uiwvD`FH=%&pf6qc+PGovFYmV2t0Cg{p0$MIU zIUS4zUO%#iQLI>%YLHII{H>W|`cTdLIi%o~THF`D2zS|ehWD2wI#;ugm&*mZmY$Zf ztl?1UWTAEpXs7V8&VnnE;Svw>$hzp--2tN^`0V%3aM4wA$$pD7f+lSa)f9%!m(|~c znHUmW0VVKGGf~TpDD0e>%7rD`k9wM~9V>Acsb)KSoo?5c~Q0 zc<=KqJ)IpJbnYFZTk!!Yy=lQ+7>~EyibD}#YU~T-z<5JM8WI;;KoH4VX!PPblhtS- zOwWPG%k!LpY0!0_Mw(Ir-FuX)B6T$aZ@ea7CY*?ni<3jNGrVN5(u-nq)(i}1ttsL1 zI=->~{HZ|?G3qAUxG$ankn_@6#0{;dbwCyj6XX)Si+imBmI@YAMct!p|p|Y zOimWxiZ?bF2Nj9MhUnoD-riJ*wOJ(k12~CPajy5}kSyCQ$DSN5!kJK6EA++!k;=n( zW$xl7b5J5Y zBcHhez@7+1B1rOwB(2@@m6VXi07+Sius!%xtHQj4RPh)4VJy40nKvLknPgxO=+y#o zTuhvknG3Ivbh(XSC~5s2+%Or(+uL7xSWLELJ%zcJ5{HA^9*Q;$LI<;?A!h!}QA>$x znoq$|;fRDHkq603sveAcI|XU%KO!vSbZnrRur#THeIt840}@D&%~W%O7-f9D4a@O0 z&m9-m?-ni{>Xv_J*|-0AYBscT-Qiyo{y3p;c%b_yM8Bc~o?; zR1kX5Vp`!UFZ>tkg>J0(Bj|M$l`=y)WduV3PbtAGEMh8kizuF1!(k}aLB~6C z_H1G0%q9+2(Gq5gVX#2cKC=RdkYP?5F|?90tdTkNs!Hb&;_fh#=BG606RtsRY@|4g zT?gn!7wjdqfu9$1(5~;q9aHML4$Jw%ZVIV9Wi?Z$U{v#ia-XYJ#>8>7q&_eQ1q8F-H9p&}s* zYGTKl-&BZvc;mB8#Aql`YznSnj?7q@+z*vR0y4%lPxK7VE>kSqv$~8zR;W#rCW(@a z>(_Uxztr;ETXbMof;X&YgTH~nAN&7qz#tdbW-fiNnyi?fnLNv!>e^T#&CN*1zqP7B z3aaPXqa{m?Hy7Xo_Mg*O>3%481)sy5Y*>wgr;mZF%qk$HYzRTcfFdczPrhd$Vs46+ab|(U&*H0z;k} zqa(#C9+JmfBP03C?#90mJVRC3zbv$Y2pZP(cJSC-bga~HyY*0mkIEP)r#F5jEcXW) zKiBCfM7z?D8O)1l{%!5f!Hx#bc0j%-x%NO>HRZO>K@U5@} z@QsUJ&Ld17~1p>e@5Dcnp4ALl?4(L(W+*H1l4)>zyArc zn7iHa?8(61#E29FCk;&oCrS3@hQQtBx~ohI@%8U>j)i8lL3*Wsh^I@uQ{)%G2UT)W zi>^P=)aFwYMcnEcj6t9jMZD}X3RZJfbnn;}qG$3H?4U%GczBa|Ox;+C!x$gG)TQOb zpRBeS8wOO`ao=q9EbXx?^R;;LtrbkZU_?QgP3M8M36O)@qg^}W%^=;yJzLej4IGKKo_U%1eC z<|*M?(@OvVvTSp<7&P5g06Nx75?Ug^=?X*xidA44xsMJ-jPNxgEDs8BySXO3fIL@> zkrpsYxfG46XeK2{b|4M;&F*7LW3ZElxs3EV3@fy&AptbcPmATi8M1Cm_Iykgjsu+oy8j#-tL+&YsX3{jM!N&;J+QczQ90?Nn;$N@;!sJ z-#|N$xVGH(%q|z3uR%h@HCcGc7uqgq=&wuF(P*h_PCcZ4&(BZb7wvVvSd6`d<6=C6 z@?GtlPu+9%oYB9B^-XjT$5k`a3&8ec3?&)l(?sifUbFn$z&?Y=MuUnuayExySXa&_ zBNn=-8t=GnJCuQfIo3v6o_%aN0{fvphhbDMMUyz8<{jk%y z*Xq{w&ETflF+E*&|Ki)5DpdRX7sxF-E&LvraAc(Ac?R_I^tvx>40_$=v3BdUam4q} zpmrYgVGw*#Sa1>mdQM7t>4vM5VSP7{#oi8xr-Ojqc$l}Zj||fYZ7$p^PrKo-&i;5x zJHVgXR*^MdUL*Uys;s~&*d4er9SDskM4t8AxF*vpKP<5zWX}OtnG4S3%k9EQ7M>s^ z&bujI>-CyNd%_Q*3rGYd^EaPMei61&3@XC}wu`!VNjLx4bIIna+9L6>4-?!Ok zYz=muohP}@*e<5ZbrY?1GfW#i@7jOuKB=favwgi0Mwh)7%;bD2UFysz_wpcfbfgI! z!_bhggBCc80ZhDu!=`4aIfm|w+8QFl3F>fkNptOLM=lR3hu&rS{QJXrWyglKH-W2V zl9R!wV50=SA*jj^Wx)*moeBMWTkr;ShYZ~e_d|MC>4SXr?XHI;Kd$&=T=GgG1E{ST z=<38n(@mL0XSB1nF9oB=mQbxa+F8Cv-*1P>F=(e~TWMJo7kWRFwvQ@)sa&^dH23IL z!K~dk(1$gx>;2bg292VfWcy++KHfUy12PkYo#r6VGHL4gVBgF{N4AEHQQgP~QDYd+^cz)mlac*hU zOisF8F$zEuDDdm9%HGXD6j_Q(7In(~Vo)G>)W#v=A@HV4844IFNdmxVSU{I@pJ=d` z5m0|%u*Jx~1NpYB6x`L?(A(#PRLc6N?chdxh?rqkPRO+@jJ zN@@mkr025hwof>5PuYSl0DzBbzydHsMwpRe|5Wr3lI!d11w%Yn((J zLL5J%baYS?*ga}CNKS&N^t+@l6em@R(Y15GS)maE01X(Wi|Ea_5R=o5U%pKFRi)v$ z;gq|*-OpXxr~&lntM1czzCKo{aZjY`@e)H56RrgALfDK@$y$SQWZ(po(7Pa_`$cGVr6TwwOMdg>geYrcIql; z)_$>j{-?rKAyV0N^ZELAR4sao{gM^tqC@3_1CV2<&*%EFw+> ziL6|7p}#Nf*-vIIeif1%?w>Zudi4N@$jrUs7T*^;3r%T9Ox&65B_QPXmN!kQOEx($ zJZ-=G#C{EF*?#tovI&VbgGV`YlNJodPpN*zXRgeDzsTf1sllAnEY z+y9s&wiYW47;T#fy6rTZ1A$gRx90K`#TsD@Xw~le9SaVxZUr2+_83aJ-*fumEr~S; zR)ix){`t^-NH)5UKK2gbLSO@0i?TswlzJ)>b}X<-%x!3>P!6N?@a9IHa*g|85(N(j z$@DdK7v6JSuE0T;7- zQu(@{7ON{dQ~Y0H;X(${1kfn3pvi+T>0A>0L29!z?YgU>40H*Vm$jh9@hMPMO-i%$ zTamWMbh|GmND=)e35UAx56f4leIVcy2Ir9hK0JdGM?D#oUcQ;rSv|M>lxEKI^+8nP z$&!QfyX3x;A`Sm;?w9+{=o|vX`!F`5r7^}?pF};B=F0pe!S$>RTyLC~liM9l_X1*O zdO=3C(sKth1SB7V-bVZ~k2rR^CSYt~A zDQc`zI7M?8kfn`-hG}n}NgDEfoF~TyvY!;yq{e}EF0UkR9))qLha)a!y$UeWs8T)P z0pnnBy(GSReW_zn&H2Xp}q3Qu3y|C!3;)j7}qowCNq*hkRs1V_qyGk|fKCfryA$wG=KP>ELZdZ%|<@ z=_>K8AZ}P~q)Hq!DP?&DwjTNO{r$06AoR%IieMnIhiWD`wBlP!kuO1zp}>uE+!{7s3ox%;r`K0j%2#VcE#T>QE}O84?_%eQqg4NYZP z{xwH72^V+)TtC-ETSh`wF|=+&_=#c2z;2-xzKc}kG4mTR?q0; zInkS^dQRXdpL4H#Mi4CM0q3xJJp~?G%;)wi11F9)!7*X?U72#1d)0zJdY!GQG53`F zyX1beRxXF&tix1a>b8JtA8XiboOTTjg=_BAV|1b8i6Ae8ciJi=r3$z(82f`25#R=r zdB}{#Z^ZINyoiv=lrG2>V1^i`w^h_o;gBE;0ue<2)UaTrpd8-lr9x9Y{?^FW=H-GV zud{WL6s=$*>TUn9>D)KRYXv2_pMej^_0x87O~xFo*yYg^j)g0Awm)nffeFC*Wb)&k zxF+64*r8nC4=q1at;i$9e_gD>M@&Xo9rkCuUeciTTP^Jfmv8z?Va^><=yI?dQtfbx z!G^~Nevg3GL*TcpqcCvY2m=J*p|K)$Lt!e^JR+9wj1Ba^9qD`Rh$#hT-u7cj&(-oKM3eIcvcLUSZaK9vt5YtE z$Uq9Fq7GqlE)O%tsVR;&n8*y-=bUCr+9O*~qmP5;`&7qKMz~ckv))^7Xr-Gn>D0K@ zTAd!w*)P`7#QPBBivd3cJS?))+%kj))JrHDT$sC9Xa; z{DFYlnF^5d(K$LIucocuOh)0+5-T#HC1IO8@o1p%RXvT_f4-DOUf8Z@=i|eYe3+C$ z_i;rE!+b@jxth_}Y1ZN&8=U(}l~z(si{p?}qP+%VOkrh|(Zn#LqGRlzp%b5@y5A*- zOVw6W9X3G{4<0{GYZFY8cSWKX-8@`lG<0^T&1$@`KPNjWf?!h8d0iFK0c+5fd9iwJW$tTp@(#9 zf4+f3>Oh_ZQ;@XfML|PC_$`mzr>kQO8wVwx3*Z!p(s)e`?m|~YBcL>ibHUB^P8=ph zG)`aa0Q5F&ns}nL6{b~(XOx7k0--{5oL`JFw;=a;4G?$ySlZU`!K8E@kJ4hW*&VVt zBgT4iT4{29fp2McLI9hYCT*pXYvFhITSv(R=zI-yd40)Vr!<0%R<4}V^QadCx~tGQ z`v9NQ^V(<*ubuT*LzUfT(V7~bEEovzMq`YbnzlmT1E@3q>6qill&RKNUIP0J!Bd?{ zIHZ=EeGvZ;2xw$cH0^(T`n~p$6K_iqP7f~}8Ca|Gu`e&4WyT-7bo|x^$~TIdj6z@%*mh;TgJU6` zD`~Ro*YQKF88k|%mqNg%c(&wyIlX;7Zs9ne;t3lwc`*9%$pDWp7A|Iv;@C6qOOpOw zsC_7#n^(Oobu)c#vfs$Jz*PupjNFVn2q`ETN0aj^)BA%804}Aa-}8pECc06{;|TPU z2C&*or+8VqiD9sTVunyZp<^P7&h z49Y;TQimJ9UAN&^1)v27Q9;3T^lJZf);Yz9=2MZKhT>9@a_ri)4!@INAN=*IR!0;u zS{!a%;5W~8guV2 z*S}_X0a$p#bzFrzyUsV(mNOR;lB=tfK7}Re4;?{WbCMrt@n-u_a`yudWYd?qUQBFQ66eKv+XG-k38;XxFgGo;zDjhMHD_+)kI77clq~tG^A0k;2hV!7=a`(Q`} z<7c`roTkL^3vDU)wgk7vEt|)7-{Oz3$X72l| zGL4#5pj6F*A}`YTgfsUtbTfTaj<4a^f%DX#mV(ma zHr%_+!#*By3sdBbfU$gCtm2ubBqUjmU2}ta8Dkc{UQItQuV5h8cw*t-h+Rg~x^8eW z=Hwj}*#Kf8bLIyS(vQR}vmTHO?W#!NQOGJDTEC?v^Up;C$P||AuUU7?b5Zw6x;Alz zt%Lq`&0sr28@=A=%lkHPznCr)l|x1kbY z0gf<6yjbToSnKneLz#C=8OXs5P;g9^$cKUg`<>!LCaq#Ri!L@v@**GqkLk_2Q_)^oW8B(Od(l|g?4!XD>%VzQot~XV$l=G|1Boih#P<3d ztK_eOaf5q~YD|DWDrhM6Qyr$?J*x$xF*{!y({h8QM^CXTN^Ed5gR_m~hYC;LoF7+^ zI4nwEx_<{jI|__gpc1$D1qz6YM|}*CCZR}%#{!UZXQ-uHGG(M$8gU9eeqE;98nP`3 zchIprDE|;xs3-^ae8@#&SO19lR0HgohRNLQdFseCPNS+xz2DygcUpTV&Vsb=s9wWl zzRMwLNOEvz6!>@a^7YELqyt2hnDkQaiSaEN2ypJ3MK3DH6e&~j;i5}~(&WmE;msqW zuKy#~rf!Tc4M)~w`xPcMG{>X6q_eO~OREj^pyRZzb%)KVF)u0u1$m0+jwPt!tf9i^ zE-LcdL^ETd(q)(4{H>&tozxZiX4Tg$QdD>75lq>mt$BmF{2MbiZY{)1o%d`Y)~Sj>gCEd1AHun$a?ijP6rXv!|lo~@qem(?_F~1M0QN8 z7_wo=|Fa3w`Y%8KKi>XFa{rr_|JL*H zKTKT3e^&K>FVuhQ?!UFF{|O}jh1>r~?!S=n-?{yNM{*R4$bkW*B&f=>aVqi>^K&9w z5YTxn_z52trA~?<*V;^8%|D6Tv@bQz)59VQ1Rg3{Zt@GtEf$TEs5VBp>_Sg6?!Esa zbfD!mC%4#6&E?Y_f1C3;Xe#_-tphwTH?xtMq?nrC#=y~$-lgZW+5b;+%t&h4LkNTWMrcQe zBKCt0>O;l#zB6y-GS613nt!KLiI_cDWgo>^0`Kvi}i2)t{4sMoP{0%(XCLMuoT-VwTw7~IN zKOTXOC}lYDNfAKCn;w+0n7<4paG>uA&k_&J$AAo1_&GWP4cSMQ@1FOzo-F*0__@?| z;RhCATTzn2!O!lq$5n0aN6=4h60Py|SL})Tr@z0b6JSy1sd#Fl#fqv{>t_a(9)&nIl<5v(w_V1rAUvAw|(- zcO@@Dxc|M3rdETdBufiW1K6XKMYp*P1!UG+y%UE|Z7x@xIxmljg~-mP8gK+%9z)_B z!O(26LdASY*?~H`@}gz+akmX3l*WJ#nq({c_~Stnl}lJ3q+0138D1b;kksc3pLH@* zSC2(eI@9={N22Tv#QyP@Zc=xGXJP6azKjtg^_^$GE{5FL5F>e?sliD_P`5YsqLG#M z_nvJKU;V;Z6TBW%8?>@>Uyf`Y6&C;Yxb8~bJ2*_rjP1dyGMIj2cxtJgI?HW-yW}drBPl2Zj>Qj z$8?ShKuvOxAswbQuc?SFmXfOKMn>$2*q?FV0|^#Ye)FtR@AlcA(!hN-uf=3TeVS`x zF&RlhJC!bGLzgM?Yb3%iGJwR7%yh)mCB1ykqH{*t7fSMIcZ6T;vp-4AkvjnPFyqAfgsEeh8HmJKAZn z@?j&R!9$|;K9SfyB-UWa4izH6M5oIn(!3LgMv-xGo~u942l1l#x0rTG;#; zDzb1NFVKFn2M(`Y6`7hsVW_sy0>O2N@hFF+;xfBqcA|e@qOzZEva;I`-!>QCxt9S;X6AH^ujWhybXWBB_ z^3f@9|9Bp7WY$vuQkiRR{e|}xz&=GlfX+zxxhEN#*jbp{&mM1_zQW9XA9P(jV0H_Q z*IZl>t$|Js_~6p!?1A1pUAa{0-mgeW9!X`KS9^%RnOT@>i)MnMA(N=7{<{nw5%hu# zJ(rRG1}t}FyYA*bn50wTe25@`ZF(n8k}xBvU&}PiK=9BDNZ@udpsS*BvZ=YG{zcAn znVOHn=Y+_o9a>Z;dHnm^i^Kp@oE{!z@<1bQZ|=v1DFX0mvALXlSgN zGVx3@nV}|>OAwKd8t}%1TuoB5xZg}LLIY+GXuduhs#LTceIliz&=&aZk2ofHgH`r3 zni-!gh1n}Q(ZyAJD{5t2E#lXI)BBRpupe@+H4T&Z8mB$5^k8J&&5X z^ri>c$$T}B#UyY@b=y`IlQtUhEP4m$Me0IOtQ*nEUl_hvPUD|y)*0Yvat+Zd0)dP64OZ{!M~;%37|bY4 zw&9-V4!B1He3k$=5ZTRvj!bU}+*sip`SuVFl(iRkek8gGCDa zD3^Ashe<|MEEGzbSr_e^*5y|?X`3Tk+vwot{^JLUGId#T406J4?n})!Cri$~EkV)q z?)y#P>IGt)Nkoi^oLCa|9+3d2jV<^uKV4F=<$sfu`*mw&Z=x#v(p~{yVKT;?xRXzz zXThFw(B@~shkWUv)7HTfTq{55`%YXosjAg38GA!oWcP;;J-g>xo*K;V+j`?@B2&2d$xJJ8XIsgW8K zFGRFCd9K#BW0;!<5xxMnRjUU82oablf7iFW;#b}ES8=$`ir!aI}}%LNiM zt)hqy?D|T+I4Ef!ui(6N4!-=vr`mm5R>37{F0$`uF;E&%#90KI!W?CjtrRiSGhe+K zSG@A)*%=IpR#E4>;>s(Zv7yCu`~el!J(#K<<@a3ej11Ag*~(x)cKS2qQV^XD?y6M^ zuj_37WWWloql;jM6NmDi4(ToarP6JXnrUGA;5ku(w&TP}6YEhF7bw55 zLW&f#uR!k>xItGsaW&z&AKDJKo4hA4bSwO?U)U)BsHJBA%H6E+qpES&v3@w4YMQFu`b@`K9Hq z;z%33rZ{&{d3sre^cao)qVJOP=A}X@PhOaOWj-n#?)(T`z_BXcbdvA2_xAmTHH%EF zseHIMoSHmoZ=Yoh(ne~PziEs@gu=^!_=%ITmn3SMIEV|AP#`Kz;ecO4W7{h=I4|OQ z)(%lnXDXdnm?Euqa5(0eQe5^(58Rfj@vo@GZlD_n0!EvWd)X&NwK2|@z~eIm)ol*0 z;~+`!rLNz2E>uGe*!w~MK7y%e3w`Qo76vy3KKd>T?U`+yp%bj__qlbD{t4eFyTbhy zrtab_C!b-?0&{g~uhtk}j+?ocE<|b5ZD@1t=jPcFU-k792SbmSh5u>_w3N z7kh6N6<647i#D3Zo#5^k+=D}KcXxNU1a}GU?(R--cXvy$;1D!u-zN9roQHeP9{Q36di+Nt+<;f)r^FV-(U z_A=R3Mpdzq{M>hH;@QqPoCW36%VA-o!7H%?=&leA9wzI=?e|2>_vmj?(qHJzl>BtTRLRm0V;5Pf5UYIii!{Va|a;{s+|gX5RU_ z!z|jPy1OvS;ZqHLhGeBr?%q>ixr2Rlg0Xz%AgNf7^)Szw8X;@nH?n^CBKBb za9OCTX5?NIFZqDL2j?dStSOj*Ns{hY=P%XZ44zt53d`hg{ty<~Bo7hx&Tt>mow>I_ z4p*VJ?rF`ejAjzCIrQp{@t|<(ydzfC)=YYPF%jw_X@r-vr%h31ZAyS zi-tCy0z7q_ES?B()kYU8xSzffjqnh{`aN(9e;`Owb1u02eZ1sq)7n5g4Ht3!b*WN} zL!jEVGCe6wnXVY2^73`mnRIiIG0X~NLbqK3SnRTB*nG_*o9J(%B0-|b>bb_$TyePG zE}swhvOWB@KA(JXmweVa?(PdG)N8cdK%fsMLV#Khr?j*^;GBhttuC zHHZ&QKT#4)Jy&9mhkRa(m-cf2voUF$Hkst%dolh*9&e^bAHQZ9JDE7GTu_aMb3oZN zB%`E3UGxjfooQ9;<-ZTHU0Z4J@4 zY8A8E{?DXgg)Tc&LRVXuTv=`#rS&~;6J}l07kIxxpvjfIP6wpl+aQo5Xy)#9$K?{V zH|=u0q|@0yMPp`w-rgyrCIo~-OWO=-kV=4q4iI`L4w=-M^HMlCWi3v zkcJzUIG9Q7^bvTKY-|=L8l5}eD)1foEE3VlNHU%#Nxk+CQ-n9>yMHu5ZgAFSdBCjY z!0kBq^b9**^>-t3*#|Wm_3*0(bJ1xj8wS9JqV|)gfz^XAF8-&nBGBcbI_?@9apgHu z#dOG7kmXml+zjf=*tWV!Y(9V^dn4?=B}ml;3jA>4R9Kke=-D08&~LZ0k8$ zKB4xuh0jXNf)3iXKzHz7#QF%`J4oAn=m(PfzBd6baY308UmFr#mb0{s1r=xnV=dz* zF3U9b4Zkl{mrA&(5t*55ma)&1+)dv9-iI#>gVHp%^>*!n)>{pc1qU}!v~;&lgsi2@ zbj5v=M9ni_Zoj1Y7j^37v%Z>lUjU0JiMQ#yRh0>)GTzj^CFYYnUGP9FCgZgr+x*u# z=!4Um2%t80*rA0Ys#5X~1(^YOV8wE|4vbp6CtQGHrl&^^^UPeZ7rCbD(xdK}*rXvD ztuLiQ#?TVa&V5xW2ay#vZ=x_;4lZG$qA&Sz>#4oR)b-X9tJ_~`?qsr~$&9ka=umNO z)AOCh$6vGtAlq^kkx9>A9BYk88YT?N<{ExUeLFRtZzA2^;_@ zbSJt@|7?*c|4ab9$Oz)cndE8Pj*cgMJyjYh!WY|$z09=(3^Pd9Vee-?baIn>yx z)%j5A)9Ux_oUL9OEx0f6bf;lnVo_hPD!-|~dSnP_T=mJ~z>V*I&I;Pf4XIP~g2%Pw zxM@2oNQld85(hGlJOC%U^<%+bAWx+QSm0$im`G4QuSl-V49Jz&WTT+Uzg^F6xP6yi`a~I4nZ|9F#4JB|Z*n7HqiR+hL>} z2P=L7q?mtiUB6L%B!COB`tun*95M)D`<=L2J__tugN!@?lT$Sa9*Q(0BUQdFao3Pv1U9CH& zEGoA{Qkybgk)6NvV3$Kjj}lb~#cumI9@sZ>YCeODk19(j5?7opqlEmJ@PrF~;6uca zhIp%pXn0*;tY$kP^Y)(b->=bKBdyhT&sqhpdpyeh<_Vbhl^YIP4>fGw+kY65 zZIBbN6+qo|%7NijaX=D(fHF4+*}sVpwUcpV`$JEF_`z;$uaOF5i(<9zfg(|yd(l&<&ZybylAVB@Kkk$ zy0e#l`)-5$6h?{+nMpa&n87Pn!$DN?3H=j;2q8dHggq~&Zi;bzD3FT4Y(RugaTpul zFppa&0cY+2N-^r^n^7!{ZoJck2D`usRPT+GOQ`rMF8P`<=*8%u?y|g#9^~nj>Ub7+ z=6D+0HlKR<7t~|d^ZH?Gbi=6rG5FKc7rzx%HSmh{X~pl&h@HjFu5Q_#R8QcVA8iHOCw@se6qp`lVTWhU2KdDQcG;dy7;!X4rX5E` z;5qVGW+FVa5iPDzGgPobR1l4V*b3<2c1+~hwZ-9C5oO-+vitn3Vjm)!+tR5HXEqsc-n2s)ka*dmSWc;&Fs(iF$egep9VS_cIv4P?H*E3vP1A`af2#DFNWdpzc6R z58nT&qcdq_d^*DWxPXE~rO3=9 zzNGq~>fKM_|KVT9A{1hlhQ6RRL$Ic+%>RZ#F?c)b;X>o^dfV^&_K3!gS!59eMEYoo zei>EU92&*zNoA>IT;QrZ@e1vSbU zKp-~bD9HN~r18tD@T0=n?2ehVHThkXa?vq}D1xNm6sGgdlL8O}o{MN%xXj zmU=nS*rAcDGMz4GjnX7HpkN_ zAo;JdQvYf7KNA~Yud91SA$L@drQcpuXeX7Fm4`@Ex{%D*#}k83UqH{F&n~!kqfKd+ z`QV2%d584U<<7LpBM{0=`^>k#X$4XzgM%q0=@SX?;53YCTkR*LcK(DT9Bqwlh5mqs z$qp5eWjdibq|#hpdU3YT$~B`!@{96fOR=rgq8P78;p{+)k=-fRk#*9vft@tnA5vS* z&$K$}((mIzftc^DpL1M#!T^lp)3KGMm2~w+c3clj_F!~D{+zm(%xxj~&iPim`P@n1 zC=oMVI*jo&Th#{E%({?*qS!1I5y19B0oDC^ecp!H8eC4@AeDxD7&Mi zu*Q3ob0&J)F4JFtc5nPdEBK}~2wh78077KSspD&{16oKY=g!jE;DC?X&a_9~69T)@ zfguQyV=L6$MuSE!yCHM&E%VTD-T3zpKt#p-1?U4vS!JwmZ#5$FXW!d_+{n%Wt9#-D z;bLTQ0=xDWDi~lJfV()or3iSVMtZzO51NdQ@X24R-totPKwn#~P0Q}M1H7$~K9Wbj zTQ!6PW4B+wUplL9&wyfU05ajI8&Bd%M=J&7-u#ezo+;=rvjnrHYh0X$L9HG033Vg< z+NR=1X1rG}C0ZQbN7ZajbaUI*#=FU|yB8DvvH5v{9a{*D$J01{7 z3I-akWb_Mfcev!&!J%ntRkzBlT?+uN0Z1HBG7(DFWUt#TO95Tao;AktW14=7=^b1W zv5mklB5xViyY>ew7Jbg^r4N>mLeX&Gx`D;ef97rTowjWpkPD49dA<6bW$NxH{{B79 z*m@W+`p)Op>As$EQd%49H$%dlCX^;N3vRhCKl5r?x^=2F3!kT08C2o-630$~93&c~ zOy_A;0g$PwOj@)Wx?@GuwL3V2u(5V=X$otm3Ls{)NlPP9^8C2cQdycBeobX8+WGg{50WCmqcaFC6uk9i zIQWD22Xb{bc%sR$JDc6St5r!+@1T&q$F(qJ{jhv2bBX`ZeR*{4aM=n{Te;i*^FqVz zLxICwpaR)y2r&<<_0b#)TU!EPE}zm>7YZHBJc@N&l%koIsyOkS`>Ts8&pAd5-8=Y8 zSeV_o2oM#TtT>P?4vOmm^fo2v;b-yueP-)3R1g#lQZO8yCjta~5i|m1)U4*X^1m60 zAyK+>7V$bWpylKG(3Datw3mUU0L$12 zjTeN~#|N`f5@)^5g100FgG@w<4i~Igt>tB=uo)^?V#ey-x=QBQ-5x|Aw%_o}n3}fr z$<2CNPQc>L%p^i#xlWB|S1UmAD`R@^k2!>%+>e7Qq(gb4R^}{ybr5}ut#3P^)px79 z5#u4(=`X-;C+8wUtlqP5AQ`FVwXG+i$WxH`HQ|9@=?)9_^$yaF^ybUhZ1-5E9 z@hNND@&xquHRhEo_0K+1VF62G%Adhs=%xB;VLw1IB=I0S+v{Od>oYETm}JPPpnK3q zK`se`DzH$pirrW=y(CW-k+Z}U&n7R{i0TttPHl=UD9#PQ-5{2vup-QT8Zycv=P@1o z@)r;^HH{Qmu`wuWiW++AMlCykF5N-C2vIFfY!rSZBjn!Ga(yaK4e^c)FRmMVCoYv( zhi(^K&#(rVzhY*l6T$Z6<>1s|lhG_!(#U92e7G1HM)s(?`tu`jOoEDw)+rq#v0*FX zLo~w)9Kz(7Q+DE!%*RA{e?vcJXpC?GiPovyG%C4f;Y#M9&DlXZ3OJ@kA47($S+=vQ zNt^vagQOCI9EQOia72q(B&U|PHa<~EuuH6XFRK;&6tb>VsV^0ud1JCjn*I*1oTCVN zC}jYBCw;ej;L?UA#y?*rAV3&b03&kaXC{GCOOS>TjY$@w_DCjq653{iH7(pe(N9Xi z@TRT*2E<%(93*5JigcLd|ogF`X7^i_9i^ERvtB||ArDTyJHj%hFzf$9(r7ibh-OBEW` z-P&D2Lh`v|!!|(?wLx;<>Mh<5JG-GXZA|x}M5Ta3*Y5Fz0 zdpo~~ooRf<2%Ae_(R6H)e*DH5791J$2WMDW!%xh^TI=E6xz4 zk>&~c9j?5aF!Sg5`V3M1Rivm=Rc8zDxpPs7L+x!t%YhAOr@l>e@^e@4<`YzC!Ho0* zC`vhwmb3dIVt=G`J}RyOL~*18-T9Z=;D!}9KYnlD#YP5~QpEc!b72+kYltR~wI!pz6Ng5E(Qu+M zLjyIIDH&zv-1{fOeJtvS7u;(R79~Ll!O0GnY()n03Vbjxkxd~eOTsGquW2rSeDQuqxE>m*e)rG}pKhW3C z^Ge=CeF`D8>Kq;jg3hxdjYhuv&FFANTDmjMw4MKJK-VY2D6NV zUPtxUt=*?q=~2L1ALP^=);p z;QP?RhNR9&OjDK`z2*D5Lt0*1wYfQ*aq0exz~Wmv&WiH88>?3&I;M+8Y|u&NTgICX zZ$1lU2fQS1C^oZ-rboEFGe_p;0xVY(On52kY7E`1>6xaLr=~^*H|GYJBs57bBk#ni5I&y#Ch`hB zgdVTL!sNU;3R%`}P^f*S&G8XbS;uNsWmlC$2#?Gs(g2CE~qQT@f1=GK?gvzx;jGWX1S~6V|wZ^Wgs{EZB6x)`$vVJUYtmdNC zuG-0`es-^p4cUQnZmL{?5HFK4S))9+!P>wRZN>$Tkxzn_*Gmy2eo|>R`pEb(ooqR3=I@PMB9qubf%7N9X~Ej{1U?Ii zz&v!tv+`N%p>M4=jN{quNHyqw_r75iA~Gj9f-&=DHPlS#13oZk@8Ep#p72yfMx%YT zlZp%TOSs`C-kw?~AJul`0;OavnKD_e8RClzCHj@!E(_Ep==TUq_GVu9_p>nydeZHl z&Ks$%(3jezuCxC{Xd>|Xpg|aueteC!8B_I9#1vt6x$FEpQvPTcME9R(vA?@q9=Ay;f{m(!Czxu@g>-~4){zuUAf2HXEaPvQ6?*C`2{*UzG|6sKL^6mez>VHYm z|Mx%qN5uWN){OkO2KPUKpx=dzqQL1P5q{ws&d9?d^n6241>j@ z3^ZwX1oSue1K6o}+%DW!dZMt^OftG&G#h0JY$x9)uz9k1#G?pod#@{3da~WXs**#S zouSJq+UlODohRjNHm_oy=F>mkpkiKg2angFK;eC=4{^2Mpn|5D`N7JE|82Uo(sSdj z(sJJ8Yv5bV=isf<4A!>{UDnkPPtN?L%w02{wtHbSFvn(aDM?CCPtTCwwydAhJluYi zwjQB+$Z(%e%BK=SeW2du?VVD7{IJ#JqF zlx`MH>=pYjLv*}=IAMoWAg(SlZzB|GfXKnUGZFVPQZL|NsyB#97Ks@`)(}F7*$~K3 zY1?PE;Npl30AASvf0{C$ov^#2$`U}M%J#xQhDZ716ZqX?h;Pldy@~Y?3}8ih!oUn( z&^jLa<(~zWb95{&5m8PArcy-)IGRvd$|Cnae$W8zbWAM?&z^`1g(1XM$fEuk4lzZ; zV98S=xqJY<(o;0kD>F6CvI|3_3gziiBbX|&$FY5i)x3OXZi!nA8;>ia3_u&}g@G*$ z&4d`>m?9~nqbNK{8V?r?J2a)7sO+kar0@aG#B)i z+10b<8pk_KXkM)>_m&HqH7m%NoW`RzD``SKo6?R`{+=UYOwNymVVfokAu~b{H_A?f zt@%O~b+$~J25HyU1S?0JUn`Gj<(x=JtO%RJd|zxy@J<{f32FZ*eOfP|(V&m4vaQJE z*&g?x0_d(LTJ6%ap|xHqW&Ub?HM9kCJP3CWYTBxFw>B?*Na~#4?g72&KnTqLEo$u= zS0f1?`!z1(=L3=$m{wc_CqII(#SnjpyFLbr_(M^w3iJm&5AL~5viU#xyKLkKs*RNx zLngiCD1gs|qIGCvhEAsA4>$w`#l={gdoe94L|*UU_=(3wemTr&LULx2s_=h9ZfrA~ zT>04H-v0f5XL0Dq4efU~zX#Bt$v=c6boZxEf35q_f2rlfdVoN9FYESb*oKQNV>&QN z__A;U`*i-S=#4V=4*_Kh1WN{SLc+!w4OyV(Tk9t3&It;{CP`y#AwcBSeYRZZ`Cq1G z!>q7S5b4%k%e}8Wo4qSl#t!N;`48w}HjkZ?rLFgMmn`w#;Wf5V@DAOjyG21KkVh;M zXgvHy=a+NSj032#vUy2Xl--!Mb4eEqjgk(w*sAtv6|sdPl(O?)WmnqV2N~6fu z7^~`hd-Pi3czggE_#vndbzf5~RFpRQ;0`28Q~nc`ffC6=^5SmStfh_6f7P}jr?F-9 z`UA`+qvNk4X-es)F=m7hbqi|oqB;sUX@pe;8t#%|fy2KTwJafP4Re_1+dLtXO(c}6 zgAYck$G$hLFDy;?t(B4bk2(1kO-~fyETSTsnEzu=kTCzgiE{!rgNg@bog+pA5^+~Z zLy7Wi*{@Lnbejnkp1A~C|EX%EnJyZXc4o3Uv*?-2PRTnr?o#b^tUcvoLF=0eTwuY-EG|3(1_=rucsv*mY7#x3%;ofs&-?xQ04w*QH;%BU zy+2O&hXOZ^qe)DvWL7|LVGsgJMBf7tl@5KoP1U?XVb4P~!FATO^}ui+Dc!!d89|%m zM@%rescz7qQ$e9mF)5B$XyKkQ+wUIo_=z1OH4Q znA$0*&a3MDQ6%gU{;5{~TYX3+ty^-@trubuWti1O$T&$!qRQXT;iZyC_3OD*9w4(k z$2I|Km7e<<8c)Q!d7!+Q=#}dcUHPZ+YX5)7Ha^6CC4-y;h}~)KPqff9Dtu$#AoKq~ zh~Ud7>wWL4DPL5y@F92`{6I7KIOL27dG#%o1J}{iE<(d&x}V*DD;$-R>U1q#CMU%@ zKDbQ{bnY~Z(N71Ca&LiyB(9j;O6cu_+~&CtAPsuZT2hm{?1QVq>5|qY99bB?O72M$ zBoifUOwQ&a9Vy*fMeeJ|9CfCsvO2jz4*WZF(L_<|Yq6d~bd5l9hbq#pCFL9OPA>Q8 zb0L02j36=eAJww;r5sMba}1cS@xL?Lt!#&yY}`D$GWIvXSIWG)2sh6KMZlWmf~_+j zT{@qnuyl6uRq(CGCF`Cy3N5mv{n7KleyvC)f6ibDu^qHWQC%f61^ix+@a}T?#0iHdoIcPwMU2Xpl0v}ac~wirijZ_N zE8SDF<)Vs-EUzUhEOTX$Aae2nttPm^-kWk#UEG6^IgS9e8TiE8BdO3Iw+E*ts zeu~pFPeGCnp~0e5u29cxVQKq&nX>p!Ts?87e3$#UbWXFW5~*k)S%JuO^{ck}^Jk*% zGHWt81l;jqF41q|(+;oSZjW2uIttSX1>G15s6?51QtQihB~SpEUiXNH6nw)LJ1(QAz44O8%L!hj3 z92(b>V!nmLrZbPyXd`2h8ou=f&%Z>He!?5+y!(FX%uormOI}zTXb3||PhIE_)@jI) z2q-_8{(PYgGLu`koa|eqY9QS2HIx1ELy<1^%=%ACMe|+dvl_5%BbFK?QryTTDb_pF(SYqQOK|sZK zreqv1w+HswMdZf)JyJ`k7=5!IL#KD<)=88E3_oj20v55wRg}LXb4~9XBn^2StlK^Oa~;CpJM=-tc(Ha$^>Xu)?|0(78oBW9ITzLx ztTYxph9o;ee&$1$iT2FjZNK#{YuIF`6ij5qs%Q_LDU<;xs`=d#^{moA;d#>a)G4Sv z;9&B4%{Hz)&Z$1-XTv+;2g{I2QxDoN==w!?fhEU~oMugo?A7^_% z>rBX~$KR0;o7o)I>8M62rY}xX{Zc=aM!ZQ%#HEu+;*dhdJ&CJm=Z$rP#qb#)?xH86 zkelIX?ve9VU`T9xdM7TBr|_aLdBzih-@)9-Sh*Bce5^|eDY=55Ko0lXeYEIlC<|?T zQ$V={({k|)I9Z$1KS{}k*B{~Bhcbao&zaYy_r-`y1HQDDV9n@@v#65n1UQk3+ZjGRrbU*W$SNSOC+7T-bD$B#~Z3@&r3q{^EKUs)CK;9tpu0j zm*Z9y7N6;p=Os2U-oepR?MZY=Ou#UEzflDn?MQkGKhApi)gpRvEeUK>Z z-a8aAX{=BMb@QK0iI^g4cl4rP9J^?8tK6iP(G~?Ue;U2rRc8MaCH~ar;98*jI4e6M z-Dc(;_$>Y@_aQEsjGbMMc~NprGUa!KF_Kng=@YfuO>wjZZFY3oFi&(@pAJA8D9`y2N9R7v;FF%}bV~qS zI8bj4Uzq=YI|1SokCpVf_bz<;y%_8as6>k&wms!rDb_r&xn8s)oobdJ4^o7`&;`Bv zUDDqDQTYOkhmnvh7OruuiR<^*KXv=uzEg#s+w*%Bw|M_C7HG^;3Mv+E@3iN61MK2X zk?t|tUuEu-b`%fixKcEipn;C%{7-;7T`Nd|a~J5=_)o$EqE|4U=aF+(gN%yyUvueI;f0ZKFq^$?^*Yt%}CNm8S2P%OYHzn3!V^0kfTVk+ zU(OS7O%`|3W%W7vbf;_M$@X#|fnIU~Qn-+y%jad|CfWZc0*J!k;@~r_|C^O$I#>j) z=WXG$!oLTr08!=JuN1?WZ#3oWRW2%iud8Ppan+&^I)30^z8OAEDlI}ztV}yCnr7~N z%~w;ivvQ=Mx|-{wmDmS4sl*mY$=S&K;s(63`CUB`A=<4eK1TN~;M%uvwpr*j5$ds3 zJ#8T>P!+QP&Yt5{t#;S#$-EpfO^qI_=tt*PdJ8>ELa~MT<(rE+&(Rl&M&qPAbv_>a zCp++WzXuW(qQv=w6d&kJ5a_ff!h4{eDaw5Ub&vEz-E$cLc}n4*A-ubev302^SoY5-Ad~IkIj(8 zs);8P1rdERR=J^TLyN=Gt-qgt?}HR#JdGSFJ@{N&3&|U`(jQ*q%e&s`cncoOR^*v2 zD|xr71@WH#iGWv#Lgmscd;PlCbd^{<4n^s}pTFEgMRuCm)@rEV#0L$m4UDUl=wohF z*!f!v2tA5Bv$~+BwQ9zd(vWaXwe(`m2!9AZ@w8cKyIBdcXOdD;?6gd#`m`g$@(2;+ z6XbJP)|V=PCg=~DRY*95$Q?EC=U?yq(p8zjUU9=U9aHFqjmV zj3!nw)`Wvixt1OT66C{t@$K>UeDx_(GhNC5@qK4!6FaP^Nlwbvu#di02l<%(r#6DnSps1iutc&hfu&g5q-9aL%WE|*Qr zSMsFq1D~UI%-Eb{`~fr7W}POvK^0LfTv7^K?4vqwA`yd2IGI<%@Z|S|;6k=sn`TJ= zV5m^W+_$Nlp0my#5NIN;>ij9Gm^N#R_vB>SNEDtGca|1VBoq{YCK$#QKmFDXPns{CE>AzdGmUu&A zp0h8w#UUCm!b_ECjaYI7Do`n#_KST*vIV!PLm5eLuPzJ*+fM83UU^mq(FPgF z{ZX}A!u$;c>R2^{rE!EX-WTEU+W{82yz$JjTJW&Z@gd7etIHk45)z!P@kF?mou24IUcQ!e z8g~u0o-=$XTv%8DO30TubpRL{ffo>RwGKoYvA0Y(+fqv3Pal_wtYj-hXfaUH5$`^v zrEUHDODS}Ch)Oz}S*2T^_?c`hEXJYe(D5bO;6?bA`Jy38N&U3g51e;!v!pjf#qt~D zS&HbSt4?JiRzx#CQA($o-YKR|)9jjk96kA={)606Y$rQM`Ey668h0K{?KIc7qDiGF zi0~L<1|ZPBC~DtsGy={L&M7E?6FI<|R7u6R^8;TRMEoObvPdx5FJyWg9K_jd_QA-A zQ@&-IH6h7i5+sRd@1_^m0d~pB?`zsBKmB#(otep%E=;Apie!-j_TOD@mHe45t7Tz4 zTPe5j>IuK_>Iw$V10FEVojBJjt}=VJp?FOwflj7j9$(E;Ou#;E3VKRE=R;OvIr9($ zJ<-gWBje<=#;SvdXA&z*7>O&3L=i)T`pQdc91}S~zSHg!+-)L@+LfVdkW`;Yp<5(} zFa!>Fv>XE(!9bt-%RnXzRx1}>7^9%)mLE9h?=7Q>OHguOdA{+TxE1OR)+A&waUHJk z9JJ(eED&~=lCGzY1u^mx-;ws56oHWVhH__W;(HEHI=!=lDolp`XHtW9L|9EU)Lsx| z&LOh#im(DC&^Ty`KdbRr*~}mVf^0~@-SR*$xihCL&zGO=FF_!!H#b!7w(91}H9osm z%SEg}i(XOErf6jzW{Itnl=kLu+6=k=(6~Z;rEQfq78lSs!aKMT9#`x<>}~X{R)nem zd`VW9`48d*HIk%2DF_P5vAIG`^~@n;rHC$Mz?QgllPGf>t1_#q)_#?LB&>1Km!M7O zY#F9W6*vRy>6K~gZ|Bs^-$j!qkzDBtlB>*=JSpSEP!QYdOY^J0m^u;+*uKv5)h0!} zB~CcMFzP(Bw_g&RtscBwnAiYSCk3_}VS$yZO3WDL-VH4o@8Fy`i?G|4=ZP;K1QP4Z zoQb{nABcxfnZ8lFoA_P|f*)@XV=hz8v?vt$&_W+}tAb0rTed7+h+I>A$;5ZgR_;pm zcRqTY@{Tuh=z?xu?s8P56Z%^@-tgOOC_O2i zDp-AOqwXW+Y|zynXn#PjvQ94M17U?g1j+XBT?$VE!|-2WDy?rM75&2=@n%O9q&jrj z!0+AK#lU?Pf6J38qJ)FD9^GOKmh@2Tc*qcv@%hz=H?6+)fMh6DI=~Tt8cH72fi&^d#-Lp=jK+c&eLkQ?;9Eq+TGOgLkX)(+^?~b$iagJaRf+KYcx& z)^xbJD2erGpJ$4Wj&rFI*kw1PjJC|rdUX{GAMIleH-Nys$FQS7q~#6U%=Wq%*am&R z$ysC<5)q@oK_sE@g+n*$R8m&;-WX$nfaKUvO8Mg!xG#hT>3vQP2`?uh4iSSDlfo}# z__M%4TCPQItUy@jMB=n@qJogm7#E|Wur3&+xh+q9_ij}}$|US%edYz-Z38#hQM!^t z2?yJfhVd$S@ z3MB-3BKO#qVG2x{rSzTB4c?16^NMzOze*%WgX~IyxEWSW>yjRdR?j;4i$9ZahO({r zWb+Ke{c%Rk1hKw&T7|3XxJhyj1(W{KVrC$Ww~)+xCk~4k|6-3o=u5pf6EPlqgiG*) z+?|-5X49JID1|Z7O5(EKmoWk5$8ZxdR+2&1zg=Y&dC*ZNzz-x4<_0_2H=y)TNi81P zNlmpBQZjRQWa2%%3V#G`ODWwrfLQRwB^s5a_%xZ|^TQVsm3}==XW>Xs&lF2DJ{v_? z(hnq~FE4z=L@ed9qI!W-pxa0jpA1qh3&TCxXw zCC3G8ZuW0&7pJ>ZUSB7?*PqK{35mocpjdO{KzB=aMtwIe>B+IBD<+n5-fHpuw)u&A z&_-t{K0XSr7)$&;CxVY1Y38k<-{)gm;ZT~9(3W?2q}uGpW)Ki&OyxA>Q4Y2rEJft3 z;rPe3a`uZsN~1rqmO)JM^0k|t%}DFYF{J**U;e2JgosVlxAi5*?;fL#p@YXvu%LsZ zRd|;==ZB?vRuc-U5gR})=B#J;v%_vCT9ZXQq6IWn1wXQ}a>O|1&$25IUoQxaebcQy zRxLr|6bLk11V^fq+ZwW{mc7#Q`$B`TF`8@W2>Mt^*ic4^G&$`_AsGHF%t;V6x}VS? z#dYAhC489{4`c2;PCnk8+kU3S&Esd5;$}Ji3_kEO98@NbDA|5nmuU0y0X_afLqpFj z&;*#Wez0*Y{0{k-9`qJO@ri0Ar;fsdcb=kr{b@<-G8sutx+N4Rq}9U)IfFfs1<-(A zQP)J#Z!=CcRKH-RayRqocW(6#Z@~P`mop~SM|N#(C@B9!nbm3w_wItK(Qi{q&pgL8f9?6?CtDKy)x0QvV(^~Hm<0UO#AG#8^wBB3L8>>0!vWgT+>&*)F#+0%6 z@fv$#s7x|yns@U-X1aLI=X=N}kusY``5tAbmKC|;v(~WfRg=h3)F+l-wY#}!DcS&k z7ScFzNs#T4dwM?t2~B+S;_q}vD?o1pm9DVGzhj#qqWX(DdmqFGxFLXKc%^n|u7&V; zkQH-60z63u9VhZ1d?mAibhpo$$NM3)Y>Z(rFz30GtrudCsxkt~-S^F9pnbum*KTF} zq5waex4!r^sre!Yx<62G#w7=XCQm-8`W8_uuxhh zR7sZW!=H|69CqY1JhvENAk`4K9(&qtwi@OrFe0|F4+`L#m(TjRIR6!68ONbwy)*Nc zgc2%1QMbs%M3%*}Z-IDZKvmjOiV#&SDDl_3RqKe#4~JU%C9<~WoP3+8vk92oI4YJ7 z+q=+I3Ikz<74tkCK>1K1oz&6goF=@m48)s{>o4m-_kY1i-IhDgwIs;K(X>a3}xEf%I z!>gcP^7?_a94{*G+h~rsZu#1+x|}?NqVUAwwcq{PS0q5WYw};tQOy9+Sb#ybawmO& zN|3OjEukbnjOmeM&JB((4h0d1eQZ{J@l00^&1sE{Vz=FsrgG-73;E$-Zy&k%uXMI*vLIVgsWNw)`` zesHKD!@3sv|8}kVLac%0UG2V+=r)c7ai73?b+i<@yQ5{ z7qn7|l8WUmbjtl$1}8WCVXWKuUfz3M9wUE2Z+7+irum-%^_*cbueMk9uU2PD$&V5=&AgKleW9RU@h;liUchE*swZg1$- z-q5BP6HVWMH_*cj%shNvruBEg1EjtW2Lb|<8`Tj8^8=)*-<#le!ioQiwY%vqrG&72 zns_`@4OVtz>g$hmXH$(DO10t0(ji|-76T6Zt3Cc@L$R5z@@QoybG!8-kNiRbUQQeu z4+GFks%ttLSuY8BJ}xw{;6mb^xN91G2~X^eA;WsXzx@txWeRL+W1Ts=!M{y%MEt-5 zwQM|4lD}^cH(5gM)DN^;mY8+4q*gvX`H7yO8ah2s9mvr^CTw)zf)@+J0uduJu-9um zO#zT^Ct;weB5d!V)BHP7Q|LHuPvnvzo0C1~W)g#YVaRBvO9Ii{D2Hvg*Ft@4QT*(K zO56S&@Z+57Ry`HbCkMRawDJz_7s=^U9_PfkAL}yb^KG)-v_p!$Gqs%iCn&*&=H=e4 z+h;3>jnKAVyQpen7c!ZhlVf`yNyB-!PL(5lGoX>xHoHx~pc9m@=L1T*LgJNk*5!q9 zm!%*Ub{hu6=lVi6BJefkOLW2e6QKK#bveJ+XM8?31zOGEMR8X!e#Vq#q*kf$!5e(= zyY>k5z(_dnE~<)9j~A63M0^K#&TonxOtgXVGZMal8myN`?Kr4WgQN@$8I~;{Avh{s zF86ySL~@z&d*aB=@kuj%FqzvDz;ONuah+dxE;1`LB2SHOY+lGdvKkfzdDVtAP^3HC zCZ*&k;1BivY84@bqy=c)u3sg%boQHv{*%K-F9A{l^c56Wp?~`GsA)c`5G2I&Q&%H< z@9aJ*$|o1LNLtTx0xly&@CLu(U=*h>_ErwxTBIPG;wlXT`o}plTE?wNchE!CsDphs z^C5%LIPr)(98^hB^_|bdPGM4E>OyM@4?VVW6pbns_T=PJ77_QxDKa8l!rIyoG6)u) zbjNyDM`9nwc1QlwH%JlxJS7W-O(^ z{z&1-{k)|mGQ%7yAz1eJ&tZ>4SLa;v=Ar*$E6!z=?T<~ulIN;dNqJkbwDPJ(byQj|qTI$I2_hP zf5utOd$3L}SsTLg@f`oY<{miGYA;)D&~2?ep7TP0`w3qlF(f%0!aqW~{68dJ1zXf# z6J5Gt>5y2uyAjEyySp2a7U}MiZlt@rYw4110VyR!l$6|e`M-Ps_B=E5yLax)nKQGc zaFZ))zH_W)*!IVrpNdqFDzQlY zwxQz+sZ{dDK$-< z2P>O!AplbqGQ4a~O@`1vTs%n(k^iXPL{#p&-KImad{Ln8TQCDzo1g~K5mS=4=)0`0 zv=%gix?HI=odnfHv+OHj#ZY#W5q%^iJRFSJqCs`ujH3B7)Lib2Bi^iCxfutI&S=!+ z#S%*DRj*IpX?zsV5}NdRG5q`eM!9Bwzb>x1Y86;$&yhCDLo2nEosQ7uu@@ECP*(wD;4lzG)oh>!WLm-mdJXN&hx1{Pv#)WbAp$o-I;Wxti8>{ zuf5WcNtuOw6ZfIdW=~gzp-UfmnHK6@Y;*3O=6sr`_>C@H)fKQH*6=oKIFM zYgd`T5HNWJa*sNQc>abM_@6!m8?!NyNl%tNAU!h{-tBfdq#I?P`R>QDi^s3_=8N4d zGJF*JRQLO#BD|R4n0!I#W8tw85B^XvsUshMcar1+N!ju(^f^Nzd0?3;bIhtGe*-~ka~F;&&~#2CyXK%+w=polrD zB>l{F8`C^}5byH^TV4?2PrQVCO0=jy^DT*kjKKILnI(XJJ}}1~Yk0var0Dk8o;#!% z`KdET=x5+IXWk|ex2b=@ks6E5!-zM*a@$U6mIeNpLR3Q;JXM+6`PTm@Ly%#HJX={g&- z);*>8ss6g!S7iW#BBN;EzL!~^l~_7ZejXt=cnJ7GLql&8NC5|yVXgl+3BV;Mq~13` z8zHH{oZl+3xT!un&%NXPPd>S}f4)(?sBiQyg;F!Buo@IxlMSy92@m9ty(9VS)< zQubVziRHhab>P%8{AM_YpF;ko&i_~R?p)qK7?EqG8*vuQtf^(E^aMy@@V!*afG^mLW`VJ9wJkZpRD zlnPW_qOm}WR$ODC=FYo&^(rSN!o$rMpYU86A=&&rj#wRO?UAZ^E*VTvX^>_z6}4I> z)VE{4RM_BmcTGCUCUmL9@3B-Xt5$od{jrBD^KG_Cs^@?ibS75UgSzmKF5>Yeb;mn6 z)eVkHjW>F1OQ(bX{3Hq7okeZzcnBH8=KgYtipDLRQ$zJb0gh zh7kIA4PE$>;IZK()9_=(z(_Vd3DzbmYwfK)`1wJS)=^fD00bYOvE2!3;dXilC;H3d zvXEBfEyoYv!e*4A=HOZxnZv-FOie1AWS_4$<7j4UUGn5Ou~$b7CJoiTsYIw~C|a?f zEdMz9W#|9e-5$6Xp;vtcr%g5d`_j}Gap3p3D?c+n^a47UHjDvsl{DGd2>N~6Fe}vs zCZDp}SUVY5Lk}kpnHRv(qsRbgIV;taNsOGvsd7!tzfF?+z*FmVcv7upE}@+IJgxV! z#6glR8ZgbLRN=2QmJIPZvq7%pgCt1P#raLO$vD;FedI~XRb@8O$#~ilKY`Y$cxq-p zz*MQW-D%@1C;Y!^!)k_>BQ}(e_1hT`@E7Q#drhYx35|de!%X~O*k^IQ41H}%Mh2t| zh3nCY4+R?b;t5`YUhLcS)3!=tIX8VQokvBX`)Pw#mT-3r%TQ)z7ll zo%tW@VS28IS(N)_At> zRna<@+a*e%0zWN%(NqV6(JLpcaaA%v_pbifFeh$6_kCPD4-`56g2t$zx(7A{KT&do z0gRURsU}29u@PXKp;yDjQMtA6oBE<)r+xJpl^))@qznW~*oM>tu(tAeITS#$`3NLG z8Sr9kJRWFr#3t_jH^1yO?J08{555h7CQsx&?Vp11aL^*-DY;ja=U}-mw6B@pR4c)j z;OdZJV2iCYc_hmL@EJrRcEkGclTZ4Hvj7nfU=K&I#~NFS$KR$_gEdCaHCOJ-QIiWUPCFU0;8%{QOla!{rdu!4Vw^qUXe$)Z) z=*P?oH|@`U+ly2|>Vz2Gw8Q0z`i3`V(-wvDL{m%v9ujp-ZP?;sG&aeXzM|w4o70!( zQ71oaY!Mc0e2F$xcy{aFc2z%oc=+y3t+x?V1@fQiGb!s`k^Sh!adHi z@j4tfz773Jo9M!v8Jhpd-!3ddrf@2fs+bhzpTUDx1NI!Y#e&mB`L=5A4e~ zZnn?(k%CE6&-LZiaO+eX`wIp7T!5<7qrc8`fB7W%lr?Y2!``qfu4$@}VP4iOIY!+# z#2c&7F-3&APU?JOtcyoAs-6t&Qign{{O70N6^84zT;%rUZTC>Gt^LAzj#TaYX=TgR zUh;lJzn^~Cn8WF5C5|iL_>c~WJ{#OL%J$cLGR25k zqujIGb2)_t5B6cE7-ka|hoa_G&hOhQ(Ag`z!O!aUEhLHMZ?+hX-|Kgdgb#_*QdfEQXb^aJUnNQ(lb2Fw6T%Umy?ceX-(`ZNvqnNP$^KvV~A7K4l z5@XjHhye?}vIUY1*?V}q#+#2@oRPXjl9M{lN2UX-dFis%+HHOXbv7zokJ9%%^mI#{ z(%kX1e3`VG_pc#m$?LI`2EREvgQQ?AOz3X!GF|`V_{9LbxyHWMv{Z)xj>|la%L$VW z8LTd%uSidKt-2jFj^oI_5LV|jS=&vvQS%~RUA32Mpd#d+V12@mFIDkI%wf`4WP@CG z09Iy>Ne7FN8q9xBZhx_c-jx)yW})3M135uhrMu)~vcQReQkt4cDjv8Bu5f?FlbCsr z5|6Uc3>Dbx!E%I_#zU(21%mjL7b&)S+7$dpHXsh2L{L6D&P{S@;HDRyhMvqHnBLQ^ zCq8$x0w8qntE+4QRS0!IAot>A)&oOTE>?B7G zVJe~tjSbdUF!FbwSFk8@$ZP@vRNAlb8kHCqFS^W2=orfTjc+2TQD@;ULgPFWRWJQG z9ZB4*WHY8-!7SfLo?$)h}7v|8C&`LQV1aPN#KXU**6*D`RzVuKn?!UL+9a5~m={`>Ly z<`&khng|Pd2nnUzR9sQdeSXa11ibtkp+pPrM>cogbth%QQh}dy1;mSJ7Dl&?LjvFWCf5iGzj`~a(-&J!6T99_-@iYgu_;W zK(30-UI9n*4hmh;+bW#?WWA*IhTXnOP&Ouop#|QJZ?73KA3j*Li#6xmb6pSvrP38( z{_0gANK$r6e2xpwvDbR4pQmZm^y@IyM6K%wjWO|T=0D-YNiB1KA|V(ms=l&F8@fK8 zRx);h8y`CM#r6M$+eDKNQ?=yH`e&2gJO_}RTrdl;j|7e^EE}{aANK{1`!g*sHPHBRCBGW(so0C7-q=9Dt z4R}#e-gmbGzLJPCK(e>*kb=d|B^o7*dH5LAdwwN6W%jyPL8R{Do~^Gur&KW|)?L|f zmwD~iV~lZy{dUs&m@~J_dB0>WjBq`t=i*%lHnY{Xwp8}7*#73UgCzi$)4W7RL9nd^ z>V&{hi7u&>vu-Krs0@`mg}iC}B*ZcvP1M?TgJpc2*6fZ&wga{*-pCNd9>p8%RuJgb ztGrZQ)q|K210cvwKUtwQy4zkM8SNVryaW(apfD{)KDX4zz3aEJ2#i)DC~KYeOIuBf z$F)2K-(%@26)AyIXs}RQROOZ71yfI^R}>Dcf5;13Q%It}^_s4PtRHEGp*So=jAYZ# zX=1sz2|K&kuRz9Bw^mYhj4iIJ-s~Dqu9(JIkXXN4#PdejaN{2TzDI8mhd!q#9>(z!R;=mu^lYp7^}I3hGRlhnO?m{YvOkbw zHjaYA4-uF&)aDY|u`mz>I#SIu1mgAx4%x6tGulqxvs(9f7H@x+uUE4Pq$thDNHJ#z zLO>rs6S+tcX*s^jwMd3-2Qe_#q1UczpU77=SgjU;_Nf&4&1Xj|*tWa;Na=bFIUTA~ z+X*UtbpZN1-IXOX>3r?sF7BfU{iwno$R$fK_0KYe_u>yzcc2YLB%(Dm#ZVfqDR`VS z`RbWa?VJ)BI6)B!<|IAEs-*ZNXB#)` z&L!tP{)T7LjQ_-&WWX-6dfIrA-=h2rd4NHv?cW;!0@>x!I+p$)fTsO2a9`{-ln3t4#Gc2f}@|g5LNXeRI|xiWW)r;N=a$404;kQ@)$oy-b7t?lpiaeN{E| zVDA&>&l^~X6|nu2L7OojE+r8t+MH2O=V0^s2f>11kb95x9hKTPa_gk-ar(E`DqLoL z`J~I5HVP`}3mL8;3m_S6ob;w2gCtBQ+Gv5~XeT2xN$6+xUUQG5e_V_VLi(#$sbNq3 zM&;?nG&1u6BdxkxR&4ESTqPojMBXS#W_p`vU{FCF-LDNT8UCCby-!!a{NG)`Hq+NM zhleBM6d~==IYq3lkbJe|ZoGCkQ!llcTD`toOo8d~`j7)90j$`OF zm^*IqSLr96o}U?M499wi7;)sj&rTj91n21JLb$rD^!N2EmZ<=dc7_yXQMi0(K9 z+InsZVFaE?O?cW|PWvbz#IloMc*GH_zFN<7R2vS9Q?(?I!si6O(;QY(9; z(xyHpmXzddrzywr71+Pmtf@|^($QJT(g4*|=w;v?e;b`&t58+h5NCf4IRkRIoKnh# z$TW?@6T3#TfP8ojSRIJ$UCcnb#X*@V1But;w^jMoTkVonJlsz)9&MED)}Mr0amqT7%36*6AkhxjfSD4pZ|;1)9>c#p7Bbo2*+voQXRVev`F(o z1?qd|8cIk3jKw-*A)(DQIMe(WA9YAwXV5-uACi1;&L#mr{3Ben9}Gr89!>HvAH|YHN<$BewwCXN<6Y1S6%{_~~={UG-F-c-* zZzM4mP7X8T>~A%Y0pmm%@#qAounZ9&^aFkxwoB{!nC6%{9w_|^uI;TgQMFlC7QA4k z$AoZ~fXwWKch^L=r@;XO2g2)0uz62>P4o@u-y{*WMEFVAh_F!B41Tg9nnd&)*pH+l zRpT-0jN3=cYauvnwL;H7#JiUv6KL*#SHx35h)&HM;sY_n7TI!_j+tb;Cb%e>DAo%1 z;AV3$%Q%A4_Vvnb1l!yU!^dW{-&xX=WUX+eJG7oU+JAkY^%`<|yh;LVRG+=!W@bJ{ z;NWKNadFTntYx}=%dcYg9g9CjZV9jnmA)aV?)w`_l1wYn{rFy6Zrr)9_SsSXu_1uN z@`B3DZGIy}VQ1xjo459C$!`}b)XrNFe>ztp|3DT z&;CS~b=EO?rve}Qa&J*HKNuy@ zDE+`QTQqnv4_pZNr-1Gp__XA$A#`9FcjU!X#0k6qjGz)} z-{5}6s?2>Sn_V2gaNuY;O~zuX7N+SgXXx@@$jNY)5`i)D^a0+-oGgM=zp)5q>Le3e zVizdloFq=VdS;Eg6ItHotA$%<;+6dP_0-lw)o%LGUR$?4b(z3VrC9gWKPOOoMd&je z*E6T_U}Km+a|*6~VNv_}>#8AU3zs9k#%WB>!_i!ZX2v4+#u9;iu02KxY@1cThmRVy~VifDLK}+zPgiszO&3} zE#fY>B|2v^G4Uc1gy4vM#e14Pnl0*(SHNSE)7fU(CBP? zR<|8wXJibNA@(&D#rLMm??MDcZvrihWVkE%bQjDSiEAzVetmk|ggXcq2SBDCm>R`f zlZv64)B4eVAs%rnYgKFuX4eVblB zz<4J9Y(i`nbRs1M{O*kDj)FMDk@{?~^cf(8XS&r!kDJqz^F^Qer7c?-zMf=s%j~{>#dtNPQe=Jlr`zLWs4~tpE?L}1*28bqQP>L1`Ygy zvo@rKjo9XS42dS5NjF`yGCV8~ezOm8k%vc$S z2bgPC>i+=mRSoC@GNkwTybEVcdj%Iqb;Z&OOM?5etBYKvuj1x5(J?RNHdjh{ky?^; z6m?fCyXj~{F~w`nPNi2JJaU=?26WZ^8Df*o%Lpw=$yRQdf|C)ajwvy*KU>={OB>rK zuav8aHuJoL0ZD)nGoX*zGsXKdWK0p(�Z9BJ?gVl&&cxiaDo%=U}|_E`zS@MiqN@ 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 literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Left kick.mp3 b/op3_demo/Data/mp3/Left kick.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..142b79caf4f0a27e10e68a6f0cf26f8a8d4502f0 GIT binary patch literal 8271 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 E0^0m9SpWb4 literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/No.mp3 b/op3_demo/Data/mp3/No.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..44b4aab885832b0252bd1a195b49fa42d70e546b GIT binary patch literal 6861 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 S`z5;mR{U$s{jKqLr2hn^`~nUD literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Right kick.mp3 b/op3_demo/Data/mp3/Right kick.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a428de80459a904a3b7f717c672770a12fa7df78 GIT binary patch literal 7958 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 f75_uR{VR9UGlu^K)L2^L literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Sensor calibration fail.mp3 b/op3_demo/Data/mp3/Sensor calibration fail.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a0e3ff9fc52c0d9eae059eb831279e247d925142 GIT binary patch literal 13600 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 Re|GiXXv+QFq5c)=e*l269vJ`t literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Stand up.mp3 b/op3_demo/Data/mp3/Stand up.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..821361e8b6b7a2f7667f4326ec1953475cf359bd GIT binary patch literal 8114 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 Dp>zey literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Start motion demonstration.mp3 b/op3_demo/Data/mp3/Start motion demonstration.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3fb573bf8d930f423015bcc65daf16beec97bd51 GIT binary patch literal 13443 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 I>K{@37m@rx*#H0l literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Start vision processing demonstration.mp3 b/op3_demo/Data/mp3/Start vision processing demonstration.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3daa8679d4ef77f9472688108653f2c81188e1ac GIT binary patch literal 18146 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 literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/System shutdown.mp3 b/op3_demo/Data/mp3/System shutdown.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..bdc2be4827911869c744a158772378f837ef5235 GIT binary patch literal 10309 zcmeI1cTkgEyY6Yy1f&H8DItLL77&o$dnciY^d_M64$`E96bZeHw5Ui80#XD7sR5DR zq)S&2so^=~-E(HYv;W!W-Dl>TGiSavb7xjEYd!hpTGzdDKkLy@7Qx54Zg^xcBO{gT zj_7r0E9j_z#YAnLeZ0Yb4qo2Q?rvZafd>)-qF}DaK0Y3jf`b13{sK=uMC={>1l+xx z1i4`vFzEG6mg`W}Gqh4x(b3a2f*C5nH1u?>^x=m3dPXW%db-+XFntx_>p{fV;T34( z28Fu96toqu-?3hYf|7#1infB4lHT=%|8fx{4VVhdOvUhe*p2Ie3JHrV>FMZPcjd0b z)YKG5$=xH+%h~C%4_Lv@#>3%>4Oq>~-PZ$bB%mO`2Nr(t;66Wg7TD&=6YzhG^K$TZ z@bYu8hbiglUSEXpI*i@zY@Pr|)=RDe98EW?Q4Q#-Xr|u#=}_Z7c2OIUCkxEFvU+o2SahY$%Cc}jdz`dR||=ZYcivaz@zs&HFjE+Tv9@K2v= z?U+f(#f#AseF0x+_O+>1e6$iFYm5=N4{;{&PjNcQYslp36rkYnA!>X9XuRl01?>4z_0Yh}d}Uf=%;>2XP1WAp?7jCpnBr29g{xI{n5h$+ewDnIbr`ckK+ z?`0I@OE3o;q?YP8$8;wa?o1XzXK9s^jdRE&pFq?{^k`AS24^oYX?ewuwZ(Pl3ebVi z=g%Y}%u@0;ykf8=a%c(RCvOXfD8%(3e>#Xb4BF88Lr=|r%7eaL<(c=#)EC7HBr+OeTH zM_MQe$Ajjorol+>R5M)3SE@I;vMIgc@#!M^IlbZzGD1CQHItwOft*iW{s}j3Du?T9 zejDwVVbCRrg(O;_Ha3Z?C&6oE(3eywGj7#~Pby_nR>lNVKjlVt;!c-G8s33*rs~B> zmqbp});29T2Tg399Zu>u>=6g>37zos zPjkt23|2Z*^37!btgQ@)&CaqiBX9OlcOZvV@~n92Czf*4L|VhCf$HNpJQw%Uoct~0 z$FwCy9|?Q?^_Jw8maxK!vfbR@VWy9*IvHYCalO++%o?`G8|pm^j^rA;tI?o%>oO$T zZeRVm`wnIQrZGq9e*AEYN$w$=qCRMU)elR4PJzHAwa{xt-X4|hNStVUDxjvW7uCvJ#$85j&xUed!<|cL#no5N+)B0?la*srT zd{E-$DBo=rq**r!3=7A>JWqYXd`B%RL0$deMuLchRb9SS85_Ip(*o*R*!gJtPX;6T z#?cy`S-j^PVSc7dS#tYHn zDY#FM!~{){RrA9QSYXTy9ED^p;q}G)yo+yK+%w-D-@k!-m!jr=`1=)9ro~z~veV{L z(-s`;R3W1|tW!-jDK&FkL(s#i;CHplxw-k`bzxj!(&xFi#DMn%R= zR&_PFOIla=mTfv#I4$P6AWWu0LQ&Dxq$o<&Z+29DnyRY_Hmrdc(3=kdkQAy=^9G ztt;ivSwrhLP1V%|iJO0}9Rh#Qc1fPI!qFUwX%1VT;%Etk8c57Q5@$c6xAOY|jQF+> z*;WM*HrNjVtzhA-Sd38L7lQ~bLN{Am8^b7^4MZgsh9P%ltt9zXnypDN%gYzio%Gw` zz|&ks1GnEQ3aUe8?{n@zQzt_6z6Lo!TLix?p)(mmO@9gI6v*Zh2l#AkcBA+5L>$0{ zYigK7K6?hLGR2~8s#`%5EEl$A{>P#+R3t0`QNG~>GE!Y$P<2(f;3ULdhBQlz$L#>R z0ZTbJZ=s>V!g;c=UG25g$9~2q{AnT1rmidiwG0Xd{s1mtZVaxKpjofe6E^aoe?o^K z8e&}=>$QStgRzUn)?zHC58Y0n1%}kx9qKJkJR4c~0NZ4d{7saAXcW5aT1IDY6Bxz%+MVSs|f7O$ST-R#6ardG#h*vFCHi9t7JNAEXVnc=L-!u9L5bnbjV3JIEsv%cUI89BUn?bbu%-p z?YK-iur3vhUB_FqN%zhS%V8+x3@IV@^6?ICiQ7<`AoWC%)!Y|t^vuZYvw_WTNGD;2WBPA)j8aY;#`lfU`0T|yD)x2SA-|&GVNc6O zh;EVj!@za`=*`f6m$N(l`{ZlddGRwDM_8p1pYs;T(Bk>##^kf7Q*(ZwJ1&6Bu#>0j zO3|WNxN=bfo?Li*0FK}7gSng%g;LTAsu`0U-R~mLT+cj@06^|S6@C6!sRCR+yIp5~ zdk2Toh3+OA;N3gVR!^VfGFa!1nOP5K%{+Z_4qSzBY149BpGc-fz3BfP zf`xMwzv%jEl@frrLFAa?e&u<4f-p*b+DAy36$h`EAwG#nJV50*7;wcVJ5*)9t4h~ot z+RyGr>T@YO_h5{B%(VHr9tW#9%kwf=3;2?=Q)IU914DSl&<2xC&x!&Y|EUgtuj_ir zdWep7o?`c8NFMKglWy1ouqF%NyK8(Z) z$HXE^w_X?+6`IU`k6Noe=&Ctj`AjpHoj{8>)KN(iQR$FrhiE~(jVV#UrT|aRXd=V731p++A-7W}`~Oz3UIDIAR*ykLO4a-O(FI z8P~Qy+BE>pL?HsBG^s$wX^=`EYS%H498cv+Mr;zLl$bSpDi7Z=zK7kdDu_jcTq3YN3Owr4LBGOC<$d)AE(B(_%gn57M1P zENY_}Ctdag<2&1D0ote54A zaUTbeIQ^Hetqni{sR-{k=P0Jpjb69F8k3E{0jpDQ$?4^)?IL z5q-9 z6IU_b7XBO`ixp{-+8D}tid zX-TV8E1$V`8$9h2Fem*_zgO^Sn`}P~Svp;0Ud;2z4kt?2#%5eRO!*ZKPOQeGH^3#?(rBk{1J|u%1>}Z7Qh7Q$X`bIX zsA>=HbiNz*QwZ5nf0wz>_hMVy-|m7w1(Uc3haZu0$SZ_SXI^H_v4;o z0-C9~+#CxK5)>iQm=&p7G2r2q_|A3Gr@qUct^2tzQLlv8%Ih;@EL<5&p4c)fNR``T zkufN;D+=Bkat54voO;n$QBPr(ykkB|slUH^8HNEej{;T3DGfkngTU6Ww;*(fSIEYu zl>Ol$O9)%1cEdaKOa|jDwu42(T3!0A`y9B`^3E^3NOPT0Wpkm+4SXQp9*nrp)kcfABJ62~w3~(nq-hqO$(k0+ciMD9K*ss<# zk+?nd$jSUbH~%a>DZgkn5Ng_eW825ye@aTjQ^IFsZ0h3(tuQ&?52;c39)FS%ej+@0 z_TlmQZnTZ^H?2@ z)ZEiKoA_I%T7=V_PomOWYpzd(6d@13;}PKE5~~K}NoSJ@e9wW}_s^At6ELG?r1o=! zJnoo5?I+qlhxaeE9t=;21~^4K1z%YnY@80+Q8uBlZ~%`8g*I$fd%nwl{0vC?gINlu z-xt3GW(rG4KOQrN%XG8}j<+R_4(T48{?G)HIeo| zS$vB{7tT&Sr|YJspVY^l;k525Gs5O8CaDONo-Iu6eMZZ+CMyd?#Xp7gJI@0sLc6+@ zq}oesK2&}2k2!P(A1qb~mYUs?3(hgqx}X>N%W@lF7q>bqRUv#$0u{7ew{*2qzC(JE z-K}BVd%el8iRr`^^0Pdr27gw?`gfGR*Kn#{dk|FAkStS44}@DyP5g{&tMh~PPj|y6 zo02651?*D(aNB;g^ybkx&tz$S)><>)b{1-|$ncoFSbo;~1$BzX0@1re&$=o9^Va0+ zG8W_X9stnIC&0zU!Sa{a$K+d&YzkS40ODGCFC zqrML|!6g|ug6j_iFDwcB$kB_)G<&kHn_%kR^}$#5?;bjM1{~eouYOxvZgexAs833K z7m=GcouIx3ip{>C>apQn(?vBg4y-G?=6Met(!T(oFbJ>&O1d?0gd@ALr2!6 zvLor>Y7f}5^>jKiXshAgW5mhNqiAEB|Jq1`SnRGaMZH}3u|qW(gro>m_4%%dw(Gi? z#MR#GfZ9kzn)ds7-!0A;%vy1%MkZen*)JisH+e^o!k~leuh)Dl%W2{-F+CZPAHup0 zTTA&~x0@AQCIK@kp+auaF)B~fMSw}eLc_qh9Uf9x>x09l{bAQjC!OsF?YE?=suNgVa-X0P2}r%OrTkn3cXAI@};o4R*pPRkyd#rxu8&pnp4 zbnb9Hco_Tx`aWUJ+j;-;wLtDf%LXhVb{91giZpBQn0h8hGZ>??gsQZ+JB>d0 zXsg?*W@ybk(+{daCekM*Amc}4rTDAg_#=7AJPvtWf{Kc_jN+JOIXx>gU5E#8tD4)YZQN#K*sT>kUB)*+pUWdcJ{#+4J+myQ6yPW48OmbG zlHK2zwHd#~HdorJBRqGmo&Om7--TkyCmcONOW^<7_?Y_bSv(K7nu)#F$a6!4k$Z*R zH3u2*8~_a6$M6iROo+r1ma~>#r~Xwee_*>!l2g#z9q<;bhRw< z{O~+~sth_G_||*seBE{Que<49W^KA26FmvMrboa)<9YK50vHIU<~F9Tpq~vXdYt}( zKhqruuDHm8?oYh1=k)SM>$TKYX6=MvZ?G}I<`Tvo5a>LN^FtjkVjgkbz5et(Aqp5> zEmDcL;UFk)8?0&ajdED1yw~`7o8}#;+VEXf*CEd;KKM5M&zHnDb-YRTYvwdu6-fhA z_wU~`MjxFX_Oq$VSz%Xoo(p391xWdV=Ro$BLN7;A4*R9ot$&$_P(st$h65U)Y6NYT zh6d;nA7Czlt57xRl!1ZA7y`0!MtOM;yZ$abqRtv?Q3>*<8#ppmypE{3BuLb$_DA+4 z>Gd#BwJ#c&lrf`zb5B84A&o?B!s5uAg|NZ%D(v)1%*pDo&r)MTH7-`CQp$odZUiyU z1Es!qeAm>W9}73g(ttNp)PDzGdhbfI(Ylgb{~HvVSq~IphH@s}mnfZUe9a$TdgA!D z?Q*f?c0uaF#T22OVLC`{>$)((soY`D;G3OA+$oawa71zK+|}7@&df5}Pd3-_Gd@hl zA-E&KK{s4dKqvg^!6S*-KXr0LD7N>HX*v|e8x4)^;P-5-h$5pI>eUMVtivs`T*mZ( zbKikR!HuPStmWoeL?)XH17qaem#@rqCrn={@4$4nJMDFd0lDwnw02V*iuR^~Hmuv& zBI!RKYF(E~|I^0N`m|~=>^p8O$A~(}+|t}}yK-l+PCn%nZom<4$WNcomB#0zdy5n2 z1y;Bn=D9+orFG0A^_@&K^4jSi&vyMjt{c~%ag0q|hLES( zYu4W~T?D>DY+t=Jb}?4g&Muo{$j~r_yyQeCtTO+#kx*Bm$}NSG(ot7$pe~9=Wf7&F zV@|QQrhX7cauSR0;}>#~$V;ttdCmWX`ya_Bh{M-<>$uogMMW6^#taM$;2=;@?emiF zar&n6T#rAM67&#!QNw6_Mi8>=r?NU?;ntYwdl^HGY1nDN1snan2s0HrgI~?{oD!9l z?>C}VRHCD!^MFej%<%t`?H~UjtmQgsel2^pbCE~>ceDS+a9H8o|MyeO|Bem$|1#Xa zm<@?tRgeEu<^IKR|NpG&zb*H-r2Mz#{wBsh>Hhzd5C7tg@-objy literal 0 HcmV?d00001 diff --git a/op3_demo/Data/mp3/Thank you.mp3 b/op3_demo/Data/mp3/Thank you.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6778cb128d06fd21262327597aaa77923c331918 GIT binary patch literal 7174 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