From 8a4b61f1bfde68026a93342ded3c44f28f711189 Mon Sep 17 00:00:00 2001 From: Heinrich Mellmann Date: Wed, 24 Apr 2024 19:24:10 +0200 Subject: [PATCH] Deployed dd26203 with MkDocs version: 1.3.0 --- 404.html | 61 +- CNAME | 0 assets/images/favicon.png | Bin assets/javascripts/bundle.a877e258.min.js | 0 assets/javascripts/bundle.a877e258.min.js.map | 0 assets/javascripts/lunr/min/lunr.ar.min.js | 0 assets/javascripts/lunr/min/lunr.da.min.js | 0 assets/javascripts/lunr/min/lunr.de.min.js | 0 assets/javascripts/lunr/min/lunr.du.min.js | 0 assets/javascripts/lunr/min/lunr.es.min.js | 0 assets/javascripts/lunr/min/lunr.fi.min.js | 0 assets/javascripts/lunr/min/lunr.fr.min.js | 0 assets/javascripts/lunr/min/lunr.hi.min.js | 0 assets/javascripts/lunr/min/lunr.hu.min.js | 0 assets/javascripts/lunr/min/lunr.it.min.js | 0 assets/javascripts/lunr/min/lunr.ja.min.js | 0 assets/javascripts/lunr/min/lunr.jp.min.js | 0 assets/javascripts/lunr/min/lunr.multi.min.js | 0 assets/javascripts/lunr/min/lunr.nl.min.js | 0 assets/javascripts/lunr/min/lunr.no.min.js | 0 assets/javascripts/lunr/min/lunr.pt.min.js | 0 assets/javascripts/lunr/min/lunr.ro.min.js | 0 assets/javascripts/lunr/min/lunr.ru.min.js | 0 .../lunr/min/lunr.stemmer.support.min.js | 0 assets/javascripts/lunr/min/lunr.sv.min.js | 0 assets/javascripts/lunr/min/lunr.th.min.js | 0 assets/javascripts/lunr/min/lunr.tr.min.js | 0 assets/javascripts/lunr/min/lunr.vi.min.js | 0 assets/javascripts/lunr/min/lunr.zh.min.js | 0 assets/javascripts/lunr/tinyseg.js | 0 assets/javascripts/lunr/wordcut.js | 0 .../workers/search.85cb4492.min.js | 0 .../workers/search.85cb4492.min.js.map | 0 assets/stylesheets/main.4a0965b7.min.css | 0 assets/stylesheets/main.4a0965b7.min.css.map | 0 assets/stylesheets/palette.cbb835fc.min.css | 0 .../stylesheets/palette.cbb835fc.min.css.map | 0 guides/coding_guidelines/index.html | 75 +- .../deep_learning_annotation/index.html | 81 +- .../deep_learning_deployment/index.html | 75 +- guides/deeplearning/training/index.html | 65 +- guides/git-hooks/index.html | 63 +- guides/keyframe_motions/index.html | 69 +- guides/logging/index.html | 69 +- guides/obstacle_detection/index.html | 71 +- guides/onboarding/index.html | 65 +- guides/other_teams/index.html | 71 +- guides/robot_handling/index.html | 105 +- guides/robots/img/output.png | Bin 0 -> 220150 bytes guides/robots/known-robot-issues/index.html | 1251 +++++++++++++++++ guides/setup/nao_config/index.html | 63 +- guides/setup/naoth_code_setup/index.html | 149 +- guides/setup/robot_setup/index.html | 75 +- guides/tools/index.html | 1140 +++++++++++++++ .../working-with-logfiles/img/rc_connect.jpg | Bin .../img/rc_imagedrawings.jpg | Bin .../img/rc_imageviewer.jpg | Bin .../img/rc_loginspector_image_viewer.png | Bin .../img/rc_loginspector_representations.png | Bin .../working-with-logfiles/index.html | 101 +- .../working-with-sound/index.html | 95 +- img-src/ScanLineEdgelDetector.psd | Bin img-src/action_selection.psd | Bin img-src/ball_examples.psd | Bin img-src/cameramatrix_calibration.psd | Bin img-src/collision_detection.ai | 0 img-src/deep_learning/cvat_projects.psd | Bin img-src/detected_ball.psd | Bin img-src/field_detector.psd | Bin img-src/goal_detector.psd | Bin img-src/goal_feature_detector.psd | Bin img-src/goal_modeling.psd | Bin img-src/green_detection.psd | Bin img-src/green_histogram.psd | Bin img-src/key_points.psd | Bin img-src/line_graph_provider.psd | Bin img-src/local_maxima_algorithm.tex | 60 +- img-src/obstacle_detection.ai | 0 img-src/old_label_tool.psd | Bin img-src/patches.psd | Bin img-src/prob_compass.psd | Bin img-src/simulation.psd | Bin img-src/walking_engine.tex | 202 +-- img-src/xabsl_editor.psd | Bin img/NaoSCP.png | Bin img/ScanLineEdgelDetector.png | Bin img/action_selection.png | Bin img/ball_examples.png | Bin img/build/netbeans_issue.png | Bin img/camera_matrix_calibration.png | Bin img/collision.png | Bin img/cvat/model_task.png | Bin img/cvat/models.png | Bin img/detected_ball.png | Bin img/favicon.ico | Bin img/field_detector.png | Bin img/game_recording/combined_pi_setup.png | Bin img/game_recording/pi_mount.jpg | Bin img/game_recording/session_setup.jpg | Bin img/goal_detector.png | Bin img/goal_feature_detector.png | Bin img/goal_modeling.png | Bin img/green-classified.png | Bin img/green-src.png | Bin img/green_detection.png | Bin img/green_histogram.png | Bin img/key_points.png | Bin img/kickdist.png | Bin img/labeling_screenshot.png | Bin img/line_graph_provider.png | Bin img/local_maxima_algorithm.png | Bin img/modules.png | Bin img/naoscp/naoscp_start.png | Bin img/naoth_setup/robot_poses.png | Bin .../collision_detection.png | Bin img/obstacle_detection/obstacle_detection.png | Bin img/old_label_tool.png | Bin img/patches.png | Bin img/platform_interface.png | Bin img/potential-field.png | Bin img/prob_compass.png | Bin img/rc-dialogs/BehaviorViewer.png | Bin img/rc-dialogs/DebugRequests.png | Bin img/rc-dialogs/ExternalTools.png | Bin img/rc-dialogs/FieldViewer.png | Bin img/rc-dialogs/ImageViewer.png | Bin img/rc-dialogs/LogfileRecorder.png | Bin img/rc-dialogs/Modify.png | Bin img/rc-dialogs/ModuleConfigurationViewer.png | Bin img/rc-dialogs/ParameterPanel.png | Bin img/rc-dialogs/Plot2D.png | Bin img/rc-dialogs/RepresentationInspector.png | Bin img/rc-dialogs/Simspark.png | Bin img/rc-dialogs/StopwatchViewer.png | Bin img/rc-dialogs/StopwatchViewer2018.png | Bin img/rc-dialogs/TeamCommLogViewer.png | Bin img/rc-dialogs/TeamCommLogViewer2018.png | Bin img/rc-dialogs/TeamCommViewer.png | Bin img/rc-dialogs/TeamCommViewer2018.png | Bin img/rc19-naoth-1024x683.jpg | Bin img/robotcontrol2018.png | Bin img/screenshot_open_teamcommlog.png | Bin img/screenshot_play_teamcomm.png | Bin img/screenshot_teamcomm_fieldviewer.png | Bin img/simulation.png | Bin img/strategic_positions.png | Bin img/synchronization_tool.png | Bin img/vision-modules.png | Bin img/walking_engine.png | Bin img/xabsl_editor.png | Bin index.html | 63 +- javascripts/config.js | 30 +- naoth_tools/gitlab-ci/index.html | 77 +- naoth_tools/k8s/index.html | 67 +- naoth_tools/lab-trackingsystem/index.html | 159 +-- naoth_tools/naoscp/index.html | 67 +- naoth_tools/nvidia/index.html | 63 +- naoth_tools/rc/index.html | 65 +- naoth_tools/simspark/index.html | 69 +- naoth_tools/webots/index.html | 63 +- naoth_tools/xabsleditor/index.html | 63 +- robocup_tools/game_recording/index.html | 81 +- robocup_tools/index.html | 63 +- sitemap.xml | 84 +- sitemap.xml.gz | Bin 219 -> 220 bytes stylesheets/extra.css | 12 +- teamreport/architecture_intro/index.html | 73 +- teamreport/behavior/index.html | 69 +- teamreport/bibliography/index.html | 61 +- teamreport/debugging/index.html | 255 ++-- teamreport/index.html | 63 +- teamreport/introduction/index.html | 67 +- teamreport/modeling/index.html | 147 +- teamreport/motion/index.html | 75 +- teamreport/vision/index.html | 189 +-- 175 files changed, 4892 insertions(+), 1139 deletions(-) mode change 100644 => 100755 404.html mode change 100644 => 100755 CNAME mode change 100644 => 100755 assets/images/favicon.png mode change 100644 => 100755 assets/javascripts/bundle.a877e258.min.js mode change 100644 => 100755 assets/javascripts/bundle.a877e258.min.js.map mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.ar.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.da.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.de.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.du.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.es.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.fi.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.fr.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.hi.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.hu.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.it.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.ja.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.jp.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.multi.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.nl.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.no.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.pt.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.ro.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.ru.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.stemmer.support.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.sv.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.th.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.tr.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.vi.min.js mode change 100644 => 100755 assets/javascripts/lunr/min/lunr.zh.min.js mode change 100644 => 100755 assets/javascripts/lunr/tinyseg.js mode change 100644 => 100755 assets/javascripts/lunr/wordcut.js mode change 100644 => 100755 assets/javascripts/workers/search.85cb4492.min.js mode change 100644 => 100755 assets/javascripts/workers/search.85cb4492.min.js.map mode change 100644 => 100755 assets/stylesheets/main.4a0965b7.min.css mode change 100644 => 100755 assets/stylesheets/main.4a0965b7.min.css.map mode change 100644 => 100755 assets/stylesheets/palette.cbb835fc.min.css mode change 100644 => 100755 assets/stylesheets/palette.cbb835fc.min.css.map mode change 100644 => 100755 guides/coding_guidelines/index.html mode change 100644 => 100755 guides/deeplearning/deep_learning_annotation/index.html mode change 100644 => 100755 guides/deeplearning/deep_learning_deployment/index.html mode change 100644 => 100755 guides/deeplearning/training/index.html mode change 100644 => 100755 guides/git-hooks/index.html mode change 100644 => 100755 guides/keyframe_motions/index.html mode change 100644 => 100755 guides/logging/index.html mode change 100644 => 100755 guides/obstacle_detection/index.html mode change 100644 => 100755 guides/onboarding/index.html mode change 100644 => 100755 guides/other_teams/index.html mode change 100644 => 100755 guides/robot_handling/index.html create mode 100755 guides/robots/img/output.png create mode 100755 guides/robots/known-robot-issues/index.html mode change 100644 => 100755 guides/setup/nao_config/index.html mode change 100644 => 100755 guides/setup/naoth_code_setup/index.html mode change 100644 => 100755 guides/setup/robot_setup/index.html create mode 100755 guides/tools/index.html mode change 100644 => 100755 guides/working-with-logfiles/img/rc_connect.jpg mode change 100644 => 100755 guides/working-with-logfiles/img/rc_imagedrawings.jpg mode change 100644 => 100755 guides/working-with-logfiles/img/rc_imageviewer.jpg mode change 100644 => 100755 guides/working-with-logfiles/img/rc_loginspector_image_viewer.png mode change 100644 => 100755 guides/working-with-logfiles/img/rc_loginspector_representations.png mode change 100644 => 100755 guides/working-with-logfiles/working-with-logfiles/index.html mode change 100644 => 100755 guides/working-with-sound/working-with-sound/index.html mode change 100644 => 100755 img-src/ScanLineEdgelDetector.psd mode change 100644 => 100755 img-src/action_selection.psd mode change 100644 => 100755 img-src/ball_examples.psd mode change 100644 => 100755 img-src/cameramatrix_calibration.psd mode change 100644 => 100755 img-src/collision_detection.ai mode change 100644 => 100755 img-src/deep_learning/cvat_projects.psd mode change 100644 => 100755 img-src/detected_ball.psd mode change 100644 => 100755 img-src/field_detector.psd mode change 100644 => 100755 img-src/goal_detector.psd mode change 100644 => 100755 img-src/goal_feature_detector.psd mode change 100644 => 100755 img-src/goal_modeling.psd mode change 100644 => 100755 img-src/green_detection.psd mode change 100644 => 100755 img-src/green_histogram.psd mode change 100644 => 100755 img-src/key_points.psd mode change 100644 => 100755 img-src/line_graph_provider.psd mode change 100644 => 100755 img-src/local_maxima_algorithm.tex mode change 100644 => 100755 img-src/obstacle_detection.ai mode change 100644 => 100755 img-src/old_label_tool.psd mode change 100644 => 100755 img-src/patches.psd mode change 100644 => 100755 img-src/prob_compass.psd mode change 100644 => 100755 img-src/simulation.psd mode change 100644 => 100755 img-src/walking_engine.tex mode change 100644 => 100755 img-src/xabsl_editor.psd mode change 100644 => 100755 img/NaoSCP.png mode change 100644 => 100755 img/ScanLineEdgelDetector.png mode change 100644 => 100755 img/action_selection.png mode change 100644 => 100755 img/ball_examples.png mode change 100644 => 100755 img/build/netbeans_issue.png mode change 100644 => 100755 img/camera_matrix_calibration.png mode change 100644 => 100755 img/collision.png mode change 100644 => 100755 img/cvat/model_task.png mode change 100644 => 100755 img/cvat/models.png mode change 100644 => 100755 img/detected_ball.png mode change 100644 => 100755 img/favicon.ico mode change 100644 => 100755 img/field_detector.png mode change 100644 => 100755 img/game_recording/combined_pi_setup.png mode change 100644 => 100755 img/game_recording/pi_mount.jpg mode change 100644 => 100755 img/game_recording/session_setup.jpg mode change 100644 => 100755 img/goal_detector.png mode change 100644 => 100755 img/goal_feature_detector.png mode change 100644 => 100755 img/goal_modeling.png mode change 100644 => 100755 img/green-classified.png mode change 100644 => 100755 img/green-src.png mode change 100644 => 100755 img/green_detection.png mode change 100644 => 100755 img/green_histogram.png mode change 100644 => 100755 img/key_points.png mode change 100644 => 100755 img/kickdist.png mode change 100644 => 100755 img/labeling_screenshot.png mode change 100644 => 100755 img/line_graph_provider.png mode change 100644 => 100755 img/local_maxima_algorithm.png mode change 100644 => 100755 img/modules.png mode change 100644 => 100755 img/naoscp/naoscp_start.png mode change 100644 => 100755 img/naoth_setup/robot_poses.png mode change 100644 => 100755 img/obstacle_detection/collision_detection.png mode change 100644 => 100755 img/obstacle_detection/obstacle_detection.png mode change 100644 => 100755 img/old_label_tool.png mode change 100644 => 100755 img/patches.png mode change 100644 => 100755 img/platform_interface.png mode change 100644 => 100755 img/potential-field.png mode change 100644 => 100755 img/prob_compass.png mode change 100644 => 100755 img/rc-dialogs/BehaviorViewer.png mode change 100644 => 100755 img/rc-dialogs/DebugRequests.png mode change 100644 => 100755 img/rc-dialogs/ExternalTools.png mode change 100644 => 100755 img/rc-dialogs/FieldViewer.png mode change 100644 => 100755 img/rc-dialogs/ImageViewer.png mode change 100644 => 100755 img/rc-dialogs/LogfileRecorder.png mode change 100644 => 100755 img/rc-dialogs/Modify.png mode change 100644 => 100755 img/rc-dialogs/ModuleConfigurationViewer.png mode change 100644 => 100755 img/rc-dialogs/ParameterPanel.png mode change 100644 => 100755 img/rc-dialogs/Plot2D.png mode change 100644 => 100755 img/rc-dialogs/RepresentationInspector.png mode change 100644 => 100755 img/rc-dialogs/Simspark.png mode change 100644 => 100755 img/rc-dialogs/StopwatchViewer.png mode change 100644 => 100755 img/rc-dialogs/StopwatchViewer2018.png mode change 100644 => 100755 img/rc-dialogs/TeamCommLogViewer.png mode change 100644 => 100755 img/rc-dialogs/TeamCommLogViewer2018.png mode change 100644 => 100755 img/rc-dialogs/TeamCommViewer.png mode change 100644 => 100755 img/rc-dialogs/TeamCommViewer2018.png mode change 100644 => 100755 img/rc19-naoth-1024x683.jpg mode change 100644 => 100755 img/robotcontrol2018.png mode change 100644 => 100755 img/screenshot_open_teamcommlog.png mode change 100644 => 100755 img/screenshot_play_teamcomm.png mode change 100644 => 100755 img/screenshot_teamcomm_fieldviewer.png mode change 100644 => 100755 img/simulation.png mode change 100644 => 100755 img/strategic_positions.png mode change 100644 => 100755 img/synchronization_tool.png mode change 100644 => 100755 img/vision-modules.png mode change 100644 => 100755 img/walking_engine.png mode change 100644 => 100755 img/xabsl_editor.png mode change 100644 => 100755 index.html mode change 100644 => 100755 javascripts/config.js mode change 100644 => 100755 naoth_tools/gitlab-ci/index.html mode change 100644 => 100755 naoth_tools/k8s/index.html mode change 100644 => 100755 naoth_tools/lab-trackingsystem/index.html mode change 100644 => 100755 naoth_tools/naoscp/index.html mode change 100644 => 100755 naoth_tools/nvidia/index.html mode change 100644 => 100755 naoth_tools/rc/index.html mode change 100644 => 100755 naoth_tools/simspark/index.html mode change 100644 => 100755 naoth_tools/webots/index.html mode change 100644 => 100755 naoth_tools/xabsleditor/index.html mode change 100644 => 100755 robocup_tools/game_recording/index.html mode change 100644 => 100755 robocup_tools/index.html mode change 100644 => 100755 sitemap.xml mode change 100644 => 100755 sitemap.xml.gz mode change 100644 => 100755 stylesheets/extra.css mode change 100644 => 100755 teamreport/architecture_intro/index.html mode change 100644 => 100755 teamreport/behavior/index.html mode change 100644 => 100755 teamreport/bibliography/index.html mode change 100644 => 100755 teamreport/debugging/index.html mode change 100644 => 100755 teamreport/index.html mode change 100644 => 100755 teamreport/introduction/index.html mode change 100644 => 100755 teamreport/modeling/index.html mode change 100644 => 100755 teamreport/motion/index.html mode change 100644 => 100755 teamreport/vision/index.html diff --git a/404.html b/404.html old mode 100644 new mode 100755 index f140936..1ec650e --- a/404.html +++ b/404.html @@ -689,9 +689,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1029,7 +1076,7 @@

    404 - Not found

    - + diff --git a/CNAME b/CNAME old mode 100644 new mode 100755 diff --git a/assets/images/favicon.png b/assets/images/favicon.png old mode 100644 new mode 100755 diff --git a/assets/javascripts/bundle.a877e258.min.js b/assets/javascripts/bundle.a877e258.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/bundle.a877e258.min.js.map b/assets/javascripts/bundle.a877e258.min.js.map old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.ar.min.js b/assets/javascripts/lunr/min/lunr.ar.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.da.min.js b/assets/javascripts/lunr/min/lunr.da.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.de.min.js b/assets/javascripts/lunr/min/lunr.de.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.du.min.js b/assets/javascripts/lunr/min/lunr.du.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.es.min.js b/assets/javascripts/lunr/min/lunr.es.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.fi.min.js b/assets/javascripts/lunr/min/lunr.fi.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.fr.min.js b/assets/javascripts/lunr/min/lunr.fr.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.hi.min.js b/assets/javascripts/lunr/min/lunr.hi.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.hu.min.js b/assets/javascripts/lunr/min/lunr.hu.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.it.min.js b/assets/javascripts/lunr/min/lunr.it.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.ja.min.js b/assets/javascripts/lunr/min/lunr.ja.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.jp.min.js b/assets/javascripts/lunr/min/lunr.jp.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.multi.min.js b/assets/javascripts/lunr/min/lunr.multi.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.nl.min.js b/assets/javascripts/lunr/min/lunr.nl.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.no.min.js b/assets/javascripts/lunr/min/lunr.no.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.pt.min.js b/assets/javascripts/lunr/min/lunr.pt.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.ro.min.js b/assets/javascripts/lunr/min/lunr.ro.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.ru.min.js b/assets/javascripts/lunr/min/lunr.ru.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.stemmer.support.min.js b/assets/javascripts/lunr/min/lunr.stemmer.support.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.sv.min.js b/assets/javascripts/lunr/min/lunr.sv.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.th.min.js b/assets/javascripts/lunr/min/lunr.th.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.tr.min.js b/assets/javascripts/lunr/min/lunr.tr.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.vi.min.js b/assets/javascripts/lunr/min/lunr.vi.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/min/lunr.zh.min.js b/assets/javascripts/lunr/min/lunr.zh.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/tinyseg.js b/assets/javascripts/lunr/tinyseg.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/lunr/wordcut.js b/assets/javascripts/lunr/wordcut.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/workers/search.85cb4492.min.js b/assets/javascripts/workers/search.85cb4492.min.js old mode 100644 new mode 100755 diff --git a/assets/javascripts/workers/search.85cb4492.min.js.map b/assets/javascripts/workers/search.85cb4492.min.js.map old mode 100644 new mode 100755 diff --git a/assets/stylesheets/main.4a0965b7.min.css b/assets/stylesheets/main.4a0965b7.min.css old mode 100644 new mode 100755 diff --git a/assets/stylesheets/main.4a0965b7.min.css.map b/assets/stylesheets/main.4a0965b7.min.css.map old mode 100644 new mode 100755 diff --git a/assets/stylesheets/palette.cbb835fc.min.css b/assets/stylesheets/palette.cbb835fc.min.css old mode 100644 new mode 100755 diff --git a/assets/stylesheets/palette.cbb835fc.min.css.map b/assets/stylesheets/palette.cbb835fc.min.css.map old mode 100644 new mode 100755 diff --git a/guides/coding_guidelines/index.html b/guides/coding_guidelines/index.html old mode 100644 new mode 100755 index 9aea0fa..654cd78 --- a/guides/coding_guidelines/index.html +++ b/guides/coding_guidelines/index.html @@ -698,9 +698,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1093,8 +1140,8 @@ -

    Coding Guidelines

    -

    Git

    +

    Coding Guidelines

    +

    Git

    • Don't use capital letters in branch names, see https://stackoverflow.com/a/38494084/3866740
    • We use a four-eye principle for merging. Create a merge request in gitlab and ask another developer to approve the changes.
    • @@ -1103,7 +1150,7 @@

      Git

    • Ideally a branch addresses on feature or bug. This makes it easier to test and review.
    • The merge request should explain the changes and link to an issue where applicable.
    -

    Python

    +

    Python

    • In general use python version 3.6.9
    • comply with the PEP8 standard
    • @@ -1114,20 +1161,20 @@

      Python


    Some code guidelines can be automatically enforced with an .editorconfig file (https://editorconfig.org/) if the used editor or IDE supports this.

    -

    Encoding

    +

    Encoding

    The following command lists all *.cpp-files with non trivial encoding, i.e., they might contain some special characters:

    /bin/find . -type f -name *.cpp -exec file --mime-encoding {} \; | grep -v us-ascii
     
    All files should be in utf-8 encoding but should only use ascii characters. -

    Tabs vs. Spaces

    +

    Tabs vs. Spaces

    No tab characters should be used. Instead we should use always 4 spaces.

    -

    Brace Formatting

    +

    Brace Formatting

    In C++ braces should always be like that:

    int myFunction(const Vector2d& v) {
       return 2;
     }
     
    -

    Module Conventions

    +

    Module Conventions

    • parameter Class should be named Parameter
    • the object of the parameter class should be called params
    • @@ -1219,7 +1266,7 @@

      Module Conventions

      - + diff --git a/guides/deeplearning/deep_learning_annotation/index.html b/guides/deeplearning/deep_learning_annotation/index.html old mode 100644 new mode 100755 index f4ce17b..9c72866 --- a/guides/deeplearning/deep_learning_annotation/index.html +++ b/guides/deeplearning/deep_learning_annotation/index.html @@ -698,9 +698,35 @@ + +
    • + + + + + + + + + + +
    • + + + +
    • - - Handling the Robot + + Working with logfiles + +
    • + + + + + + + + + +
    • + + Sound
    • @@ -1147,7 +1194,7 @@ -

      Data Prep for Deep Learning

      +

      Data Prep for Deep Learning

      We use Labelstudio https://labelstud.io/ for all annotation tasks. It's deployed to our k8s cluster. Our instance is available at https://ls.berlinunited-cloud.de/. For more information about the deployment part see the k8s docs.

      We largely automated the data ingestion process from the point of uploading the data to our server.

      @@ -1155,7 +1202,7 @@

      finds new data in the log folder -> adds data to a postgres db -> if images are not already extracted from log, extract them -> add information about image location to db -> if images not already present in labelstudio add them there -> if images not annotated, run annotation model.

      In the following sections this process is described in more detail. Please note that you don't have to run the automation. You can always do everything manually. But for reproducibility this is not advised. The code for the whole data prep process is in https://scm.cms.hu-berlin.de/berlinunited/projects/log-crawler

      -

      Logfolder Structure

      +

      Logfolder Structure

      Internally we have a file server that you can access via any gruenau server. The logs are located at /vol/repl261-vol4/naoth/logs. Externally this folder is accessable via logs.naoth.de. Please see the page about infrastructure for more information.

      logs/
           2015-07-17_RC15/
      @@ -1213,7 +1260,7 @@ 

      Logfolder Structure

      game_logs/ 1_91_Nao0379-after-failure/
      -

      Data sources

      +

      Data sources

      Currently we have two main source where image data for deep learning can come from: - log files created on the nao robot - gopro footage from games

      @@ -1225,7 +1272,7 @@

      Data sources

      Note

      TODO: explain the log folder structure somewhere

      -

      CVAT Labeltool

      +

      CVAT Labeltool

      Our CVAT instance can be accessed via https://ball.informatik.hu-berlin.de. The setup of our instance is described in CVAT Setup.

      Everyone can register, but to see the tasks you have to be manually added to a group with the appropriate permissons. @@ -1241,7 +1288,7 @@

      CVAT Labeltool

      To automate many commons tasks python scripts were created in the naoth-deeplearning repo. The most relevant is the function for creating a task. For this you need the name of the task and the path on the server to the zip containing the images. A more detailed documentation can be found in the naoth-deeplearning repo.

      -

      Label Rules

      +

      Label Rules

      • You should not modify tasks that are assigned to someone else
      • You should not modify tasks that are marked completed
      • @@ -1260,7 +1307,7 @@

        Label Rules

        Note

        TODO: Update the rules when circle annotation is possible. Ellipses are not useful for us right now.

      -

      Rules for GoPro Tasks

      +

      Rules for GoPro Tasks

      Starting in 2018 we tried to record every SPL game with a camera outside of the field. The videos can be found at logs.naoth.de

      You should not import the Gopro videos directly. Instead the functions inside the NaoTH-Deeplearning repo for everything.

      @@ -1268,13 +1315,13 @@

      Rules for GoPro Tasks

      TODO: what should the labels be??? TODO: mention that labels should be done in projects not tasks

      -

      Rules for Log Tasks

      +

      Rules for Log Tasks

      Note

      TODO: write down the annotations that dortmund does. its important to know where the robot is blurred, fully in the picture etc.

      -

      Auto Annotation for users

      +

      Auto Annotation for users

      You can see a list of available models by clicking Models View on the top: models_view

      By clicking on supported labels you can see a list of labels this model can annotate. To create new models see the documentation at @@ -1287,9 +1334,9 @@

      Auto Annotation for users

      Those models are not able to do proper annotations (e.g. blurrendness) for bounding boxes yet. Those still have to be done manually.

    -

    Training a model

    +

    Training a model

    TODO

    -

    Deploying a model

    +

    Deploying a model

    TODO

    @@ -1369,7 +1416,7 @@

    Deploying a model

    - + diff --git a/guides/deeplearning/deep_learning_deployment/index.html b/guides/deeplearning/deep_learning_deployment/index.html old mode 100644 new mode 100755 index 3adf73c..b1a40b9 --- a/guides/deeplearning/deep_learning_deployment/index.html +++ b/guides/deeplearning/deep_learning_deployment/index.html @@ -698,9 +698,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1105,14 +1152,14 @@ -

    Deep Learning Deployment Overview

    +

    Deep Learning Deployment Overview

    Note

    TODO: this is very much a WIP. For now just some notes so that we don't forget. We will fix this in the future

    For deployment there are multiple options. The easiest to just use python for inference. However this is probably not what you want in an embedded system.

    -

    Tensorflow inference with python

    +

    Tensorflow inference with python

    The easiest method is just to use python similar to the way we train models.

    Compile Tensorflow for Nao @@ -1140,7 +1187,7 @@

    Tensorflow inference with python

    step and package building again.

    Example inference code and the compiled pip package can be found at ... (TODO: expose the lib folder to the public)

    -

    tensorflow lite on Nao with C++

    +

    tensorflow lite on Nao with C++

    1. Setup ubuntu on the nao as described elsewhere (TODO: insert link)
    2. build the tensorflow library directly on the nao robot:
    3. @@ -1220,7 +1267,7 @@

      tensorflow lite on Nao with C++

      } -

      tensorflow lite micro (tflm) on Nao with C++

      +

      tensorflow lite micro (tflm) on Nao with C++

      Setup ubuntu on the nao as described elsewhere (TODO: insert link) Make sure python3, pip and the pillow package is installed on the Nao

      # this is needed during tflm compilation
      @@ -1233,9 +1280,9 @@ 

      tensorflow lite micro (tflm) o make -f tensorflow/lite/micro/tools/make/Makefile microlite

      The compiled lib will be in tflm_src/tensorflow/lite/micro/tools/make/gen/linux_x86_64_default/lib/libtensorflow-microlite.a -

      Create a tflite file

      +

      Create a tflite file

      TODO explain exporter options

      -

      Convert a model for inference with tflite-micro

      +

      Convert a model for inference with tflite-micro

      xxd -i cool_model.tflite > my_model.cc
       
      this will produce something like this: @@ -1307,7 +1354,7 @@

      Convert a model for inf -DTF_LITE_STATIC_MEMORY

    The last line is especially important. Without it you will get unpredictable behavior using this code. -

    CompiledNN

    +

    CompiledNN

    CompiledNN is a library from B-Human. You can compile it on the Nao itself with:

    git clone https://github.com/bhuman/CompiledNN.git
     cd CompiledNN
    @@ -1458,7 +1505,7 @@ 

    CompiledNN

    - + diff --git a/guides/deeplearning/training/index.html b/guides/deeplearning/training/index.html old mode 100644 new mode 100755 index 70ce8d6..c973332 --- a/guides/deeplearning/training/index.html +++ b/guides/deeplearning/training/index.html @@ -698,9 +698,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1023,7 +1070,7 @@ -

    Training Deep Learning Models

    +

    Training Deep Learning Models

    We strive to make our work as reproducible as possible. Thus we established the following rules for developing deep learning models within our team:

    • when training on shared infrastructure make sure you don't use all the resources
    • @@ -1033,7 +1080,7 @@
    • datasets used for training should be published to datasets.naoth.de
    • trained models should be published at models.naoth.de
    -

    Train Models inside docker

    +

    Train Models inside docker

    Note

    TODO: fix user permissions, add restrictions for cpu, how to train headless? @@ -1133,7 +1180,7 @@

    Train Models inside docker

    - + diff --git a/guides/git-hooks/index.html b/guides/git-hooks/index.html old mode 100644 new mode 100755 index 5f8b2bf..8f72cf0 --- a/guides/git-hooks/index.html +++ b/guides/git-hooks/index.html @@ -698,9 +698,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -977,7 +1024,7 @@ -

    Git-Hooks

    +

    Git-Hooks

    Note

    TODO: explain how to set them up on windows with cygwin.

    @@ -1120,7 +1167,7 @@
    - + diff --git a/guides/keyframe_motions/index.html b/guides/keyframe_motions/index.html old mode 100644 new mode 100755 index 25363be..a7620c5 --- a/guides/keyframe_motions/index.html +++ b/guides/keyframe_motions/index.html @@ -698,9 +698,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1049,11 +1096,11 @@ -

    Keyframe Motions

    +

    Keyframe Motions

    We use use keyframes for some motions. Most notably the get up motions. To describe the keyframes we have a custom format which is described in the next section.

    TODO: alles muss hier überarbeitet werden

    -

    Structure of the motion files (.mef)

    +

    Structure of the motion files (.mef)

    nao
     
     # Kommentar
    @@ -1081,9 +1128,9 @@ 

    Structure of the motion files (.mef)<

    Dann kommen die 24 Gelenkwerte als Doublewerte ....außer der Wert wurde nicht, dann wird ein Stern gesetzt. Bei Stern wird die Varible "valid" auf false gesetzt, sonst auf true

    -

    Keyframe Motion Editor

    +

    Keyframe Motion Editor

    TODO

    -

    How to develop key frame motions

    +

    How to develop key frame motions

    TODO

    @@ -1163,7 +1210,7 @@

    How to develop key frame motions

    - + diff --git a/guides/logging/index.html b/guides/logging/index.html old mode 100644 new mode 100755 index 7785736..ec5bbb0 --- a/guides/logging/index.html +++ b/guides/logging/index.html @@ -698,9 +698,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1049,16 +1096,16 @@ -

    Logging

    +

    Logging

    In the context of Robocup we collect different kind of logs.

    -

    Game and Image Logs

    +

    Game and Image Logs

    während spielen aufgenommen in dateien im /tmp Ordner sind nach neustart von roboter weg was wie oft geloggt wird ist im GameLogger Module festgelegt.

    Nach jedem Spiel sollte ein LogStick in den Roboter gesteckt werden um die Logs einzusammeln. Diese sollen anschließend zu logs.naoth.de hochgeladen werden

    -

    Custom Logs

    -

    TeamComm Logs

    +

    Custom Logs

    +

    TeamComm Logs

    you can control the logging folder via the logDirPath parameter from the gamelogger module. The default is "/tmp". This parameter applies to the game.log and image log that are written automatically. This does not apply for manually recorded logfiles with robotcontrol.

    TODO add image from robotcontrol here

    @@ -1140,7 +1187,7 @@

    TeamComm Logs

    - + diff --git a/guides/obstacle_detection/index.html b/guides/obstacle_detection/index.html old mode 100644 new mode 100755 index 08dee86..6f51199 --- a/guides/obstacle_detection/index.html +++ b/guides/obstacle_detection/index.html @@ -698,9 +698,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1063,28 +1110,28 @@ -

    Obstacle Detection and Pathplanning

    +

    Obstacle Detection and Pathplanning

    Pathplanning for a single robot is easy as long as there are no obstacles to move around. In our case pathplanning can be challenging due to the dynamic nature of the robots on the field. There are multiple ways to detect obstacles. First we can detect if we are pushed or not able to move as expected. Then we can detect obstacles from further away with the ultrasound sensors or by detecting robots and other obstacles elements in the image. We can also take the broadcasted positions of our teammates into account.

    -

    Collision Detection

    +

    Collision Detection

    We have three different methods to detect collisions. The ArmCollisionDetector module detects wether the arm movements are blocked. In this case we try to move our arms back to reduce the width of the robot.

    The BumperCollisionDetector module detects if the bumper on the feet are pressed for a period of time. This happens when the robots walks into a fallen robot or agains a goalpost.

    The BodyCollisionDetector module detects wether the robot was pushed.

    Collision Detection

    -

    Obstacle Detection

    +

    Obstacle Detection

    • Ultrasound
    • NoGreenDetection
    • Robot Detection via Deep Learning

    Obstacle Detection

    -

    Modeling the obstacles

    -

    Pathplanning

    +

    Modeling the obstacles

    +

    Pathplanning

    TODO: steffen

    @@ -1164,7 +1211,7 @@

    Pathplanning

    - + diff --git a/guides/onboarding/index.html b/guides/onboarding/index.html old mode 100644 new mode 100755 index e690728..5855b4d --- a/guides/onboarding/index.html +++ b/guides/onboarding/index.html @@ -739,9 +739,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1021,7 +1068,7 @@ -

    Joining the team

    +

    Joining the team

    We are always happy to welcome new members in our team. You don't need to be a HU student. For HU students there is also the possibility of doing your diploma/master-thesis or student research project (“Studienarbeit”) at our working group.

    If you are interested to join please contact us via email or come directly to our lab. You can find our contact infos @@ -1031,7 +1078,7 @@ accounts of want to use another one we have to manually approve you. In this case send us an email. We have weekly zoom meetings. If you want to participate ask us for the link via email or slack. The day and time changes every semester. Please have a look at the website for the current dates.

    -

    Onboarding

    +

    Onboarding

    The development happens on the universities gitlab Server (https://scm.cms.hu-berlin.de/) You can login with your CMS credentials or register as an external user. To join our gitlab group send us your gitlab user name.

    A lot of our code is also publicly available at https://github.com/BerlinUnited. @@ -1114,7 +1161,7 @@

    Onboarding

    - + diff --git a/guides/other_teams/index.html b/guides/other_teams/index.html old mode 100644 new mode 100755 index 97c0626..437ac9f --- a/guides/other_teams/index.html +++ b/guides/other_teams/index.html @@ -698,9 +698,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1075,10 +1122,10 @@ -

    Setup code from other teams

    +

    Setup code from other teams

    There are a couple of code releases that might be interesting to setup for experiments. This is a guide on how to do this.

    TODO: explain the multiple repositories and give an overview on how they are connected

    -

    HTWK Motion Library

    +

    HTWK Motion Library

    Since we don't currently have crosscompiler that supports C++17 we have to setup the ubuntu image on the nao and compile the library there. A guide on how to setup the ubuntu image can be found at TODO.

    On the Nao:
    - install git, cmake, g++, unzip
    @@ -1089,11 +1136,11 @@

    HTWK Motion Library

    - cmake ../ - cmake --build .

    you end up with a libWalkingEngine.a

    -

    BHuman Coderelease 2020

    +

    BHuman Coderelease 2020

    TODO

    -

    Compiling Code for the robot via other means

    +

    Compiling Code for the robot via other means

    Sometimes you want/need to compile something for the robot and not incorporate that into our premake builds. Usually those things are libraries that come with the cmake build system.

    -

    Minimal cmake example

    +

    Minimal cmake example

    TODO: what about sysroot? You can compile this helloworld.cpp

    #include<iostream>
    @@ -1197,7 +1244,7 @@ 

    Minimal cmake example

    - + diff --git a/guides/robot_handling/index.html b/guides/robot_handling/index.html old mode 100644 new mode 100755 index a63250d..04c217f --- a/guides/robot_handling/index.html +++ b/guides/robot_handling/index.html @@ -697,29 +697,29 @@ + -
  • - - Working with logfiles - -
  • - - - - - - - - - -
  • - - Sound - -
  • - - + +
  • + + + + + + + + + + +
  • + + + + + + + + + +
  • + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound + +
  • + + + + + + + + +
  • Logging @@ -1077,17 +1126,17 @@ -

    Handling the Robot

    +

    Handling the Robot

    Explain the handling of the robot in various scenarios.

    -

    How to carry the robot

    +

    How to carry the robot

    TODO

    -

    Buttons and LED's

    +

    Buttons and LED's

    TODO: explain LED's and buttons

    -

    How to inspect for hardware damage

    +

    How to inspect for hardware damage

    TODO

    -

    USB drive stuff

    +

    USB drive stuff

    TODO: wo soll das hin?

    -

    Camera Matrix Calibration

    +

    Camera Matrix Calibration

    TODO: auto calibration TODO: manuall calibration - how to set start conditions @@ -1170,7 +1219,7 @@

    Camera Matrix Calibration

    - + diff --git a/guides/robots/img/output.png b/guides/robots/img/output.png new file mode 100755 index 0000000000000000000000000000000000000000..8de25c92692e099837cdd4b3efc7342e1e217e5f GIT binary patch literal 220150 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 + + + + + + + + + + + + + + Known Issues with Robots - Berlin United - Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + + + + +
      + + + + + + + +
      + +
      + + + + +
      +
      + + + +
      +
      +
      + + + + + + +
      +
      +
      + + + +
      +
      +
      + + + +
      +
      +
      + + +
      +
      + + + + +

      Known Issues with Robots

      +

      LOLA: Failure Writing Data

      +

      This error seems to accur sometimes after the robot comes back from being repaired when use a custom OS on the NAO.

      +

      Symptoms

      +

      Cognition is started, LEDs are working, but the robot is unable to move the joints.

      +

      Analysis

      +
        +
      1. login through SSH
      2. +
      3. run journalctl
      4. +
      5. the output should be showing following repeating error messages
      6. +
      +

      terminal output

      +

      Reason

      +

      The reason seems to be a version-mismatch between the firmware of the joints and the communication protocol of the LOLA in the custom OS.

      +

      Solution

      +
        +
      1. flash an original Aldebaran OpenNao OS
      2. +
      3. flash the custom OS again
      4. +
      + + +
      + +
      +
      + +
      + + + + + + +
      +
      +
      +
      + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/setup/nao_config/index.html b/guides/setup/nao_config/index.html old mode 100644 new mode 100755 index 9bb6724..72bac50 --- a/guides/setup/nao_config/index.html +++ b/guides/setup/nao_config/index.html @@ -710,9 +710,35 @@ + +
    1. + + + + + + + + + + +
    2. + + + +
    3. - - Handling the Robot + + Working with logfiles + +
    4. + + + + + + + + + +
    5. + + Sound
    6. @@ -977,7 +1024,7 @@ -

      Configuration Files

      +

      Configuration Files

      TODO: describe the logic behind our configuration files

      @@ -1057,7 +1104,7 @@
      - + diff --git a/guides/setup/naoth_code_setup/index.html b/guides/setup/naoth_code_setup/index.html old mode 100644 new mode 100755 index 8525d75..2447f5d --- a/guides/setup/naoth_code_setup/index.html +++ b/guides/setup/naoth_code_setup/index.html @@ -704,40 +704,6 @@ Clone and build - -
    7. @@ -803,9 +769,35 @@ + +
    8. + + + + + + + + + + +
    9. + + + +
    10. - - Handling the Robot + + Working with logfiles + +
    11. + + + + + + + + + +
    12. + + Sound
    13. @@ -1083,40 +1096,6 @@ Clone and build - -
    14. @@ -1147,8 +1126,8 @@ -

      NaoTH Development Setup

      -

      Prerequisites

      +

      NaoTH Development Setup

      +

      Prerequisites

      You need to install a bunch of software before being able to develop code for the Nao robot.

      @@ -1255,7 +1234,7 @@

      Prerequisites

      -

      Toolchain Setup

      +

      Toolchain Setup

      @@ -1278,7 +1257,7 @@

      Toolchain Setup

      -

      Clone and build

      +

      Clone and build

      To work with the project, checkout the git repo:

      git clone <url of this repo> <NaoTH-Projekt/Naoth-2020>
       
      @@ -1293,9 +1272,9 @@

      Clone and build

      There are two ways to compile the naoth source code for the NAO. First you can target the softbank provided image for the NAO or use clang and target the self build Ubuntu image.

      -

      Softbank Image

      +

      Softbank Image

      In order to build the naoth binary go to <NaoTH-Projekt>/Naoth-2020/NaoTHSoccer/Make and run ./compileGame.sh -j 4

      -

      Clang + Ubuntu Image

      +

      Clang + Ubuntu Image

      You need to have LLVM installed as described above in the prerequisites section.

      To tell premake to use the ubuntu toolchain you need to change two lines <NaoTH-Projekt>/Naoth-2020/NaoTHSoccer/Make/projectconfig.user.lua

        @@ -1314,11 +1293,11 @@

        Clang + Ubuntu Image

        There are two ways to compile the naoth source code for the NAO. First you can use cygwin and target the softbank provided image for the NAO or use clang and target the self build Ubuntu image.

        -

        Cygwin + Softbank Image

        +

        Cygwin + Softbank Image

        You need to have cygwin installed as described above in the prerequisites section.

        In order to build the naoth binary go to <NaoTH-Projekt>/Naoth-2020/NaoTHSoccer/Make, open the mintty bash console in this folder via the context menu and run ./compileGame.sh -j 4

        -

        Clang + Ubuntu Image

        +

        Clang + Ubuntu Image

        You need to have cygwin and LLVM installed as described above in the prerequisites section.

        To tell premake to use the ubuntu toolchain you need to change two lines <NaoTH-Projekt>/Naoth-2020/NaoTHSoccer/Make/projectconfig.user.lua

          @@ -1333,7 +1312,7 @@

          Clang + Ubuntu Image


        For development inside WSL follow the linux instructions.

        -

        Additional tools for development

        +

        Additional tools for development

        We use different tools with our project:

        XabslEditor
        We have a dedicated editor for editing and compiling the robots behavior written in xabsl. @@ -1358,7 +1337,7 @@

        Additional tools for development

        Python
        For working with logfiles we have a set of python scripts in the utils/py folder. The basic functionality is inside a the naoth python package which you can install with pip:
        - run pip install -e naoth in the <repository>/Utils/py this will install protobuf as well

        -

        Known Issues

        +

        Known Issues

        Premake5 is not found
        - can happen if your PATH is exceeding the 1024 character limit if PATH is set with setup.bat - Solution add it manualy to the Path. Note that trying to append to PATH with the setup.bat script can delete the @@ -1450,7 +1429,7 @@

        Known Issues

        - + diff --git a/guides/setup/robot_setup/index.html b/guides/setup/robot_setup/index.html old mode 100644 new mode 100755 index 60a7fc1..392b75e --- a/guides/setup/robot_setup/index.html +++ b/guides/setup/robot_setup/index.html @@ -782,9 +782,35 @@ + +
      • + + + + + + + + + + +
      • + + + +
      • - - Handling the Robot + + Working with logfiles + +
      • + + + + + + + + + +
      • + + Sound
      • @@ -1105,10 +1152,10 @@ -

        NAO setup and deployment

        +

        NAO setup and deployment

        Before you can deploy the NaoTH Code to the robot needs to be set up in a special way. This is a one time setup which replaces the operating system that comes with the robot and additionally sets up some libraries we need on the robot.

        -

        Setup Routine for V5 Robots

        +

        Setup Routine for V5 Robots

        First we need to set up the operating system with the image provided by softbank robotics. You can download it from here

        This image must be put onto a usb drive. For this you can use the @@ -1124,14 +1171,14 @@

        Setup Routine for V5 Robots

        The next step is to initialize the robot with the required libs. This can be done with NaoSCP and is described here

        After that the compiled robot code can be deployed with NaoSCP as well.

        -

        Calibrating Joints

        +

        Calibrating Joints

        The default software of the robot has an integrated automatic calibration routine for the alignment of the joints. This routine is usually executed only at the first start of a new robot. During the RoboCup games it can happen (and it does happen) that the joints lose their alignment, which might negatively affect all motions, e.g., the walk become a bit more unstable. The calibration values are stored internally and are preserved even when the OS is replaced. The following describes how the automatic calibration routine can be triggered when needed.

        -

        Trigger the Automatic Calibration Routine

        +

        Trigger the Automatic Calibration Routine

        1. prepare a USB stick with NaoOS Image (as described above) with factory reset.

          @@ -1188,16 +1235,16 @@

          Trigger the Automatic Calibra

    -

    Reference

    +

    Reference

    -

    New Setup Routine (with custom image)

    +

    New Setup Routine (with custom image)

    For the NAO V6 robots we will use a custom ubuntu based image. Each robot has to be set up with this image once. For creating the image see the NaoImage repository in gitlab. (Not public). The instructions for building and deploying the image can be found there.


    -

    Deploy Code to robot

    +

    Deploy Code to robot

    TODO: explain network stick
    TODO: explain deploy stick
    TODO: explain deploy routines?

    @@ -1279,7 +1326,7 @@

    Deploy Code to robot

    - + diff --git a/guides/tools/index.html b/guides/tools/index.html new file mode 100755 index 0000000..e539e4a --- /dev/null +++ b/guides/tools/index.html @@ -0,0 +1,1140 @@ + + + + + + + + + + + + + + + + Tools - Berlin United - Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + +
    + + + + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + +
    +
    + + + + +

    Tools

    +

    Git / SmartGit

    +
      +
    • SmartGit is a git client used by our team. It can be used for free for non-profit and academic projects.
    • +
    • https://www.syntevo.com/smartgit/
    • +
    • https://www.syntevo.com/register-non-commercial/#academic
    • +
    +

    Visual Studio Code

    +

    + + +
    + +
    +
    + +
    + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/working-with-logfiles/img/rc_connect.jpg b/guides/working-with-logfiles/img/rc_connect.jpg old mode 100644 new mode 100755 diff --git a/guides/working-with-logfiles/img/rc_imagedrawings.jpg b/guides/working-with-logfiles/img/rc_imagedrawings.jpg old mode 100644 new mode 100755 diff --git a/guides/working-with-logfiles/img/rc_imageviewer.jpg b/guides/working-with-logfiles/img/rc_imageviewer.jpg old mode 100644 new mode 100755 diff --git a/guides/working-with-logfiles/img/rc_loginspector_image_viewer.png b/guides/working-with-logfiles/img/rc_loginspector_image_viewer.png old mode 100644 new mode 100755 diff --git a/guides/working-with-logfiles/img/rc_loginspector_representations.png b/guides/working-with-logfiles/img/rc_loginspector_representations.png old mode 100644 new mode 100755 diff --git a/guides/working-with-logfiles/working-with-logfiles/index.html b/guides/working-with-logfiles/working-with-logfiles/index.html old mode 100644 new mode 100755 index ccfc231..f560de3 --- a/guides/working-with-logfiles/working-with-logfiles/index.html +++ b/guides/working-with-logfiles/working-with-logfiles/index.html @@ -697,21 +697,37 @@ - - -
  • + +
  • - + - - - Working with logfiles - + + + +
  • + + + + + + + + + + + +
  • + + + + + + + + + Working with logfiles + + +
  • + + + +
  • - - Handling the Robot + + Sound
  • @@ -978,7 +1025,7 @@

    Prerequisites:
    - You should be able to compile the Commons, NaothSoccer and LogSimulator projects on your system
    - You can run RobotControl

    -

    1 Get access to logfiles

    +

    1 Get access to logfiles

    There are two ways to access the folder with the logfiles and videos of our games and tests.

    1. You can get read-only access to the logs (without the need of the ssh access) at
    2. @@ -1000,14 +1047,14 @@

      1 Get access to logfiles

    For Linux use ssh-keygen and on Windows use cygwin's ssh-keygen. Send your public key to a teammember who can add your key.

    -

    2 Work with logfiles in RobotControl

    -

    Run a logfile in the LogSimulator

    +

    2 Work with logfiles in RobotControl

    +

    Run a logfile in the LogSimulator

    For this tutorial use the following file

    Download a logfile and start the LogSimulator in Debug with the name of the logfile as argument. In the Console window you can press p to play the logfile and l to loop the logfile. More Controls for the LogSimulator are displayed in the console window.

    -

    Start RobotControl

    +

    Start RobotControl

    A detailed description of the RobotControl can be found in the Teamreport. There are multiple ways to start RobotControl:

      @@ -1033,8 +1080,8 @@

      Start RobotControl

      In the Finder, go to naoth-2020/RobotControl and double-click the granlew script. Same for the robotcontrol script located in naoth-2020/RobotControl/dist.

    -

    View Representations in RobotControl

    -

    Logfile Inspector

    +

    View Representations in RobotControl

    +

    Logfile Inspector

    Depending on what you want to do with the logfiles, you can view them in different ways. If you want to check if the logfiles contain any data and quickly look through it, you can use the Logfile Inspector, which gives you the possibility to view the data (e.g. images, sensor values) in RobotControl:

    1. @@ -1064,7 +1111,7 @@

      Logfile Inspector

      Screenshot_2021-03-19_at_17.34.12

    -

    LogSimulator

    +

    LogSimulator

    If you want to run robot code on the logfile, you should create a robot instance by starting the LogSimulator in the terminal, playing the logfile, and connecting RobotControl to your localhost. In this way the logfile is basically acting like a real robot, which you can observe and program via RobotControl.

    1. @@ -1095,8 +1142,8 @@

      LogSimulator

    In the image above the DebugRequests for showing the green pixels are enabled (on the left). On the right side of the image the ParameterTreePanel is shown.

    -

    3 Work with logfiles in python

    -

    3.1 Python Ecosystem

    +

    3 Work with logfiles in python

    +

    3.1 Python Ecosystem

    All python ecosystem is located in the directory

    <naoth-2020 repository path>/Utils/py
     
    @@ -1118,12 +1165,12 @@

    3.1 Python Ecosystem

    NOTE: The python messages are saves in Utils/py/naoth/naoth/pb. If you don't have the up-to-date messages, the logs can't be parsed.

    -

    3.2 Example Logfile

    +

    3.2 Example Logfile

    For our examples we use the following logfile

    https://logs.naoth.de/2019-07-02_RC19/2019-07-04_11-00-00_Berlin%20United_vs_NaoDevils_half1/game_logs/3_93_Nao0212_190704-1112/game.log
     
    We assume, that the logfile is named game.log and is placed in the same directory as your scripts. -

    3.3 Logfiles structure

    +

    3.3 Logfiles structure

    A logfile consists of frames and each frame contains representations, which hold various data recorded from the robot. Such data can be Images, Ball detections etc. Each Frame has a number increasing from 0. The representations @@ -1140,7 +1187,7 @@

    3.3 Logfiles structure

    | +--... ...
    -

    3.4 Reading a logfile

    +

    3.4 Reading a logfile

    To read and parse a logfile we use the naoth.log.Reader class. More Information can be found in the file

    py/naoth/naoth/log/_experimental_reader.py
     
    @@ -1163,7 +1210,7 @@

    3.4 Reading a logfile

    Representations: dict_keys(['BehaviorStateComplete', 'RobotInfo', 'BehaviorStateSparse', 'OdometryData', 'CameraMatrix', 'CameraMatrixTop', 'GoalPercept', 'GoalPerceptTop', 'MultiBallPercept', 'BallModel', 'FieldPercept', 'FieldPerceptTop', 'ScanLineEdgelPercept', 'ScanLineEdgelPerceptTop', 'ShortLinePercept', 'RansacLinePercept', 'RansacCirclePercept2018', 'TeamMessage', 'FrameInfo']) -

    3.5 Reading representations

    +

    3.5 Reading representations

    We extend the above example to read the content of an important Representation FrameInfo. FrameInfo contains the timestamp and the number of the frame in the actual execution cycle of the robot. (Note: this frame number doen not correspond to the number of the frame in the logfile).

    from naoth.log import Reader
     
    @@ -1182,7 +1229,7 @@ 

    3.5 Reading representations

    frameNumber: 1 time: 1417
    -

    3.6 Other examples

    +

    3.6 Other examples

    Further more complex examples can be found in

    Utils/py/log_parser_examples
     
    @@ -1264,7 +1311,7 @@

    3.6 Other examples

    - + diff --git a/guides/working-with-sound/working-with-sound/index.html b/guides/working-with-sound/working-with-sound/index.html old mode 100644 new mode 100755 index abc3265..310aace --- a/guides/working-with-sound/working-with-sound/index.html +++ b/guides/working-with-sound/working-with-sound/index.html @@ -698,6 +698,67 @@ + +
  • + + + + + + + + + + +
  • + + + + + + + + +
  • Working with logfiles @@ -828,20 +889,6 @@ -
  • - - Handling the Robot - -
  • - - - - - - - - -
  • Logging @@ -1143,29 +1190,29 @@ -

    Sound

    -

    Tools

    -

    Audacity

    +

    Sound

    +

    Tools

    +

    Audacity

    A tool for working with audio files

    -

    Pyroomacoustics

    +

    Pyroomacoustics

    A software package aimed at the rapid development and testing of audio array processing algorithms. Can be used to simulate the behavior of sound in space.

    -

    Sound in Logfiles

    +

    Sound in Logfiles

    Logfies recorded by the robots during the game can be found here: * https://logs.naoth.de/

    -

    Code

    +

    Code

    Audio data is recorded in the Logfiles in blocks. The format of the block can be found in the message AudioData.proto and the corresponding representation in AudioData.h.

    • https://github.com/BerlinUnited/NaoTH/blob/develop/Framework/Commons/Messages/AudioData.proto
    • @@ -1188,11 +1235,11 @@

      Code

      -

      Recording with PulseAudio

      -

      Recording RAW audio data

      +

      Recording with PulseAudio

      +

      Recording RAW audio data

          parecord -r --raw --format=s16le --rate=8000 --channel-map=rear-left,rear-right,front-left,front-right --channels=4 > test.raw
       
      -

      References

      +

      References

      • Akustische Ortung im Roboterfußball, Jakob Dübel, Masterthesis (German).
        • Code (Internal): https://scm.cms.hu-berlin.de/berlinunited/papers/2020-jakob-duebel-masterarbeit
        • @@ -1285,7 +1332,7 @@

          References

          - + diff --git a/img-src/ScanLineEdgelDetector.psd b/img-src/ScanLineEdgelDetector.psd old mode 100644 new mode 100755 diff --git a/img-src/action_selection.psd b/img-src/action_selection.psd old mode 100644 new mode 100755 diff --git a/img-src/ball_examples.psd b/img-src/ball_examples.psd old mode 100644 new mode 100755 diff --git a/img-src/cameramatrix_calibration.psd b/img-src/cameramatrix_calibration.psd old mode 100644 new mode 100755 diff --git a/img-src/collision_detection.ai b/img-src/collision_detection.ai old mode 100644 new mode 100755 diff --git a/img-src/deep_learning/cvat_projects.psd b/img-src/deep_learning/cvat_projects.psd old mode 100644 new mode 100755 diff --git a/img-src/detected_ball.psd b/img-src/detected_ball.psd old mode 100644 new mode 100755 diff --git a/img-src/field_detector.psd b/img-src/field_detector.psd old mode 100644 new mode 100755 diff --git a/img-src/goal_detector.psd b/img-src/goal_detector.psd old mode 100644 new mode 100755 diff --git a/img-src/goal_feature_detector.psd b/img-src/goal_feature_detector.psd old mode 100644 new mode 100755 diff --git a/img-src/goal_modeling.psd b/img-src/goal_modeling.psd old mode 100644 new mode 100755 diff --git a/img-src/green_detection.psd b/img-src/green_detection.psd old mode 100644 new mode 100755 diff --git a/img-src/green_histogram.psd b/img-src/green_histogram.psd old mode 100644 new mode 100755 diff --git a/img-src/key_points.psd b/img-src/key_points.psd old mode 100644 new mode 100755 diff --git a/img-src/line_graph_provider.psd b/img-src/line_graph_provider.psd old mode 100644 new mode 100755 diff --git a/img-src/local_maxima_algorithm.tex b/img-src/local_maxima_algorithm.tex old mode 100644 new mode 100755 index f2b371e..4021616 --- a/img-src/local_maxima_algorithm.tex +++ b/img-src/local_maxima_algorithm.tex @@ -1,31 +1,31 @@ -\documentclass{standalone}% For the example only, any class will do - -\usepackage[ruled,vlined]{algorithm2e} - - -\begin{document} -\begin{algorithm}[H] - \caption{Find local maxima.} - \SetAlgoLined - \KwData{Set of possible key points $A$} - \KwResult{List of locally maximal key points $K$} - - $K\gets \emptyset$\; - \For{$p \in A$} { - ${\tt insert}\gets true$\; - \For{$q \in K$} { - \If{ overlaps(p,q) }{ - \eIf{$V(p) > V(q)$}{ - $K\gets K\setminus\{q\}$\; - }{ - ${\tt insert}\gets false$\; - } - } - } - - \If{{\tt insert}}{ - $K\gets K\cup\{p\}$\; - } - } -\end{algorithm} +\documentclass{standalone}% For the example only, any class will do + +\usepackage[ruled,vlined]{algorithm2e} + + +\begin{document} +\begin{algorithm}[H] + \caption{Find local maxima.} + \SetAlgoLined + \KwData{Set of possible key points $A$} + \KwResult{List of locally maximal key points $K$} + + $K\gets \emptyset$\; + \For{$p \in A$} { + ${\tt insert}\gets true$\; + \For{$q \in K$} { + \If{ overlaps(p,q) }{ + \eIf{$V(p) > V(q)$}{ + $K\gets K\setminus\{q\}$\; + }{ + ${\tt insert}\gets false$\; + } + } + } + + \If{{\tt insert}}{ + $K\gets K\cup\{p\}$\; + } + } +\end{algorithm} \end{document} \ No newline at end of file diff --git a/img-src/obstacle_detection.ai b/img-src/obstacle_detection.ai old mode 100644 new mode 100755 diff --git a/img-src/old_label_tool.psd b/img-src/old_label_tool.psd old mode 100644 new mode 100755 diff --git a/img-src/patches.psd b/img-src/patches.psd old mode 100644 new mode 100755 diff --git a/img-src/prob_compass.psd b/img-src/prob_compass.psd old mode 100644 new mode 100755 diff --git a/img-src/simulation.psd b/img-src/simulation.psd old mode 100644 new mode 100755 diff --git a/img-src/walking_engine.tex b/img-src/walking_engine.tex old mode 100644 new mode 100755 index 8e582f3..9768f96 --- a/img-src/walking_engine.tex +++ b/img-src/walking_engine.tex @@ -1,102 +1,102 @@ -\documentclass{standalone}% For the example only, any class will do - -\usepackage{tikz} -\usetikzlibrary{positioning}% To get more advances positioning options -\usetikzlibrary{arrows.meta} -\usetikzlibrary{fit} -\usetikzlibrary{calc} -\usetikzlibrary{backgrounds} - - -\begin{document} - \tikzset{% - >={Latex[width=2mm,length=2mm]}, - % Specifications for style of nodes: - base/.style = {rectangle, rounded corners, draw=black, - minimum width=4cm, minimum height=1cm, - text centered, font=\sffamily}, - module/.style = {base, minimum width=2.5cm, fill=green!15, font=\ttfamily}, - sub_module/.style = {base, minimum width=2.5cm, fill=white!15, font=\ttfamily}, - rep/.style = {base, minimum width=2.5cm, fill=blue!15, font=\ttfamily}, - robot/.style = {base, minimum width=2.5cm, fill=gray!15, font=\ttfamily}, - } - \begin{tikzpicture}[node distance=1.5cm, every node/.style={fill=white, font=\sffamily}, align=center] - \node (Cognition) [sub_module, minimum width=8cm] {Cognition}; - \node (inv2) [inner sep=0,minimum size=0,below= of Cognition]{}; % invisible node - \node (MotionRequest) [rep, left = of inv2] {Motion Request}; - \node (MotionStatus) [rep, right = of inv2] {Motion Status}; - \node (FootStepPlanner) [sub_module, below = of MotionRequest] {Foot Step Planner}; - \node (StepBuffer) [rep, right = of FootStepPlanner] {Step Buffer}; - \node (inv1) [inner sep=0,minimum size=0,right= 0cm and 2cm of StepBuffer]{}; % invisible node - \node (ZMPPlanner) [sub_module, below = of StepBuffer] {ZMPPlanner}; - \node (ZMPReferenceBuffer) [rep, below = of ZMPPlanner] {ZMP Reference Buffer}; - \node (ZMPPreviewController) [sub_module, below = of ZMPReferenceBuffer] {ZMP Preview Controller}; - \node (FootTrajectoryGenerator) [sub_module, right = of inv1] {Foot Trajectory Generator}; - \node (HipRotationOffsetModifier) [sub_module, below = of FootTrajectoryGenerator] {Hip Rotation Offset Modifier}; - \node (LiftingFootCompensator) [sub_module, below = of HipRotationOffsetModifier] {Lifting Foot Compensator}; - \node (TargetCoMFeetPose) [rep, below = of ZMPPreviewController] {Target CoM Feet Pose}; - \node (IKOpt) [sub_module, below = of TargetCoMFeetPose] {IK Optimizer Hip}; - \node (TargetHipFeetPose) [rep, below = of IKOpt] {Target Hip Feet Pose}; - \node (TorsoRotationStabilizer) [sub_module, right = of TargetHipFeetPose] {Torso Rotation\\Stabilizer}; - \node (IK) [sub_module, below = of TargetHipFeetPose] {Inverse Kinematics}; - \node (MotorJoints) [rep, below = of IK] {Motor Joints}; - \path let \p1=(IK), \p2=(TorsoRotationStabilizer) in node[sub_module] (FeetStabilizer) at (\x2,\y1) {FeetStabilizer}; - \node (CoMErrors) [rep, left = of FootStepPlanner] {CoM Errors}; - \node (CoMErrorProvider) [sub_module, below = of CoMErrors] {CoM Error Provider}; - \node (CommandPoseBuffer) [rep, left = of TargetCoMFeetPose] {CommandPoseBuffer}; - \path let \p1=(MotorJoints), \p2=(CoMErrorProvider) in node[rep] (KinematicChainSensor) at (\x2,\y1) {Kinematic Chain Sensor}; - \node (AccelerometerData) [rep, below right = of MotorJoints] {Accelerometer\\Data}; - \node (IMUModel) [module, right = of AccelerometerData] {IMU-Model}; - \node (GyrometerData) [rep, right = of IMUModel] {Gyrometer\\Data}; - \path let \p1=(MotorJoints), \p2=(IMUModel) in node[rep] (IMUDataInertialModel) at (\x2,\y1) {IMUData / \\InertialModel}; - \node (Robot) [robot, below = 3.5cm and 0cm of MotorJoints] {Robot}; - - \coordinate [right = of HipRotationOffsetModifier] (join1); - \path (TorsoRotationStabilizer) -- (FeetStabilizer) node[shape=coordinate, midway] (join2) {}; - - \begin{scope}[on background layer] - \node (Motion) [sub_module, inner sep=0.5cm, fit=(GyrometerData) (MotionStatus) (MotionRequest) (KinematicChainSensor)] {}; - \node (Walk2018) [module, inner sep=0.8cm, fit=(join1) (IK) (CoMErrorProvider) (CoMErrors)] {}; - \node [below right, opacity=0, text opacity=1] at (Walk2018.north west) {Walk2018-Module}; - \node [below right, opacity=0, text opacity=1] at (Motion.north west) {Motion}; - \end{scope} - - \draw[->] (MotionRequest.north|-Cognition.south) -- (MotionRequest); - \draw[->] (MotionStatus) -- (MotionStatus.north|-Cognition.south); - \draw[->] (MotionRequest) -- (FootStepPlanner); - \draw[->] (FootStepPlanner) -- (StepBuffer); - \draw[->] (StepBuffer) -- (ZMPPlanner); - \draw[->] (StepBuffer) -- (FootTrajectoryGenerator); - \draw[->] (inv1) |- (HipRotationOffsetModifier); - \draw[->] (inv1) |- (LiftingFootCompensator); - \draw[->] (ZMPPlanner) -- (ZMPReferenceBuffer); - \draw[->] (ZMPReferenceBuffer) -- (ZMPPreviewController); - \draw[->] (ZMPPreviewController) -- (TargetCoMFeetPose); - \draw (FootTrajectoryGenerator) -| (join1); - \draw (HipRotationOffsetModifier) -- (join1); - \draw (LiftingFootCompensator) -| (join1); - \draw[->] (join1) |- (TargetCoMFeetPose); - \draw[->] (TargetCoMFeetPose) -- (IKOpt); - \draw[->] (IKOpt) -- (TargetHipFeetPose); - \draw[->] (TargetHipFeetPose) -- (IK); - \draw[->] (FeetStabilizer) |- (MotorJoints); - \draw[->] (IK) -- (MotorJoints); - \draw[->] (MotorJoints) -- (Robot); - \draw (IMUDataInertialModel) |- (join2); - \draw[->] (join2) -- (TorsoRotationStabilizer); - \draw[->] (join2) -- (FeetStabilizer); - \draw (GyrometerData) |- (join2); - \draw[->] (TorsoRotationStabilizer) -- (TargetHipFeetPose); - \draw[->] (CoMErrors) -- (FootStepPlanner); - \draw[->] (CoMErrorProvider) -- (CoMErrors); - \draw[->] (Robot) -| (AccelerometerData); - \draw[->] (Robot) -| (KinematicChainSensor); - \draw[->] (Robot) -| (GyrometerData); - \draw[->] (KinematicChainSensor) -- (CoMErrorProvider); - \draw[->] (CommandPoseBuffer) |- (CoMErrorProvider); - \draw[->] (TargetCoMFeetPose) -- (CommandPoseBuffer); - \draw[->] (IMUModel) -- (IMUDataInertialModel); - \draw[->] (AccelerometerData) -- (IMUModel); - \draw[->] (GyrometerData) -- (IMUModel); - \end{tikzpicture} +\documentclass{standalone}% For the example only, any class will do + +\usepackage{tikz} +\usetikzlibrary{positioning}% To get more advances positioning options +\usetikzlibrary{arrows.meta} +\usetikzlibrary{fit} +\usetikzlibrary{calc} +\usetikzlibrary{backgrounds} + + +\begin{document} + \tikzset{% + >={Latex[width=2mm,length=2mm]}, + % Specifications for style of nodes: + base/.style = {rectangle, rounded corners, draw=black, + minimum width=4cm, minimum height=1cm, + text centered, font=\sffamily}, + module/.style = {base, minimum width=2.5cm, fill=green!15, font=\ttfamily}, + sub_module/.style = {base, minimum width=2.5cm, fill=white!15, font=\ttfamily}, + rep/.style = {base, minimum width=2.5cm, fill=blue!15, font=\ttfamily}, + robot/.style = {base, minimum width=2.5cm, fill=gray!15, font=\ttfamily}, + } + \begin{tikzpicture}[node distance=1.5cm, every node/.style={fill=white, font=\sffamily}, align=center] + \node (Cognition) [sub_module, minimum width=8cm] {Cognition}; + \node (inv2) [inner sep=0,minimum size=0,below= of Cognition]{}; % invisible node + \node (MotionRequest) [rep, left = of inv2] {Motion Request}; + \node (MotionStatus) [rep, right = of inv2] {Motion Status}; + \node (FootStepPlanner) [sub_module, below = of MotionRequest] {Foot Step Planner}; + \node (StepBuffer) [rep, right = of FootStepPlanner] {Step Buffer}; + \node (inv1) [inner sep=0,minimum size=0,right= 0cm and 2cm of StepBuffer]{}; % invisible node + \node (ZMPPlanner) [sub_module, below = of StepBuffer] {ZMPPlanner}; + \node (ZMPReferenceBuffer) [rep, below = of ZMPPlanner] {ZMP Reference Buffer}; + \node (ZMPPreviewController) [sub_module, below = of ZMPReferenceBuffer] {ZMP Preview Controller}; + \node (FootTrajectoryGenerator) [sub_module, right = of inv1] {Foot Trajectory Generator}; + \node (HipRotationOffsetModifier) [sub_module, below = of FootTrajectoryGenerator] {Hip Rotation Offset Modifier}; + \node (LiftingFootCompensator) [sub_module, below = of HipRotationOffsetModifier] {Lifting Foot Compensator}; + \node (TargetCoMFeetPose) [rep, below = of ZMPPreviewController] {Target CoM Feet Pose}; + \node (IKOpt) [sub_module, below = of TargetCoMFeetPose] {IK Optimizer Hip}; + \node (TargetHipFeetPose) [rep, below = of IKOpt] {Target Hip Feet Pose}; + \node (TorsoRotationStabilizer) [sub_module, right = of TargetHipFeetPose] {Torso Rotation\\Stabilizer}; + \node (IK) [sub_module, below = of TargetHipFeetPose] {Inverse Kinematics}; + \node (MotorJoints) [rep, below = of IK] {Motor Joints}; + \path let \p1=(IK), \p2=(TorsoRotationStabilizer) in node[sub_module] (FeetStabilizer) at (\x2,\y1) {FeetStabilizer}; + \node (CoMErrors) [rep, left = of FootStepPlanner] {CoM Errors}; + \node (CoMErrorProvider) [sub_module, below = of CoMErrors] {CoM Error Provider}; + \node (CommandPoseBuffer) [rep, left = of TargetCoMFeetPose] {CommandPoseBuffer}; + \path let \p1=(MotorJoints), \p2=(CoMErrorProvider) in node[rep] (KinematicChainSensor) at (\x2,\y1) {Kinematic Chain Sensor}; + \node (AccelerometerData) [rep, below right = of MotorJoints] {Accelerometer\\Data}; + \node (IMUModel) [module, right = of AccelerometerData] {IMU-Model}; + \node (GyrometerData) [rep, right = of IMUModel] {Gyrometer\\Data}; + \path let \p1=(MotorJoints), \p2=(IMUModel) in node[rep] (IMUDataInertialModel) at (\x2,\y1) {IMUData / \\InertialModel}; + \node (Robot) [robot, below = 3.5cm and 0cm of MotorJoints] {Robot}; + + \coordinate [right = of HipRotationOffsetModifier] (join1); + \path (TorsoRotationStabilizer) -- (FeetStabilizer) node[shape=coordinate, midway] (join2) {}; + + \begin{scope}[on background layer] + \node (Motion) [sub_module, inner sep=0.5cm, fit=(GyrometerData) (MotionStatus) (MotionRequest) (KinematicChainSensor)] {}; + \node (Walk2018) [module, inner sep=0.8cm, fit=(join1) (IK) (CoMErrorProvider) (CoMErrors)] {}; + \node [below right, opacity=0, text opacity=1] at (Walk2018.north west) {Walk2018-Module}; + \node [below right, opacity=0, text opacity=1] at (Motion.north west) {Motion}; + \end{scope} + + \draw[->] (MotionRequest.north|-Cognition.south) -- (MotionRequest); + \draw[->] (MotionStatus) -- (MotionStatus.north|-Cognition.south); + \draw[->] (MotionRequest) -- (FootStepPlanner); + \draw[->] (FootStepPlanner) -- (StepBuffer); + \draw[->] (StepBuffer) -- (ZMPPlanner); + \draw[->] (StepBuffer) -- (FootTrajectoryGenerator); + \draw[->] (inv1) |- (HipRotationOffsetModifier); + \draw[->] (inv1) |- (LiftingFootCompensator); + \draw[->] (ZMPPlanner) -- (ZMPReferenceBuffer); + \draw[->] (ZMPReferenceBuffer) -- (ZMPPreviewController); + \draw[->] (ZMPPreviewController) -- (TargetCoMFeetPose); + \draw (FootTrajectoryGenerator) -| (join1); + \draw (HipRotationOffsetModifier) -- (join1); + \draw (LiftingFootCompensator) -| (join1); + \draw[->] (join1) |- (TargetCoMFeetPose); + \draw[->] (TargetCoMFeetPose) -- (IKOpt); + \draw[->] (IKOpt) -- (TargetHipFeetPose); + \draw[->] (TargetHipFeetPose) -- (IK); + \draw[->] (FeetStabilizer) |- (MotorJoints); + \draw[->] (IK) -- (MotorJoints); + \draw[->] (MotorJoints) -- (Robot); + \draw (IMUDataInertialModel) |- (join2); + \draw[->] (join2) -- (TorsoRotationStabilizer); + \draw[->] (join2) -- (FeetStabilizer); + \draw (GyrometerData) |- (join2); + \draw[->] (TorsoRotationStabilizer) -- (TargetHipFeetPose); + \draw[->] (CoMErrors) -- (FootStepPlanner); + \draw[->] (CoMErrorProvider) -- (CoMErrors); + \draw[->] (Robot) -| (AccelerometerData); + \draw[->] (Robot) -| (KinematicChainSensor); + \draw[->] (Robot) -| (GyrometerData); + \draw[->] (KinematicChainSensor) -- (CoMErrorProvider); + \draw[->] (CommandPoseBuffer) |- (CoMErrorProvider); + \draw[->] (TargetCoMFeetPose) -- (CommandPoseBuffer); + \draw[->] (IMUModel) -- (IMUDataInertialModel); + \draw[->] (AccelerometerData) -- (IMUModel); + \draw[->] (GyrometerData) -- (IMUModel); + \end{tikzpicture} \end{document} \ No newline at end of file diff --git a/img-src/xabsl_editor.psd b/img-src/xabsl_editor.psd old mode 100644 new mode 100755 diff --git a/img/NaoSCP.png b/img/NaoSCP.png old mode 100644 new mode 100755 diff --git a/img/ScanLineEdgelDetector.png b/img/ScanLineEdgelDetector.png old mode 100644 new mode 100755 diff --git a/img/action_selection.png b/img/action_selection.png old mode 100644 new mode 100755 diff --git a/img/ball_examples.png b/img/ball_examples.png old mode 100644 new mode 100755 diff --git a/img/build/netbeans_issue.png b/img/build/netbeans_issue.png old mode 100644 new mode 100755 diff --git a/img/camera_matrix_calibration.png b/img/camera_matrix_calibration.png old mode 100644 new mode 100755 diff --git a/img/collision.png b/img/collision.png old mode 100644 new mode 100755 diff --git a/img/cvat/model_task.png b/img/cvat/model_task.png old mode 100644 new mode 100755 diff --git a/img/cvat/models.png b/img/cvat/models.png old mode 100644 new mode 100755 diff --git a/img/detected_ball.png b/img/detected_ball.png old mode 100644 new mode 100755 diff --git a/img/favicon.ico b/img/favicon.ico old mode 100644 new mode 100755 diff --git a/img/field_detector.png b/img/field_detector.png old mode 100644 new mode 100755 diff --git a/img/game_recording/combined_pi_setup.png b/img/game_recording/combined_pi_setup.png old mode 100644 new mode 100755 diff --git a/img/game_recording/pi_mount.jpg b/img/game_recording/pi_mount.jpg old mode 100644 new mode 100755 diff --git a/img/game_recording/session_setup.jpg b/img/game_recording/session_setup.jpg old mode 100644 new mode 100755 diff --git a/img/goal_detector.png b/img/goal_detector.png old mode 100644 new mode 100755 diff --git a/img/goal_feature_detector.png b/img/goal_feature_detector.png old mode 100644 new mode 100755 diff --git a/img/goal_modeling.png b/img/goal_modeling.png old mode 100644 new mode 100755 diff --git a/img/green-classified.png b/img/green-classified.png old mode 100644 new mode 100755 diff --git a/img/green-src.png b/img/green-src.png old mode 100644 new mode 100755 diff --git a/img/green_detection.png b/img/green_detection.png old mode 100644 new mode 100755 diff --git a/img/green_histogram.png b/img/green_histogram.png old mode 100644 new mode 100755 diff --git a/img/key_points.png b/img/key_points.png old mode 100644 new mode 100755 diff --git a/img/kickdist.png b/img/kickdist.png old mode 100644 new mode 100755 diff --git a/img/labeling_screenshot.png b/img/labeling_screenshot.png old mode 100644 new mode 100755 diff --git a/img/line_graph_provider.png b/img/line_graph_provider.png old mode 100644 new mode 100755 diff --git a/img/local_maxima_algorithm.png b/img/local_maxima_algorithm.png old mode 100644 new mode 100755 diff --git a/img/modules.png b/img/modules.png old mode 100644 new mode 100755 diff --git a/img/naoscp/naoscp_start.png b/img/naoscp/naoscp_start.png old mode 100644 new mode 100755 diff --git a/img/naoth_setup/robot_poses.png b/img/naoth_setup/robot_poses.png old mode 100644 new mode 100755 diff --git a/img/obstacle_detection/collision_detection.png b/img/obstacle_detection/collision_detection.png old mode 100644 new mode 100755 diff --git a/img/obstacle_detection/obstacle_detection.png b/img/obstacle_detection/obstacle_detection.png old mode 100644 new mode 100755 diff --git a/img/old_label_tool.png b/img/old_label_tool.png old mode 100644 new mode 100755 diff --git a/img/patches.png b/img/patches.png old mode 100644 new mode 100755 diff --git a/img/platform_interface.png b/img/platform_interface.png old mode 100644 new mode 100755 diff --git a/img/potential-field.png b/img/potential-field.png old mode 100644 new mode 100755 diff --git a/img/prob_compass.png b/img/prob_compass.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/BehaviorViewer.png b/img/rc-dialogs/BehaviorViewer.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/DebugRequests.png b/img/rc-dialogs/DebugRequests.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/ExternalTools.png b/img/rc-dialogs/ExternalTools.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/FieldViewer.png b/img/rc-dialogs/FieldViewer.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/ImageViewer.png b/img/rc-dialogs/ImageViewer.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/LogfileRecorder.png b/img/rc-dialogs/LogfileRecorder.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/Modify.png b/img/rc-dialogs/Modify.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/ModuleConfigurationViewer.png b/img/rc-dialogs/ModuleConfigurationViewer.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/ParameterPanel.png b/img/rc-dialogs/ParameterPanel.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/Plot2D.png b/img/rc-dialogs/Plot2D.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/RepresentationInspector.png b/img/rc-dialogs/RepresentationInspector.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/Simspark.png b/img/rc-dialogs/Simspark.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/StopwatchViewer.png b/img/rc-dialogs/StopwatchViewer.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/StopwatchViewer2018.png b/img/rc-dialogs/StopwatchViewer2018.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/TeamCommLogViewer.png b/img/rc-dialogs/TeamCommLogViewer.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/TeamCommLogViewer2018.png b/img/rc-dialogs/TeamCommLogViewer2018.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/TeamCommViewer.png b/img/rc-dialogs/TeamCommViewer.png old mode 100644 new mode 100755 diff --git a/img/rc-dialogs/TeamCommViewer2018.png b/img/rc-dialogs/TeamCommViewer2018.png old mode 100644 new mode 100755 diff --git a/img/rc19-naoth-1024x683.jpg b/img/rc19-naoth-1024x683.jpg old mode 100644 new mode 100755 diff --git a/img/robotcontrol2018.png b/img/robotcontrol2018.png old mode 100644 new mode 100755 diff --git a/img/screenshot_open_teamcommlog.png b/img/screenshot_open_teamcommlog.png old mode 100644 new mode 100755 diff --git a/img/screenshot_play_teamcomm.png b/img/screenshot_play_teamcomm.png old mode 100644 new mode 100755 diff --git a/img/screenshot_teamcomm_fieldviewer.png b/img/screenshot_teamcomm_fieldviewer.png old mode 100644 new mode 100755 diff --git a/img/simulation.png b/img/simulation.png old mode 100644 new mode 100755 diff --git a/img/strategic_positions.png b/img/strategic_positions.png old mode 100644 new mode 100755 diff --git a/img/synchronization_tool.png b/img/synchronization_tool.png old mode 100644 new mode 100755 diff --git a/img/vision-modules.png b/img/vision-modules.png old mode 100644 new mode 100755 diff --git a/img/walking_engine.png b/img/walking_engine.png old mode 100644 new mode 100755 diff --git a/img/xabsl_editor.png b/img/xabsl_editor.png old mode 100644 new mode 100755 diff --git a/index.html b/index.html old mode 100644 new mode 100755 index 8503c00..071a88b --- a/index.html +++ b/index.html @@ -706,9 +706,35 @@ + +
        • + + + + + + + + + + +
        • + + + +
        • - - Handling the Robot + + Working with logfiles + +
        • + + + + + + + + + +
        • + + Sound
        • @@ -973,7 +1020,7 @@ -

          Welcome to Berlin United

          +

          Welcome to Berlin United

          Berlin United Team Photo

          Berlin United is a robot soccer team in the RoboCup Standard Platform League. We release most of our code on GitHub. @@ -1057,7 +1104,7 @@

          - + diff --git a/javascripts/config.js b/javascripts/config.js old mode 100644 new mode 100755 index 09fbd88..77d2e60 --- a/javascripts/config.js +++ b/javascripts/config.js @@ -1,16 +1,16 @@ -window.MathJax = { - tex: { - inlineMath: [["\\(", "\\)"]], - displayMath: [["\\[", "\\]"]], - processEscapes: true, - processEnvironments: true - }, - options: { - ignoreHtmlClass: ".*|", - processHtmlClass: "arithmatex" - } -}; - -document$.subscribe(() => { - MathJax.typesetPromise() +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex" + } +}; + +document$.subscribe(() => { + MathJax.typesetPromise() }) \ No newline at end of file diff --git a/naoth_tools/gitlab-ci/index.html b/naoth_tools/gitlab-ci/index.html old mode 100644 new mode 100755 index 525d239..87bbcf2 --- a/naoth_tools/gitlab-ci/index.html +++ b/naoth_tools/gitlab-ci/index.html @@ -787,9 +787,35 @@ + +
        • + + + + + + + + + + +
        • + + + +
        • - - Handling the Robot + + Working with logfiles + +
        • + + + + + + + + + +
        • + + Sound
        • @@ -1117,9 +1164,9 @@ -

          Gitlab CI

          +

          Gitlab CI

          For our main repositories we utilize gitlab runner to build the code. You can specify jobs in a .gitlab-ci.yml file and set the execution order. Each job will run inside a docker container you specify. You can also built docker images within a job and later use those in another job. See ... The actual execution of the jobs is triggered by a gitlab-runner binary installed on Universities servers and two of our own lab servers (goal and ball server).

          -

          Usage

          +

          Usage

          The simplest example is to create a .gitlab-ci.yml in the repos root and upload it.

          hello:
             script:
          @@ -1135,7 +1182,7 @@ 

          Usage

          The tags for a runner are configured during the installation of the gitlab runner. Please note that if a runner has multiple tags you have to set all of them to select this runner. You can use the runner provided by the university and for jobs without special needs we recommend using them. But you can get rate limited there. If you have repos where you commit often you should set up your pipeline to not run on every commit.

          There are many more options to configure your CI pipeline. For reference please have a look at the existing ones or the official documentation at https://docs.gitlab.com/ee/ci/yaml/

          -

          Linux Toolchain

          +

          Linux Toolchain

          Code can be found at https://github.com/BerlinUnited/linuxtoolchain. This repo is a mirror from an internal repo.

          The following files are used for setting up the automatic compilation and deployment of the NaoTH Linux-Toolchain:
          - Dockerfile
          @@ -1156,7 +1203,7 @@

          Linux Toolchain

          Note that Docker only works with linux container when the base system is linux. More information can be found at: https://stackoverflow.com/questions/42158596/can-windows-containers-be-hosted-on-linux

          The execution of the linux toolchain pipeline will trigger the execution of the NaoTH pipeline.

          -

          NaoTH Pipeline

          +

          NaoTH Pipeline

          Code can be found at https://github.com/BerlinUnited/NaoTH. This repo is currently updated once a year.

          Note

          @@ -1173,12 +1220,12 @@

          NaoTH Pipeline

          The publish_naoth_docker job creates a docker image based on the linux toolchain with all the compile output. The docker image is published to the internal gitlab docker registry of the repository.

          The publish_naoth_python job publishes the naoth python package to the internal pip registry of the repository.

          -

          NaoImage Pipeline

          +

          NaoImage Pipeline

          This pipeline will run inside the image created by the naoth pipeline. It will build the softbank and the ubuntu image. This repo is still experimental. It is based on work done by the NaoDevils (currently unreleased).

          -

          Setup

          +

          Setup

          As mentioned above we set up gitlab-runner on our ball and goal server.

          -

          How to setup Gitlab Runner

          +

          How to setup Gitlab Runner

          We have a gitlab runner set up at ball.informatik.hu-berlin.de and goal.informatik.hu-berlin.de. Both servers are located in our lab.

          Install gitlab runner

          # setup package repo
          @@ -1193,7 +1240,7 @@ 

          How to setup Gitlab Runner

          runner config is located in /etc/gitlab-runner/config.toml

          enable gpus by adding stuff to the config.toml https://docs.gitlab.com/runner/configuration/gpus.html

          -

          Cleanup Jobs

          +

          Cleanup Jobs

          The Gitlab CI docker executor leaves a lot of volumes and images behind to speed up the CI jobs. To free up the disk a bit we run a cron job once every day to cleanup the CI cache volumes and old images. For this we added the following lines to the root crontab file (run sudo crontab -e to edit) @@ -1278,7 +1325,7 @@

          Cleanup Jobs

          - + diff --git a/naoth_tools/k8s/index.html b/naoth_tools/k8s/index.html old mode 100644 new mode 100755 index 16fede1..4a642c6 --- a/naoth_tools/k8s/index.html +++ b/naoth_tools/k8s/index.html @@ -694,9 +694,35 @@ + +
        • + + + + + + + + + + +
        • + + + +
        • - - Handling the Robot + + Working with logfiles + +
        • + + + + + + + + + +
        • + + Sound
        • @@ -983,9 +1030,9 @@ -

          NaoTH Kubenertes Cluster

          -

          Setup

          -

          Deployed Applications

          +

          NaoTH Kubenertes Cluster

          +

          Setup

          +

          Deployed Applications

          TODO

          @@ -1065,7 +1112,7 @@

          Deployed Applications

          - + diff --git a/naoth_tools/lab-trackingsystem/index.html b/naoth_tools/lab-trackingsystem/index.html old mode 100644 new mode 100755 index 950890d..36961b4 --- a/naoth_tools/lab-trackingsystem/index.html +++ b/naoth_tools/lab-trackingsystem/index.html @@ -543,62 +543,10 @@ - - NaoTH Tracking System - - - - @@ -760,9 +708,35 @@ + +
        • + + + + + + + + + + +
        • + + + +
        • - - Handling the Robot + + Working with logfiles + +
        • + + + + + + + + + +
        • + + Sound
        • @@ -1015,42 +1010,6 @@ - - -
          @@ -1063,16 +1022,16 @@ -

          NaoTH Tracking System

          -

          Preparations

          +

          NaoTH Tracking System

          +

          Preparations

          You have to run the following code on the robot to enable multicast
          sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev wlan0

          Multicast must be enabled before the tracking system code works on the robot. Otherwise you will get a segfault.

          -

          Configure the recording

          +

          Configure the recording

          TODO make images showing the workflow

          -

          Calibrate the system

          +

          Calibrate the system

          TODO

          -

          Recording

          +

          Recording

          TODO: mention tips for optimal results

          @@ -1152,7 +1111,7 @@

          Recording

          - + diff --git a/naoth_tools/naoscp/index.html b/naoth_tools/naoscp/index.html old mode 100644 new mode 100755 index f23ece1..1cd1110 --- a/naoth_tools/naoscp/index.html +++ b/naoth_tools/naoscp/index.html @@ -746,9 +746,35 @@ + +
        • + + + + + + + + + + +
        • + + + +
        • - - Handling the Robot + + Working with logfiles + +
        • + + + + + + + + + +
        • + + Sound
        • @@ -1035,7 +1082,7 @@ -

          NaoSCP

          +

          NaoSCP

          NaoSCP is a tool created by us which helps to deploy our code to the NAO. We provide it as a netbeans project inside our NaoTH repository. The netbeans project is located at <NaoTH-Projekt/Naoth-2020>/NaoSCP. Inside netbeans you can open it with: File->Import Project <ProjectDir>/NaoSCP

          @@ -1053,7 +1100,7 @@
        • TODO add nao scp docu in extra site here and remove it from teamreport
        • TODO: add note about alias in bashrc for gradle run/build naoscp
        -

        Initialize Robot

        +

        Initialize Robot

        This will prompt you for the extern/lib directory. This could be for example /home/myuser/robocup/repositories/linuxtoolchain/toolchain_nao/extern/lib

        After that you are prompted for the current IP address of the robot.

        @@ -1946,7 +1993,7 @@

        Initialize Robot

        The system is going down for reboot NOW!
    -

    Send to robot

    +

    Send to robot

    You need to set the head number and select what you want to deploy.

    Send to robot output @@ -2818,7 +2865,7 @@

    Send to robot

    - + diff --git a/naoth_tools/nvidia/index.html b/naoth_tools/nvidia/index.html old mode 100644 new mode 100755 index bf92d65..411d683 --- a/naoth_tools/nvidia/index.html +++ b/naoth_tools/nvidia/index.html @@ -694,9 +694,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -961,7 +1008,7 @@ -

    Setup Nvidia Driver on Lab Servers

    +

    Setup Nvidia Driver on Lab Servers

    Goal Server: sudo ubuntu-drivers install

    then you have nvidia-smi available

    @@ -1045,7 +1092,7 @@
    - + diff --git a/naoth_tools/rc/index.html b/naoth_tools/rc/index.html old mode 100644 new mode 100755 index 001eb56..0776d37 --- a/naoth_tools/rc/index.html +++ b/naoth_tools/rc/index.html @@ -739,9 +739,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1021,7 +1068,7 @@ -

    RoboControl

    +

    RoboControl

    Some explanations of commons tasks we do with RobotControl.

    Note

    @@ -1033,7 +1080,7 @@
    • TODO: add note about alias in bashrc for gradle run/build naoscp
    -

    View Teamcommlogs in Robotcontrol

    +

    View Teamcommlogs in Robotcontrol

    In RobotControl open the TeamCommLogViewer Dialog and open a teamcomm logfile. Open a teamcomm log file

    Open the FieldViewer and the TeamCommViewer FX Dialogs next to each other. In the FieldViewer click on the log button and then @@ -1121,7 +1168,7 @@

    View Teamcommlogs in Robotcontrol

    - + diff --git a/naoth_tools/simspark/index.html b/naoth_tools/simspark/index.html old mode 100644 new mode 100755 index 10035de..19fd8ca --- a/naoth_tools/simspark/index.html +++ b/naoth_tools/simspark/index.html @@ -759,9 +759,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1061,19 +1108,19 @@ -

    Simspark

    -

    Create a Simspark-Appimage

    +

    Simspark

    +

    Create a Simspark-Appimage

    AppImage is a container holding all the neccessary binaries and libraries for starting a specifiic application: https://appimage.org/

    Useful example AppImage-Howto: https://www.booleanworld.com/creating-linux-apps-run-anywhere-appimage/

    To create an AppImage for Simspark i've basically used the following description for creating an AppImage:
    https://github.com/AppImage/AppImageKit/wiki/Creating-AppImages#6-manually-create-an-appdir

    -

    Variant # 1

    +

    Variant # 1

    • installed all necessary libraries and requrirements for simspark
    • used the script for compiling an appimage: simspark.sh
    -

    Variant # 2

    +

    Variant # 2

    To get a "clean" environment for "installing" (compiling) the Simspark binary i used a chroot environment and pulled all necessary files from there. For the chroot environment i used this script:
    https://github.com/boolean-world/appimage-resources/blob/master/tempenv.sh

    @@ -1169,7 +1216,7 @@

    Variant # 2

    - + diff --git a/naoth_tools/webots/index.html b/naoth_tools/webots/index.html old mode 100644 new mode 100755 index 4500555..9a0cdd2 --- a/naoth_tools/webots/index.html +++ b/naoth_tools/webots/index.html @@ -708,9 +708,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -975,7 +1022,7 @@ -

    Webots

    +

    Webots

    @@ -1054,7 +1101,7 @@

    Webots

    - + diff --git a/naoth_tools/xabsleditor/index.html b/naoth_tools/xabsleditor/index.html old mode 100644 new mode 100755 index bc57960..424b230 --- a/naoth_tools/xabsleditor/index.html +++ b/naoth_tools/xabsleditor/index.html @@ -708,9 +708,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -975,7 +1022,7 @@ -

    Xabsleditor

    +

    Xabsleditor

    • TODO add xabsleditor docu in extra site here and remove it from teamreport
    @@ -1057,7 +1104,7 @@
    - + diff --git a/robocup_tools/game_recording/index.html b/robocup_tools/game_recording/index.html old mode 100644 new mode 100755 index 375018f..aea454d --- a/robocup_tools/game_recording/index.html +++ b/robocup_tools/game_recording/index.html @@ -801,9 +801,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1145,14 +1192,14 @@ -

    Game Recording

    +

    Game Recording

    We want to be able to record RoboCup games in synchronized fashion. To achieve this we created a setup which records the game bases on GameController signals.

    The raspberry receives game controller messages over it's LAN interface. The Wifi interface is connected the GoPros own wireless network. When the Pi receives a READY, SET or PLAY signal from the gamecontrller it sends in turn a signal to the gopro to start a recording. The recording is stopped when the Pi receives a FINISH or INITIAL signal or if it does not receive a message from the gamecontroller for 5 seconds.

    -

    Hardware Setup

    +

    Hardware Setup

    The Setup consists of a tripod base, two tripod extensions, a mounting plate with a tripod ball head, a raspberry pi, gopro + cables. The cable setup is slightly different for gopro sessions vs gopro hero 5. For more details on which parts we bought and what alterations we did see the advanced setup section at the bottom.

    @@ -1170,7 +1217,7 @@

    Hardware Setup

    tape over the data lines of the usb cable on the usb 2 end. The data lines are the two in the middle. Also the camera will only charge if it is not recording.

    USB cable data lines

    -

    Software Setup

    +

    Software Setup

    Our Pi's have configured IP addresses like 10.0.4.X Where X is the number written on the Pi

      IP Address: 10.0.4.x
       mask: 255.255.0.0
    @@ -1184,7 +1231,7 @@ 

    Software Setup

      sudo nano /etc/dhcpcd.conf
     

    On the GoPro you need to start Wifi manually in the camera settings.

    -

    LED's

    +

    LED's

    Die blaue LED zeigt den Status der Verbindung zur GoPro an.
    - schnelles Blinken: bedeutet das der Raspberry Pi sich nicht zu dem Wlan der GoPro verbinden kann.
    - langsames Blinken: bedeutet das der Raspberry Pi das Wlan der GoPro sieht aber noch nicht verbunden ist.
    @@ -1196,18 +1243,18 @@

    LED's

    Die rote LED zeigt den Status der Aufnahme an.
    - blinken: zeigt an das ein Signal für die Aufnahme an die GoPro gesendet wird. An der Vorder- und Hinterseite der GoPro sollten auch jeweils eine rote LED blinken, was bedeutet, dass die GoPro tatsächlich aufnimmt.

    -

    Vor dem Spiel - Bekanntes Problem

    +

    Vor dem Spiel - Bekanntes Problem

    In der aktuellen Realisierung schaltet sich der WLAN der GoPro regelmäßig ab. Es sollte rechtzeitig vor dem Spiel geprüft werden ob die Verbindung besteht (blaue LED leuchtet konstant). Falls nicht, dann muss das WLAN der GoPro neu gestartet werden.

    Dazu wird wie folgt verfahren: Zum Anschalten der des Wlans muss an der Seite die Mode Taste gedrückt werden. Anschließend auf dem Display von oben nach unten wischen um ins Menü zu kommen. In dem Menü muss auf Connect gedrückt werden und im Submenü ganz unten kann das Wlan an- und wieder ausgeschaltet werden.

    -

    Nach dem Spiel/Spieltag

    +

    Nach dem Spiel/Spieltag

    Der GameController nimmt für jedes Spiel ein Log und ein TeamComm Log auf. Diese müssen bisher von Hand gesichert werden. Für uns es ist wichtig das wir diese Daten bekommen. Die Logs liegen im logs und logs_teamcomm Ordner neben der GameController.jar Datei.

    Die Daten der GoPro SD Karte müssen nach einem Spieltag auf ein externes Speichermedium gesichert werden um Platz zu schaffen für die Aufnahmen des nächsten Tages.

    -

    Video tutorial for setup in german

    +

    Video tutorial for setup in german

    -

    Advanced Setup:

    -

    Alterations to the hardware

    +

    Advanced Setup:

    +

    Alterations to the hardware

    TODO

    -

    Hardware List:

    +

    Hardware List:

    Tripod Head: Amazon TODO

    @@ -1288,7 +1335,7 @@

    Hardware List:

    - + diff --git a/robocup_tools/index.html b/robocup_tools/index.html old mode 100644 new mode 100755 index e729b64..166b004 --- a/robocup_tools/index.html +++ b/robocup_tools/index.html @@ -708,9 +708,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -975,7 +1022,7 @@ -

    RoboCup Project

    +

    RoboCup Project

    TODO describe our recording Project here in detail

    @@ -1055,7 +1102,7 @@
    - + diff --git a/sitemap.xml b/sitemap.xml old mode 100644 new mode 100755 index 158a1a7..dd730dc --- a/sitemap.xml +++ b/sitemap.xml @@ -2,187 +2,197 @@ None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 daily None - 2024-04-02 + 2024-04-24 + daily + + + None + 2024-04-24 + daily + + + None + 2024-04-24 daily \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz old mode 100644 new mode 100755 index 556d9c021655a4bc9f3eb461029ad802b828b10c..25e2c7552c39b6c4d1139c7848ce311f7408325c GIT binary patch literal 220 zcmV<203-h&iwFohKq+Pd|8r?{Wo=<_E_iKh0PW4a4uUWg1>oJMAl;!z7}S)qIXdYB z5U9|kw8*WZZ!do_Jb}}>OK(q4`icDAn&72+(#~dVAH^(Cwse)Yb;fSjb9i96+=*vz zNcmtaTgq7DeRtw~7>01T z1^L!hGKrHkjMFel$I6;*YGqT{THSl~kX510NAOLui2O$a2M!!KaNxj!0|yQqIB?*= WfddErAACMYdHDsz{IoH66951Z!fg!z literal 219 zcmV<103`n(iwFpKYz$@s|8r?{Wo=<_E_iKh0PW394uUWc1>ilWXu5|YaiOM^ol94G z00I?Aphc#N-rn*P!wFoyNs~^eFZ0Rl-L>qc2WqTI`7Vk%)26UxW2%(juIKQ;GZo0^ z(2{n{hYh8?cCJ4OF^*$IjniG;Q)GuqP*M8_iFGLA=*U&Td`%0MZZ6r{LS3xUQcT_U zBPZ9{QYCS+4`Y84A6aLcSW)Mu()U3>RGByJM~cm45yg)L4jede;J|?c2M!!KaNxj! V0|)+Je7;CK^#$}h*!X@D008h%W?%pS diff --git a/stylesheets/extra.css b/stylesheets/extra.css old mode 100644 new mode 100755 index e99f7e6..1ed10fd --- a/stylesheets/extra.css +++ b/stylesheets/extra.css @@ -1,7 +1,7 @@ -.md-sidebar--secondary{ - visibility: hidden !important; - width: 0; -} -.md-grid { - max-width: 75rem; +.md-sidebar--secondary{ + visibility: hidden !important; + width: 0; +} +.md-grid { + max-width: 75rem; } \ No newline at end of file diff --git a/teamreport/architecture_intro/index.html b/teamreport/architecture_intro/index.html old mode 100644 new mode 100755 index 6113c9c..c3f957b --- a/teamreport/architecture_intro/index.html +++ b/teamreport/architecture_intro/index.html @@ -773,9 +773,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1089,7 +1136,7 @@ -

    Architecture

    +

    Architecture

    An appropriate architecture is the base of each successful software project. It enables a group of developers to work at the same project and to organize the solutions for their particular research questions. @@ -1105,7 +1152,7 @@ implementation of different parts of the architecture. A detailed description of the principles we used can also be found in [@Mellmann2010b].

    -

    NaoSMAL

    +

    NaoSMAL

    In our architecture we don't use the NAOqi API directly but use our own so-called NaoSMAL (Nao Shared Memory Abstraction Layer) NAOqi-module. This calls the DCM API of NAOqi @@ -1116,7 +1163,7 @@

    NaoSMAL

    will continue to run and ensures the robot will go in a stable position), faster redeploy of our binary without restarting NAOqi and a faster compilation since we have fewer dependencies.

    -

    Platform Interface

    +

    Platform Interface

    In order to integrate different platforms, our project is divided into two parts: a platform independent one and platform specific one. The platform specific part contains code which is applied to the particular @@ -1129,7 +1176,7 @@

    Platform Interface

    Platform Interface is responsible for data transfer and execution of
 the Cognition and Motion
 processes.

    -

    Module framework

    +

    Module framework

    Our module framework is based on a blackboard architecture. The framework consists of the following basic components:

    Representation: objects carrying data and simple manipulation functions

    @@ -1147,7 +1194,7 @@

    Module framework

    functionality and provide the same representations. You can configure which of the modules should be executed at runtime and it is also possible to dynamically change this for debugging purposes.

    -

    Example module

    +

    Example module

    A module is a C++ class which inherits a base class which is created with the help of some macros defining the interface of the the module.

    #ifndef _MyModule_H
    @@ -1225,7 +1272,7 @@ 

    Example module

    REGISTER_MODULE(MyModule);
     

    The order of registration defines the order of execution of the modules.

    -

    Serialization

    +

    Serialization

    As described in the Section 2.3 the core of the program is structured in modules which are responsible for different tasks like image processing, @@ -1405,7 +1452,7 @@

    Serialization

    - + diff --git a/teamreport/behavior/index.html b/teamreport/behavior/index.html old mode 100644 new mode 100755 index 0a06045..6c904c8 --- a/teamreport/behavior/index.html +++ b/teamreport/behavior/index.html @@ -753,9 +753,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1049,7 +1096,7 @@ -

    Behavior

    +

    Behavior

    The Extensible Agent Behavior Specification Language | XABSL cf. [@xabsl_web] is a behavior description language for autonomous agents based on hierarchical finite state machines. XABSL is originally @@ -1082,7 +1129,7 @@ Figure 7.2{reference-type="ref" reference="fig:xabsleditor"} (right) illustrates the execution tree of the behavior shown within the visualizer.

    -

    Team Strategy

    +

    Team Strategy

    Our team strategy is based on the notion of the active and passive behavior. Active behavior defines for each robot what is to do if the robot is at the ball, while passive behavior describes what is to do if @@ -1132,7 +1179,7 @@

    Team Strategy

    assignment of ready positions to the players. Dashed arrows illustrate the transitions from passive kickoff positions to the corresponding passive positions.

    -

    Role Change

    +

    Role Change

    The task of the role decision mechanism is to determine who is striker and who's passive. In general there should only be one robot which acts as striker. This year we loosened the "only one striker" condition in @@ -1245,7 +1292,7 @@

    Role Change

    often kick the "real" ball, even if the first striker sees a wrong ball.

    As last safeguard, if there's only one player left, this player becomes striker.

    -

    Teamball

    +

    Teamball

    The teamball represents a hypothesis of the real ball, based on the ball observations of each player and consolidated to a single position on the field.

    The teamball is then used to adjust the search behavior of passive robots and the goalie. In the past years, when the robot was passive and searched for the ball, the robot turned in one direction (randomly) and moves his head to find the ball. With the teamball the robot changes its behavior. Before the robot starts a new search rotation he turns to the teamball and looks in that direction in order to find the ball. If he doesn't see the ball, he continues to turn in the same turning direction as before, until a full round is completed. Before starting a new round, the robot takes again a look at the teamball and re-starts the described behavior. The ball search continues until the robot found the ball or another game event occurs.

    In 2017 we reintroduced the teamball in order to improve our ball search behavior. Therefor each player communicated its ball model and collected the global ball position of its teammates over a certain amount of time. In each cognition cycle the median in x and y position of all collected balls where determined and used as teamball in the above described behavior. If there wasn't an update for some time, the teamball was invalidated and not used anymore.

    @@ -1329,7 +1376,7 @@

    Teamball

    - + diff --git a/teamreport/bibliography/index.html b/teamreport/bibliography/index.html old mode 100644 new mode 100755 index 84cc3d3..e0b3727 --- a/teamreport/bibliography/index.html +++ b/teamreport/bibliography/index.html @@ -701,9 +701,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1047,7 +1094,7 @@

    Bibliography

    - + diff --git a/teamreport/debugging/index.html b/teamreport/debugging/index.html old mode 100644 new mode 100755 index b48553f..c87c804 --- a/teamreport/debugging/index.html +++ b/teamreport/debugging/index.html @@ -510,19 +510,6 @@ NaoSCP - -
  • @@ -530,46 +517,6 @@ USB flash drive - -
  • @@ -590,19 +537,6 @@ Logfile Format - - @@ -984,9 +918,35 @@ + +
  • + + + + + + + + + + +
  • + + + +
  • - - Handling the Robot + + Working with logfiles + +
  • + + + + + + + + + +
  • + + Sound
  • @@ -1390,19 +1371,6 @@ NaoSCP - -
  • @@ -1410,46 +1378,6 @@ USB flash drive - -
  • @@ -1470,19 +1398,6 @@ Logfile Format - - @@ -1511,7 +1426,7 @@ -

    Debugging and Tools

    +

    Debugging and Tools

    In order to develop a complex software for a mobile robot, we require means for high-level debugging and monitoring (e. g., visualization of the robot's posture or its position on the field). Since we do not @@ -1522,7 +1437,7 @@ visualization software like RobotControl, as shown in Figure 3.1{reference-type="ref" reference="fig:robotcontrol"}.

    -

    Concepts

    +

    Concepts

    Some of the ideas were evolved from the GT-Architecture [@2007:RoboCup-TDP-GermanTeam]. The following list illustrates some of the debug concepts:

    @@ -1562,7 +1477,7 @@

    Concepts

    reference="fig:robotcontrol"} illustrates visualizations of the debug concepts. In particular a field view, 3D view, behavior tree, plot and the table of debug requests are shown.

    -

    RobotControl

    +

    RobotControl

    The various debugging possibilities are organized in different dialogs. In this year we started to update the UI by switching to JavaFX for some dialogs. The following list consists of our most used RobotControl @@ -1579,7 +1494,7 @@

    RobotControl

    -

    Behavior Viewer

    +

    Behavior Viewer

    @@ -1590,7 +1505,7 @@

    Behavior Viewer

    -

    Debug Requests

    +

    Debug Requests

    @@ -1601,42 +1516,42 @@

    Debug Requests

    -

    Field Viewer

    +

    Field Viewer

    image

    There are views for different field sizes and a local view. Certain debug requests draw on these views. For example, you could draw the robots' positions on the field by activating the corresponding debug request.

    -

    Image Viewer

    +

    Image Viewer

    image

    Can show the top and bottom images. There are debug requests that draw on the camera images, if they are active.

    -

    Logfile Recorder

    +

    Logfile Recorder

    image

    Records a log file on a robot with manually selected representations.

    -

    Modify

    +

    Modify

    image

    The Modify macro allows changing values of variables declared within this macro at runtime.

    -

    Module Configuration Viewer

    +

    Module Configuration Viewer

    image

    Shows which modules are currently (de-)activated. Also indicates, which other modules are required (left) and provided (right) by each module.

    -

    Parameter Panel

    +

    Parameter Panel

    image

    Shows parameters defined in our configuration files. It is possible to change the values at runtime. The variables must be registered as parameters in the code.

    -

    Plot 2D

    +

    Plot 2D

    image

    Shows plots activated by plot debug requests.

    -

    Representation Inspector

    +

    Representation Inspector

    image

    Shows the data that is written to the blackboard by each representation.

    -

    Stopwatch Viewer

    +

    Stopwatch Viewer

    image

    Shows the execution time for each module.

    -

    Team Communication Viewer

    +

    Team Communication Viewer

    image

    Shows all connected robots and possible all of their provided status information via TeamComm (e.g. ip address, battery charge, temperature, @@ -1649,20 +1564,20 @@

    Team Communication Viewer

    reference="rc:fieldviewer"}. It's also useful for debugging the team communication to get a general overview of the role decision and its transitions. This year, the dialog was re-implemented using JavaFX.

    -

    Team Communication Logviewer

    +

    Team Communication Logviewer

    image

    The Team Communication Logviewer allows to re-play team communication logfiles previously recorded with the Team Communication Viewer. It's also able to re-play logs from the GameController and export them as JSON.

    -

    Simspark

    +

    Simspark

    image

    This dialog shows the state of the connected simspark instance. It also provides some predefined commands and a textfield for user-defined commands to send to simspark. Furthermore it also provides the teamcommunication of the simulated robots for other dialogs in RobotControl (e.g. Team Communication Viewer).

    -

    External Tools

    +

    External Tools

    image

    Some "external tools" where modified in order to load them into RobotControl via reflection. Its convenient to have all needed tools in @@ -1671,13 +1586,13 @@

    External Tools

    NaoSCP), for the setup & deployment of a robot, and a modified version of RoboViz, for visualization of a SimSpark simulation, integrated in RobotControl.

    -

    Robot Setup and Deployment

    +

    Robot Setup and Deployment

    In this section we give an overview over our deployment and robot setup procedure. Changing the configuration of the robot, e.g., deployment of the binary, network setup etc., is a critical point during both, development and competition. To minimize the chance of error we developed a set of procedures and tools.

    -

    Deployment Procedure

    +

    Deployment Procedure

    Currently we have two different deployment procedures:

    • @@ -1710,7 +1625,7 @@

      Deployment Procedure

      different sounds. This way the state of the robot and the progress of the deployment can be easily monitored, this is especially helpful when setting up a whole team before a game.

      -

      NaoSCP

      +

      NaoSCP

      NaoSCP is a setup and deployment tool. It primarily has three tasks: (1) initialize a new robot, e.g., copy libraries and scripts, (2) set the network configuration and (3) deploy naoth binary and configurations @@ -1728,7 +1643,7 @@

      NaoSCP

      bottom tool bar trigger particular deployment and setup actions like writing the network configuration to the robot or copying a new binary to a deployment USB flash drive.

      -

      Usage Remarks

      +

      Usage Remarks

      The following describes the particular components of the NaoSCP user interface as illustrated in the Figure 3.2.

      @@ -1762,7 +1677,7 @@

      Usage Remarks

      binaries and for automatic mounting and running of USB flash drives. Additionally the network is configured and the binary is deployed like previously described;

      -

      USB flash drive

      +

      USB flash drive

      A deployment flash drive can be created manually or (as described above) via the NaoSCP tool. As the minimum requirement there should be an executable shell script named \"'startBrainwashing.sh\"'. When the flash @@ -1773,13 +1688,13 @@

      USB flash drive

      deployment procedure are indicated by different sounds. This way is preferred when deploying software on several robots, e.g., setting up a team before a game.

      -

      Flash drive variants

      +

      Flash drive variants

      Currently we have different kinds of USB flash drives to accomplish different kinds of deployment or collection tasks.

      -
      Deploying
      +
      Deploying

      As described above the deployment flash drive is used to copy new binaries and/or configuration files to the robot.

      -
      Collecting log files
      +
      Collecting log files

      The \"'collect log files\"' flash drive is used to copy the recorded log file from the robot. This is primarily used after games to be able to analyze possible misbehavior of the robot. Otherwise, if the robot is @@ -1790,11 +1705,11 @@

      Collecting log files
      of the robot/binary of the log file and giving a quick overview on later log file examination. Finally we're collecting all \"'heard\"' whistles for later fine-tuning of our whistledetector.

      -
      Setting network
      +
      Setting network

      The network flash drive is used to set the network configuration of the robot (like IP address, etc.). Especially for the Wi-Fi configuration this method is useful to quickly set up all need robots before a game.

      -

      Logging

      +

      Logging

      Analysis and evaluation of the algorithms running on the robot is a big challenge.

      Our team has a long history in logging (our logs from 2010 are still @@ -1841,7 +1756,7 @@

      Logging

      iamge Synchronization Interface for individual log files and videos of a game.

      -

      Logfile Format

      +

      Logfile Format

      As described in the Section 2.3{reference-type="ref" reference="s:module_framework"} the state of the robot is stored in @@ -1867,7 +1782,7 @@

      Logfile Format

      2 CameraMatrix ... ...
      -
      Annotate and Evaluate Logs
      +
      Annotate and Evaluate Logs

      Annotation interface was created and used to annotate different kick actions executed by our robots in the videos recorded during the games at the RoboCup in 2015. The kick events were automatically extracted @@ -1890,7 +1805,7 @@

      Annotate and Evaluate Logs
      estimation of its position, ball model and obstacles. On the left are three categories of binary labels describing the quality of the action.

      -

      Simulation

      +

      Simulation

      As a common experience, there are big gaps between simulation and reality in robotics, especially with regards to basic physics with consequences for low level skills in motion and perception. There are @@ -2020,7 +1935,7 @@

      Simulation

      - + diff --git a/teamreport/index.html b/teamreport/index.html old mode 100644 new mode 100755 index d56eb04..fb17240 --- a/teamreport/index.html +++ b/teamreport/index.html @@ -708,9 +708,35 @@ + +
    • + + + + + + + + + + +
    • + + + +
    • - - Handling the Robot + + Working with logfiles + +
    • + + + + + + + + + +
    • + + Sound
    • @@ -975,7 +1022,7 @@ -

      Welcome

      +

      Welcome

      Note

      This teamreport is only a high level overview of the team and software architecture used for the Nao's during RoboCup. @@ -1081,7 +1128,7 @@

      - + diff --git a/teamreport/introduction/index.html b/teamreport/introduction/index.html old mode 100644 new mode 100755 index ca1697a..4b58ce1 --- a/teamreport/introduction/index.html +++ b/teamreport/introduction/index.html @@ -746,9 +746,35 @@ + +
    • + + + + + + + + + + +
    • + + + +
    • - - Handling the Robot + + Working with logfiles + +
    • + + + + + + + + + +
    • + + Sound
    • @@ -1035,7 +1082,7 @@ -

      Introduction

      +

      Introduction

      This document gives an overview over the current state of the software base developed by the Berlin United - Nao Team Humboldt to control a humanoid robot in the context of the robot soccer competition RoboCup. @@ -1044,7 +1091,7 @@ links:

      Docu: https://github.com/BerlinUnited/NaoTH/wiki

      Code: https://github.com/BerlinUnited/NaoTH

      -

      Team

      +

      Team

      The research group NaoTH is part of the research lab for Adaptive Systems at Humboldt-Universität zu Berlin headed by Prof. Verena Hafner. At the current state the core team consists of about 12 students of @@ -1077,7 +1124,7 @@

      Team

      achieved 2nd place in both years. In 2017 NaoTH won the 2nd place in the challenger shield and in 2018 reached the quarterfinals in the champions cup of the main competition.

      -

      Summary

      +

      Summary

      Our general research fields include agent-oriented techniques and Machine Learning with applications in Cognitive Robotics. Currently, we mainly focus on the following topics:

      @@ -1179,7 +1226,7 @@

      Summary

      - + diff --git a/teamreport/modeling/index.html b/teamreport/modeling/index.html old mode 100644 new mode 100755 index 6d1f59b..5131f02 --- a/teamreport/modeling/index.html +++ b/teamreport/modeling/index.html @@ -448,33 +448,6 @@ The algorithm - -
    • @@ -849,9 +822,35 @@ + +
    • + + + + + + + + + + +
    • + + + +
    • - - Handling the Robot + + Working with logfiles + +
    • + + + + + + + + + +
    • + + Sound
    • @@ -1165,33 +1185,6 @@ The algorithm - -
    • @@ -1241,10 +1234,10 @@ -

      Modeling

      +

      Modeling

      In order to realize a complex and successful cooperative behavior it is necessary to have a appropriate model of the surrounding world. In our approach we focus on local models of particular aspect

      -

      Camera Matrix Calibration

      +

      Camera Matrix Calibration

      Camera matrix is the coordinate transformation of a camera in relation to the local coordinate system of the robot. The camera matrix is used to establish the relation between objects detected in the image and their position relative to the robot. For instance, the center of the detected @@ -1279,7 +1272,7 @@

      Camera Matrix Calibration

      -

      Probabilistic Compass

      +

      Probabilistic Compass

      We estimate the orientation of the robot on the field based on the detected line edgels utilizing the fact, that all field lines are either orthogonal or parallel to the field. Based on the orientations of the particular projected edgels it is possible to estimate the rotation of the robot up to the \(\pi\) symmetry.

      @@ -1311,7 +1304,7 @@

      Probabilistic Compass

      -

      Multi-Hypothesis-Extended-Kalman-Filter Ball Model

      +

      Multi-Hypothesis-Extended-Kalman-Filter Ball Model

      Although there is usually only one ball involved in a RoboCup game, there are several good reasons for being able to represent and track several ball hypotheses at the same time. The main reason however are the false-positives. Due to the change to the new black and white ball as described in the @@ -1333,7 +1326,7 @@

      Multi-Hypothesis-Ext Each measurement is assigned at most to one hypothesis and vice versa. If no matching hypothesis is found a new Kalman filter is created which will represent a new hypothesis. The final ball model for the behavior is the hypothesis which is the closest to the robot and is updated frequently.

      -

      Multi-Hypothesis Goal Model (MHGM)

      +

      Multi-Hypothesis Goal Model (MHGM)

      In this section we describe a multi-hypothesis approach for modeling a soccer goal within the RoboCup context.

      The whole goal is rarely observed and we assume the image processing to detect separate goal posts. So we represent the goal by its corresponding posts. To reduce complexity of the shape of uncertainty we model the separate goal posts in local robot coordinates. The ambiguous goal posts are tracked by a multi-hypothesis particle filter. The actual goal model is extracted from the set of post hypotheses.

      The joint uncertainty can be subdivided into noise, false detections and ambiguity. Each of these components is treated separately in our approach.

      @@ -1344,14 +1337,14 @@

      Multi-Hypothesis Goal Model (MHGM)

      More detailed description of the algorithm as well as the experimental results can be found in [@HSR-ScheunemannMellmann-14].

      image

      -

      Simulation Based Selection of Actions

      +

      Simulation Based Selection of Actions

      The robot is capable of different kicks and should given a particular situation, e.g., the robot's position, the position of the ball and obstacles, determine which kick is the optimal kick to perform in this situation. A naive geometric solution which selects a kick based on the robot's direction towards the opponent goal does not account for uncertainty of the actual execution of the kick. Furthermore the distance of the kick is not considered in this approach. An improved kick selection algorithm was developed which is based on a forward simulation of the actions. Thereby each possible kick is simulated and the best kick is chosen based on the outcome, i.e., the position of the ball after the kick. Uncertainty and additional constraints can be integrated in a straight forward way.

      -

      Definition of an Action

      +

      Definition of an Action

      An Action is a set of parameters which describe a probability distribution of the possible ball location after the execution of a kick. Currently there are 4 kicks, two forward kicks and two sidekicks @@ -1368,7 +1361,7 @@

      Definition of an Action

      -

      Determine the parameters

      +

      Determine the parameters

      To calculate the initial velocity of a kick the distance the ball rolled after a kick was measured in an experiment. By using the stopping distance formula the initial velocity of one kick can be calculated by

      @@ -1407,17 +1400,17 @@

      Determine the parameters

      a hypothetical kick. The end points are calculated by drawing a sample from both the angle and kick speed distribution and plugging these values in the last equation. For details, refer to the next section.

      -

      The algorithm

      +

      The algorithm

      The whole simulation is divided into three steps: simulate the consequences, evaluate the consequences and decide the best action.

      -

      Simulating the consequences

      +

      Simulating the consequences

      Each action is simulated a fixed number of times. The resulting ball position of one simulation for an action is referred to as particle. The positions of the particles are calculated according to the parameters of the action with applied standard deviations. The algorithm checks for possible collisions with the goal box and in case there are any the kick distance gets shortened appropriately. Collisions with the obstacle model are handled the same way.

      -

      Evaluation

      +

      Evaluation

      Each particle is sorted in different categories based on where on the field it is, e.g., inside the field, inside the own Goal, outside the field. If a particle lands outside the field it is sorted in the @@ -1425,7 +1418,7 @@

      Evaluation

      ground line. This is repeated for every particle of every Action that is defined. The algorithm then counts the number of particles of each action that is either inside the field or inside the opponent goal.

      -

      Decision

      +

      Decision

      If an action has less than the defined threshold of particles either inside the field or inside the opponent goal the action is discarded. For the remaining actions the one with the most particles inside the @@ -1454,7 +1447,7 @@

      Decision

      -

      Potential field

      +

      Potential field

      A potential field assigns a value to each position of the ball inside the field. The values reflect the static strategy of the game and are used to compare possible ball positions in terms of their strategic @@ -1497,7 +1490,7 @@

      Potential field

      @RCMellmannSchlotterBlum16. A continuation of this work was presented at the HUMANOIDS 2017 RoboCup Workshop @HSR-MellmannSchlotter-17.

      -

      Arm Collision Detection

      +

      Arm Collision Detection

      In the current implementation of the stand and walk motions the arms are used for stability and energy efficiency. During the stand motion the arms are kept down along the sides to minimize energy consumption, and are moved back and forth during the walk to balance the rotational forces and stabilize the walk. On the downside, these arm @@ -1540,7 +1533,7 @@

      Arm Collision Detection

      expected error which might occur with out a collision. The accuracy can be improved with a dynamic threshold. We observed a correlation between the position of the joint the average absolute error which. Thus, a threshold depending on the position of the joint might improve the results significantly.

      -

      Time synchronization

      +

      Time synchronization

      The robots communicate via wifi with the gamecontroller and with each other. The communicated information are not only used for debugging & visualization in RobotControl, their're also used in the behavior and @@ -1592,7 +1585,7 @@

      Time synchronization

      old a seen ball of its teammates really is, but future development should use the feature more and thus make the communicated information more reliable and the thereon based calculations more accurate.

      -

      IMU

      +

      IMU

      A Unscented-Kalman-Filter is used to combine the measurements of the accelerometer and gyrometer to a orientation and a gravity adjusted acceleration in the inertial frame. Quaternions are used in calculations @@ -1677,7 +1670,7 @@

      IMU

      - + diff --git a/teamreport/motion/index.html b/teamreport/motion/index.html old mode 100644 new mode 100755 index d3602d4..fc1e047 --- a/teamreport/motion/index.html +++ b/teamreport/motion/index.html @@ -780,9 +780,35 @@ + +
    • + + + + + + + + + + +
    • + + + +
    • - - Handling the Robot + + Working with logfiles + +
    • + + + + + + + + + +
    • + + Sound
    • @@ -1103,7 +1150,7 @@ -

      Motion Control

      +

      Motion Control

      The performance of a soccer robot is highly dependent on its motion ability. Together with the ability to walk, the kicking motion is one of the most important motions in a soccer game. However, at the current @@ -1131,7 +1178,7 @@ Problems arise from sensor noise and delays within the feedback loop. As a correlated project we also investigate the paradigm of local control loops, e.g. we extended the Nao with additional sensors.

      -

      Walk

      +

      Walk

      The algorithm we use to accomplish a walking motion can be subdivided into four components: the path planner, the step planner, the preview controller and stabilization.

      @@ -1154,7 +1201,7 @@

      Walk

      -

      Path Planner

      +

      Path Planner

      The path planner is intended to calculate a collision free and optimal path from the robot towards a goal. Currently that intention is not fulfilled. Instead it is used as a bridge between the behavior @@ -1180,7 +1227,7 @@

      Path Planner

      control over actual steps the path planner implements a simple mechanism to ensure that a desired step is requested until actual execution of the step, unless the step becomes obsolete in the process.

      -

      Step Planner

      +

      Step Planner

      The step planner calculates the next 2D positions of the feet based on the walk request inside the motion request.

      The walk request and the current pose of the moving foot are transformed @@ -1205,7 +1252,7 @@

      Step Planner

      Independent of the requested steps the step planner might insert zero steps for increasing the stability of the walk. A zero step is a step in which no foot is moved.

      -

      Preview Control

      +

      Preview Control

      The Preview Controller calculates the trajectory for the COM based on planed ZMPs. For estimating a stable trajectory for the COM we assume a linear inverted pendulum model with constant height. In each planning @@ -1220,7 +1267,7 @@

      Preview Control

      parameters of the preview controller and are pre-calculated. The next target COM \(x_{k+1}\) can be calculated using a linear motion model: \(\(x_{k+1} = Ax_k + ub\)\)

      -

      Stabilization

      +

      Stabilization

      The simplified model can easily be affected by disturbances in the environment. Therefore a closed loop stabilization is required.

      Different control techniques are used during step creation and execution @@ -1239,7 +1286,7 @@

      Stabilization

      the whole time. And a third controller adapts the ankles according to the current orientation of the robot's body and its change in orientation.

      -

      Energy Efficient Stand

      +

      Energy Efficient Stand

      During games we have to deal with two problems regarding the hardware of the robots. The first problem is the increasing temperature of the joints, which affects the stability of walking. The second problem is @@ -1350,7 +1397,7 @@

      Energy Efficient Stand

      - + diff --git a/teamreport/vision/index.html b/teamreport/vision/index.html old mode 100644 new mode 100755 index 30f0f38..1130980 --- a/teamreport/vision/index.html +++ b/teamreport/vision/index.html @@ -441,33 +441,6 @@ Candidate Search -- Perspective Key Points Detection - -
    • @@ -475,26 +448,6 @@ Classification - -
    • @@ -862,9 +815,35 @@ + +
    • + + + + + + + + + + +
    • + + + +
    • - - Handling the Robot + + Working with logfiles + +
    • + + + + + + + + + +
    • + + Sound
    • @@ -1185,33 +1185,6 @@ Candidate Search -- Perspective Key Points Detection - -
    • @@ -1219,26 +1192,6 @@ Classification - -
    • @@ -1267,7 +1220,7 @@ -

      Visual Perception

      +

      Visual Perception

      Visual perception is the primary way for the NAO robot of perceiving its environment. To reduce computational complexity our vision is based on a reliable field color detection. This color information is used to estimate the boundaries of the visible field region in the image. Which is done while scanning for @@ -1289,7 +1242,7 @@ arrow from $R$ to $A$ means $R$ is required by $A$. -

      Green Detection

      +

      Green Detection

      This section describes a new approach to classify the field color which has been used since late 2015. For the first time this approach has been presented in November 2015 at the RoHOW workshop in Hamburg, Germany. This constitutes the first step in the attempt for a automatic field color detection. Thereby we analyze @@ -1402,7 +1355,7 @@

      Green Detection

      shifts might be the way for a fully automatic green color classifier which would be able to cover the variety of the shades to enable a robot to play outside.

      -

      ScanLineEdgelDetector

      +

      ScanLineEdgelDetector

      @@ -1421,7 +1374,7 @@

      ScanLineEdgelDetector

      3x3-Sobel-Filters (horizontal and vertical) the orientation of the line. With the result of the field color classification we detect along every scanline a point, which marks the border of the field.

      -

      FieldDetector

      +

      FieldDetector

      With the field border points, estimated with the ScanLineEdgelDetector, we calculate for each image a polygon, which is representing the border of the field in the image.

      @@ -1433,7 +1386,7 @@

      FieldDetector

      -

      LineGraphProvider

      +

      LineGraphProvider

      This module clusters neighbouring line border points, detected by ScanLineEdgelDetector.

      @@ -1443,7 +1396,7 @@

      LineGraphProvider

      -

      RansacLineDetector

      +

      RansacLineDetector

      This module detects lines on the directed points generated by the LineGraphProvider using the Random sample consensus (RANSAC) method. Our implementation can be summarized by the following 4 steps.

      @@ -1471,7 +1424,7 @@

      RansacLineDetector

      In order to detect the remaining field lines we repeat this procedure on the remaining outliers until no lines are found.

      -

      GoalFeatureDetector

      +

      GoalFeatureDetector

      This module is the first step of the goal post detection procedure. To detect the goal posts we scan along the horizontal scan lines parallel to the artificial horizon estimated in ArtificialHorizonProvider. @@ -1496,7 +1449,7 @@

      GoalFeatureDetector

      -

      GoalDetector

      +

      GoalDetector

      The GoalDetector clusters the features found by the GoalFeatureDetector. The main idea here is, that features, which represent a goal post, must be located underneath of each other. We @@ -1535,7 +1488,7 @@

      GoalDetector

      evaluation of the candidate clusters. Although there seem to be a considerable amount of false features, both posts of the goal are detected correctly.

      -

      Black&White Ball Detection

      +

      Black&White Ball Detection

      In 2015 the standard ball used in competitions changed to a black&white foam ball as illustrated in Figure 4.13{reference-type="ref" @@ -1555,7 +1508,7 @@

      Black&White Ball Detection

      -

      Candidate Search -- Perspective Key Points Detection

      +

      Candidate Search -- Perspective Key Points Detection

      Properties of the ball as an object that can be assumed as known include

      • @@ -1603,7 +1556,7 @@

        Candidate Search -- Perspective Key Points Detection

      • -
        Representation:
        +
        Representation:

        In our case we define a ball candidate (more general a key point) as a square region in the image which is likely to contain a ball. Such a key point \(c = (x,y,r)\) can be described by its position in the image @@ -1612,7 +1565,7 @@

        Representation:
        the circle. This leads to a vast number of possible candidates in a single image and a necessity for an efficient heuristic algorithm to find the most likely ones.

        -
        Measure:
        +
        Measure:

        Intuitively described, a good key point is much brighter inside than on its outer border. For a key point \(c = (x,y,r)\) we define its intensity value \(I(c)\) by

        @@ -1627,7 +1580,7 @@
        Measure:
        images. Figure 4.17{reference-type="ref" reference="fig:bw-patch-function"} (left) illustrates the measure function for the valid pixels of the image.

        -
        Finding the local maxima:
        +
        Finding the local maxima:

        To save resources the search is performed only within the estimated field region (cf. Section 4.3{reference-type="ref" reference="s:FieldDetector"}). For a given point \(p = (i,j)\) in image we @@ -1675,7 +1628,7 @@

        Finding the local maxima:
        -

        Classification

        +

        Classification

        In the previous section we discussed how the number of possible ball candidates can be efficiently reduced. At the current state we consider about 5 candidates per image. In general these candidates look very ball @@ -1686,7 +1639,7 @@

        Classification

        collection of the sample data and give some brief remarks about our experience with the OpenCV Cascade Classifier which we used during the RoboCup competition in 2016.

        -

        Sample Data Generation

        +

        Sample Data Generation

        Collecting sample data basically involves two steps: collecting images from game situations and labeling the ones containing the ball. This can be a very tedious and time consuming task. To simplify and accelerate @@ -1713,7 +1666,7 @@

        Sample Data Generation

        -

        Classification with Convolutional Neural Networks

        +

        Classification with Convolutional Neural Networks

        In the last step the generated ball candidates (patches) are classified. At the current point we distinguish two classes: ball and noball. As a classifier we use a Convolutional Neural Network (CNN). The weights of @@ -1732,7 +1685,7 @@

        Classification with C -

        Acknowledgment

        +

        Acknowledgment

        Some of the most important parts of this ball detection procedure were inspired by very fruitful discussions with the RoboCup community. At this point we would like to thank in particular the team NaoDevils for @@ -1818,7 +1771,7 @@

        Acknowledgment

        - +