diff --git a/.travis.yml b/.travis.yml index eadbf5a9..91a42f40 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ env: - IMAGE_VERSION=${TRAVIS_TAG:-${TRAVIS_COMMIT:0:7}} - IMAGE_NAME="$(basename -s '.git' ${TARGET_REPO})_${IMAGE_VERSION}.img" git: - depth: 25 + depth: 1 jobs: fast_finish: true include: @@ -95,7 +95,13 @@ jobs: - ./check_unused_assets.py - gitbook install - gitbook build - - gitbook pdf ./ _book/clover.pdf + - for i in 1 2 3 4; do gitbook pdf ./ _book/clover.pdf && break || sleep 1; done + - sudo apt-get install ghostscript + - gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_ru_compressed.pdf _book/clover_ru.pdf + - gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_en_compressed.pdf _book/clover_en.pdf + - rm _book/clover_ru.pdf && mv _book/clover_ru_compressed.pdf _book/clover_ru.pdf + - rm _book/clover_en.pdf && mv _book/clover_en_compressed.pdf _book/clover_en.pdf + - ls -lah _book/clover*.pdf deploy: provider: pages local_dir: _book diff --git a/README.md b/README.md index b2a71ac2..679dcf83 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # cloverπŸ€: create autonomous drones easily -COEX Clover Drone +COEX Clover Drone Clover is an open source [ROS](https://www.ros.org)-based framework, providing user-friendly tools to control [PX4](https://px4.io)-powered drones. Clover is available as a ROS package, but is shipped mainly as a preconfigured image for Raspberry Pi. Once you've installed Raspberry Pi on your drone and flashed the image to its microSD card, taking the drone up in the air is a matter of minutes. diff --git a/aruco_pose/CHANGELOG.rst b/aruco_pose/CHANGELOG.rst new file mode 100644 index 00000000..576224ce --- /dev/null +++ b/aruco_pose/CHANGELOG.rst @@ -0,0 +1,8 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package aruco_pose +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.21.1 (2020-11-17) +------------------- +* First release of aruco_pose package to ROS +* Contributors: Alamoris, Alexey Rogachevskiy, Arthur Golubtsov, Ilya Petrov, Oleg Kalachev diff --git a/aruco_pose/cfg/DetectorParams.cfg b/aruco_pose/cfg/DetectorParams.cfg index c96c942b..5788e9e9 100755 --- a/aruco_pose/cfg/DetectorParams.cfg +++ b/aruco_pose/cfg/DetectorParams.cfg @@ -8,6 +8,8 @@ p = cv2.aruco.DetectorParameters_create() gen = ParameterGenerator() +gen.add("enabled", bool_t, 0, "if detection enabled", True) + gen.add("adaptiveThreshConstant", double_t, 0, "Constant for adaptive thresholding before finding contours", p.adaptiveThreshConstant, 0, 100) diff --git a/aruco_pose/package.xml b/aruco_pose/package.xml index a525bc4d..43f08abe 100644 --- a/aruco_pose/package.xml +++ b/aruco_pose/package.xml @@ -1,7 +1,7 @@ aruco_pose - 0.0.1 + 0.21.1 Positioning with ArUco markers Oleg Kalachev diff --git a/aruco_pose/src/aruco_detect.cpp b/aruco_pose/src/aruco_detect.cpp index 5dd1342a..ae945876 100644 --- a/aruco_pose/src/aruco_detect.cpp +++ b/aruco_pose/src/aruco_detect.cpp @@ -62,6 +62,7 @@ private: std::unique_ptr tf_buffer_; std::unique_ptr tf_listener_; std::shared_ptr> dyn_srv_; + bool enabled_ = true; cv::Ptr dictionary_; cv::Ptr parameters_; image_transport::Publisher debug_pub_; @@ -125,6 +126,8 @@ public: private: void imageCallback(const sensor_msgs::ImageConstPtr& msg, const sensor_msgs::CameraInfoConstPtr &cinfo) { + if (!enabled_) return; + Mat image = cv_bridge::toCvShare(msg, "bgr8")->image; vector ids; @@ -353,6 +356,7 @@ private: void paramCallback(aruco_pose::DetectorConfig &config, uint32_t level) { + enabled_ = config.enabled; parameters_->adaptiveThreshConstant = config.adaptiveThreshConstant; parameters_->adaptiveThreshWinSizeMin = config.adaptiveThreshWinSizeMin; parameters_->adaptiveThreshWinSizeMax = config.adaptiveThreshWinSizeMax; diff --git a/builder/assets/examples/flight_marker.py b/builder/assets/examples/flight_marker.py index 5102e4b5..51ac78a4 100644 --- a/builder/assets/examples/flight_marker.py +++ b/builder/assets/examples/flight_marker.py @@ -1,4 +1,4 @@ -# Information: https://clover.coex.tech/en/aruco.html +# Information: https://clover.coex.tech/aruco import rospy from clover import srv diff --git a/builder/assets/examples/leds.py b/builder/assets/examples/leds.py index 7c10dff5..6ae64373 100644 --- a/builder/assets/examples/leds.py +++ b/builder/assets/examples/leds.py @@ -1,4 +1,4 @@ -# Information: https://clover.coex.tech/en/leds.html +# Information: https://clover.coex.tech/led import rospy from clover.srv import SetLEDEffect diff --git a/builder/image-software.sh b/builder/image-software.sh index 5499f510..2a58f090 100755 --- a/builder/image-software.sh +++ b/builder/image-software.sh @@ -121,9 +121,10 @@ sed -i "s/updates_available//" /usr/share/byobu/status/status echo_stamp "Installing pip" curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py +curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip2.py python3 get-pip.py -python get-pip.py -rm get-pip.py +python get-pip2.py +rm get-pip.py get-pip2.py #my_travis_retry pip install --upgrade pip #my_travis_retry pip3 install --upgrade pip diff --git a/builder/standalone-install.sh b/builder/standalone-install.sh index 08aef8d5..afb49314 100755 --- a/builder/standalone-install.sh +++ b/builder/standalone-install.sh @@ -6,13 +6,7 @@ set -e apt update apt install -y curl curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py -if [ "x${ROS_PYTHON_VERSION}" = "x3" ]; then - PYTHON=python3 -else - PYTHON=python -fi - -${PYTHON} ./get-pip.py +python3 ./get-pip.py # Step 1.5: Add deb.coex.tech to apt curl http://deb.coex.tech/aptly_repo_signing.key 2> /dev/null | apt-key add - diff --git a/builder/test/tests.py b/builder/test/tests.py index 647550ad..319bdc64 100755 --- a/builder/test/tests.py +++ b/builder/test/tests.py @@ -25,7 +25,7 @@ import pymavlink from pymavlink import mavutil import rpi_ws281x import pigpio -from espeak import espeak +# from espeak import espeak from pyzbar import pyzbar print(cv2.getBuildInformation()) diff --git a/builder/test/tests.sh b/builder/test/tests.sh index f9f28128..063bcb43 100755 --- a/builder/test/tests.sh +++ b/builder/test/tests.sh @@ -32,7 +32,7 @@ monkey --version pigpiod -v i2cdetect -V butterfly -h -espeak --version +# espeak --version mjpg_streamer --version # ros stuff diff --git a/check_unused_assets.py b/check_unused_assets.py index 80a04a0c..b5360649 100755 --- a/check_unused_assets.py +++ b/check_unused_assets.py @@ -4,7 +4,9 @@ import os import sys import subprocess -EXCLUDE = ('clever4-front-white.png', '.DS_Store', 'clever4-front-black-large.png') +EXCLUDE = ('clever4-front-white.png', 'clever4-front-white-large.png', '.DS_Store', + 'clever4-front-black-large.png','clover42-black.png') + code = 0 os.chdir('./docs') diff --git a/clover/CHANGELOG.rst b/clover/CHANGELOG.rst new file mode 100644 index 00000000..3801c235 --- /dev/null +++ b/clover/CHANGELOG.rst @@ -0,0 +1,8 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package clover +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.21.1 (2020-11-17) +------------------- +* First release of clover package to ROS +* Contributors: Alexey Rogachevskiy, Arthur Golubtsov, Oleg Kalachev diff --git a/clover/README.md b/clover/README.md index 1fe85d86..51243812 100644 --- a/clover/README.md +++ b/clover/README.md @@ -44,16 +44,12 @@ Alternatively you may change the `fcu_url` property in `mavros.launch` file to p ## Running -To start connection to SITL, use: - -```bash -roslaunch clover sitl.launch -``` - To start connection to the flight controller, use: ```bash roslaunch clover clover.launch ``` +For the simulation information see the [corresponding article](https://clover.coex.tech/en/simulation.html). + > Note that the package is configured to connect to `/dev/px4fmu` by default (see [previous section](#manual-installation)). Install udev rules or specify path to your FCU device in `mavros.launch`. diff --git a/clover/launch/sitl.launch b/clover/launch/sitl.launch deleted file mode 100644 index bc38e650..00000000 --- a/clover/launch/sitl.launch +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/clover/package.xml b/clover/package.xml index 28acd7f1..a4f5878b 100644 --- a/clover/package.xml +++ b/clover/package.xml @@ -1,7 +1,7 @@ clover - 0.0.1 + 0.21.1 The Clover package Oleg Kalachev diff --git a/clover/www/index.html b/clover/www/index.html index fe0a6eaa..676b48e5 100644 --- a/clover/www/index.html +++ b/clover/www/index.html @@ -1,3 +1,5 @@ +Clover Drone Kit Tools +

Clover Drone Kit Tools

    diff --git a/clover_blocks/CHANGELOG.rst b/clover_blocks/CHANGELOG.rst new file mode 100644 index 00000000..3b8a3704 --- /dev/null +++ b/clover_blocks/CHANGELOG.rst @@ -0,0 +1,8 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package clover_blocks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.21.1 (2020-11-17) +------------------- +* First release of clover_blocks package to ROS +* Contributors: Oleg Kalachev diff --git a/clover_blocks/package.xml b/clover_blocks/package.xml index 4dbecbd9..aa618f86 100644 --- a/clover_blocks/package.xml +++ b/clover_blocks/package.xml @@ -1,7 +1,7 @@ clover_blocks - 0.0.0 + 0.21.1 Blockly programming support for Clover Oleg Kalachev MIT diff --git a/clover_description/CHANGELOG.rst b/clover_description/CHANGELOG.rst new file mode 100644 index 00000000..b82eae6e --- /dev/null +++ b/clover_description/CHANGELOG.rst @@ -0,0 +1,9 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package clover_description +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.21.1 (2020-11-17) +------------------- +* First release of clover_description package to ROS +* Contributors: Alexey Rogachevskiy + diff --git a/clover_description/package.xml b/clover_description/package.xml index c69a1af7..4de6b9ea 100644 --- a/clover_description/package.xml +++ b/clover_description/package.xml @@ -1,6 +1,6 @@ clover_description - 0.0.1 + 0.21.1 The clover_description package provides URDF models of the Clover series of quadcopters. Alexey Rogachevskiy diff --git a/clover_simulation/CHANGELOG.rst b/clover_simulation/CHANGELOG.rst new file mode 100644 index 00000000..9fec3f35 --- /dev/null +++ b/clover_simulation/CHANGELOG.rst @@ -0,0 +1,8 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package clover_simulation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.21.1 (2020-11-17) +------------------- +* First release of clover_simulation package to ROS +* Contributors: Alexey Rogachevskiy diff --git a/clover_simulation/launch/simulator.launch b/clover_simulation/launch/simulator.launch index d70f5f6c..cbb12953 100644 --- a/clover_simulation/launch/simulator.launch +++ b/clover_simulation/launch/simulator.launch @@ -1,4 +1,5 @@ + @@ -9,22 +10,22 @@ - + - + - + - + @@ -32,10 +33,20 @@ + + + + + + + + + + diff --git a/clover_simulation/models/aruco_cmit_txt/aruco_model.sdf b/clover_simulation/models/aruco_cmit_txt/aruco_model.sdf new file mode 100644 index 00000000..60b2216c --- /dev/null +++ b/clover_simulation/models/aruco_cmit_txt/aruco_model.sdf @@ -0,0 +1,1693 @@ + + + + + true + + + + 0.0 9.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 1.0 9.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 2.0 9.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 3.0 9.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 4.0 9.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 5.0 9.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 6.0 9.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 7.0 9.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 8.0 9.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 9.0 9.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 0.0 8.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 1.0 8.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 2.0 8.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 3.0 8.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 4.0 8.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 5.0 8.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 6.0 8.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 8.0 8.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 9.0 8.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 0.0 7.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 1.0 7.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 2.0 7.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 3.0 7.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 4.0 7.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 5.0 7.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 6.0 7.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 7.0 7.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 8.0 7.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 9.0 7.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 0.0 6.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 1.0 6.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 2.0 6.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 3.0 6.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 4.0 6.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 5.0 6.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 6.0 6.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 7.0 6.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 8.0 6.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 9.0 6.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 0.0 5.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 1.0 5.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 2.0 5.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 3.0 5.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 4.0 5.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 5.0 5.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 6.0 5.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 7.0 5.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 8.0 5.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 9.0 5.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 0.0 4.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 1.0 4.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 2.0 4.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 3.0 4.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 4.0 4.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 5.0 4.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 6.0 4.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 7.0 4.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 8.0 4.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 9.0 4.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 0.0 3.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 1.0 3.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 2.0 3.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 3.0 3.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 4.0 3.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 5.0 3.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 6.0 3.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 7.0 3.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 8.0 3.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 9.0 3.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 0.0 2.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 1.0 2.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 2.0 2.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 3.0 2.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 4.0 2.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 5.0 2.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 6.0 2.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 7.0 2.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 8.0 2.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 9.0 2.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 0.0 1.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 1.0 1.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 2.0 1.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 3.0 1.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 4.0 1.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 5.0 1.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 6.0 1.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 7.0 1.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 8.0 1.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 9.0 1.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 0.0 0.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 1.0 0.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 2.0 0.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 3.0 0.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 4.0 0.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 5.0 0.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 6.0 0.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 7.0 0.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 8.0 0.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + 9.0 0.0 0.0 0.0 0.0 1.57079632679 + false + + + 0.44 0.44 1e-3 + + + + + + + + + + diff --git a/clover_simulation/models/aruco_cmit_txt/materials/scripts/aruco_materials.material b/clover_simulation/models/aruco_cmit_txt/materials/scripts/aruco_materials.material new file mode 100644 index 00000000..2bb9a711 --- /dev/null +++ b/clover_simulation/models/aruco_cmit_txt/materials/scripts/aruco_materials.material @@ -0,0 +1,1584 @@ + +material aruco/marker_2_0 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_0.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_1 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_1.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_2 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_2.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_3 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_3.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_4 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_4.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_5 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_5.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_6 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_6.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_7 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_7.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_8 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_8.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_9 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_9.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_10 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_10.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_11 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_11.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_12 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_12.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_13 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_13.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_14 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_14.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_15 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_15.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_16 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_16.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_18 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_18.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_19 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_19.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_20 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_20.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_21 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_21.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_22 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_22.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_23 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_23.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_24 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_24.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_25 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_25.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_26 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_26.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_27 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_27.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_28 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_28.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_29 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_29.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_30 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_30.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_31 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_31.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_32 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_32.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_33 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_33.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_34 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_34.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_35 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_35.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_36 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_36.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_37 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_37.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_38 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_38.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_39 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_39.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_40 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_40.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_41 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_41.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_42 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_42.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_43 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_43.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_44 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_44.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_45 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_45.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_46 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_46.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_47 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_47.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_48 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_48.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_49 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_49.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_50 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_50.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_51 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_51.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_52 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_52.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_53 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_53.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_54 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_54.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_55 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_55.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_56 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_56.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_57 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_57.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_58 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_58.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_59 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_59.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_60 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_60.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_61 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_61.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_62 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_62.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_63 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_63.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_64 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_64.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_65 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_65.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_66 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_66.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_67 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_67.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_68 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_68.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_69 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_69.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_70 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_70.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_71 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_71.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_72 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_72.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_73 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_73.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_74 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_74.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_75 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_75.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_76 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_76.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_77 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_77.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_78 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_78.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_79 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_79.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_80 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_80.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_81 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_81.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_82 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_82.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_83 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_83.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_84 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_84.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_85 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_85.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_86 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_86.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_87 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_87.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_88 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_88.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_89 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_89.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_90 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_90.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_91 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_91.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_92 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_92.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_93 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_93.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_94 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_94.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_95 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_95.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_96 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_96.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_97 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_97.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_98 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_98.png + filtering none + scale 1.0 1.0 + } + } + } +} + +material aruco/marker_2_99 +{ + technique + { + pass + { + texture_unit + { + texture aruco_marker_2_99.png + filtering none + scale 1.0 1.0 + } + } + } +} diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_0.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_0.png new file mode 100644 index 00000000..a4ddefb6 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_0.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_1.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_1.png new file mode 100644 index 00000000..52f88dd7 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_1.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_10.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_10.png new file mode 100644 index 00000000..520f2712 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_10.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_11.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_11.png new file mode 100644 index 00000000..20d9ebe2 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_11.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_12.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_12.png new file mode 100644 index 00000000..e078d05d Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_12.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_13.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_13.png new file mode 100644 index 00000000..0693d536 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_13.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_14.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_14.png new file mode 100644 index 00000000..3ee0d1f6 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_14.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_15.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_15.png new file mode 100644 index 00000000..3a4f4b6f Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_15.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_16.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_16.png new file mode 100644 index 00000000..35709269 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_16.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_18.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_18.png new file mode 100644 index 00000000..05d5d8f9 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_18.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_19.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_19.png new file mode 100644 index 00000000..54aa781e Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_19.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_2.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_2.png new file mode 100644 index 00000000..6291052c Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_2.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_20.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_20.png new file mode 100644 index 00000000..d9cad43b Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_20.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_21.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_21.png new file mode 100644 index 00000000..068c9c0d Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_21.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_22.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_22.png new file mode 100644 index 00000000..4bfe093d Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_22.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_23.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_23.png new file mode 100644 index 00000000..13c52d69 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_23.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_24.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_24.png new file mode 100644 index 00000000..85baf658 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_24.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_25.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_25.png new file mode 100644 index 00000000..4729e889 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_25.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_26.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_26.png new file mode 100644 index 00000000..e34585dd Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_26.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_27.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_27.png new file mode 100644 index 00000000..e4505750 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_27.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_28.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_28.png new file mode 100644 index 00000000..f577a04a Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_28.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_29.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_29.png new file mode 100644 index 00000000..7afc204e Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_29.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_3.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_3.png new file mode 100644 index 00000000..83d7fa62 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_3.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_30.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_30.png new file mode 100644 index 00000000..6bf6fab4 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_30.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_31.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_31.png new file mode 100644 index 00000000..0522a1f3 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_31.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_32.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_32.png new file mode 100644 index 00000000..2939b8f1 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_32.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_33.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_33.png new file mode 100644 index 00000000..a979e573 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_33.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_34.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_34.png new file mode 100644 index 00000000..87565f87 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_34.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_35.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_35.png new file mode 100644 index 00000000..2abe187a Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_35.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_36.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_36.png new file mode 100644 index 00000000..bbe609b7 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_36.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_37.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_37.png new file mode 100644 index 00000000..b1d24916 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_37.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_38.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_38.png new file mode 100644 index 00000000..2aa9ba3c Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_38.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_39.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_39.png new file mode 100644 index 00000000..5d8ba3de Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_39.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_4.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_4.png new file mode 100644 index 00000000..b2ac3bae Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_4.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_40.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_40.png new file mode 100644 index 00000000..36f346c8 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_40.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_41.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_41.png new file mode 100644 index 00000000..d45a0533 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_41.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_42.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_42.png new file mode 100644 index 00000000..238235d4 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_42.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_43.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_43.png new file mode 100644 index 00000000..062dcf33 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_43.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_44.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_44.png new file mode 100644 index 00000000..0cf6ad29 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_44.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_45.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_45.png new file mode 100644 index 00000000..5f874cf0 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_45.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_46.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_46.png new file mode 100644 index 00000000..28adcaf4 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_46.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_47.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_47.png new file mode 100644 index 00000000..3c4748b9 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_47.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_48.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_48.png new file mode 100644 index 00000000..cab86da6 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_48.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_49.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_49.png new file mode 100644 index 00000000..f9c74dba Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_49.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_5.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_5.png new file mode 100644 index 00000000..a78f1c63 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_5.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_50.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_50.png new file mode 100644 index 00000000..8f419ad4 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_50.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_51.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_51.png new file mode 100644 index 00000000..7c1886e9 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_51.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_52.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_52.png new file mode 100644 index 00000000..a4158368 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_52.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_53.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_53.png new file mode 100644 index 00000000..fe06d65a Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_53.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_54.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_54.png new file mode 100644 index 00000000..35bb311d Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_54.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_55.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_55.png new file mode 100644 index 00000000..0d152744 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_55.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_56.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_56.png new file mode 100644 index 00000000..1b780908 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_56.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_57.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_57.png new file mode 100644 index 00000000..a3264567 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_57.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_58.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_58.png new file mode 100644 index 00000000..3c7e058d Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_58.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_59.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_59.png new file mode 100644 index 00000000..273bc9fd Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_59.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_6.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_6.png new file mode 100644 index 00000000..4bc3cc70 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_6.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_60.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_60.png new file mode 100644 index 00000000..0b040a58 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_60.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_61.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_61.png new file mode 100644 index 00000000..60a1fd9f Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_61.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_62.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_62.png new file mode 100644 index 00000000..fac46ec6 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_62.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_63.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_63.png new file mode 100644 index 00000000..3c426b4b Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_63.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_64.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_64.png new file mode 100644 index 00000000..a1f126c6 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_64.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_65.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_65.png new file mode 100644 index 00000000..53f3cf42 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_65.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_66.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_66.png new file mode 100644 index 00000000..4784099d Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_66.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_67.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_67.png new file mode 100644 index 00000000..48e0960d Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_67.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_68.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_68.png new file mode 100644 index 00000000..86e7745d Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_68.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_69.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_69.png new file mode 100644 index 00000000..8d5dc815 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_69.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_7.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_7.png new file mode 100644 index 00000000..b783c8ef Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_7.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_70.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_70.png new file mode 100644 index 00000000..0fae1e5b Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_70.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_71.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_71.png new file mode 100644 index 00000000..59cdb8dd Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_71.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_72.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_72.png new file mode 100644 index 00000000..1a4280ec Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_72.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_73.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_73.png new file mode 100644 index 00000000..4c438097 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_73.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_74.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_74.png new file mode 100644 index 00000000..e23fbf68 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_74.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_75.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_75.png new file mode 100644 index 00000000..6907c485 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_75.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_76.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_76.png new file mode 100644 index 00000000..b590cd01 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_76.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_77.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_77.png new file mode 100644 index 00000000..96ed588f Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_77.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_78.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_78.png new file mode 100644 index 00000000..7c4846f2 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_78.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_79.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_79.png new file mode 100644 index 00000000..ac24fbe2 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_79.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_8.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_8.png new file mode 100644 index 00000000..fe63eebb Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_8.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_80.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_80.png new file mode 100644 index 00000000..ea911252 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_80.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_81.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_81.png new file mode 100644 index 00000000..5ab275db Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_81.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_82.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_82.png new file mode 100644 index 00000000..bc360b6e Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_82.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_83.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_83.png new file mode 100644 index 00000000..a0a52e8c Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_83.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_84.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_84.png new file mode 100644 index 00000000..471b41ee Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_84.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_85.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_85.png new file mode 100644 index 00000000..99f96d41 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_85.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_86.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_86.png new file mode 100644 index 00000000..8b2969e4 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_86.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_87.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_87.png new file mode 100644 index 00000000..047b19b3 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_87.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_88.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_88.png new file mode 100644 index 00000000..3c84627d Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_88.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_89.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_89.png new file mode 100644 index 00000000..7a5dcee0 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_89.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_9.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_9.png new file mode 100644 index 00000000..2d91cfef Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_9.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_90.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_90.png new file mode 100644 index 00000000..d452b556 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_90.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_91.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_91.png new file mode 100644 index 00000000..2677b64c Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_91.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_92.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_92.png new file mode 100644 index 00000000..2d83d0dc Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_92.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_93.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_93.png new file mode 100644 index 00000000..821e81dc Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_93.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_94.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_94.png new file mode 100644 index 00000000..b82c6190 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_94.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_95.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_95.png new file mode 100644 index 00000000..b0406259 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_95.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_96.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_96.png new file mode 100644 index 00000000..879bf9e7 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_96.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_97.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_97.png new file mode 100644 index 00000000..5edf4e57 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_97.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_98.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_98.png new file mode 100644 index 00000000..820574b4 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_98.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_99.png b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_99.png new file mode 100644 index 00000000..de9fb863 Binary files /dev/null and b/clover_simulation/models/aruco_cmit_txt/materials/textures/aruco_marker_2_99.png differ diff --git a/clover_simulation/models/aruco_cmit_txt/model.config b/clover_simulation/models/aruco_cmit_txt/model.config new file mode 100644 index 00000000..25016bbf --- /dev/null +++ b/clover_simulation/models/aruco_cmit_txt/model.config @@ -0,0 +1,14 @@ + + + + ArUco field from cmit.txt (dictionary 2) + 1.0 + aruco_model.sdf + + Marker Generator script + marker@generator.sh + + + ArUco field from cmit.txt (dictionary 2) + + diff --git a/clover_simulation/package.xml b/clover_simulation/package.xml index 04b5e789..8771151b 100644 --- a/clover_simulation/package.xml +++ b/clover_simulation/package.xml @@ -1,6 +1,6 @@ clover_simulation - 0.0.1 + 0.21.1 The clover_simulation package provides worlds and launch files for Gazebo. Oleg Kalachev diff --git a/clover_simulation/resources/worlds/clover_aruco.world b/clover_simulation/resources/worlds/clover_aruco.world new file mode 100644 index 00000000..7b3b736f --- /dev/null +++ b/clover_simulation/resources/worlds/clover_aruco.world @@ -0,0 +1,47 @@ + + + + + + model://sun + + + model://parquet_plane + 0 0 -0.01 0 0 0 + + + + model://aruco_cmit_txt + + + + 0.8 0.8 0.8 1 + 0.8 0.9 1 1 + false + false + false + + + + 0 0 -9.8066 + + + quick + 10 + 1.3 + 0 + + + 0 + 0.2 + 100 + 0.001 + + + 0.004 + 1 + 250 + 6.0e-6 2.3e-5 -4.2e-5 + + + diff --git a/clover_simulation/src/clover_simulation/world.py b/clover_simulation/src/clover_simulation/world.py index 322a6d9e..20378c01 100644 --- a/clover_simulation/src/clover_simulation/world.py +++ b/clover_simulation/src/clover_simulation/world.py @@ -5,10 +5,10 @@ import xml.etree.ElementTree as ET from string import Template WORLD_INCLUDE = Template(''' - - model://${model_name} - ${x} ${y} ${z} ${roll} ${pitch} ${yaw} - + + model://${model_name} + ${x} ${y} ${z} ${roll} ${pitch} ${yaw} + ''') def load_world(world_file): @@ -32,6 +32,7 @@ def add_model(world, model_name, x, y, z, roll, pitch, yaw, index=0): pitch=pitch, yaw=yaw )) + model_elem.tail = '\n ' world_elem.insert(index, model_elem) return world diff --git a/docs/assets/Hardaton_Quidditch/1.jpg b/docs/assets/Hardaton_Quidditch/1.jpg new file mode 100644 index 00000000..2c84ab76 Binary files /dev/null and b/docs/assets/Hardaton_Quidditch/1.jpg differ diff --git a/docs/assets/Hardaton_Quidditch/2.jpg b/docs/assets/Hardaton_Quidditch/2.jpg new file mode 100644 index 00000000..e8c56122 Binary files /dev/null and b/docs/assets/Hardaton_Quidditch/2.jpg differ diff --git a/docs/assets/Hardaton_Quidditch/3.jpg b/docs/assets/Hardaton_Quidditch/3.jpg new file mode 100644 index 00000000..97a32e7d Binary files /dev/null and b/docs/assets/Hardaton_Quidditch/3.jpg differ diff --git a/docs/assets/Hardaton_Quidditch/4.jpg b/docs/assets/Hardaton_Quidditch/4.jpg new file mode 100644 index 00000000..825f21be Binary files /dev/null and b/docs/assets/Hardaton_Quidditch/4.jpg differ diff --git a/docs/assets/Hardaton_Quidditch/5.jpg b/docs/assets/Hardaton_Quidditch/5.jpg new file mode 100644 index 00000000..bd64d54a Binary files /dev/null and b/docs/assets/Hardaton_Quidditch/5.jpg differ diff --git a/docs/assets/Hardaton_Quidditch/6.jpg b/docs/assets/Hardaton_Quidditch/6.jpg new file mode 100644 index 00000000..627a6736 Binary files /dev/null and b/docs/assets/Hardaton_Quidditch/6.jpg differ diff --git a/docs/assets/Hardaton_Quidditch/7.jpg b/docs/assets/Hardaton_Quidditch/7.jpg new file mode 100644 index 00000000..0bd54db8 Binary files /dev/null and b/docs/assets/Hardaton_Quidditch/7.jpg differ diff --git a/docs/assets/Hardaton_Quidditch/8.jpg b/docs/assets/Hardaton_Quidditch/8.jpg new file mode 100644 index 00000000..27353fca Binary files /dev/null and b/docs/assets/Hardaton_Quidditch/8.jpg differ diff --git a/docs/assets/Hardaton_Quidditch/Hardaton.jpg b/docs/assets/Hardaton_Quidditch/Hardaton.jpg new file mode 100644 index 00000000..acbd6f7c Binary files /dev/null and b/docs/assets/Hardaton_Quidditch/Hardaton.jpg differ diff --git a/docs/assets/Hardaton_Quidditch/team.jpg b/docs/assets/Hardaton_Quidditch/team.jpg new file mode 100644 index 00000000..88afb542 Binary files /dev/null and b/docs/assets/Hardaton_Quidditch/team.jpg differ diff --git a/docs/assets/advancedClover1.png b/docs/assets/advancedClover1.png new file mode 100644 index 00000000..afd40480 Binary files /dev/null and b/docs/assets/advancedClover1.png differ diff --git a/docs/assets/advancedClover2.png b/docs/assets/advancedClover2.png new file mode 100644 index 00000000..59684285 Binary files /dev/null and b/docs/assets/advancedClover2.png differ diff --git a/docs/assets/advancedClover3.png b/docs/assets/advancedClover3.png new file mode 100644 index 00000000..6667ffd9 Binary files /dev/null and b/docs/assets/advancedClover3.png differ diff --git a/docs/assets/amls/data_structure.png b/docs/assets/amls/data_structure.png new file mode 100644 index 00000000..889c1c85 Binary files /dev/null and b/docs/assets/amls/data_structure.png differ diff --git a/docs/assets/amls/drone_meme.jpg b/docs/assets/amls/drone_meme.jpg new file mode 100644 index 00000000..ca556854 Binary files /dev/null and b/docs/assets/amls/drone_meme.jpg differ diff --git a/docs/assets/amls/follow_the_white_rabbit.png b/docs/assets/amls/follow_the_white_rabbit.png new file mode 100644 index 00000000..671fc01c Binary files /dev/null and b/docs/assets/amls/follow_the_white_rabbit.png differ diff --git a/docs/assets/amls/gimbal_assembly.png b/docs/assets/amls/gimbal_assembly.png new file mode 100644 index 00000000..da182816 Binary files /dev/null and b/docs/assets/amls/gimbal_assembly.png differ diff --git a/docs/assets/amls/gimbal_camera_mount.png b/docs/assets/amls/gimbal_camera_mount.png new file mode 100644 index 00000000..dd69367f Binary files /dev/null and b/docs/assets/amls/gimbal_camera_mount.png differ diff --git a/docs/assets/amls/gimbal_filter_mount.png b/docs/assets/amls/gimbal_filter_mount.png new file mode 100644 index 00000000..9609d22d Binary files /dev/null and b/docs/assets/amls/gimbal_filter_mount.png differ diff --git a/docs/assets/amls/gimbal_plane_mount.png b/docs/assets/amls/gimbal_plane_mount.png new file mode 100644 index 00000000..b5f814fb Binary files /dev/null and b/docs/assets/amls/gimbal_plane_mount.png differ diff --git a/docs/assets/amls/grabbing_system_1.png b/docs/assets/amls/grabbing_system_1.png new file mode 100644 index 00000000..1ee66329 Binary files /dev/null and b/docs/assets/amls/grabbing_system_1.png differ diff --git a/docs/assets/amls/grabbing_system_2.png b/docs/assets/amls/grabbing_system_2.png new file mode 100644 index 00000000..20c12ac5 Binary files /dev/null and b/docs/assets/amls/grabbing_system_2.png differ diff --git a/docs/assets/amls/liberty-x_front_cutout_2_small_gps.png b/docs/assets/amls/liberty-x_front_cutout_2_small_gps.png new file mode 100644 index 00000000..c9e23c55 Binary files /dev/null and b/docs/assets/amls/liberty-x_front_cutout_2_small_gps.png differ diff --git a/docs/assets/amls/liberty-x_side_cutout_2_small.png b/docs/assets/amls/liberty-x_side_cutout_2_small.png new file mode 100644 index 00000000..1cb6ee2a Binary files /dev/null and b/docs/assets/amls/liberty-x_side_cutout_2_small.png differ diff --git a/docs/assets/amls/light_sensors.png b/docs/assets/amls/light_sensors.png new file mode 100644 index 00000000..4e419615 Binary files /dev/null and b/docs/assets/amls/light_sensors.png differ diff --git a/docs/assets/amls/logo_book.png b/docs/assets/amls/logo_book.png new file mode 100644 index 00000000..5dd70525 Binary files /dev/null and b/docs/assets/amls/logo_book.png differ diff --git a/docs/assets/amls/mpu6050_gyro.png b/docs/assets/amls/mpu6050_gyro.png new file mode 100644 index 00000000..c4c8c8f5 Binary files /dev/null and b/docs/assets/amls/mpu6050_gyro.png differ diff --git a/docs/assets/amls/ms5611_barometer.png b/docs/assets/amls/ms5611_barometer.png new file mode 100644 index 00000000..ea8eba14 Binary files /dev/null and b/docs/assets/amls/ms5611_barometer.png differ diff --git a/docs/assets/amls/platform_roof.png b/docs/assets/amls/platform_roof.png new file mode 100644 index 00000000..28dbf895 Binary files /dev/null and b/docs/assets/amls/platform_roof.png differ diff --git a/docs/assets/amls/platform_side_transparent.png b/docs/assets/amls/platform_side_transparent.png new file mode 100644 index 00000000..ba04fa31 Binary files /dev/null and b/docs/assets/amls/platform_side_transparent.png differ diff --git a/docs/assets/anticorona/camera.jpg b/docs/assets/anticorona/camera.jpg new file mode 100644 index 00000000..8bbed56d Binary files /dev/null and b/docs/assets/anticorona/camera.jpg differ diff --git a/docs/assets/anticorona/charging_drone.jpg b/docs/assets/anticorona/charging_drone.jpg new file mode 100644 index 00000000..d9041421 Binary files /dev/null and b/docs/assets/anticorona/charging_drone.jpg differ diff --git a/docs/assets/anticorona/drone_assembled.jpg b/docs/assets/anticorona/drone_assembled.jpg new file mode 100644 index 00000000..76606d02 Binary files /dev/null and b/docs/assets/anticorona/drone_assembled.jpg differ diff --git a/docs/assets/anticorona/drone_frame.jpg b/docs/assets/anticorona/drone_frame.jpg new file mode 100644 index 00000000..4553ca85 Binary files /dev/null and b/docs/assets/anticorona/drone_frame.jpg differ diff --git a/docs/assets/anticorona/drone_with_jetson.jpg b/docs/assets/anticorona/drone_with_jetson.jpg new file mode 100644 index 00000000..26846245 Binary files /dev/null and b/docs/assets/anticorona/drone_with_jetson.jpg differ diff --git a/docs/assets/anticorona/human_view.jpg b/docs/assets/anticorona/human_view.jpg new file mode 100644 index 00000000..a6b70ad9 Binary files /dev/null and b/docs/assets/anticorona/human_view.jpg differ diff --git a/docs/assets/anticorona/masks.jpg b/docs/assets/anticorona/masks.jpg new file mode 100644 index 00000000..2ede25cc Binary files /dev/null and b/docs/assets/anticorona/masks.jpg differ diff --git a/docs/assets/anticorona/release.jpg b/docs/assets/anticorona/release.jpg new file mode 100644 index 00000000..5dc0fa89 Binary files /dev/null and b/docs/assets/anticorona/release.jpg differ diff --git a/docs/assets/anticorona/release_Cad.jpg b/docs/assets/anticorona/release_Cad.jpg new file mode 100644 index 00000000..c2121340 Binary files /dev/null and b/docs/assets/anticorona/release_Cad.jpg differ diff --git a/docs/assets/anticorona/robot_view.jpg b/docs/assets/anticorona/robot_view.jpg new file mode 100644 index 00000000..43cc4623 Binary files /dev/null and b/docs/assets/anticorona/robot_view.jpg differ diff --git a/docs/assets/clover42-black.png b/docs/assets/clover42-black.png new file mode 100644 index 00000000..ed229933 Binary files /dev/null and b/docs/assets/clover42-black.png differ diff --git a/docs/assets/clover42-main.png b/docs/assets/clover42-main.png new file mode 100644 index 00000000..742b08ad Binary files /dev/null and b/docs/assets/clover42-main.png differ diff --git a/docs/assets/coex_gps/coex-gps-bottom.png b/docs/assets/coex_gps/coex-gps-bottom.png new file mode 100644 index 00000000..a7e88d08 Binary files /dev/null and b/docs/assets/coex_gps/coex-gps-bottom.png differ diff --git a/docs/assets/coex_gps/coex-gps-top.png b/docs/assets/coex_gps/coex-gps-top.png new file mode 100644 index 00000000..26a9a8a7 Binary files /dev/null and b/docs/assets/coex_gps/coex-gps-top.png differ diff --git a/docs/assets/coex_pdb/coex-pdb-bottom.png b/docs/assets/coex_pdb/coex-pdb-bottom.png new file mode 100644 index 00000000..a2549f3e Binary files /dev/null and b/docs/assets/coex_pdb/coex-pdb-bottom.png differ diff --git a/docs/assets/coex_pdb/coex-pdb-top.png b/docs/assets/coex_pdb/coex-pdb-top.png new file mode 100644 index 00000000..cb9d67f8 Binary files /dev/null and b/docs/assets/coex_pdb/coex-pdb-top.png differ diff --git a/docs/assets/coex_pix/coexpix-bottom-rev1.2.png b/docs/assets/coex_pix/coexpix-bottom-rev1.2.png index fd07d436..1c039c85 100644 Binary files a/docs/assets/coex_pix/coexpix-bottom-rev1.2.png and b/docs/assets/coex_pix/coexpix-bottom-rev1.2.png differ diff --git a/docs/assets/coex_pix/coexpix-top-rev1.2.png b/docs/assets/coex_pix/coexpix-top-rev1.2.png index 26a4a4c2..a84698e7 100644 Binary files a/docs/assets/coex_pix/coexpix-top-rev1.2.png and b/docs/assets/coex_pix/coexpix-top-rev1.2.png differ diff --git a/docs/assets/copterhack2021/1.jpg b/docs/assets/copterhack2021/1.jpg new file mode 100644 index 00000000..be0d799c Binary files /dev/null and b/docs/assets/copterhack2021/1.jpg differ diff --git a/docs/assets/copterhack2021/2.jpg b/docs/assets/copterhack2021/2.jpg new file mode 100644 index 00000000..298e230b Binary files /dev/null and b/docs/assets/copterhack2021/2.jpg differ diff --git a/docs/assets/ddrone/final.gif b/docs/assets/ddrone/final.gif new file mode 100644 index 00000000..befd6dba Binary files /dev/null and b/docs/assets/ddrone/final.gif differ diff --git a/docs/assets/ddrone/full_holder.png b/docs/assets/ddrone/full_holder.png new file mode 100644 index 00000000..f5ca3907 Binary files /dev/null and b/docs/assets/ddrone/full_holder.png differ diff --git a/docs/assets/ddrone/full_holder_in_real.jpg b/docs/assets/ddrone/full_holder_in_real.jpg new file mode 100644 index 00000000..a8312dec Binary files /dev/null and b/docs/assets/ddrone/full_holder_in_real.jpg differ diff --git a/docs/assets/ddrone/holder.png b/docs/assets/ddrone/holder.png new file mode 100644 index 00000000..80240602 Binary files /dev/null and b/docs/assets/ddrone/holder.png differ diff --git a/docs/assets/ddrone/instruction.png b/docs/assets/ddrone/instruction.png new file mode 100644 index 00000000..095d06ff Binary files /dev/null and b/docs/assets/ddrone/instruction.png differ diff --git a/docs/assets/ddrone/pressing_mechanism.png b/docs/assets/ddrone/pressing_mechanism.png new file mode 100644 index 00000000..ee3c452e Binary files /dev/null and b/docs/assets/ddrone/pressing_mechanism.png differ diff --git a/docs/assets/ddrone/pressing_mechanism_in_real.jpg b/docs/assets/ddrone/pressing_mechanism_in_real.jpg new file mode 100644 index 00000000..e38e7351 Binary files /dev/null and b/docs/assets/ddrone/pressing_mechanism_in_real.jpg differ diff --git a/docs/assets/ddrone/screen_2.png b/docs/assets/ddrone/screen_2.png new file mode 100644 index 00000000..65e3880e Binary files /dev/null and b/docs/assets/ddrone/screen_2.png differ diff --git a/docs/assets/dimensional-drawing/clover-4.2-ws.pdf b/docs/assets/dimensional-drawing/clover-4.2-ws.pdf new file mode 100644 index 00000000..7edd1a27 Binary files /dev/null and b/docs/assets/dimensional-drawing/clover-4.2-ws.pdf differ diff --git a/docs/assets/dimensional-drawing/clover-4.2.pdf b/docs/assets/dimensional-drawing/clover-4.2.pdf new file mode 100644 index 00000000..ad730326 Binary files /dev/null and b/docs/assets/dimensional-drawing/clover-4.2.pdf differ diff --git a/docs/assets/dromap/1.2fig.png b/docs/assets/dromap/1.2fig.png new file mode 100644 index 00000000..e56125a6 Binary files /dev/null and b/docs/assets/dromap/1.2fig.png differ diff --git a/docs/assets/dromap/1.3fig.png b/docs/assets/dromap/1.3fig.png new file mode 100644 index 00000000..28c4b354 Binary files /dev/null and b/docs/assets/dromap/1.3fig.png differ diff --git a/docs/assets/dromap/3.jpeg b/docs/assets/dromap/3.jpeg new file mode 100644 index 00000000..18ddc6e6 Binary files /dev/null and b/docs/assets/dromap/3.jpeg differ diff --git a/docs/assets/dromap/HLA.jpg b/docs/assets/dromap/HLA.jpg new file mode 100644 index 00000000..33e53990 Binary files /dev/null and b/docs/assets/dromap/HLA.jpg differ diff --git a/docs/assets/dromap/Maze1.jpg b/docs/assets/dromap/Maze1.jpg new file mode 100644 index 00000000..08f4be25 Binary files /dev/null and b/docs/assets/dromap/Maze1.jpg differ diff --git a/docs/assets/dromap/Picture1.png b/docs/assets/dromap/Picture1.png new file mode 100644 index 00000000..d97184ae Binary files /dev/null and b/docs/assets/dromap/Picture1.png differ diff --git a/docs/assets/dromap/algorth_logic.png b/docs/assets/dromap/algorth_logic.png new file mode 100644 index 00000000..9de227c4 Binary files /dev/null and b/docs/assets/dromap/algorth_logic.png differ diff --git a/docs/assets/dromap/hectortest1.jpg b/docs/assets/dromap/hectortest1.jpg new file mode 100644 index 00000000..850786a2 Binary files /dev/null and b/docs/assets/dromap/hectortest1.jpg differ diff --git a/docs/assets/dromap/hectortest2.jpg b/docs/assets/dromap/hectortest2.jpg new file mode 100644 index 00000000..ba46dc65 Binary files /dev/null and b/docs/assets/dromap/hectortest2.jpg differ diff --git a/docs/assets/duocam/duocam.png b/docs/assets/duocam/duocam.png new file mode 100644 index 00000000..02d28d0e Binary files /dev/null and b/docs/assets/duocam/duocam.png differ diff --git a/docs/assets/duocam/gitup_seek.jpg b/docs/assets/duocam/gitup_seek.jpg new file mode 100644 index 00000000..27a7c21a Binary files /dev/null and b/docs/assets/duocam/gitup_seek.jpg differ diff --git a/docs/assets/duocam/qgc_duocam_widget.png b/docs/assets/duocam/qgc_duocam_widget.png new file mode 100644 index 00000000..7f1e6324 Binary files /dev/null and b/docs/assets/duocam/qgc_duocam_widget.png differ diff --git a/docs/assets/dxf/4.2/big_leg.dxf b/docs/assets/dxf/4.2/big_leg.dxf new file mode 100644 index 00000000..1143e309 --- /dev/null +++ b/docs/assets/dxf/4.2/big_leg.dxf @@ -0,0 +1,4644 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1015 + 9 +$ACADMAINTVER + 70 + 6 + 9 +$DWGCODEPAGE + 3 +ANSI_1251 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +-146.167 + 30 +0.0 + 9 +$EXTMAX + 10 +58.3620209818 + 20 +0.0 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +420.0 + 20 +297.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$LTSCALE + 40 +1.0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +4.0 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +Standard + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +ByLayer + 9 +$CECOLOR + 62 + 256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DISPSILH + 70 + 0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +6.0 + 9 +$DIMEXO + 40 +0.0 + 9 +$DIMDLI + 40 +3.75 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +1.0 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +4.0 + 9 +$DIMCEN + 40 +2.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 1 + 9 +$DIMTOH + 70 + 1 + 9 +$DIMSE1 + 70 + 0 + 9 +$DIMSE2 + 70 + 0 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 0 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 1 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 3 + 9 +$DIMALTF + 40 +0.0393700787 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 0 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +ISO-25 + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +3.0 + 9 +$DIMJUST + 70 + 0 + 9 +$DIMSD1 + 70 + 0 + 9 +$DIMSD2 + 70 + 0 + 9 +$DIMTOLJ + 70 + 0 + 9 +$DIMTZIN + 70 + 0 + 9 +$DIMALTZ + 70 + 0 + 9 +$DIMALTTZ + 70 + 0 + 9 +$DIMUPT + 70 + 0 + 9 +$DIMDEC + 70 + 2 + 9 +$DIMTDEC + 70 + 4 + 9 +$DIMALTU + 70 + 2 + 9 +$DIMALTTD + 70 + 3 + 9 +$DIMTXSTY + 7 +Standard + 9 +$DIMAUNIT + 70 + 0 + 9 +$DIMADEC + 70 + 2 + 9 +$DIMALTRND + 40 +0.0 + 9 +$DIMAZIN + 70 + 0 + 9 +$DIMDSEP + 70 + 44 + 9 +$DIMATFIT + 70 + 3 + 9 +$DIMFRAC + 70 + 0 + 9 +$DIMLDRBLK + 1 + + 9 +$DIMLUNIT + 70 + 2 + 9 +$DIMLWD + 70 + -2 + 9 +$DIMLWE + 70 + -2 + 9 +$DIMTMOVE + 70 + 0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 2 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +10.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 2 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$CHAMFERC + 40 +0.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2459174.72106566 + 9 +$TDUCREATE + 40 +2459174.59606566 + 9 +$TDUPDATE + 40 +2459174.721207373 + 9 +$TDUUPDATE + 40 +2459174.596207373 + 9 +$TDINDWG + 40 +0.0000000116 + 9 +$TDUSRTIMER + 40 +0.0000000116 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +-1.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$HANDSEED + 5 +9C + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSBASE + 2 + + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$UCSORTHOREF + 2 + + 9 +$UCSORTHOVIEW + 70 + 0 + 9 +$UCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSBASE + 2 + + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSORTHOREF + 2 + + 9 +$PUCSORTHOVIEW + 70 + 0 + 9 +$PUCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 64 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.0000000000E+20 + 20 +1.0000000000E+20 + 30 +1.0000000000E+20 + 9 +$PEXTMAX + 10 +-1.0000000000E+20 + 20 +-1.0000000000E+20 + 30 +-1.0000000000E+20 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 1 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 1 + 9 +$TREEDEPTH + 70 + 3020 + 9 +$CMLSTYLE + 2 +Standard + 9 +$CMLJUST + 70 + 0 + 9 +$CMLSCALE + 40 +20.0 + 9 +$PROXYGRAPHICS + 70 + 1 + 9 +$MEASUREMENT + 70 + 1 + 9 +$CELWEIGHT +370 + -1 + 9 +$ENDCAPS +280 + 0 + 9 +$JOINSTYLE +280 + 0 + 9 +$LWDISPLAY +290 + 1 + 9 +$INSUNITS + 70 + 4 + 9 +$HYPERLINKBASE + 1 + + 9 +$STYLESHEET + 1 + + 9 +$XEDIT +290 + 1 + 9 +$CEPSNTYPE +380 + 0 + 9 +$PSTYLEMODE +290 + 1 + 9 +$FINGERPRINTGUID + 2 +{a2169fda-0a21-4367-9dba-64947030ad3a} + 9 +$VERSIONGUID + 2 +{FAEB1C32-E019-11D5-929B-00C0DF256EC4} + 9 +$EXTNAMES +290 + 1 + 9 +$PSVPSCALE + 40 +0.0 + 9 +$OLESTARTUP +290 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +ACDBDICTIONARYWDFLT + 2 +AcDbDictionaryWithDefault + 3 +ObjectDBX Classes + 90 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +VISUALSTYLE + 2 +AcDbVisualStyle + 3 +ObjectDBX Classes + 90 + 4095 +280 + 0 +281 + 0 + 0 +CLASS + 1 +MATERIAL + 2 +AcDbMaterial + 3 +ObjectDBX Classes + 90 + 1153 +280 + 0 +281 + 0 + 0 +CLASS + 1 +SCALE + 2 +AcDbScale + 3 +ObjectDBX Classes + 90 + 1153 +280 + 0 +281 + 0 + 0 +CLASS + 1 +TABLESTYLE + 2 +AcDbTableStyle + 3 +ObjectDBX Classes + 90 + 4095 +280 + 0 +281 + 0 + 0 +CLASS + 1 +MLEADERSTYLE + 2 +AcDbMLeaderStyle + 3 +ACDB_MLEADERSTYLE_CLASS + 90 + 4095 +280 + 0 +281 + 0 + 0 +CLASS + 1 +SUN + 2 +AcDbSun + 3 +SCENEOE + 90 + 1153 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDBPLACEHOLDER + 2 +AcDbPlaceHolder + 3 +ObjectDBX Classes + 90 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +LAYOUT + 2 +AcDbLayout + 3 +ObjectDBX Classes + 90 + 0 +280 + 0 +281 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +VPORT + 5 +29 +330 +8 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*Active + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +29.1810104909 + 22 +-73.0835 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +149.09034 + 41 +0.3992831554 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 3 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 +281 + 0 + 65 + 1 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +330 +0 +100 +AcDbSymbolTable + 70 + 6 + 0 +LTYPE + 5 +14 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +15 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +16 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +Continuous + 70 + 0 + 3 +Solid line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +6E +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +HIDDEN + 70 + 0 + 3 +Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +1.905 + 49 +1.27 + 74 + 0 + 49 +-0.635 + 74 + 0 + 0 +LTYPE + 5 +6F +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +PHANTOM + 70 + 0 + 3 +Phantom ______ __ __ ______ __ __ ______ + 72 + 65 + 73 + 6 + 40 +12.7 + 49 +6.35 + 74 + 0 + 49 +-1.27 + 74 + 0 + 49 +1.27 + 74 + 0 + 49 +-1.27 + 74 + 0 + 49 +1.27 + 74 + 0 + 49 +-1.27 + 74 + 0 + 0 +LTYPE + 5 +70 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER + 70 + 0 + 3 +Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 + 65 + 73 + 4 + 40 +10.16 + 49 +6.35 + 74 + 0 + 49 +-1.27 + 74 + 0 + 49 +1.27 + 74 + 0 + 49 +-1.27 + 74 + 0 + 0 +LTYPE + 5 +71 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTERX2 + 70 + 0 + 3 +Center (2x) ________ __ ________ __ _____ + 72 + 65 + 73 + 4 + 40 +20.32 + 49 +12.7 + 74 + 0 + 49 +-2.54 + 74 + 0 + 49 +2.54 + 74 + 0 + 49 +-2.54 + 74 + 0 + 0 +LTYPE + 5 +72 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT2 + 70 + 0 + 3 +Dot (.5x) ........................................ + 72 + 65 + 73 + 2 + 40 +0.635 + 49 +0.0 + 74 + 0 + 49 +-0.635 + 74 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +LAYER + 5 +10 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 + 0 + 62 + 7 + 6 +Continuous +370 + -3 +390 +F + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +STYLE + 5 +11 +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +4.0 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +330 +0 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +330 +0 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +APPID + 5 +12 +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +330 +0 +100 +AcDbSymbolTable + 70 + 1 +100 +AcDbDimStyleTable + 0 +DIMSTYLE +105 +27 +330 +A +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +ISO-25 + 70 + 0 + 41 +2.5 + 42 +0.625 + 43 +3.75 + 44 +1.25 + 73 + 0 + 74 + 0 + 77 + 1 + 78 + 8 +140 +2.5 +141 +2.5 +143 +0.0393700787 +147 +0.625 +171 + 3 +172 + 1 +178 + 0 +271 + 2 +272 + 2 +274 + 3 +278 + 44 +283 + 0 +284 + 8 +340 +11 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +BLOCK_RECORD + 5 +1F +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +22 + 0 +BLOCK_RECORD + 5 +1B +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 0 +BLOCK_RECORD + 5 +23 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space0 +340 +26 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +20 +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Model_Space + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Model_Space + 1 + + 0 +ENDBLK + 5 +21 +330 +1F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space + 1 + + 0 +ENDBLK + 5 +1D +330 +1B +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +24 +330 +23 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space0 + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space0 + 1 + + 0 +ENDBLK + 5 +25 +330 +23 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +CIRCLE + 5 +73 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +41.15 + 20 +-6.8284271247 + 30 +0.0 + 40 +1.649999999999991 + 0 +CIRCLE + 5 +74 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +22.9 + 20 +-142.417 + 30 +0.0 + 40 +1.650000000000048 + 0 +ARC + 5 +75 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +10.1391132596 + 20 +-1.5 + 30 +0.0 + 40 +3.000000000000036 +100 +AcDbArc + 50 +224.148978421 + 51 +270.0 + 0 +ARC + 5 +76 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +4.65 + 20 +-6.8284271247 + 30 +0.0 + 40 +4.650000000000081 +100 +AcDbArc + 50 +44.148978421 + 51 +180.4252699562 + 0 +ARC + 5 +77 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +520.4377712463 + 20 +-2.9999938103 + 30 +0.0 + 40 +520.4519793184875 +100 +AcDbArc + 50 +180.4252699562 + 51 +195.6536111478 + 0 +ARC + 5 +78 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +22.9 + 20 +-142.417 + 30 +0.0 + 40 +3.750000000000315 +100 +AcDbArc + 50 +195.6536111478 + 51 +359.0 + 0 +ARC + 5 +79 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +285.2509920374 + 20 +-146.9963536 + 30 +0.0 + 40 +258.6409554508588 +100 +AcDbArc + 50 +152.0308257356 + 51 +179.0 + 0 +ARC + 5 +7A +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +45.1536885359 + 20 +-19.5 + 30 +0.0 + 40 +13.20833244590294 +100 +AcDbArc + 50 +332.0308257356 + 51 +0.0 + 0 +ARC + 5 +7B +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +57.3620209818 + 20 +-19.5 + 30 +0.0 + 40 +1.000000000000078 +100 +AcDbArc + 50 +0.0 + 51 +90.0 + 0 +LINE + 5 +7C +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbLine + 10 +57.3620209818 + 20 +-18.5 + 30 +0.0 + 11 +54.2713151797 + 21 +-18.5 + 31 +0.0 + 0 +ARC + 5 +7D +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +54.2713151797 + 20 +-19.5 + 30 +0.0 + 40 +1.000000000000005 +100 +AcDbArc + 50 +90.0 + 51 +165.6747858647 + 0 +ARC + 5 +7E +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +4.65 + 20 +-6.8284271247 + 30 +0.0 + 40 +50.21370597112687 +100 +AcDbArc + 50 +340.5548075805 + 51 +345.6747858647 + 0 +ARC + 5 +7F +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +52.9424951475 + 20 +-23.8777259879 + 30 +0.0 + 40 +1.000000000000025 +100 +AcDbArc + 50 +160.5548075805 + 51 +177.568990854 + 0 +ARC + 5 +80 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +50.9442951072 + 20 +-23.7928932188 + 30 +0.0 + 40 +1.000000000000022 +100 +AcDbArc + 50 +238.6002851901 + 51 +357.568990854 + 0 +ARC + 5 +81 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +49.9022843406 + 20 +-25.5 + 30 +0.0 + 40 +0.9999999999999964 +100 +AcDbArc + 50 +58.6002851901 + 51 +90.0 + 0 +LINE + 5 +82 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbLine + 10 +49.9022843406 + 20 +-24.5 + 30 +0.0 + 11 +47.6480970814 + 21 +-24.5 + 31 +0.0 + 0 +ARC + 5 +83 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +47.6480970814 + 20 +-23.5 + 30 +0.0 + 40 +1.0 +100 +AcDbArc + 50 +180.0 + 51 +270.0 + 0 +LINE + 5 +84 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbLine + 10 +46.6480970814 + 20 +-23.5 + 30 +0.0 + 11 +46.6480970814 + 21 +-18.6355820313 + 31 +0.0 + 0 +ARC + 5 +85 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +47.6480970814 + 20 +-18.6355820313 + 30 +0.0 + 40 +1.0 +100 +AcDbArc + 50 +164.645209754 + 51 +180.0 + 0 +ARC + 5 +86 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +4.65 + 20 +-6.8284271247 + 30 +0.0 + 40 +43.58974388368343 +100 +AcDbArc + 50 +344.645209754 + 51 +6.0468027415 + 0 +ARC + 5 +87 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +45.511127873 + 20 +-2.5 + 30 +0.0 + 40 +2.500000000000016 +100 +AcDbArc + 50 +6.0468027415 + 51 +90.0 + 0 +LINE + 5 +88 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbLine + 10 +45.511127873 + 20 +0.0 + 30 +0.0 + 11 +22.2563608903 + 21 +0.0 + 31 +0.0 + 0 +ARC + 5 +89 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +22.2563608903 + 20 +-2.5 + 30 +0.0 + 40 +2.500000000000011 +100 +AcDbArc + 50 +90.0 + 51 +180.0 + 0 +LINE + 5 +8A +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbLine + 10 +19.7563608903 + 20 +-2.5 + 30 +0.0 + 11 +19.7563608903 + 21 +-3.0 + 31 +0.0 + 0 +ARC + 5 +8B +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +18.2563608903 + 20 +-3.0 + 30 +0.0 + 40 +1.500000000000016 +100 +AcDbArc + 50 +270.0 + 51 +360.0 + 0 +LINE + 5 +8C +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbLine + 10 +18.2563608903 + 20 +-4.5 + 30 +0.0 + 11 +10.1391132596 + 21 +-4.5 + 31 +0.0 + 0 +ARC + 5 +8D +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +520.4377712463 + 20 +-2.9999938103 + 30 +0.0 + 40 +510.4519793184876 +100 +AcDbArc + 50 +181.4115031106 + 51 +186.3484453151 + 0 +ARC + 5 +8E +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +13.1397708959 + 20 +-15.5 + 30 +0.0 + 40 +3.000000000000054 +100 +AcDbArc + 50 +90.0 + 51 +181.4115031106 + 0 +LINE + 5 +8F +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbLine + 10 +35.6480970814 + 20 +-12.5 + 30 +0.0 + 11 +13.1397708959 + 21 +-12.5 + 31 +0.0 + 0 +ARC + 5 +90 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +35.6480970814 + 20 +-15.5 + 30 +0.0 + 40 +3.000000000000002 +100 +AcDbArc + 50 +0.0 + 51 +90.0 + 0 +LINE + 5 +91 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbLine + 10 +38.6480970814 + 20 +-37.3783032628 + 30 +0.0 + 11 +38.6480970814 + 21 +-15.5 + 31 +0.0 + 0 +ARC + 5 +92 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +23.6480970814 + 20 +-37.3783032628 + 30 +0.0 + 40 +15.00000000000002 +100 +AcDbArc + 50 +337.2651166585 + 51 +0.0 + 0 +ARC + 5 +93 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +285.2509920374 + 20 +-146.9963536 + 30 +0.0 + 40 +268.6409554508605 +100 +AcDbArc + 50 +157.2651166585 + 51 +161.402767006 + 0 +ARC + 5 +94 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +22.0846411561 + 20 +-58.4452400091 + 30 +0.0 + 40 +9.024000844277616 +100 +AcDbArc + 50 +186.3484453151 + 51 +341.402767006 + 0 +ARC + 5 +95 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +520.4377712463 + 20 +-2.9999938103 + 30 +0.0 + 40 +512.2174595125343 +100 +AcDbArc + 50 +189.2616234545 + 51 +192.1272231307 + 0 +ARC + 5 +96 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +20.6049612593 + 20 +-84.5070288601 + 30 +0.0 + 40 +5.782631817854352 +100 +AcDbArc + 50 +346.7144247298 + 51 +189.2616234545 + 0 +ARC + 5 +97 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +285.2509920374 + 20 +-146.9963536 + 30 +0.0 + 40 +266.1409554508604 +100 +AcDbArc + 50 +166.7144247298 + 51 +172.1257372948 + 0 +ARC + 5 +98 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +20.6288810153 + 20 +-110.3981509476 + 30 +0.0 + 40 +1.000000000000023 +100 +AcDbArc + 50 +192.1272231307 + 51 +352.1257372948 + 0 +CIRCLE + 5 +99 +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +21.0610957416 + 20 +-73.0835 + 30 +0.0 + 40 +1.649999999999906 + 0 +CIRCLE + 5 +9A +330 +1F +100 +AcDbEntity + 8 +0 + 6 +Continuous + 62 + 7 +370 + 25 +100 +AcDbCircle + 10 +4.65 + 20 +-6.8284271247 + 30 +0.0 + 40 +1.649999999999984 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +330 +0 +100 +AcDbDictionary +281 + 1 + 3 +ACAD_GROUP +350 +D + 3 +ACAD_LAYOUT +350 +1A + 3 +ACAD_MLINESTYLE +350 +17 + 3 +ACAD_PLOTSETTINGS +350 +19 + 3 +ACAD_PLOTSTYLENAME +350 +E + 3 +ACAD_SCALELIST +350 +47 + 3 +DWGPROPS +350 +9B + 0 +DICTIONARY + 5 +D +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 0 +DICTIONARY + 5 +1A +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +Layout1 +350 +1E + 3 +Layout2 +350 +26 + 3 +Model +350 +22 + 0 +DICTIONARY + 5 +17 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +Standard +350 +18 + 0 +DICTIONARY + 5 +19 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 0 +ACDBDICTIONARYWDFLT + 5 +E +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +Normal +350 +F +100 +AcDbDictionaryWithDefault +340 +F + 0 +DICTIONARY + 5 +47 +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbDictionary +281 + 1 + 3 +A0 +350 +48 + 3 +A1 +350 +49 + 3 +A2 +350 +4A + 3 +A3 +350 +4B + 3 +A4 +350 +4C + 3 +A5 +350 +4D + 3 +A6 +350 +4E + 3 +A7 +350 +4F + 3 +A8 +350 +50 + 3 +A9 +350 +51 + 3 +B0 +350 +52 + 3 +B1 +350 +53 + 3 +B2 +350 +54 + 3 +B3 +350 +55 + 3 +B4 +350 +56 + 3 +B5 +350 +57 + 3 +B6 +350 +58 + 3 +B7 +350 +59 + 3 +B8 +350 +5A + 3 +B9 +350 +5B + 3 +C0 +350 +5C + 3 +C1 +350 +5D + 3 +C2 +350 +5E + 3 +C3 +350 +5F + 3 +C4 +350 +60 + 3 +C5 +350 +61 + 3 +C6 +350 +62 + 3 +C7 +350 +63 + 3 +C8 +350 +64 + 3 +C9 +350 +65 + 3 +D0 +350 +66 + 3 +D1 +350 +67 + 3 +D2 +350 +68 + 0 +XRECORD + 5 +9B +102 +{ACAD_REACTORS +330 +C +102 +} +330 +C +100 +AcDbXrecord +280 + 1 + 1 +DWGPROPS COOKIE + 2 + + 3 + + 4 + + 6 + + 7 + + 8 +malin + 9 + +300 += +301 += +302 += +303 += +304 += +305 += +306 += +307 += +308 += +309 += + 40 +0.0 + 41 +2459174.59606566 + 42 +2459174.596207373 + 1 + + 90 + 0 + 0 +LAYOUT + 5 +1E +102 +{ACAD_REACTORS +330 +1A +102 +} +330 +1A +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 + 688 + 72 + 1 + 73 + 0 + 74 + 5 + 7 + + 75 + 16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 + 1 + 71 + 1 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +1.0000000000E+20 + 24 +1.0000000000E+20 + 34 +1.0000000000E+20 + 15 +-1.0000000000E+20 + 25 +-1.0000000000E+20 + 35 +-1.0000000000E+20 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 + 0 +330 +1B + 0 +LAYOUT + 5 +26 +102 +{ACAD_REACTORS +330 +1A +102 +} +330 +1A +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 + 688 + 72 + 1 + 73 + 0 + 74 + 5 + 7 + + 75 + 16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout2 + 70 + 1 + 71 + 2 + 10 +0.0 + 20 +0.0 + 11 +0.0 + 21 +0.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 + 0 +330 +23 + 0 +LAYOUT + 5 +22 +102 +{ACAD_REACTORS +330 +1A +102 +} +330 +1A +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 +ANSI_A_(11.00_x_8.50_Inches) + 6 + + 40 +6.35 + 41 +19.05 + 42 +6.35000508 + 43 +19.05000254 + 44 +279.4 + 45 +215.9 + 46 +90.6784069961 + 47 +195.77049873 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +0.0575711344 +143 +1.0 + 70 + 1696 + 72 + 0 + 73 + 0 + 74 + 0 + 7 + + 75 + 0 +147 +0.0179189148 +148 +-1300.4909072572 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 + 1 + 71 + 0 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +-146.167 + 34 +0.0 + 15 +58.3620209818 + 25 +0.0 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 + 0 +330 +1F +331 +29 + 0 +MLINESTYLE + 5 +18 +102 +{ACAD_REACTORS +330 +17 +102 +} +330 +17 +100 +AcDbMlineStyle + 2 +Standard + 70 + 0 + 3 + + 62 + 256 + 51 +90.0 + 52 +90.0 + 71 + 2 + 49 +0.5 + 62 + 256 + 6 +BYLAYER + 49 +-0.5 + 62 + 256 + 6 +BYLAYER + 0 +ACDBPLACEHOLDER + 5 +F +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E + 0 +SCALE + 5 +48 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:1 +140 +1.0 +141 +1.0 +290 + 1 + 0 +SCALE + 5 +49 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:2 +140 +1.0 +141 +2.0 +290 + 0 + 0 +SCALE + 5 +4A +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:4 +140 +1.0 +141 +4.0 +290 + 0 + 0 +SCALE + 5 +4B +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:5 +140 +1.0 +141 +5.0 +290 + 0 + 0 +SCALE + 5 +4C +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:8 +140 +1.0 +141 +8.0 +290 + 0 + 0 +SCALE + 5 +4D +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:10 +140 +1.0 +141 +10.0 +290 + 0 + 0 +SCALE + 5 +4E +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:16 +140 +1.0 +141 +16.0 +290 + 0 + 0 +SCALE + 5 +4F +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:20 +140 +1.0 +141 +20.0 +290 + 0 + 0 +SCALE + 5 +50 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:30 +140 +1.0 +141 +30.0 +290 + 0 + 0 +SCALE + 5 +51 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:40 +140 +1.0 +141 +40.0 +290 + 0 + 0 +SCALE + 5 +52 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:50 +140 +1.0 +141 +50.0 +290 + 0 + 0 +SCALE + 5 +53 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1:100 +140 +1.0 +141 +100.0 +290 + 0 + 0 +SCALE + 5 +54 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +2:1 +140 +2.0 +141 +1.0 +290 + 0 + 0 +SCALE + 5 +55 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +4:1 +140 +4.0 +141 +1.0 +290 + 0 + 0 +SCALE + 5 +56 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +8:1 +140 +8.0 +141 +1.0 +290 + 0 + 0 +SCALE + 5 +57 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +10:1 +140 +10.0 +141 +1.0 +290 + 0 + 0 +SCALE + 5 +58 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +100:1 +140 +100.0 +141 +1.0 +290 + 0 + 0 +SCALE + 5 +59 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1/128" = 1'-0" +140 +0.0078125 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5A +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1/64" = 1'-0" +140 +0.015625 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5B +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1/32" = 1'-0" +140 +0.03125 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5C +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1/16" = 1'-0" +140 +0.0625 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5D +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +3/32" = 1'-0" +140 +0.09375 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5E +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1/8" = 1'-0" +140 +0.125 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5F +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +3/16" = 1'-0" +140 +0.1875 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +60 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1/4" = 1'-0" +140 +0.25 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +61 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +3/8" = 1'-0" +140 +0.375 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +62 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1/2" = 1'-0" +140 +0.5 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +63 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +3/4" = 1'-0" +140 +0.75 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +64 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1" = 1'-0" +140 +1.0 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +65 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1-1/2" = 1'-0" +140 +1.5 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +66 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +3" = 1'-0" +140 +3.0 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +67 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +6" = 1'-0" +140 +6.0 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +68 +102 +{ACAD_REACTORS +330 +47 +102 +} +330 +47 +100 +AcDbScale + 70 + 0 +300 +1'-0" = 1'-0" +140 +12.0 +141 +12.0 +290 + 0 + 0 +ENDSEC + 0 +EOF diff --git a/docs/assets/dxf/4.2/big_leg.png b/docs/assets/dxf/4.2/big_leg.png new file mode 100644 index 00000000..ccfedf4d Binary files /dev/null and b/docs/assets/dxf/4.2/big_leg.png differ diff --git a/docs/assets/easytofly/logo.png b/docs/assets/easytofly/logo.png new file mode 100644 index 00000000..653e2746 Binary files /dev/null and b/docs/assets/easytofly/logo.png differ diff --git a/docs/assets/easytofly/pcb_scan.jpg b/docs/assets/easytofly/pcb_scan.jpg new file mode 100644 index 00000000..db3b5874 Binary files /dev/null and b/docs/assets/easytofly/pcb_scan.jpg differ diff --git a/docs/assets/easytofly/sensors.jpg b/docs/assets/easytofly/sensors.jpg new file mode 100644 index 00000000..de5bb1b3 Binary files /dev/null and b/docs/assets/easytofly/sensors.jpg differ diff --git a/docs/assets/field.jpg b/docs/assets/field.jpg new file mode 100644 index 00000000..22d4999d Binary files /dev/null and b/docs/assets/field.jpg differ diff --git a/docs/assets/field2.jpg b/docs/assets/field2.jpg new file mode 100644 index 00000000..046f2799 Binary files /dev/null and b/docs/assets/field2.jpg differ diff --git a/docs/assets/fpv/fpv_1.png b/docs/assets/fpv/fpv_1.png new file mode 100644 index 00000000..944ed059 Binary files /dev/null and b/docs/assets/fpv/fpv_1.png differ diff --git a/docs/assets/fpv/fpv_10.png b/docs/assets/fpv/fpv_10.png new file mode 100644 index 00000000..bda4e578 Binary files /dev/null and b/docs/assets/fpv/fpv_10.png differ diff --git a/docs/assets/fpv/fpv_11.png b/docs/assets/fpv/fpv_11.png new file mode 100644 index 00000000..c094457b Binary files /dev/null and b/docs/assets/fpv/fpv_11.png differ diff --git a/docs/assets/fpv/fpv_12.png b/docs/assets/fpv/fpv_12.png new file mode 100644 index 00000000..5489c97a Binary files /dev/null and b/docs/assets/fpv/fpv_12.png differ diff --git a/docs/assets/fpv/fpv_13.png b/docs/assets/fpv/fpv_13.png new file mode 100644 index 00000000..a4b083a8 Binary files /dev/null and b/docs/assets/fpv/fpv_13.png differ diff --git a/docs/assets/fpv/fpv_14.png b/docs/assets/fpv/fpv_14.png new file mode 100644 index 00000000..8bd0350a Binary files /dev/null and b/docs/assets/fpv/fpv_14.png differ diff --git a/docs/assets/fpv/fpv_15.png b/docs/assets/fpv/fpv_15.png new file mode 100644 index 00000000..7d9e4e28 Binary files /dev/null and b/docs/assets/fpv/fpv_15.png differ diff --git a/docs/assets/fpv/fpv_16.png b/docs/assets/fpv/fpv_16.png new file mode 100644 index 00000000..10ab54d4 Binary files /dev/null and b/docs/assets/fpv/fpv_16.png differ diff --git a/docs/assets/fpv/fpv_17.png b/docs/assets/fpv/fpv_17.png new file mode 100644 index 00000000..77df25cf Binary files /dev/null and b/docs/assets/fpv/fpv_17.png differ diff --git a/docs/assets/fpv/fpv_18.png b/docs/assets/fpv/fpv_18.png new file mode 100644 index 00000000..2be52e1d Binary files /dev/null and b/docs/assets/fpv/fpv_18.png differ diff --git a/docs/assets/fpv/fpv_19.png b/docs/assets/fpv/fpv_19.png new file mode 100644 index 00000000..f09e6df4 Binary files /dev/null and b/docs/assets/fpv/fpv_19.png differ diff --git a/docs/assets/fpv/fpv_2.png b/docs/assets/fpv/fpv_2.png new file mode 100644 index 00000000..409f8da8 Binary files /dev/null and b/docs/assets/fpv/fpv_2.png differ diff --git a/docs/assets/fpv/fpv_20.png b/docs/assets/fpv/fpv_20.png new file mode 100644 index 00000000..771ae89a Binary files /dev/null and b/docs/assets/fpv/fpv_20.png differ diff --git a/docs/assets/fpv/fpv_21.png b/docs/assets/fpv/fpv_21.png new file mode 100644 index 00000000..50c45974 Binary files /dev/null and b/docs/assets/fpv/fpv_21.png differ diff --git a/docs/assets/fpv/fpv_22.png b/docs/assets/fpv/fpv_22.png new file mode 100644 index 00000000..22ea26e3 Binary files /dev/null and b/docs/assets/fpv/fpv_22.png differ diff --git a/docs/assets/fpv/fpv_3.png b/docs/assets/fpv/fpv_3.png new file mode 100644 index 00000000..11d5e95f Binary files /dev/null and b/docs/assets/fpv/fpv_3.png differ diff --git a/docs/assets/fpv/fpv_4.png b/docs/assets/fpv/fpv_4.png new file mode 100644 index 00000000..2506c974 Binary files /dev/null and b/docs/assets/fpv/fpv_4.png differ diff --git a/docs/assets/fpv/fpv_5.png b/docs/assets/fpv/fpv_5.png new file mode 100644 index 00000000..3bf78e79 Binary files /dev/null and b/docs/assets/fpv/fpv_5.png differ diff --git a/docs/assets/fpv/fpv_6.png b/docs/assets/fpv/fpv_6.png new file mode 100644 index 00000000..44bb8bcd Binary files /dev/null and b/docs/assets/fpv/fpv_6.png differ diff --git a/docs/assets/fpv/fpv_7.png b/docs/assets/fpv/fpv_7.png new file mode 100644 index 00000000..afc6417b Binary files /dev/null and b/docs/assets/fpv/fpv_7.png differ diff --git a/docs/assets/fpv/fpv_8.png b/docs/assets/fpv/fpv_8.png new file mode 100644 index 00000000..4821e832 Binary files /dev/null and b/docs/assets/fpv/fpv_8.png differ diff --git a/docs/assets/fpv/fpv_9.png b/docs/assets/fpv/fpv_9.png new file mode 100644 index 00000000..bb8086c0 Binary files /dev/null and b/docs/assets/fpv/fpv_9.png differ diff --git a/docs/assets/generative-design-frame/f.JPG b/docs/assets/generative-design-frame/f.JPG new file mode 100644 index 00000000..4ebd6ab9 Binary files /dev/null and b/docs/assets/generative-design-frame/f.JPG differ diff --git a/docs/assets/generative-design-frame/obstacle.png b/docs/assets/generative-design-frame/obstacle.png new file mode 100644 index 00000000..16e0f1f0 Binary files /dev/null and b/docs/assets/generative-design-frame/obstacle.png differ diff --git a/docs/assets/generative-design-frame/p1.JPG b/docs/assets/generative-design-frame/p1.JPG new file mode 100644 index 00000000..d1d96a60 Binary files /dev/null and b/docs/assets/generative-design-frame/p1.JPG differ diff --git a/docs/assets/generative-design-frame/p21.JPG b/docs/assets/generative-design-frame/p21.JPG new file mode 100644 index 00000000..dc0b2dde Binary files /dev/null and b/docs/assets/generative-design-frame/p21.JPG differ diff --git a/docs/assets/generative-design-frame/p22.jpg b/docs/assets/generative-design-frame/p22.jpg new file mode 100644 index 00000000..495a20e2 Binary files /dev/null and b/docs/assets/generative-design-frame/p22.jpg differ diff --git a/docs/assets/generative-design-frame/p23.jpg b/docs/assets/generative-design-frame/p23.jpg new file mode 100644 index 00000000..f33a839a Binary files /dev/null and b/docs/assets/generative-design-frame/p23.jpg differ diff --git a/docs/assets/generative-design-frame/p31.jpg b/docs/assets/generative-design-frame/p31.jpg new file mode 100644 index 00000000..1a5bae62 Binary files /dev/null and b/docs/assets/generative-design-frame/p31.jpg differ diff --git a/docs/assets/generative-design-frame/p32.jpg b/docs/assets/generative-design-frame/p32.jpg new file mode 100644 index 00000000..b1a22ab9 Binary files /dev/null and b/docs/assets/generative-design-frame/p32.jpg differ diff --git a/docs/assets/generative-design-frame/preservedgeometry.png b/docs/assets/generative-design-frame/preservedgeometry.png new file mode 100644 index 00000000..0baf42b5 Binary files /dev/null and b/docs/assets/generative-design-frame/preservedgeometry.png differ diff --git a/docs/assets/magnet_grip/magnet1.png b/docs/assets/magnet_grip/magnet1.png new file mode 100644 index 00000000..13e952c6 Binary files /dev/null and b/docs/assets/magnet_grip/magnet1.png differ diff --git a/docs/assets/magnet_grip/magnet2.png b/docs/assets/magnet_grip/magnet2.png new file mode 100644 index 00000000..6d6f082b Binary files /dev/null and b/docs/assets/magnet_grip/magnet2.png differ diff --git a/docs/assets/magnet_grip/magnet3.png b/docs/assets/magnet_grip/magnet3.png new file mode 100644 index 00000000..7db10d0d Binary files /dev/null and b/docs/assets/magnet_grip/magnet3.png differ diff --git a/docs/assets/magnet_grip/magnet4.png b/docs/assets/magnet_grip/magnet4.png new file mode 100644 index 00000000..93052dee Binary files /dev/null and b/docs/assets/magnet_grip/magnet4.png differ diff --git a/docs/assets/magnet_grip/magnet5.png b/docs/assets/magnet_grip/magnet5.png new file mode 100644 index 00000000..1cf1968e Binary files /dev/null and b/docs/assets/magnet_grip/magnet5.png differ diff --git a/docs/assets/magnet_grip/magnet_arduino1.png b/docs/assets/magnet_grip/magnet_arduino1.png new file mode 100644 index 00000000..6debcfda Binary files /dev/null and b/docs/assets/magnet_grip/magnet_arduino1.png differ diff --git a/docs/assets/magnet_grip/magnet_arduino2.png b/docs/assets/magnet_grip/magnet_arduino2.png new file mode 100644 index 00000000..7b08dab7 Binary files /dev/null and b/docs/assets/magnet_grip/magnet_arduino2.png differ diff --git a/docs/assets/magnet_grip/magnet_check.png b/docs/assets/magnet_grip/magnet_check.png new file mode 100644 index 00000000..6655bba9 Binary files /dev/null and b/docs/assets/magnet_grip/magnet_check.png differ diff --git a/docs/assets/magnet_grip/magnet_raspberry.png b/docs/assets/magnet_grip/magnet_raspberry.png new file mode 100644 index 00000000..ea0d222c Binary files /dev/null and b/docs/assets/magnet_grip/magnet_raspberry.png differ diff --git a/docs/assets/magnet_grip/scheme.jpg b/docs/assets/magnet_grip/scheme.jpg new file mode 100644 index 00000000..c1f6e606 Binary files /dev/null and b/docs/assets/magnet_grip/scheme.jpg differ diff --git a/docs/assets/mechanical_grip/mech_grip_1.png b/docs/assets/mechanical_grip/mech_grip_1.png new file mode 100644 index 00000000..c10e8ef7 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_1.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_10.png b/docs/assets/mechanical_grip/mech_grip_10.png new file mode 100644 index 00000000..0cc3d349 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_10.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_11.png b/docs/assets/mechanical_grip/mech_grip_11.png new file mode 100644 index 00000000..77e69463 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_11.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_12.png b/docs/assets/mechanical_grip/mech_grip_12.png new file mode 100644 index 00000000..f86d76ac Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_12.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_13.png b/docs/assets/mechanical_grip/mech_grip_13.png new file mode 100644 index 00000000..ae19a563 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_13.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_14.png b/docs/assets/mechanical_grip/mech_grip_14.png new file mode 100644 index 00000000..6cb0d3ce Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_14.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_15.png b/docs/assets/mechanical_grip/mech_grip_15.png new file mode 100644 index 00000000..732e4481 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_15.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_16.png b/docs/assets/mechanical_grip/mech_grip_16.png new file mode 100644 index 00000000..b520e34c Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_16.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_17.png b/docs/assets/mechanical_grip/mech_grip_17.png new file mode 100644 index 00000000..a89e1869 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_17.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_2.png b/docs/assets/mechanical_grip/mech_grip_2.png new file mode 100644 index 00000000..61067dc7 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_2.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_3.png b/docs/assets/mechanical_grip/mech_grip_3.png new file mode 100644 index 00000000..9abb7762 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_3.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_4.png b/docs/assets/mechanical_grip/mech_grip_4.png new file mode 100644 index 00000000..d423a9b6 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_4.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_5.png b/docs/assets/mechanical_grip/mech_grip_5.png new file mode 100644 index 00000000..dbb6216b Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_5.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_6.png b/docs/assets/mechanical_grip/mech_grip_6.png new file mode 100644 index 00000000..98dfea18 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_6.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_7.png b/docs/assets/mechanical_grip/mech_grip_7.png new file mode 100644 index 00000000..50a5d9ea Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_7.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_8.png b/docs/assets/mechanical_grip/mech_grip_8.png new file mode 100644 index 00000000..2397c63e Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_8.png differ diff --git a/docs/assets/mechanical_grip/mech_grip_9.png b/docs/assets/mechanical_grip/mech_grip_9.png new file mode 100644 index 00000000..2f5e1739 Binary files /dev/null and b/docs/assets/mechanical_grip/mech_grip_9.png differ diff --git a/docs/assets/oktapadzog/24-5.jpg b/docs/assets/oktapadzog/24-5.jpg new file mode 100644 index 00000000..7ff87fed Binary files /dev/null and b/docs/assets/oktapadzog/24-5.jpg differ diff --git a/docs/assets/oktapadzog/Pixhawk.png b/docs/assets/oktapadzog/Pixhawk.png new file mode 100644 index 00000000..d8d1d7c2 Binary files /dev/null and b/docs/assets/oktapadzog/Pixhawk.png differ diff --git a/docs/assets/oktapadzog/frame_assembly_4.png b/docs/assets/oktapadzog/frame_assembly_4.png new file mode 100644 index 00000000..6200800f Binary files /dev/null and b/docs/assets/oktapadzog/frame_assembly_4.png differ diff --git a/docs/assets/oktapadzog/image.gif b/docs/assets/oktapadzog/image.gif new file mode 100644 index 00000000..9fd6ed7e Binary files /dev/null and b/docs/assets/oktapadzog/image.gif differ diff --git a/docs/assets/oktapadzog/octo.png b/docs/assets/oktapadzog/octo.png new file mode 100644 index 00000000..cf5af61d Binary files /dev/null and b/docs/assets/oktapadzog/octo.png differ diff --git a/docs/assets/qgc-battery.png b/docs/assets/qgc-battery.png deleted file mode 100644 index 249aca2b..00000000 Binary files a/docs/assets/qgc-battery.png and /dev/null differ diff --git a/docs/assets/qgc-cal-acc.png b/docs/assets/qgc-cal-acc.png index fd0712bf..00976f27 100644 Binary files a/docs/assets/qgc-cal-acc.png and b/docs/assets/qgc-cal-acc.png differ diff --git a/docs/assets/qgc-cal-compass.png b/docs/assets/qgc-cal-compass.png index 75499d49..6f171f28 100644 Binary files a/docs/assets/qgc-cal-compass.png and b/docs/assets/qgc-cal-compass.png differ diff --git a/docs/assets/qgc-cal-gyro.png b/docs/assets/qgc-cal-gyro.png index c0aa72e3..34af9ead 100644 Binary files a/docs/assets/qgc-cal-gyro.png and b/docs/assets/qgc-cal-gyro.png differ diff --git a/docs/assets/qgc-cal-level.png b/docs/assets/qgc-cal-level.png index fb71ae95..90575f83 100644 Binary files a/docs/assets/qgc-cal-level.png and b/docs/assets/qgc-cal-level.png differ diff --git a/docs/assets/qgc-esc.png b/docs/assets/qgc-esc.png deleted file mode 100644 index 034f94b5..00000000 Binary files a/docs/assets/qgc-esc.png and /dev/null differ diff --git a/docs/assets/qgc-failsafe.png b/docs/assets/qgc-failsafe.png index 610ad59d..048f6121 100644 Binary files a/docs/assets/qgc-failsafe.png and b/docs/assets/qgc-failsafe.png differ diff --git a/docs/assets/qgc-firmware.png b/docs/assets/qgc-firmware.png index dc8f9a1d..d45e3d5a 100644 Binary files a/docs/assets/qgc-firmware.png and b/docs/assets/qgc-firmware.png differ diff --git a/docs/assets/qgc-frame-apply-clover4.png b/docs/assets/qgc-frame-apply-clover4.png new file mode 100644 index 00000000..0a7bbbe7 Binary files /dev/null and b/docs/assets/qgc-frame-apply-clover4.png differ diff --git a/docs/assets/qgc-frame-apply.png b/docs/assets/qgc-frame-apply.png deleted file mode 100644 index da1bcff4..00000000 Binary files a/docs/assets/qgc-frame-apply.png and /dev/null differ diff --git a/docs/assets/qgc-modes.png b/docs/assets/qgc-modes.png index afa7b1de..1650d9b2 100644 Binary files a/docs/assets/qgc-modes.png and b/docs/assets/qgc-modes.png differ diff --git a/docs/assets/qgc-parameters.png b/docs/assets/qgc-parameters.png index db609833..13d973e2 100644 Binary files a/docs/assets/qgc-parameters.png and b/docs/assets/qgc-parameters.png differ diff --git a/docs/assets/qgc-power.png b/docs/assets/qgc-power.png new file mode 100644 index 00000000..2dda85ee Binary files /dev/null and b/docs/assets/qgc-power.png differ diff --git a/docs/assets/qgc-radio.png b/docs/assets/qgc-radio.png index 5b48a74a..4bba3c32 100644 Binary files a/docs/assets/qgc-radio.png and b/docs/assets/qgc-radio.png differ diff --git a/docs/assets/qgc-requires-setup.png b/docs/assets/qgc-requires-setup.png index b236f9d9..b5bdc7c9 100644 Binary files a/docs/assets/qgc-requires-setup.png and b/docs/assets/qgc-requires-setup.png differ diff --git a/docs/assets/qgc-voltage-divider.png b/docs/assets/qgc-voltage-divider.png new file mode 100644 index 00000000..54e2f808 Binary files /dev/null and b/docs/assets/qgc-voltage-divider.png differ diff --git a/docs/assets/qgc.png b/docs/assets/qgc.png index 8f1fefd4..741c9712 100644 Binary files a/docs/assets/qgc.png and b/docs/assets/qgc.png differ diff --git a/docs/assets/race_timing_sys_copterhack/diagram.jpg b/docs/assets/race_timing_sys_copterhack/diagram.jpg new file mode 100644 index 00000000..d5c1d27e Binary files /dev/null and b/docs/assets/race_timing_sys_copterhack/diagram.jpg differ diff --git a/docs/assets/race_timing_sys_copterhack/set_noise.jpg b/docs/assets/race_timing_sys_copterhack/set_noise.jpg new file mode 100644 index 00000000..d2d45768 Binary files /dev/null and b/docs/assets/race_timing_sys_copterhack/set_noise.jpg differ diff --git a/docs/assets/race_timing_sys_copterhack/system_work.png b/docs/assets/race_timing_sys_copterhack/system_work.png new file mode 100644 index 00000000..c98d3315 Binary files /dev/null and b/docs/assets/race_timing_sys_copterhack/system_work.png differ diff --git a/docs/assets/seeding_drone/electronicspictures/electronic1.png b/docs/assets/seeding_drone/electronicspictures/electronic1.png new file mode 100644 index 00000000..956a4a83 Binary files /dev/null and b/docs/assets/seeding_drone/electronicspictures/electronic1.png differ diff --git a/docs/assets/seeding_drone/electronicspictures/electronic2.png b/docs/assets/seeding_drone/electronicspictures/electronic2.png new file mode 100644 index 00000000..955228b5 Binary files /dev/null and b/docs/assets/seeding_drone/electronicspictures/electronic2.png differ diff --git a/docs/assets/seeding_drone/image.jpg b/docs/assets/seeding_drone/image.jpg new file mode 100644 index 00000000..c4788e5f Binary files /dev/null and b/docs/assets/seeding_drone/image.jpg differ diff --git a/docs/assets/seeding_drone/mechanismpictures/1.PNG b/docs/assets/seeding_drone/mechanismpictures/1.PNG new file mode 100644 index 00000000..791d5357 Binary files /dev/null and b/docs/assets/seeding_drone/mechanismpictures/1.PNG differ diff --git a/docs/assets/seeding_drone/mechanismpictures/2.PNG b/docs/assets/seeding_drone/mechanismpictures/2.PNG new file mode 100644 index 00000000..385293cb Binary files /dev/null and b/docs/assets/seeding_drone/mechanismpictures/2.PNG differ diff --git a/docs/assets/seeding_drone/mechanismpictures/3.PNG b/docs/assets/seeding_drone/mechanismpictures/3.PNG new file mode 100644 index 00000000..f7bd7c6b Binary files /dev/null and b/docs/assets/seeding_drone/mechanismpictures/3.PNG differ diff --git a/docs/assets/seeding_drone/mechanismpictures/4.PNG b/docs/assets/seeding_drone/mechanismpictures/4.PNG new file mode 100644 index 00000000..301c34de Binary files /dev/null and b/docs/assets/seeding_drone/mechanismpictures/4.PNG differ diff --git a/docs/assets/seeding_drone/mechanismpictures/5.PNG b/docs/assets/seeding_drone/mechanismpictures/5.PNG new file mode 100644 index 00000000..6eae8b19 Binary files /dev/null and b/docs/assets/seeding_drone/mechanismpictures/5.PNG differ diff --git a/docs/assets/seeding_drone/mechanismpictures/6.jpg b/docs/assets/seeding_drone/mechanismpictures/6.jpg new file mode 100644 index 00000000..9eceeb91 Binary files /dev/null and b/docs/assets/seeding_drone/mechanismpictures/6.jpg differ diff --git a/docs/assets/seeding_drone/mechanismpictures/7.jpg b/docs/assets/seeding_drone/mechanismpictures/7.jpg new file mode 100644 index 00000000..51a2822b Binary files /dev/null and b/docs/assets/seeding_drone/mechanismpictures/7.jpg differ diff --git a/docs/assets/seeding_drone/mechanismpictures/8.jpg b/docs/assets/seeding_drone/mechanismpictures/8.jpg new file mode 100644 index 00000000..c84eb854 Binary files /dev/null and b/docs/assets/seeding_drone/mechanismpictures/8.jpg differ diff --git a/docs/assets/seeding_drone/seedcapsules/1.jpg b/docs/assets/seeding_drone/seedcapsules/1.jpg new file mode 100644 index 00000000..40a7e22e Binary files /dev/null and b/docs/assets/seeding_drone/seedcapsules/1.jpg differ diff --git a/docs/assets/seeding_drone/seedcapsules/2.jpg b/docs/assets/seeding_drone/seedcapsules/2.jpg new file mode 100644 index 00000000..d05cc73f Binary files /dev/null and b/docs/assets/seeding_drone/seedcapsules/2.jpg differ diff --git a/docs/assets/seeding_drone/seedcapsules/3.jpg b/docs/assets/seeding_drone/seedcapsules/3.jpg new file mode 100644 index 00000000..4fa73dbf Binary files /dev/null and b/docs/assets/seeding_drone/seedcapsules/3.jpg differ diff --git a/docs/assets/zaural_viking/1.jpg b/docs/assets/zaural_viking/1.jpg new file mode 100644 index 00000000..dc1ea58f Binary files /dev/null and b/docs/assets/zaural_viking/1.jpg differ diff --git a/docs/assets/zaural_viking/2.jpg b/docs/assets/zaural_viking/2.jpg new file mode 100644 index 00000000..2afba92a Binary files /dev/null and b/docs/assets/zaural_viking/2.jpg differ diff --git a/docs/assets/zaural_viking/3.jpg b/docs/assets/zaural_viking/3.jpg new file mode 100644 index 00000000..bf660863 Binary files /dev/null and b/docs/assets/zaural_viking/3.jpg differ diff --git a/docs/assets/zaural_viking/4.jpg b/docs/assets/zaural_viking/4.jpg new file mode 100644 index 00000000..23900bb3 Binary files /dev/null and b/docs/assets/zaural_viking/4.jpg differ diff --git a/docs/assets/zaural_viking/5.jpg b/docs/assets/zaural_viking/5.jpg new file mode 100644 index 00000000..c5ccc5ae Binary files /dev/null and b/docs/assets/zaural_viking/5.jpg differ diff --git a/docs/assets/zaural_viking/6.jpg b/docs/assets/zaural_viking/6.jpg new file mode 100644 index 00000000..a695d3c3 Binary files /dev/null and b/docs/assets/zaural_viking/6.jpg differ diff --git a/docs/assets/zaural_viking/7.jpg b/docs/assets/zaural_viking/7.jpg new file mode 100644 index 00000000..01bbe381 Binary files /dev/null and b/docs/assets/zaural_viking/7.jpg differ diff --git a/docs/assets/zaural_viking/8.jpg b/docs/assets/zaural_viking/8.jpg new file mode 100644 index 00000000..9331dd51 Binary files /dev/null and b/docs/assets/zaural_viking/8.jpg differ diff --git a/docs/assets/zerotire/download_1.png b/docs/assets/zerotire/download_1.png new file mode 100644 index 00000000..fdbc408e Binary files /dev/null and b/docs/assets/zerotire/download_1.png differ diff --git a/docs/assets/zerotire/download_2.png b/docs/assets/zerotire/download_2.png new file mode 100644 index 00000000..8ee2b429 Binary files /dev/null and b/docs/assets/zerotire/download_2.png differ diff --git a/docs/assets/zerotire/ios_1.png b/docs/assets/zerotire/ios_1.png new file mode 100644 index 00000000..2e98b09b Binary files /dev/null and b/docs/assets/zerotire/ios_1.png differ diff --git a/docs/assets/zerotire/ios_2.png b/docs/assets/zerotire/ios_2.png new file mode 100644 index 00000000..f68457d8 Binary files /dev/null and b/docs/assets/zerotire/ios_2.png differ diff --git a/docs/assets/zerotire/ios_3.png b/docs/assets/zerotire/ios_3.png new file mode 100644 index 00000000..73390a45 Binary files /dev/null and b/docs/assets/zerotire/ios_3.png differ diff --git a/docs/assets/zerotire/ios_4.png b/docs/assets/zerotire/ios_4.png new file mode 100644 index 00000000..d2bcbd4c Binary files /dev/null and b/docs/assets/zerotire/ios_4.png differ diff --git a/docs/assets/zerotire/ios_5.png b/docs/assets/zerotire/ios_5.png new file mode 100644 index 00000000..23e4e79a Binary files /dev/null and b/docs/assets/zerotire/ios_5.png differ diff --git a/docs/assets/zerotire/linux_1.png b/docs/assets/zerotire/linux_1.png new file mode 100644 index 00000000..9d9a8807 Binary files /dev/null and b/docs/assets/zerotire/linux_1.png differ diff --git a/docs/assets/zerotire/login_1.png b/docs/assets/zerotire/login_1.png new file mode 100644 index 00000000..e715909a Binary files /dev/null and b/docs/assets/zerotire/login_1.png differ diff --git a/docs/assets/zerotire/login_2.png b/docs/assets/zerotire/login_2.png new file mode 100644 index 00000000..97aff023 Binary files /dev/null and b/docs/assets/zerotire/login_2.png differ diff --git a/docs/assets/zerotire/macos_1.png b/docs/assets/zerotire/macos_1.png new file mode 100644 index 00000000..01dd03f5 Binary files /dev/null and b/docs/assets/zerotire/macos_1.png differ diff --git a/docs/assets/zerotire/macos_2.png b/docs/assets/zerotire/macos_2.png new file mode 100644 index 00000000..94bba11d Binary files /dev/null and b/docs/assets/zerotire/macos_2.png differ diff --git a/docs/assets/zerotire/network_1.png b/docs/assets/zerotire/network_1.png new file mode 100644 index 00000000..ab46f9cd Binary files /dev/null and b/docs/assets/zerotire/network_1.png differ diff --git a/docs/assets/zerotire/network_2.png b/docs/assets/zerotire/network_2.png new file mode 100644 index 00000000..36ed550b Binary files /dev/null and b/docs/assets/zerotire/network_2.png differ diff --git a/docs/assets/zerotire/network_3.png b/docs/assets/zerotire/network_3.png new file mode 100644 index 00000000..8aaeb88a Binary files /dev/null and b/docs/assets/zerotire/network_3.png differ diff --git a/docs/assets/zerotire/network_4.png b/docs/assets/zerotire/network_4.png new file mode 100644 index 00000000..6deb58c3 Binary files /dev/null and b/docs/assets/zerotire/network_4.png differ diff --git a/docs/assets/zerotire/network_5.png b/docs/assets/zerotire/network_5.png new file mode 100644 index 00000000..02efc99e Binary files /dev/null and b/docs/assets/zerotire/network_5.png differ diff --git a/docs/assets/zerotire/network_6.png b/docs/assets/zerotire/network_6.png new file mode 100644 index 00000000..f210315b Binary files /dev/null and b/docs/assets/zerotire/network_6.png differ diff --git a/docs/assets/zerotire/qgc_1.png b/docs/assets/zerotire/qgc_1.png new file mode 100644 index 00000000..34128cb9 Binary files /dev/null and b/docs/assets/zerotire/qgc_1.png differ diff --git a/docs/assets/zerotire/qgc_2.png b/docs/assets/zerotire/qgc_2.png new file mode 100644 index 00000000..5ce0ec82 Binary files /dev/null and b/docs/assets/zerotire/qgc_2.png differ diff --git a/docs/assets/zerotire/qgc_3.png b/docs/assets/zerotire/qgc_3.png new file mode 100644 index 00000000..0b800984 Binary files /dev/null and b/docs/assets/zerotire/qgc_3.png differ diff --git a/docs/assets/zerotire/windows_1.png b/docs/assets/zerotire/windows_1.png new file mode 100644 index 00000000..3e8dd6c7 Binary files /dev/null and b/docs/assets/zerotire/windows_1.png differ diff --git a/docs/assets/zerotire/windows_2.png b/docs/assets/zerotire/windows_2.png new file mode 100644 index 00000000..05090bdb Binary files /dev/null and b/docs/assets/zerotire/windows_2.png differ diff --git a/docs/assets/zerotire/windows_3.png b/docs/assets/zerotire/windows_3.png new file mode 100644 index 00000000..6d953313 Binary files /dev/null and b/docs/assets/zerotire/windows_3.png differ diff --git a/docs/assets/zerotire/windows_4.png b/docs/assets/zerotire/windows_4.png new file mode 100644 index 00000000..b063c37e Binary files /dev/null and b/docs/assets/zerotire/windows_4.png differ diff --git a/docs/assets/zerotire/windows_5.png b/docs/assets/zerotire/windows_5.png new file mode 100644 index 00000000..d31431d7 Binary files /dev/null and b/docs/assets/zerotire/windows_5.png differ diff --git a/docs/clover.css b/docs/clover.css index 448fb205..3ccfe498 100644 --- a/docs/clover.css +++ b/docs/clover.css @@ -40,13 +40,9 @@ section ul li:before { margin-bottom: 0.85em; } -/* Main Clover image */ -.book img.bigclever { - margin-bottom: -12%; -} -.book.color-theme-2 img.bigclever { +.book.color-theme-2 img.big-clover { /* change image for black background */ - content:url(assets/clever4-front-black-large.png); + content:url(assets/clover42-black.png); } footer { diff --git a/docs/clover.js b/docs/clover.js index c984e6d1..bfe56225 100644 --- a/docs/clover.js +++ b/docs/clover.js @@ -8,7 +8,7 @@ gitbook.events.bind('page.change', function() { // look for stable release let stable; for (let release of data) { - let clever = release.name.indexOf('clever') != -1; + let clever = (release.name.indexOf('clover') != -1) || (release.name.indexOf('clever') != -1); if (clever && !release.prerelease && !release.draft) { stable = release; break; diff --git a/docs/en/FOOTER.md b/docs/en/FOOTER.md index a2c59473..6c1dfac3 100644 --- a/docs/en/FOOTER.md +++ b/docs/en/FOOTER.md @@ -1,4 +1,4 @@ -This documentation is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. +This documentation is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. diff --git a/docs/en/README.md b/docs/en/README.md index 0ec19f10..940eed4b 100644 --- a/docs/en/README.md +++ b/docs/en/README.md @@ -1,10 +1,10 @@ # COEX Clover -COEX Clover 4 +Clover 4.2 **Clover** is an educational kit of a programmable quadcopter that consists of popular open source components, and a set of necessary documentation and libraries for working with it. -The kit includes a Pixhawk/Pixracer flight controller with the PX4 flight stack, a [Raspberry Pi 4](raspberry.md) as a controlling onboard computer, and a [camera module](camera.md) for performing flights with the use of computer vision, as well as a set of various sensors and other peripherals. +The kit includes a [COEX Pix](coex_pix.md) flight controller with the PX4 flight stack, a [Raspberry Pi 4](raspberry.md) as a controlling onboard computer, and a [camera module](camera.md) for performing flights with the use of computer vision, as well as a set of various sensors and other peripherals. The Clover platform contains a [pre-configured image for Raspberry Pi](image.md) with the full set of required software for working with peripheral devices and [programming autonomous flights](simple_offboard.md). The source code of the platform and of the documentation is open and [available on GitHub](https://github.com/CopterExpress/clover). diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index 2d7466f9..124bd800 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -54,13 +54,17 @@ * [MAVROS](mavros.md) * [Supplementary materials](supplementary.md) * [COEX Pix](coex_pix.md) + * [COEX PDB](coex_pdb.md) + * [COEX GPS](coex_gps.md) * [Guide on autonomous flight](auto_setup.md) * [Hostname](hostname.md) * [PX4 Simulation](sitl.md) + * [Navigation using vertical ArUco-markers](wall_aruco.md) * [PID Setup](calibratePID.md) * [Model files for parts](models.md) * [ROS Melodic installation](ros-install.md) * [Camera calibration](camera_calibration.md) + * [VPN ZeroTire Connection](zerotire_vpn.md) * [Quadcopter control with 4G communication](4g.md) * [Clover and Jetson Nano](jetson_nano.md) * [Remote control app](rc.md) @@ -76,7 +80,10 @@ * [Interfacing with Arduino](arduino.md) * [Connecting GPS](gps.md) * [Working with IR sensors](ir_sensors.md) - * [FPV Setup](fpv.md) + * [FPV Setup](fpv_clover_4_2.md) + * [FPV Setup (Clover 3)](fpv.md) + * [Magnetic grip](magnetic_grip.md) + * [Mechanical grip](mechanical_grip.md) * [Trainer mode](trainer_mode.md) * [Tinning](tinning.md) * [Types of power connectors](connectortypes.md) @@ -86,7 +93,13 @@ * [Contribution Guidelines](contributing.md) * [Migration to v0.20](migrate20.md) * [Migration to v0.22](migrate22.md) +* [Events](events.md) + * [CopterHack-2021](copterhack2021.md) + * [CopterHack-2019](copterhack2019.md) + * [CopterHack-2018](copterhack2018.md) + * [CopterHack-2017](copterhack2017.md) * [Clover-based projects](projects.md) + * [Autonomous Multirotor Landing System (AMLS)](amls.md) * [Drone show](clever-show.md) * [Innopolis Open 2020 (L22_Γ†RO)](innopolis_open_L22_AERO.md) * [Copter spheric guard](shield.md) @@ -94,8 +107,13 @@ * [Android RC app](android.md) * [3D-scanning drone](3dscan.md) * [Human pose estimation drone control](human_pose_estimation_drone_control.md) - * [Copter Hack 2019](copterhack2019.md) - * [Copter Hack 2018](copterhack2018.md) - * [Copter Hack 2017](copterhack2017.md) * [Robocross-2019](robocross2019.md) * [Camera calibration (legacy)](camera_calib.md) + * [Recognition of crop types in agriculture](agriculture.md) + * [Drones to fight Coronavirus](anticorona_drones.md) + * [D-drone Copter Hack 2021 by AT Makers](ddrone.md) + * [3D-printed Generative Design Frame](generative_design_frame.md) + * [Retail Drone](bennie.md) + * [The Indoor Mapping Drone](dromap.md) + * [Seeding Drone](seeding_drone.md) + * [Blue Jay Eindhoven](blue_jay_eindhoven.md) diff --git a/docs/en/agriculture.md b/docs/en/agriculture.md new file mode 100644 index 00000000..43ea5dd1 --- /dev/null +++ b/docs/en/agriculture.md @@ -0,0 +1,147 @@ +# Recognition of crop types in mass agricultural production + +## Introduction + +Modern agriculture in many countries is becoming one of the shining examples of the rapid and successful introduction of new technologies. Unmanned aerial vehicles are capable of performing a wide range of tasks, among which monitoring of agricultural land has now become a common tool for increasing the efficiency of agriculture. The goal of my project is to write a code for recognizing crop types in mass agricultural production. In the future, from the recognition results, you can design a map of sown areas. + +## Monitoring + +In agriculture, monitoring is necessary to obtain information on the state of land and crops. Based on the monitoring results, farmers or specialists can understand whether crops are sprouting normally, whether there is a threat from weeds and/or insects - pests, what is the degree of moisture in individual areas or entire areas, etc. + +## Explanation of the code + +Import libraries: + +```python +import rospy +import cv2 +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import numpy as np +``` + +Create some variables: + +```python +rospy.init_node('computer_vision_sample') + +bridge = CvBridge() + +color = 'undefined' +shape = 'undefined' +culture = "" +``` + +To implement computer vision algorithms, it is recommended to use the OpenCV library preinstalled on the Clover image. +Create a subscriber for the topic with the image from the main camera for processing using OpenCV: + +```python +def image_colback_color(data): + global color, shape + + cv_image = bridge.imgmsg_to_cv2(data, 'bgr8') # OpenCV image + img_hsv = cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV) #[118:119,158:159] + + #detected color + #print(img_hsv[0][0]) +``` + +Each culture has its unique shade (wheat is golden, buckwheat is light brown). + + + + +We describe color ranges for certain crops: + +```python +#wheat +yellow_orange_low = (38, 110, 150) +yellow_orange_high= (52, 110, 150) + +#buckwheat +brown_low = (23, 50, 50) +brown_high= (37, 50, 50) + +yellow_orange_mask = cv2.inRange(img_hsv, yellow_orange_low, yellow_orange_high) +brown_mask = cv2.inRange(img_hsv, brown_low, brown_high) + +if yellow_orange_mask[119][159] == 255: + shape = shape_recog(yellow_orange_mask) + +elif brown_mask[119][159] == 255: + shape = shape_recog(brown_mask) + +else: + shape = 'undefined' + color = 'undefined' + +if shape = 'brown': + culture = "greshiha" +if shape = 'yellow_orange': + culture = "pshenitsa" + +image_sub = rospy.Subscriber('main_camera/image_raw', Image, image_colback_color) +``` + +The script will take up to 100% CPU capacity. To slow down the script artificially, you can use throttling of frames from the camera, for example, at 5 Hz (`main_camera.launch`): + +```xml + +``` + +The topic for the subscriber, in this case, should be changed for `main_camera/image_raw_throttled`. + +```python +print (culture) +while not rospy.is_shutdown(): + print("color: {}".format(color)) + print("shape: {}".format(shape)) + rospy.sleep(0.2) +``` + +This program will recognize the culture by its shade. We can use more color ranges to improve the accuracy of the recognition so the drone can recognize more crops. + +Examples of color ranges for other colors: + +```python +red_low1 = (0, 110, 150) +red_high1 = (7, 255, 255) + +red_low2 = (172, 110, 150) +red_high2 = (180, 255, 255) + +red_orange_low = (8, 110, 150) +red_orange_high = (22, 110, 150) + +orange_low = (23, 110, 150) +orange_high = (37, 110, 150) + +yellow_orange_low = (38, 110, 150) +yellow_orange_high = (52, 110, 150) + +yellow_low = (53, 150, 150) +yellow_high = (67, 255, 255) + +yellow_green_low = (68, 150, 150) +yellow_green_high = (82, 255, 255) + +green_low = (83, 150, 150) +green_high = (97, 255, 255) + +blue_green_low = (98, 150, 150) +blue_green_high = (113, 255, 255) + +blue_low = (114, 150, 150) +blue_high = (127, 255, 255) + +blue_violet_low = (128, 150, 150) +blue_violet_high = (142, 255, 255) + +violet_low = (143, 150, 150) +violet_high = (157, 255, 255) + +red_violet_low = (158, 150, 150) +red_violet_hugh = (171, 255, 255) +``` + +Note that there are two ranges for red because red is at the edges of the HSV color space. diff --git a/docs/en/amls.md b/docs/en/amls.md new file mode 100644 index 00000000..5aefb9b3 --- /dev/null +++ b/docs/en/amls.md @@ -0,0 +1,672 @@ +# Autonomous Multirotor Landing System (AMLS) + +![Logo](../assets/amls/logo_book.png "Logo") + +## The goal is to automatically land a drone on a moving platform + +### AMLS Article + +In this Article we will describe AMLS project. Namely, AMLS Optical stabilization, GPS holding, GPS following, Altitude holding, Grabbing, Weather protection, Speed measurement and Illumination systems. In addition, we will make clear of how it works and how it was done! + +### Our main GitHub repository + +https://github.com/XxOinvizioNxX/Liberty-Way + +### Developers + +- [Pavel Neshumov](mailto:xxoinvizionxx@gmail.com) +- [Andrey Kabalin](mailto:astik452@gmail.com) +- [Vladislav Yasnetsky](mailto:vlad.yasn@gmail.com) + +![Drone 1](../assets/amls/drone_meme.jpg "Drone 1") + +----------- + +## Table of contents + +- [0. How does it work?](#how-does-it-work) + - [0.1. A video about our project](#short-video-about-our-project-clickable) +- [1. GPS hold and Flight to waypoints functions](#hold-and-flight-to-waypoints-functions) + - [1.1. Serial reading](#serial-reading) + - [1.2. UBlox GPS parsing](#ublox-parsing) + - [1.3. Set current waypoint](#set-current-waypoint) + - [1.4. Waypoint edition (To fly to waypoints)](#waypoint-edit-to-fly-to-waypoints) + - [1.5. Waypoint stabilization](#waypoint-stabilization) +- [2. GPS following](#following) +- [3. Compass](#compass) +- [4. Altitude stabilization (barometer)](#altitude-stabilization-barometer) +- [5. Optical stabilization](#optical-stabilization) + - [5.1. So difficult and so important](#so-difficult-and-so-important) + - [5.2. First steps](#first-steps) + - [5.3. Inverse approach](#inverse-approach) + - [5.4. Java edition](#java-edition) + - [5.5. Liberty-Way](#liberty-way) + - [5.6. Communication with the drone](#communication-with-the-drone) + - [5.7. Camera gimbal](#camera-gimbal) +- [6. Eitude AMLS Platform](#eitude-amls-platform) + - [6.1. Grabbing system](#grabbing-system) + - [6.2. Weather protection system](#weather-protection-system) + - [6.3. Speed measurement system](#platform-speedometer) + - [6.4. Illumination system](#platform-light-sensor) +- [7. Conclusion](#conclusion) + +----------- + +## 0. How does it work? {#how-does-it-work} + +The AMLS system consists of two parts: + +- The drone + + ![Liberty-X](../assets/amls/liberty-x_side_cutout_2_small.png "Liberty-X") + +- And the platform either mobile (implemented on a vehicle), either stable (pick-up-point) + + ![Platform](../assets/amls/platform_side_transparent.png "Platform") + +How the system operates: + +- Firstly, a drone with a delivery package is far from the platform and it has no visual contact with it. The drone recieves GPS coordinates of a platform by using cellular communication or any other radio channel (The drone has Liberty-Link implemented on it. This module is able to adjust its position, whatever the firmware of the flight controller. The module is installed inside the line between a receiver and a flight controller. +- The drone is moving to received coordinates. The coordinates might be renewed in the process (but not frequently, thus preventing the channel from overloading) +- When the drone is close to the platform but there is still no visual contact, the program runs GPS stabilization. Here the data is being transmitted over the closest radio communication channel of high freqency, so the drone can catch up with the platform. +- Meanwhile, the drone descends (barometers are installed on both, the drone and the platform). Descending goes on untill altitude reaches 1.5-2 meters above the platform. +- While descending and when visual contact with the platform camera is established, the program enables visual (precision) stabilization. And as soon as the drone's tag is within camera's field of view, the algorithm will capture the drone. +- When optical stabilization is enabled, GPS is working as a back up plan (in case something goes wrong, GPS stabilization launches again). +- In order to use optical stabilization the drone is equipped with ArUco tag which can be captured by a camera and by using the closest radio communication channel, the system transmits adjustment data to the drone. +- Along with optical stabilization, the program launches landing algorithm. The algorithm artificially and smoothly reduces the setpoint of height (Z) until it reaches a certain threshold. +- When the drone is approaching on the desirable height, the program enables grabbing system implemented on the platform. Those grips are used to catch and hold the drone in the process of landing and after the drone was caught. +- When the landing is completed, the platform starts maintenance work and in order to protect the drone frome external influences, the program enables weather protection and closes the roof above landing area. +- Landing accomplished! + +### Short video about our project (clickable) {#short-video-about-our-project-clickable} + + + +## 1. GPS hold and Flight to waypoints functions {#hold-and-flight-to-waypoints-functions} + +At the beginning, the drone with the package is far from the platform. Then via cellular communication or another suitable radio channel, platform GPS coordinates are sent to the drone (the Liberty-Link module is installed on the drone, this module is capable of correcting its position, regardless of the firmware of the flight controller. (The module is placed between the receiver (RC) and the flight controller) + +GPS module will be built in Liberty-Link, so it would have the ability to maintain the drone's GPS position and follow GPS points. + + + +GPS-module will be used from the UBlox group (for instance, UBlox Neo-M8). There will be 1 or 3 (to minimize the error) modules. + +![GPS Module](../assets/amls/liberty-x_front_cutout_2_small_gps.png "GPS Module") + +Modules operate via UART, configured to send data 5 times per second. The Liberty-Link firmware will read data from the modules and calculate the coordinates of the current position. + +### 1.1. Serial reading {#serial-reading} + +Reading data from a module into a buffer looks like this: + +```cpp +// Read data from the GPS module +while (GPS_serial.available() && new_line_found == 0) { + // Stay in this loop as long as there is serial information from the GPS available + char read_serial_byte = GPS_serial.read(); + if (read_serial_byte == '$') { + // Clear the old data from the incoming buffer array if the new byte equals a $ character + for (message_counter = 0; message_counter <= 99; message_counter++) { + incoming_message[message_counter] = '-'; + } + // Reset the message_counter variable because we want to start writing at the begin of the array + message_counter = 0; + } + // If the received byte does not equal a $ character, increase the message_counter variable + else if (message_counter <= 99) + message_counter++; + + // Write the new received byte to the new position in the incoming_message array + incoming_message[message_counter] = read_serial_byte; + + // Every NMEA line ends with a '*'. If this character is detected the new_line_found variable is set to 1 + if (read_serial_byte == '*') new_line_found = 1; +} +``` + +### 1.2. UBlox GPS parsing {#ublox-parsing} + +After that, latitude, longitude, a type of correction (2D, 3D) and the number of satellites are calculated from the filled buffer. +Parsing GPS data of the UBlox protocol looks like this: + +```cpp +// If the software has detected a new NMEA line it will check if it's a valid line that can be used +if (new_line_found == 1) { + // Reset the new_line_found variable for the next line + new_line_found = 0; + if (incoming_message[4] == 'L' && incoming_message[5] == 'L' && incoming_message[7] == ',') { + // When there is no GPS fix or latitude/longitude information available + // Set some variables to 0 if no valid information is found by the GPS module. This is needed for the GPS loss when flying + l_lat_gps = 0; + l_lon_gps = 0; + lat_gps_previous = 0; + lon_gps_previous = 0; + number_used_sats = 0; + } + // If the line starts with GA and if there is a GPS fix we can scan the line for the latitude, longitude and number of satellites + if (incoming_message[4] == 'G' && incoming_message[5] == 'A' && (incoming_message[44] == '1' || incoming_message[44] == '2')) { + // Filter the minutes for the GGA line multiplied by 10 + lat_gps_actual = ((int)incoming_message[19] - 48) * (long)10000000; + lat_gps_actual += ((int)incoming_message[20] - 48) * (long)1000000; + lat_gps_actual += ((int)incoming_message[22] - 48) * (long)100000; + lat_gps_actual += ((int)incoming_message[23] - 48) * (long)10000; + lat_gps_actual += ((int)incoming_message[24] - 48) * (long)1000; + lat_gps_actual += ((int)incoming_message[25] - 48) * (long)100; + lat_gps_actual += ((int)incoming_message[26] - 48) * (long)10; + // To convert minutes to degrees we need to divide minutes by 6 + lat_gps_actual /= (long)6; + // Add multiply degrees by 10 + lat_gps_actual += ((int)incoming_message[17] - 48) * (long)100000000; + lat_gps_actual += ((int)incoming_message[18] - 48) * (long)10000000; + // Divide everything by 10 + lat_gps_actual /= 10; + + // Filter minutes for the GGA line multiplied by 10 + lon_gps_actual = ((int)incoming_message[33] - 48) * (long)10000000; + lon_gps_actual += ((int)incoming_message[34] - 48) * (long)1000000; + lon_gps_actual += ((int)incoming_message[36] - 48) * (long)100000; + lon_gps_actual += ((int)incoming_message[37] - 48) * (long)10000; + lon_gps_actual += ((int)incoming_message[38] - 48) * (long)1000; + lon_gps_actual += ((int)incoming_message[39] - 48) * (long)100; + lon_gps_actual += ((int)incoming_message[40] - 48) * (long)10; + // To convert minutes to degrees we need to divide minutes by 6 + lon_gps_actual /= (long)6; + // Add multiply degrees by 10 + lon_gps_actual += ((int)incoming_message[30] - 48) * (long)1000000000; + lon_gps_actual += ((int)incoming_message[31] - 48) * (long)100000000; + lon_gps_actual += ((int)incoming_message[32] - 48) * (long)10000000; + // Divide everything by 10 + lon_gps_actual /= 10; + + if (incoming_message[28] == 'N') + // When flying north of the equator the latitude_north variable will be set to 1 + latitude_north = 1; + else + // When flying south of the equator the latitude_north variable will be set to 0 + latitude_north = 0; + + if (incoming_message[42] == 'E') + // When flying east of the prime meridian the longiude_east variable will be set to 1 + longiude_east = 1; + else + // When flying west of the prime meridian the longiude_east variable will be set to 0 + longiude_east = 0; + + // Filter the number of satillites from the GGA line + number_used_sats = ((int)incoming_message[46] - 48) * (long)10; + number_used_sats += (int)incoming_message[47] - 48; + + if (lat_gps_previous == 0 && lon_gps_previous == 0) { + // If this is the first time the GPS code is used + // Set the lat_gps_previous variable to the lat_gps_actual variable + lat_gps_previous = lat_gps_actual; + // Set the lon_gps_previous variable to the lon_gps_actual variable + lon_gps_previous = lon_gps_actual; + } + + // Divide the difference between the new and the previous latitudes by 10 + lat_gps_loop_add = (float)(lat_gps_actual - lat_gps_previous) / 10.0; + // Divide the difference between the new and the previous longitudes by 10 + lon_gps_loop_add = (float)(lon_gps_actual - lon_gps_previous) / 10.0; + + // Set the l_lat_gps variable to the previous latitude value + l_lat_gps = lat_gps_previous; + // Set the l_lon_gps variable to the previous longitude value + l_lon_gps = lon_gps_previous; + + // Remember the new latitude value in the lat_gps_previous variable for the next loop + lat_gps_previous = lat_gps_actual; + // Remember the new longitude value in the lat_gps_previous variable for the next loop + lon_gps_previous = lon_gps_actual; + } + + // If the line starts with SA and if there is a GPS fix we can scan the line for the fix type (none, 2D or 3D) + if (incoming_message[4] == 'S' && incoming_message[5] == 'A') + fix_type = (int)incoming_message[9] - 48; + +} +``` + +### 1.3. Set current waypoint {#set-current-waypoint} + +When required data is received the main magic happens. To enable maintaining of the current position it will be enough to set the flag `waypoint_set = 1;` and set current coordinates as a waypoint: + +```cpp +l_lat_waypoint = l_lat_gps; +l_lon_waypoint = l_lon_gps; +``` + +After that, the calculation of the error in the coordinates will begin, correction works with the help of a PD - regulator. For D - component we use rotation memory. + +### 1.4. Waypoint edit (To fly to waypoints) {#waypoint-edit-to-fly-to-waypoints} + +If you just set the new `l_lat_waypoint` and `l_lon_wayoint`, which are located at a great distance from the drone, the drone will not be able to fly normally and stabilize at these coordinates. For smooth adjustments `l_lat_gps_float_adjust` and `l_lon_gps_float_adjust` can be used. These are `float` variables, changing which will smoothly shift `l_lat_waypoint` and `l_lon_waypoint`. + +For example, if in the main loop you will constantly add a certain value to these variables: + +```cpp +l_lat_gps_float_adjust += 0.0015; +``` + +With set waypoint, the drone will move smoothly in the given direction. +In the future, this will be used for the smooth drone's acceleration and deceleration while moving to its destination. + +### 1.5. Waypoint stabilization {#waypoint-stabilization} + +```cpp +if (waypoint_set == 1) { + //If the waypoints are stored + + // Adjust l_lat_waypoint + if (l_lat_gps_float_adjust > 1) { + l_lat_waypoint++; + l_lat_gps_float_adjust--; + } + if (l_lat_gps_float_adjust < -1) { + l_lat_waypoint--; + l_lat_gps_float_adjust++; + } + + // Adjust l_lon_waypoint + if (l_lon_gps_float_adjust > 1) { + l_lon_waypoint++; + l_lon_gps_float_adjust--; + } + if (l_lon_gps_float_adjust < -1) { + l_lon_waypoint--; + l_lon_gps_float_adjust++; + } + + // Calculate the latitude error between waypoint and actual position + gps_lon_error = l_lon_waypoint - l_lon_gps; + // Calculate the longitude error between waypoint and actual position + gps_lat_error = l_lat_gps - l_lat_waypoint; + + // Subtract the current memory position to make room for the new value + gps_lat_total_avarage -= gps_lat_rotating_mem[gps_rotating_mem_location]; + // Calculate the new change between the actual pressure and the previous measurements + gps_lat_rotating_mem[gps_rotating_mem_location] = gps_lat_error - gps_lat_error_previous; + // Add the new value to the long term average value + gps_lat_total_avarage += gps_lat_rotating_mem[gps_rotating_mem_location]; + + // Subtract the current memory position to make room for the new value + gps_lon_total_avarage -= gps_lon_rotating_mem[gps_rotating_mem_location]; + // Calculate the new change between the actual pressure and the previous measurements + gps_lon_rotating_mem[gps_rotating_mem_location] = gps_lon_error - gps_lon_error_previous; + // Add the new value to the long term avarage value + gps_lon_total_avarage += gps_lon_rotating_mem[gps_rotating_mem_location]; + + // Increase the rotating memory location + gps_rotating_mem_location++; + if (gps_rotating_mem_location == 35) + // Start at 0 when the memory location 35 is reached + gps_rotating_mem_location = 0; + + // Remember the error for the next loop + gps_lat_error_previous = gps_lat_error; + gps_lon_error_previous = gps_lon_error; + + //Calculate the GPS pitch and roll corrections as if the nose of the multicopter is facing north. + //The Proportional part = (float)gps_lat_error * gps_p_gain. + //The Derivative part = (float)gps_lat_total_avarage * gps_d_gain. + gps_pitch_adjust_north = (float)gps_lat_error * gps_p_gain + (float)gps_lat_total_avarage * gps_d_gain; + gps_roll_adjust_north = (float)gps_lon_error * gps_p_gain + (float)gps_lon_total_avarage * gps_d_gain; + + if (!latitude_north) + // Invert the pitch adjustmet because the quadcopter is flying south of the equator + gps_pitch_adjust_north *= -1; + if (!longiude_east) + // Invert the roll adjustmet because the quadcopter is flying west of the prime meridian + gps_roll_adjust_north *= -1; + + //Because the correction is calculated as if the nose was facing north, we need to convert it for the current heading. + gps_roll_adjust = ((float)gps_roll_adjust_north * cos(angle_yaw * 0.017453)) + ((float)gps_pitch_adjust_north * cos((angle_yaw - 90) * 0.017453)); + gps_pitch_adjust = ((float)gps_pitch_adjust_north * cos(angle_yaw * 0.017453)) + ((float)gps_roll_adjust_north * cos((angle_yaw + 90) * 0.017453)); + + //Limit the maximum correction to 300. This way we still have the full control of the drone with the pitch and roll sticks on the transmitter. + if (gps_roll_adjust > 300) gps_roll_adjust = 300; + if (gps_roll_adjust < -300) gps_roll_adjust = -300; + if (gps_pitch_adjust > 300) gps_pitch_adjust = 300; + if (gps_pitch_adjust < -300) gps_pitch_adjust = -300; +} +``` + +## 2. GPS following {#following} + +The main part of stabilization using GPS coordinates was the development of an algorithm for predicting the position of the drone. The simplest idea was to use a mathematical calculation of the next drone's position. This is calculated for the most accurate positioning in relation to the landing platform. + +At the beginning we developed a simple algorithm for calculating the coefficient of coordinates' change. The development was done using Python. At the stage of testing this algorithm, the problem of simulating the generation of GPS coordinates arose. To solve this problem, many different resources were used: from open source homemade navigators to trying to use the Google Maps, Yandex Maps or 2GIS APIs. +And only after 3 months, we thought of a simple solution: to change the values with some delta and to visualize using MatPlotLib or PyQtGraph. +Prior to this, all testing of the algorithm was carried out using the PX4 firmware toolkit and the Gazebo drone motion simulator. As a result, many formalities were overcome in terms of communicating with the simulator and increasing performance (click on the picture to see the video). + +The result of the GPS prediction (clickable): + + + +The end result reached a point when the error of the predicted position varies from 0 to 70 centimeters. + +----------- + +## 3. Compass {#compass} + +Before optical stabilization launches (during GPS stabilization process), to calculate the GPS correction vector, you need to know the exact angle from the compass. For this, a compass built into the GPS module is used. + +Because during the flight, the roll and pitch angles change and a user needs to correct the values from the compass. +In general, calculating the angle from the compass looks like this: + +```cpp +// The compass values change when the roll and pitch angles of the quadcopter change. That's the reason why the x and y values need to be calculated for a virtual horizontal position +// The 0.0174533 value is phi/180 as the functions are in radians in stead of degrees +compass_x_horizontal = (float)compass_x * cos(angle_pitch * -0.0174533) + (float)compass_y * sin(angle_roll * 0.0174533) * sin(angle_pitch * -0.0174533) - (float)compass_z * cos(angle_roll * 0.0174533) * sin(angle_pitch * -0.0174533); +compass_y_horizontal = (float)compass_y * cos(angle_roll * 0.0174533) + (float)compass_z * sin(angle_roll * 0.0174533); + +// Now that the horizontal values are known the heading can be calculated. With the following lines of code the heading is calculated in degrees. +// Please note that the atan2 uses radians in stead of degrees. That is why the 180/3.14 is used. +if (compass_y_horizontal < 0)actual_compass_heading = 180 + (180 + ((atan2(compass_y_horizontal, compass_x_horizontal)) * (180 / 3.14))); +else actual_compass_heading = (atan2(compass_y_horizontal, compass_x_horizontal)) * (180 / 3.14); + +// Add the declination to the magnetic compass heading to get the geographic north +actual_compass_heading += declination; +// If the compass heading becomes smaller than 0, 360 is added to keep it in the 0-360 degrees range +if (actual_compass_heading < 0) actual_compass_heading += 360; +// If the compass heading becomes larger then 360, 360 is subtracted to keep it in the 0-360 degrees range +else if (actual_compass_heading >= 360) actual_compass_heading -= 360; +``` + +It is clear that the angle from the compass can also be used to maintain the yaw angle of the drone. With point-to-point flights, this may be realized. But at the moment, there is no urgent need for this, because after the start of optical stabilization, the algorithm is able to correct the drone regardless of its yaw angle. Also, during optical stabilization, the yaw angle is automatically corrected. + +----------- + +## 4. Altitude stabilization (barometer) {#altitude-stabilization-barometer} + +Before optical stabilization launches (during GPS stabilization process), our Liberty-Link module will be able to maintain altitude using a barometer. + +The platform, as well as the Liberty-Link, will have MS5611 barometers. + +![MS5611](../assets/amls/ms5611_barometer.png "MS5611") + +According to the documentation, the height resolution is 10 cm. The algorithm will take the pressure values and by passing it through the PID-controller will stabilize the drone's altitude by changing the Throttle (3rd channel). + +Altitude hold test (clickable): + + + +During the flight along the waypoint, the setpoint of the pressure will decrease in order to increase the altitude (it is safer to fly in a straight line at a high altitude, so the drone would not crash into anything). And during GPS stabilization (when the drone is already close to the platform), the drone will be set with a setpoint of pressure that correlates with ~ 1.5-2m height above the platform. + +----------- + +## 5. Optical stabilization {#optical-stabilization} + +### 5.1. So difficult and so important {#so-difficult-and-so-important} + +Optical stabilization is the most important and challenging part of our project. In the current condition it is possible to keep the drone above the platform still only using these algorithms. The current version of the OIS algorithm, along with a description of the usage and making, is available in our main GitHub repository. In the future, GPS stabilization will be added to it. + +### 5.2. First steps {#first-steps} + +And as we couldn't predict the possibility of accomplishing our task, first of all, we started to think about the solution for the stabilization system. Afterwards, we settled with the stabilization using augmented reality tags. Firstly, it won't take much finances as we do not need GPS or RTK systems and it will be accurate enough to accomplish its purpose. +Our first idea was to attach Raspberry Pi with Liberty_X as it was embodied in COEX Clover and to let Raspberry Pi handle all of the maths. + +First optical stabilization prototype test (clickable): + + + +But few tests showed that Raspberry Pi computing power is not enough for amount of data needed to stabilize the drone. Furthermore, the idea of installing a Raspberry Pi on each drone is irrational for its own. + +Also, we had middling prototypes, for example, attempts to use color markers (circles of different colors), but these ideas did not work well enough. + +### 5.3. Inverse approach {#inverse-approach} + +Then we came up with the idea of separating drone and stabilization system so the main math will be accomplished on the landing platform with powerful machine. + +This was how we ended up with our current optical stabilization algorithm - the camera which is connected to a powerful machine and the machine is attached to the platform. The drone only has 4x4 ArUco tag and its controller. + + + +Then, we came up with using Pose Estimation algorithms from OpenCV library. The first tests showed us that we are on the right track! + +Pose Estimation Python (clickable): + + + +But, the algorithms were far from perfect. For example, since the code was written in Python (https://github.com/XxOinvizioNxX/Liberty-X_Point), the performance was not satisfyingly, and there was no suitable threading control either. Therefore, we had to change something. + +### 5.4. Java edition {#java-edition} + +Having weighed all the pros and cons, it was decided to rewrite all optical stabilization using Java. This is how the first version of Liberty-Way appeared. This time, it was decided to approach the OOP thoroughly, and, after a little tweaking, an excellent stabilization and landing algorithm was obtained. + +Landing test on Liberty-Way v.beta_0.0.1 (clickable): + + + +### 5.5. Liberty-Way {#liberty-way} + +Then many improvements and bug fixes followed. As a result, Liberty-Way is a cross-platform web sarvar application that is very convenient for configuration and debugging. Also, in the latest versions (beta_1.0.3 - beta_1.1.2) a blackbox feature was introduced (for recording logs), as well as communication with the platform and many other necessary algorithms. + +Full description, including all settings, startup, etc. you can find in our GitHub repository: https://github.com/XxOinvizioNxX/Liberty-Way + +Video of static stabilization (clickable): + + + +Liberty-Way can even stabilize a "thrown" drone (clickable): + + + +There is a small bug in the video with the rotation angle, in the new release it has been fixed! + +And, of course, example of how it works in motion (tested with beta_0.0.3 release) (clickable): + + + +All basic settings are conveniently placed in separate JSON files (settings, PID), which allows a user to quickly change the required parameters without rebuilding the application. In fact, to run the application, you just need to download the latest release, unpack the archive and run it through the launcher corresponding to the preferable OS. + +### 5.6. Communication with the drone {#communication-with-the-drone} + +The Liberty-Way connects to the Liberty-Link module installed on the drone and adjusts its position by directly controlling four main channels of the remote control. In one cycle (each frame from the camera), 12 bytes of correction data are sent to the module: +![Packet](../assets/amls/data_structure.png "Data packet") + +Bytes description: + +- **Roll bytes** - Roll correction values +- **Pitch bytes** - Pitch correction values +- **Yaw bytes** - Yaw correction values +- **Altitude bytes** - Altitude correction values +- **Service info** - sets the drone state (0 - Nothing to do, 1 - Stabilization, 2 - Landing (command not implemented and will be removed in the future. This is not a real landing, just to tell the drone to start decreasing altitude), 3 - Disable motors) +- **Check byte** - XOR sum of all previous bytes that is compared via transmittion in order to verify the data +- **Data suffix** - unique pair of ASCII symbols that is not represented in the packet in any form and that shows the end of the packet + +On the drone side (Liberty-Link module), data reading is performing as follows: + +```cpp +while (Telemetry_serial.available()) { + tdc_receive_buffer[tdc_receive_buffer_counter] = Telemetry_serial.read(); + if (tdc_receive_byte_previous == 'L' && tdc_receive_buffer[tdc_receive_buffer_counter] == 'X') { + tdc_receive_buffer_counter = 0; + if (tdc_receive_start_detect >= 2) { + tdc_check_byte = 0; + for (tdc_temp_byte = 0; tdc_temp_byte <= 8; tdc_temp_byte++) + tdc_check_byte ^= tdc_receive_buffer[tdc_temp_byte]; + if (tdc_check_byte == tdc_receive_buffer[9]) { + direct_roll_control = (uint32_t)tdc_receive_buffer[1] | (uint32_t)tdc_receive_buffer[0] << 8; + direct_pitch_control = (uint32_t)tdc_receive_buffer[3] | (uint32_t)tdc_receive_buffer[2] << 8; + direct_yaw_control = (uint32_t)tdc_receive_buffer[5] | (uint32_t)tdc_receive_buffer[4] << 8; + direct_throttle_control = (uint32_t)tdc_receive_buffer[7] | (uint32_t)tdc_receive_buffer[6] << 8; + direct_service_info = (uint32_t)tdc_receive_buffer[8]; + + if (direct_roll_control > 1100 && direct_roll_control < 1900 && + direct_pitch_control > 1100 && direct_pitch_control < 1900 && + direct_yaw_control > 1100 && direct_yaw_control < 1900 && + direct_throttle_control > 1100 && direct_throttle_control < 1900 && + /*flight_mode == 2 &&*/ channel_7 > 1500) { + tdc_timer = millis(); + tdc_working = 1; + } + else + tdc_working = 0; + } + else { + direct_roll_control = 1500; + direct_pitch_control = 1500; + tdc_working = 0; + } + } else + tdc_receive_start_detect++; + } + else { + tdc_receive_byte_previous = tdc_receive_buffer[tdc_receive_buffer_counter]; + tdc_receive_buffer_counter++; + if (tdc_receive_buffer_counter > 11)tdc_receive_buffer_counter = 0; + } +} +if (millis() - tdc_timer >= 500) { + tdc_working = 0; +} +if (tdc_working && direct_service_info == 2 && !return_to_home_step) + return_to_home_step = 3; +if (!tdc_working) + return_to_home_step = 0; +if (!tdc_working || direct_service_info < 1) { + direct_roll_control = 1500; + direct_pitch_control = 1500; + direct_yaw_control = 1500; + direct_throttle_control = 1500; +} +``` + +As a result, there are 4 variables: + +``` +direct_roll_control +direct_pitch_control +direct_yaw_control +direct_throttle_control +``` + +Which are directly added to the data received from the control panel. +Probably, in the future, other data will be added, at least for working with GPS. Stay tuned for updates in our repository. + +### 5.7. Camera gimbal {#camera-gimbal} + +To operate our system in real conditions, it is required to minimize camera shaking if we don't want to lose the tag on the drone. For that reason, a 3D model of a gimbal for attaching the drone to the platform was developed to stabilize a conventional webcam. + +Camera mount: + + ![Camera mount](../assets/amls/gimbal_camera_mount.png "Camera mount") + +Camera wire fixing (ferrite filter on the wire): + + ![Filter mount](../assets/amls/gimbal_filter_mount.png "Filter mount") + +Fixing of the "crabs" latches on the suspension substrate: + + ![Plane mount](../assets/amls/gimbal_plane_mount.png "Plane mount") + +An approximate view of the assembly of the entire suspension mechanism: + + ![Assembly](../assets/amls/gimbal_assembly.png "Assembly") + +----------- + +## 6. Eitude AMLS Platform {#eitude-amls-platform} + +The platform is an interconnected system for landing the drone. The platform was planned to be controlled via the Serial interface, using the G-Code commands: The current platform code can be found in the Eitude GitHub repository: https://github.com/XxOinvizioNxX/Eitude + +### 6.1. Grabbing system {#grabbing-system} + +As you may know it doesn't matter how good is our stabilization, without grabbing system the drone will crash eventually. Hence we developed a 3D model of a grabbing system with 4 grips that have a hook at the end of each one. This will allow the system to slowly grab the drone while it lands and hold it steady after landing. + +![Screenshot](../assets/amls/grabbing_system_1.png "Screenshot") + +![Screenshot](../assets/amls/grabbing_system_2.png "Screenshot") + +### 6.2. Weather protection system {#weather-protection-system} + +As for the weather protection, we developed a 3D model to create a roof that will protect the drone from weather conditions while it is on the platform. +The AMLS weather protection system consists of scissor-like mechanisms covered with a canvas, which are located around the edges of the platform. +After a successful landing, the mechanisms on both sides of the platform close and protect the drone from external influences. The roof structure itself makes it light and strong, and the scissor-like mechanisms allow it to simply fold and unfold itself. Moreover, the assembly of such mechanisms will be simple and reliable. + +![Screenshot](../assets/amls/platform_side_transparent.png "Screenshot") + +![Screenshot](../assets/amls/platform_roof.png "Screenshot") + +### 6.3. Platform speedometer {#platform-speedometer} + +In order to land on a quickly moving platform, it is very useful to know its speed. For now, the platform does not have a GPS module, or any other way to measure absolute speed. Therefore, for a temporary solution to this problem, it was decided to calculate the speed using an accelerometer. For example, MPU6050. The IMU is mounted into the prototype platform through a soft backing and it's covered with a cap to protect it from the wind. The stabilization algorithm (Liberty-Way) sends a request to the platform `L1` to test the speed. A message `S0 L ` is returned as a response. + +![MPU6050](../assets/amls/mpu6050_gyro.png "MPU6050") + +Speedometer test (inside the gray circle, lower right parameter (SPD) - speed in km / h) (Clickable): + + + +To calculate the speed, the acceleration is taken for short time periods, then multiplied with time, which results with the instantaneous speed. Then this speed is constantly added to the previous value: + +```cpp +void speed_handler(void) { + gyro_signalen(); + + // Filter accelerations + acc_x_filtered = (float)acc_x_filtered * ACC_FILTER_KOEFF + (float)acc_x * (1.0 - ACC_FILTER_KOEFF); + + speed = acc_x_filtered; + // Convert acceleration to G + speed /= 4096.0; + // Convert to m/s^2 + speed *= 9.81; + // Multiply by dt to get instant speed in m/ms + speed *= (millis() - speed_loop_timer); + + // Reset timer + speed_loop_timer = millis(); + + // Convert to m/s + speed /= 1000.0; + // Convert to km/h + speed *= 3.6; + + // Accumulate instantaneous speed + speed_accumulator += speed; + + if (!in_move_flag) { + // If the platform is not moving, reset the speed + speed_accumulator = speed_accumulator * SPEED_ZEROING_FACTOR; + } +} +``` + +Despite having various filters, due to the error, the speed may not "return" to 0, therefore, vibrations are also measured, and if they are less than the certain threshold, it is considered that the platform is at a standstill and the speed gradually resets to zero. + +The complete code of the speedometer can be found in the Eitude repository on GitHub: https://github.com/XxOinvizioNxX/Eitude + +### 6.4. Platform light sensor {#platform-light-sensor} + +As our platform must work in various environmental conditions, and optical stabilization is very demanding on the visibility of the ArUco marker, it is important to have an automatic system for measuring the camera exposure by the level of illumination around it, and turning on additional illumination if there is a lack of lighting. In the long term, it is planned to use specialized sensors, for example, the BH1750, as light sensors. + +In the current version of the prototype, 6 LEDs are used as a light sensor and an ADC built into the microcontroller. The stabilization algorithm (Liberty-Way) sends a request `L0` to the platform to check the illumination level. A message `S0 L ` is returned as a response. + +![Light sensors](../assets/amls/light_sensors.png "Light sensors") + +Test for determining the level of illumination using LEDs (clickable): + + + +Exposure adjustment and adding additional illumination tests (clickable): + + + +----------- + +## 7. Conclusion {#conclusion} + +At the moment, there is a debugged prototype of optical stabilization, GPS holding, altitude stabilization via barometer, different platform prototypes and a great amount of 3D models eager to be constructed. +The project of the automatical landing of a drone onto a moving platform is not yet complete. + +Follow the updates: + +- In our repository GitHub: https://github.com/XxOinvizioNxX/Liberty-Way +- On our YouTube channel: https://www.youtube.com/channel/UCqN12Jzy-1eJLkcA32R0jdg + +In the future, we plan to do much more new and interesting stuff! + +![Follow the white rabbit](../assets/amls/follow_the_white_rabbit.png "Follow the white rabbit") diff --git a/docs/en/anticorona_drones.md b/docs/en/anticorona_drones.md new file mode 100644 index 00000000..d2cb72b0 --- /dev/null +++ b/docs/en/anticorona_drones.md @@ -0,0 +1,128 @@ +# Drones to fight Corona + +[CopterHack-2021](copterhack2021.md) + +team: **Drones to fight Corona** + +## Team + +* Daria Miklashevskaya +[d.miklashevskaya@innopolis.ru](mailto:d.miklashevskaya@innopolis.ru) +* Yuriy Sukhorukov +[y.suhorukov@innopolis.ru](mailto:y.suhorukov@innopolis.ru) + +Innopolis University, B17-DS-II, B17-RO-I + +## Introduction + +The world faces the worst pandemic of XXI century, which affects lives and well-being of millions of citizens. To slow down the spread of the disease and give the healthcare system to react, people are obliged to wear masks, however, people sometimes ignore those rules, which puts lives of others under the threat. + +There are laws in place to enforce mask wearing, but there is just not enough cops to monitor the situation in every mall, bus station etc and fine the law-breakers. We want to contribute to the solution of this problem, but instead of punishing people, we want to provide them with mask with our super-friendly and cute drone. + +## Custom airframe + +Since we do not have the Clover drone, we will use an airframe built and designed by us. Our system is designed to be platform-independent, so it can be installed on almost everything, even VTOL aircrafts. + +The main idea is to use truss structure, because it works well against twisting and warping, besides, it can be assembled out of carbon tubes relatively easily. + + + +The main advantage of such a system is that it distributes the impact between beams and effectively dissipates it. Engine mounts, however, are not impact-proof because they are specifically designed to break but save much more expensive and not-readily-available engines. This is why mounts are quickly-replaceable (only 3 screws) and made of cheap PLA plastic. + +The space inside the central rhombus is occupied by the on-board equipment: batteries, PX4 flight controller, Jetson Xavier NX / AGX, power electronics, sensory equipment. + +As it is shown on this picture, computers can be mounted on the bottom and completely protected by legs and the truss structure from any collision damage. Jetson AGX is marked with arrow. Almost invisible, isn't it? + + + +All sensory equipment, like cameras, rangefinder, etc can be easily mounted on the beams with special bracket connectors. This type of connection provides flexibility because you can fine-tune camera angle or position before tightening screws and fixing it firmly in place, which is especially relevant for tracker-cameras. + +We used one T-265 camera for visual odometry and one D-435 depth camera for both video input for neural net and for map-building (collision avoidance). T-265 suffers from "odometry drift" especially when engines are beat-up, which eventually happens after a number of crashes, so we have incorporated dampers to solve this problem. + + + +Finally, the drone with all equipment installed looks like this + + + +## Software + +Thus far we discussed things which are specific to our custom airframe. Things we are going to discuss next are applicable for Clover drone as well. Our software is containerized so it can be launched on every platform that supports Docker, be it Windows machine, Linux machine, Jetson or Raspberry Pi. + +We have split our drone software into two modules: + +* Pipeline, which manages communication with ROS. +* Neural net module, which talks with the pipeline via sockets. + +The reason for this is simple - ROS supports only Python 2, and I do not feel like I'm building ROS with Python 3 because it is a bit troublesome. Our neural net, on the other hand, uses Pytorch which is Python 3 only, so the only way to run them both is to use inter-process communication of some sort. + +Apart from compatibility issue, such an arrangement allows us to run inference module anywhere we want, e.g. on more powerful desktop PC or even somewhere in the cloud (google collab? Why not!). + +This means that we can make our drone lighter by excluding heavy on-board computer and replacing it with something light like Raspberry Pi. Pipeline image is made as lightweight as possible, so it should be runnable even on really weak computers. + +More detailed instructions on how to build and run our software are available in our [Gitlab repo](https://gitlab.com/k0t1k/thegreateye/-/tree/master). + +## Neural net [^1] + +We use 3rd version of YoLo neural network, pretrained on custom dataset for 50 epochs. + +It runs 10-15 FPS on Jetson NX, which is enough for our task + +## Exploration and collision avoidance + +To make our drone useful and to operate it safely, we should somehow make the drone aware of its current position and surrounding objects. There are two ways we can solve this problem + +* Use pre-built map as a ground truth and then calculate the position with e.g. Particle Filter +* Build map on-the-fly, while avoiding collisions and moving towards the goal + +The second approach is more robust, because it does not rely on any external map, which can be erroneous or just missing and hence we opted for it. + +We use a path planner, described in [^2]. In this paper Receding +Horizon Next-Best-View Planner is presented, which uses Rapidly-exploring Random trees to navigate and explore the environment. It yields the following results, here is the occupancy map and the corresponding tunnel as it is seen by human being: + +
    + + +
    + +The algorithm is lightweight, so even the small computer like Latte Panda can run it with high enough frequency, and since it is CPU-bound, it will not compete for resources with the neural net, which is almost entirely GPU-bound. + +## Mask release + +Detecting people without masks is cool, no doubt. + + + +But we want not only to detect them but to give him a mask as well, so, we have built this system that can give a mask to person. + +
    + + +
    + +This device looks like a regular firearm mag, and functions exactly in the same way. Masks can be loaded into containers made out of 20ml syringe barrels. + +This device needs further engineering because current iterations are too fragile and unreliable, probably the best solution will be to use linear actuator and push the "casing" out of the action, like in actual firearm. + +## 3D models + +All the 3D models used to build this cute drone can be found in our [gdrive](https://drive.google.com/drive/folders/1tR5ePX24_i9tpllOPMcnZIUfse89c1YI?usp=sharing). + +## Final thoughts + +We all hope that Corona crisis will soon be over, and when it will be finally over, our drones will be still useful. We can deliver some small objects, like cosmetics or shaving blades to the customers' door, the task that currently is done by a human courier. This service (with shaving blades), when a guy comes and brings a new set of shaving blades every week is very popular in US and UK, so why not try to automate it. + +This is an MVP, so some improvements are to be done. For example, payload refill and battery swaps are done manually for now, but this task should be automated. Actually, some work is already done in this direction: + + + +Drone lands on a landing platform with special hooks which will connect to four metallic contacts (highlighted) and charge the battery. In future we want to change battery, not just charge it, but the mechanism is very complex and requires making custom batteries and battery mounts, also, it constraints placement of cameras, payload and so on. + +For the general-purpose delivery drone, the working principle and hardware will remain the same, but software (neural net detector) will need an update. + +Stay safe folks! + +## References + +[^1]: MassaguΓ© Respall, Victor & Devitt, Dmitry & Fedorenko, Roman. (2020). Unmanned Aerial Vehicle Path Planning for Exploration Mapping. 1-6. 10.1109/NIR50484.2020.9290232. +[^2]: Nisarg Pethani & Harshal Vora. (2020) https://github.com/NisargPethani/Face-Mask-Detection-using-YOLO-v3 diff --git a/docs/en/assemble_4_2.md b/docs/en/assemble_4_2.md index c9249c68..0a91b102 100644 --- a/docs/en/assemble_4_2.md +++ b/docs/en/assemble_4_2.md @@ -1,5 +1,7 @@ # Clover 4.2 assembly +Dimensional drawing – [clover-4.2.pdf](https://github.com/CopterExpress/clover/raw/master/docs/assets/dimensional-drawing/clover-4.2.pdf). + ## Fasteners size > **Hint** During assembly, screws and racks of various sizes are used, using fasteners of the wrong size can damage the copter. diff --git a/docs/en/assemble_4_2_ws.md b/docs/en/assemble_4_2_ws.md index 7eb43e5f..9a2dd7b2 100644 --- a/docs/en/assemble_4_2_ws.md +++ b/docs/en/assemble_4_2_ws.md @@ -1,5 +1,7 @@ # Clover 4 assembly +Dimensional drawing – [clover-4.2-ws.pdf](https://github.com/CopterExpress/clover/raw/master/docs/assets/dimensional-drawing/clover-4.2-ws.pdf). + ## Fasteners size > **Hint** During assembly, screws and racks of various sizes are used, using fasteners of the wrong size can damage the copter. diff --git a/docs/en/bennie.md b/docs/en/bennie.md new file mode 100644 index 00000000..e51ab8be --- /dev/null +++ b/docs/en/bennie.md @@ -0,0 +1,24 @@ +# Retail Drone - CopterHack 2021 article + +CopterHack-2021, team: Bennie and the Jetson TX2. + +My project is a drone that can scan a store shelf and determine if the representation of a specific brand is adequate for what the vendor paid for. In most retail stores, a brand will pay for space on a shelf in order to be more eye catching to the customer and eventually get more sales, which is why bigger brands are generally seen more. However because of either employee ineptitude or general non-compliance up to 15% of a brand’s space on a shelf that it paid for can be lost, which can lose the brand upwards of 5% loss in overall sales. + +Several apps have been released to fight this such as Clobotics, however they all require an employee to go around manually and take snapshots. I wanted to build a system where a shop owner could simply place the drone at a starting point, click a button and have their inventory done automatically within minutes. + +Since all inventory in a shop is usually on the shelves and I wanted to not have the drone rely on GPS I fitted the Clover’s Pi camera in front for object detection and navigation. Rather than using map-based navigation since one can’t expect a shop owner to place markers perfectly on the ground, opencv2 has a built in ArUco marker detection method that identifies and draws a bounding box around all markers in frame. So once the drone takes off from the starting position, it identifies where the marker is in frame and uses the Clover’s `navigate()` method to center the marker and its area to place the Clover approximately 1 metre from it. + +What’s expected is that the shop owner places markers at every different brand’s section in ascending order down an aisle. The drone has a specific marker ID it’s looking for and once it’s centered itself on the nearest marker, it determines its ID and moves either left or right depending if the identified marker is lower or higher than the target. This way the Clover moves down an aisle stopping at each marker until it reaches the target. + +In order to identify the number of items of each brand, I’ve trained a TensorFlow model and stored its metadata in a caffemodel file for the Python script to pull from. Every time the drone stops at a marker, a method is run that applies a convolutional neural net to the frame and determines how much of a specific item (right now the model is trained to recognize soda cans but can easily be taught other items) it at said marker (remember that each marker is to be placed at each brand’s individual section). In the video below, you’ll see a POV video of my drone with two markers placed on the wall in my garage. What happens is that the drone takes off, centers itself on the first marker and as its ID is 140 and the target ID is 138, it’s driven left to the second marker which has a soda can hung next to it. It then identifies the soda can, conveying the number of cans of that brand to the shop owner before centering itself on the marker and landing due to it reaching the target marker. + +My main goal with this project was accessibility. I wanted to make a drone that could navigate purely based on its camera with computer vision tools that aren’t exclusive to MAVLink or ROS drones. By fitting the camera to the front not only would a user be able to get more functionality out if it than simply map-based navigation but would be able to make more useful applications such as shop keeping or security through facial recognition. With alterations to the left, right, front, back, up and down commands this script can be applied to any hackable drone and requires little to no prior experience to use. + +Check out the video below to see it in action: + + + +## Contact info + +* Email - [jadenbh12@gmail.com](mailto:jadenbh12@gmail.com) +* Telegram - [@jadenbh12](tg://resolve?domain=jadenbh12) diff --git a/docs/en/blocks.md b/docs/en/blocks.md index 19699453..4078f9c7 100644 --- a/docs/en/blocks.md +++ b/docs/en/blocks.md @@ -14,7 +14,7 @@ For correct work of the blocks programming, `blocks` argument in the Clover laun ## Running -To run Clover's blocks programming interface, [connect to Clover's Wi-Fi](wifi.md) and go to web-page http://192.168.11.1:8080/clover_blocks/ or click the link *Blocks programming* at the [main page](wifi.md#web-interface). +To run Clover's blocks programming interface, [connect to Clover's Wi-Fi](wifi.md) and go to web-page http://192.168.11.1/clover_blocks/ or click the link *Blocks programming* at the [main page](wifi.md#web-interface). The page looks as follows: diff --git a/docs/en/blue_jay_eindhoven.md b/docs/en/blue_jay_eindhoven.md new file mode 100644 index 00000000..ae7e76a3 --- /dev/null +++ b/docs/en/blue_jay_eindhoven.md @@ -0,0 +1,37 @@ +# Designing a drone and a path planning algorithm + +[CopterHack-2021](copterhack2021.md), team: **Blue Jay Eindhoven**. + +## Introduction + +We at Blue Jay Eindhoven are a student team of the Eindhoven University of Technology. We are doing research on drones that fly indoors, are interactive, autonomous, safe and helpful. + +We are participating in the Copterhack 2021, because COEX has a lot of knowledge about making a drone. With the help of COEX's expertise, we would be able to develop our drone further. However, the project with which we started the Copterhack turned out to be not that successful. We therefore also didn't get to have a more in depth discussion with COEX. The fact that we are not an open source company, added to this. We couldn't just share everything and when that one project failed, we first had to look at what we are going to share next. Because of these events, the collaboration part hasn't really lifted off. + +The information that you are going to find in this project summary is therefore not that specific developed for the Clover drone. It can however certainly be used to customize the Clover drone. In addition, it can also give a first overview for beginners on how to design a path planning algorithm and how the design process of a drone looks like. + +We are still planning on doing some research on the Clover drone itself. This will mainly be on the stability and movability of the our drone. But we are going to start with investigating it on the Clover drone. So there might be a nice further collaboration on this. In addition, we are also trying to implement the codes for the Clover drone onto our drones. By doing this, we will also be able to provide some feedback on it and develop it further. + +Now we will give you a short summary of our results on the Path Planning Algorithm and the Hardware Research that we have done. For the full reports, you can go to this google drive: https://drive.google.com/drive/folders/1vfWjWD5Qx38mDta0PvMFvAv6jC-mxF7U?usp=sharing. + +## Path Planning Algorithm + +It is investigated what the most optimal path planning algorithm is for the Clover drone. This is done since it was noted that this is not done in the base version of the drone. The path planning algorithm makes it possible that the drone flies autonomous in a much better way than without the algorithm. + +In the documentation, we have set up a plan to put this path planning algorithm to work on your drone. This is a low level algorithm, so everyone should be able to implement it. The algorithm does however need some sort of map from which it can get information on the possible paths. So that part, you still have to implement yourselves. + +## Hardware Research + +The report describes the internship project carried out at Blue Jay. As we focus on indoor drone application, we wishes to minimize the produced noise to improve user experiences. On the other hand, we also wish to improve the flying efficiency for benefiting flying time. As result, the project is about making the drone more efficient with less noise emitted during the operation. For producing design to approach the problem, design methodology has been applied. In the end the ducted fan design has been chosen through studied theory and experimenting. However, there are two additional requirements, an increase in amounts of sensors and an increase in propeller numbers to increase safety. These additional requirements result the drone has less flying time due to the increase in weight. However, the selected design still improved the efficiency of selected propeller. + +This hardware part is more of a general research that can be applied to all drones, including the Clover drone. If a group of high school or university students would like to do their own research on the Clover drone, they can use the research for ideas. They can for instance perform a project in which they design their own 3D printed ducted fans to use on the Clover drone. The research in the report would then be a good first read on how to design such a thing and what the performance results could be. + +In addition, the kind of propellers that are used on the Clover drone can also be adjusted. Maybe a group wants get a little smaller or larger propellers or even a different shape. The research done can then also help as a guide to decide what kind would be best for that specific use with respect to size and shape. + +It is also useful when one wants to use the code that the Clover drone uses, but also wants to develop their own drone. The hardware research can then be used as a guide on how you can do this. It states all kind of factors that should be taken into account and in what way you can do this. + +## Full Project Information + +To see what our project at Blue Jay is all about, you can watch the following video of our interim event: [https://www.youtube.com/watch?v=E\_8TTQN92pU&t=0s](https://www.youtube.com/watch?v=E_8TTQN92pU&t=0s). We state our user case, explain what we have achieved so far and what the plans are for the future. + +If you have questions or ideas, feel free to ask! You can contact us at [info@bluejayeindhoven.nl](mailto:info@bluejayeindhoven.nl). diff --git a/docs/en/calibration.md b/docs/en/calibration.md index 2b618a26..42d5e7fe 100644 --- a/docs/en/calibration.md +++ b/docs/en/calibration.md @@ -2,7 +2,7 @@ In order to perform the sensor calibration, select the *Vehicle Setup* tab and choose the *Sensors* menu. -> **Caution** If you use the flight controller *COEX Pix*, all *Autopilot Orientation* columns must specify `ROTATION_ROLL_180_YAW_90`, otherwise the flight controller will not correctly perceive the tilt and rotation of the copter. +> **Caution** If you use the flight controller [*COEX Pix*](coex_pix.md), all *Autopilot Orientation* columns must specify `ROTATION_ROLL_180_YAW_90`, otherwise the flight controller will not correctly perceive the tilt and rotation of the copter. ## Compass diff --git a/docs/en/coex_gps.md b/docs/en/coex_gps.md new file mode 100644 index 00000000..4b3876f9 --- /dev/null +++ b/docs/en/coex_gps.md @@ -0,0 +1,13 @@ +# COEX GPS + +The GNSS receiver **COEX GPS** is compatible with the [COEX Pix](coex_pix.md) flight controller. This receiver comes with a COEX Clover Drone Kit. + +## Port pinouts + +### Top view + + + +### Bottom view + + diff --git a/docs/en/coex_pdb.md b/docs/en/coex_pdb.md new file mode 100644 index 00000000..ab611a7d --- /dev/null +++ b/docs/en/coex_pdb.md @@ -0,0 +1,15 @@ +# COEX PDB + +**COEX PDB** is the power distribution board used in [Clover 4 Drone kit](assemble_4_2.md). + +Board size: 35x35 mm. + +## Port pinouts + +### Top view + + + +### Bottom view + + diff --git a/docs/en/coex_pix.md b/docs/en/coex_pix.md index 305b2ac3..7516ca4f 100644 --- a/docs/en/coex_pix.md +++ b/docs/en/coex_pix.md @@ -35,9 +35,9 @@ The **COEX Pix** flight controller is a modified [Pixracer](https://docs.px4.io/ ### Port pinouts - + - + > **Note** On rev. 1.0 boards *RC IN* port and microSD slot are switched. Pinout for the *RC IN* port is the same on these boards. @@ -70,6 +70,6 @@ The board utilizes low-noise DC-DC converters, voltage inputs have LC and ferrit ### Port pinouts - + - + diff --git a/docs/en/contributing.md b/docs/en/contributing.md index e51442d7..5f56437e 100644 --- a/docs/en/contributing.md +++ b/docs/en/contributing.md @@ -56,7 +56,7 @@ Prepare your article and send it as a pull request to the [Clover repository](ht git checkout -b new-article ``` -4. Write a new article in the [Markdown](https://en.wikipedia.org/wiki/Markdown) format and save it in the `docs/ru` or `docs/en` folder (for example, `docs/en/new_article.md`). +4. Write a new article in the [Markdown](https://en.wikipedia.org/wiki/Markdown) format and save it in the `docs/ru` or `docs/en` folder (for example, `docs/en/new_article.md`). Don't forget to give you contacts (e-mail / Telegram / ...) in articles on your projects. 5. Place additional visual assets in the `docs/assets` folder and add them to your article. 6. Add a link to your article to the appropriate section in the `SUMMARY.md` file (in the same folder as in the fourth step): diff --git a/docs/en/copterhack2021.md b/docs/en/copterhack2021.md new file mode 100644 index 00000000..136d455b --- /dev/null +++ b/docs/en/copterhack2021.md @@ -0,0 +1,35 @@ +# CopterHack 2021 + +CopterHack 2021 is a team competition for the development of open source projects for the Clover quadcopter platform. + +All information about the event can be found on the official website: https://coex.tech/copterhack. + +Full stream of the final: https://www.youtube.com/watch?v=Z06vxuAHmuE. + +
    + + +
    + +## Participating teams articles + +|Place|Team|Project|Points| +|-|-|-|-| +|1|πŸ‡§πŸ‡Ύ FTL|[AdvancedClover](../ru/advanced_clover.html)|18.8| +|2|πŸ‡·πŸ‡Ί EasyToFly|[EasyToFly](../ru/easytofly.html)|18.5| +|3|πŸ‡©πŸ‡ͺ ADDI|[3D-printed generative design frame](generative_design_frame.md)|17.8| +|4|πŸ‡°πŸ‡¬ AT Makers|[D-drone Graffiti-copter](ddrone.md)|16.7| +|5|πŸ‡ΆπŸ‡¦ DroMap|[The Indoor Mapping Drone](dromap.md)|16.5| +|6|πŸ‡°πŸ‡¬ MINIONS|[Seed spreading quadcopter](seeding_drone.md)|15.5| +|7|πŸ‡·πŸ‡Ί Hardaton|[Π₯Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½ ΠšΠ²ΠΈΠ΄Π΄ΠΈΡ‡](../ru/hardaton_quidditch.html)|15.48| +|8|πŸ‡·πŸ‡Ί Atomic Ferrets|[БистСма засСчки для Π΄Ρ€ΠΎΠ½ΠΎΠ²](../ru/race_timing_sys_copterhack.html)|15| +|9|πŸ‡·πŸ‡Ί Drones to fight Corona|[Drones to fight Corona](anticorona_drones.md)|14.6| +|10|πŸ‡·πŸ‡Ί AMLS|[Autonomous Multirotor Landing System](amls.md)|12.8| +|11|πŸ‡·πŸ‡Ί PΠ°D30DΠ–|[ΠžΠΊΡ‚ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ со спСцифичным располоТСниСм ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€ΠΎΠ²](../ru/oktazodg.html)|11.6| +|12|πŸ‡·πŸ‡Ί Zaural Viking|[ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ](../ru/zaural_viking.html)|11.4| +|13|πŸ‡¨πŸ‡¦ Bennie and the Jetson TX2|[Retail Drone](bennie.md)|9.8| +|14|πŸ‡³πŸ‡± Blue Jay Eindhoven|[Designing a drone and a path planning algorithm](blue_jay_eindhoven.md)|9.6| +|15|πŸ‡·πŸ‡Ί ProCleVeR|[Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСмы для управлСния Π‘ΠŸΠ›Π с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шлСма Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ](../ru/remote-control-with-oculusvr.html)|8.5| +|16|πŸ‡·πŸ‡Ί Quadrotor|[Π”Ρ€ΠΎΠ½-Агроном](../ru/drone-agronom.html)|7.7| + +See points by criteria in the [full table](https://docs.google.com/spreadsheets/d/1L9NDrw4c4vTCIVR3aC8ErAjxnuBg-Afil9AwUQZVJ5I/edit?usp=sharing). diff --git a/docs/en/ddrone.md b/docs/en/ddrone.md new file mode 100644 index 00000000..d7c8ce8d --- /dev/null +++ b/docs/en/ddrone.md @@ -0,0 +1,98 @@ +# D-drone Copter Hack 2021 by AT Makers + +[CopterHack-2021](copterhack2021.md), team **AT Makers**. + + + +## Intro + +People strive to teach artificial intelligence everything they can do themselves. We are taught to draw from childhood. And why not teach the drone to draw? At the moment, copters and graffiti are gaining popularity. So we decided to combine them. + +## Models and assembly + + + + + +To complete the project you need to have in stock: + +- spray paint +- clover 4 kit +- servo MG90S +- 3D printer +- spray can extension straw +- velcro +- 4 long screws and nuts M4 or M3 +- 2-4 short self-tapping screws M4 or M3. + +[Download](https://github.com/PerizatKurmanbaeva/D-drone/tree/master/details) and 3D-print details: + +- holder +- screw +- rack_holder_with_nut +- rack x2 +- servo_holder. + +**Spray holder.** The spray holder is attached to the deck with 4 screws and nuts. To fasten the can to the holder, we used a tape with velcro. With 4 nuts and screws, we fix the drone's upper deck with spray holder. + +Holder weight: 90g. + + + +If the diameter of the can is less than the diameter of the holder, we use the part in the form of an arc, with the size of the difference between them. This helps us to fix the spray can firmly. + +**Pressing mechanism.** To push the valve, we will use a screw drive with a fixed nut. A bar with holes will be attached to the servo, which will include the racks attached to the nut. This helps the servo to move only on one axis, up and down. We also modeled the cap for the spray can button, since the surface of the nozzle is uneven. + + + + + +## Before launching + +### Configuring the servo scripts + +Before starting the copter, you need to download [servo.py](https://github.com/PerizatKurmanbaeva/D-drone/blob/master/examples/servo.py) and move it to RPi. You can simply copy and paste using the clipboard. Or copy it using the scp command. For instance: + +```bash +scp servo.py pi@192.168.11.1:/home/pi +``` + +Then run the following commands remotely on the Raspberry Pi: + +```bash +sudo pigpiod +python servo.py +``` + +### Configuring the Web interface + +Download this [repository](https://github.com/PerizatKurmanbaeva/visual_ddrone) in .zip format. Copy to RPi and unpack using the following commands: + +```bash +scp visual_ddrone-master.zip pi@192.168.11.1:/home/pi +cd catkin_ws/src/clover/clover/www +unzip /home/pi/visual_ddrone-master.zip . +mv visual_ddrone-master ddrone +``` + +Now to open the web interface, click on the link [http://192.168.11.1/clover/drone](http://192.168.11.1/clover/drone). + +## Web interface + +Our drone is launched via [website](https://perizatkurmanbaeva.github.io/visual_ddrone). The web interface allows you to draw and encode what you draw in G-code. The coordinate data will be transmitted for further processing and execution by the copter. + + + +We pick the web interface to control the copter because it is easier for the user. + + + +## Flights + + + +## Special Thanks + +Project was created with financial support of International Ala-Too University. + +![Ala-Too University](https://my.alatoo.edu.kg/images/logo_text.png) diff --git a/docs/en/dromap.md b/docs/en/dromap.md new file mode 100644 index 00000000..306d6653 --- /dev/null +++ b/docs/en/dromap.md @@ -0,0 +1,238 @@ +# DroMap: The Indoor Mapping Drone + +[CopterHack-2021](copterhack2021.md), team: **DroMap**. E-mail: [officialdromap@gmail.com](mailto:officialdromap@gmail.com). + +Team: + +* Shouq AlQahtani +* Ameena AlMansouri +* Noof AlMarri + +## Abstract + +In the modern era, the world is witnessing a magnificent development in the field of architecture and interior design. Due to architectural development, the current measuring tools such as metal tapes and leaser meters became insufficient for assisting both architects and interior designers in taking the measurements for buildings and facilities. Because the accuracy of obtained readings depends on the professionalism of the users and the nature of these tools is unidirectional, the measurement taking process becomes less efficient in terms of time and labor. Since drones have played an essential role in revolutionizing the world of science and automation due to their use in a huge number of daily life applications, an introduction of indoor drones in the field of mapping and architecture is indispensable. Hence, the DroMap project proposes an autonomous indoor drone that can navigate autonomously and create a map of the indoor environment along the way. For the aforementioned purpose, a LiDAR sensor is used to collect data of the indoor place which is sent to a host computer. Afterward, simultaneous localization and mapping algorithm utilizes these data to pave the way for creating a 2-dimensional map. This autonomous indoor mapping drone system is not prone to inefficiency and human errors like in manual mapping and has the potential to take indoor mapping to the next level in the near future. + +## Motivation + +### Problem Statement + +Architects lives are constantly in danger due to the nature of their work as they are supposed to enter buildings without knowing their structure, these dangers could potentially threaten their lives and can lead to many issues. According to [^1], there are 1.2 deaths per 100,000 architects and that job is ranked 19th among the most dangerous jobs in the United States. One example of a fatal accident is the accident of Bruno Travalja which happened in 2016, this architect fell from the 48th floor of a building while taking measurements. In addition to being dangerous, the process of mapping an indoor environment is time-consuming, especially in transferring the raw measurements into a 2-dimensional map [^2]. Therefore, the need for robot assistance in mapping and measurement taking processes reaches the peak. Autonomous indoor mapping using drones or robots is considered an important tool where the drone can reach different places which are inaccessible to humans due to space constraints or security reasons [^3]. + +The use of robots has increased dramatically within the past decade due to their enormous potential in both civil and architectural applications. Specifically, in designing and building robots for mapping enclosed buildings. Even though most of the works were implemented on unmanned ground vehicles (UGV), the current experimental use of unmanned Ground vehicles for indoor mapping suffers from a few shortcomings. Particularly, most implementations suffer from low performance regarding time consumption and have difficulty accessing narrow places. Since UGVs have limitations in terms of time consumption and navigation rigidity, in the DroMap project we decided to use drones as a replacement for UGVs to map indoor sites. This is because drones are unique in their ability to traverse any 3D interior space without any restrictive concerns regarding space architecture. Additionally, since these vehicles are not required to remain on the ground, aerial vehicles can fully explore the extent of the indoor space, regardless of their interiors. Furthermore, unmanned aerial vehicles can access difficult to reach areas. + +A questionnaire was conducted for this project to study the need for an indoor mapping drone which involved 72 architects and interior designers. The following question was asked to have an estimate of the time taken by the targeted category for taking the measurements of a large building. According to the survey results, 61% of the sample consume more than 60 minutes to measure a large building. This shows that the measurement taking process is time-consuming. + +![](../assets/dromap/Picture1.png) + +#### Technical Challenges + +* The positioning system calculates the odometry data based on the laser scanner poses. This might misestimate the drone’s position with respect to the surroundings. +* The LiDAR readings could be infinite if the distance between the LiDAR and the surrounding walls exceeds the LiDAR range. +* The communication between the Raspberry Pi and the PC relies heavily on Wi-Fi. Therefore, any loss in the Wi-Fi signal would terminate the communication between the drone and PC. + +#### Non-technical Challenges + + + +* The indoor environment could be full of obstacles, which impedes path planning process. +* The mirrors, windows, and glass doors may affect the accuracy of the map as they are not detected correctly by the laser pulses. + + + +### Project Significance + +Measuring a room or a full building along with transforming the collected data to a full map is time-consuming and requires massive effort. DroMap helps architects and interior designers to measure and generate a fully constructed 2D map with less time and effort. To help us understand the problem better, we conducted a survey to assess the need for an indoor mapping drone. This project will provide a great advantage for architects and interior designers as it would save time and effort in the map construction process. In addition, it will assure great cooperation from both the computer and architecture fields. + +Generally, the process of mapping an indoor environment is composed of two phases; the first phase is the measurement taking phase and the second phase is the map drawing phase. However, the project introduces another way to create a map that is faster and requires less effort; as the measurements of the surroundings will be taken by the system once it is activated and processed by Simultaneous Localization and Mapping algorithms (SLAM) for building and updating maps as well as positions of an unknown environment in robotics in real-time. According to the survey, 94% of the sample agreed that it would be useful to have a robotic based measuring tool. Therefore, the proposed solution will successfully assist architects and interior designers in mapping indoor areas. + +![](../assets/dromap/1.2fig.png) + +Based on the conducted survey, accuracy is the most important characteristic to be satisfied with the project. The below figure demonstrates that 48 of the sample sizes care about having high accuracy. Moreover, the second most important feature to be reached is having a short scanning time, which highlights the importance of the project. + +![](../assets/dromap/1.3fig.png) + +Furthermore, since the project employs multiple concepts related to indoor robots and indoor data processing, it can be extended to assist other fields in Qatar rather than the architecture field only. For example, this project could be a great step towards training drones to handle different tasks related to search and rescue such as entering buildings on fire or finding a missing person in indoor places. This will serve to develop more technologies to process the indoor data in various environments and conditions, also to develop drones that are capable to operate in indoor areas with different functionalities. + +## Proposed solution + +DroMap project consists mainly of two major components: the drone and the drone add-on. The drone is responsible for the physical movement of the entire system. The drone add-ons consist of necessary sensors for mapping, path planning, and mounting equipment such as Raspberry Pi 4, RPLiDAR A1M8, Sonar, and range finder. The Raspberry Pi collects the data from the sensors. While the data is being collected by the Raspberry Pi, the Hector SLAM will process these data in real-time to formulate 2-dimensional maps. After that, the map will be sent wirelessly to a remote PC and visualized through RVIZ software tool. + +![](../assets/dromap/HLA.jpg) + +### Hardware/software to be used + +#### Hardware selection + +##### COEX Clover Drone kit + +Clover is a complete STEM educational programmable drone kit which includes unassembled quadcopter with four propellers and open-source software. + +* Limitless possibilities of a fully programmable drone (Open Source). +* Drone can operate stably without GPS. +* The Clover platform exploits the ROS framework. +* Made especially for Indoor flights. + +##### Slamtec RPLiDAR A1M8 + +LiDAR is low cost 2D 360Β° 12m scanning sensor. + +* Omnidirectional Laser Range Scanner 360Β°. +* Compatible with ROS. +* Very high sampling Rate 8k times, Considered as one of the Highest in the Current LiDAR industry. +* Ideal for indoor Navigation and Localization using UAVS. + +##### Raspberry Pi 4 Model B + +Raspberry Pi is a single-board computer which is used as a companion computer. + +* Low energy consumption. +* Connect the drone over Wi-Fi. +* Responsible for flight autonomy. +* Access and issue commands to peripherals. + +##### VL53L1X RangeFinder Sensor + +Laser Ranging Sensor Module Rangefinder. One of the smallest time-of-flight 940 nm laser VCSEL. Measuring absolute range up to 4 meters. + +* The Range Finder Optical Ranging sensor is an integrated sensor with embedded infrared, eye-safe laser, advanced filters and high-speed photon detection arrays. +* Range finder Supports 400cm sensing range, suitable for many applications. + +#### Software selection + +##### Robot Operating System (ROS) + +A framework which runs on Linux operating system, and will be used as a firmware to control and monitor the system. + +##### COEX Virtual Machine + +A Linux operating system that has a pre-installed ROS along with some necessary dependencies and packages in addition to a pre-configured Gazebo environment. + +##### Gazebo + +The simulation tool that will be used to test and try different mapping and automation approaches. + +##### Visual Studio Code + +A text editor to write python scripts to program the drone. + +##### RVIZ + +A visualization tool to visualize the LiDAR readings. + +##### QGroundControl + +QGroundControl supports full flight control and mission planning for any MAVLink enabled drone. + +## Implementation + +The implementation divided into two parts. The first part is to work on the simulation software, and the second part is to work on the physical hardware components. The simulation software helped us to have an estimation of how the system will work in the physical world. Through the simulation software, we were able to identify some implementation challenges and finding solutions for them. In addition, the simulation software gave us the opportunity to process the sensors data and test the sensors before testing them physically, which speeded up the process of working on the physical components and testing them. Moreover, it was found that the results obtained from the simulated components and the physical components were close to each other. In this section, we demonstrate the progress that happened in both the physical and the virtual worlds. + +### The Simulation Software + +#### The Mapping algorithm + +The Hector SLAM algorithm was selected in this project due to its high efficiency in mapping indoor environments, its ability to work with drones efficiently, and its facility to be integrated with the selected LiDAR sensor. Moreover, it consumes less power in handling some cases where the indoor environment is dynamic, and the obstacles are moving [^4]. Hector SLAM is an algorithm that is used widely in mapping unknown indoor environments. The algorithm is LiDAR-based, and it uses the Gaussian Newton equation to construct accurate maps from the laser scanner data [^5]. Moreover, this algorithm does not use any odometry data to estimate the robot’s position with respect to its surroundings. Instead, the algorithm utilizes the difference in the laser scanner locations to calculate the odometry [^6]. This feature qualifies the Hector SLAM algorithm to work optimally with the unmanned aerial vehicles given that in most of the cases, the odometry data is calculated from processing the wheels motion and that is not the case with UAVs. In addition, the algorithm provides an accurate estimation of the robot’s position with respect to its surroundings. + +#### The Exploration Algorithm + +The method used in this project to explore the indoor sites is selected to be the wall following algorithm due to its effectiveness and simplicity. The implementation of that algorithm can be summarized into three main functions which are: `left_side()` , `move_forward()`, and `take_stop_action()` which are represented in a while loop as following: + +> **Note** The implementation of the wall following algorithm highly depends on the LiDAR used in the simulator which is Hokuyo laser scanner with 360 rotation angle and 720 readings per 32ms. However, the physical LiDAR used is RPLiDAR A1M8 which provides 360 readings per rotation. + +```python +while(1): + left_side() + move_forward() + take_stop_action() +``` + +```python +left_side() +``` + +This function uses the LiDAR readings that are pointing exactly to the west of the drone, it measures how far the drone is from the left wall, then adjust the drone to it such that the drone is approximately 0.7 m away from the left wall. The reason of using 0.7 meters is because the drone has higher error that expected. Therefore, a while loop is used to ensure that the drone is far enough from the wall. + +```python +move_forward() +``` + +This function was implemented to safely move the drone forward without hitting a wall, or without skipping an outer corner. The logic behind this algorithm is that it uses the concept of the right angle, and multiple readings which correspond to different angles to measure the safe distances. The bellow flow chat demonstrates the logic of that algorithm in details. + + + +When the function ends, the drone will either stop after an inner corner, or an outer corner. + +```python +take_stop_action() +``` + +This function handles two different situations: + +* The first situation is that the drone may stop when it faces an inner corner, this can be detected by measuring the distance from the front wall, then compare the current distance of the left LiDAR reading with the previously recorded one, if the comparison showed that there is a small difference between these two readings, then this means that the drone must rotate to the right and continue its path. +* The second situation is that the drone may stop when it detects an outer corner, the logic is exactly like the first situation except, that the drone must be away from the front wall (with distance greater than 1.5 meter). In addition, the difference between the current left LiDAR reading, and the previously recorded reading must be greater than 0.5 m. If this is the case, then the drone has stopped because of an outer corner. Therefore, the drone must rotate to the left and continue its path. + +The following video illustrates a ROS Simulation test on Wall Following Algorithm: + + + +#### Testing + +![](../assets/dromap/Maze1.jpg) + +The above figure demonstrates the drone exploring a maze autonomously while constructing a 2D map in real-time. The terminal shows the safe distances to move forward, these distancing where calculated using the aforementioned flowchart. + +The following figures show a constructed 2D map of different environments. + +![](../assets/dromap/hectortest1.jpg) + +![](../assets/dromap/hectortest2.jpg) + +The following video demonstrates an autonomous maze exploration with Hector SLAM responsible for constructing a 2D map: + + + +### The physical hardware + +This section illustrates the progress done regarding the hardware components. The first step done was to establish a Wi-Fi communication between the Raspberry Pi and the remote PC. The second step was to install the hector SLAM and robot Localization packages in the Raspberry Pi to visualize the maps remotely. + +#### Initial Setup + +The drone is assembled and configured correctly to accomplish the autonomous mapping mission. The RPliDAR A1M8 and all other necessary sensors are mounted on the drone as shown in the figure bellow. + + + +To set up the drone ready for mapping, the raspberry pi image created by COEX was installed on the micro-SD card. COEX Raspberry Pi image, COEX pixracer image and COEX virtual machine were selected as they contain all the necessary tools and packages to work efficiently with clover platform. The installed platform is based on Raspbian operating system and ROS. After flashing the image on the SD, the next step is to connect clover to Wi-Fi. + +#### Network Setup + +The drone produces a map of an unknown indoor environment by sending data received from the sensors to a remote pc. The transmission takes place over a wireless channel to get a map in real-time. One of the essentials for DroMap is to setup the connection between the drone and the remote PC. In DroMap Project ROS network must satisfy the listed below requirements: + +1. There must be a full bidirectional communication between all the nodes. +2. Every component in the network must advertise its name. +3. In ROS network one of the components must be declared as the ROS master. Specifically, the ROS master is the drone (Clover-6064). +4. All ROS packages needed in the project, must use the ROS master. + +All these requirements are fulfilled in our design. + +#### Required packages + +After the installation of ROS, the drone was ready to install RPLidar ROS package and Hector SLAM. These packages are installed by cloning them in a catkin workspace src folder. Then build them by running catkin build. The following commands were entered in the terminal show the process of installing RPLidar package and hector SLAM in raspberry pi. The `rplidar_ros` package is responsible for retrieving the RPLidar data and hector SLAM package is responsible for building maps. `rplidar_ros` and `hector_slam` packages ware installed from GitHub. + +#### Testing + +The testing phase was divided into several stages in order to test the sensor and the SLAM algorithm in several closed places. This makes it possible to identify obstacles and risks that may face us in the future. + +We did several of the following elementary tests: + +* Firstly, we flew the drone to obtain maps using Hector Mapping with the remote control. +* Secondly, we have moved to the automation stage of implementing the codes applied in the simulator. +* Finally, From here we did some tests, for example, the drone flies to the wall, and then lands after getting a wall reading. And tests are still going on for a fully automatic flight. + +## References + +[^1]: β€œThe 20 deadliest jobs in America, ranked,” CBS News. https://www.cbsnews.com/pictures/the-20-deadliest-jobs-in-america-ranked/4/. +[^2]: A. Kovalchenko, β€œHow To Carry Out a Survey and Site Measure,” 2012. https://essenziale-hd.com/2012/10/28/how-to-carry-out-a-survey-and-site-measure/. +[^3]: D. HΓ€hnel, W. Burgard, and S. Thurn, β€œLearning compact 3D models of indoor and outdoor environments with a mobile robot,” Rob. Auton. Syst., vol. 44, no. 1, pp. 15–27, 2003, doi: 10.1016/S0921-8890(03)00007-1. +[^4]: M. Eliwa, A. Adham, I. Sami, and M. Eldeeb, β€œA critical comparison between Fast and Hector SLAM algorithms,” / REST J. Emerg. trends Model. Manuf., vol. 3, no. 2, pp. 44–49, 2017, [Online]. Available: www.restpublisher.com/journals/jemm. +[^5]: J. M. Santos, D. Portugal, and R. P. Rocha, β€œAn evaluation of 2D SLAM techniques available in Robot Operating System,” 2013 IEEE Int. Symp. Safety, Secur. Rescue Robot. SSRR 2013, 2013, doi: 10.1109/SSRR.2013.6719348. +[^6]: H. Gossett, β€œBuilding an Autonomous Indoor Drone System,” University of Mississippi, 2018. diff --git a/docs/en/events.md b/docs/en/events.md new file mode 100644 index 00000000..220f6daa --- /dev/null +++ b/docs/en/events.md @@ -0,0 +1,5 @@ +# Events + +Clover is being used in a lot of educational events and competitions, such as WorldSkills, NTI Olypics, Copter Hack, Innopolis Open Robotics, etc. + +This section contains articles written specifically for a particular event. diff --git a/docs/en/fpv_clover_4_2.md b/docs/en/fpv_clover_4_2.md new file mode 100644 index 00000000..339397e9 --- /dev/null +++ b/docs/en/fpv_clover_4_2.md @@ -0,0 +1,94 @@ +# Installing and configuring FPV equipment + +## Preparing and installing the FPV camera and transmitter + +1. Install the small mounting deck onto the main frame. + +
    + + +
    + +2. Install the camera mount bracket into the corresponding holes. + +
    + + +
    + +3. Cut the three-pin supplied camera cable. + +
    + + +
    + +4. Tin the wires + + + +5. Solder the JST-male connector to the power wires of the camera. + +
    + + +
    + + > **Hint** Π‘heck what you are wearing shrink tubes before soldering the wires. + +6. Solder the JST male connector to the transmitter. + +
    + + +
    + +7. Solder the yellow camera signal cable to the transmitter. + +
    + + +
    + +8. Connect the antenna to the transmitter. + + + + > **Caution** If voltage is applied to a transmitter without an antenna, there is a high probability that it will burn out. + +9. Place the receiver onto the mounting deck, securing it with ties. + + + +10. Place the mounting deck with the receiver on the bottom of the aircraft. + + + +11. Place the camera in the bracket and secure it with the 4 attached bolts. The camera should be at an angle of 15Β°-20Β° relative to the plane of the aircraft. + +
    + + +
    + +
    + + +
    + +12. Connect the signal cable to the camera. + + + +13. Connect the camera's power cable to the power JST soldered to the *BAT+* and *GND* pads on the power distribution board. + +14. Connect the transmitter power cable to JST at 5V. + + + +## Setting up and connecting FPV goggles + +1. Install the two supplied antennas on the glasses. +2. Turn on the glasses by holding the power button for 3-4 seconds. +3. Turn on the aircraft and make sure the transmitter LED is blue. +4. Press the *Auto Search* button on the glasses to automatically search for an available radio channel. diff --git a/docs/en/generative_design_frame.md b/docs/en/generative_design_frame.md new file mode 100644 index 00000000..161f83ad --- /dev/null +++ b/docs/en/generative_design_frame.md @@ -0,0 +1,95 @@ +# 3D-printed Generative Design Frame + +## ADDI Copterhack 2021 Project + + + +### Contact + +[Website](https://www.aachen-drone.de), +[Mail](mailto:daniel.honies@rwth-aachen.de), +Telegram: @danielhonies. + +## Introduction + +At the Aachen Drone Development Initiative we aim to develop a new frame for the clover drone by implementing the latest state of the art CAD-Design techniques as well as advanced manufacturing methods. + +Three main goals have to be taken into consideration when designing a new frame: + +- Decreasing the Weight +- Improving Durability +- Increasing Safety + +For the first stage of the design we will focus on the first two points. + +## Software + +For designing our drone we use Autodesk Fusion 360. It comes with a generative design feature. This makes it possible to create rule-driven designs. First the preserved geometry is defined. Usually this includes all kinds of mounts like motor mounts, flight controller mounts, RPi mount etc. Then obstacle geometry is defined. This for example includes space for the propellers and the airflow. After that forces are defined. Then Fusion 360 will automatically calculate optimal connections for the aforementioned preserved geometry. + +

    + + +

    + +### Prototypes + +#### Prototype 1 + +After printing the first version of the frame we discovered the following problems: + +- Bad Filament: Layer Adhesion of the Filament was quite bad resulting in a not very rigid model +- Support Structure: The support structure for the frame is very complex and the parameters used in the slicer resulted in it being unable to be removed without destroying the model +- Arm Strength: Some parts of the arms to the motor mounts were very thin, resulting in them breaking easily and removing the support structure resulted in breaking them + +To conquer those problems we made several changes. We increased the minimal thickness for the generated structures and generated a new model. We changed the settings in the slicer so that the support structure could be removed easier as well as changed the infill structure. Finally we changed the filament and increased the printing temperature. Further we concluded that printing with a water dissolvable support structure would be optimal, however as of right now we don’t have access to a printer capable of that. + +![Prototype 1](../assets/generative-design-frame/p1.JPG) + +#### Prototype 2 + +This prototype took 48 hours of printing and used 277 grams of filament including 100 grams for the support. Installation of the components is very easy as no other tools than a screwdriver are needed. This prototype was the first to take flight in January 2021. Please see [this](https://youtu.be/M4f8_JmJADM) video. + +

    + + + +

    + +#### Prototype 3 + +This prototype is even more optimised than the last one. Excluding support the model only weighs 141 grams. For this version we have also developed a prop guard, which weighs around 80 grams. Weight of the drone with the prop guard and a 2200mah battery is under 700 grams. Flight testing in the following videos shows the effectiveness of the prop guard. We also did some drop tests with this model and figured that a drop height of around 1 meter can be sustained. We plan to optimise this while sacrificing a bit of weight in February. + +Videos: + +- [Flight Test](https://youtu.be/uJjnMzz1Nm0) +- [Prop Guard Test](https://youtu.be/UdnqIuXV2UI) + +

    + + +

    + +#### Final Prototype + +In this final prototype we have changed the preserved geometry on the bottom to form a rectangle for added stability. We have also changed some of the forces on the points we observed breakings in our previous tests. We have also updated the prop guard to make it more stable and increased the area around the screws, so it would break harder. The frame without the prop guard weighs only 150g making it significantly lighter than the default frame. + +![final prototype](../assets/generative-design-frame/f.JPG) + +### Benefits + +We see the following benefits with our design over the traditional clover frame design: + +- Tools needed for production: only a 3D printer is needed compared to laser cutter, cnc and 3D printer +- Single material reduces supply chain complexity and reduces cost. Filament is cheap and only around 400 grams are needed for the full frame and the prop guard. This should reduce the cost to under $5. +- The unibody design saves weight and much less screws are needed. This also reduces costs. +- Easier adaptability: Anybody can change the frame to their desire and include their own adapters and mounts. It can be printed by any standard sized 3D printer. (Ender-3, Prusa etc.) +- Manual labor reduced: Printing is easy to automate, packing is significantly reduced as less screws need to be counted etc. + +### Conclusion + +In our work for this years competition we presented a new way to design and manufacture drone frames. By utilizing state of the art methods of CAD programs we are able to optimize the weight and shape of drone frames in a way that for the first time it is feasible to 3D print them. In total we have printed around 10 frames and presented a few of them above and the challenges we faced with them. This iterative process to frame design was only possible due to the fact that only a 3D printer is needed and the filament being very cheap. Due to the open source nature of the project and this report giving a short introduction into generative design, we hope that many people feel inspired to check out this new method of designing and producing drone frames. + +### CAD Files + +You are welcome to test out these frame yourself and you are free to modify them in any way, shape or form. We would appreciate feedback and encourage submitting your modifications in a pull request so other people can benefit from this open source development. +The CAD Files can be found on our [GitHub Page](https://github.com/Aachen-Drone-Development-Initiative/generative-clover-frame). diff --git a/docs/en/lesson6.md b/docs/en/lesson6.md index a7185f40..0d88880b 100644 --- a/docs/en/lesson6.md +++ b/docs/en/lesson6.md @@ -86,6 +86,8 @@ How it works: Works from DC. I.e., by applying voltage from a DC source (a batte * Rapid wear +### Brushless motors + Brushless motors, in which the moving part is the stator, are more efficient than brush-type motors. This is achieved due to the absence of brushes. However, since motor design is much more complicated, they are more expensive. **Advantages:** diff --git a/docs/en/magnetic_grip.md b/docs/en/magnetic_grip.md new file mode 100644 index 00000000..b4f5a08b --- /dev/null +++ b/docs/en/magnetic_grip.md @@ -0,0 +1,65 @@ +# Assembling and setting up the electromagnetic gripper + +The magnetic gripper can be assembled in various ways according to the wiring diagram. + + + +The following is an example of assembling an electromagnetic capture circuit on a breadboard. + +> **Info** It is recommended to lay the wiring between the elements on the back side of the board (in the following images, the wiring is done over the diagram for illustrative purpose). + +1. Place the Schottky diode, 10K resistor, and transistor on the soldering board. + + + +2. Solder the contacts on the other side of the board and bite off the remaining element legs. +3. Connect the pins of the resistor and the two outer legs of the transistor. + + + +4. Connect the center leg of the transistor and the leg of the Schottky diode (opposite to the gray marking strip). + + + +5. Cut the required amount of magnetic grab wire and solder it to the pins of the Schottky diode. + + + +6. Solder the *Dupont* - male wires to the transistor and diode leg (red, black wires), and the *Dupont* - fmale wire to the opposite transistor leg (white wire). + + + +## Checking the operation of the electromagnetic gripper + +In order to check the operation of the gripper, apply a voltage of 5V to the signal wire. You can use the *Dupont* dad-dad wire for that. + + + +After applying voltage, the magnet should turn on. + +## Connecting to Raspberry Pi + +Connect the magnetic gripper to a Raspberry Pi for software activation. + + + +An example of the code activating the magnetic gripper can be found [here](gpio.md#connecting-an-electromagnet). + +## Connecting to Arduino + +Connect the gripper to the Arduino Nano board in order to control it manually. + +It is convenient to place it on the same soldering board β€” insert it into the appropriate holes and solder it from the back to the board. + + + +Then connect the signal output of the circuit to the selected port and solder the *Dupont* female wire to the selected signal port on the board. + + + +## Installation of electromagnetic gripper + +1. Install an electromagnet into the center hole on the gripper deck. +2. Use a zip tie to pull the assembled circuit to the back of the deck. +3. Plug the Arduino *D11* signal pin into one of the *AUX* pins on the flight controller. +4. Plug the power wire of the electromagnetic gripper to JST 5V. diff --git a/docs/en/mechanical_grip.md b/docs/en/mechanical_grip.md new file mode 100644 index 00000000..9b792c80 --- /dev/null +++ b/docs/en/mechanical_grip.md @@ -0,0 +1,69 @@ +# Assembling and setting up a mechanical gripper + +1. Combine the main gripper plates. + + + +2. Install the servo in the appropriate groove in the center of the plates with the axle gear in the middle. + + + +3. Hold down the gripper plates with the small spacers. + +
    + + +
    + +4. Install the gripper deck so that the mounting holes in the grapple correspond with the self-tapping holes in the plate. + + + +5. Fix the gripper structure with self-tapping screws. + + + +6. Turn the servo gear to the end position. + + + +7. Install the cruciform mount onto the gear and secure it using the screw attached to the servo. + + + +8. Cut the cruciform mount. + +
    + + +
    + +9. Tie the servo thread so that there is a 2 to 3 cm margin. + +
    + + +
    + +10. Thread the servo thread into the corresponding tensioning slots. + + + +11. Fasten the grip claws with small self-tapping screws so that their angle is 25°–40Β°. + + + +12. Install the assembled grip onto the aircraft from below. + +
    + + +
    + +13. Insert the servo cable into the *AUX* 1-2 output on the flight controller. + + + +14. Go to the *Radio* tab to control capture with the remote control. +15. In the *AUX 1/2 Passthrough RC channel* parameter, select the desired channel. +16. Now, when you switch the toggle switch of the corresponding channel, the capture will be closed or opened. diff --git a/docs/en/models.md b/docs/en/models.md index 17e42531..55ecd452 100644 --- a/docs/en/models.md +++ b/docs/en/models.md @@ -80,6 +80,24 @@ This page contains models and drawings of some of the drone parts. They can be u +## Clover 4.2 WorldSkills + +### Milling + + + + + + + + +
    PreviewPartFile
    + Big leg.
    + Function: Extended footing element.
    + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: Monolithic polycarbonate 2mm.
    + Quantity: 2 ΡˆΡ‚. +
    big_leg.dxf
    + ## Clover 4 ### 3D print diff --git a/docs/en/modes.md b/docs/en/modes.md index 691cf6bf..9c2ecaaa 100644 --- a/docs/en/modes.md +++ b/docs/en/modes.md @@ -6,7 +6,7 @@ In order to configure flight modes: 1. Open the *Vehicle Setup* tab in QGroundControl. 2. Select the *Flight Modes* menu. -3. Choose SwC (Channel 5) as mode selection switch. +3. Choose SwC (Channel 6) as mode selection switch. 4. Set desired flight modes. The following flight modes are recommended: @@ -16,7 +16,7 @@ In order to configure flight modes: * Flight Mode 6: *Position*. 5. Check mode switching by changing the switch position. -6. Choose SwA (Channel 6) as emergency motor stop (*Kill switch*). +6. Choose SwA (Channel 5) as emergency motor stop (*Kill switch*). QGroundControl modes diff --git a/docs/en/power.md b/docs/en/power.md index ca1c1b82..85f26e2b 100644 --- a/docs/en/power.md +++ b/docs/en/power.md @@ -15,7 +15,7 @@ If there is no voltage indicator or manual calibration is not possible, set the * Put the battery voltage into the prompt and click *Calculate*. * Press *Close* to save the calculated value. - + Further reading: https://docs.qgroundcontrol.com/en/SetupView/Power.html. @@ -28,7 +28,7 @@ Further reading: https://docs.qgroundcontrol.com/en/SetupView/Power.html. 3. Connect the battery when prompted. 4. Wait for the *Calibration complete*. - + Further reading: https://docs.px4.io/v1.9.0/en/advanced_config/esc_calibration.html. diff --git a/docs/en/seeding_drone.md b/docs/en/seeding_drone.md new file mode 100644 index 00000000..48fe0d5a --- /dev/null +++ b/docs/en/seeding_drone.md @@ -0,0 +1,322 @@ +# Seed spreading quadcopter + +[CopterHack-2021](copterhack2021.md), team **MINIONS**. + +Have you ever wondered what a world without trees would look like? Close your eyes, and try to imagine a desolate Earth. There'd be no more paper, and everyone would have to resort to technological use - that is, if anyone was left. Trees are a crucial factor to our existence not only because they produce paper, lumber and chewing gum, but because they serve an important role in the carbon cycle. + +Ever since the industrial revolution between 1760 and 1840, the world has been in a never-ending carbon chaos. Trees and Plankton are our only saviours in terms of handling this problem, and we can only control one of them, trees. + +We need to save trees by protecting them from the destructive human activities like clearance of forests, deforestation for urbanization, etc. Trees are the lungs for the earth. It is an important part of nature’s ecosystem. They balance the soil composition and also act as the barrier for wind and storm. Thus, they provide various uses to the ecosystem. For these reasons, it’s imperative that we save trees. + +Since there are a lot of dangerous and difficult-to-reach landsides for humans to plant, the most viable alternative is to use drones for plantation in those regions. + +Seed-firing drones will, as the name suggests, fire seeds into fertile soil to allow millions of trees to grow back after being cut down for industrial use. If the rate of planting exceeds the rate of cutting, eventually we will restore the trees we once felled. + + + +## Our Aim + +We will make drones able to hold seeds onboard and drop them in an area which we drove in a special application. We can control the density of the seeds and the height of the drop. We also thought about protection of the seeds from insects, animals and dehydration. We choose the earth ball technique invented by Masanobu Fukuoka, aka Fukuoka Technique. This earth ball contains all needed elements to grow, plant seeds and earth for protection. When we drop it on the ground, the earth ball will hold seeds until it gets the needed amount of water and seeds will begin to grow. + +YouTube video link - [https://www.youtube.com/embed/Nz1w59v451U](https://www.youtube.com/embed/Nz1w59v451U). + +We achieved to do small seeding missions but we faced some problem about autonomous flying with GPS. + +We coated our battery to protect it from cold weather, seeding missions need to start in winter since apple seeds need to stay in a cold place for some time to break dormancy. + +- [Seed capsules](#seed-capsules) +- [How to assemble seeding mechanism to clover 4.2 drone](#how-to-assemble-seeding-mechanism-to-clover-42-drone) +- [How to control the seeding mechanism](#how-to-control-the-seeding-mechanism) +- [Programming](#programming) + +## Files + +Link for the all files used in this project: [https://github.com/Sahinysf/TreeSeedQuad](https://github.com/Sahinysf/TreeSeedQuad). + +## Seed capsules + +### Fukuoka technique + +In southern Japan, the Japanese farmer and philosopher Masanobu Fukuoka invented a seed ball planting technique. The method is regarded as a natural farming technique that requires no machines, no chemicals and very little weeding. By the use of seed balls, land is cultivated without any soil preparation. + + + +Advantages of seed balls: + +- It is simple and easier to make seed balls without machines. +- Easier for reforestation and plantation in difficult terrains. +- Contribute to protect soil, environment and livelihood. +- It is an organic technique and doesn’t use any chemicals. +- It is a low-cost method compared to traditional afforestation/reforestation techniques. +- It requires low maintenance. + +### Which Seeds can be used? + +Any seed which grows in your area (In our it’s apple seed). + +Size and weight of the seed capsule: size and Weight of seed capsules are very important for this project. After some experiments we decided that best size is 16-18mm diameter and maximum weight is 10 g. + +Required materials for making seed balls: + +1. 1 bucket of clay +2. 1 bucket of organic dark soil / compost +3. 1 bucket of water (amount of water may vary depending on the soil type) +4. ΒΌ bucket of seeds + +Steps for making seed balls: + +1. Collect same quantity of both clay and organic soil. For example, if you use one bucket of clay, then you should mix with one bucket of organic soil. +2. Make sure that clay and organic soil fine particles. +3. The clay and organic soil texture should be wet but not sticky +4. Take a bit of mixture and roll it into balls. Test the ball by throwing it on a flat surface. If the ball doesn’t break easily, it means it has got good bonding. +5. Seed balls must be a perfectly round shape otherwise they will be stuck while throwing with the quadcopter +6. Insert seeds (1 to 2 seeds per seed ball for permanent trees such as mahogany, sandalwood, orange, moringa…) (Β± 5 seeds per seed ball for vegetables, flowers, grasses, clovers…) +7. Dry the seed balls for one to two days in a shaded area, if properly dry, the seed balls will be protected from external predators such as chickens, birds, rats… + + + +Second technique - paper seed capsules. + +This method was influenced by a Korean newspaper that contained seed that could be planted outside after reading it. + Paper seed capsules : + +Required materials: + +1. Any kind of paper +2. Water +3. Blender +4. Seeds + +Steps for making paper seed balls: + +1. Shred all of your paper. +2. Put paper in blender and add water, after 2 minutes blend. +3. Squeeze all the water out with paper. +4. Add seeds and give round shape. +5. Let it dry overnight. + + + +Advantages of paper balls: + +- Easy to find materials. +- Environmentally friendly. + +REREFENCES + + + + +## How to assemble seeding mechanism to Clover 4.2 drone + +### How to assemble seeding mechanism + +After finishing step 4, at section Installing guard of Clover 4.2 assembly. + +1. Install the Lower Tank Holders to top Deck mount and fix with the M3x8 screws. + + + +2. Install Nylon rack(40 mm) to 4 sides of the Deck mount. + + + +3. Install the Grab deck and fix with the M3x8 screws. + + + +4. Install the Upper Tank Holders to top Grab mount and fix with the M3x8 screws. + + + +5. Connect the Tanks carefully to Tank Holders. + + + +6. Connect SG90 servo motors to Tank using zip tie. + +Final view of seeding drone: + + + +### GPS Module + +We installed the GPS Module to the top using 2 Nylon rack (40 mm): + + + +We coated the battery to protect it from the cold weather: + + + +## How to control the seeding mechanism + +Electronic part of seed dropping mechanism consists of: + +- Raspberry Pi 4 B of COEX Clover 4. +- 2 Micro Servo Motors SG90. +- PDB (Power Distribution Board) of COEX Clover 4. + +Servo motor’s signal pins are connected to Raspberry Pi’s Hardware PWM pins 32 and 33, and power is taken from Power Distribution Board (5 V). + + + +### Explanation of code for controlling servo motors + +Servo motors are controlled using a PWM (Pulse-Width Modulation) signal from Raspberry Pi. PWM controls the amount of time when signal is HIGH or LOW within a certain period of time. Duty Cycle – percentage of time when signal is HIGH. + +In a table below it's presented the duty cycle of Servo Motor SG90 of each angle of servo motor. In order to use duty cycle in code we need to convert time to percentage by dividing duty cycle time by the total PWM period. + +What we get is: + +- -90Β° rotation angle or 2ms Duty Cycle => 1/20*100% = 5% Duty Cycle. +- 90Β° rotation angle or 2ms Duty Cycle => 2/20*100% = 10% Duty Cycle. +- 0Β° rotation angle or 1,5ms Duty Cycle => 1,5/20*100% = 7,5% Duty Cycle. + + + +We’ll do this by using the RPi.GPIO library and writing Python code on the Raspberry Pi. + +First, import the RPi.GPIO library and the sleep function: + +```python +import RPi.GPIO as GPIO +from time import sleep +``` + +Then, setup the GPIO mode as BOARD: + +```python +servo = 33 +GPIO.setmode(GPIO.BOARD) +GPIO.setup(servo, GPIO.OUT) +``` + +Next, create a variable for the servo, PWM. Then, send a 50 Hz PWM signal on that GPIO pin using the `GPIO.PWM` function. Start the signal at 0: + +```python +pwm=GPIO.PWM(servo, 50) +pwm.start(0) +``` + +Use the `ChangeDutyCycle` function to write duty cycle percentages to the servo motor. + +```python +pwm.ChangeDutyCycle(5) # left -90 deg position +sleep(1) +pwm.ChangeDutyCycle(7.5) # neutral position +sleep(1) +pwm.ChangeDutyCycle(10) # right +90 deg position +sleep(1) +``` + +## Programming + +In order for the mission to be achievable in the best way and within our reach, we were required to utilize the threading in Python. + +Simple mission code: + +```py +import threading +import time +import rospy +from clover import srv +from std_srvs.srv import Trigger +import RPi.GPIO as GPIO + +rospy.init_node('flight') + +get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry) +navigate = rospy.ServiceProxy('navigate', srv.Navigate) +navigate_global = rospy.ServiceProxy('navigate_global', srv.NavigateGlobal) +set_position = rospy.ServiceProxy('set_position', srv.SetPosition) +set_velocity = rospy.ServiceProxy('set_velocity', srv.SetVelocity) +set_attitude = rospy.ServiceProxy('set_attitude', srv.SetAttitude) +set_rates = rospy.ServiceProxy('set_rates', srv.SetRates) +land = rospy.ServiceProxy('land', Trigger) + +servo1 = 33 # PWM pins +servo2 = 32 + +GPIO.setmode(GPIO.BOARD) #set pin numbering system + +GPIO.setup(servo1,GPIO.OUT) +GPIO.setup(servo2,GPIO.OUT) + +pwm1 = GPIO.PWM(servo1,50) #create PWM instance with frequency +pwm2 = GPIO.PWM(servo2,50) + +pwm1.start(0) #start PWM of required Duty Cycle +pwm2.start(0) + + +def servo_drop(seconds): #function to drop seed capsules from 2 tanks + print("Dropping") + + i = 1 #variable to choose which tank + for num in range(seconds/2): + if(i == 1): #first tank + pwm1.ChangeDutyCycle(10) # release one seed capsule + time.sleep(0.5) + pwm1.ChangeDutyCycle(5) # push then drop the capsule + time.sleep(0.5) + i = 2 #changing the variable for to use the second tank in next dropping + + elif(i == 2): #first tank + pwm2.ChangeDutyCycle(10) # release one seed capsule + time.sleep(0.5) + pwm2.ChangeDutyCycle(5) # push then drop the capsule + time.sleep(0.5) + i = 1 #changing the variable for to use the first tank in next dropping + + print(num) + time.sleep(2) + + +if name == "main": + # Take off and drone 10m above the ground + navigate(x=0, y=0, z=10, frame_id='body', auto_arm=True) + + # rospy waits for 10 seconds to take off + rospy.sleep(10) + + # Dropping starts simultaneously with flying forwards 5 meters + d = threading.Thread(target=servo_drop, args=(18,)) # 18 is the sum of all the time that the drone hovers after take off + d.start() + + navigate(x=5, y=0, z=0, frame_id='body') + + #rospy waits for 8 seconds to fly forward + rospy.sleep(8) + + # Fly right 1 m + navigate(x=0, y=1, z=0, frame_id='body') + + #rospy waits for 2 seconds to fly right + rospy.sleep(2) + + # Fly backward 5 m + navigate(x=-5, y=0, z=0, frame_id='body') + + #rospy waits for 8 seconds to fly backward + rospy.sleep(8) + + # Perform landing + land() + +pwm1.stop() +pwm2.stop() +GPIO.cleanup() +``` + +### References + +- https://www.nationalgeographic.com/environment/article/deforestation +- http://www.fao.org/fileadmin/templates/rap/files/NRE/Forestry_Group/Landslide_PolicyBrief.pdf +- https://earthenginepartners.appspot.com/ + +## Developed by Team MINIONS + +Special thanks to International Ala-Too University for funding the Clover 4 kits. + + diff --git a/docs/en/setup.md b/docs/en/setup.md index 29b543c1..4d151cf2 100644 --- a/docs/en/setup.md +++ b/docs/en/setup.md @@ -29,6 +29,8 @@ Main article: https://docs.qgroundcontrol.com/en/SetupView/Firmware.html We recommend using the modified version of PX4 by CopterExpress for the Clover drone, especially for autonomous flights. Download the latest stable version **from our GitHub**. +> **Info** For Pixhawk-based quadcopters there is a separate firmware version. See details in "[Pixhawk / Pixracer firmware flashing](firmware.md)" article. + Flash the flight controller with this firmware: QGroundControl firmware upload @@ -68,12 +70,12 @@ This is how the main QGroundControl settings window will look like: ### Selecting the airframe -QGroundControl frame selection +QGroundControl frame selection 1. Open the *Vehicle Setup* tab. 2. Select the *Airframe* menu. 3. Select the *Quadrotor X* airframe type. -4. Select the *Generic Quadrotor X* from the dropdown menu. +4. For Clover 4 select *COEX Clover 4* from the dropdown menu. Otherwise select *Generic Quadrotor X*. 5. Return to the top of the list and press *Apply and Restart* button, confirm by pressing *Apply*. 6. Wait for the settings to be applied and for the flight controller to restart. @@ -87,6 +89,8 @@ Press the *Save* button to save the changed value to the flight controller. Chan #### Configuring PID regulators +> **Info** Selecting *COEX Clover 4* frame subtype doesn't require setting PID coefficients. + ##### Averaged PID coefficients for the Clover 4 drone * `MC_PITCHRATE_P` = 0.087 diff --git a/docs/en/simple_offboard.md b/docs/en/simple_offboard.md index f0f71823..b5f10066 100644 --- a/docs/en/simple_offboard.md +++ b/docs/en/simple_offboard.md @@ -295,6 +295,8 @@ Parameters: * `thrust` β€” throttle level, ranges from 0 (no throttle, propellers are stopped) to 1 (full throttle). * `auto_arm` – switch the drone to `OFFBOARD` and arm automatically (**the drone will take off**); +The positive direction of `yaw_rate` rotation (when viewed from the top) is counterclockwise,`pitch_rate` rotation is forward, `roll_rate` rotation is to the left. + ### land Switch the drone to landing [mode](modes.md) (`AUTO.LAND` or similar). diff --git a/docs/en/simulation.md b/docs/en/simulation.md index 36362adb..733266b2 100644 --- a/docs/en/simulation.md +++ b/docs/en/simulation.md @@ -32,3 +32,9 @@ The simulation environment is based on the following components: * ROS packages and Gazebo plugins. + +## Video + +Short video review of the simulator: + + diff --git a/docs/en/sitl.md b/docs/en/sitl.md index e3b91a5d..017dbefd 100644 --- a/docs/en/sitl.md +++ b/docs/en/sitl.md @@ -1,7 +1,7 @@ PX4 Simulation === -> **Hint** This article is about running a standalone PX4 simulation with a generic quadcopter. Consider using [our configuration](simulation.md) for a more Clover-like experience. +> **Warning** This article is about running a standalone PX4 simulation with a generic quadcopter and **is outdated**. Consider using [our configuration](simulation.md) for a more Clover-like experience. Main article: https://dev.px4.io/en/simulation/ diff --git a/docs/en/sonar.md b/docs/en/sonar.md index aa8cc118..95ab5fb9 100644 --- a/docs/en/sonar.md +++ b/docs/en/sonar.md @@ -12,11 +12,11 @@ The distance gage is attached to the body using double-sided tape. For obtaining ### Connection -Connect HC-SR04 to Raspberry Pi according to the connection diagram. Use 1.0 and 2.2 kΩ resistors and any free GPIO pins, e.g., 23 and 24: +Connect HC-SR04 to Raspberry Pi according to the connection diagram. Use 1.0 and 2.2 kΞ© resistors and any free GPIO pins, e.g., 23 and 24: Connecting HC-SR04 -> **Hint** Instead of a 2.2 kΩ resistor, you can use two 1 kΩ resistors connected in series. +> **Hint** Instead of a 2.2 kΞ© resistor, you can use two 1 kΞ© resistors connected in series. @@ -54,8 +54,8 @@ import time import threading import pigpio -TRIG = 23 is the No. of the pin connected to the Trig contact of the distance gage -TRIG = 24 is the No. of the pin connected to the Echo contact of the distance gage +TRIG = 23 # pin connected to the Trig pin of the sonar +ECHO = 24 # pin connected to the Echo pin of the sonar pi = pigpio.pi() done = threading.Event() diff --git a/docs/en/wall_aruco.md b/docs/en/wall_aruco.md new file mode 100644 index 00000000..0fe2bc73 --- /dev/null +++ b/docs/en/wall_aruco.md @@ -0,0 +1,58 @@ +# Navigation using vertical ArUco-markers + +The algorithm of the navigation through visual ArUco-markers, that was implemented in the Clever image, supports the flexible configuration of the markers in area. It allows you to place them on any surface, at any angle. + +## Installing the vertical camera mount + +For a better recognition of the markers, you need to set the camera vertically so that the lens is pointed parallel to the horizon. + +> **Note** The configuration file allows you to configure the location of the camera in area relative to the copter in any way. For your convenience, we will review the option of installing the camera at an angle of 90 degrees to the horizon in the direction of the copter's nose. + +### Camera mount, 3D printing + +Print the [camera mount](models.md#clover-3). + +Install the mount in a convenient location, so that the camera has a minimum number of unnecessary objects (protection, legs, propellers, beams) β€” all of it will negatively affect the recognition of the markers. + +## Setting the camera transform + +To set the camera position at the desired angle, open the file `main_camera.launch`, located in `~/catkin_ws/src/clover/clover/launch/`. + +```bash +nano ~/catkin_ws/src/clover/clover/launch/main_camera.launch +``` + +In the parameters `direction_x`, `direction_y`, set empty values manually or enter the following lines: + +```bash +sed -i "/direction_z/s/default=\".*\"/default=\"\"/" /home/pi/catkin_ws/src/clover/clover/launch/main_camera.launch +sed -i "/direction_y/s/default=\".*\"/default=\"\"/" /home/pi/catkin_ws/src/clover/clover/launch/main_camera.launch +``` + +Edit one of the configuration lines or add the line shown bellow: + +```xml + +``` + +> **Note**. Only one camera configuration can be used at a time. If you insert the line above, don't forget to comment the currently active one. The syntax highlighting system will help you determine that β€” the active line will be highlighted in a different color than the comments. To comment, add the `` symbols at the beginning and the end respectively. + +If you are using the marker map, where the markers have equal distances along the x and y axes, you can use [script for creating markers map `gen_map.py`](aruco_map.md#marker-map-definition). Otherwise, you will need to set them manually. To do this, go to the directory `map_name.txt` and create a map file. Fill out your map according to the [map syntax](aruco_map.md#marker-map-definition). Here is an example of a marker map with a random marker location: + +>**Hint**. When filling out the map, select one of the markers as the origin, and measure the distance to all other markers relative to it. If all your parameters are oriented same way, you can choose not to specify all 8 parameters, but only the first 5: the marker index, size, and its location in space along the x, y, and z axes, respectively. + +``` +106 0.33 0 0 0 +103 0.33 1.53 0.23 0 +153 0.40 -0.56 1.36 0 +``` + +After you fill out the map, you need to apply it. To do it, edit the file `aruco.launch`, located in `~/catkin_ws/src/clover/clover/launch/`. Change the line ``, where `map_name.txt` is the name of your map file. + +If you are using markers that are not linked to horizontal surfaces (floor, ceiling), you must disable the parameter `known_tilt` both in the module `aruco_detect` and `aruco_map` in the same file. To do it automatically, enter: + +```bash +sed -i "/known_tilt/s/value=\".*\"/value=\"\"/" /home/pi/catkin_ws/src/clover/clover/launch/aruco.launch +``` + +After all the settings, call `sudo systemctl restart clover` to restart the `clover` service. diff --git a/docs/en/zerotire_vpn.md b/docs/en/zerotire_vpn.md new file mode 100644 index 00000000..54917a3e --- /dev/null +++ b/docs/en/zerotire_vpn.md @@ -0,0 +1,183 @@ +# Creating a virtual network ZeroTire One and connecting to it + +## Creating and configuring a ZeroTire network + +1. Go to [ZeroTire](https://www.zerotier.com/) website. + + + +2. Sign up on ZeroTire. + + + +3. Go to your account. + +4. Click on the *Create A Network*. + + + +5. After that, you will see the network you created, its ID and name. Click on the network to configure it. + + + +6. In the window that appears you can change the network name and connection privacy. + + + +7. Scroll down to the *Members* column. It will say that there are no users on the network. + + + +8. Devices connected to the network will be displayed in this column. To allow them to connect to the network, activate the *Auth?* checkbox. The connected device will automatically be given an internal IP address, which will then be used to communicate with this device. + +
    + + +
    + + > **Hint** specify names for new devices, it will help you distinguish them from each other in the future. + +9. Repeat the last step for all the devices that you want to connect. + + > **Info** ZeroTire network supports up to 50 users simultaneously for free use. + +## Setup on Windows + +### Installing the app + +1. Go to the ZeroTire website. + + + +2. Click on the Windows icon. + + + +3. Download and run the `Zero Tare One.msi` file. + +
    + + +
    + +### Network connection + +1. Run ZeroTire One. + +2. Click on the ZeroTire One icon in the taskbar. + +3. Click on the *Join Network...* to connect to the network. + + + +4. In the window that appears, enter your network ID and click *Join*. + + + +5. Allow using the new network. + +## Setup on iOS + +### Installing the app + +1. Go to the ZeroTire website. + + + +2. Click on the iOS icon. + + + +3. Install the *ZeroTire One* app. + +### Network connection + +1. Run ZeroTire One app. + +2. Click on *+* to add a new connection. + + + +3. Confirm the privacy policy. + + + +4. Enter your network ID and click *Add Network*. + + + +5. Confirm adding the new VPN configuration. + +6. Connect to the VPN network by sliding the network activation slider. + +
    + + +
    + +## Setup on Linux (PC, Raspberry Pi) + +### Installing the app + +1. Open the console by pressing the keyboard shortcut *ctrl + alt + t* or type *terminal* in the program search bar. + +2. Enter the Zero Tare installation command. + + ```bash + curl -sΒ  https://install.zerotier.com Β | sudo bash + ``` + +### Network connection + +1. Open the console. + +2. Enter the command `sudo zerotire-cli join network-id`, where `network-id` is your network ID. + + + +3. If the connection is successful, the corresponding message will be displayed in the console. + +## Installing and configuring on macOS + +### Installing the app + +1. Go to the ZeroTire website. + + + +2. Click on the macOS icon. + + + +3. Download and run `ZeroTire One.pkg` file. + +4. Install the ZeroTire One app. + +### Network connection + +1. Run ZeroTire One app. + +2. Click on the ZeroTire One icon in the taskbar . + +3. In the window that appears, click on *Join Network...*. + + + +4. In the *Enter Network ID* field, enter your network ID. + + + +## Connecting to the copter + +1. Make sure that ZeroTire is working and connected to the network on the drone and control device. To do this, make sure that these have an *Online* status. + + + +2. Make sure that all devices have local IP addresses - *Managed IPs*. + +3. Open GQC and in the *Comm Links* tab add a TCP connection specifying the IP of the drone. Read more about remote connection [here](gcs_bridge.md). + +
    + + +
    diff --git a/docs/ru/README.md b/docs/ru/README.md index 6d2fb110..2f7442fa 100644 --- a/docs/ru/README.md +++ b/docs/ru/README.md @@ -1,10 +1,10 @@ # ΠšΠ»Π΅Π²Π΅Ρ€ -ΠšΠ»Π΅Π²Π΅Ρ€ 4 +ΠšΠ»Π΅Π²Π΅Ρ€ 4.2 **Β«ΠšΠ»Π΅Π²Π΅Ρ€Β»** β€” это ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΉ конструктор ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°, состоящСго ΠΈΠ· популярных ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ. -Набор Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Pixracer с ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΌ стСком PX4, [Raspberry Pi 4](raspberry.md) Π² качСствС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π±ΠΎΡ€Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, [ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹](camera.md) для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅Ρ‚ΠΎΠ² с использованиСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ. +Набор Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ [COEX Pix](coex_pix.md) с ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΌ стСком PX4, [Raspberry Pi 4](raspberry.md) Π² качСствС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π±ΠΎΡ€Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, [ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹](camera.md) для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅Ρ‚ΠΎΠ² с использованиСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠšΠ»Π΅Π²Π΅Ρ€Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя прСднастроСнный [ΠΎΠ±Ρ€Π°Π· для Raspberry Pi](image.md) Π² ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ПО для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со всСй ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠ΅ΠΉ ΠΈ [программирования Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅Ρ‚ΠΎΠ²](simple_offboard.md). Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠšΠ»Π΅Π²Π΅Ρ€Π° ΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈ [доступСн Π½Π° GitHub](https://github.com/CopterExpress/clover). diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md index 8ed598a1..e53ce34a 100644 --- a/docs/ru/SUMMARY.md +++ b/docs/ru/SUMMARY.md @@ -54,6 +54,8 @@ * [MAVROS](mavros.md) * [Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹](supplementary.md) * [COEX Pix](coex_pix.md) + * [COEX PDB](coex_pdb.md) + * [COEX GPS](coex_gps.md) * [Π“ΠΈΠ΄ ΠΏΠΎ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌΡƒ ΠΏΠΎΠ»Π΅Ρ‚Ρƒ](auto_setup.md) * [Имя хоста](hostname.md) * [Бимулятор](sitl.md) @@ -63,6 +65,7 @@ * [Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с симулятором](sitl_docker.md) * [Установка ROS Melodic](ros-install.md) * [ΠšΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹](camera_calibration.md) + * [ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ VPN ZeroTire](zerotire_vpn.md) * [ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ VPN Hamachi](hamachi_vpn.md) * [Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ 4G связи](4g.md) * [ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠšΠ»Π΅Π²Π΅Ρ€Π° Π½Π° Jetson Nano](jetson_nano.md) @@ -79,7 +82,10 @@ * [ВзаимодСйствиС с Arduino](arduino.md) * [ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ GPS](gps.md) * [Π Π°Π±ΠΎΡ‚Π° с ИК Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ](ir_sensors.md) - * [Установка FPV](fpv.md) + * [Установка FPV](fpv_clover_4_2.md) + * [Установка FPV (ΠšΠ»Π΅Π²Π΅Ρ€ 3)](fpv.md) + * [ΠœΠ°Π³Π½ΠΈΡ‚Π½Ρ‹ΠΉ Π·Π°Ρ…Π²Π°Ρ‚](magnetic_grip.md) + * [ΠœΠ΅Ρ…Π°Π½ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π·Π°Ρ…Π²Π°Ρ‚](mechanical_grip.md) * [Π‘Π±ΠΎΡ€ΠΊΠ° ΡˆΠ°Ρ€ΠΎΠ²ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹](sphere_guard.md) * [Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚Ρ€Π΅Π½Π΅Ρ€Π°](trainer_mode.md) * [Π’Π΅Ρ…Π½ΠΈΠΊΠ° луТСния](tinning.md) @@ -92,6 +98,8 @@ * [Π’ΠΊΠ»Π°Π΄ Π² ΠšΠ»Π΅Π²Π΅Ρ€](contributing.md) * [ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ 0.20](migrate20.md) * [ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ 0.22](migrate22.md) + * [COEX Duocam](duocam.md) + * [Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ MAVLink-ΠΊΠ°ΠΌΠ΅Ρ€Π°](duocam_mavlink.md) * [ΠœΠ΅Ρ€ΠΎΠΏΡ€ΠΈΡΡ‚ΠΈΡ](events.md) * [CopterHack-2021](copterhack2021.md) * [CopterHack-2019](copterhack2019.md) @@ -100,12 +108,15 @@ * [CopterHack-2018](copterhack2018.md) * [CopterHack-2017](copterhack2017.md) * [ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π° Π±Π°Π·Π΅ ΠšΠ»Π΅Π²Π΅Ρ€Π°](projects.md) + * [БистСма автоматичСской посадки (AMLS)](amls.md) + * [Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСмы для управлСния Π‘ΠŸΠ›Π с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шлСма Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ](remote-control-with-oculusvr.md) * [Π¨ΠΎΡƒ ΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠ²](clever-show.md) * [Innopolis Open 2020 (L22_Γ†RO)](innopolis_open_L22_AERO.md) * [Олимпиада НВИ 2020 (P4DF2)](nti2020_p4df2.md) * [Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ArUco ΠΊΠ°Ρ€Ρ‚](arucogenmap.md) * [МодСль аэротакси Π² Π³ΠΎΡ€ΠΎΠ΄Π΅](bigchallenges.md) * [Шаровая Π·Π°Ρ‰ΠΈΡ‚Π° ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°](shield.md) + * [БистСма засСчки для Π΄Ρ€ΠΎΠ½ΠΎΠ²](race_timing_sys_copterhack.md) * [Π”Ρ€ΠΎΠ½ для 3D-сканирования Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°](3dscan.md) * [РаспознаваниС Π»ΠΈΡ†](face_recognition.md) * [Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΠΎΠ½ΠΎΠΌ силой мысли](control_emotions.md) @@ -114,6 +125,15 @@ * [Π‘Π»ΠΎΡ‡Π½Ρ‹ΠΉ конструктор ΠΏΠΎΠ»Π΅Ρ‚Π°](clever_blocks.md) * [ΠšΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ (legacy)](camera_calib.md) * [Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΠΎΠ½ΠΎΠΌ для ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΏΠΎΠ·Ρ‹ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°](human_pose_estimation_drone_control.md) + * [РаспознаваниС Π²ΠΈΠ΄ΠΎΠ² Π°Π³Ρ€ΠΎΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€](agriculture.md) + * [AdvancedClover](advanced_clover.md) + * [Π”Ρ€ΠΎΠ½ для высаТивания сСмян](seeding_drone.md) + * [Π“Ρ€Π°Ρ„Ρ„ΠΈΡ‚ΠΈ ΠΊΠΎΠΏΡ‚Π΅Ρ€ D-drone](ddrone.md) + * [ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ](zaural_viking.md) + * [Π”Ρ€ΠΎΠ½-Агроном](drone-agronom.md) + * [Easy To Fly](easytofly.md) + * [Π₯Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½ ΠšΠ²ΠΈΠ΄Π΄ΠΈΡ‡](hardaton_quidditch.md) + * [ΠžΠΊΡ‚ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ со спСцифичным располоТСниСм ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€ΠΎΠ²](oktazodg.md) ## Π£Ρ‡Π΅Π±Π½ΠΈΠΊ diff --git a/docs/ru/advanced_clover.md b/docs/ru/advanced_clover.md new file mode 100644 index 00000000..fd2ecab6 --- /dev/null +++ b/docs/ru/advanced_clover.md @@ -0,0 +1,91 @@ +# Advanced Clover + +[CopterHack-2021](copterhack2021.md), team **FTL**. ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹: @maximmasterr Π² Telegram. + +Как-Ρ‚ΠΎ Ρ€Π°Π· устав Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия с ΠšΠ»Π΅Π²Π΅Ρ€ΠΎΠΌ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡ… ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ, ΠΈ Ρ‚Π°ΠΊ появился ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ advancedClover, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты: + +* IDE + * VSCode-like IDE Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ + * Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ + * Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» + * Автокомплит + * Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ просмотра Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ² + * Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ просмотра Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ² с изобраТСниями + * Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° сСрвисов + * Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ просмотра статуса ΠΊΠΎΠΏΡ‚Π΅Ρ€Π° +* Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Python + * Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠ΅ΠΉ + * Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ + +ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚Π°, Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°: + +![ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚Π°, Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°](../assets/advancedClover1.png) + +ΠŸΡ€ΠΈΠΌΠ΅Ρ€ инструмСнтов ROS ΠΈ Copter Status: + +![ΠŸΡ€ΠΈΠΌΠ΅Ρ€ инструмСнтов ROS ΠΈ Copter Status](../assets/advancedClover2.png) + +ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»Ρ‘Ρ‚Π° ΠΏΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρƒ с использованиСм advancedClover: + +![ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»Ρ‘Ρ‚Π° ΠΏΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρƒ с использованиСм advancedClover](../assets/advancedClover3.png) + +Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ± установкС ΠΈ использовании advancedClover ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ [здСсь](https://ftl-team.github.io/cloverIDE). + +## ВСхничСскиС подробности + +Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π²Π½ΡƒΡ‚Ρ€ΠΈ: + +* [Theia](https://theia-ide.org/) ΠΏΡ€ΠΈΠΊΠΎΠ»ΡŒΠ½Π°Ρ web IDE которая ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° VSCode ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π΄Π°ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ Π΅Π³ΠΎ. +* Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для vscode (Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π² theia), ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ инструмСнты ROS. +* ΠŸΠΈΡ‚ΠΎΠ½ΠΎΠ²ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π° самом Π΄Π΅Π»Π΅ это просто ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ вынСсСнныС Π² классы. +* ДокумСнтация Π½Π° docsify (gitbook слишком услоТнён). +* Π‘Π±ΠΎΡ€ΠΊΠ° Π½Π° GitHub actions. + +На самом Π΄Π΅Π»Π΅ интСрСс прСдставляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, Π½ΠΎ я расскаТу ΠΎ всСх частях. + +### IDE + +Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ использовали code-server, Π½ΠΎ ΠΎΠ½ слишком Π΄ΠΎΠ»Π³ΠΎ собирался ΠΈ Π±Ρ‹Π» ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π΅Π½, поэтому ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° theia которая ΠΌΠ΅Π½Π΅Π΅ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Π° ΠΈ собираСтся Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Ρ‘ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π΄ΠΎΠΏΠΈΠ»ΠΈΡ‚ΡŒ: + +1. Theia ΠΏΠΎ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρƒ тянСт с собой ΠΎΠΊΠΎΠ»ΠΎ 1Π³Π± `node_modules` Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ сборку Π² ΠΎΠ΄ΠΈΠ½ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pkg, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ°Ρ‚Ρ‡ΠΈΠΊ ΠΊΠΎΠ΄ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ build ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΎΠΉ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ [ΠΏΠ°Ρ‚Ρ‡Π°](https://raw.githubusercontent.com/FTL-team/cloverIDE/master/ide/src.patch). +2. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с code-server сборка Π·Π°Π½ΠΈΠΌΠ°Π»Π° Ρ€Π°Π·Π° Π² Ρ‚Ρ€ΠΈ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π΅Ρ‘ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π΅Ρ‰Ρ‘ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°ΡΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΡ‚ΡŒ вынСся скачиваниС ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²/Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ job Π½Π° GitHub actions. +3. Благодаря стараниям Ρ‚Π΅Ρ… людСй ΠΊΡ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ web-стандарты theia Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ Π½Π° HTTPS, Π»ΠΈΠ±ΠΎ Π½Π° localhost, ΠΏΠΎ этому ΠΌΡ‹ написали ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΊΡƒ Π½Π° golang которая Π½Π° Π»Π΅Ρ‚Ρƒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сСртификат, подписываСт Π΅Π³ΠΎ ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ установил ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ), ΠΈ ΠΈΠΌ ΠΏΠΎ Π½Π΅ΠΌΡƒ отправляСт HTTPS. + +### Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ + +Π’ΠΎΡ‚ здСсь самоС интСрСсноС, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ написано Π½Π° TypeScript, собираСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ webpack ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ react, roslibjs ΠΈ OpenCV. + +#### ROSLIB.js + +Для ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ROS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° roslib.js, Ρƒ Π½Π΅Ρ‘ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности: + +1. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ строго (Π½Ρƒ ΠΏΠΎΡ‡Ρ‚ΠΈ) Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ TypeScript Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ROS, типизация ΠΏΠΎ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρƒ Π»Π΅ΠΆΠΈΡ‚ Π² DefinitelyTyped, Π½ΠΎ ΠΎΠ½Π° Ρ‚Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ кривая, поэтому Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ [Ρ„Π°ΠΉΠ»](https://github.com/FTL-team/cloverIDE/blob/master/cloverExtension/src/ros/roslib.d.ts) roslib.d.ts ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ для roslibjs ΠΈ Π² случаС Ссли ΠΎΠ½Π° Π½Π΅ совпадаСт ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΅Ρ‘. +2. Roslib ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ колбэки Π° ΠΎΠ½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅, поэтому ΠΌΡ‹ промисифицировали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ roslib. [Π—Π΄Π΅ΡΡŒ](https://github.com/FTL-team/cloverIDE/blob/master/cloverExtension/src/ros/core.ts). +3. ΠŸΠΎΡ‚ΠΎΠΌ Π±Ρ‹Π»Π° написана ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° для roslib которая Π΅Ρ‰Ρ‘ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ упростила Ρ€Π°Π±ΠΎΡ‚Ρƒ с [сСрвисами](https://github.com/FTL-team/cloverIDE/blob/master/cloverExtension/src/ros/service.ts) ΠΈ [Ρ‚ΠΎΠΏΠΈΠΊΠ°ΠΌΠΈ](https://github.com/FTL-team/cloverIDE/blob/master/cloverExtension/src/ros/topic.ts). +4. И Π΅Ρ‰Ρ‘ ΠΌΡ‹ написали [Ρ…ΡƒΠΊΠΈ](https://github.com/FTL-team/cloverIDE/tree/master/cloverExtension/src/ros/hooks) для Ρ€Π΅Π°ΠΊΡ‚Π° Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π΅Ρ‰Ρ‘ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ. +5. ROS ΡƒΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСния Π² cbot ΠΈΠ»ΠΈ Π² json, json Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ числа (ΠΎΠ½ΠΈ становятся Π½Π΅Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ) ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС мСста, Π° cbor ΠΈΠ·-Π·Π° ΠΊΡ€ΠΈΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ массивы сообщСний Π½ΠΎ Π·Π°Ρ‚ΠΎ мСньшС ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ ΠΈ ΡƒΠΌΠ΅Π΅Ρ‚ Π² 64-bit. +6. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ MAVLink Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ массив ΠΈΠ· 64 Π±ΠΈΡ‚Π½Ρ‹Ρ… чисСл, Π² js ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ BigInt, ΠΎΠ΄Π½Π°ΠΊΠΎ roslib ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚ 64 Π±ΠΈΡ‚Π½ΠΎΠ΅ число ΠΎΠ±Ρ€Π΅Π·Π°Π΅Ρ‚ Π΅Π³ΠΎ, поэтому ΠΌΡ‹ написали [Π·Π°ΠΌΠ΅Π½Ρƒ](https://github.com/FTL-team/cloverIDE/blob/master/cloverExtension/roslibCBOR.js) ΠΌΠΎΠ΄ΡƒΠ»ΡŽ roslib, Π·Π°ΠΌΠ΅Π½Π° примСняСтся Π²Π΅Π±ΠΏΠ°ΠΊΠΎΠΌ. + +#### Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ + +Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ использовали web video server для отобраТСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΈ ΠΌΡ‹ пСрСписали Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ Π½Π° OpenCV, ΠΈ Ρ‚ΡƒΡ‚ кроСтся нСсколько ΠΏΠΎΠ΄Π²ΠΎΡ…ΠΎΠ²: + +1. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° OpenCV происходит асинхронно ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° это Π½ΠΈΠΊΠ°ΠΊ нСльзя, самым простым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ оказалось использованиС ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΡˆΡ‚ΡƒΠΊΠΈ Π² webpack ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ top-level async, ΠΌΡ‹ написали простой [ΠΌΠΎΠ΄ΡƒΠ»ΡŒ](https://github.com/FTL-team/cloverIDE/blob/1e171e1709b1dfde0c11c3b2e00687d7e9091a9f/cloverExtension/src/opencv/index.ts) ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ OpenCV, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ OpenCV ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π² top-level Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ которая Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ OpenCV. +2. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ вСсят ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΡΠ»Π°Ρ‚ΡŒ ΠΈΡ… Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π² base64 Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΌΡ‹ для получСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ CBOR +3. Π’ ROS ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… ΠΏΠΎ этому ΠΌΡ‹ написали [Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ](https://github.com/FTL-team/cloverIDE/blob/1e171e1709b1dfde0c11c3b2e00687d7e9091a9f/cloverExtension/src/ros/image.ts#L31) которая ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… Π² RGB. +Π’ ΠΎΠ±Ρ‰Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ это дСлаСтся [здСсь](https://github.com/FTL-team/cloverIDE/blob/master/cloverExtension/src/components/ImageTopic.tsx). + +#### И Π΅Ρ‰Ρ‘ Ρ‡ΡƒΡ‚ΡŒ Ρ‡ΡƒΡ‚ΡŒ вСсСлья + +1. НС всё Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° публикуСтся Π² mavros поэтому Π½Π°Π΄ΠΎ ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ MAVLink, для этого юзаСм ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ cbor ΠΈ Π·Π°Ρ‚Π΅ΠΌ вытягиваСм Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ… [ΠΎΡ‚ΡΡŽΠ΄Π°](https://mavlink.io/en/messages/common.html). +2. TF2 Π² roslib Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½, ΠΏΠΎ этому Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠΎΠΏΡ‚Π΅Ρ€Π° Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ фрэйм `map` ΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ трансформации ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π³ΠΎ (Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ). + +### Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для ΠΏΠΈΡ‚ΠΎΠ½Π° + +ЯвляСтся Π² основном просто красиво ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ написанным Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΊΠΎΠ΄Π° ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠšΠ»Π΅Π²Π΅Ρ€Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡ‚ΡŒ интСрСсный ΠΌΠΎΠΌΠ΅Π½Ρ‚ с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, ΠΎΠ½ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ стандартного Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ послСднюю ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ прСдоставляя API ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° `VideoCapture`, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ [здСсь](https://github.com/FTL-team/cloverIDE/blob/master/pylib/image.py). + +### Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ ДокумСнтация + +ДокумСнтация написана Π½Π° markdown, рСндСрится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ docsify (ΠΈΠ±ΠΎ gitbook слишком пСрСуслоТнён). + +ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ собираСтся Π½Π° GitHub actions, сборка максимально распаралСлСна. diff --git a/docs/ru/agriculture.md b/docs/ru/agriculture.md new file mode 100644 index 00000000..74f4f0f5 --- /dev/null +++ b/docs/ru/agriculture.md @@ -0,0 +1,147 @@ +# РаспознаваниС Π²ΠΈΠ΄ΠΎΠ² Π°Π³Ρ€ΠΎΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€ Π² массовом сСльском производствС + +## Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ + +Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ сСльскоС хозяйство Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… странах прСвращаСтся Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ярких ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² быстрого ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ внСдрСния Π½ΠΎΠ²Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. БСспилотныС Π»Π΅Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρ‹ способны Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ ΠΊΡ€ΡƒΠ³ Π·Π°Π΄Π°Ρ‡, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΡΠ΅Π»ΡŒΡΠΊΠΎΡ…ΠΎΠ·ΡΠΉΡΡ‚Π²Π΅Π½Π½Ρ‹Ρ… ΡƒΠ³ΠΎΠ΄ΠΈΠΉ сСгодня стал ΡƒΠΆΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ инструмСнтом ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности ΡΠ΅Π»ΡŒΡΠΊΠΈΡ… хозяйств. ЦСлью ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° являСтся написаниС ΠΊΠΎΠ΄Π° для распознавания Π²ΠΈΠ΄ΠΎΠ² Π°Π³Ρ€ΠΎΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€ Π² массовом сСльском производствС. Π’ дальнСйшСм ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² распознавания ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ посСвных ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ. + +## ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ + +Π’ сСльском хозяйствС ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ состоянии ΡƒΠ³ΠΎΠ΄ΠΈΠΉ ΠΈ посСвов. Π€Π΅Ρ€ΠΌΠ΅Ρ€Ρ‹ ΠΈΠ»ΠΈ спСциалисты ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π»ΠΈ всходят ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Ρ‹, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΡƒΠ³Ρ€ΠΎΠ·Π° со стороны сорняков ΠΈ/ΠΈΠ»ΠΈ насСкомых – Π²Ρ€Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΠΊΠ°ΠΊΠΎΠ²Π° ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ увлаТнСнности ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… участков ΠΈΠ»ΠΈ Ρ†Π΅Π»Ρ‹Ρ… ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ ΠΈ Ρ‚.Π΄. + +## ОбъяснСниС ΠΊΠΎΠ΄Π° + +ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: + +```python +import rospy +import cv2 +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import numpy as np +``` + +Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: + +```python +rospy.init_node('computer_vision_sample') + +bridge = CvBridge() + +color = 'undefined' +shape = 'undefined' +culture = "" +``` + +Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Π½Π°Β ΠΎΠ±Ρ€Π°Π· ΠšΠ»Π΅Π²Π΅Ρ€Π°Β Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒΒ OpenCV. +Β Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ подписчика Π½Π° Ρ‚ΠΎΠΏΠΈΠΊ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ с основной ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с использованиСм OpenCV: + +```python +def image_colback_color(data): + global color, shape + + cv_image = bridge.imgmsg_to_cv2(data, 'bgr8') # OpenCV image + img_hsv = cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV) #[118:119,158:159] + + #detected color + #print(img_hsv[0][0]) +``` + +КаТдая ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ свой Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌΡ‹ΠΉ ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ(ΠΏΡˆΠ΅Π½ΠΈΡ†Π°- золотистая, Π³Ρ€Π΅Ρ‡ΠΈΡ…Π° - свСтло-коричнСвая). + + + + +ΠŸΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ² для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€: + +```python +#ΠΏΡˆΠ΅Π½ΠΈΡ†Π° +yellow_orange_low = (38, 110, 150) +yellow_orange_high= (52, 110, 150) + +#Π³Ρ€Π΅Ρ‡ΠΈΡ…Π° +brown_low = (23, 50, 50) +brown_high= (37, 50, 50) + +yellow_orange_mask = cv2.inRange(img_hsv, yellow_orange_low, yellow_orange_high) +brown_mask = cv2.inRange(img_hsv, brown_low, brown_high) + +if yellow_orange_mask[119][159] == 255: + shape = shape_recog(yellow_orange_mask) + +elif brown_mask[119][159] == 255: + shape = shape_recog(brown_mask) + +else: + shape = 'undefined' + color = 'undefined' + +if shape = 'brown': + culture = "greshiha" +if shape = 'yellow_orange': + culture = "pshenitsa" + +image_sub = rospy.Subscriber('main_camera/image_raw', Image, image_colback_color) +``` + +Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ 100% процСссора. Для искусствСнного замСдлСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ скрипта ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΒ throttlingΒ ΠΊΠ°Π΄Ρ€ΠΎΠ² с ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² 5 Π“Ρ† (`main_camera.launch`): + +```xml + +``` + +Π’ΠΎΠΏΠΈΠΊ для подписчика Π² этом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π°:Β `main_camera/image_raw_throttled`. + +```python +print (culture) +while not rospy.is_shutdown(): + print("color: {}".format(color)) + print("shape: {}".format(shape)) + rospy.sleep(0.2) +``` + +Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Ρƒ ΠΏΠΎ Π΅Ρ‘ ΠΎΡ‚Ρ‚Π΅Π½ΠΊΡƒ. Для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ точности опрСдСлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ большС Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΈ Π΄Ρ€ΠΎΠ½ смоТСт Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ большСС количСство ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€. + +Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ²: + +```python +red_low1 = (0, 110, 150) +red_high1 = (7, 255, 255) + +red_low2 = (172, 110, 150) +red_high2 = (180, 255, 255) + +red_orange_low = (8, 110, 150) +red_orange_high = (22, 110, 150) + +orange_low = (23, 110, 150) +orange_high = (37, 110, 150) + +yellow_orange_low = (38, 110, 150) +yellow_orange_high = (52, 110, 150) + +yellow_low = (53, 150, 150) +yellow_high = (67, 255, 255) + +yellow_green_low = (68, 150, 150) +yellow_green_high = (82, 255, 255) + +green_low = (83, 150, 150) +green_high = (97, 255, 255) + +blue_green_low = (98, 150, 150) +blue_green_high = (113, 255, 255) + +blue_low = (114, 150, 150) +blue_high = (127, 255, 255) + +blue_violet_low = (128, 150, 150) +blue_violet_high = (142, 255, 255) + +violet_low = (143, 150, 150) +violet_high = (157, 255, 255) + +red_violet_low = (158, 150, 150) +red_violet_hugh = (171, 255, 255) +``` + +ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для красного Ρ†Π²Π΅Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π²Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Ρ‚.Β ΠΊ. красный Ρ†Π²Π΅Ρ‚ находится Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ пространства HSV. diff --git a/docs/ru/amls.md b/docs/ru/amls.md new file mode 100644 index 00000000..fc761d3a --- /dev/null +++ b/docs/ru/amls.md @@ -0,0 +1,674 @@ +# Autonomous Multirotor Landing System (AMLS) + +![Logo](../assets/amls/logo_book.png "Logo") + +## ЦСль ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: АвтоматичСски ΠΏΠΎΡΠ°Π΄ΠΈΡ‚ΡŒ Π΄Ρ€ΠΎΠ½ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ + +### Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ AMLS + +Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ описаниС нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² оптичСской стабилизации, удСрТания ΠΏΠΎ GPS, слСдованиС ΠΏΠΎ GPS, удСрТания высоты, систСмы Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠ², ΠΊΡ€Ρ‹ΡˆΠΈ, измСрСния освСщённости, скорости двиТСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Π’Π°ΠΊΠΆΠ΅, послС прочтСния ΡΡ‚Π°Ρ‚ΡŒΠΈ станСт понятно, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ AMLS! + +### Основной Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° GitHub + +https://github.com/XxOinvizioNxX/Liberty-Way + +### Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ + +- [ПавСл ΠΠ΅ΡˆΡƒΠΌΠΎΠ²](mailto:xxoinvizionxx@gmail.com) +- [АндрСй Кабалин](mailto:astik452@gmail.com) +- [Владислав ЯснСцкий](mailto:vlad.yasn@gmail.com) + +![Drone 1](../assets/amls/drone_meme.jpg "Drone 1") + +----------- + +## ОглавлСниС + +- [0. Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?](#how-it-works) + - [0.1. Π’ΠΈΠ΄Π΅ΠΎ ΠΏΡ€ΠΎ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚](#short-video-about-our-project-clickable) +- [1. Π£Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΏΠΎ GPS ΠΈ ΠΏΠΎΠ»Ρ‘Ρ‚ ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ](#hold-and-flight-to-waypoints-functions) + - [1.1. Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· UART](#serial-reading) + - [1.2. ΠŸΠ°Ρ€ΡΠΈΠ½Π³ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° UBlox](#ublox-parsing) + - [1.3. Установка Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡƒΡ‚Π΅Π²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ](#set-current-waypoint) + - [1.4. ИзмСнСниС Ρ‚ΠΎΡ‡Π΅ΠΊ (Π§Ρ‚ΠΎΠ±Ρ‹ Π»Π΅Ρ‚Π°Ρ‚ΡŒ ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ)](#waypoint-edit-to-fly-to-waypoints) + - [1.5. Π£Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ](#waypoint-stabilization) +- [2. Π‘Π»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ](#following) +- [3. Компас](#compass) +- [4. Π£Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ высоты (Π±Π°Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€)](#altitude-stabilization-barometer) +- [5. ΠžΠΏΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ стабилизация](#optical-stabilization) + - [5.1. Π’Π°ΠΊ слоТно ΠΈ Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½ΠΎ](#so-difficult-and-so-important) + - [5.2. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги](#first-steps) + - [5.3. Π˜Π½Π²Π΅Ρ€ΡΠΈΡ](#inverse-approach) + - [5.4. ВСрсия Π½Π° Java](#java-edition) + - [5.5. Liberty-Way](#liberty-way) + - [5.6. Бвязь с Π΄Ρ€ΠΎΠ½ΠΎΠΌ](#communication-with-the-drone) + - [5.7. ПодвСс для ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹](#camera-gimbal) +- [6. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Eitude](#eitude-amls-platform) + - [6.1. БистСма Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠ²](#grabbing-system) + - [6.2. ΠšΡ€Ρ‹ΡˆΠ°](#weather-protection-system) + - [6.3. Π‘ΠΏΠΈΠ΄ΠΎΠΌΠ΅Ρ‚Ρ€](#platform-speedometer) + - [6.4. Π”Π°Ρ‚Ρ‡ΠΈΠΊΠΈ уровня освСщённости](#platform-light-sensor) +- [7. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅](#conclusion) + +----------- + +## 0. Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? {#how-it-works} + +БистСма состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй: + +- Π”Ρ€ΠΎΠ½Π° + + ![Liberty-X](../assets/amls/liberty-x_side_cutout_2_small.png "Liberty-X") + +- И ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎΠΉ (Π½Π° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅), ΠΈΠ»ΠΈ статичной (Π½Π° постаматС) + + ![Platform](../assets/amls/platform_side_transparent.png "Platform") + +ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ дСйствий выглядит Ρ‚Π°ΠΊ: + +- Π’ Π½Π°Ρ‡Π°Π»Π΅, Π΄Ρ€ΠΎΠ½ с посылкой находится Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. По сотовой связи ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Ρ€Π°Π΄ΠΈΠΎΠΊΠ°Π½Π°Π»Ρƒ, Π΅ΠΌΡƒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ GPS ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (Π½Π° Π΄Ρ€ΠΎΠ½Π΅ установлСн ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Liberty-Link, способный ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, нСзависимо ΠΎΡ‚ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ ΠΏΠΎΠ»Ρ‘Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. (ΠœΠΎΠ΄ΡƒΠ»ΡŒ ставится Π² Ρ€Π°Π·Ρ€Ρ‹Π² Π»ΠΈΠ½ΠΈΠΈ ΠΎΡ‚ ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊΠ° (ΠΏΡƒΠ»ΡŒΡ‚Π°) Π΄ΠΎ ΠΏΠΎΠ»Ρ‘Ρ‚Π½ΠΈΠΊΠ°). +- Π”Ρ€ΠΎΠ½ Π»Π΅Ρ‚ΠΈΡ‚ Π½Π° эти ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. Π’ процСссС ΠΏΠΎΠ»Ρ‘Ρ‚Π° ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ (Π½ΠΎ Π½Π΅ часто, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π½Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π»). +- Когда Π΄Ρ€ΠΎΠ½ ΠΏΠΎΠ΄Π»Π΅Ρ‚Π°Π΅Ρ‚ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ стабилизация ΠΏΠΎ GPS. Π’ΡƒΡ‚ ΡƒΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π±Π»ΠΈΠΆΠ½Π΅ΠΉ радиосвязи ΠΈ с большой частотой, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΠΎΠ½ успСвал Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ. +- ВмСстС с этим, происходит сниТСниС Π΄Ρ€ΠΎΠ½Π° (Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ Π΄Ρ€ΠΎΠ½Π΅ Π΅ΡΡ‚ΡŒ Π±Π°Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€Ρ‹). Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ происходит Π΄ΠΎ высоты 1.5-2 ΠΌΠ΅Ρ‚Ρ€Π° Π½Π°Π΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ. +- Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ сниТСния Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ оптичСская (прСцизионная) стабилизация с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΌΠ΅Ρ€Π° ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ ΠΌΠ΅Ρ‚ΠΊΡƒ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ "Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚" Π΄Ρ€ΠΎΠ½. +- ПослС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ оптичСской стабилизации, GPS ΠΎΡ‚Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ»Π°Π½ ΠΈ являСтся ΡΡ‚Ρ€Π°Ρ…ΡƒΡŽΡ‰ΠΈΠΌ (Π½Π° случай, Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, снова Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ GPS стабилизация). +- Π’ΠΎ врСмя оптичСской стабилизации Π½Π° Π΄Ρ€ΠΎΠ½Π΅ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π° ArUco ΠΌΠ΅Ρ‚ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²ΠΈΠ΄ΠΈΡ‚ ΠΊΠ°ΠΌΠ΅Ρ€Π° Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ ΠΏΠΎ Π±Π»ΠΈΠΆΠ½Π΅ΠΉ радиосвязи посылаСт Π½Π° Π΄Ρ€ΠΎΠ½ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ значСния. +- ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с оптичСской стабилизациСй Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈ посадка. Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ искусствСнно ΠΏΠ»Π°Π²Π½ΠΎ сниТаСт setpoint ΠΏΠΎ высотС (Z) Π΄ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠ³Π°. +- Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сниТСниС достигло Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ значСния, подаётся ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ для Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ мСханичСских Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ Π΄Ρ€ΠΎΠ½. +- ПослС ΠΏΠΎΠΈΠΌΠΊΠΈ Π΄Ρ€ΠΎΠ½Π°, происходит Π΅Π³ΠΎ обслуТиваниС, Ρ€Π°Π·Π³Ρ€ΡƒΠ·ΠΊΠ° посылки ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΡ€Ρ‹ΡˆΠΈ Π½Π°Π΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ (для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ нСблагоприятных ΠΏΠΎΠ³ΠΎΠ΄Π½Ρ‹Ρ… условий). +- На этом посадка Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°! + +### Π’ΠΈΠ΄Π΅ΠΎ ΠΏΡ€ΠΎ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ (кликабСльно) {#short-video-about-our-project-clickable} + + + +----------- + +## 1. Π£Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΏΠΎ GPS ΠΈ ΠΏΠΎΠ»Ρ‘Ρ‚ ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ {#hold-and-flight-to-waypoints-functions} + +Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано Ρ€Π°Π½Π΅Π΅, Π½Π° Π΄Ρ€ΠΎΠ½Π΅ установлСн "ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ" ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Liberty-Link, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Ρ€ΠΎΠ½Π°, вмСшиваясь Π² сигнал с ΠΏΡƒΠ»ΡŒΡ‚Π° управлСния (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡƒΠ½ΠΊΡ‚Π°Ρ…). + +Π’ Liberty-Link Π±ΡƒΠ΄Π΅Ρ‚ встроСнный GPS ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΈ, соотвСтствСнно, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ поддСрТания полоТСния ΠΏΠΎ GPS ΠΈ слСдования ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° поддСрТания ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠΎ GPS (кликабСльно): + + + +GPS-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ· сСмСйства UBlox (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, UBlox Neo-M8). УстановлСно Π±ΡƒΠ΄Π΅Ρ‚ 1 ΠΈΠ»ΠΈ 3 (для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ) модуля. + +![GPS Module](../assets/amls/liberty-x_front_cutout_2_small_gps.png "GPS Module") + +ΠœΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ UART-интСрфСйсу. НастроСны Π½Π° частоту ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ 5 Ρ€Π°Π· Π² сСкунду. ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° Liberty-Link Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ полоТСния. + +### 1.1. Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· UART {#serial-reading} + +Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… с модуля Π² Π±ΡƒΡ„Π΅Ρ€ выглядит Ρ‚Π°ΠΊ: + +```cpp +// Read data from the GPS module +while (GPS_serial.available() && new_line_found == 0) { + // Stay in this loop as long as there is serial information from the GPS available + char read_serial_byte = GPS_serial.read(); + if (read_serial_byte == '$') { + // Clear the old data from the incoming buffer array if the new byte equals a $ character + for (message_counter = 0; message_counter <= 99; message_counter++) { + incoming_message[message_counter] = '-'; + } + // Reset the message_counter variable because we want to start writing at the begin of the array + message_counter = 0; + } + // If the received byte does not equal a $ character, increase the message_counter variable + else if (message_counter <= 99) + message_counter++; + + // Write the new received byte to the new position in the incoming_message array + incoming_message[message_counter] = read_serial_byte; + + // Every NMEA line end with a '*'. If this character is detected the new_line_found variable is set to 1 + if (read_serial_byte == '*') new_line_found = 1; +} +``` + +### 1.2. ΠŸΠ°Ρ€ΡΠΈΠ½Π³ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° UBlox {#ublox-parsing} + +ПослС, ΠΈΠ· Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΡˆΠΈΡ€ΠΎΡ‚Π°, Π΄ΠΎΠ»Π³ΠΎΡ‚Π°, Ρ‚ΠΈΠΏ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ (2D, 3D) ΠΈ количСство спутников. +ΠŸΠ°Ρ€ΡΠΈΠ½Π³ GPS Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° UBlox выглядит Ρ‚Π°ΠΊ: + +```cpp +// If the software has detected a new NMEA line it will check if it's a valid line that can be used +if (new_line_found == 1) { + // Reset the new_line_found variable for the next line + new_line_found = 0; + if (incoming_message[4] == 'L' && incoming_message[5] == 'L' && incoming_message[7] == ',') { + // When there is no GPS fix or latitude/longitude information available + // Set some variables to 0 if no valid information is found by the GPS module. This is needed for GPS lost when flying + l_lat_gps = 0; + l_lon_gps = 0; + lat_gps_previous = 0; + lon_gps_previous = 0; + number_used_sats = 0; + } + // If the line starts with GA and if there is a GPS fix we can scan the line for the latitude, longitude and number of satellites + if (incoming_message[4] == 'G' && incoming_message[5] == 'A' && (incoming_message[44] == '1' || incoming_message[44] == '2')) { + // Filter the minutes for the GGA line multiplied by 10 + lat_gps_actual = ((int)incoming_message[19] - 48) * (long)10000000; + lat_gps_actual += ((int)incoming_message[20] - 48) * (long)1000000; + lat_gps_actual += ((int)incoming_message[22] - 48) * (long)100000; + lat_gps_actual += ((int)incoming_message[23] - 48) * (long)10000; + lat_gps_actual += ((int)incoming_message[24] - 48) * (long)1000; + lat_gps_actual += ((int)incoming_message[25] - 48) * (long)100; + lat_gps_actual += ((int)incoming_message[26] - 48) * (long)10; + // To convert the minutes to degrees we need to divide the minutes by 6 + lat_gps_actual /= (long)6; + // Add the degrees multiplied by 10 + lat_gps_actual += ((int)incoming_message[17] - 48) * (long)100000000; + lat_gps_actual += ((int)incoming_message[18] - 48) * (long)10000000; + // Divide everything by 10 + lat_gps_actual /= 10; + + // Filter the minutes for the GGA line multiplied by 10 + lon_gps_actual = ((int)incoming_message[33] - 48) * (long)10000000; + lon_gps_actual += ((int)incoming_message[34] - 48) * (long)1000000; + lon_gps_actual += ((int)incoming_message[36] - 48) * (long)100000; + lon_gps_actual += ((int)incoming_message[37] - 48) * (long)10000; + lon_gps_actual += ((int)incoming_message[38] - 48) * (long)1000; + lon_gps_actual += ((int)incoming_message[39] - 48) * (long)100; + lon_gps_actual += ((int)incoming_message[40] - 48) * (long)10; + // To convert the minutes to degrees we need to divide the minutes by 6 + lon_gps_actual /= (long)6; + // Add the degrees multiplied by 10 + lon_gps_actual += ((int)incoming_message[30] - 48) * (long)1000000000; + lon_gps_actual += ((int)incoming_message[31] - 48) * (long)100000000; + lon_gps_actual += ((int)incoming_message[32] - 48) * (long)10000000; + // Divide everything by 10 + lon_gps_actual /= 10; + + if (incoming_message[28] == 'N') + // When flying north of the equator the latitude_north variable will be set to 1 + latitude_north = 1; + else + // When flying south of the equator the latitude_north variable will be set to 0 + latitude_north = 0; + + if (incoming_message[42] == 'E') + // When flying east of the prime meridian the longiude_east variable will be set to 1 + longiude_east = 1; + else + // When flying west of the prime meridian the longiude_east variable will be set to 0 + longiude_east = 0; + + // Filter the number of satillites from the GGA line + number_used_sats = ((int)incoming_message[46] - 48) * (long)10; + number_used_sats += (int)incoming_message[47] - 48; + + if (lat_gps_previous == 0 && lon_gps_previous == 0) { + // If this is the first time the GPS code is used + // Set the lat_gps_previous variable to the lat_gps_actual variable + lat_gps_previous = lat_gps_actual; + // Set the lon_gps_previous variable to the lon_gps_actual variable + lon_gps_previous = lon_gps_actual; + } + + // Divide the difference between the new and previous latitude by ten + lat_gps_loop_add = (float)(lat_gps_actual - lat_gps_previous) / 10.0; + // Divide the difference between the new and previous longitude by ten + lon_gps_loop_add = (float)(lon_gps_actual - lon_gps_previous) / 10.0; + + // Set the l_lat_gps variable to the previous latitude value + l_lat_gps = lat_gps_previous; + // Set the l_lon_gps variable to the previous longitude value + l_lon_gps = lon_gps_previous; + + // Remember the new latitude value in the lat_gps_previous variable for the next loop + lat_gps_previous = lat_gps_actual; + // Remember the new longitude value in the lat_gps_previous variable for the next loop + lon_gps_previous = lon_gps_actual; + } + + // If the line starts with SA and if there is a GPS fix we can scan the line for the fix type (none, 2D or 3D) + if (incoming_message[4] == 'S' && incoming_message[5] == 'A') + fix_type = (int)incoming_message[9] - 48; + +} +``` + +### 1.3. Установка Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡƒΡ‚Π΅Π²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ {#set-current-waypoint} + +Π”Π°Π»Π΅Π΅, с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ происходит самая магия. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ поддСрТания Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ полоТСния достаточно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ `waypoint_set = 1;` ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ°ΠΊ waypoint: + +```cpp +l_lat_waypoint = l_lat_gps; +l_lon_waypoint = l_lon_gps; +``` + +ПослС этого, начнётся вычислСниС ошибки Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PD - рСгулятора. Для D - ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ rotation memory. + + + +### 1.4. ИзмСнСниС Ρ‚ΠΎΡ‡Π΅ΠΊ (Π§Ρ‚ΠΎΠ±Ρ‹ Π»Π΅Ρ‚Π°Ρ‚ΡŒ ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ) {#waypoint-edit-to-fly-to-waypoints} + +Если просто Π·Π°Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ `l_lat_waypoint` ΠΈ `l_lon_wayoint`, находящиСся Π½Π° большом ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΡ‚ Π΄Ρ€ΠΎΠ½Π°, ΠΎΠ½ Π½Π΅ смоТСт Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ»Π΅Ρ‚Π΅Ρ‚ΡŒ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° этих ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ…. Для ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ измСнСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ `l_lat_gps_float_adjust` ΠΈ `l_lon_gps_float_adjust`. Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° `float`, измСняя ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, `l_lat_waypoint` ΠΈ `l_lon_waypoint` Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ»Π°Π²Π½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. + +НапримСр, Ссли Π² основном Ρ†ΠΈΠΊΠ»Π΅ постоянно ΠΏΡ€ΠΈΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ ΠΊ этим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ: + +```cpp +l_lat_gps_float_adjust += 0.0015; +``` + +ΠŸΡ€ΠΈ установлСнном waypoint, Π΄Ρ€ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ»Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. +Π’ дальнСйшим это Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ ускорСния ΠΈ замСдлСния Π²ΠΎ врСмя двиТСния ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅. + +### 1.5. Π£Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ {#waypoint-stabilization} + +```cpp +if (waypoint_set == 1) { + //If the waypoints are stored + + // Adjust l_lat_waypoint + if (l_lat_gps_float_adjust > 1) { + l_lat_waypoint++; + l_lat_gps_float_adjust--; + } + if (l_lat_gps_float_adjust < -1) { + l_lat_waypoint--; + l_lat_gps_float_adjust++; + } + + // Adjust l_lon_waypoint + if (l_lon_gps_float_adjust > 1) { + l_lon_waypoint++; + l_lon_gps_float_adjust--; + } + if (l_lon_gps_float_adjust < -1) { + l_lon_waypoint--; + l_lon_gps_float_adjust++; + } + + // Calculate the latitude error between waypoint and actual position + gps_lon_error = l_lon_waypoint - l_lon_gps; + // Calculate the longitude error between waypoint and actual position + gps_lat_error = l_lat_gps - l_lat_waypoint; + + // Subtract the current memory position to make room for the new value + gps_lat_total_average -= gps_lat_rotating_mem[gps_rotating_mem_location]; + // Calculate the new change between the actual pressure and the previous measurement + gps_lat_rotating_mem[gps_rotating_mem_location] = gps_lat_error - gps_lat_error_previous; + // Add the new value to the long term average value + gps_lat_total_average += gps_lat_rotating_mem[gps_rotating_mem_location]; + + // Subtract the current memory position to make room for the new value + gps_lon_total_average -= gps_lon_rotating_mem[gps_rotating_mem_location]; + // Calculate the new change between the actual pressure and the previous measurement + gps_lon_rotating_mem[gps_rotating_mem_location] = gps_lon_error - gps_lon_error_previous; + // Add the new value to the long term average value + gps_lon_total_average += gps_lon_rotating_mem[gps_rotating_mem_location]; + + // Increase the rotating memory location + gps_rotating_mem_location++; + if (gps_rotating_mem_location == 35) + // Start at 0 when the memory location 35 is reached + gps_rotating_mem_location = 0; + + // Remember the error for the next loop + gps_lat_error_previous = gps_lat_error; + gps_lon_error_previous = gps_lon_error; + + //Calculate the GPS pitch and roll correction as if the nose of the multicopter is facing north. + //The Proportional part = (float)gps_lat_error * gps_p_gain. + //The Derivative part = (float)gps_lat_total_average * gps_d_gain. + gps_pitch_adjust_north = (float)gps_lat_error * gps_p_gain + (float)gps_lat_total_average * gps_d_gain; + gps_roll_adjust_north = (float)gps_lon_error * gps_p_gain + (float)gps_lon_total_average * gps_d_gain; + + if (!latitude_north) + // Invert the pitch adjustmet because the quadcopter is flying south of the equator + gps_pitch_adjust_north *= -1; + if (!longiude_east) + // Invert the roll adjustmet because the quadcopter is flying west of the prime meridian + gps_roll_adjust_north *= -1; + + //Because the correction is calculated as if the nose was facing north, we need to convert it for the current heading. + gps_roll_adjust = ((float)gps_roll_adjust_north * cos(angle_yaw * 0.017453)) + ((float)gps_pitch_adjust_north * cos((angle_yaw - 90) * 0.017453)); + gps_pitch_adjust = ((float)gps_pitch_adjust_north * cos(angle_yaw * 0.017453)) + ((float)gps_roll_adjust_north * cos((angle_yaw + 90) * 0.017453)); + + //Limit the maximum correction to 300. This way we still have full control with the pitch and roll stick on the transmitter. + if (gps_roll_adjust > 300) gps_roll_adjust = 300; + if (gps_roll_adjust < -300) gps_roll_adjust = -300; + if (gps_pitch_adjust > 300) gps_pitch_adjust = 300; + if (gps_pitch_adjust < -300) gps_pitch_adjust = -300; +} + +``` + +## 2. Π‘Π»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ {#following} + +Основной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ стабилизации ΠΏΠΎ GPS-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ стала Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° прСдсказания полоТСния Π΄Ρ€ΠΎΠ½Π°. Π‘Π°ΠΌΡ‹ΠΌ простым способом ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ матСматичСский расчСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ полоТСния Π΄Ρ€ΠΎΠ½Π°. Π­Ρ‚ΠΎ вычисляСтся для Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ позиционирования Π΄Ρ€ΠΎΠ½Π° Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ посадочной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. + +Для Π½Π°Ρ‡Π°Π»Π° Π±Ρ‹Π» ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ расчСта коэффициСнта измСнСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. РСализация ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ Π½Π° языкС Python. На этапС тСстирования Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° встала ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° симуляции Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ GPS-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π”Π°Π±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π±Ρ‹Π»ΠΎ испробовано ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… рСсурсов: ΠΎΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… исходных ΠΊΠΎΠ΄ΠΎΠ² ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Π²ΠΈΠ³Π°Ρ‚ΠΎΡ€ΠΎΠ² Π΄ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ API Google Maps, Yandex Maps ΠΈΠ»ΠΈ 2GIS. И лишь спустя сСмСстр ΠΌΡ‹ Π΄ΠΎΠ΄ΡƒΠΌΠ°Π»ΠΈΡΡŒ Π΄ΠΎ простого измСнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Π΅Π»ΡŒΡ‚Π΅ с отрисовкой Π² MatPlotLib Π»ΠΈΠ±ΠΎ PyQtGraph. Π”ΠΎ этого всё тСстированиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ с использованиСм инструмСнтария ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ PX4, симулятора двиТСния Π΄Ρ€ΠΎΠ½Π° Gazebo. Как слСдствиС Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π² вопросах общСния с симулятором ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. + +Π’ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° прСдсказания GPS ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (кликабСльно) + + + +ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ошибки прСдсказанных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ достиг Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ 0 Π΄ΠΎ 70 см. + +----------- + + + +## 3. Компас {#compass} + +Π”ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° оптичСской стабилизации (Π²ΠΎ врСмя GPS стабилизации), для вычислСния Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎ GPS трСбуСтся Π·Π½Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» ΠΏΠΎ компасу. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ встроСнный Π² GPS ΠΌΠΎΠ΄ΡƒΠ»ΡŒ компас. + +Π’.ΠΊ. Π²ΠΎ врСмя ΠΏΠΎΠ»Ρ‘Ρ‚Π° ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡƒΠ³Π»Ρ‹ ΠΊΡ€Π΅Π½Π° ΠΈ Ρ‚Π°Π½Π³Π°ΠΆΠ°, трСбуСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния с компаса. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ ΠΏΠ»Π°Π½Π΅, вычислСния ΡƒΠ³Π»Π° с комапса выглядит Ρ‚Π°ΠΊ: + +```cpp +// The compass values change when the roll and pitch angle of the quadcopter changes. That's the reason that the x and y values need to calculated for a virtual horizontal position +// The 0.0174533 value is phi/180 as the functions are in radians in stead of degrees +compass_x_horizontal = (float)compass_x * cos(angle_pitch * -0.0174533) + (float)compass_y * sin(angle_roll * 0.0174533) * sin(angle_pitch * -0.0174533) - (float)compass_z * cos(angle_roll * 0.0174533) * sin(angle_pitch * -0.0174533); +compass_y_horizontal = (float)compass_y * cos(angle_roll * 0.0174533) + (float)compass_z * sin(angle_roll * 0.0174533); + +// Now that the horizontal values are known the heading can be calculated. With the following lines of code the heading is calculated in degrees. +// Please note that the atan2 uses radians in stead of degrees. That is why the 180/3.14 is used. +if (compass_y_horizontal < 0)actual_compass_heading = 180 + (180 + ((atan2(compass_y_horizontal, compass_x_horizontal)) * (180 / 3.14))); +else actual_compass_heading = (atan2(compass_y_horizontal, compass_x_horizontal)) * (180 / 3.14); + +// Add the declination to the magnetic compass heading to get the geographic north +actual_compass_heading += declination; +// If the compass heading becomes smaller then 0, 360 is added to keep it in the 0 till 360 degrees range +if (actual_compass_heading < 0) actual_compass_heading += 360; +// If the compass heading becomes larger then 360, 360 is subtracted to keep it in the 0 till 360 degrees range +else if (actual_compass_heading >= 360) actual_compass_heading -= 360; +``` + +ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ» с компаса ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ для поддСрТания ΡƒΠ³Π»Π° рыскания Π΄Ρ€ΠΎΠ½Π° Π² Ρ†Π΅Π»ΠΎΠΌ. ΠŸΡ€ΠΈ ΠΏΠΎΠ»Ρ‘Ρ‚Π°Ρ… ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ это, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. Но Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, острой нСобходимости Π² этом Π½Π΅Ρ‚, Ρ‚.ΠΊ. послС Π½Π°Ρ‡Π°Π»Π° оптичСской стабилизации, Π΅Ρ‘ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ способСн ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΠΎΠ½ нСзависимо ΠΎΡ‚ Π΅Π³ΠΎ ΡƒΠ³Π»Π° рыскания. Π’Π°ΠΊΠΆΠ΅, Π²ΠΎ врСмя оптичСской стабилизации ΡƒΠ³ΠΎΠ» автоматичСски коррСктируСтся. + +----------- + +## 4. Π£Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ высоты (Π±Π°Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€) {#altitude-stabilization-barometer} + +Π”ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° оптичСской стабилизации (Π²ΠΎ врСмя GPS стабилизации), наш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Liberty-Link Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ поддСрТания высоты ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π±Π°Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€Π°. + +На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Liberty-Link Π±ΡƒΠ΄ΡƒΡ‚ установлСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π°Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€Ρ‹ MS5611. + +![MS5611](../assets/amls/ms5611_barometer.png "MS5611") + +Богласно Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ высотС составляСт 10см. Алгоритм Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€Π°Ρ‚ΡŒ значСния давлСния ΠΈ, пропуская Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠŸΠ˜Π”-рСгулятор, ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ высоту Π΄Ρ€ΠΎΠ½Π°, измСняя Throttle (3-ΠΈΠΉ ΠΊΠ°Π½Π°Π»). + +Π’ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° удСрТания высоты ΠΏΠΎ Π±Π°Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€Ρƒ (кликабСльно): + + + +Π’ΠΎ врСмя ΠΏΠΎΠ»Ρ‘Ρ‚Π° ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ, setpoint давлСния Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ, для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ высоты (Π»Π΅Ρ‚Π΅Ρ‚ΡŒ ΠΏΠΎ прямой бСзопаснСС Π½Π° большой высотС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈ Π²ΠΎ Ρ‡Ρ‚ΠΎ Π½Π΅ Π²Ρ€Π΅Π·Π°Ρ‚ΡŒΡΡ). А Π²ΠΎ врСмя стабилизации ΠΏΠΎ GPS (ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΠΎΠ½ находится ΡƒΠΆΠ΅ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅), Π΄Ρ€ΠΎΠ½Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Π½ setpoint ΠΏΠΎ давлСнию Ρ‚Π°ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ~1.5-2ΠΌ высоты Π½Π°Π΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ. + +----------- + +## 5. ΠžΠΏΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ стабилизация {#optical-stabilization} + +### 5.1. Π’Π°ΠΊ слоТно ΠΈ Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½ΠΎ {#so-difficult-and-so-important} + +ΠžΠΏΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ стабилизация - самая ваТная ΠΈ слоТная Ρ‡Π°ΡΡ‚ΡŒ нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Волько благодаря этим Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ Π² Π½Π°ΡˆΠΈΡ… условиях Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ достаточно Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΠΎΠ½ Π½Π°Π΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ. ВСкущая вСрсия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° оптичСской стабилизации вмСстС с описаниСм для повторСния, доступна Π² нашСм основном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° GitHub. Π’ дальнСйшСм, ΠΊ Π½Π΅ΠΉ добавится ΠΈ стабилизация ΠΏΠΎ GPS. + +### 5.2. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги {#first-steps} + +Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π»ΠΈ насколько Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ окаТСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ простой Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сдСлали, это ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈΡΡŒ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‡Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΠΎΠ½ Π² пространствС. +И Ρ‚ΡƒΡ‚, практичСски Сдиногласно ΠΏΠΎΠ±Π΅Π΄ΠΈΠ» Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с оптичСской стабилизации ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это достаточно Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½ΠΎ, Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ дорогостоящиС систСмы GPS RTK, Π°, Π²ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π΄Π°Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. +Одной ΠΈΠ· самых ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ - Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ΄Π΅Π»Π°Ρ‚ΡŒ Raspberry Pi ΠΊ Π΄Ρ€ΠΎΠ½Ρƒ, ΠΊΠ°ΠΊ это сдСлано Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠšΠ»Π΅Π²Π΅Ρ€, ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΊΠ΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. + +ВСст ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π²ΠΎΠΉ оптичСской стабилизации (кликабСльно): + + + +Но, провСдя ΠΏΠ°Ρ€Ρƒ тСстов ΠΎΡ‚ этой ΠΈΠ΄Π΅ΠΈ ΠΌΡ‹ быстро ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ. Для Π½Π°Ρ‡Π°Π»Π°, Raspberry Pi ΠΎΡ‡Π΅Π½ΡŒ слабая для быстрого вычислСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ объСма Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, сама идСя установки Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄Ρ€ΠΎΠ½ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° выглядит Π½Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ. + +Π’Π°ΠΊΠΆΠ΅, Ρƒ нас Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ (окруТности Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ²), Π½ΠΎ эти ΠΈΠ΄Π΅ΠΈ Π½Π΅ оказались достаточно работоспособными. + +### 5.3. Π˜Π½Π²Π΅Ρ€ΡΠΈΡ {#inverse-approach} + +Π’Π°ΠΊ ΠΌΡ‹ ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Π²ΠΈΠ΄Ρƒ оптичСской стабилизации, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΌΠ΅Ρ€Π° с ΠΌΠΎΡ‰Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ располоТСны Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, Π° Π½Π° Π΄Ρ€ΠΎΠ½Π΅ лишь ArUco 4x4 ΠΌΠ΅Ρ‚ΠΊΠ° ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠΌ. + +Π‘Π°ΠΌΡ‹Π΅ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ тСсты, Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π°ΠΆΠ΅ Π½Π΅Ρ‚ ΠΎΡ†Π΅Π½ΠΊΠΈ полоТСния ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° (pose estimation)(кликабСльно): + + + +Π”Π°Π»Π΅Π΅, Π±Ρ‹Π»ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Pose Estimation благодаря Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ OpenCV. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ тСсты ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π° Π²Π΅Ρ€Π½ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ! + +Pose Estimation Pyhton (кликабСльно): + + + +Но, ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π±Ρ‹Π»ΠΈ Π΄Π°Π»Π΅ΠΊΠΈ ΠΎΡ‚ ΠΈΠ΄Π΅Π°Π»Π°. НапримСр, Ρ‚.ΠΊ. ΠΊΠΎΠ΄ писался Π½Π° Python (https://github.com/XxOinvizioNxX/Liberty-X_Point), ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π½Π΅ Π²Π΅Π»ΠΈΠΊΠ°, Ρ‚Π°ΠΊΠΆΠ΅, Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ контроля ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ. + +### 5.4. ВСрсия Π½Π° Java {#java-edition} + +ВзвСсив всС ЗА ΠΈ ΠŸΠ ΠžΠ’Π˜Π’, Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ всю ΠΎΠΏΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° Java. Π’Π°ΠΊ ΠΈ появилась пСрвая вСрсия Liberty-Way. На этот Ρ€Π°Π· Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ ΠΊ ООП ΠΎΡΠ½ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ, послС нСбольшой настройки получился ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ стабилизации ΠΈ посадки. + +ВСст посадки Π½Π° Liberty-Way v.beta_0.0.1 (кликабСльно): + + + +### 5.5. Liberty-Way {#liberty-way} + +Π”Π°Π»Π΅Π΅ послСдовало ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ ΠΈ исправлСний ошибок. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Liberty-Way прСдставляСт собой кроссплатформСнноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π²Π΅Π± сарвар, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для настройки ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅, Π² послСдних вСрсиях (beta_1.0.3 - beta_1.1.2) Π±Ρ‹Π» Π²Π½Π΅Π΄Ρ€Ρ‘Π½ blackbox (для записи Π»ΠΎΠ³ΠΎΠ²), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². + +ПолноС описаниС, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ всС настройки, запуск ΠΈ Ρ‚.Π΄. Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² нашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° GitHub: https://github.com/XxOinvizioNxX/Liberty-Way. + +Π’ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ статичной стабилизации (кликабСльно): + + + +Liberty-Way ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ "Π±Ρ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ" Π΄Ρ€ΠΎΠ½ (кликабСльно): + + + +Π”Π°, Π½Π° Π²ΠΈΠ΄Π΅ΠΎ Π΅ΡΡ‚ΡŒ нСбольшой Π±Π°Π³ с ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ΠΎΠΌ, Π² Π½ΠΎΠ²ΠΎΠΌ Ρ€Π΅Π»ΠΈΠ·Π΅ ΠΎΠ½ исправлСн + +И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Ρ€Π°Π±ΠΎΡ‚Π° Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ (Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π΅Ρ‰Ρ‘ Π½Π° beta_0.0.3)(кликабСльно): + + + +ВсС основныС настройки ΡƒΠ΄ΠΎΠ±Π½ΠΎ вынСсСны Π² ΠΎΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ JSON-Ρ„Π°ΠΉΠ»Ρ‹ (settings, PID), Ρ‡Ρ‚ΠΎ позволяСт Π±Π΅Π· пСрСсборки прилоТСния быстро ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ЀактичСски, для запуска прилоТСния, достаточно ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ послСдний Ρ€Π΅Π»ΠΈΠ·, Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ² ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ вашСй ОБ Π»Π°ΡƒΠ½Ρ‡Π΅Ρ€. + +### 5.6. Бвязь с Π΄Ρ€ΠΎΠ½ΠΎΠΌ {#communication-with-the-drone} + +Liberty-Way ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Liberty-Link, установлСнному Π½Π° Π΄Ρ€ΠΎΠ½Π΅, ΠΈ, ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, управляя Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ основными ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ ΠΏΡƒΠ»ΡŒΡ‚Π°. Π—Π° ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ» (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌ с ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹) Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ 12 Π±Π°ΠΉΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ: +![Packet](../assets/amls/data_structure.png "Data packet") + +- **Roll bytes** - ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΡ€Π΅Π½Π° (1000-2000) +- **Pitch bytes** - ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ‚Π°Π½Π³Π°ΠΆΠ° (1000-2000) +- **Yaw bytes** - ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° рыскания (1000-2000) +- **Altitude bytes** - ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π³Π°Π·Π° (высоты) +- **Service info** - БостояниС Π΄Ρ€ΠΎΠ½Π° (0 - ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, 1 - Бтабилизация, 2 - Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π±Π°Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€Ρƒ (ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½Π°), 3 - ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ²) +- **Check byte** - XOR Ρ‡Π΅ΠΊ-сумма +- **Data suffix** - ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°Ρ€Π° ASCII символов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ† ΠΏΠ°ΠΊΠ΅Ρ‚Π° + +На сторонС Π΄Ρ€ΠΎΠ½Π° (модуля Liberty-Link), Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: + +```cpp +while (Telemetry_serial.available()) { + tdc_receive_buffer[tdc_receive_buffer_counter] = Telemetry_serial.read(); + if (tdc_receive_byte_previous == 'L' && tdc_receive_buffer[tdc_receive_buffer_counter] == 'X') { + tdc_receive_buffer_counter = 0; + if (tdc_receive_start_detect >= 2) { + tdc_check_byte = 0; + for (tdc_temp_byte = 0; tdc_temp_byte <= 8; tdc_temp_byte++) + tdc_check_byte ^= tdc_receive_buffer[tdc_temp_byte]; + if (tdc_check_byte == tdc_receive_buffer[9]) { + direct_roll_control = (uint32_t)tdc_receive_buffer[1] | (uint32_t)tdc_receive_buffer[0] << 8; + direct_pitch_control = (uint32_t)tdc_receive_buffer[3] | (uint32_t)tdc_receive_buffer[2] << 8; + direct_yaw_control = (uint32_t)tdc_receive_buffer[5] | (uint32_t)tdc_receive_buffer[4] << 8; + direct_throttle_control = (uint32_t)tdc_receive_buffer[7] | (uint32_t)tdc_receive_buffer[6] << 8; + direct_service_info = (uint32_t)tdc_receive_buffer[8]; + + if (direct_roll_control > 1100 && direct_roll_control < 1900 && + direct_pitch_control > 1100 && direct_pitch_control < 1900 && + direct_yaw_control > 1100 && direct_yaw_control < 1900 && + direct_throttle_control > 1100 && direct_throttle_control < 1900 && + /*flight_mode == 2 &&*/ channel_7 > 1500) { + tdc_timer = millis(); + tdc_working = 1; + } + else + tdc_working = 0; + } + else { + direct_roll_control = 1500; + direct_pitch_control = 1500; + tdc_working = 0; + } + } else + tdc_receive_start_detect++; + } + else { + tdc_receive_byte_previous = tdc_receive_buffer[tdc_receive_buffer_counter]; + tdc_receive_buffer_counter++; + if (tdc_receive_buffer_counter > 11)tdc_receive_buffer_counter = 0; + } +} +if (millis() - tdc_timer >= 500) { + tdc_working = 0; +} +if (tdc_working && direct_service_info == 2 && !return_to_home_step) + return_to_home_step = 3; +if (!tdc_working) + return_to_home_step = 0; +if (!tdc_working || direct_service_info < 1) { + direct_roll_control = 1500; + direct_pitch_control = 1500; + direct_yaw_control = 1500; + direct_throttle_control = 1500; +} +``` + +Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ 4 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: + +``` +direct_roll_control +direct_pitch_control +direct_yaw_control +direct_throttle_control +``` + +ΠšΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΡ€ΠΈΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠΌ с ΠΏΡƒΠ»ΡŒΡ‚Π° управлСния. +ВСроятно, Π² дальнСйшСм, Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с GPS. Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° обновлСниями Π² нашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. + +### 5.7. ПодвСс для ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ {#camera-gimbal} + +Для эксплуатации нашСй систСмы Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… условиях, трСбуСтся ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тряску ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ Π½Π° Π΄Ρ€ΠΎΠ½Π΅. Для этого, Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° 3Π”-модСль крСплСния подвСса ΠΎΡ‚ Π΄Ρ€ΠΎΠ½Π° ΠΊ нашСй ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для стабилизации ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π²Π΅Π± ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ + +ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹: + + ![Camera mount](../assets/amls/gimbal_camera_mount.png "Camera mount") + +ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° (Ρ„Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π½Π° ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π΅) ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹: + + ![Filter mount](../assets/amls/gimbal_filter_mount.png "Filter mount") + +ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π·Π°Ρ‰Ρ‘Π»ΠΎΠΊ "ΠΊΡ€Π°Π±ΠΈΠΊΠΎΠ²" Π½Π° ΠΏΠΎΠ΄Π»ΠΎΠΆΠΊΡƒ подвСса: + + ![Plane mount](../assets/amls/gimbal_plane_mount.png "Plane mount") + +ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Π²ΠΈΠ΄ сборки всСго ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подвСса: + + ![Assembly](../assets/amls/gimbal_assembly.png "Assembly") + +----------- + +## 6. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Eitude {#eitude-amls-platform} + +ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° - взаимосвязанная систСма для посадки Π΄Ρ€ΠΎΠ½Π°. Π£ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° планируСтся Ρ‡Π΅Ρ€Π΅Π· Serial-интСрфСйс, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ G-Code ΠΊΠΎΠΌΠ°Π½Π΄: +Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Eitude Π½Π° GitHub: https://github.com/XxOinvizioNxX/Eitude. + +### 6.1. БистСма Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠ² {#grabbing-system} + +Но вСдь Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π±Π΅Π· систСмы Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠ² Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ°Π΄ΠΈΡ‚ΡŒ Π΄Ρ€ΠΎΠ½, Π½Π΅ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΠ² Π½ΠΈΠΊΠΎΠ³ΠΎ. Пока Ρ‡Ρ‚ΠΎ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π² Π²ΠΈΠ΄Π΅ 3Π” ΠΌΠΎΠ΄Π΅Π»ΠΈ. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Ρ…Π²Π°Ρ‚Π° Π΄Ρ€ΠΎΠ½Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ 4 Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… Π·Π°Ρ…Π²Π°Ρ‚Π° с ΠΊΡ€ΡŽΡ‡ΠΊΠ°ΠΌΠΈ Π½Π° ΠΊΠΎΠ½Ρ†Π°Ρ… ΠΈ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ посадки ΠΊΠΎΠΏΡ‚Π΅Ρ€Π° Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, шасси Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ этими 4-мя ΠΊΡ€ΡŽΡ‡ΠΊΠ°ΠΌΠΈ ΠΈ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ сниТСния ΠΈ послС Π½Π΅Π³ΠΎ. + +![Screenshot](../assets/amls/grabbing_system_1.png "Screenshot") + +![Screenshot](../assets/amls/grabbing_system_2.png "Screenshot") + +### 6.2. ΠšΡ€Ρ‹ΡˆΠ° {#weather-protection-system} + +Для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ нСблагоприятных ΠΏΠΎΠ³ΠΎΠ΄Π½Ρ‹Ρ… условий, ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΊΡ€Ρ‹ΡˆΠΈ - Π½ΠΎΠΆΠ½ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, обтянутыС Π±Ρ€Π΅Π·Π΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π½Π° краях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ посадки ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ с ΠΎΠ±Π΅ΠΈΡ… сторон ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Ρ‚ΡŒ Π΄Ρ€ΠΎΠ½ ΠΎΡ‚ внСшнСго воздСйствия, Π‘Π°ΠΌΠ° конструкция ΠΊΡ€Ρ‹ΡˆΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Ρ‘ достаточно Π»Ρ‘Π³ΠΊΠΎΠΉ ΠΈ ΠΏΡ€ΠΎΡ‡Π½ΠΎΠΉ, Π° Π½ΠΎΠΆΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ позволяСт просто складываСтся ΠΈ раскладываСтся ΠΏΡ€ΠΈ этом сборка Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ простой ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ. + +![Screenshot](../assets/amls/platform_side_transparent.png "Screenshot") + +![Screenshot](../assets/amls/platform_roof.png "Screenshot") + +### 6.3. Π‘ΠΏΠΈΠ΄ΠΎΠΌΠ΅Ρ‚Ρ€ {#platform-speedometer} + +Для Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ посадки Π½Π° быстро Π΄Π²ΠΈΠΆΡƒΡ‰ΡƒΡŽΡΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π΅Ρ‘ двиТСния. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π΅Ρ‚ GPS модуля, ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… способов ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ аксСлСромСтр. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, MPU6050. IMU-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΌΡΠ³ΠΊΡƒΡŽ ΠΏΠΎΠ΄Π»ΠΎΠΆΠΊΡƒ установлСн Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΏΡ€ΠΈΠΊΡ€Ρ‹Ρ‚ ΠΊΡ€Ρ‹ΡˆΠΊΠΎΠΉ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π²Π΅Ρ‚Ρ€Π°. Алгоритм стабилизации (Liberty-Way) посылаСт Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ запрос `L1` для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ скорости. Π’ качСствС ΠΎΡ‚Π²Π΅Ρ‚Π° возвращаСтся `S0 L<ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π² ΠΊΠΌ/Ρ‡>`. + +![MPU6050](../assets/amls/mpu6050_gyro.png "MPU6050") + +ВСст спидомСтра (Π²Π½ΡƒΡ‚Ρ€ΠΈ сСрого ΠΊΡ€ΡƒΠ³Π° Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (SPD) - ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π² ΠΊΠΌ/Ρ‡) (кликабСльно): + + + +Для вычислСния скорости, бСрётся ускорСниС Π·Π° малСнькиС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, пСрСмноТаСтся со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, получая ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. ΠšΠΎΡ‚ΠΎΡ€Π°Ρ постоянно прибавляСтся ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ суммС: + +```cpp +void speed_handler(void) { + gyro_signalen(); + + // Filter accelerations + acc_x_filtered = (float)acc_x_filtered * ACC_FILTER_KOEFF + (float)acc_x * (1.0 - ACC_FILTER_KOEFF); + + speed = acc_x_filtered; + // Convert acceleration to G + speed /= 4096.0; + // Convert to m/s^2 + speed *= 9.81; + // Multiply by dt to get instant speed in m/ms + speed *= (millis() - speed_loop_timer); + + // Reset timer + speed_loop_timer = millis(); + + // Convert to m/s + speed /= 1000.0; + // Convert to km/h + speed *= 3.6; + + // Accumulate instatnt speed + speed_accumulator += speed; + + if (!in_move_flag) { + // If the platform is not moving, reset the speed + speed_accumulator = speed_accumulator * SPEED_ZEROING_FACTOR; + } +} +``` + +НСсмотря Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², ΠΈΠ·-Π·Π° ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ "Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ" Π² 0, поэтому, Ρ‚Π°ΠΊΠΆΠ΅ производится Π·Π°ΠΌΠ΅Ρ€ Π²ΠΈΠ±Ρ€Π°Ρ†ΠΈΠΉ, ΠΈ, Ссли ΠΎΠ½ΠΈ мСньшС ΠΏΠΎΡ€ΠΎΠ³Π°, считаСтся Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° стоит ΠΈ постСпСнно обнуляСтся ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. + +ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ спидомСтра ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Eitude Π½Π° GitHub: https://github.com/XxOinvizioNxX/Eitude + +### 6.4. Π”Π°Ρ‚Ρ‡ΠΈΠΊΠΈ уровня освСщённости {#platform-light-sensor} + +Π’.ΠΊ. наша ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… условиях, Π° оптичСская стабилизация ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π° ΠΊ видимости ArUco ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°, Π²Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму измСрСния Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ ΡƒΡ€ΠΎΠ²Π½ΡŽ освСщённости, Π°, ΠΏΡ€ΠΈ Π΅Ρ‘ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ΅, Π΄Π°ΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ подсвСтку. Π’ долгосрочной пСрспСктивС Π² качСствС Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² свСта планируСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСциализированныС сСнсоры, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, BH1750. + +Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 6 свСтодиодов Π² качСствС Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° свСта ΠΈ, встроСнный Π² ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, АЦП. Алгоритм стабилизации (Liberty-Way) посылаСт Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ запрос `L0` для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ уровня освСщённости. Π’ качСствС ΠΎΡ‚Π²Π΅Ρ‚Π° возвращаСтся `S0 L<ΠΎΡΠ²Π΅Ρ‰Ρ‘Π½Π½ΠΎΡΡ‚ΡŒ>`. + +![Light sensors](../assets/amls/light_sensors.png "Light sensors") + +ВСст опрСдСлСния уровня освСщённости с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свСтодиодов (кликабСльно): + + + +ВСст Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ подсвСтки (кликабСльно): + + + +----------- + +## 7. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ {#conclusion} + +На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, имССтся ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ оптичСской стабилизации, GPS удСрТания, стабилизации высоты ΠΏΠΎ Π±Π°Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€Ρƒ, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ мноТСство 3Π”-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΆΠ°ΠΆΠ΄ΡƒΡ‰ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. +ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ автоматичСской посадки Π΄Ρ€ΠΎΠ½Π° Π½Π° Π΄Π²ΠΈΠΆΡƒΡ‰ΡƒΡŽΡΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½. + +Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° нашими Π°ΠΏΠ΄Π΅ΠΉΡ‚Π°ΠΌΠΈ: + +- На Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ GitHub: https://github.com/XxOinvizioNxX/Liberty-Way. +- И Π½Π° нашСм YouTube-ΠΊΠ°Π½Π°Π»Π΅: https://www.youtube.com/channel/UCqN12Jzy-1eJLkcA32R0jdg. + +Π’ дальнСйшСм, ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ интСрСсного! + +![Follow the white rabbit](../assets/amls/follow_the_white_rabbit.png "Follow the white rabbit") diff --git a/docs/ru/assemble_4_2.md b/docs/ru/assemble_4_2.md index ce0666ca..aff96a44 100644 --- a/docs/ru/assemble_4_2.md +++ b/docs/ru/assemble_4_2.md @@ -1,5 +1,7 @@ # Π‘Π±ΠΎΡ€ΠΊΠ° ΠšΠ»Π΅Π²Π΅Ρ€Π° 4.2 +Π“Π°Π±Π°Ρ€ΠΈΡ‚Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ – [clover-4.2.pdf](https://github.com/CopterExpress/clover/raw/master/docs/assets/dimensional-drawing/clover-4.2.pdf). + ## Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΡ€Π΅ΠΏΠ΅ΠΆΠ° > **Hint** Π’ΠΎ врСмя сборки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²ΠΈΠ½Ρ‚Ρ‹ ΠΈ стойки Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², использованиС ΠΊΡ€Π΅ΠΏΠ΅ΠΆΠ° Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΡ‚Π΅Ρ€. diff --git a/docs/ru/assemble_4_2_ws.md b/docs/ru/assemble_4_2_ws.md index de4c4ccb..2f78199b 100644 --- a/docs/ru/assemble_4_2_ws.md +++ b/docs/ru/assemble_4_2_ws.md @@ -1,5 +1,7 @@ # Π‘Π±ΠΎΡ€ΠΊΠ° ΠšΠ»Π΅Π²Π΅Ρ€Π° 4.2 WorldSkills +Π“Π°Π±Π°Ρ€ΠΈΡ‚Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ – [clover-4.2-ws.pdf](https://github.com/CopterExpress/clover/raw/master/docs/assets/dimensional-drawing/clover-4.2-ws.pdf). + ## Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΡ€Π΅ΠΏΠ΅ΠΆΠ° > **Hint** Π’ΠΎ врСмя сборки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²ΠΈΠ½Ρ‚Ρ‹ ΠΈ стойки Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², использованиС ΠΊΡ€Π΅ΠΏΠ΅ΠΆΠ° Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΡ‚Π΅Ρ€. diff --git a/docs/ru/blocks.md b/docs/ru/blocks.md index 5e503185..ad8ac4b9 100644 --- a/docs/ru/blocks.md +++ b/docs/ru/blocks.md @@ -14,7 +14,7 @@ ## Запуск -Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ интСрфСйс Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Π² ΠšΠ»Π΅Π²Π΅Ρ€Π΅, [ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠšΠ»Π΅Π²Π΅Ρ€Ρƒ ΠΏΠΎ Wi-Fi](wifi.md) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу http://192.168.11.1:8080/clover_blocks/ Π»ΠΈΠ±ΠΎ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ссылку *Blocks programming* Π½Π° [основной Π²Π΅Π±-страницС ΠšΠ»Π΅Π²Π΅Ρ€Π°](wifi.md#Π²Π΅Π±-интСрфСйс). +Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ интСрфСйс Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Π² ΠšΠ»Π΅Π²Π΅Ρ€Π΅, [ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠšΠ»Π΅Π²Π΅Ρ€Ρƒ ΠΏΠΎ Wi-Fi](wifi.md) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу http://192.168.11.1/clover_blocks/ Π»ΠΈΠ±ΠΎ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ссылку *Blocks programming* Π½Π° [основной Π²Π΅Π±-страницС ΠšΠ»Π΅Π²Π΅Ρ€Π°](wifi.md#Π²Π΅Π±-интСрфСйс). Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: diff --git a/docs/ru/calibration.md b/docs/ru/calibration.md index 947a50f9..18c55a94 100644 --- a/docs/ru/calibration.md +++ b/docs/ru/calibration.md @@ -2,7 +2,7 @@ Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ Π·Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ *Vehicle Setup* ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ мСню *Sensors*. -> **Caution** Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ *COEX Pix*, Π²ΠΎ всСх Π³Ρ€Π°Ρ„Π°Ρ… *Autopilot Orientation* Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ `ROTATION_ROLL_180_YAW_90`, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π°ΠΊΠ»ΠΎΠ½Ρ‹ ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Ρ‹ ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. +> **Caution** Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ [*COEX Pix*](coex_pix.md), Π²ΠΎ всСх Π³Ρ€Π°Ρ„Π°Ρ… *Autopilot Orientation* Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ `ROTATION_ROLL_180_YAW_90`, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π°ΠΊΠ»ΠΎΠ½Ρ‹ ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Ρ‹ ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. ## Компас diff --git a/docs/ru/coex_gps.md b/docs/ru/coex_gps.md new file mode 100644 index 00000000..9db5c943 --- /dev/null +++ b/docs/ru/coex_gps.md @@ -0,0 +1,13 @@ +# COEX GPS + +ГНББ-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ **COEX GPS** совмСстим с ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ [COEX Pix](coex_pix.md). Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ поставляСтся с Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ COEX ΠšΠ»Π΅Π²Π΅Ρ€ 4 Pro. + +## Π‘Ρ…Π΅ΠΌΡ‹ располоТСния ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² + +### Π’ΠΈΠ΄ свСрху + + + +### Π’ΠΈΠ΄ снизу + + diff --git a/docs/ru/coex_pdb.md b/docs/ru/coex_pdb.md new file mode 100644 index 00000000..ad83bd81 --- /dev/null +++ b/docs/ru/coex_pdb.md @@ -0,0 +1,15 @@ +# COEX PDB + +**COEX PDB** (Power Distribution Board) – ΠΏΠ»Π°Ρ‚Π° распрСдСлСния питания для ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠ² ΠšΠ»Π΅Π²Π΅Ρ€ 4. + +Π“Π°Π±Π°Ρ€ΠΈΡ‚Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠ»Π°Ρ‚Ρ‹: 35x35 ΠΌΠΌ. + +## Π‘Ρ…Π΅ΠΌΡ‹ располоТСния ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² + +### Π’ΠΈΠ΄ свСрху + + + +### Π’ΠΈΠ΄ снизу + + diff --git a/docs/ru/coex_pix.md b/docs/ru/coex_pix.md index 1326b2e5..4e7d667b 100644 --- a/docs/ru/coex_pix.md +++ b/docs/ru/coex_pix.md @@ -63,9 +63,9 @@ ### НововвСдСния -* Π—Π°ΠΌΠ΅Π½Π΅Π½ Ρ€Π°Π·ΡŠΠ΅ΠΌ USB Micro-B Π½Π° Ρ€Π°Π°Π·ΡŠΠ΅ΠΌ USB Type-C. +* Π—Π°ΠΌΠ΅Π½Π΅Π½ Ρ€Π°Π·ΡŠΠ΅ΠΌ USB Micro-B Π½Π° Ρ€Π°Π·ΡŠΠ΅ΠΌ USB Type-C. * ИзмСнСн слот для MicroSD ΠΊΠ°Ρ€Ρ‚, Π½Π° Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ. -* Π˜Π·ΠΌΠ΅Π½Π΅Π½Ρ‹ назначСния ΠΏΠΈΠ½ΠΎΠ² Π½Π° Ρ€Π°Π·ΡŒΠ΅ΠΌΠ΅ I2C. +* Π˜Π·ΠΌΠ΅Π½Π΅Π½Ρ‹ назначСния ΠΏΠΈΠ½ΠΎΠ² Π½Π° Ρ€Π°Π·ΡŠΠ΅ΠΌΠ΅ I2C. * Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ„Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π² Ρ†Π΅ΠΏΠΈ питания. ### Π‘Ρ…Π΅ΠΌΡ‹ располоТСния ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² diff --git a/docs/ru/contributing.md b/docs/ru/contributing.md index f36fde13..a183b74e 100644 --- a/docs/ru/contributing.md +++ b/docs/ru/contributing.md @@ -56,7 +56,7 @@ git checkout -b new-article ``` -4. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ `docs/ru` ΠΈΠ»ΠΈ `docs/en` Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ [Markdown](https://ru.wikipedia.org/wiki/Markdown) (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ `docs/ru/new_article.md`). +4. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ `docs/ru` ΠΈΠ»ΠΈ `docs/en` Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ [Markdown](https://ru.wikipedia.org/wiki/Markdown) (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ `docs/ru/new_article.md`). НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ (e-mail / Telegram /...) для авторских статСй. 5. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π² ΠΏΠ°ΠΏΠΊΡƒ `docs/assets` ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚Π΅ Π½Π° Π½ΠΈΡ… ссылки Π² вашСй ΡΡ‚Π°Ρ‚ΡŒΠ΅. 6. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ Π² Ρ„Π°ΠΉΠ» оглавлСния `SUMMARY.md` Π² Ρ‚ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, Π³Π΄Π΅ Π²Ρ‹ Π΅Ρ‘ написали (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² `docs/ru/SUMMARY.md`): diff --git a/docs/ru/copterhack2021.md b/docs/ru/copterhack2021.md index 2cd1a41b..ee0446bf 100644 --- a/docs/ru/copterhack2021.md +++ b/docs/ru/copterhack2021.md @@ -3,3 +3,33 @@ CopterHack 2021 – это командный конкурс ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π° "ΠšΠ»Π΅Π²Π΅Ρ€". ВсС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ мСроприятии смотритС Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС: https://ru.coex.tech/copterhack. + +Полная запись трансляции Ρ„ΠΈΠ½Π°Π»Π°: https://www.youtube.com/watch?v=Z06vxuAHmuE. + +
    + + +
    + +## ΠžΡ‚Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΊΠΎΠΌΠ°Π½Π΄-участников + +|ΠœΠ΅ΡΡ‚ΠΎ|Команда|ΠŸΡ€ΠΎΠ΅ΠΊΡ‚|Π‘Π°Π»Π»| +|-|-|-|-| +|1|πŸ‡§πŸ‡Ύ FTL|[AdvancedClover](advanced_clover.md)|18.8| +|2|πŸ‡·πŸ‡Ί EasyToFly|[EasyToFly](easytofly.md)|18.5| +|3|πŸ‡©πŸ‡ͺ ADDI|[3D-printed generative design frame](../en/generative_design_frame.html)|17.8| +|4|πŸ‡°πŸ‡¬ AT Makers|[Π“Ρ€Π°Ρ„Ρ„ΠΈΡ‚ΠΈ-ΠΊΠΎΠΏΡ‚Π΅Ρ€ D-drone](ddrone.md)|16.7| +|5|πŸ‡ΆπŸ‡¦ DroMap|[The Indoor Mapping Drone](../en/dromap.html)|16.5| +|6|πŸ‡°πŸ‡¬ MINIONS|[Π”Ρ€ΠΎΠ½ для высаТивания сСмян](seeding_drone.md)|15.5| +|7|πŸ‡·πŸ‡Ί Π₯Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½|[Π₯Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½ ΠšΠ²ΠΈΠ΄Π΄ΠΈΡ‡](hardaton_quidditch.md)|15.48| +|8|πŸ‡·πŸ‡Ί Atomic Ferrets|[БистСма засСчки для Π΄Ρ€ΠΎΠ½ΠΎΠ²](race_timing_sys_copterhack.md)|15| +|9|πŸ‡·πŸ‡Ί Drones to fight Corona|[Drones to fight Corona](../en/anticorona_drones.html)|14.6| +|10|πŸ‡·πŸ‡Ί AMLS|[БистСма автоматичСской посадки](amls.md)|12.8| +|11|πŸ‡·πŸ‡Ί PΠ°D30DΠ–|[ΠžΠΊΡ‚ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ со спСцифичным располоТСниСм ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€ΠΎΠ²](oktazodg.md)|11.6| +|12|πŸ‡·πŸ‡Ί Π—Π°ΡƒΡ€Π°Π»ΡŒΡΠΊΠΈΠΉ Π’ΠΈΠΊΠΈΠ½Π³|[ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ](zaural_viking.md)|11.4| +|13|πŸ‡¨πŸ‡¦ Bennie and the Jetson TX2|[Retail Drone](../en/bennie.html)|9.8| +|14|πŸ‡³πŸ‡± Blue Jay Eindhoven|[Designing a drone and a path planning algorithm](../en/blue_jay_eindhoven.html)|9.6| +|15|πŸ‡·πŸ‡Ί ProCleVeR|[Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСмы для управлСния Π‘ΠŸΠ›Π с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шлСма Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ](remote-control-with-oculusvr.md)|8.5| +|16|πŸ‡·πŸ‡Ί Quadrotor|[Π”Ρ€ΠΎΠ½-Агроном](drone-agronom.md)|7.7| + +Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΏΠΎ критСриям Π² [ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅](https://docs.google.com/spreadsheets/d/1L9NDrw4c4vTCIVR3aC8ErAjxnuBg-Afil9AwUQZVJ5I/edit?usp=sharing). diff --git a/docs/ru/ddrone.md b/docs/ru/ddrone.md new file mode 100644 index 00000000..fea9316a --- /dev/null +++ b/docs/ru/ddrone.md @@ -0,0 +1,97 @@ +# Π“Ρ€Π°Ρ„Ρ„ΠΈΡ‚ΠΈ ΠΊΠΎΠΏΡ‚Π΅Ρ€ D-drone + +[CopterHack-2021](copterhack2021.md), ΠΊΠΎΠΌΠ°Π½Π΄Π° **AT Makers**. + + + +## Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ + +Π›ΡŽΠ΄ΠΈ стрСмятся Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒ искусствСнный ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ всСму, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ сами. Π ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ нас ΡƒΡ‡Π°Ρ‚ с дСтства. И ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΠΎΠ½Π° Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ? На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΏΡ‚Π΅Ρ€Ρ‹ ΠΈ Π³Ρ€Π°Ρ„Ρ„ΠΈΡ‚ΠΈ Π½Π°Π±ΠΈΡ€Π°ΡŽΡ‚ свою ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ…. + +## МодСли ΠΈ сборка + + + + + +Для выполнСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ: + +- Π°ΡΡ€ΠΎΠ·ΠΎΠ»ΡŒΠ½Π°Ρ краска +- сСрвопривод MG90S; +- 3D-ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€; +- ΡƒΠ΄Π»ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒ распылитСля; +- Π»Π΅Π½Ρ‚Π° с Π»ΠΈΠΏΡƒΡ‡ΠΊΠΎΠΉ (ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ); +- 4 Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… Π²ΠΈΠ½Ρ‚Π° M4 ΠΈΠ»ΠΈ; +- 2-4 ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… саморСза M4 ΠΈΠ»ΠΈ M3. + +[Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ](https://github.com/PerizatKurmanbaeva/D-drone/tree/master/details) ΠΈ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ: + +- Π΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒ; +- Π²ΠΈΠ½Ρ‚; +- Π΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒ стоСк с Π³Π°ΠΉΠΊΠΎΠΉ; +- стойки (2 ΡˆΡ‚.); +- Π΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒ для сСрво. + +**Π”Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒ Π±Π°Π»Π»ΠΎΠ½Ρ‡ΠΈΠΊΠ°.** Π”Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒ Π±Π°Π»Π»ΠΎΠ½Ρ‡ΠΈΠΊΠ° прикрСпляСтся ΠΊ Π΄Π΅ΠΊΠ΅ 4 Π²ΠΈΠ½Ρ‚Π°ΠΌΠΈ ΠΈ Π³Π°ΠΉΠΊΠ°ΠΌΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ Π±Π°Π»Π»ΠΎΠ½Ρ‡ΠΈΠΊ ΠΊ Π΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŽ ΠΌΡ‹ использовали Π»Π΅Π½Ρ‚Ρƒ с Π»ΠΈΠΏΡƒΡ‡ΠΊΠΎΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 4 Π³Π°Π΅ΠΊ ΠΈ Π²ΠΈΠ½Ρ‚ΠΎΠ² закрСпляСм Π΄Π΅ΠΊΡƒ с Π΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»Π΅ΠΌ свСрху Π΄Ρ€ΠΎΠ½Π°. + +ВСс дСрТатСля: 90 Π³. + + + +Если Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ Π±Π°Π»Π»ΠΎΠ½Ρ‡ΠΈΠΊΠ° мСньшС Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€Π° дСрТатСля, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Π΅Ρ‚Π°Π»ΡŒ Π² Π²ΠΈΠ΄Π΅ Π΄ΡƒΠ³ΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ устойчиво Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ Π±Π°Π»Π»ΠΎΠ½Ρ‡ΠΈΠΊ. + +**Π‘Ρ…Π΅ΠΌΠ° наТатия.** Для наТатия ΠΊΠ»Π°ΠΏΠ°Π½Π° Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ½Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ с Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎΠΉ Π³Π°ΠΉΠΊΠΎΠΉ. К сСрвоприводу Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π° ΠΏΠ»Π°Π½ΠΊΠ° с отвСрстиями, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ стойки, Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Π΅ ΠΊ Π³Π°ΠΉΠΊΠ΅. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ сСрвоприводу Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ оси, Π²Π²Π΅Ρ€Ρ… Π²Π½ΠΈΠ·. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ смодСлировали ΠΊΡ€Ρ‹ΡˆΠΊΡƒ для ΠΊΠ½ΠΎΠΏΠΊΠΈ Π±Π°Π»Π»ΠΎΠ½Ρ‡ΠΈΠΊΠ°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ насадки Π½Π΅ ровная. + + + + + +## ΠŸΠ΅Ρ€Π΅Π΄ запуском + +### Настройка Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвопривода + +ΠŸΠ΅Ρ€Π΅Π΄ запуском ΠΊΠΎΠΏΡ‚Π΅Ρ€Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ [servo.py](https://github.com/PerizatKurmanbaeva/D-drone/blob/master/examples/servo.py) ΠΈ пСрСнСсти Π΅Π³ΠΎ Π½Π° RPi. МоТно просто ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π°. Или ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ scp. НапримСр, Ρ‚Π°ΠΊ: + +```bash +scp servo.py pi@192.168.11.1:/home/pi +``` + +Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ Π½Π° Raspberry Pi ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: + +```bash +sudo pigpiod +python servo.py +``` + +### Настройка Π²Π΅Π±-интСрфСйса + +НуТно ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ [Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ](https://github.com/PerizatKurmanbaeva/visual_ddrone) Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ .zip. ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π½Π° RPi ΠΈ распаковываСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄: + +```bash +scp visual_ddrone-master.zip pi@192.168.11.1:/home/pi +cd catkin_ws/src/clover/clover/www +unzip /home/pi/visual_ddrone-master.zip . +mv visual_ddrone-master ddrone +``` + +Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²Π΅Π±-интСрфСйс Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкС [http://192.168.11.1/clover/ddrone](http://192.168.11.1/clover/ddrone). + +## Π’Π΅Π±-интСрфСйс + +Запуск нашСго Π΄Ρ€ΠΎΠ½Π° осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ [Π²Π΅Π±-сайта](https://perizatkurmanbaeva.github.io/visual_ddrone). Π’Π΅Π±-интСрфСйс позволяСт Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нарисованноС Π² G-code. Π”Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ исполнСниСм ΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠΌ. + + + +ΠœΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Π²Π΅Π±-интСрфСйс для управлСния ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π»Π΅Π³Ρ‡Π΅ ΠΈ Π±Π»ΠΈΠΆΠ΅ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. + + + +## ΠŸΠΎΠ»Π΅Ρ‚Ρ‹ + + + +## Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ + +Π₯ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ ΠœΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎΠΌΡƒ унивСрситСту Ала-Π’ΠΎΠΎ Π·Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΠΈΠ½Π°Π½ΡΠΎΠ²ΡƒΡŽ ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² осущСствлСнии Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. + +![Ala-Too University](https://my.alatoo.edu.kg/images/logo_text.png) diff --git a/docs/ru/drone-agronom.md b/docs/ru/drone-agronom.md new file mode 100644 index 00000000..bd0a98a7 --- /dev/null +++ b/docs/ru/drone-agronom.md @@ -0,0 +1,19 @@ +# Π”Ρ€ΠΎΠ½-Агроном + +ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ **Quadrotor** с [CopterHack-2021](copterhack2021.md). + +## Π‘ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + +Π’ соврСмСнном ΠΌΠΈΡ€Π΅ Ρ„Π΅Ρ€ΠΌΠ΅Ρ€Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π½Π΅ качСствСнного ΠΈΠ»ΠΈ нСдостаточного ΠΎΡ€ΠΎΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ. Из-Π·Π° этого ΠΏΠΎ статистикС ООН ΠΏΠΎΠ³ΠΈΠ±Π°Π΅Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ 25% уроТая. + +Π­Ρ‚Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ использованиСм Π°Π²ΠΈΠ°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ Π½Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ. Наша ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π±ΠΎΠ»Π΅Π΅ дСшСвоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ - Π”Ρ€ΠΎΠ½-Π°Π³Ρ€ΠΎΠ½ΠΎΠΌ. Наш ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠšΠ»Π΅Π²Π΅Ρ€ 3 ΠΈ Π±Π°Π·Π΅ Ρ€Π°ΠΌΡ‹ Tarot Iron Man 650 позволяСт ΠΏΡ€ΠΈ нСбольшой Π²Π·Π»Ρ‘Ρ‚Π½ΠΎΠΉ массС (Π² сравнСнии с ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π°ΠΌΠΈ) ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΠΌΠ°Π½Π΅Π²Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ врСмя ΠΏΠΎΠ»Π΅Ρ‚Π°. Π’Π°ΠΊΠΆΠ΅ использованиС насоса высокого Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ позволяСт ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ распылСния (Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ 3x3 ΠΌΠ΅Ρ‚Ρ€Π°). Π’ прСимущСство ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ отнСсти Π½Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ поставки. + + + +## ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ + +ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π±Ρ‹Π» ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ построСн Π½Π° Π±Π°Π·Π΅ ΠšΠ»Π΅Π²Π΅Ρ€ 3 Pro (Π² Ρ„ΠΎΡ€ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€Π΅ гСксакоптСра). Но послС ΠΏΠ΅Ρ€Π²Ρ‹Ρ… тСстов (ссылка Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…: https://drive.google.com/file/d/1gwpZZ2ZTkYvmTbspskpW79i8WShVEiI0/view?usp=sharing), Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ всю элСктронику Π½Π° ΠΌΠΎΡ‰Π½ΡƒΡŽ Π²ΠΈΠ½Ρ‚ΠΎΠΌΠΎΡ‚ΠΎΡ€Π½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΈ Π»Π΅Π³ΠΊΡƒΡŽ ΠΈ ΠΏΡ€ΠΎΡ‡Π½ΡƒΡŽ Ρ€Π°ΠΌΡƒ Tarot Iron Man 650. + +## Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ + +ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ ΠΏΠΎ этой ссылкС (https://drive.google.com/drive/folders/1wCyUtMYOLiqYCBLC8aWpisBAH3ai9WNu?usp=sharing) Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ. Π’Π°ΠΌ находятся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°, 3D ΠΌΠΎΠ΄Π΅Π»ΠΈ. diff --git a/docs/ru/duocam.md b/docs/ru/duocam.md new file mode 100644 index 00000000..d76699e2 --- /dev/null +++ b/docs/ru/duocam.md @@ -0,0 +1,197 @@ +# COEX DuoCam + +"COEX DuoCam" – это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΉ комплСкс, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ-Ρ‚Π΅ΠΏΠ»ΠΎΠ²ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. + +duocam + +Π’ качСствС источника Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ тСорСтичСски ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ CSI ΠΈΠ»ΠΈ HDMI-Π²Ρ‹Ρ…ΠΎΠ΄. + +Π’ качСствС источника Ρ‚Π΅ΠΏΠ»ΠΎΠ²ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΏΠ»ΠΎΠ²ΠΈΠ·ΠΎΡ€Ρ‹ Seek Compact ΠΈΠ»ΠΈ Seek Compact Pro. + +Π’ качСствС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ для запуска ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ софта рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΏΠ»Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Raspberry Pi 4B. + +## ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ устройств + +Π’Π΅ΠΏΠ»ΠΎΠ²ΠΈΠ·ΠΎΡ€ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡ€Ρ‚ΠΎΠ² USB 3.0 Π½Π° RPi4. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ USB 3.0-ΠΏΠΎΡ€Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Wi-Fi Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ для осущСствлСния связи с Π½Π°Π·Π΅ΠΌΠ½ΠΎΠΉ станциСй. + +Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΊΠ°ΠΌΠ΅Ρ€Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² CSI ΠΏΠΎΡ€Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· HDMI-CSI-ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€. + +Π’ ΠΏΠΎΡ€Ρ‚ USB 2.0 слСдуСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ USB-flash устройство, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ сохранСниС Ρ„ΠΎΡ‚ΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ»ΠΎΠ². + +## ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ + +ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ осущСствляСт Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΏΠ»ΠΎΠ²ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½Π° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° управлСния свойствами ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π² QGroundControl ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. + +### Π’Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‚Π΅ΠΏΠ»ΠΎΠ²ΠΈΠ·ΠΎΡ€Π° + +ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π°Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ, какая Ρƒ вас модСль Ρ‚Π΅ΠΏΠ»ΠΎΠ²ΠΈΠ·ΠΎΡ€Π° (простая ΠΈΠ»ΠΈ Pro) ΠΈ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ настройку Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³-Ρ„Π°ΠΉΠ»Π΅ (`enable: yes` Ρƒ seek_thermal_pro ΠΈΠ»ΠΈ seek_thermal Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ thermal_camera_models. Π’Π°ΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ `enable: no` Ρƒ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ прСдполагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ). + +### Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ + +ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ (`show_visual: yes`) ΠΈ тСрмичСском (`show_thermal: yes`) изобраТСниях, тСрмичСскоС Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ Π² Ρ€Π΅Π³ΠΈΠΎΠ½, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π² свойствС `overlay_thermal_on_visual` (Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ `(x_start, y_start)`, ΡˆΠΈΡ€ΠΈΠ½Π° Ρ€Π΅Π³ΠΈΠΎΠ½Π° - `thermal_region_width`, высота - `thermal_region_height`). + +Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (`show_visual: no`), Ρ‚ΠΎ тСрмичСскоС развСрнСтся Π½Π° вСсь экран. + +Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ тСрмичСскоС (`show_thermal: no`), Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅. + +Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Π° – ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ пСрСстанСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. + +### Π¦Π΅Π½Ρ‚Ρ€ΠΎΠ²ΠΊΠ° + +Для Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ изобраТСния (ΠΈΠ·-Π·Π° физичСского сдвига ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²ΠΎΠ² ΠΊΠ°ΠΌΠ΅Ρ€ тСрмичСскоС Π±ΡƒΠ΄Π΅Ρ‚ сдвинутого ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ) слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойства Ρ€Π°Π·Π΄Π΅Π»Π° `final_frame_cropping`. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ Ρ€Π°Π·Π΄Π΅Π»Ρƒ. + +### Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² (edge detectors) + +Для облСгчСния понимания тСрмичСского изобраТСния, Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ налоТСния Π½Π° Π½Π΅Π³ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ изобраТСния. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π΄Π²ΡƒΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² дСтСктирования ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²: [Sobel](https://docs.opencv.org/3.4/d2/d2c/tutorial_sobel_derivatives.html) ΠΈ [Canny](https://docs.opencv.org/3.4/da/d5c/tutorial_canny_detector.html). Π’ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° (`apply_sobel` ΠΈ `apply_canny`) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ свойствами Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ². + +### ΠšΠΎΠ»ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡ + +Для большСй наглядности, Ρ‚Π΅ΠΏΠ»ΠΎΠ²ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ»ΠΎΡ€ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свойство `apply_colormap: yes`. + +ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ схСму ΠΊΠΎΠ»ΠΎΡ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· [списка](https://docs.opencv.org/2.4/modules/contrib/doc/facerec/colormaps.html), ΡƒΠΊΠ°Π·Π°Π² порядковый Π½ΠΎΠΌΠ΅Ρ€ схСмы Π² свойствС `colormap`. + +### Бвойства транслируСмого Π²ΠΈΠ΄Π΅ΠΎ ΠΈ сохраняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² + +Бвойства транслируСмого Π²ΠΈΠ΄Π΅ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ `output_video`. Π”Π΅Π»Π°Ρ‚ΡŒ это стоит с Ρ‡Π΅Ρ‚ΠΊΠΈΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ дСлаСшь - Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ настройки ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ. НапримСр, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с настройками gstreamer'Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ осущСствляСт ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. + +Для настройки сохраняСмого Π½Π° Ρ„Π»Π΅Ρˆ-Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ Π²ΠΈΠ΄Π΅ΠΎ слСдуСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ свойств `encode_video`. + +ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ для сохранСния Ρ„ΠΎΡ‚ΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² свойствах `path_to_save`. + +### Настройки Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ + +Π‘ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ\ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ частоту ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² сСкунду Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ тСрмичСского ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ свойства `show_fps`. + +ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ\ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ пСрСкрСстиС с Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€ΠΎΠΉ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ пиксСля ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ свойства `draw_temp`. + +### ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΉΠΊΠ° Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ + +Π’ зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ‚Π΅ΠΏΠ»ΠΎΠ²ΠΈΠ·ΠΎΡ€Π°, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Π’ сСкции `temperature_calibration` Доступны Π΄Π²Π΅ настройки: + +* Π‘Π΄Π²ΠΈΠ³ (`offset`) - Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ сдвиг Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ число. +* ΠœΠ°ΡΡˆΡ‚Π°Π± (`scale`) - ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡˆΠΊΠ°Π»Ρ‹. + +### Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΎΡ‚ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΊ краям + +Если Π½Π° Ρ‚Π΅ΠΏΠ»ΠΎΠ²ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ "Ρ€Π°ΠΌΠΊΠ°", вызванная ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ опрСдСляСмой Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΊ краям, Ρ‚ΠΎ слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ (Π²ΠΈΠ½ΡŒΠ΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅). Настройки Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² сСкции `vignette`: + +* `enable` - Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ-Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. +* `show_center` - ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ "Ρ†Π΅Π½Ρ‚Ρ€Π°" для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π΅Π΅ полоТСния. +* `center_x` - X-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° "Ρ†Π΅Π½Ρ‚Ρ€Π°". +* `center_y` - Y-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° "Ρ†Π΅Π½Ρ‚Ρ€Π°". +* `max_decrement_relative` - максимальноС ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΊ краям. + +## Π’ΠΈΠ΄ΠΆΠ΅Ρ‚ управлСния ΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ для QGroundControl + +![QGC_widget](../assets/duocam/qgc_duocam_widget.png) + +### Π“Π΄Π΅ Π²Π·ΡΡ‚ΡŒ + +QGC c Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ для управлСния "COEX DuoCam" ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π² нашСм [Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ](https://github.com/CopterExpress/qgroundcontrol/releases). Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ слСдуСт Ρ‚ΠΎΡ‚ Ρ€Π΅Π»ΠΈΠ·, Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ присутствуСт слово `duocam` с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ порядковым Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ. + +### Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ + +ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QGC ΠΏΠΎΡˆΠ»Π΅Ρ‚ MAVLink-сообщСния с запросом Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ свойств. НСобходимо Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ всС Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° загрузятся. Если Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ "Refresh values". + +ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ свойств QGC осущСствляСт ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡŽ с DuoCam посрСдством ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° MAVLink, поэтому Π½Π΅Ρ‚ смысла ΠΎΡ‡Π΅Π½ΡŒ часто Π½Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρ‹ - Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, послС наТатия слСдуСт Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ измСнСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ свойству. + +[ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ DuoCam ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ `duocam-mavlink`](duocam_mavlink.md). + +## ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» + +Для Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ настройки DuoCam ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». + +### Как Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ + +Для рСдактирования ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ microSD-ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΈΠ· RPi4, Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠ°Ρ€Π΄-Ρ€ΠΈΠ΄Π΅Ρ€ своСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° (ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы трСбуСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ext4), ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΠΎ адрСсу `/etc/duocam/camera.yaml`. + +Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΉΡ‚ΠΈ ΠΏΠΎ SSH Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΡƒΡŽ RPi4 ΠΈ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π²Π½ΡƒΡ‚Ρ€ΠΈ систСмы ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡƒΡ‚ΠΈ. + +### ΠžΠ±Ρ€Π°Π·Π΅Ρ† ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° + +```yaml +show_visual: yes +show_thermal: yes +flip_thermal: no +apply_sobel: + enable: yes + sobel_scale: 3 + sobel_delta: 0 +apply_canny: no +draw_temp: yes + +output_video: + device: /dev/video1 + width: 1280 + height: 720 + bytes_per_pixel: 3 + framerate: 20 + +path_to_save_photos: /media/usb0/ +path_to_save_videos: /media/usb0/ + +encode_video: + width: 720 + height: 480 + framerate: 10 + +thermal_camera_models: + seek_thermal_pro: + enable: no + sensor_resolution: + width: 320 + height: 240 + overlay_thermal_on_visual: + # These values are for GitUp3 + x_start: 282 + y_start: 102 + thermal_region_width: 600 + thermal_region_height: 400 + transparency: 0.3 + # These values are for Raspicam + # x_start: 425 + # y_start: 155 + # thermal_region_width: 900 + # thermal_region_height: 600 + final_frame_cropping: + enable: yes + x_start: 0 + y_start: 0 + width: 1160 + height: 610 + + seek_thermal: + enable: yes + sensor_resolution: + width: 206 + height: 156 + overlay_thermal_on_visual: + x_start: 282 + y_start: 102 + thermal_region_width: 600 + thermal_region_height: 400 + transparency: 0.3 + final_frame_cropping: + enable: yes + x_start: 0 + y_start: 0 + width: 1160 + height: 610 + +# Colormaps are taken from: https://docs.opencv.org/2.4/modules/contrib/doc/facerec/colormaps.html +# COLORMAP_AUTUMN = 0, +# COLORMAP_BONE = 1, +# COLORMAP_JET = 2, +# COLORMAP_WINTER = 3, +# COLORMAP_RAINBOW = 4, +# COLORMAP_OCEAN = 5, +# COLORMAP_SUMMER = 6, +# COLORMAP_SPRING = 7, +# COLORMAP_COOL = 8, +# COLORMAP_HSV = 9, +# COLORMAP_PINK = 10, +# COLORMAP_HOT = 11 +apply_colormap: + enable: yes + colormap: 4 +``` diff --git a/docs/ru/duocam_mavlink.md b/docs/ru/duocam_mavlink.md new file mode 100644 index 00000000..d6e65e04 --- /dev/null +++ b/docs/ru/duocam_mavlink.md @@ -0,0 +1,104 @@ +# Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ MAVLink-ΠΊΠ°ΠΌΠ΅Ρ€Π° COEX DuoCam + +ΠŸΠΎΠ»Ρ‘Ρ‚Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ способы взаимодСйствия с внСшними ΠΊΠ°ΠΌΠ΅Ρ€Π°ΠΌΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» MAVLink. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ коммуникация с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования UART-ΠΏΠΎΡ€Ρ‚Π° Π½Π° ΠΏΠΎΠ»Ρ‘Ρ‚Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅, Π½ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ Π² основном ΠΏΠΎΡ‚ΠΎΠΊΠ΅ MAVLink-Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ с Π‘ΠŸΠ›Π. + +Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° `duocam-mavlink` ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ MAVLink-ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΈ встраиваСтся Π² ΠΎΠ±Ρ‰ΡƒΡŽ Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»Ρ‘Ρ‚Π½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ ΠΈ QGroundControl. + +![Π‘Π»ΠΎΠΊ-схСма COEX DuoCam](../assets/duocam/duocam.png) + +На Π±Π»ΠΎΠΊ-схСмС прямыми линиями ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, ΠΏΡƒΠ½ΠΊΡ‚ΠΈΡ€Π½Ρ‹ΠΌΠΈ линиями уточняСтся Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ взаимодСйствия. + +> **Warning** ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» взаимодСйствия находится Π² процСссС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’ Π½ΠΎΠ²Ρ‹Ρ… вСрсиях планируСтся ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ прямой ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΈΡ… количСства ΠΎΡ‚ `duocam-mavlink` ΠΊ QGroundControl. + +`duocam-camera` ΠΈ `duocam-mavlink` ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ POSIX. ИмСна ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ сообщСний доступСн Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ [duocam-common](https://github.com/CopterExpress/duocam-common). + +Для объСдинСния Π±Π»ΠΎΠΊΠΎΠ², Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· MAVLink, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой MAVLink-ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€/ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»ΠΈΠ±ΠΎ позволяСт ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ заполняСт Π΅Ρ‘ ΠΏΠΎ схСмС *MAVLink ID:Component ID* (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `cmavnode`, `mavlink-fast-switch`, `mavlink-switch`). + +> **Warning** ΠŸΡ€ΠΈ использовании `mavlink-fast-switch` трСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `mavlink-serial-bridge`, Π»ΠΈΠ±ΠΎ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ мост для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ MAVLink ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° Π² UDP, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ `mavlink-fast-switch` Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с UDP. + +## ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» + +Для рСдактирования ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ microSD-ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΈΠ· RPi4, Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠ°Ρ€Π΄-Ρ€ΠΈΠ΄Π΅Ρ€ своСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° (ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы трСбуСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ext4), ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΠΎ адрСсу `/etc/duocam/mavlink.yaml`. + +Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΉΡ‚ΠΈ ΠΏΠΎ SSH Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΡƒΡŽ RPi4 ΠΈ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π²Π½ΡƒΡ‚Ρ€ΠΈ систСмы ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡƒΡ‚ΠΈ. + +Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ `duocam-mavlink` трСбуСтся *MAVLink ID* ΠΏΠΎΠ»Ρ‘Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `vehicle_id`) ΠΈ `MAVLink ID` QGroundControl (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `qgc_vehicle_id`). `duocam-mavlink` ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ Π½Π° UDP (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ `ip` ΠΈ `port`) ΠΈ отправляСт сообщСния HEARTBEAT с частотой, согласно ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ `heartbeat_frequency`, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡΡΡŒ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎΠ»Ρ‘Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° `MAV_COMP_ID_CAMERA`. + +Максимальная Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ‚ `duocam-camera` задаётся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ `command_timeout`. + +Если систСма DuoCam ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠΎΠ»Ρ‘Ρ‚ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `no_gps`. + +## ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° + +```yaml +# MAVLink vehicle ID that owns the camera +vehicle_id: 1 +# Enable this flag for indoor use +no_gps: False +# QGC vehicle ID +qgc_vehicle_id: 255 +mavlink: + # IP address of the interface to listen port on (0.0.0.0 for all interfaces) + ip: 127.0.0.1 + # UDP port + port: 14540 + # Heartbeat frequency (Hz) + heartbeat_frequency: 1.0 +# Camera driver command timeout (s) +command_timeout: 3.0 +``` + +## ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° для `mavlink-fast-switch` + +```yaml +# MAVLink endpoints +endpoints: + # UAV endpoint + - name: "uav" + local: + port: 14588 + # DuoCam MAVLink endpoint + - name: "duocam-mavlink" + remote: + ip: "127.0.0.1" + port: 14540 + # GCS endpoint + - name: "gcs" + remote: + ip: "127.0.0.1" + port: 14550 +# Enable MAVLink ID table +# HINT: Can't use this feature with duocam +id-table: False +``` + +## ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° для `mavlink-serial-bridge` + +```yaml +# Serial device settings +serial: + # Device file + device: "/dev/ttyS0" + # Baudrate + baudrate: 57600 + # Flow control (hardware, none) + flow: none + # Software serial TX buffer (bytes) (2048 by default) + tx-buffer: 2048 +# UDP port settings +udp: + # Remote host settings (optional, listening mode if not presented) + remote: + ip: 127.0.0.1 + port: 14588 + # Lock remote host on the initial value (optional, False by default) + lock: True + # Broadcast mode (optional, False by default) + broadcast: False + # Local settings (optional, all interfaces and a random port by default) + local: + # Local IP address (0.0.0.0 to listen on all interfaces) (optional, all interfaces by default) + ip: 127.0.0.1 + # Local UDP port (0 to select a random free port) (optional, 0 by default) + port: 0 +``` diff --git a/docs/ru/easytofly.md b/docs/ru/easytofly.md new file mode 100644 index 00000000..5bd5a678 --- /dev/null +++ b/docs/ru/easytofly.md @@ -0,0 +1,173 @@ +# EasyToFly + +## Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ + +[CopterHack-2021](copterhack2021.md), Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: **EasyToFly**. + +Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ 5 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ: + +- Π˜Π³ΠΎΡ€ΡŒ Π‘ΠΈΠ΄ΠΎΡ€ΠΈΠ½ [@maerans12](https://github.com/maerans12) (TeamLead) +- Артём Π‘Π°Ρ‚Π°Π»ΠΎΠ² [@bart02](https://github.com/bart02) (Full-Stack Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ) +- ΠšΠ°Ρ€ΠΈΠ½Π° Π―Π½Ρ‹ΡˆΠ΅Π²ΡΠΊΠ°Ρ [@fanot](https://github.com/fanot) (Π’Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ) +- Никита Π›ΠΎΠΊΡ‚Π΅Π² [@nikilokser](https://github.com/nikilokser) (БпСциалист ΠΎΡ‚Π΄Π΅Π»Π° Hard) +- Π”Π°Π½ΠΈΠΈΠ» Π ΡƒΡ„ΠΈΠ½ (БпСциалист ΠΎΡ‚Π΄Π΅Π»Π° Hard) + +E-mail: a@batalov.me
    +Telegram: [@bart02](https://t.me/bart02), [@maerans](https://t.me/maerans) + +## Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ + +Π’ Ρ€Π°Π±ΠΎΡ‚Π΅ рассматриваСтся процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса (Π΄Π°Π»Π΅Π΅ – АПК, систСма) для бСзопасного обучСния спСциалистов ΠΏΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŽ "Π›Π΅Ρ‚Π°ΡŽΡ‰Π°Ρ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ°". + +Основной **ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉΒ Π΄Π°Π½Π½ΠΎΠΉ сфСры** являСтся нСдостаточная Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… систСм бСспилотных Π»Π΅Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΠΎΠ² (Π΄Π°Π»Π΅Π΅ – Π‘ΠŸΠ›Π), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² ΠΈΡ… ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ для использования Π² ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ, ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΈ Ρ‚.Π΄. + +**ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌΒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹**Β ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ комплСксы для изучСния процСссов Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.Β **ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ** являСтся АПК для бСзопасного обучСния спСциалистов ΠΏΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŽ "Π›Π΅Ρ‚Π°ΡŽΡ‰Π°Ρ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ°". + +**ЦСль**:Β Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Β ΠΠŸΠš для простого и бСзопасного обучСния спСциалистов ΠΏΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŽ "Π›Π΅Ρ‚Π°ΡŽΡ‰Π°Ρ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ°". + +**Π—Π°Π΄Π°Ρ‡ΠΈ**: + +1. ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ исслСдования срСди ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΎΠ± ΠΈΡ… нСобходимостях ΠΏΡ€ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ спСциалистов. +2. ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. +3. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСхничСского задания (Π΄Π°Π»Π΅Π΅ – Π’Π—) Π½Π° АПК. +4. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. +5. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ исполнитСлСй на основании тСхничСского задания. +6. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ подсистСмы АПК Β«ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ столкновСний». +7. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ подсистСмы АПК Β«ΠœΠ°ΡΡ‚Π΅Ρ€ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ настройки Π‘ΠŸΠ›ΠΒ». +8. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ подсистСмы АПК Β«ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ состояния Π‘ΠŸΠ›ΠΒ». +9. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ АПК. + +![Π›ΠΎΠ³ΠΎ](../assets/easytofly/logo.png) + +## Π’Ρ‹Π±ΠΎΡ€ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ + +ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Clover 4 позволяСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ устройства ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΈ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π° Π±ΠΎΡ€Ρ‚Ρƒ; Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ программная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° основана Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠΌ стСкС PX4 ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС для Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠ² ROS (Π΄Π°Π»Π΅Π΅ – ROS), Ρ‡Ρ‚ΠΎ прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅Π΅ использования Π² Ρ‚ΠΎΠΌ числС ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… бСспилотных Π»Π΅Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π°Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. ПослС изучСния Ρ€Ρ‹Π½ΠΊΠ° ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² России, ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ данная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° станСт Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ стартом Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. + +## ΠžΠΏΡ€ΠΎΡ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠ². Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π’Π— + +По Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ опроса ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ систСмы – ΠΏΠ΅Π΄Π°Π³ΠΎΠ³ΠΎΠ² дСтского Ρ‚Π΅Ρ…Π½ΠΎΠΏΠ°Ρ€ΠΊΠ° Β«ΠšΠ²Π°Π½Ρ‚ΠΎΡ€ΠΈΡƒΠΌΒ» ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ОУ, Π±Ρ‹Π»ΠΎ выяснСно, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ учрСТдСния Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·ΠΎΠ½ для ΠΏΠΎΠ»Π΅Ρ‚ΠΎΠ², вслСдствиС Ρ‡Π΅Π³ΠΎ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ проводят настройку Π‘ΠŸΠ›Π ΠΈ, Π² Ρ€Π΅Π΄ΠΊΠΈΡ… случаях, ΠΏΠΎΠ»Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ присмотром руководитСля, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π»Π΅ΠΆΠΈΡ‚ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ ΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹, Тизнь ΠΈ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ. + +Π’Π°ΠΊΠΆΠ΅ Π½Π°ΠΌ стало извСстно ΠΎ слоТностях ΠΏΡ€ΠΈ настройкС Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Ρ‚Π°, ΠΈΠ·-Π·Π° частого использования консоли ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы LinuxΒ Π² процСссС настройки, Π° Ρ‚Π°ΠΊΠΆΠ΅ нСобходимости установки Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. + +Помимо этого, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· запросов Π±Ρ‹Π»Π° компактная аппаратная ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ систСмы, которая прСдставляСт собой Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ корпус Π‘ΠŸΠ›Π, с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ быстрой установки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ оборудования. + +Π’ качСствС рассмотрСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ мСста ΠΏΠΈΠ»ΠΎΡ‚Π½ΠΎΠ³ΠΎ запуска систСмы, Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π³ΠΎΠ²ΠΎΡ€Ρ‹ ΡΒ ΠšΠ²Π°Π½Ρ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΠΌΒ Π³. Вомска, ΠΎΠ± использовании АПК в ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΌ процСссС Аэроквантума. + +## ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ + +### ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ подсистСма Β«ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ столкновСний» + +ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ стала программная подсистСма Β«ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ столкновСний». Π‘ΠΎΠ·Π΄Π°Π² систСму Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ β€œΠ²Π»Π΅Ρ‚Π°Π½ΠΈΡβ€ Π‘ΠŸΠ›Π Π² ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹, стоящиС Π² ΡƒΡ‡Π΅Π±Π½ΠΎΠΉ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΊΠ°ΠΊ Π²ΠΎ врСмя Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ управлСния, Ρ‚Π°ΠΊ ΠΈ тСстировании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Ρ‚Π°, Π°, ΠΏΡ€ΠΈ нСобходимости, ΠΈ ΠΎΠ±Π»Π΅Ρ‚Π° прСпятствий, ΠΌΡ‹ смоТСм ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ бСзопасноС ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅. + +Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ подсистСмы, Π½Π°ΠΌΠΈ Π±Ρ‹Π»Π° ΠΈΠ·ΡƒΡ‡Π΅Π½Π° докумСнтация ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠ³ΠΎ стСка PX4. Π‘Ρ‹Π»ΠΎ выяснСно, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ физичСски и гСомСтричСски обработанных Π΄Π°Π½Π½Ρ‹Ρ… с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π½Π° Π±ΠΎΡ€Ρ‚Ρƒ. На Π±ΠΎΡ€Ρ‚ΡƒΒ CloverΒ 4 установлСн ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Β RaspberryΒ PiΒ (Π΄Π°Π»Π΅Π΅ – ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π½Π° Π±ΠΎΡ€Ρ‚Ρƒ), мощности ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для этих Ρ†Π΅Π»Π΅ΠΉ. + +Π”Π°Π»Π΅Π΅ встал вопрос ΠΎΠ± использовании Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ подсистСмы. + +#### LIDAR + +ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ систСмы – ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹Π΅ LIDAR-Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ (Π΄Π°Π»Π΅Π΅ – Π»ΠΈΠ΄Π°Ρ€). Π‘Π°ΠΌΡ‹ΠΌ популярным ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° сСгодняшний дСнь являСтся RPLIDAR A1. + +Π”Π°Ρ‚Ρ‡ΠΈΠΊ основан Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π»Π°Π·Π΅Ρ€Π½ΠΎΠΉ триангуляции ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ высокоскоростноС ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ для получСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, систСма измСряСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ расстоянии Π±ΠΎΠ»Π΅Π΅ 8000 Ρ€Π°Π· Π² сСкунду. Π›ΠΈΠ΄Π°Ρ€ вращаСтся ΠΏΠΎ часовой стрСлкС для выполнСния всСнаправлСнного Π»Π°Π·Π΅Ρ€Π½ΠΎΠ³ΠΎ сканирования окруТСния Π½Π° 360 градусов. + +Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ являСтся ΠΎΠ±Π»Π°ΠΊΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ ROS, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ дСйствия с этой структурой Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ: ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, построСниС ΠΊΠ°Ρ€Ρ‚Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅). + +Для установки Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° Π½Π° Clover 4 Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΎ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Π½Π° 3D ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ для экономии высоты Π±Ρ‹Π»ΠΎ совмСщСно с ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ для аккумулятора. + +Π”Π°Π»Π΅Π΅ прСдстояла Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняло всС прСобразования, ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ (соглашСния ΠΎ систСмах ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΈ ROS ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ). ПослС этого ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° принятиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ лСтящий Π‘ΠŸΠ›Π ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Ρ‚. + +#### АппаратноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ· 4-Ρ… Π»Π°Π·Π΅Ρ€Π½Ρ‹Ρ… Π΄Π°Π»ΡŒΠ½ΠΎΠΌΠ΅Ρ€ΠΎΠ² + +Помимо Π»ΠΈΠ΄Π°Ρ€Π°, Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСскиС Π΄Π°Π»ΡŒΠ½ΠΎΠΌΠ΅Ρ€Ρ‹ для ΡƒΠ΄Π΅ΡˆΠ΅Π²Π»Π΅Π½ΠΈΡ систСмы. Нами Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π΅ Arduino Nano ΠΈ Π΄Π°Π»ΡŒΠ½Π΅Π΄ΠΈΡΡ‚Π°Π½Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π° VL53L1X. ИздСлиС совмСстимо с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ Π½Π°ΠΌΠΈ ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ. + +Π”Π°Π»Π΅Π΅ Π±Ρ‹Π»ΠΎ написано ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π‘Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, установлСнного Π½Π° Arduino Nano Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ показания с Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Π²ΠΈΠ΄Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ прСдставлСны ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с Π»ΠΈΠ΄Π°Ρ€Π°. И послС этого произвСсти Ρ‚Π΅ ΠΆΠ΅ дСйствия, Ρ‡Ρ‚ΠΎ ΠΈ с Π»ΠΈΠ΄Π°Ρ€ΠΎΠΌ. + +### ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ подсистСма Β«ΠœΠ°ΡΡ‚Π΅Ρ€ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ настройки Π‘ΠŸΠ›ΠΒ» + +Нами Π±Ρ‹Π»Π° Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ подсистСмы, которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π‘ΠŸΠ›Π, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π΅Π±-интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Β«ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Ρ‚Β» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ‡Π΅Ρ€Π΅Π· вСсь процСсс настройки. Π’Π°ΠΊΠΆΠ΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ Π²Π΅Π±-интСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ встроСн ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния Π‘ΠŸΠ›Π ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ настроСк. + +Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π°ΠΌΠΈ Π±Ρ‹Π» сдСлан каркас Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ интСрфСйса. + +Π’Π°ΠΊΠΆΠ΅ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ интСрфСйс ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² Π‘ΠŸΠ›Π со встроСнной Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠ΅ΠΉ для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ. Π Π°Π±ΠΎΡ‚Ρƒ интСрфСйса ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ. + + + +### Аппаратная ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ АПК + +Π’Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ стояла Π·Π°Π΄Π°Ρ‡Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ корпус Π‘ΠŸΠ›Π, с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ быстрой установки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ оборудования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ² ΠΊ ΠΏΠΎΠ»Π΅Ρ‚Ρƒ ΠΈ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ нСобходимости Π΅Π³ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Π° конструкторская докумСнтация издСлия, Π° само ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π°ΠΏΡ€ΠΎΠ±Π°Ρ†ΠΈΡŽ. + +## ИспользованиС нашСго ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° + +Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° доступСн ΠΏΠΎ ссылкС https://github.com/easy-to-fly/easy-to-fly. + +### Π‘Π±ΠΎΡ€ΠΊΠ° крСплСния для Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² + +Π’Π°ΠΌ понадобится: + +- **4x** стойки M3x26 +- **1x** [ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ для Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ](https://github.com/easy-to-fly/easy-to-fly/blob/master/hard/3d_models/case.stl) +- **1x** [ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для крСплСния](https://github.com/easy-to-fly/easy-to-fly/blob/master/hard/dwgs/sensors_mount.dwg) + +Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ всё ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° [ΠΌΠΎΠ΄Π΅Π»ΠΈ](https://a360.co/2ZfKyW8). + +### Π‘Π±ΠΎΡ€ΠΊΠ° систСмы ΠΈΠ· 4-Ρ… Π»Π°Π·Π΅Ρ€Π½Ρ‹Ρ… Π΄Π°Π»ΡŒΠ½ΠΎΠΌΠ΅Ρ€ΠΎΠ² + +![ΠžΠ±Ρ‰ΠΈΠΉ Π²ΠΈΠ΄](../assets/easytofly/sensors.jpg) + +Π’Π°ΠΌ понадобится: + +- **4x** Π΄Π°Π»ΡŒΠ½Π΅Π΄ΠΈΡΡ‚Π°Π½Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π° VL53L1X +- **1x** Arduino Nano + +1. Π Π°Π·Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ»Π°Ρ‚Ρ‹ согласно Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠ΅ ΠΈΠ· [Ρ„Π°ΠΉΠ»ΠΎΠ²](https://github.com/easy-to-fly/easy-to-fly/raw/master/hard/pcb/sensors_4.zip) (Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ http://gerbv.geda-project.org/ для открытия) +2. ΠŸΡ€ΠΈΠΏΠ°ΡΡ‚ΡŒ ΠΏΠΈΠ½Ρ‹ для установки Arduino Nano ΠΈ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· ΠΏΠ»Π°Ρ‚. +3. Π Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ‹ ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚ΠΊΠ΅. + + Π Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠ° + +4. Π‘ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ· ΠΏΠ»Π°Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄. +5. Π‘ΠΏΠ°ΡΡ‚ΡŒ всС ΠΏΠ»Π°Ρ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΌ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ. +6. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² ΠΏΠΈΠ½Ρ‹ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Arduino nano. +7. Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² отсутствии ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ замыкания. + +### Установка ПО Π½Π° Raspberry Pi + +Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ваш ΠΊΠΎΠΏΡ‚Π΅Ρ€ ΠΊ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ - [пСрСвСсти Π΅Π³ΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°](network.md#ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅-Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°-Π²-Ρ€Π΅ΠΆΠΈΠΌ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°) ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Wi-Fi, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡƒ доступ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. + +Π‘ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² `catkin_ws` ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π½Π΅Π³ΠΎ: + +```bash +cd ~/catkin_ws/src +git clone https://github.com/easy-to-fly/easy-to-fly +cd easy-to-fly +``` + +УстановитС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости + +```bash +./install/ros_deps.sh +./install/arduino_deps.sh # Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСму ΠΈΠ· 4-Ρ… Π»Π°Π·Π΅Ρ€Π½Ρ‹Ρ… Π΄Π°Π»ΡŒΠ½ΠΎΠΌΠ΅Ρ€ΠΎΠ² +``` + +### Запуск прСдотвращСния столкновСний + +Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»ΠΈΠ΄Π°Ρ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `CP_DIST` PX4. РСкомСндуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ 0.5 ΠΌ. + +Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния ΠΎΡ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΎ расстоянии Π²ΠΎΠΊΡ€ΡƒΠ³ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΏ. [https://mavlink.io/en/messages/common.html#OBSTACLE_DISTANCE](https://mavlink.io/en/messages/common.html#OBSTACLE_DISTANCE)). + +Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°Π΄Π°Ρ‡Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ сообщСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€. + +Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ MAVROS Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ для этих Ρ†Π΅Π»Π΅ΠΉ: [https://github.com/mavlink/mavros/tree/master/mavros_extras#obstacle_distance](https://github.com/mavlink/mavros/tree/master/mavros_extras#obstacle_distance). + +Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, достаточно Π΅Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² `` Π² Ρ„Π°ΠΉΠ»Π΅ `mavros.launch`. + +Π”Π°Π»Π΅Π΅, запускаСм ΠΎΠ΄ΠΈΠ½ ΠΈΠ· `.launch` Ρ„Π°ΠΉΠ»ΠΎΠ². + +## Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ + +Π’ Ρ…ΠΎΠ΄Π΅ выполнСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² области ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Β«Π›Π΅Ρ‚Π°ΡŽΡ‰Π΅ΠΉ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠΈΒ», описаны ΠΈΡ… достоинства ΠΈ нСдостатки. Π’Ρ‹Π±Ρ€Π°Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для старта ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. + +Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΈ протСстирована основная Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° – программная подсистСма Β«ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ столкновСний». Π’Π΅Π±-интСрфСйс, согласно ΠΏΠ»Π°Π½Ρƒ, находится Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΌΠ°Ρ€Ρ‚Π° 2021 Π³ΠΎΠ΄Π°. + +Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ сборочный Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ Π² систСмС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования FusionΒ 360. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠΈ позволят ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π‘ΠŸΠ›Π для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π° основС конструкторской Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π‘ΠŸΠ›Π. + +Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° Π³ΠΎΠ΄Π° планируСтся ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ Π½Π° Ρ€Ρ‹Π½ΠΎΠΊ. НСкоторыС ΠΈΠ· основных Π·Π°Π΄Π°Ρ‡ Π½Π° 2021-2023 Π³ΠΎΠ΄: Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ исслСдованиС Ρ€Ρ‹Π½ΠΊΠ° для выдСлСния основных Π·Π°Π΄Π°Ρ‡ дальнСйшСй Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ систСмы, апробация систСмы Π² Ρ†Π΅Π»ΠΎΠΌ Π² ΠšΠ²Π°Π½Ρ‚ΠΎΡ€ΠΈΡƒΠΌΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСмы Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ Π‘ΠŸΠ›Π ΠΏΠΎ ΠΊΠ°Ρ€Ρ‚Π΅ с использованиСм оборудования, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ установлСно Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ. diff --git a/docs/ru/fpv_clover_4_2.md b/docs/ru/fpv_clover_4_2.md new file mode 100644 index 00000000..365f4a11 --- /dev/null +++ b/docs/ru/fpv_clover_4_2.md @@ -0,0 +1,94 @@ +# Установка ΠΈ настройка FPV-оборудования + +## ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΈ установка ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° + +1. УстановитС ΠΌΠ°Π»ΡƒΡŽ ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ½ΡƒΡŽ Π΄Π΅ΠΊΡƒ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ€Π°ΠΌΡƒ. + +
    + + +
    + +2. УстановитС скобу для крСплСния ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ отвСрстия. + +
    + + +
    + +3. ΠžΠ±Ρ€Π΅ΠΆΡŒΡ‚Π΅ Ρ‚Ρ€Π΅Ρ…ΠΏΠΈΠ½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π½Ρ‹ΠΉ кабСль ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹. + +
    + + +
    + +4. Π—Π°Π»ΡƒΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° + + + +5. К силовым ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°ΠΌ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ припаяйтС Ρ€Π°Π·ΡŠΠ΅ΠΌ JST-ΠΏΠ°ΠΏΠ°. + +
    + + +
    + + > **Hint** ΠŸΠ΅Ρ€Π΅Π΄ спаиваниСм ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΎΠ² Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π½Π°Π΄Π΅Ρ‚ΡŒ тСрмоусадку Π½Π° ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°. + +6. К ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΡƒ припаяйтС Ρ€Π°Π·ΡŠΠ΅ΠΌ JST-ΠΏΠ°ΠΏΠ°. + +
    + + +
    + +7. К ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΡƒ припаяйтС ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ кабСль ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹. + +
    + + +
    + +8. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π°Π½Ρ‚Π΅Π½Π½Ρƒ ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΡƒ. + + + + > **Caution** Если Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊ Π±Π΅Π· Π°Π½Ρ‚Π΅Π½Π½Ρ‹ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ напряТСниС Π΅ΡΡ‚ΡŒ большая Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ сгорит. + +9. На ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ½ΡƒΡŽ Π΄Π΅ΠΊΡƒ установитС ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ, Π·Π°ΠΊΡ€Π΅ΠΏΠΈΠ² Π΅Π³ΠΎ стяТками. + + + +10. УстановитС ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ½ΡƒΡŽ Π΄Π΅ΠΊΡƒ вмСстС с ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠΌ снизу ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. + + + +11. УстановитС ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ Π² скобу ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 4-Ρ… ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π½Ρ‹Ρ… Π±ΠΎΠ»Ρ‚ΠΎΠ². ΠšΠ°ΠΌΠ΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ ΡƒΠ³Π»ΠΎΠΌ 15Β°-20Β° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ плоскости ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. + +
    + + +
    + +
    + + +
    + +12. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ кабСль ΠΊ ΠΊΠ°ΠΌΠ΅Ρ€Π΅. + + + +13. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ кабСль питания ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΊ силовому JST, припаянному ΠΊ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ°ΠΌ *BAT+* ΠΈ *GND* Π½Π° ΠΏΠ»Π°Ρ‚Π΅ распрСдСлСния питания. + +14. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ кабСль питания ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° ΠΊ JST Π½Π° 5Π’. + + + +## Настройка ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ FPV-ΠΎΡ‡ΠΊΠΎΠ² + +1. УстановитС Π½Π° ΠΎΡ‡ΠΊΠΈ Π΄Π²Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π°Π½Ρ‚Π΅Π½Π½Ρ‹. +2. Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΎΡ‡ΠΊΠΈ удСрТивая ΠΊΠ½ΠΎΠΏΠΊΡƒ питания 3–4 сСкунды. +3. Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠΏΡ‚Π΅Ρ€ ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ свСтодиод ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° свСтится синим Ρ†Π²Π΅Ρ‚ΠΎΠΌ. +4. НаТмитС Π½Π° ΠΎΡ‡ΠΊΠ°Ρ… ΠΊΠ½ΠΎΠΏΠΊΡƒ *Auto Search*, для автоматичСского поиска доступного Ρ€Π°Π΄ΠΈΠΎΠΊΠ°Π½Π°Π»Π°. diff --git a/docs/ru/hardaton_quidditch.md b/docs/ru/hardaton_quidditch.md new file mode 100644 index 00000000..159bdfa5 --- /dev/null +++ b/docs/ru/hardaton_quidditch.md @@ -0,0 +1,103 @@ +# Π₯Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½ ΠšΠ²ΠΈΠ΄Π΄ΠΈΡ‡ + +[CopterHack-2021](copterhack2021.md), ΠΊΠΎΠΌΠ°Π½Π΄Π° **Π₯Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½**. + +НазваниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: Π˜Π½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сорСвнованиС - Ρ…Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½ Β«ΠšΠ²ΠΈΠ΄Π΄ΠΈΡ‡ Π½Π° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°Ρ…Β». + +![НазваниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°](../assets/Hardaton_Quidditch/Hardaton.jpg) + +## Команда ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + +![Команда ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°](../assets/Hardaton_Quidditch/team.jpg) + +* Π‘ΠΎΠΊΡ‚Π° Оксана АлСксандровна - Π»ΠΈΠ΄Π΅Ρ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π¦Π΅Π½Ρ‚Ρ€Π° ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ΄Π°Ρ€Ρ‘Π½Π½Ρ‹ΠΌΠΈ Π΄Π΅Ρ‚ΡŒΠΌΠΈ МАОУ Β«Π›ΠΈΡ†Π΅ΠΉ β„– 176Β» Π³.Новосибирска. +* Π¨ΡƒΠ½Π°Π΅Π² Никита АлСксандрович – ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, ΠΊΡƒΡ€Π°Ρ‚ΠΎΡ€ IT-направлСния. +* АлСков Иван ΠΠ½Π°Ρ‚ΠΎΠ»ΡŒΠ΅Π²ΠΈΡ‡ - экспСрт ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΡŒ спСцкурсов МАОУ Β«Π›ΠΈΡ†Π΅ΠΉ β„– 176Β». +* Π–Π΄Π°Π½ΠΎΠ² ОлСг Π˜Π³ΠΎΡ€Π΅Π²ΠΈΡ‡ - экспСрт ΠΏΠΎ 3D-ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΡŒ спСцкурсов МАОУ Β«Π›ΠΈΡ†Π΅ΠΉ β„– 176Β». + +## ЦСль ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + +Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… hard-ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΉ школьников 7-11 классов ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ «БСспилотныС Π°Π²ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы» с использованиСм ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Β«COEX ΠšΠ»Π΅Π²Π΅Ρ€ 3, 4Β». + +## Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + +1. ΠŸΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ, наставников, школьников, ΠΏΠ°Ρ€Ρ‚Π½Ρ‘Ρ€ΠΎΠ² Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ «БСспилотныС Π°Π²ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы», ΠΊ занятиям ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹ΠΌ творчСством с использованиСм ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Β«COEX ΠšΠ»Π΅Π²Π΅Ρ€ 3,4Β». +2. Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ hard-ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΉ школьников (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΈΠ»ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π² Ρ‚ΠΎΠΌ числС Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎ). +3. Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ soft-ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΉ (ΡƒΠΌΠ΅Π½ΠΈΠ΅ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ€ΠΎΠ»ΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, нСстандартно ΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ, ΠΏΡ€Π΅Π·Π΅Π½Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π΄Ρ€.). +4. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹ΠΌ сорСвнованиям, конкурсам ΠΈ Π½Π°ΡƒΡ‡Π½ΠΎ-практичСским конфСрСнциям ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎ-тСхнологичСской направлСнности (Олимпиада НВИ, WorldSkills ΠΈ Π΄Ρ€.). +5. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ условий для Ρ€Π°Π½Π½Π΅Π³ΠΎ выявлСния ΠΈ сопровоТдСния Ρ‚Π°Π»Π°Π½Ρ‚ΠΎΠ² НВИ. +6. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ срСды, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΡŽ Π² сообщСства тСхнологичСских энтузиастов, Π·Π°Ρ€ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΈ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ ΠΊΡ€ΡƒΠΆΠΊΠΎΠ² НВИ ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ «БСспилотныС Π°Π²ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы». + +## ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + +Π’ России с Π·Π°Ρ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΠ°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ тСхнологичСской ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρ‹ растёт число школьников, наставников, энтузиастов, Π²ΠΎΠ²Π»Π΅Ρ‡Ρ‘Π½Π½Ρ‹Ρ… Π² тСхничСскоС творчСство. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ школьникам доступны сорСвнования, Ρ‡Π΅ΠΌΠΏΠΈΠΎΠ½Π°Ρ‚Ρ‹, конкурсы ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎ-тСхнологичСской направлСнности. ΠΠ°Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΎΠ±ΠΎΡ€ΠΎΡ‚Ρ‹ ΠΏΠΎ количСству участников Олимпиада НВИ, Ρ‡Π΅ΠΌΠΏΠΈΠΎΠ½Π°Ρ‚ WorldSkills ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ ОНВИ Β«Π›Π΅Ρ‚Π°ΡŽΡ‰Π°Ρ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ°Β», компСтСнция WorldSkills «Эксплуатация бСспилотных Π°Π²ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм» основаны Π½Π° умСниях ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ сборку, Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ²ΠΊΡƒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠΌ с использованиСм ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Β«COEX ΠšΠ»Π΅Π²Π΅Ρ€ 3,4Β». Но сСгодня ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ сорСвнований, ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… школьников ΠΊ ΡƒΡ‡Π°ΡΡ‚ΠΈΡŽ Π² Ρ‚Π°ΠΊΠΈΡ… слоТных ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π°Ρ… ΠΈ конкурсах, Π²ΠΎΠ²Π»Π΅ΠΊΠ°ΡŽΡ‰ΠΈΡ… Π² тСхничСскоС творчСство с использованиСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠ². ΠœΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ сорСвнования - Ρ…Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½ Β«ΠšΠ²ΠΈΠ΄Π΄ΠΈΡ‡ Π½Π° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°Ρ…Β», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ школьник с Ρ€Π°Π·Π½Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ (Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‰ΠΈΠΉ, ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ), работая Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, смоТСт ΠΏΡ€ΠΎΡΠ²ΠΈΡ‚ΡŒ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ΅ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅, ΡƒΠΌΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠΌ. Π’ΠΎΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ игровая модСль, основанная Π½Π° извСстном Ρ„ΠΈΠ»ΡŒΠΌΠ΅ Β«Π“Π°Ρ€Ρ€ΠΈ ΠŸΠΎΡ‚Ρ‚Π΅Ρ€Β» ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ провСдСния (ΠΎΡ‡Π½Ρ‹ΠΉ ΠΈ дистанционный). + +## ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + +Π₯Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½ Β«ΠšΠ²ΠΈΠ΄Π΄ΠΈΡ‡ Π½Π° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°Ρ…Β» прСдставляСт собой ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сорСвнованиС ΠΏΠΎΠ΄ руководством наставника (3 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Ρ€ΠΎΠ»ΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ компСтСнциям - модСлист, программист, ΠΏΠΈΠ»ΠΎΡ‚), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ максимально ΠΏΡ€ΠΎΡΠ²ΠΈΡ‚ΡŒ свои умСния Π² испытаниях (ΠΊΠ°ΠΊ личностных, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ…). + +Π‘ΠΎΡ€Π΅Π²Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ с использованиСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ оборудования. + +Для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: конструктор ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π° Β«COEX ΠšΠ»Π΅Π²Π΅Ρ€ 3, 4Β» (Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ установлСния Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹), рСсурсный Π½Π°Π±ΠΎΡ€ для Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π° (ΠΏΠΎ нСобходимости), ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ для изготовлСния Π·Π°Ρ…Π²Π°Ρ‚Π° (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ провСдСния), инструмСнты, запасныС аккумуляторы Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 3 ΡˆΡ‚ΡƒΠΊ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ подзарядки, Π½ΠΎΡƒΡ‚Π±ΡƒΠΊ, Ρ„Π»Π΅ΡˆΠΊΠ° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. + +Для ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ провСдСния: ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ для изготовлСния Π·Π°Ρ…Π²Π°Ρ‚Π° - ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ (3D-ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€, станок с ЧПУ, ручная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ‚Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΈ Π΄Ρ€.). ΠŸΠ»ΠΎΡ‰Π°Π΄ΠΊΠ° провСдСния Ρ„ΠΈΠ½Π°Π»Π° - спортивный Π·Π°Π» (Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅), распрСдСлённый Π½Π° Π·ΠΎΠ½Ρ‹ (входная Π·ΠΎΠ½Π°, Π·ΠΎΠ½Π° модСлирования, Π·ΠΎΠ½Π° программирования, полётная Π·ΠΎΠ½Π°, ΠΊΠΎΠ²ΠΎΡ€ΠΊΠΈΠ½Π³-Π·ΠΎΠ½Π° с панСлью для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΉ ΠΈ просмотра Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² ΠΎ Π“Π°Ρ€Ρ€ΠΈ ΠŸΠΎΡ‚Ρ‚Π΅Ρ€Π΅, защитная сСтка, Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ°, 6 ΠΊΠΎΠ»Π΅Ρ† (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π΅Ρ† 70-90), 10 подставок для мячСй, 2 ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°-сничи, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ, рСмонтная Π·ΠΎΠ½Π° (паяльники, ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°, запасныС части), ΠΌΠ΅Ρ‚ΠΊΠΈ, Raspberry Pi, FPV, ΠΊΠ°ΠΌΠ΅Ρ€Π°, 10 тСннисных мячСй, Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠΈ, ΡƒΠ΄Π»ΠΈΠ½ΠΈΡ‚Π΅Π»ΠΈ, ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. + +ΠŸΡ€ΠΈΠΌΠ΅Ρ€ оформлСния ΠΈ зонирования ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ: + +![ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1](../assets/Hardaton_Quidditch/1.jpg) +![ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 2](../assets/Hardaton_Quidditch/2.jpg) +![ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 3](../assets/Hardaton_Quidditch/3.jpg) +![ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 4](../assets/Hardaton_Quidditch/4.jpg) + +Π”ΠΈΠ·Π°ΠΉΠ½ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΉ, названия ΠΈ содСрТаниС испытаний схоТи со сцСнами ΠΈΠ· Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΠΌΠ° Β«Π“Π°Ρ€Ρ€ΠΈ ΠŸΠΎΡ‚Ρ‚Π΅Ρ€Β». Задания ΠΏΠΎ компСтСнциям ΠΈΠΌΠ΅ΡŽΡ‚ Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΡƒΡ€ΠΎΠ²Π½ΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ участников (Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‰ΠΈΠΉ, ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ). ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ испытаниСм являСтся ΠΊΠ²ΠΈΠ΄Π΄ΠΈΡ‡ Π½Π° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°Ρ…. ΠŸΠΎΠ±Π΅Π΄Ρƒ ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π½Π°Π±Ρ€Π°Π²ΡˆΠ°Ρ большСС количСство ΠΎΡ‡ΠΊΠΎΠ² ΠΏΠΎ всСм испытаниям. К судСйству ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ экспСрты Π² компСтСнциях, Π½Π΅ заинтСрСсованныС наставники ΠΊΠΎΠΌΠ°Π½Π΄, прСдставитСли ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ-ΠΏΠ°Ρ€Ρ‚Π½Ρ‘Ρ€ΠΎΠ² ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ сСктора экономики, прСдставитСли ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… Π’Π£Π—ΠΎΠ² ΠΈ Π΄Ρ€. ВсС участники, Π½Π΅ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ Π² Ρ„ΠΈΠ½Π°Π» Ρ…Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½Π°, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ сСртификаты участников; участники Ρ„ΠΈΠ½Π°Π»Π°, Π½Π΅ занявшиС мСста, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π΄ΠΈΠΏΠ»ΠΎΠΌ участника Ρ„ΠΈΠ½Π°Π»Π°; ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, занявшиС мСста Π² ΠΊΠ²ΠΈΠ΄Π΄ΠΈΡ‡Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π΄ΠΈΠΏΠ»ΠΎΠΌΡ‹ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ·Ρ‘Ρ€ΠΎΠ² ΠΈ Ρ†Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Π°Ρ€ΠΊΠΈ. + +## Π­Ρ‚Π°ΠΏΡ‹ сорСвнования + +1. ΠžΡ‚Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹ΠΉ этап (ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ идСю, ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‚ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρƒ Π½Π° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€). +2. Основной Π»ΠΈΡ‡Π½Ρ‹ΠΉ этап Ρ…Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½Π° для ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ³ΠΎ уровня ΠΏΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ ΠΏΠΈΠ»ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. +3. Основной ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ этап (ΠΊΠ²ΠΈΠ΄Π΄ΠΈΡ‡ Π½Π° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°Ρ…). +4. Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап (ΠΏΠΎΠ΄Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΡ‚ΠΎΠ³ΠΎΠ², Π½Π°Π³Ρ€Π°ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΉ). + +## Задания Ρ…Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½Π° + +Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Ρ€Π°Π·Π½ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ задания для ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΈ дистанционного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° провСдСния мСроприятия. + +* [Бсылка Π½Π° задания ΠΎΡ‚Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎΠ³ΠΎ этапа](https://disk.yandex.ru/d/6obCbcUGKx74WQ?w=1). +* [Бсылка Π½Π° задания ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ](https://disk.yandex.ru/d/AzBWLAr0_AFDmg?w=1). +* [Бсылка Π½Π° задания ΠΏΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ](https://disk.yandex.ru/d/teqzvDy_3QQHJw?w=1). +* [Бсылка Π½Π° задания ΠΊΠ²ΠΈΠ΄Π΄ΠΈΡ‡Π° Π½Π° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°Ρ…](https://disk.yandex.ru/d/hq--WyXn0QRcIQ?w=1). +* [Для оцСнивания выполнСния Π·Π°Π΄Π°Π½ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ](https://disk.yandex.ru/d/5BUMq2tf1Wz6wA?w=1). + +## Апробация ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + +Π˜Π½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сорСвнованиС ΠΏΠΎ бСспилотным Π°Π²ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ систСмам Β«ΠšΠ²ΠΈΠ΄Π΄ΠΈΡ‡ Π½Π° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°Ρ…Β» Π±Ρ‹Π»ΠΎ Π°ΠΏΡ€ΠΎΠ±ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½Π° ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ΅ МАОУ Β«Π›ΠΈΡ†Π΅ΠΉ β„– 176Β» Π³ΠΎΡ€ΠΎΠ΄Π° Новосибирска: + +1. Дистанционный ΠΎΡ‚Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹ΠΉ этап со 2 ноября ΠΏΠΎ 20 ноября 2020 Π³ΠΎΠ΄Π°. +2. ΠžΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап - ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ мСроприятия ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ установочноС совСщаниС с наставниками ΠΊΠΎΠΌΠ°Π½Π΄, экспСртами ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ с прСдоставлСниСм оборудования Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΉ элСктроники ΠΈ прототипирования, Π½ΠΎΠ²Ρ‹Ρ… производствСнных Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ со станками с ЧПУ, Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ DronLab. +3. Π€ΠΈΠ½Π°Π» ΠΏΡ€ΠΎΡˆΠ΅Π» с 4 ΠΏΠΎ 6 дСкабря 2020 Π³ΠΎΠ΄Π°. + +Π’ ΠΎΡ‡Π½ΠΎΠΌ мСроприятии приняли участиС 27 ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ· Π³ΠΎΡ€ΠΎΠ΄Π° Новосибирска, 81 участник ΠΈΠ· ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ образования Π΄Π΅Ρ‚Π΅ΠΉ Π³ΠΎΡ€ΠΎΠ΄Π° Новосибирска, 14 наставников, 5 Π²ΠΎΠ»ΠΎΠ½Ρ‚Ρ‘Ρ€ΠΎΠ², 3 экспСрта, 5 ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΎΠ² экспСрта, 3 ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΡ…Π²Π°Ρ‚ мСроприятия – 111 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ. + +![ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 5](../assets/Hardaton_Quidditch/5.jpg) +![ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 6](../assets/Hardaton_Quidditch/6.jpg) +![ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 7](../assets/Hardaton_Quidditch/7.jpg) +![ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 8](../assets/Hardaton_Quidditch/8.jpg) + +ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ участниками Ρ…Π°Ρ€Π΄Π°Ρ‚ΠΎΠ½Π° [ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ](https://disk.yandex.ru/d/2TbB8SSM4a6jsw?w=1) ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π½Π° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€: + +[Π’ΠΈΠ΄Π΅ΠΎ](https://disk.yandex.ru/d/6kNI1smfWhWYXA?w=1) ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈ с ΠΏΠΎΠ»Ρ‘Ρ‚Π½ΠΎΠΉ Π·ΠΎΠ½Ρ‹. + + + +## ΠžΡΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ мСроприятия Π² БМИ + +* https://nsknews.info/materials/kviddich-na-kvadrokopterakh-ustroili-v-novosibirskoy-shkole/ (городской новостной сайт). +* http://www.nios.ru/news/24302 (сайт Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Π° мэрии Π³ΠΎΡ€ΠΎΠ΄Π° Новосибирска). +* http://xn--176-qddohl3g.xn--p1ai/index.php/dostizheniya-litseistov/1627-kviddich-na-kvadrokopterakh (сайт МАОУ β€œΠ›ΠΈΡ†Π΅ΠΉ β„–176”) +* https://www.facebook.com/633602557253181/posts/739165210030248/. + +## ΠŸΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Ρ‹ развития ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + +* ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ мСроприятий ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ³ΠΎ уровня с Ρ†Π΅Π»ΡŒΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ школьников ΠΊ ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π°ΠΌ, Ρ‡Π΅ΠΌΠΏΠΈΠΎΠ½Π°Ρ‚Π°ΠΌ ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹ΠΌ конкурсам ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ «БСспилотныС Π°Π²ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы» с использованиСм ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Β«COEX ΠšΠ»Π΅Π²Π΅Ρ€ 3,4Β» ΠΊΠ°ΠΊ Π² ΠΎΡ‡Π½ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ Π² дистанционном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. +* ΠŸΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Ρ‚Π½Ρ‘Ρ€ΠΎΠ², экспСртного сообщСства ΠΊ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ совмСстному ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡŽ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ сорСвнования Β«ΠšΠ²ΠΈΠ΄Π΄ΠΈΡ‡ Π½Π° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°Ρ…Β» Π½Π° ВсСроссийском ΡƒΡ€ΠΎΠ²Π½Π΅. +* Врансляция ΠΎΠΏΡ‹Ρ‚Π° провСдСния мСроприятия Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… уровнях с Ρ†Π΅Π»ΡŒΡŽ вовлСчСния школьников Π² занятия ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹ΠΌ творчСством, тСхнологичСскиС ΠΊΡ€ΡƒΠΆΠΊΠΈ, Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ hard ΠΈ soft-ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΉ. diff --git a/docs/ru/magnetic_grip.md b/docs/ru/magnetic_grip.md new file mode 100644 index 00000000..5582b45e --- /dev/null +++ b/docs/ru/magnetic_grip.md @@ -0,0 +1,65 @@ +# Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ настройка элСктромагнитного Π·Π°Ρ…Π²Π°Ρ‚Π° + +ΠœΠ°Π³Π½ΠΈΡ‚Π½Ρ‹ΠΉ Π·Π°Ρ…Π²Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами Π² соотвСтствии с элСктричСской схСмой. + + + +НиТС прСдставлСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сборки схСмы элСктромагнитного Π·Π°Ρ…Π²Π°Ρ‚Π° Π½Π° ΠΌΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅. + +> **Info** РСкомСндуСтся ΠΏΡ€ΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами с ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ стороны ΠΏΠ»Π°Ρ‚Ρ‹ (Π½Π° Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… изобраТСниях ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΊΠ° сдСлана ΠΏΠΎΠ²Π΅Ρ€Ρ… схСмы, для наглядности). + +1. На ΠΏΠ°Π΅Ρ‡Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅ размСститС Π΄ΠΈΠΎΠ΄ Π¨ΠΎΡ‚Ρ‚ΠΊΠΈ, рСзистор Π½Π° 10 кОм ΠΈ транзистор. + + + +2. ΠŸΡ€ΠΈΠΏΠ°ΡΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны ΠΏΠ»Π°Ρ‚Ρ‹ ΠΈ откуситС ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π½ΠΎΠΆΠΊΠΈ элСмСнтов. +3. Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ рСзистора ΠΈ Π΄Π²ΡƒΡ… ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… Π½ΠΎΠΆΠ΅ΠΊ транзистора. + + + +4. Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ Π½ΠΎΠΆΠΊΡƒ транзистора ΠΈ Π½ΠΎΠΆΠΊΡƒ Π΄ΠΈΠΎΠ΄Π° Π¨ΠΎΡ‚Ρ‚ΠΊΠΈ (ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡƒΡŽ сСрой ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΉ полоскС). + + + +5. ΠžΠ±Ρ€Π΅ΠΆΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠ³ΠΎ Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΈ припаяйтС Π΅Π³ΠΎ ΠΊ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌ Π΄ΠΈΠΎΠ΄Π° Π¨ΠΎΡ‚Ρ‚ΠΊΠΈ. + + + +6. ΠŸΡ€ΠΈΠΏΠ°ΡΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° *Dupont*-ΠΏΠ°ΠΏΠ° ΠΊ Π½ΠΎΠΆΠΊΠ΅ транзистора ΠΈ Π΄ΠΈΠΎΠ΄Π° (красный, Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ *Dupont*-ΠΌΠ°ΠΌΠ° Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡƒΡŽ Π½ΠΎΠΆΠΊΡƒ транзистора (Π±Π΅Π»Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄). + + + +## ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ элСктромагнитного Π·Π°Ρ…Π²Π°Ρ‚Π° + +Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π·Π°Ρ…Π²Π°Ρ‚Π°, ΠΏΠΎΠ΄Π°ΠΉΡ‚Π΅ Π½Π° ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ напряТСниС 5Π’. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ *Dupont* ΠΏΠ°ΠΏΠ°-ΠΏΠ°ΠΏΠ°. + + + +ПослС ΠΏΠΎΠ΄Π°Ρ‡ΠΈ напряТСния ΠΌΠ°Π³Π½ΠΈΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ. + +## ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Raspberry Pi + +ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΌΠ°Π³Π½ΠΈΡ‚Π½Ρ‹ΠΉ Π·Π°Ρ…Π²Π°Ρ‚ ΠΊ ΠΏΠ»Π°Ρ‚Π΅ Raspberry Pi для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ использования + + + +ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ°Π³Π½ΠΈΡ‚Π½Ρ‹ΠΉ Π·Π°Ρ…Π²Π°Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ [Ρ‚ΡƒΡ‚](gpio.md#ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅-элСктромагнита). + +## ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Arduino + +ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π·Π°Ρ…Π²Π°Ρ‚ ΠΏΠ»Π°Ρ‚Π΅ Arduino Nano, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ€ΡƒΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. + +Π£Π΄ΠΎΠ±Π½ΠΎ Π΅Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ°Π΅Ρ‡Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅ -- Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅Π΅ Π² подходящиС отвСрстия ΠΈ припаяйтС с ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ стороны ΠΊ ΠΏΠ»Π°Ρ‚Π΅. + + + +Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ схСмы ΠΊ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΡ€Ρ‚Ρƒ ΠΈ припаяйтС ΠΏΡ€ΠΎΠ²ΠΎΠ΄ *Dupont*-ΠΌΠ°ΠΌΠ° ΠΊ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ ΡΠΈΠ³Π½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΡ€Ρ‚Ρƒ Π½Π° ΠΏΠ»Π°Ρ‚Π΅. + + + +## Установка элСктромагнитного Π·Π°Ρ…Π²Π°Ρ‚Π° + +1. Π’ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ отвСрстиС Π½Π° Π΄Π΅ΠΊΠ΅ Π·Π°Ρ…Π²Π°Ρ‚Π° установитС элСктромагнит. +2. БтяТкой притянитС ΡΠΎΠ±Ρ€Π°Π½Π½ΡƒΡŽ схСму ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ сторонС Π΄Π΅ΠΊΠΈ. +3. Π‘ΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Arduino *D11* Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² *AUX* Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅. +4. Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ силовой Π²Ρ‹Π²ΠΎΠ΄ элСктромагнитного Π·Π°Ρ…Π²Π°Ρ‚Π° Π² JST 5Π’. diff --git a/docs/ru/mechanical_grip.md b/docs/ru/mechanical_grip.md new file mode 100644 index 00000000..90a7b74c --- /dev/null +++ b/docs/ru/mechanical_grip.md @@ -0,0 +1,69 @@ +# Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ настройка мСханичСского Π·Π°Ρ…Π²Π°Ρ‚Π° + +1. БовмСститС Π³Π»Π°Π²Π½Ρ‹Π΅ пластины Π·Π°Ρ…Π²Π°Ρ‚Π°. + + + +2. УстановитС сСрвопривод Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Π· Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ пластин, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ осСвая ΡˆΠ΅ΡΡ‚Π΅Ρ€Π½Ρ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ посСрСдинС Π·Π°Ρ…Π²Π°Ρ‚Π°. + + + +3. ΠŸΡ€ΠΈΠΆΠΌΠΈΡ‚Π΅ пластины Π·Π°Ρ…Π²Π°Ρ‚Π° нСбольшими проставками. + +
    + + +
    + +4. УстановитС Π΄Π΅ΠΊΡƒ Π·Π°Ρ…Π²Π°Ρ‚Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΡ€Π΅ΠΏΠ΅ΠΆΠ½Ρ‹Π΅ отвСрстия Π² Π·Π°Ρ…Π²Π°Ρ‚Π΅ совпадали с отвСрстиями для саморСзов Π² пластинС. + + + +5. Π—Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π·Π°Ρ…Π²Π°Ρ‚Π° саморСзами. + + + +6. ΠŸΠΎΠ²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π½ΡŽ сСрвопривода Π² ΠΊΡ€Π°ΠΉΠ½Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. + + + +7. УстановитС Π½Π° ΡˆΠ΅ΡΡ‚Π΅Ρ€Π½ΡŽ крСстообразноС ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΠ½Ρ‚Π°, ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΊ сСрвоприводу. + + + +8. ΠžΠ±Ρ€Π΅ΠΆΡŒΡ‚Π΅ крСстообразноС ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅. + +
    + + +
    + +9. ЗавяТитС ΡΠ΅Ρ€Π²ΠΎΠΏΡ€ΠΈΠ²ΠΎΠ΄Π½ΡƒΡŽ Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ 2-3 см запаса. + +
    + + +
    + +10. ΠŸΡ€ΠΎΠ΄Π΅Π½ΡŒΡ‚Π΅ ΡΠ΅Ρ€Π²ΠΎΠΏΡ€ΠΈΠ²ΠΎΠ΄Π½ΡƒΡŽ Π½ΠΈΡ‚ΡŒ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π½Π°Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Π·Ρ‹. + + + +11. Π—Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ клСшни Π·Π°Ρ…Π²Π°Ρ‚Π° малСнькими саморСзами Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΡƒΠ³ΠΎΠ» составлял 25°–40Β°. + + + +12. УстановитС собранный Π·Π°Ρ…Π²Π°Ρ‚ Π½Π° ΠΊΠΎΠΏΡ‚Π΅Ρ€ снизу. + +
    + + +
    + +13. ΠŸΡ€ΠΎΡ‚ΡΠ½ΠΈΡ‚Π΅ кабСль сСрвопривода ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅Π³ΠΎ Π² Π²Ρ‹Ρ…ΠΎΠ΄ *AUX* 1-2 Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅. + + + +14. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌ с ΠΏΡƒΠ»ΡŒΡ‚Π°, Π·Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ *Radio*. +15. Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ *AUX 1/2 Passthrough RC channel* ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π²Π°ΠΌ ΠΊΠ°Π½Π°Π». +16. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ‚ΡƒΠΌΠ±Π»Π΅Ρ€Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π·Π°Ρ…Π²Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ. diff --git a/docs/ru/models.md b/docs/ru/models.md index 23b2e1f0..5eed6d40 100644 --- a/docs/ru/models.md +++ b/docs/ru/models.md @@ -80,13 +80,31 @@ +## ΠšΠ»Π΅Π²Π΅Ρ€ 4.2 WorldSkills + +### Π€Ρ€Π΅Π·Π΅Ρ€ΠΎΠ²ΠΊΠ° + + + + + + + + +
    Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Π”Π΅Ρ‚Π°Π»ΡŒΠ€Π°ΠΉΠ»
    + НоТка большая.
    + Ѐункция: ΠžΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ высоты.
    + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ.
    + ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 2 ΡˆΡ‚. +
    big_leg.dxf
    + ## ΠšΠ»Π΅Π²Π΅Ρ€ 4 ### 3D ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ -* **ΠΠšΠ‘ Ρ…ΠΎΠ»Π΄Π΅Ρ€** – [`battery_holder.stl`](https://github.com/CopterExpress/clover/raw/master/docs/assets/stl/battery_holder.stl) - Ѐункция: Ѐиксация ΠΠšΠ‘ ΠΈ тСстСра напряТСния. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ABS пластик(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 50%. +* **ΠΠšΠ‘ Ρ…ΠΎΠ»Π΄Π΅Ρ€** – [`battery_holder.stl`](https://github.com/CopterExpress/clover/raw/master/docs/assets/stl/battery_holder.stl) + Ѐункция: Ѐиксация ΠΠšΠ‘ ΠΈ тСстСра напряТСния. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ABS пластик(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 50%. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. ## Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ для ΠšΠ»Π΅Π²Π΅Ρ€ 4 @@ -95,16 +113,16 @@ ### ЛазСрная Ρ€Π΅Π·ΠΊΠ° -* **УсилСнная пластина - основа** – [`reinforced_plate_base.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/reinforced_plate_base.dxf) - Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Jetson Nano ΠΈ виброразвязок Π½Π° Ρ€Π°ΠΌΠ΅ ΠšΠ»Π΅Π²Π΅Ρ€ 4. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. +* **УсилСнная пластина - основа** – [`reinforced_plate_base.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/reinforced_plate_base.dxf) + Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Jetson Nano ΠΈ виброразвязок Π½Π° Ρ€Π°ΠΌΠ΅ ΠšΠ»Π΅Π²Π΅Ρ€ 4. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. -* **Π Π΅Π±Ρ€ΠΎ Тёсткости усилСнной пластины** – [`reinforced_plate_rib.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/reinforced_plate_rib.dxf) - Ѐункция: Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Тёсткости сборки. +* **Π Π΅Π±Ρ€ΠΎ Тёсткости усилСнной пластины** – [`reinforced_plate_rib.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/reinforced_plate_rib.dxf) + Ѐункция: Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Тёсткости сборки. ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 2ΡˆΡ‚. * **ΠŸΠ»Π°ΡΡ‚ΠΈΠ½Π° для ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹** – [`reinforced_plate_camera_pad.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/reinforced_plate_camera_pad.dxf) - Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈ использовании усилСнной пластины. + Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈ использовании усилСнной пластины. ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. @@ -112,65 +130,65 @@ ### 3D ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ -* **КСйс для ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹** – [`camera_case.stl`](https://github.com/CopterExpress/clover/raw/master/docs/assets/stl/camera_case.stl) - Ѐункция: КСйс для крСплСния модуля ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: PLA/ABS(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 30%. - ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. - **ΠšΡ€Π΅ΠΏΠ΅ΠΆΠ½Π°Ρ пластина для ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹** – [`camera_mount.stl`](https://github.com/CopterExpress/clover/raw/master/docs/assets/stl/camera_mount.stl). - Ѐункция: ΠšΡ€Π΅ΠΏΠ΅ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, для ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ° кСйса. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: PLA/ABS(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 30%. - ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. - **ΠŸΠ»Π°ΡΡ‚ΠΈΠ½Π° для ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹** – [`camera_plate.stl`](https://github.com/CopterExpress/clover/raw/master/docs/assets/stl/camera_plate.stl). - Ѐункция: ΠŸΠ»Π°ΡΡ‚ΠΈΠ½Π° для Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ модуля ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π² кСйсС. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: PLA/ABS(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 30%. +* **КСйс для ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹** – [`camera_case.stl`](https://github.com/CopterExpress/clover/raw/master/docs/assets/stl/camera_case.stl) + Ѐункция: КСйс для крСплСния модуля ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: PLA/ABS(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 30%. + ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. + **ΠšΡ€Π΅ΠΏΠ΅ΠΆΠ½Π°Ρ пластина для ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹** – [`camera_mount.stl`](https://github.com/CopterExpress/clover/raw/master/docs/assets/stl/camera_mount.stl). + Ѐункция: ΠšΡ€Π΅ΠΏΠ΅ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, для ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ° кСйса. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: PLA/ABS(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 30%. + ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. + **ΠŸΠ»Π°ΡΡ‚ΠΈΠ½Π° для ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹** – [`camera_plate.stl`](https://github.com/CopterExpress/clover/raw/master/docs/assets/stl/camera_plate.stl). + Ѐункция: ΠŸΠ»Π°ΡΡ‚ΠΈΠ½Π° для Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ модуля ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π² кСйсС. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: PLA/ABS(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 30%. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. * **Малая монтаТная Π΄Π΅ΠΊΠ°** – [`mounting_deck_small.stl`](https://github.com/CopterExpress/clover/raw/master/docs/assets/stl/mounting_deck_small.stl). - Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: PLA/ABS(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 60%. + Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: PLA/ABS(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 60%. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. ### ЛазСрная Ρ€Π΅Π·ΠΊΠ° -* **НоТка** (Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌ) – [`big_leg.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/big_leg.dxf) - Ѐункция: ΠžΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт для ситуации установки Π·Π°Ρ…Π²Π°Ρ‚Π°. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. +* **НоТка** (Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌ) – [`big_leg.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/big_leg.dxf) + Ѐункция: ΠžΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт для ситуации установки Π·Π°Ρ…Π²Π°Ρ‚Π°. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 4ΡˆΡ‚. -* **Π”Π΅ΠΊΠ° монтаТная** – [`deck.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/deck.dxf) - Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΠšΠ‘ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. +* **Π”Π΅ΠΊΠ° монтаТная** – [`deck.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/deck.dxf) + Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΠšΠ‘ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. -* **Π”ΡƒΠ³Π°** – [`prop_guard.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/prop_guard.dxf) - Ѐункция: Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ каркаса Π·Π°Ρ‰ΠΈΡ‚Ρ‹. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. +* **Π”ΡƒΠ³Π°** – [`prop_guard.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/prop_guard.dxf) + Ѐункция: Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ каркаса Π·Π°Ρ‰ΠΈΡ‚Ρ‹. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 16ΡˆΡ‚. -* **Π ΠΎΠ³Π°Ρ‚ΠΊΠ° + ΡƒΡˆΠΊΠΎ** – [`prop_guard_mount.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/prop_guard_mount.dxf) - Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€ΠΎΠ² ΠΊ Ρ€Π°ΠΌΠ΅. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. +* **Π ΠΎΠ³Π°Ρ‚ΠΊΠ° + ΡƒΡˆΠΊΠΎ** – [`prop_guard_mount.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/prop_guard_mount.dxf) + Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€ΠΎΠ² ΠΊ Ρ€Π°ΠΌΠ΅. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 4ΡˆΡ‚. -* **ΠŸΡ€ΠΎΡΡ‚Π°Π²ΠΊΠ°** – [`grab_spacer.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/grab_spacer.dxf). - Ѐункция: ΠœΠΎΠ½Ρ‚Π°ΠΆ сСрвопривода ΠΊ Π΄Π΅ΠΊΠ΅ Π·Π°Ρ…Π²Π°Ρ‚Π°. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. +* **ΠŸΡ€ΠΎΡΡ‚Π°Π²ΠΊΠ°** – [`grab_spacer.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/grab_spacer.dxf). + Ѐункция: ΠœΠΎΠ½Ρ‚Π°ΠΆ сСрвопривода ΠΊ Π΄Π΅ΠΊΠ΅ Π·Π°Ρ…Π²Π°Ρ‚Π°. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. -* **НоТка** – [`leg.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/leg.dxf). - Ѐункция: ΠžΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. +* **НоТка** – [`leg.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/leg.dxf). + Ѐункция: ΠžΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 4ΡˆΡ‚. -* **ΠžΠ±Ρ€ΡƒΡ‡ (LED)** – [`led_mount_plate.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/led_mount_plate.dxf). - Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ свСтодиодной Π»Π΅Π½Ρ‚Ρ‹. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. +* **ΠžΠ±Ρ€ΡƒΡ‡ (LED)** – [`led_mount_plate.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/led_mount_plate.dxf). + Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ свСтодиодной Π»Π΅Π½Ρ‚Ρ‹. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 4ΡˆΡ‚. * **Малая монтаТная Π΄Π΅ΠΊΠ°** – [`mounting_deck_small.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/mounting_deck_small.dxf). - Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. + Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΊΠ°Ρ€Π±ΠΎΠ½Π°Ρ‚ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. ### Π€Ρ€Π΅Π·Π΅Ρ€ΠΎΠ²ΠΊΠ° -* **Π”Π΅ΠΊΠ° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ** – [`central_plate.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/central_plate.dxf). - Ѐункция: НСсущая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: БтСклотСкстолит/ΠΊΠ°Ρ€Π±ΠΎΠ½ 2ΠΌΠΌ. +* **Π”Π΅ΠΊΠ° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ** – [`central_plate.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/central_plate.dxf). + Ѐункция: НСсущая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: БтСклотСкстолит/ΠΊΠ°Ρ€Π±ΠΎΠ½ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 1ΡˆΡ‚. -* **Π›ΡƒΡ‡** – [`arm.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/arm.dxf). - Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ². - ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: БтСклотСкстолит/ΠΊΠ°Ρ€Π±ΠΎΠ½ 2ΠΌΠΌ. +* **Π›ΡƒΡ‡** – [`arm.dxf`](https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/arm.dxf). + Ѐункция: ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ². + ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»: БтСклотСкстолит/ΠΊΠ°Ρ€Π±ΠΎΠ½ 2ΠΌΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: 4ΡˆΡ‚. diff --git a/docs/ru/modes.md b/docs/ru/modes.md index b38c6eef..0d72eaa8 100644 --- a/docs/ru/modes.md +++ b/docs/ru/modes.md @@ -6,7 +6,7 @@ 1. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ *Vehicle Setup*. 2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ мСню *Flight Modes*. -3. УстановитС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ SwC (Channel 5). +3. УстановитС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ SwC (Channel 6). 4. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹: @@ -16,7 +16,7 @@ * Flight Mode 6: *Position*. 5. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ², ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΡƒΠ»ΡŒΡ‚Π΅. -6. ΠΠ°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ² (*Kill switch*) Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ SwA (Channel 6). +6. ΠΠ°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ² (*Kill switch*) Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ SwA (Channel 5). QGroundControl modes diff --git a/docs/ru/oktazodg.md b/docs/ru/oktazodg.md new file mode 100644 index 00000000..23a9ea7e --- /dev/null +++ b/docs/ru/oktazodg.md @@ -0,0 +1,126 @@ +# ΠžΠΊΡ‚ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ со спСцифичным располоТСниСм ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€ΠΎΠ² + +[CopterHack-2021](copterhack2021.md), ΠΊΠΎΠΌΠ°Π½Π΄Π° **PΠ°D30DΠ–**. + + + +## Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ + +НавСрноС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ Π΄Ρ€ΠΎΠ½, задаСтся рядом вопросов Ρ‚ΠΈΠΏΠ°:"А сколько ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Ρ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ?","А ΠΊΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»Π΅Ρ‚Π΅Ρ‚ΡŒ?","А сколько ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ?". Наша ΠΊΠΎΠΌΠ°Π½Π΄Π°, проявила интСрСс ΠΊ послСднСму ΠΈΠ· Π½ΠΈΡ…, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊ вопросу Π³Ρ€ΡƒΠ·ΠΎΠΏΠΎΠ΄ΡŠΡ‘ΠΌΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ COEX - Clover 4. ИмСя Π½Π° Ρ€ΡƒΠΊΠ°Ρ… ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ тягу ΠΊ ΠΏΠΎΠ»Π΅Ρ‚Π°ΠΌ, ΠΌΡ‹ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ выяснили, Ρ‡Ρ‚ΠΎ полСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠΏΡ‚Π΅Ρ€Π° являСтся масса ΠΎΡ‚ 800 Π΄ΠΎ 1000 Π³Ρ€Π°ΠΌΠΌ. Но ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ ΠΌΠ°Π»ΠΎ ΠΈ Ρ‡Ρ‚ΠΎ с этим Π΄Π΅Π»Π°Ρ‚ΡŒ? Π’Π΅Π΄ΡŒ Π² Π½Π΅Π΄Π°Π»Π΅ΠΊΠΎΠΌ Π±ΡƒΠ΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΡŒΡΡ повсСмСстная доставка Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π½Π° Π΄Ρ€ΠΎΠ½Π°Ρ… ΠΈ Π΄Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ 1 ΠΊΠΈΠ»ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. ΠŸΡ€Π΅Π±Ρ‹Π²Π°Ρ Π² поисках Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ самоС элСмСнтарноС Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ - просто ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π΄Ρ€ΠΎΠ½Ρƒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ! Π˜Π·ΡƒΡ‡Π°Ρ список Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Ρ‚Π΅ΠΌ Π½Π° конкурс CopterHack2021, ΠΌΡ‹ нашли Ρ‚Π°ΠΊΡƒΡŽ Ρ‚Π΅ΠΌΡƒ ΠΊΠ°ΠΊ "Π”Π²Π° Π΄Ρ€ΠΎΠ½Π° Π² Ρ‚Π²Π΅Ρ€Π΄ΠΎΠΉ связкС", Ρ‡Ρ‚ΠΎ являлось 100-ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½Ρ‹ΠΌ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ΠΌ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΡƒΡŽ нас ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π»Π΅Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠΈ. + + + +## Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° + +Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ поиска Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎ всСм нашим трСбованиям, ΠΌΡ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ…. Π‘Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ для Π½Π°Ρ‡Π°Π»Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠΊΡ‚ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ со спСцифичным располоТСниСм ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€ΠΎΠ², собствСнно ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π΄Π²Π° Π΄Ρ€ΠΎΠ½Π° соСдинили вмСстС Π½Π° стандартном расстоянии Π΄Π²ΡƒΡ… ΠΏΠ°Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€ΠΎΠ² ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· стандартных ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Π΄Ρ€ΠΎΠ½Π° (Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ Π΄Π΅ΠΊΠ°, 4 Π»ΡƒΡ‡Π°, 2 крСстовины), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄ΡƒΡ‚ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π°Ρ†ΠΈΠΈ Clover 4. + + + +Π’ ΠΊΠ°Ρ‡Π΅Ρ‚Π²Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π° Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Pixhawk v.4, Ρ‚.ΠΊ. ΠΎΠ½, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ стандартных Π½Π° ΠšΠ»Π΅Π²Π΅Ρ€Π°Ρ… Pixracer ΠΈ CoexPix ΠΈΠΌΠ΅Π΅Ρ‚ большС ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ€Ρ‚ΠΎΠ² для Π΄Π²ΠΈΠΆΠΊΠΎΠ². + + + +Π’ качСствС Ρ€Π°Π΄ΠΈΠΎΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° ΠΈ Ρ€Π°Π΄ΠΈΠΎΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° использовались стандартноС ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ FlySky. + +Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΎΡ‚Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ Ρ‚Π΅ΠΌΡ‹ "Π΄Π²ΡƒΡ… Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² Ρ‚Π²Π΅Ρ€Π΄ΠΎΠΉ связкС", Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΡ‚ΠΎΠΊΠΏΡ‚Π΅Ρ€Π° Π΄Π²Π΅ стандартныС ΠΏΠ»Π°Ρ‚Ρ‹ распрСдСлСния питания. Вопрос питания Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ остаСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ. БСйчас ΠΊ Π΄Π²ΡƒΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ PDB ΠΏΠΎΠ΄ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… аккумулятора, ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ ΠΈΠ΄ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ»Π°Ρ‚ распрСдСлСния питания. МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ PDB ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ акквмулятор Π½Π° 5200 mA/h, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π±Ρ‹ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ потСрял свою "ΠΈΠ·ΡŽΠΌΠΈΠ½ΠΊΡƒ" ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ идСю для развития. + +## ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° + +https://drive.google.com/drive/folders/1Zc878JuDw_4FKSvvzibzGLVOnaxFhiqL?usp=sharing - ссылка Π½Π° ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ ΠΎΠΊΡ‚ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ PX4. + +https://github.com/matveylapin/PX4-Autopilot - ссылка Π½Π° ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ ΠΎΠΊΡ‚ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π° со всСми исходниками. + +ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ нашСй ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ, ΠΎΡ‚ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Clover 4, Π½Π΅ считая Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΊΡ‚ΠΎ-, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ²Π°Π΄Ρ€ΠΎ-ΠΊΠΎΠΏΡ‚Π΅Ρ€, являСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… особых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ½ΠΈ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ описаны Π½ΠΈΠΆΠ΅. + +ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» - это Ρ„Π°ΠΉΠ» Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ.Π’ Π½Π΅ΠΌ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ² Π² локальной систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π΄Ρ€ΠΎΠ½Π°. Π­Ρ‚ΠΎ трСбуСтся для составлСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ кинСматичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ. + +```python +# Firmware/src/lib/mixer/geometries/MultirotorMixer/octa_h.toml + +[info] +key = "8h" +description = "the coolest geometry on the planet" + +[rotor_default] +axis = [0.0, 0.0, -1.0] +Ct = 1.0 +Cm = 0.05 + +[[rotors]] +name = "front_right" +position = [0.5, 1, 0.0] +direction = "CCW" + +[[rotors]] +name = "rear_left" +position = [-0.5, -1, 0.0] +direction = "CCW" + +[[rotors]] +name = "mid_front_right" +position = [0.5, 0.5, 0.0] +direction = "CW" + +[[rotors]] +name = "rear_right" +position = [-0.5, 1, 0.0] +direction = "CW" + +[[rotors]] +name = "front_left" +position = [0.5, -1, 0.0] +direction = "CW" + +[[rotors]] +name = "mid_rear_left" +position = [-0.5, -0.5, 0.0] +direction = "CW" + +[[rotors]] +name = "mid_front_left" +position = [0.5, -0.5, 0.0] +direction = "CCW" + +[[rotors]] +name = "mid_rear_right" +position = [-0.5, 0.5, 0.0] +direction = "CCW" +``` + +Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ являСтся миксСр. Π’ Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ограничСния ΠΊΠ°ΠΊ всСх ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ² сразу, Ρ‚Π°ΠΊ ΠΈ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ. + +```python +# Firmware/ROMFS/px4fmu_common/mixers/octo_h.main.mix +# Octo H + +R: 8h 10000 10000 10000 0 +``` + +Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ послСдний Ρ„Π°ΠΉΠ» являСтся основным Ρ„Π°ΠΉΠ»ΠΎΠΌ эирфпСйма. Π’ Π½Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ самой ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ PX4. Π’Π°ΠΊΠΆΠ΅ прописываСтся сам миксСр ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ + +```python +#!/bin/sh +# Firware/ROMFS/px4fmu_common/init.d/airframes/8111_octo_h + +sh /ect/init.d/rc.mc_defaults + +set MIXER octo_h + +set PWM_OUT 12345678 +``` + +## 3D-модСль + +Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΈ принятии Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, нашим программистом Π±Ρ‹Π» ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ‚ΡŒ всС Π² симуляторС Gazebo. Π’Π²ΠΈΠ΄Ρƒ нСдостатка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Π΄ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ связанной с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, рСализация прСдлоТСния оттянута Π½Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ срок. Но, Π½Π΅ смотря Π½Π° этот Ρ„Π°ΠΊΡ‚, для Π±ΠΎΠ»Π΅Π΅ Π»ΡƒΡ‡ΡˆΠ΅ΠΉ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π±Ρ‹Π»Π° сдСлана 3D-модСль ΠΎΠΊΡ‚ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. ВсС Π΄Π΅Ρ‚Π°Π»ΠΈ для сборки ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎ ссылкС - https://drive.google.com/drive/folders/1TuxiSWmiPWIslp03GDKJL4yQ729Cn70I?usp=sharing. + + + +## ОТиданиС + +Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ имСлось Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Π² ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ сроки, сдСлав Π°ΠΊΡ†Π΅Π½Ρ‚ Π½Π° ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ дальнСйшСм Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ. + +## Π Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ + +Π’Π²ΠΈΠ΄Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΡ‚Π²Π»Π΅ΠΊΠ°ΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ: ΡƒΡ‡Π΅Π±Π°, Ρ€Π°Π±ΠΎΡ‚Π°, ΠΏΡ€ΠΎΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π² условиях ΠΏΠ°Π½Π΄Π΅ΠΌΠΈΠΈ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ всСм сокомандникам вмСстС Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»Π³ΠΎ ΠΎΡ‚Ρ‚ΡΠ³ΠΈΠ²Π°Π»ΠΎΡΡŒ ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠΊΠ° ΠΏΠΎ этому вопросу ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠ»Π°ΡΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ нСдСлю. Π—Π° достаточно ΠΌΠ°Π»Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π° Ρ‚Ρ€ΠΈ Π½Π΅Π΄Π΅Π»ΠΈ Π΄ΠΎ Ρ„ΠΈΠ½Π°Π»Π° конкурса, ΠΌΡ‹ взялись Π·Π° Π΄Π΅Π»ΠΎ. Π’ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ дня провСдСния Ρ„ΠΈΠ½Π°Π»Π° CopterHack2021 ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ 20-21 ΠΌΠ°Ρ€Ρ‚Π° 2021 Π³ΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Данная ΡΡ‚Π°Ρ‚ΡŒΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нашСго прогрСсса. + +Π‘ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌΠΈ поТСланиями ΠΈ Π²ΠΎΠΎΠ΄ΡƒΡˆΠ΅Π²Π»Π΅Π½Π½Ρ‹ΠΌ настроСм, ΠΊΠΎΠΌΠ°Π½Π΄Π° PΠ°D30DΠ–! diff --git a/docs/ru/power.md b/docs/ru/power.md index 10c442e4..13253fc1 100644 --- a/docs/ru/power.md +++ b/docs/ru/power.md @@ -15,7 +15,7 @@ * Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠ΅ΠΌΡΡ ΠΏΠΎΠ»Π΅ суммарноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ напряТСния с ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° напряТСния. * НаТмитС *Close*, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ рассчитанноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. - + Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация: https://docs.qgroundcontrol.com/en/SetupView/Power.html. @@ -28,7 +28,7 @@ 3. ПослС появлСнии надписи *Connect the battery now* подсоСдинитС ΠΠšΠ‘. 4. Π”ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ появлСния надписи *Calibration complete*. - + Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация: https://docs.px4.io/v1.9.0/en/advanced_config/esc_calibration.html. diff --git a/docs/ru/projects.md b/docs/ru/projects.md index d0d165ea..77ae588e 100644 --- a/docs/ru/projects.md +++ b/docs/ru/projects.md @@ -13,7 +13,7 @@ |Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ систСмы позиционирования [Pozyx](https://www.pozyx.io)|[Наработки](https://github.com/goldarte/pozyx_clever).| |Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ систСмы позиционирования Ρ‚ΠΈΠΏΠ° Motion Capture|| |Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ интСграция дСшСвого Motion Capture|| -|Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования (Scratch, Blockly)|[РСшСниС с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стаТировок](clever_blocks.md). ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ COEX [Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅](https://github.com/CopterExpress/clover/tree/blockly).| +|Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования (Scratch, Blockly)|[РСшСниС ΠΎΡ‚ COEX](blocks.md).| |Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ позиционирования (optical flow): Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³ ΠΏΠΎ Ρ„ΠΈΡ‡Π°ΠΌ, расчСт ΡƒΠ³Π»Π° ΠΏΠΎ yaw|| |Бимулятор ΠšΠ»Π΅Π²Π΅Ρ€Π°|[РСшСниС ΠΎΡ‚ COEX](https://github.com/CopterExpress/clover_vm) (Π½Π° основС Gazebo). ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ.| |ΠžΠ±Π»Π°Ρ‡Π½Π°Ρ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для симулятора ΠšΠ»Π΅Π²Π΅Ρ€Π°|По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π° основС [ROS Development Studio](http://rosds.online/).| diff --git a/docs/ru/race_timing_sys_copterhack.md b/docs/ru/race_timing_sys_copterhack.md new file mode 100644 index 00000000..e8dcf1db --- /dev/null +++ b/docs/ru/race_timing_sys_copterhack.md @@ -0,0 +1,94 @@ +# БистСма засСчки (Ρ…Ρ€ΠΎΠ½ΠΎΠΌΠ΅Ρ‚Ρ€Π°ΠΆΠ°) для Π΄Ρ€ΠΎΠ½ΠΎΠ² + +[CopterHack-2021](copterhack2021.md), ΠΊΠΎΠΌΠ°Π½Π΄Π° **Atomic Ferrets**. + +Наша ΠΊΠΎΠΌΠ°Π½Π΄Π° состоит ΠΈΠ· Π΄Π²ΡƒΡ… Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ - Π‘Ρ‚Π΅Ρ†ΠΊΠΈΠΉ Π‘Π΅Ρ€Π³Π΅ΠΉ ΠΈ Π”Π°Π²Π»Π΅Ρ‚ΡˆΠΈΠ½ ДСнис. + +По всСм вопросам ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠΎΡ‡Ρ‚Ρƒ (bashirianboy@gmail.com) ΠΈΠ»ΠΈ [Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌ](https://t.me/DenisNoLimit). + +## ИдСя + +На сСгодняшний дСнь сущСствуСт мноТСство засСчСк для Π΄Ρ€ΠΎΠ½ΠΎΠ², Π½ΠΎ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ производят Π² России, ΠΌΠ°Π»ΠΎ, Π° Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹ ΠΈΠΌΠ΅Π»ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡƒΡŽ Ρ†Π΅Π½Ρƒ, Π΅Ρ‰Π΅ мСньшС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ систСму засСчки, которая Π΄Π°Π²Π°Π»Π° Π±Ρ‹ вСсь Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», ΠΈ производство ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ΠΌ. + +ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ: https://github.com/stinger000/CopterHack2020_IR_LED. + +## ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ + +ΠŸΡ€Π΅Π»Π΅ΡΡ‚ΡŒ нашСй систСмы Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π΅ концСпция проста - использованиС Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ‚ΠΎΠ΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° - Ρ„ΠΎΡ‚ΠΎΠ΄ΠΈΠΎΠ΄Π°, ΠΈ свСтодиода. Π€ΠΎΡ‚ΠΎΠ΄Π°Ρ‚Ρ‡ΠΈΠΊ ΠΈ ИК свСтодиод крСпятся Π½Π° Π²ΠΎΡ€ΠΎΡ‚Π° Π΄Ρ€ΡƒΠ³ Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π΄Ρ€ΡƒΠ³Π°, ΠΈ свСтодиод всС врСмя Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° Π΄Π°Ρ‚Ρ‡ΠΈΠΊ. Когда Π΄Ρ€ΠΎΠ½ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Π²ΠΎΡ€ΠΎΡ‚Π°, ΠΎΠ½ Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ собой свСтодиод, ΠΈ показания Π½Π° Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ΅ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. На этом ΠΈ основан ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ ΠΊ схСмС, способной ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ свСтовой ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Π½Π΅Π³ΠΎ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сигнал ΠΎ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€. Для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ ΠΌΡ‹ использовали Arduino. + +Для Arduino написан ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ постоянно ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ Π½Π° Π½Π΅Π³ΠΎ сигналы с Ρ„ΠΎΡ‚ΠΎΠ΄ΠΈΠΎΠ΄Π°. Π—Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ имитация Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π½ΠΈΠ·ΠΊΠΈΡ… частот, ΡΠ³Π»Π°ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΡˆΡƒΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ сигналами Π±ΠΎΠ»Π΅Π΅ низкочастотныС. Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΡˆΡƒΠΌΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π΄Π°Ρ‚Ρ‡ΠΈΠΊ ΠΈ свСтодиод разнСсСны Π΄Π°Π»Π΅ΠΊΠΎ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, ΠΈ свСтовой ΠΏΠΎΡ‚ΠΎΠΊ Π² этом случаС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΌΠ΅ΡˆΠ°Ρ‚ΡŒΡΡ с ΡˆΡƒΠΌΠΎΠΌ. + +На рисункС Π½ΠΈΠΆΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° типичная врСмСнная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° сигнала. "Π―ΠΌΡ‹" ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π²ΠΎ врСмя ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· засСчку. Π‘ΠΈΠ½ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½ "сырой" сигнал, Π° красным - ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ low-pass Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ сигнала Π½Π΅ мСнялся, Π° ΡˆΡƒΠΌΡ‹ сглаТивались. + +![diagram example](../assets/race_timing_sys_copterhack/diagram.jpg) + +Алгоритм Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ»Π΅Ρ‚ засчитываСтся ΠΏΠΎΠ»Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ спад ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ подъСм сигнала, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°ΠΌΠΏΠ»ΠΈΡ‚ΡƒΠ΄Π° сигнала Π΄ΠΎΠ»ΠΆΠ½Π° большС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выставлСнного Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ° (зависит ΠΎΡ‚ ΡˆΡƒΠΌΠΎΠ² собранной систСмы). + +Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎ Serial-ΠΏΠΎΡ€Ρ‚Ρƒ Arduino отправляСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π°. + +ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° засСчка, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ этот сигнал, ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° любой интСрфСйс. + +## Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ + +Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΡƒΡŽ Π²ΠΈΠ΄Π΅ΠΎΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡŽ: + + + +## ИспользованиС + +Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π»ΡŽΠ±Ρ‹Ρ… ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠ² достаточно Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ². УсловиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΠΎΠ½ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π» собой свСтодиод. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π΄Ρ€ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² довольно ΡƒΠ·ΠΊΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½. Π­Ρ‚ΠΎ наглядно ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½Π° рисункС Π½ΠΈΠΆΠ΅: + +![system work](../assets/race_timing_sys_copterhack/system_work.png) + +Для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ скачайтС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с ΠΊΠΎΠ΄ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ»Π΅Ρ‚ΠΎΠ² ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом: + +```bash +git clone https://github.com/stinger000/CopterHack2020_IR_LED +git clone https://github.com/stinger000/CopterHack2020_IR_LED_Desktop_GUI +``` + +Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΡƒ Signal_handler рСпозитория `CopterHack2020_IR_LED` ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Arduino IDE Ρ„Π°ΠΉΠ» `AnalogReadSerial_filtered_v2.ino`. + +Надо Ρ€Π°ΡΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки: + +```cpp +//debug in plotter +//Serial.print(sensorValue); // uncomment this 4 rows +//Serial.print(" "); +//Serial.println(value); +//... +``` + +ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку Π²Ρ‹Π²ΠΎΠ΄Π° символа Π² Serial-ΠΏΠΎΡ€Ρ‚: + +```cpp +// ... +if ( rising_edge & falling_edge ) +{ + // ... + // Send time by serial port to GUI + Serial.println(millis()); //comment this line + //... +} +``` + +ΠŸΠ΅Ρ€Π΅ΠΏΡ€ΠΎΡˆΠ΅ΠΉΡ‚Π΅ вашС Arduino этим Ρ„Π°ΠΉΠ»ΠΎΠΌ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ сигнал Π² ΠΏΠ»ΠΎΡ‚Ρ‚Π΅Ρ€Π΅. + +![set noise](../assets/race_timing_sys_copterhack/set_noise.jpg) + +По Π½Π΅ΠΌΡƒ Π·Π°Π΄Π°Ρ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ ΡˆΡƒΠΌΠ°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΡƒΡŽΡΡ для вашСй систСмы: Π·Π° это ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ пСрСмСнная `noise`. + +НапримСр Π½Π° рисункС Π½ΠΈΠΆΠ΅ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° ΡˆΡƒΠΌΠΎΠ² (для ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ красного сигнала) достигаСт 10 Π΅Π΄ΠΈΠ½ΠΈΡ†. + +Π—Π°Ρ‚Π΅ΠΌ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ раскоммСнтируйтС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ строки ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΡˆΠ΅ΠΉΡ‚Π΅ Arduino. + +Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ запуститС Ρ„Π°ΠΉΠ» с графичСским интСрфСйсом (# Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΎ Ρ„Π°ΠΉΠ»): + +```bash +cd CopterHack2020_IR_LED_Desktop_GUI +python main.py +``` + +Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Arduino Ρ‡Π΅Ρ€Π΅Π· USB-кабСль Π² ваш ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ "Connect". + +Начало ΠΈ ΠΊΠΎΠ½Π΅Ρ† отсчСта Π·Π°ΠΌΠ΅Ρ€ΠΎΠ² производится ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ "start" ΠΈ "stop". diff --git a/docs/ru/remote-control-with-oculusvr.md b/docs/ru/remote-control-with-oculusvr.md new file mode 100644 index 00000000..d41220ac --- /dev/null +++ b/docs/ru/remote-control-with-oculusvr.md @@ -0,0 +1,155 @@ +# Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСмы для управлСния Π‘ΠŸΠ›Π с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шлСма Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ + +[CopterHack-2021](copterhack2021.md), ΠΊΠΎΠΌΠ°Π½Π΄Π°: **ProCleVeR**. + +## Команда + +- [Π”Π°Π²Ρ‹Π΄Π΅Π½ΠΊΠΎ Π“Π°Π»ΠΈΠ½Π°](https://github.com/GalinaDa), e-mail: [galyadavydenko@yandex.ru](mailto:galyadavydenko@yandex.ru). + +## Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ + +БСйчас сущСствуСт нСсколько способов управлСния ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠΌ: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ самый простой, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρƒ, Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° имССтся нСсколько нСдостатков, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ‚ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ потСрян сигнал. Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ – FPV, Ρ‚Π°ΠΊΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСно, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС осущСствляСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠΌ, Π½ΠΎ ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ получСния Π²ΠΈΠ΄Π΅ΠΎ-изобраТСния ΠΏΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Π²ΠΈΠ΄Π΅ΠΎ-ΠΊΠ°Π½Π°Π»Ρƒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Ρ€Π΅Ρ‚ΠΈΠΉ способ, Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ ΠΏΠΎΠ»Π΅Ρ‚ - позволяСт Π‘ΠŸΠ›Π Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² срСдС, ΠΊΡƒΠ΄Π° Π½Π΅ ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ°Π΅Ρ‚ сигнал GPS ΠΈ Π±Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. + +РассмотрСв всС способы управлСния, я выявила, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° систСму, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽ, Π±ΡƒΠ΄Π΅Ρ‚ FPV. Π’ ΠΌΠΎΠ΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ присутствуСт нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€, шлСм Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ манипуляторы. И сравнив, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΈ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π²Ρ‹ΡΠ²ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΌΠΎΠ΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ прСимущСства, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ я ΡΡ‡ΠΈΡ‚Π°ΡŽ Π³Π»Π°Π²Π½Ρ‹ΠΌ минусом FPV управлСния являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΏΡ‚Π΅Ρ€ Π½Π΅ смоТСт Π»Π΅Ρ‚Π°Ρ‚ΡŒ Π½Π° большиС расстояния ΠΈΠ·-Π·Π° сигнала Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹. + +## Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° + +Π‘Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ систСму Ρ‚Π°ΠΊΠΎΠΉ: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· манипуляторы, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Π΅Ρ€Π΅Π· шлСм Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. КакоС ΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· шлСм? На шлСм Π±ΡƒΠ΄Π΅Ρ‚ пСрСнСсСн ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π° ΠΏΠΎ Ρ€Ρ‹ΡΠΊΠ°Π½ΡŒΡŽ. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π³ΠΎΠ»ΠΎΠ²Ρ‹, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΏΡ‚Π΅Ρ€. + +## Настройка Clover OS + +Настройка Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Raspberry ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ‚ΠΎΡ‡ΠΊΠΈ доступа Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. На Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»Π° установлСна [ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ опСрационная систСма](https://github.com/CopterExpress/clover). ПослС установки ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ нСпосрСдствСнно ΠΊ настройкам систСмы. Как пСрСвСсти Raspberry Pi Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, рассказываСтся Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅: [Настройка Wi-Fi](https://clover.coex.tech/ru/network.html). ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° данная настройка Raspberry Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ Wi-Fi, послС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ Raspberry ΠΏΠΎ SSH, Ρ‚Π°ΠΊΠΆΠ΅ Π² дальнСйшСм ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Wi-Fi пригодится для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ сСрвСру ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСру (Π² Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΌΠ½ΠΎΠΉ систСмС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ являСтся ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ ΠΈ сСрвСром – ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€). + +## ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ + +Для Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Raspberry ΠΏΠΎ сСти Wi-Fi. Π£Π·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π»ΠΈ Raspberry, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π΅Π³ΠΎ IP-address для дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ адрСсу 192.168.0.1, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ списку ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Ρ… устройств ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ устройство с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ: cloverXXXX, Π³Π΄Π΅ Π₯ – любоС число. + +![Бписок ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Ρ… ΠΊ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ](https://user-images.githubusercontent.com/60854798/111508088-e1917480-877d-11eb-80c1-58a0fd6df65b.jpg) + +## Π£Π΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ + +Для дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ нСсколько тСстов. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° тСста ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ свСтодиоды. 1 – ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π½Π° свСтодиодС. Π”Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с сСрвСра ΠΈ приходят ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ отправляСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ своСм состоянии сСрвСру. + +Для Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со свСтодиодами – RPi.GPIO. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»Π΅ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ сообщСниС ΠΎΡ‚ сСрвСра, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ(Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ) свСтодиод, Π² строкС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ свСтодиод, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 ΠΈΠ»ΠΈ 0 Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ трСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ со свСтодиодом. ΠŸΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡΡ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ свСтодиода ΠΌΠΎΠΆΠ½ΠΎ познакомится здСсь. + +Π”Π°Π»Π΅Π΅ рассмотрим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ нСпосрСдствСнно Ρ‡Π΅Ρ€Π΅Π· срСду Unity, которая ΠΈ использовалась ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ систСмы. Для Π΄Π°Π½Π½ΠΎΠ³ΠΎ тСста Π±Ρ‹Π»ΠΎ написано Π΄Π²Π° ΠΊΠΎΠ΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΠ· написан Π½Π° C# ΠΈ являСтся сСрвСром Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ, Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π° Python – ΠΊΠ»ΠΈΠ΅Π½Ρ‚. + +ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ соСдинСниС ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌΡΡ ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Π’Π‘Π  ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… строк: + +```csharp +IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("192.168.0.107"), 9090); +socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); +socketServer.Bind(ipPoint); +``` + +Для ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄: + +```csharp +socketServer.Listen(10); +``` + +Π’Π°ΠΊ ΠΊΠ°ΠΊ потрСбуСтся Π½Π°Ρ‡Π°Ρ‚ΡŒ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, создадим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ асинхронных событий. + +```csharp +SocketAsyncEventArgs e = new SocketAsyncEventArgs(); +``` + +Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ клавиша, Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: + +```csharp +Input.GetKey(KeyCode.Space) +``` + +Для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ: + +```csharp +socketClient.Send(Encoding.ASCII.GetBytes("1")); +``` + +Для принятия Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ: + +```csharp +socketClient.Receive(Encoding.ASCII.GetBytes("1024")); +``` + +Π’ΠΈΠ΄Π΅ΠΎ дСмонстрации работоспособности Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°: + + + +## ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° изобраТСния ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π²ΠΈΠ΄Π΅ΠΎ Π² срСду Unity + +Для Π½Π°Ρ‡Π°Π»Π° Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π² сСбС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ: Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ссли это ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€. Π­Ρ‚ΠΎ дСлаСтся ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚(ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€) ΠΏΠΎΠΌΠΈΠΌΠΎ изобраТСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, мСстополоТСниС, заряд аккумулятора, ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Для этого, Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ это рСализуСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: + +```csharp +socketClient.Receive(buffer); +Array.Copy(buffer, 0, image, i, buffer.Length > size - i ? size - i : buffer.Length); +``` + +Для Π²Ρ‹Π²ΠΎΠ΄Π° изобраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ: + +```csharp +Texture2D tex = new Texture2D(2, 2); +tex.LoadImage(image); +GetComponent().material.mainTexture = tex; +``` + +Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ Π½Π° Raspberry. + +Для опрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ изобраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ: + +```python +filesize = os.stat(filename).st_size +``` + +ΠŸΠ°ΠΊΡƒΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅: + +```python +d = struct.pack('>bI', 0, filesize) +``` + +Π’Π°ΠΊΠΆΠ΅ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: + +```python +s.sendall(bytes_read) +``` + +ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ: + +Для Π²Ρ‹Π²ΠΎΠ΄Π° напишСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строчки ΠΊΠΎΠ΄Π°: + +```csharp +yield return new WaitWhile(() => socketClient.Available < size); +Debug.Log(socketClient.Available); +socketClient.Receive(image, 0, image.Length, SocketFlags.None); +Texture2D tex = new Texture2D(2, 2); +tex.LoadImage(image); +GetComponent().material.mainTexture = tex; +``` + +Π£ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° добавляСм ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π²ΠΈΠ΄Π΅ΠΎ с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹: + +```python +ret, frame = cam.read() # считываСм изобраТСния с ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ +result, frame = cv2.imencode('.jpg', frame, encode_param) # записываСм Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ +client_socket.send(struct.pack(" + +## Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ + +- Π˜Π½Π΄ΠΈΠΊΠ°Ρ†ΠΈΡ управлСния. + + + +- ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π° ΠΏΠΎ Ρ€Ρ‹ΡΠΊΠ°Π½ΡŒΡŽ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ шлСма Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. + +## ВСстовыС запуски систСмы + +- Запуск Π±Π΅Π· ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ. +- Запуск с ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ. + + diff --git a/docs/ru/seeding_drone.md b/docs/ru/seeding_drone.md new file mode 100644 index 00000000..7a407a50 --- /dev/null +++ b/docs/ru/seeding_drone.md @@ -0,0 +1,323 @@ +# Π”Ρ€ΠΎΠ½ для высаТивания сСмян + +[CopterHack-2021](copterhack2021.md), ΠΊΠΎΠΌΠ°Π½Π΄Π° **MINIONS**. + +Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Π»ΠΈΡΡŒ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΌΠΈΡ€ Π±Π΅Π· Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²? Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π³Π»Π°Π·Π° ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Π±Π΅Π·Π»ΡŽΠ΄Π½ΡƒΡŽ Π—Π΅ΠΌΠ»ΡŽ. Π”Π΅Ρ€Π΅Π²ΡŒΡ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ нашСго сущСствования Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ производят Π±ΡƒΠΌΠ°Π³Ρƒ, ΠΏΠΈΠ»ΠΎΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΈ ΠΆΠ΅Π²Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π΅Π·ΠΈΠ½ΠΊΡƒ, Π½ΠΎ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΡƒΠ³Π»Π΅Ρ€ΠΎΠ΄Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅. + +Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΈ 1760–1840 Π³ΠΎΠ΄ΠΎΠ² ΠΌΠΈΡ€ ΠΏΡ€Π΅Π±Ρ‹Π²Π°Π΅Ρ‚ Π² нСскончаСмом ΡƒΠ³Π»Π΅Ρ€ΠΎΠ΄Π½ΠΎΠΌ хаосС. Π”Π΅Ρ€Π΅Π²ΡŒΡ ΠΈ ΠΏΠ»Π°Π½ΠΊΡ‚ΠΎΠ½ - наши СдинствСнныС спаситСли с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΈΡ… - Π΄Π΅Ρ€Π΅Π²ΡŒΡ. + +Нам Π½ΡƒΠΆΠ½ΠΎ ΡΠΏΠ°ΡΠ°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΡŒΡ, защищая ΠΈΡ… ΠΎΡ‚ Ρ€Π°Π·Ρ€ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠ° лСсов, Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠ° лСсов Π² цСлях ΡƒΡ€Π±Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Ρ‚. Π΄. Π”Π΅Ρ€Π΅Π²ΡŒΡ - Π»Π΅Π³ΠΊΠΈΠ΅ для Π·Π΅ΠΌΠ»ΠΈ. Π­Ρ‚ΠΎ ваТная Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎΠΉ экосистСмы. Они ΡƒΡ€Π°Π²Π½ΠΎΠ²Π΅ΡˆΠΈΠ²Π°ΡŽΡ‚ состав ΠΏΠΎΡ‡Π²Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ слуТат Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠΌ для Π²Π΅Ρ‚Ρ€Π° ΠΈ ΡˆΡ‚ΠΎΡ€ΠΌΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ΅ использованиС экосистСмы. По этим ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ ΡΠΏΠ°ΡΠ°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΡŒΡ. + +ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сущСствуСт мноТСство опасных ΠΈ труднодоступных участков для посадки людСй, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ТизнСспособной Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ являСтся использованиС Π΄Ρ€ΠΎΠ½ΠΎΠ² для посадки Π² этих Ρ€Π΅Π³ΠΈΠΎΠ½Π°Ρ…. + +Как слСдуСт ΠΈΠ· названия, Π΄Ρ€ΠΎΠ½Ρ‹, ΡΡ‚Ρ€Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ сСмСнами, Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ сСмСнами Π² ΠΏΠ»ΠΎΠ΄ΠΎΡ€ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠΎΡ‡Π²Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² вырасти снова послС Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ для ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ использования. Если ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ посадки ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ восстановим Π΄Π΅Ρ€Π΅Π²ΡŒΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ срубили. + + + +## Наша Ρ†Π΅Π»ΡŒ + +ΠœΡ‹ сдСлаСм Π΄Ρ€ΠΎΠ½Ρ‹ способными ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ сСмСна Π½Π° Π±ΠΎΡ€Ρ‚Ρƒ ΠΈ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΅Ρ…Π°Π»ΠΈ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ сСмян ΠΈ высоту ΠΊΠ°ΠΏΠ»ΠΈ. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΎ Π·Π°Ρ‰ΠΈΡ‚Π΅ сСмян ΠΎΡ‚ насСкомых, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ… ΠΈ обСзвоТивания. ΠœΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ ΡˆΠ°Ρ€Π° Π·Π΅ΠΌΠ»ΠΈ, ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π½ΡƒΡŽ ΠœΠ°ΡΠ°Π½ΠΎΠ±Ρƒ Π€ΡƒΠΊΡƒΠΎΠΊΠ°, Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠ°ΠΊ Π’Π΅Ρ…Π½ΠΈΠΊΠ° Π€ΡƒΠΊΡƒΠΎΠΊΠ°. Π­Ρ‚ΠΎΡ‚ Π·Π΅ΠΌΠ½ΠΎΠΉ ΡˆΠ°Ρ€ содСрТит всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ элСмСнты для выращивания, сСмСна растСний ΠΈ зСмлю для Π·Π°Ρ‰ΠΈΡ‚Ρ‹. Когда ΠΌΡ‹ бросаСм Π΅Π³ΠΎ Π½Π° зСмлю, Π·Π΅ΠΌΠ½ΠΎΠΉ ΡˆΠ°Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ сСмСна, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Π²ΠΎΠ΄Ρ‹, ΠΈ сСмСна Π½Π΅ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΏΡ€ΠΎΡ€Π°ΡΡ‚Π°Ρ‚ΡŒ. + +Π’ΠΈΠ΄Π΅ΠΎ с YouTube: + + + +Нам ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нСбольшиС посСвныС миссии, Π½ΠΎ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, связанными с Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅Ρ‚ΠΎΠΌ с GPS. + +ΠœΡ‹ ΠΏΠΎΠΊΡ€Ρ‹Π»ΠΈ Π½Π°ΡˆΡƒ Π±Π°Ρ‚Π°Ρ€Π΅ΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ ΠΎΡ‚ Ρ…ΠΎΠ»ΠΎΠ΄Π°, посСвныС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Π·ΠΈΠΌΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сСмСна яблони Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΌ мСстС Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°ΠΊΠΊΠ»ΠΈΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. + +- [ΠšΠ°ΠΏΡΡƒΠ»Ρ‹ с сСмСнами](#сСмСнныС-капсулы). +- [Как ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π²Ρ‹ΡΠ΅Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π½Π° Π΄Ρ€ΠΎΠ½ Clover 4.2](#ΠΊΠ°ΠΊ-ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ-высСвной-ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ-Π½Π°-Π΄Ρ€ΠΎΠ½-clover-42). +- [Как ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Ρ€Π°Π·Π΄Π°Ρ‡ΠΈ](#ΠΊΠ°ΠΊ-ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ-ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ-высСва). +- [ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅](#ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅). + +## Π€Π°ΠΉΠ»Ρ‹ + +Бсылка Π½Π° всС Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅: [https://github.com/Sahinysf/TreeSeedQuad](https://github.com/Sahinysf/TreeSeedQuad). + +## ΠšΠ°ΠΏΡΡƒΠ»Ρ‹ с сСмСнами + +### Π’Π΅Ρ…Π½ΠΈΠΊΠ° Π€ΡƒΠΊΡƒΠΎΠΊΠ° + +На югС Π―ΠΏΠΎΠ½ΠΈΠΈ японский Ρ„Π΅Ρ€ΠΌΠ΅Ρ€ ΠΈ философ ΠœΠ°ΡΠ°Π½ΠΎΠ±Ρƒ Π€ΡƒΠΊΡƒΠΎΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π΅Π» Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ посадки сСмСнных ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ². Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ считаСтся СстСствСнной Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΎΠΉ зСмлСдСлия, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅ΠΉ машин, Ρ…ΠΈΠΌΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΈ ΠΎΡ‡Π΅Π½ΡŒ нСбольшого количСства ΠΏΡ€ΠΎΠΏΠΎΠ»ΠΊΠΈ. ΠŸΡ€ΠΈ использовании сСмСнных ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ² зСмля обрабатываСтся Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡ‡Π²Ρ‹. + + + +### ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° сСмСнных ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ² + +- Π”Π΅Π»Π°Ρ‚ΡŒ ΡˆΠ°Ρ€ΠΈΠΊΠΈ с сСмСнами ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ Π±Π΅Π· использования машин. +- Π›Π΅Π³Ρ‡Π΅ для лСсовосстановлСния ΠΈ посадки Π½Π° Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ мСстности +- Π‘ΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Π΅ ΠΏΠΎΡ‡Π²Ρ‹, ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΉ срСды ΠΈ срСдств ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡŽ +- Π­Ρ‚ΠΎ органичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, Π±Π΅Π· использования ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Ρ…ΠΈΠΌΠΈΠΊΠ°Ρ‚ΠΎΠ². +- Π­Ρ‚ΠΎ Π½Π΅Π΄ΠΎΡ€ΠΎΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ облСсСния / лСсовозобновлСния. +- Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΈΠ·ΠΊΠΈΡ… эксплуатационных расходов. + +### КакиС сСмСна ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ? + +Π›ΡŽΠ±ΠΎΠ΅ сСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ растСт Π² вашСм Ρ€Π°ΠΉΠΎΠ½Π΅ (Ρƒ нас это сСмя яблока). + +Π Π°Π·ΠΌΠ΅Ρ€ ΠΈ вСс сСмСнной капсулы: + +Π Π°Π·ΠΌΠ΅Ρ€ ΠΈ вСс сСмСнных ΠΊΠΎΡ€ΠΎΠ±ΠΎΡ‡Π΅ΠΊ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ПослС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… экспСримСнтов ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ - Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ 16-18 ΠΌΠΌ, Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ вСс - 10 Π³Ρ€Π°ΠΌΠΌ. + +НСобходимыС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ для изготовлСния сСмСнных ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ²: + +1. 1 Π²Π΅Π΄Ρ€ΠΎ Π³Π»ΠΈΠ½Ρ‹; +2. 1 Π²Π΅Π΄Ρ€ΠΎ органичСской Ρ‚Π΅ΠΌΠ½ΠΎΠΉ ΠΏΠΎΡ‡Π²Ρ‹ / компоста; +3. 1 Π²Π΅Π΄Ρ€ΠΎ Π²ΠΎΠ΄Ρ‹ (количСство Π²ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΡ‡Π²Ρ‹); +4. ΒΌ Π²Π΅Π΄Ρ€ΠΎ сСмян. + +Π¨Π°Π³ΠΈ ΠΏΠΎ ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΈΡŽ сСмСнных ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ²: + + + +1. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ количСство Π³Π»ΠΈΠ½Ρ‹ ΠΈ органичСской ΠΏΠΎΡ‡Π²Ρ‹. НапримСр, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ΄Π½ΠΎ Π²Π΅Π΄Ρ€ΠΎ Π³Π»ΠΈΠ½Ρ‹, Π²Π°ΠΌ слСдуСт ΡΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΎΠ΄Π½ΠΈΠΌ Π²Π΅Π΄Ρ€ΠΎΠΌ органичСской ΠΏΠΎΡ‡Π²Ρ‹. +2. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π³Π»ΠΈΠ½Π° ΠΈ органичСскиС частицы ΠΏΠΎΡ‡Π²Ρ‹ ΠΌΠ΅Π»ΠΊΠΈΠ΅. +3. ВСкстура Π³Π»ΠΈΠ½Ρ‹ ΠΈ органичСской ΠΏΠΎΡ‡Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Π»Π°ΠΆΠ½ΠΎΠΉ, Π½ΠΎ Π½Π΅ Π»ΠΈΠΏΠΊΠΎΠΉ. +4. Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ смСси ΠΈ скатайтС Π΅Π΅ Π² ΡˆΠ°Ρ€ΠΈΠΊΠΈ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ мяч, бросив Π΅Π³ΠΎ Π½Π° ΠΏΠ»ΠΎΡΠΊΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ. Если мяч Π½Π΅ ломаСтся Π»Π΅Π³ΠΊΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚, Ρƒ Π½Π΅Π³ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ сцСплСниС. +5. Π¨Π°Ρ€ΠΈΠΊΠΈ с сСмСнами Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ идСально ΠΊΡ€ΡƒΠ³Π»ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ΠΈ застрянут ΠΏΡ€ΠΈ броскС ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠΌ. +6. Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСмСна (ΠΎΡ‚ 1 Π΄ΠΎ 2 сСмян Π½Π° сСмСнной ΡˆΠ°Ρ€ΠΈΠΊ для постоянных Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ красноС Π΄Π΅Ρ€Π΅Π²ΠΎ, сандал, апСльсин, моринга…) (Β± 5 сСмян Π½Π° сСмСнной ΡˆΠ°Ρ€ΠΈΠΊ для ΠΎΠ²ΠΎΡ‰Π΅ΠΉ, Ρ†Π²Π΅Ρ‚ΠΎΠ², Ρ‚Ρ€Π°Π², клСвСра…) +7. Π‘ΡƒΡˆΠΈΡ‚Π΅ сСмСнныС ΡˆΠ°Ρ€ΠΈΠΊΠΈ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ-Π΄Π²ΡƒΡ… Π΄Π½Π΅ΠΉ Π² Π·Π°Ρ‚Π΅Π½Π΅Π½Π½ΠΎΠΌ мСстС, Ссли Π²Ρ‹ΡΠΎΡ…Π½ΡƒΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сСмСнныС ΡˆΠ°Ρ€ΠΈΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΎΡ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ…ΠΈΡ‰Π½ΠΈΠΊΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΡ‚ΠΈΡ†Ρ‹, грызуны… + + + + + +Вторая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° - Π±ΡƒΠΌΠ°ΠΆΠ½Ρ‹Π΅ капсулы с сСмСнами. + +На этот ΠΌΠ΅Ρ‚ΠΎΠ΄ повлияла корСйская Π³Π°Π·Π΅Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»ΠΈ сСмСна, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΡΠ°Π΄ΠΈΡ‚ΡŒ Π½Π° ΡƒΠ»ΠΈΡ†Π΅ послС прочтСния. + Π‘ΡƒΠΌΠ°ΠΆΠ½Ρ‹Π΅ капсулы с сСмСнами: + +НСобходимыС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹: + +1. любая Π±ΡƒΠΌΠ°Π³Π°; +2. Π²ΠΎΠ΄Π°; +3. Π±Π»Π΅Π½Π΄Π΅Ρ€; +4. сСмСна. + +Π¨Π°Π³ΠΈ ΠΏΠΎ ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΈΡŽ ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ² ΠΈΠ· Π±ΡƒΠΌΠ°Π³ΠΈ: + +1. Π˜Π·ΠΌΠ΅Π»ΡŒΡ‡Π΅Π½ΠΈΠ΅ всСй вашСй Π±ΡƒΠΌΠ°Π³ΠΈ, +2. ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ Π±ΡƒΠΌΠ°Π³Ρƒ Π² Π±Π»Π΅Π½Π΄Π΅Ρ€ ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π²ΠΎΠ΄Ρ‹, Ρ‡Π΅Ρ€Π΅Π· 2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠ°ΠΉΡ‚Π΅. +3. Π’Ρ‹Π΄Π°Π²ΠΈΡ‚ΡŒ всю Π²ΠΎΠ΄Ρƒ Π±ΡƒΠΌΠ°Π³ΠΎΠΉ, +4. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ сСмСна ΠΈ ΠΏΡ€ΠΈΠ΄Π°ΠΉΡ‚Π΅ ΠΊΡ€ΡƒΠ³Π»ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. +5. Π”Π°ΠΉΡ‚Π΅ Π²Ρ‹ΡΠΎΡ…Π½ΡƒΡ‚ΡŒ Π½Π° Π½ΠΎΡ‡ΡŒ. + + + +ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Π±ΡƒΠΌΠ°ΠΆΠ½Ρ‹Ρ… ΡˆΠ°Ρ€ΠΎΠ²: + +- Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹; +- экологичСски чистый. + +## Как ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ высСвной ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для Clover 4.2 + +1. УстановитС Π½ΠΈΠΆΠ½ΠΈΠ΅ Π΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΠΈ Π±Π°ΠΊΠ° Π½Π° ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΏΠ°Π»ΡƒΠ±Ρ‹ ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ Π²ΠΈΠ½Ρ‚Π°ΠΌΠΈ M3x8. + + + +2. УстановитС Π½Π΅ΠΉΠ»ΠΎΠ½ΠΎΠ²ΡƒΡŽ стойку (40 ΠΌΠΌ) с 4 сторон крСплСния для Π΄Π΅ΠΊΠΈ. + + + +3. УстановитС ΠΏΠΎΡ€ΡƒΡ‡Π΅Π½ΡŒ ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ Π²ΠΈΠ½Ρ‚Π°ΠΌΠΈ M3x8. + + + +4. УстановитС Π²Π΅Ρ€Ρ…Π½ΠΈΠ΅ Π΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΠΈ Π±Π°ΠΊΠ° Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅Π΅ Π·Π°Ρ…Π²Π°Ρ‚Π½ΠΎΠ΅ ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ Π²ΠΈΠ½Ρ‚Π°ΠΌΠΈ M3x8. + + + +5. ΠžΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎ подсоСдинитС Ρ€Π΅Π·Π΅Ρ€Π²ΡƒΠ°Ρ€Ρ‹ ΠΊ дСрТатСлям Ρ€Π΅Π·Π΅Ρ€Π²ΡƒΠ°Ρ€ΠΎΠ². + + + +6. ΠŸΠΎΠ΄ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ сСрводвигатСли SG90 ΠΊ Ρ€Π΅Π·Π΅Ρ€Π²ΡƒΠ°Ρ€Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стяТки. + +ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ сСялки Π΄Ρ€ΠΎΠ½Π°: + + + +### ΠœΠΎΠ΄ΡƒΠ»ΡŒ GPS + +ΠœΡ‹ установили ΠΌΠΎΠ΄ΡƒΠ»ΡŒ GPS Π½Π°Π²Π΅Ρ€Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ 2 Π½Π΅ΠΉΠ»ΠΎΠ½ΠΎΠ²Ρ‹Π΅ стойки (40 ΠΌΠΌ). + + + +ΠœΡ‹ ΠΏΠΎΠΊΡ€Ρ‹Π»ΠΈ аккумулятор, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ Ρ…ΠΎΠ»ΠΎΠ΄Π°. + + + +## Как ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ высСва + +ЭлСктронная Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° высСва сСмян состоит ΠΈΠ·: + +- Raspberry Pi 4 B ΠΈΠ· COEX Clover 4. +- 2 ΠΌΠΈΠΊΡ€ΠΎ-сСрводвигатСля SG90. +- PDB (Π±Π»ΠΎΠΊ распрСдСлСния питания) COEX Clover 4. + +Π‘ΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ сСрводвигатСля ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌ 32 ΠΈ 33 Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ШИМ Raspberry Pi, Π° ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ снимаСтся с ΠΏΠ»Π°Ρ‚Ρ‹ распрСдСлСния питания (5 Π’). + + + +### ПояснСниС ΠΊΠΎΠ΄Π° для управлСния сСрводвигатСлями + +Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сигнала ШИМ (ΡˆΠΈΡ€ΠΎΡ‚Π½ΠΎ-ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½ΠΎΠΉ модуляции) ΠΎΡ‚ Raspberry Pi. ШИМ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° сигнал Π’Π«Π‘ΠžΠšΠ˜Π™ ΠΈΠ»ΠΈ ΠΠ˜Π—ΠšΠ˜Π™ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ» - ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° сигнал Π’Π«Π‘ΠžΠšΠ˜Π™. + +Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ прСдставлСн Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ» сСрводвигатСля SG90 для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° сСрводвигатСля. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ» Π² ΠΊΠΎΠ΄Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ врСмя Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Ρ‹, Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ² врСмя Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π½Π° ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ШИМ. + +Π§Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ: + +- Π£Π³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° -90Β° ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ» 2 мс => 1/20 * 100% = Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ» 5%. +- Π£Π³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° 90Β° ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ» 2 мс => 2/20 * 100% = Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ» 10%. +- Π£Π³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° 0Β° ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ» 1,5 мс => 1,5 / 20 * 100% = 7,5% Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ†ΠΈΠΊΠ». + + + +ΠœΡ‹ сдСлаСм это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ RPi.GPIO ΠΈ написания ΠΊΠΎΠ΄Π° Python Π½Π° Raspberry Pi. + +Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ RPi.GPIO ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сна: + +```python +import RPi.GPIO as GPIO +from time import sleep +``` + +Π—Π°Ρ‚Π΅ΠΌ установитС Ρ€Π΅ΠΆΠΈΠΌ GPIO ΠΊΠ°ΠΊ BOARD: + +```python +servo = 33 +GPIO.setmode(GPIO.BOARD) +GPIO.setup(servo, GPIO.OUT) +``` + +Π”Π°Π»Π΅Π΅ создайтС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для сСрвопривода ШИМ. Π—Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ сигнал ШИМ 50 Π“Ρ† Π½Π° этот Π²Ρ‹Π²ΠΎΠ΄ GPIO с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GPIO.PWM(). НачнитС сигнал с 0. + +```python +pwm=GPIO.PWM(servo, 50) +pwm.start(0) +``` + +Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `ChangeDutyCycle()`, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π² ΡΠ΅Ρ€Π²ΠΎΠ΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ. + +```python +pwm.ChangeDutyCycle(5) # left -90 deg position +sleep(1) +pwm.ChangeDutyCycle(7.5) # neutral position +sleep(1) +pwm.ChangeDutyCycle(10) # right +90 deg position +sleep(1) +``` + +## ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ + +Π§Ρ‚ΠΎΠ±Ρ‹ миссия Π±Ρ‹Π»Π° достигнута Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… нашСй досягаСмости, ΠΎΡ‚ нас Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Python. + +ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠΎΠ΄ миссии. + +```python +import threading +import time +import rospy +from clover import srv +from std_srvs.srv import Trigger +import RPi.GPIO as GPIO + +rospy.init_node('flight') + +get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry) +navigate = rospy.ServiceProxy('navigate', srv.Navigate) +navigate_global = rospy.ServiceProxy('navigate_global', srv.NavigateGlobal) +set_position = rospy.ServiceProxy('set_position', srv.SetPosition) +set_velocity = rospy.ServiceProxy('set_velocity', srv.SetVelocity) +set_attitude = rospy.ServiceProxy('set_attitude', srv.SetAttitude) +set_rates = rospy.ServiceProxy('set_rates', srv.SetRates) +land = rospy.ServiceProxy('land', Trigger) + +servo1 = 33 # PWM pins +servo2 = 32 + +GPIO.setmode(GPIO.BOARD) #set pin numbering system + +GPIO.setup(servo1,GPIO.OUT) +GPIO.setup(servo2,GPIO.OUT) + +pwm1 = GPIO.PWM(servo1,50) #create PWM instance with frequency +pwm2 = GPIO.PWM(servo2,50) + +pwm1.start(0) #start PWM of required Duty Cycle +pwm2.start(0) + + +def servo_drop(seconds): #function to drop seed capsules from 2 tanks + print("Dropping") + + i = 1 #variable to choose which tank + for num in range(seconds/2): + if(i == 1): #first tank + pwm1.ChangeDutyCycle(10) # release one seed capsule + time.sleep(0.5) + pwm1.ChangeDutyCycle(5) # push then drop the capsule + time.sleep(0.5) + i = 2 #changing the variable for to use the second tank in next dropping + + elif(i == 2): #first tank + pwm2.ChangeDutyCycle(10) # release one seed capsule + time.sleep(0.5) + pwm2.ChangeDutyCycle(5) # push then drop the capsule + time.sleep(0.5) + i = 1 #changing the variable for to use the first tank in next dropping + + print(num) + time.sleep(2) + + +if name == "main": + # Take off and drone 10m above the ground + navigate(x=0, y=0, z=10, frame_id='body', auto_arm=True) + + # rospy waits for 10 seconds to take off + rospy.sleep(10) + + # Dropping starts simultaneuously with flying forwards 5 meters + d = threading.Thread(target=servo_drop, args=(18,)) # 18 is the sum of all the time that the drone hovers after take off + d.start() + + navigate(x=5, y=0, z=0, frame_id='body') + + #rospy waits for 8 seconds to fly foward + rospy.sleep(8) + + # Fly right 1 m + navigate(x=0, y=1, z=0, frame_id='body') + + #rospy waits for 2 seconds to fly right + rospy.sleep(2) + + # Fly backward 5 m + navigate(x=-5, y=0, z=0, frame_id='body') + + #rospy waits for 8 seconds to fly backward + rospy.sleep(8) + + # Perform landing + land() + +pwm1.stop() +pwm2.stop() +GPIO.cleanup() +``` + +### Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° + +- [Deforestation explained](https://www.nationalgeographic.com/environment/article/deforestation) +- http://www.fao.org/fileadmin/templates/rap/files/NRE/Forestry_Group/Landslide_PolicyBrief.pdf +- [Global Forest Change](https://earthenginepartners.appspot.com/) +- https://web.archive.org/web/20090115211020/http://www.rmaf.org.ph/Awardees/Biography/BiographyFukuokaMas.htm +- http://www.guerrillagarpting.org/ggseedbombs.html + +## Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ MINIONS + +Особая Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ ΠœΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎΠΌΡƒ унивСрситСту Ала-Π’ΠΎΠΎ Π·Π° финансированиС Π½Π°Π±ΠΎΡ€ΠΎΠ² Clover 4. + + diff --git a/docs/ru/setup.md b/docs/ru/setup.md index 657ea8e2..460d888c 100644 --- a/docs/ru/setup.md +++ b/docs/ru/setup.md @@ -29,7 +29,9 @@ Для ΠšΠ»Π΅Π²Π΅Ρ€Π°, Π² особСнности для осущСствлСния Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅Ρ‚ΠΎΠ², рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ PX4 ΠΎΡ‚ Copter Express. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Π½Π° GitHub β€” **ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ**. -Π”Π°Π»Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ Π² ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€. +> **Info** Для ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠ² с Pixhawk (ΠšΠ»Π΅Π²Π΅Ρ€ 2) сущСствуСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ вСрсия ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ смотритС Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ "[ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°](firmware.md)". + +Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ Π² ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€: QGroundControl firmware upload @@ -68,12 +70,12 @@ ### Π’Ρ‹Π±ΠΎΡ€ Ρ€Π°ΠΌΡ‹ -QGroundControl frame selection +QGroundControl frame selection 1. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ *Vehicle Setup*. 2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ мСню *Airframe*. 3. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏ Ρ€Π°ΠΌΡ‹ *Quadrotor X*. -4. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ Ρ€Π°ΠΌΡ‹ *Generic Quadrotor X*. +4. Для ΠšΠ»Π΅Π²Π΅Ρ€Π° 4 Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ° Ρ€Π°ΠΌΡ‹ *COEX Clover 4*. Π’ ΠΈΠ½ΠΎΠΌ случаС – *Generic Quadrotor X*. 5. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ΡΡŒ Π² Π½Π°Ρ‡Π°Π»ΠΎ списка ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ *Apply and Restart*, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ *Apply*. 6. Π”ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ примСнСния настроСк ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. @@ -87,6 +89,8 @@ #### Настройка PID-рСгуляторов +> **Info** ИспользованиС Ρ‚ΠΈΠΏΠ° Ρ€Π°ΠΌΡ‹ *COEX Clover 4* Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Π²ΠΎΠ΄Π° коэффициСнтов PID. + ##### УсрСднСнныС коэффициСнты PID для ΠšΠ»Π΅Π²Π΅Ρ€Π° 4 * `MC_PITCHRATE_P` = 0.087 diff --git a/docs/ru/simple_offboard.md b/docs/ru/simple_offboard.md index a535dee2..1a1d6714 100644 --- a/docs/ru/simple_offboard.md +++ b/docs/ru/simple_offboard.md @@ -295,6 +295,8 @@ set_velocity(vx=0.4, vy=0.0, vz=0, yaw=float('nan'), yaw_rate=0.4, frame_id='bod * `thrust` – ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π³Π°Π·Π° ΠΎΡ‚ 0 (Π½Π΅Ρ‚ Π³Π°Π·Π°, ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€Ρ‹ остановлСны) Π΄ΠΎ 1 (ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π³Π°Π·). * `auto_arm` – пСрСвСсти ΠΊΠΎΠΏΡ‚Π΅Ρ€ Π² `OFFBOARD` ΠΈ Π·Π°Π°Ρ€ΠΌΠΈΡ‚ΡŒ автоматичСски (**ΠΊΠΎΠΏΡ‚Π΅Ρ€ Π²Π·Π»Π΅Ρ‚ΠΈΡ‚**); +ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вращСния `yaw_rate` (ΠΏΡ€ΠΈ Π²ΠΈΠ΄Π΅ свСрху) – ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой, `pitch_rate` – Π²ΠΏΠ΅Ρ€Π΅Π΄, `roll_rate` – Π²Π»Π΅Π²ΠΎ. + ### land ΠŸΠ΅Ρ€Π΅Π²Π΅ΡΡ‚ΠΈ ΠΊΠΎΠΏΡ‚Π΅Ρ€ Π² [Ρ€Π΅ΠΆΠΈΠΌ](modes.md) посадки (`AUTO.LAND` ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ). diff --git a/docs/ru/simulation.md b/docs/ru/simulation.md index 3d96d8ef..60ca91d4 100644 --- a/docs/ru/simulation.md +++ b/docs/ru/simulation.md @@ -34,3 +34,9 @@ * ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ROS ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ Gazebo; + +## Π’ΠΈΠ΄Π΅ΠΎ + +ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΎΠ±Π·ΠΎΡ€ симулятора: + + diff --git a/docs/ru/sitl.md b/docs/ru/sitl.md index 8bd4b8ac..4d9e9d62 100644 --- a/docs/ru/sitl.md +++ b/docs/ru/sitl.md @@ -198,7 +198,7 @@ catkin_make ```bash . devel/setup.bash -roslaunch clover sitl.launch +roslaunch clover_simulation simulator.launch type:=none ``` Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функциями прСдоставляСмыми нашим ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ, Π² Π½ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° подтянитС зависимости ΠΈΠ· Ρ„Π°ΠΉΠ»Π° `setup`: @@ -207,4 +207,4 @@ roslaunch clover sitl.launch source ~/catkin_ws/devel/setup.bash ``` -Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ всСми возмоТностями ΠΏΠ°ΠΊΠ΅Ρ‚Π° `Clover` Π² вашСм симуляторС. +Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ всСми возмоТностями ΠΏΠ°ΠΊΠ΅Ρ‚Π° `clover` Π² вашСм симуляторС. diff --git a/docs/ru/wall_aruco.md b/docs/ru/wall_aruco.md index 0136de00..c2621394 100644 --- a/docs/ru/wall_aruco.md +++ b/docs/ru/wall_aruco.md @@ -1,47 +1,47 @@ # Навигация ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ArUco-ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°ΠΌ -Алгоритм Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ArUco-ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°ΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² ΠΎΠ±Ρ€Π°Π·Π΅ ΠšΠ»Π΅Π²Π΅Ρ€Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π³ΠΈΠ±ΠΊΡƒΡŽ настройку полоТСния ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² Π² пространствС, Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ ΠΈΡ… Π½Π° любой повСрхности, ΠΏΠΎΠ΄ Π»ΡŽΠ±Ρ‹ΠΌ ΡƒΠ³Π»ΠΎΠΌ. +Алгоритм Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ArUco-ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°ΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² ΠΎΠ±Ρ€Π°Π·Π΅ ΠšΠ»Π΅Π²Π΅Ρ€Π°, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π³ΠΈΠ±ΠΊΡƒΡŽ настройку полоТСния ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² Π² пространствС, Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ ΠΈΡ… Π½Π° любой повСрхности, ΠΏΠΎΠ΄ Π»ΡŽΠ±Ρ‹ΠΌ ΡƒΠ³Π»ΠΎΠΌ. ## Установка Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ крСплСния ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ -Для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ распознавания ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ² Π±Ρ‹Π» Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Ρƒ. +Для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ распознавания ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ² Π±Ρ‹Π» Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Ρƒ. -> **Note** ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» позволяСт Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ располоТСниС ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π² пространствС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΏΡ‚Π΅Ρ€Π° Π»ΡŽΠ±Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Для удобства, Π΄Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ установки ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ΄ 90Β° ΠΊ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Ρƒ, ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ носа ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. +> **Note** ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» позволяСт Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ располоТСниС ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π² пространствС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΏΡ‚Π΅Ρ€Π° Π»ΡŽΠ±Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Для удобства Π΄Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ установки ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ΄ 90Β° ΠΊ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Ρƒ, ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ носа ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. ### ΠšΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, 3D ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ РаспСчатайтС [ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹](models.md#ΠΊΠ»Π΅Π²Π΅Ρ€-3). -УстановитС ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ мСсто, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΊΠ°ΠΌΠ΅Ρ€Π΅ Π±Ρ‹Π»ΠΎ минимальноС количСство Π»ΠΈΡˆΠ½ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²(Π·Π°Ρ‰ΠΈΡ‚Π°, Π½ΠΎΠΆΠΊΠΈ, ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€Ρ‹, Π»ΡƒΡ‡ΠΈ), всС эти части Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° распознавании ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ². +УстановитС ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ мСсто Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΊΠ°ΠΌΠ΅Ρ€Π΅ Π±Ρ‹Π»ΠΎ минимальноС количСство Π»ΠΈΡˆΠ½ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π·Π°Ρ‰ΠΈΡ‚Π°, Π½ΠΎΠΆΠΊΠΈ, ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€Ρ‹, Π»ΡƒΡ‡ΠΈ) β€” всС это Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° распознавании ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ². ## Настройка располоТСния ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ -Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ располоТСниС ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ ΡƒΠ³Π»ΠΎΠΌ, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `main_camera.launch`, располоТСнный Π² `~/catkin_ws/src/clover/clover/launch/`. +Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ располоТСниС ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ ΡƒΠ³Π»ΠΎΠΌ, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `main_camera.launch`, располоТСнный Π² `~/catkin_ws/src/clover/clover/launch/`. ```bash nano ~/catkin_ws/src/clover/clover/launch/main_camera.launch ``` -### ВСрсии 0.20> +### ВСрсии 0.20+ -Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… `direction_x`, `direction_y`, установитС пустыС значСния Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ строки: +Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… `direction_x`, `direction_y` установитС пустыС значСния Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ строки: ```bash sed -i "/direction_z/s/default=\".*\"/default=\"\"/" /home/pi/catkin_ws/src/clover/clover/launch/main_camera.launch sed -i "/direction_y/s/default=\".*\"/default=\"\"/" /home/pi/catkin_ws/src/clover/clover/launch/main_camera.launch ``` -ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… строк ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ строку ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π½ΠΈΠΆΠ΅: +ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… строк ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ строку, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π½ΠΈΠΆΠ΅: -``` +```xml ``` -> **Note** Π•Π΄ΠΈΠ½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° конфигурация ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Ссли Π²Ρ‹ вставляСтС ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ строку, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Для опрСдСлСния этого, Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ подсвСтка синтаксиса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ строка Π±ΡƒΠ΄Π΅Ρ‚ подсвСчСна Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Для коммСнтирования Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† строки Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ символы ** соотвСтствСнно. +> **Note** ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° конфигурация ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ β€” Ссли Π²Ρ‹ вставляСтС ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ строку, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Для опрСдСлСния этого Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ подсвСтка синтаксиса β€” активная строка Π±ΡƒΠ΄Π΅Ρ‚ подсвСчСна ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Ρ†Π²Π΅Ρ‚ΠΎΠΌ. Для коммСнтирования Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† строки Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ символы `` соотвСтствСнно. -Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π²Π°ΠΌΠΈ ΠΊΠ°Ρ€Ρ‚Π° ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ [ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ для создания ΠΊΠ°Ρ€Ρ‚ `gen_map.py`](aruco_map.md#настройка-ΠΊΠ°Ρ€Ρ‚Ρ‹-ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ²). Π’ случаС Ссли ваши ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ располоТСны Π² случайном порядкС Π²Π°ΠΌ потрСбуСтся Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΡ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, для этого ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ `~/catkin_ws/src/clover/aruco_map/map` ΠΈ создайтС Ρ„Π°ΠΉΠ» ΠΊΠ°Ρ€Ρ‚Ρ‹ `map_name.txt`. Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π²Π°ΡˆΡƒ ΠΊΠ°Ρ€Ρ‚Ρƒ Π² соотвСтствии с [синтаксисом ΠΊΠ°Ρ€Ρ‚](aruco_map.md#настройка-ΠΊΠ°Ρ€Ρ‚Ρ‹-ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ²). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² со случайным располоТСниСм ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ²: +Если Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π²Π°ΠΌΠΈ ΠΊΠ°Ρ€Ρ‚Π΅, ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π²Π½ΠΎΠ΅ расстояниС ΠΏΠΎ осям *X* ΠΈ *Y*, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ [ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ для создания ΠΊΠ°Ρ€Ρ‚ `gen_map.py`](aruco_map.md#настройка-ΠΊΠ°Ρ€Ρ‚Ρ‹-ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ²). Π’ ΠΈΠ½ΠΎΠΌ случаС, Π²Π°ΠΌ потрСбуСтся Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΡ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ β€” для этого ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ `~/catkin_ws/src/clover/aruco_map/map` ΠΈ создайтС Ρ„Π°ΠΉΠ» ΠΊΠ°Ρ€Ρ‚Ρ‹ `map_name.txt`. Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π²Π°ΡˆΡƒ ΠΊΠ°Ρ€Ρ‚Ρƒ Π² соотвСтствии с [синтаксисом ΠΊΠ°Ρ€Ρ‚](aruco_map.md#настройка-ΠΊΠ°Ρ€Ρ‚Ρ‹-ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ²). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² со случайным располоТСниСм ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ²: -> **Hint** ΠŸΡ€ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ², ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π³ΠΎ отмСряйтС расстояниС Π΄ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ². Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС 8 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π² случаС Ссли всС ваши ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 5: индСкс ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Π΅Π³ΠΎ располоТСниС Π² пространствС ΠΏΠΎ осям x, y, z соотвСтствСнно. +> **Hint** ΠŸΡ€ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² Π² качСствС Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π³ΠΎ отмСряйтС расстояниС Π΄ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ². Если всС ваши ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС 8 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π° ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 5: индСкс ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Π΅Π³ΠΎ располоТСниС Π² пространствС ΠΏΠΎ осям x, y, z соотвСтствСнно. ``` 106 0.33 0 0 0 @@ -49,9 +49,9 @@ sed -i "/direction_y/s/default=\".*\"/default=\"\"/" /home/pi/catkin_ws/src/clov 153 0.40 -0.56 1.36 0 ``` -ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠ°Ρ€Ρ‚Π° Π²Π²Π΅Π΄Π΅Π½Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅, для этого ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `aruco.launch`, располоТСнный Π² `~/catkin_ws/src/clover/clover/launch/`. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² Π½Π΅ΠΌ строку ``, Π³Π΄Π΅ `map_name.txt` Π½Π°Π·Π²Π°Π½ΠΈΠ΅ вашСго Ρ„Π°ΠΉΠ»Π° с ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ. +ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠ°Ρ€Ρ‚Ρƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ β€” для этого ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `aruco.launch`, располоТСнный Π² `~/catkin_ws/src/clover/clover/launch/`. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² Π½Π΅ΠΌ строку ``, Π³Π΄Π΅ `map_name.txt` Π½Π°Π·Π²Π°Π½ΠΈΠ΅ вашСго Ρ„Π°ΠΉΠ»Π° с ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ. -ΠŸΡ€ΠΈ использовании ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² Π½Π΅ привязанных ΠΊ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ плоскостям(ΠΏΠΎΠ», ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `known_tilt`, ΠΊΠ°ΠΊ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ `aruco_detect`, Ρ‚Π°ΠΊ ΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ `aruco_map` Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π΅. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это автоматичСски, Π²Π²Π΅Π΄ΠΈΡ‚Π΅: +ΠŸΡ€ΠΈ использовании ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ², Π½Π΅ привязанных ΠΊ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ плоскостям(ΠΏΠΎΠ», ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `known_tilt` ΠΊΠ°ΠΊ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ `aruco_detect`, Ρ‚Π°ΠΊ ΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ `aruco_map` Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π΅. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это автоматичСски, Π²Π²Π΅Π΄ΠΈΡ‚Π΅: ```bash sed -i "/known_tilt/s/value=\".*\"/value=\"\"/" /home/pi/catkin_ws/src/clover/clover/launch/aruco.launch diff --git a/docs/ru/zaural_viking.md b/docs/ru/zaural_viking.md new file mode 100644 index 00000000..5796cf60 --- /dev/null +++ b/docs/ru/zaural_viking.md @@ -0,0 +1,58 @@ +# ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ + +Автор: [**Колмаков Бтанислав Π’ΠΈΡ‚Π°Π»ΡŒΠ΅Π²ΠΈΡ‡**](https://t.me/stassauer). + +[CopterHack-2021](copterhack2021.md), ΠΊΠΎΠΌΠ°Π½Π΄Π° Π—Π°ΡƒΡ€Π°Π»ΡŒΡΠΊΠΈΠΉ Π²ΠΈΠΊΠΈΠ½Π³. ΠœΠ΅ΡΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹: Π“ΠΠΠžΠ£ КО «ЦРБК», Π³. ΠšΡƒΡ€Π³Π°Π½. + +Π’ ΠΌΠΈΡ€Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΎΡ‚ΠΎΡ€Π½Ρ‹Ρ… бСспилотных Π»Π΅Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΠΎΠ² (Π‘ΠŸΠ›Π). Π‘Π°ΠΌΡ‹ΠΉ распространСнный ΠΈ доступный способ знакомства с Π‘ΠŸΠ›Π – ΠΏΠΎΠΊΡƒΠΏΠΊΠ° ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π° Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅ Π±Ρ‹Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ смоТСт лишь Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ Π½Π°Π²Ρ‹ΠΊΠΈ пилотирования ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π°ΡΡ€ΠΎΡ„ΠΎΡ‚ΠΎΡΡŠΠ΅ΠΌΠΊΡƒ. +Для получСния большСго количСства Π½Π°Π²Ρ‹ΠΊΠΎΠ² ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ большС. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ конструкторах для сборки ΠΏΠΈΠ»ΠΎΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π»Π΅Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π°. + +Π’ Π½ΠΎΠ³Ρƒ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ компания Copter Express (COEX), разрабатывая ΠΈ модСрнизируя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Ρ‹ Clover. +ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π»Π΅Ρ‚Π°ΡŽΡ‰Π΅Π³ΠΎ автомобиля Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π½Π° основС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π° Clover 4 Code с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Ρ€ΠΎΠ²Π½ΠΎΠΉ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ повСрхности, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠ»Π΅ΡΠ½ΡƒΡŽ Π±Π°Π·Ρƒ. Данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. + +Π—Π°Π΄ΡƒΠΌΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π°Ρ‡Π°Π»Π°ΡΡŒ с конструирования основы ΠΏΠΎΠ΄ элСктронныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° гусСничной Π±Π°Π·Π΅ (рис. 1). Π’ качСствС основных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π±Ρ€Π°Π» ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ COEX Pix ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Raspberry Pi 3 B+. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ срСду программирования [Blockly](blocks.md), ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ привСсти Ρ€ΠΎΠ±ΠΎΡ‚Π° Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. + +
    + + +
    + +*Рис. 1. ГусСничный Ρ€ΠΎΠ±ΠΎΡ‚ с COEX Pix ΠΈ Raspberry Pi 3 B+.* + +Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ этапом Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ колСсной Π±Π°Π·Ρ‹ для ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π° стало использованиС конструктора чСтырСхколСсной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Pirate. ВСс ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ² составил 345 Π³Ρ€Π°ΠΌΠΌ (рис. 2). Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ увСличСния Π²Π·Π»Π΅Ρ‚Π½ΠΎΠΉ массы ΠΈ для увСличСния мощности, принято ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΠ΅Π»Π»Π΅Ρ€Ρ‹ 3-лопастныС 6040 (рис. 3). + +
    + + +
    + +*Рис. 2. ВСс ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Рис. 3. Бобранная конструкция.* + +Для облСгчСния вСса двухколСсной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π½Π° 3D-ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π΅ основу для колСсной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (рис. 4), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ PETG пластик. Π”Π°Π½Π½Ρ‹ΠΉ пластик ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ высокими прочностными характСристиками, Ρ‡Π΅ΠΌ распространСнныС ABS ΠΈ PLA пластики. + + + +*Рис. 4. Основа ΠΈΠ· пластика.* + +Бсылка Π½Π° модСль: https://drive.google.com/file/d/1_KPZfldSXNGiHbgnVBgMle-JvKtcDZHm/view?usp=sharing. + +ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° содСрТит: крСплСния ΠΏΠΎΠ΄ ΠΌΠΎΡ‚ΠΎΡ€-Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€Ρ‹, отвСрстия для Π»Π°Π·Π΅Ρ€Π½ΠΎΠ³ΠΎ Π΄Π°Π»ΡŒΠ½ΠΎΠΌΠ΅Ρ€Π° ΠΈ Pi ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ. Π’Π°ΠΊΠΆΠ΅ Π² основС прСдусмотрСны ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ½Ρ‹Π΅ отвСрстия для ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ° ΠΊ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Ρƒ ΠΈ облСгчСния конструкции. + +Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом для сниТСния вСса, стало Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ микросхСму Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»Π΅ΠΉ L293D (рис. 5), вмСсто модуля Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»Π΅ΠΉ L298N (рис. 6). + +
    + + +
    + +*Рис. 5. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»Π΅ΠΉ L293D. Рис. 6. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»Π΅ΠΉ L298N.* + +Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ всСх ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½ΠΈΠΉ, вСс Π»Π΅Ρ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ составил 1 ΠΊΠ³ (рис. 7). + + + +*Рис. 7. ΠžΠ±Ρ‰ΠΈΠΉ Π²ΠΈΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π»Π΅Ρ‚Π°ΡŽΡ‰Π΅Π³ΠΎ автомобиля.* + +Π˜ΡΠΏΡ‹Ρ‚Π°Π½ΠΈΡ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°, скрСщСнного с мобильной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ, Π΄ΠΎΠΊΠ°Π·Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€ΠΎΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. + +Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом развития ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° станСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² распознавания Π»ΠΈΠ½ΠΈΠΈ, Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ². diff --git a/docs/ru/zerotire_vpn.md b/docs/ru/zerotire_vpn.md new file mode 100644 index 00000000..c5ec2fcb --- /dev/null +++ b/docs/ru/zerotire_vpn.md @@ -0,0 +1,185 @@ +# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ сСти ZeroTire ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΉ + +## Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ настройка сСти ZeroTire + +1. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° сайт [ZeroTire](https://www.zerotier.com/). + + + +2. Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ Π² ZeroTire. + + + +3. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π² свой Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚. + +4. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ *Create A Network*. + + + +5. ПослС этого Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Π²Π°ΠΌΠΈ ΡΠ΅Ρ‚ΡŒ, Π΅Π΅ ID ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Для настройки сСти Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° Π½Π΅Π΅. + + + +6. Π’ ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя сСти ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. + + + +7. ΠŸΡ€ΠΎΠ»ΠΈΡΡ‚Π°ΠΉΡ‚Π΅ Π½ΠΈΠΆΠ΅, Π΄ΠΎ Π³Ρ€Π°Ρ„Ρ‹ *Members*. Π’ Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ написано ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² сСти Π½Π΅Ρ‚Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. + + + +8. Устройства ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΊ сСти Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€Π°Ρ„Π΅, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ сСти, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ чСкбокс *Auth?*. ΠŸΡ€ΠΈ этом, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌΡƒ устройству автоматичСски выдастся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ IP адрСс, Π² дальнСйшСм ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для связи с Π΄Π°Π½Π½Ρ‹ΠΌ устройством. + +
    + + +
    + + > **Hint** Π£ΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΠΌΠ΅Π½Π° для Π½ΠΎΠ²Ρ‹Ρ… устройств, этом ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π² дальнСйшСм ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΈΡ… Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. + +9. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ послСдний шаг для всСх ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… устройств. + + > **Info** Π‘Π΅Ρ‚ΡŒ ZeroTire Π² случаС бСсплатного использования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΎ 50 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. + +## Настройка Π½Π° Windows + +### Установка прилоТСния + +1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° сайт ZeroTire. + + + +2. НаТмитС Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡƒ Windows. + + + +3. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ ΠΈ запуститС Ρ„Π°ΠΉΠ» `ZeroTire One.msi`. + +
    + + +
    + +### ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ сСти + +1. ЗапуститС ZeroTire One. + +2. НаТмитС Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡƒ ZeroTire One Π² ΠΏΠ°Π½Π΅Π»ΠΈ Π·Π°Π΄Π°Ρ‡. + +3. НаТмитС Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ *Join Network...* для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ сСти. + + + +4. Π’ появившСмся ΠΎΠΊΠ½Π΅ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ID вашСй сСти ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ *Join*. + + + +5. Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ использованиС Π½ΠΎΠ²ΠΎΠΉ сСти. + + + +## Настройка Π½Π° iOS + +### Установка прилоТСния + +1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° сайт ZeroTire. + + + +2. НаТмитС Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡƒ iOS. + + + +3. УстановитС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ *ZeroTire One*. + +### ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ сСти + +1. ЗапуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ *ZeroTire One*. + +2. НаТмитС Π½Π° *+* для добавлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. + + + +3. ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. + + + +4. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ID вашСй сСти ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ *Add Network*. + + + +5. ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ VPN. + +6. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΊ VPN сСти, сдвинув ΠΏΠΎΠ»Π·ΡƒΠ½ΠΎΠΊ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ сСти. + +
    + + +
    + +## Настройка Π½Π° Linux (PC, Raspberry Pi) + +### Установка прилоТСния + +1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ консоль, для этого Π½Π°ΠΆΠΌΠΈΡ‚Π΅ сочСтаниС клавиш *Ctrl* + *Alt* + *T* ΠΈΠ»ΠΈ Π² строкС поиска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ *Terminal* + +2. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ установки ZeroTire. + + ```bash + curl -s https://install.zerotier.com | sudo bash + ``` + +### ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ сСти + +1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ консоль. + +2. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ `sudo zerotire-cli join network-id`, Π³Π΄Π΅ `netwirk-id` это ID вашСй сСти. + + + +3. ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ, Π² консоль Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС. + +## Установка ΠΈ настройка Π½Π° macOS + +### Установка прилоТСния + +1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° сайт ZeroTire. + + + +2. НаТмитС Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡƒ macOS. + + + +3. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ ΠΈ запуститС Ρ„Π°ΠΉΠ» `ZeroTire One.pkg`. + +4. УстановитС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ZeroTire One. + +### ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ сСти + +1. ЗапуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ZeroTire One. + +2. Π’ ΠΏΠ°Π½Π΅Π»Π΅ Π·Π°Π΄Π°Ρ‡ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡƒ ZeroTire One. + +3. Π’ ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ *Join Network...*. + + + +4. Π’ ΠΏΠΎΠ»Π΅ *Enter Network ID* Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ID вашСй сСти. + + + +## ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠΏΡ‚Π΅Ρ€Ρƒ + +1. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ZeroTire Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ соСдинСниС с ΡΠ΅Ρ‚ΡŒΡŽ Π½Π° Π΄Ρ€ΠΎΠ½Π΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ устройствС. Для этого ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ вас устройства ΠΈΠΌΠ΅ΡŽΡ‚ статус *Online*. + + + +2. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ всСх устройств Π΅ΡΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ IP адрСса - *Managed IPs*. + +3. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ GQC ΠΈ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ *Comm Links* Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ TCP ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Π°Π² IP Π΄Ρ€ΠΎΠ½Π°. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ [Ρ‚ΡƒΡ‚](gcs_bridge.md). + +
    + + +
    diff --git a/redirects.json b/redirects.json index cc6db68b..134dae7c 100644 --- a/redirects.json +++ b/redirects.json @@ -54,7 +54,7 @@ { "from": "snippets/", "to": "ru/snippets.html" }, { "from": "optical_flow/", "to": "ru/optical_flow.html" }, { "from": "laser/", "to": "ru/laser.html" }, - { "from": "led/", "to": "ru/leds.html" }, + { "from": "led/", "to": "en/leds.html" }, { "from": "leds/", "to": "ru/leds.html" }, { "from": "hostname/", "to": "en/hostname.html" }, { "from": "programming/", "to": "en/programming.html" }, diff --git a/roswww_static/CHANGELOG.rst b/roswww_static/CHANGELOG.rst new file mode 100644 index 00000000..c90411fd --- /dev/null +++ b/roswww_static/CHANGELOG.rst @@ -0,0 +1,8 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package roswww_static +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0.21.1 (2020-11-17) +------------------- +* First release of roswww_static package to ROS +* Contributors: Oleg Kalachev diff --git a/roswww_static/package.xml b/roswww_static/package.xml index 8c73604f..b696c6c7 100644 --- a/roswww_static/package.xml +++ b/roswww_static/package.xml @@ -1,7 +1,7 @@ roswww_static - 0.0.0 + 0.21.1 Static web pages for ROS packages Oleg Kalachev MIT