diff --git a/.markdownlint.json b/.markdownlint.json index 632b7444..b1dbbec8 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -23,6 +23,7 @@ "ROS Melodic", "ROS Noetic", "OpenCV", + "OpenVPN", "Gazebo", "GitHub", "FPV", @@ -107,7 +108,9 @@ "UDP", "QR", "Li-ion", - "Nvidia" + "Nvidia", + "VirtualBox", + "VMware" ], "code_blocks": false }, diff --git a/.travis.yml b/.travis.yml index 373e6594..b49a2d7f 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: 50 + depth: 25 jobs: fast_finish: true include: @@ -38,7 +38,7 @@ jobs: - cp images/*.zip imgcache after_success: - sudo chmod -R 777 * - - cd images && zip ${IMAGE_NAME}.zip ${IMAGE_NAME} && stat --printf="Compressed image size:%s\n" ${IMAGE_NAME}.zip + - cd images && zip -9 ${IMAGE_NAME}.zip ${IMAGE_NAME} && stat --printf="Compressed image size:%s\n" ${IMAGE_NAME}.zip before_deploy: # Set up git user name and tag this commit - git config --local user.name "goldarte" diff --git a/README.md b/README.md index e5ac72d7..b2a71ac2 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ -# COEX Clover Drone Kit +# cloverπŸ€: create autonomous drones easily -Clover Drone +COEX Clover Drone -Clover is an educational programmable drone kit consisting of an unassembled quadcopter, open source software and documentation. The kit includes Pixracer-compatible autopilot running PX4 firmware, Raspberry Pi 4 as companion computer, a camera for computer vision navigation as well as additional sensors and peripheral devices. +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. -The main documentation is available [on Gitbook](https://clover.coex.tech/). +COEX Clover Drone is an educational programmable drone kit, suited perfectly for running clover software. The kit is shipped unassembled and includes Pixracer-compatible autopilot running PX4 firmware, Raspberry Pi 4 as a companion computer, a camera for computer vision navigation as well as additional sensors and peripheral devices. Batteries included. -Official website: coex.tech/clover. +The main documentation is available at [https://clover.coex.tech](https://clover.coex.tech/). Official website: [coex.tech/clover](https://coex.tech/clover). + +[__Support us on Kickstarter!__](https://www.kickstarter.com/projects/copterexpress/cloverdrone) ## Video compilation diff --git a/builder/assets/examples/leds.py b/builder/assets/examples/leds.py index ee78fc2c..7c10dff5 100644 --- a/builder/assets/examples/leds.py +++ b/builder/assets/examples/leds.py @@ -7,19 +7,25 @@ rospy.init_node('leds') set_effect = rospy.ServiceProxy('led/set_effect', SetLEDEffect) # define proxy to ROS-service +print('Fill red') set_effect(r=255, g=0, b=0) # fill strip with red color rospy.sleep(2) +print('Fill green') set_effect(r=0, g=100, b=0) # fill strip with green color rospy.sleep(2) +print('Fade to blue') set_effect(effect='fade', r=0, g=0, b=255) # fade to blue color rospy.sleep(2) +print('Flash red') set_effect(effect='flash', r=255, g=0, b=0) # flash twice with red color -rospy.sleep(5) +rospy.sleep(2) +print('Blink white') set_effect(effect='blink', r=255, g=255, b=255) # blink with white color rospy.sleep(5) +print('Rainbow') set_effect(effect='rainbow') # show rainbow diff --git a/builder/image-build.sh b/builder/image-build.sh index af0fabf1..bfc25893 100755 --- a/builder/image-build.sh +++ b/builder/image-build.sh @@ -105,7 +105,7 @@ ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/monkey. # software install ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-software.sh' # examples -${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/examples' '/home/pi/' +${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/examples' '/home/pi/' # TODO: symlink? # network setup ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-network.sh' # avahi setup diff --git a/builder/image-ros.sh b/builder/image-ros.sh index 6e69f6c2..53a0a1fc 100755 --- a/builder/image-ros.sh +++ b/builder/image-ros.sh @@ -145,6 +145,9 @@ catkin_make run_tests #&& catkin_test_results echo_stamp "Change permissions for catkin_ws" chown -Rf pi:pi /home/pi/catkin_ws +echo_stamp "Change permissions for examples" +chown -Rf pi:pi /home/pi/examples + echo_stamp "Setup ROS environment" cat << EOF >> /home/pi/.bashrc LANG='C.UTF-8' diff --git a/clover/src/simple_offboard.cpp b/clover/src/simple_offboard.cpp index 08c6c6b1..bc66d511 100644 --- a/clover/src/simple_offboard.cpp +++ b/clover/src/simple_offboard.cpp @@ -496,10 +496,16 @@ inline void checkManualControl() } if (check_kill_switch) { - const int KILL_SWITCH_BIT = 12; // https://github.com/PX4/Firmware/blob/c302514a0809b1765fafd13c014d705446ae1113/src/modules/mavlink/mavlink_messages.cpp#L3975 - bool kill_switch = manual_control.buttons & (1 << KILL_SWITCH_BIT); + // switch values: https://github.com/PX4/PX4-Autopilot/blob/c302514a0809b1765fafd13c014d705446ae1113/msg/manual_control_setpoint.msg#L3 + const uint8_t SWITCH_POS_NONE = 0; // switch is not mapped + const uint8_t SWITCH_POS_ON = 1; // switch activated + const uint8_t SWITCH_POS_MIDDLE = 2; // middle position + const uint8_t SWITCH_POS_OFF = 3; // switch not activated - if (kill_switch) + const int KILL_SWITCH_BIT = 12; // https://github.com/PX4/Firmware/blob/c302514a0809b1765fafd13c014d705446ae1113/src/modules/mavlink/mavlink_messages.cpp#L3975 + uint8_t kill_switch = (manual_control.buttons & (0b11 << KILL_SWITCH_BIT)) >> KILL_SWITCH_BIT; + + if (kill_switch == SWITCH_POS_ON) throw std::runtime_error("Kill switch is on"); } } diff --git a/clover_blocks/programs/examples/aruco-marker.xml b/clover_blocks/programs/examples/aruco-marker.xml index 3875911a..ee31ad8f 100644 --- a/clover_blocks/programs/examples/aruco-marker.xml +++ b/clover_blocks/programs/examples/aruco-marker.xml @@ -29,7 +29,7 @@ - 0 + 1 diff --git a/clover_blocks/programs/examples/led-compass.xml b/clover_blocks/programs/examples/led-compass.xml index a6c48cc3..594bfffc 100644 --- a/clover_blocks/programs/examples/led-compass.xml +++ b/clover_blocks/programs/examples/led-compass.xml @@ -1,106 +1,91 @@ - - led_count - - - led_count - - - 58 + + WHILE + + + TRUE - - - WHILE - - - TRUE - + + + FILL + + + #000000 + - - - FILL - - - #000000 + + + + + 0 - - - - - - 0 + + MULTIPLY + + + 1 - - MULTIPLY + + DIVIDE - + 1 - - DIVIDE + + ADD - + 1 - - ADD - - - 1 - - - MAP - - - 0 - - - - - - - 180 + + MAP + + + 0 - - 360 + + 180 - - 1 + + 360 - - led_count - - - - #3366ff + + + 1 + + + + + + + + #3366ff + + + + + + + 0.1 - - - - - 0.1 - - - - - + - + - + \ No newline at end of file diff --git a/clover_blocks/www/blocks.js b/clover_blocks/www/blocks.js index 71307c07..8757cb83 100644 --- a/clover_blocks/www/blocks.js +++ b/clover_blocks/www/blocks.js @@ -353,6 +353,17 @@ Blockly.Blocks['set_effect'] = { } }; +Blockly.Blocks['led_count'] = { + init: function () { + this.appendDummyInput() + .appendField("LED count"); + this.setOutput(true, "Number"); + this.setColour(COLOR_LED); + this.setTooltip("Returns the number of LEDs (configured in led.launch)."); + this.setHelpUrl(DOCS_URL + '#' + this.type); + } +}; + Blockly.Blocks['take_off'] = { init: function () { this.appendValueInput("ALT") @@ -535,7 +546,7 @@ Blockly.Blocks['gpio_read'] = { this.setOutput(true, "Boolean"); this.setColour(COLOR_GPIO); this.setTooltip("Returns if there is voltage on a GPIO pin."); - this.setHelpUrl(DOCS_URL + '#' + this.type); + this.setHelpUrl(DOCS_URL + '#GPIO'); } }; @@ -552,7 +563,7 @@ Blockly.Blocks['gpio_write'] = { this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip("Set GPIO pin level."); - this.setHelpUrl(DOCS_URL + '#' + this.type); + this.setHelpUrl(DOCS_URL + '#GPIO'); } }; @@ -568,7 +579,24 @@ Blockly.Blocks['set_servo'] = { this.setColour(COLOR_GPIO); this.setPreviousStatement(true, null); this.setNextStatement(true, null); - this.setTooltip("Set PWM on a GPIO pin to control servo. PWM is specified in range of 500–2500 ms."); - this.setHelpUrl(DOCS_URL + '#' + this.type); + this.setTooltip("Set PWM on a GPIO pin to control servo. PWM is specified in range of 500–2500 ΞΌs."); + this.setHelpUrl(DOCS_URL + '#GPIO'); + } +}; + +Blockly.Blocks['set_duty_cycle'] = { + init: function () { + this.appendValueInput("PIN") + .setCheck("Number") + .appendField("set GPIO pin"); + this.appendValueInput("DUTY_CYCLE") + .setCheck("Number") + .appendField("to duty cycle"); + this.setInputsInline(true); + this.setColour(COLOR_GPIO); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setTooltip("Set PWM duty cycle on a GPIO pin (better to control LEDs, etc). Duty cycle is set in range of 0–1."); + this.setHelpUrl(DOCS_URL + '#GPIO'); } }; diff --git a/clover_blocks/www/index.html b/clover_blocks/www/index.html index 1fd1fdff..6383f41c 100644 --- a/clover_blocks/www/index.html +++ b/clover_blocks/www/index.html @@ -106,6 +106,7 @@ 0 + @@ -119,6 +120,10 @@ 1 1500 + + 1 + 0.5 + diff --git a/clover_blocks/www/python.js b/clover_blocks/www/python.js index 8c4b0bbf..365dfccf 100644 --- a/clover_blocks/www/python.js +++ b/clover_blocks/www/python.js @@ -15,7 +15,7 @@ Blockly.Python.addReservedWords('_b,_print'); Blockly.Python.addReservedWords('rospy,srv,Trigger,get_telemetry,navigate,set_velocity,land'); Blockly.Python.addReservedWords('navigate_wait,land_wait,wait_arrival,wait_yaw,get_distance'); Blockly.Python.addReservedWords('pigpio,pi,Range'); -Blockly.Python.addReservedWords('SetLEDEffect,set_effect'); +Blockly.Python.addReservedWords('SetLEDEffect,set_effect,led_count,get_led_count'); Blockly.Python.addReservedWords('SetLEDs,LEDState,set_leds'); const IMPORT_SRV = `from clover import srv @@ -87,6 +87,9 @@ function generateROSDefinitions() { Blockly.Python.definitions_['import_set_led'] = 'from led_msgs.srv import SetLEDs\nfrom led_msgs.msg import LEDState'; code += `set_leds = rospy.ServiceProxy('led/set_leds', SetLEDs, persistent=True)\n`; } + if (rosDefinitions.ledStateArray) { + Blockly.Python.definitions_['import_led_state_array'] = 'from led_msgs.msg import LEDStateArray'; + } if (rosDefinitions.navigateWait) { Blockly.Python.definitions_['import_math'] = 'import math'; code += NAVIGATE_WAIT(); @@ -395,22 +398,41 @@ Blockly.Python.set_led = function(block) { } } +const GET_LED_COUNT = `led_count = None + +def get_led_count(): + global led_count + if led_count is None: + led_count = len(rospy.wait_for_message('led/state', LEDStateArray, timeout=10).leds) + return led_count\n`; + +Blockly.Python.led_count = function(block) { + rosDefinitions.ledStateArray = true; + initNode(); + Blockly.Python.definitions_['get_led_count'] = GET_LED_COUNT; + return [`get_led_count()`, Blockly.Python.ORDER_FUNCTION_CALL] +} + function pigpio() { Blockly.Python.definitions_['import_pigpio'] = 'import pigpio'; Blockly.Python.definitions_['init_pigpio'] = 'pi = pigpio.pi()'; } const GPIO_READ = `\ndef gpio_read(pin): - pi.set_mode(pin, pigpio.INPUT) - return pi.read(pin)\n`; + pi.set_mode(pin, pigpio.INPUT) + return pi.read(pin)\n`; const GPIO_WRITE = `\ndef gpio_write(pin, level): - pi.set_mode(pin, pigpio.OUTPUT) - pi.write(pin, level)\n`; + pi.set_mode(pin, pigpio.OUTPUT) + pi.write(pin, level)\n`; const SET_SERVO = `\ndef set_servo(pin, pwm): - pi.set_mode(pin, pigpio.OUTPUT) - pi.set_servo_pulsewidth(pin, pwm)\n`; + pi.set_mode(pin, pigpio.OUTPUT) + pi.set_servo_pulsewidth(pin, pwm)\n`; + +const SET_DUTY_CYCLE = `\ndef set_duty_cycle(pin, duty_cycle): + pi.set_mode(pin, pigpio.OUTPUT) + pi.set_PWM_dutycycle(pin, duty_cycle * 255)\n`; Blockly.Python.gpio_read = function(block) { pigpio(); @@ -434,3 +456,11 @@ Blockly.Python.set_servo = function(block) { var pwm = Blockly.Python.valueToCode(block, 'PWM', Blockly.Python.ORDER_NONE); return `set_servo(${pin}, ${pwm})\n`; } + +Blockly.Python.set_duty_cycle = function(block) { + pigpio(); + Blockly.Python.definitions_['set_duty_cycle'] = SET_DUTY_CYCLE; + var pin = Blockly.Python.valueToCode(block, 'PIN', Blockly.Python.ORDER_NONE); + var dutyCycle = Blockly.Python.valueToCode(block, 'DUTY_CYCLE', Blockly.Python.ORDER_NONE); + return `set_duty_cycle(${pin}, ${dutyCycle})\n`; +} diff --git a/docs/assets/assembling_soldering_clever_4/esc_10.png b/docs/assets/assembling_soldering_clever_4/esc_10.png index bd97009a..90f19303 100644 Binary files a/docs/assets/assembling_soldering_clever_4/esc_10.png and b/docs/assets/assembling_soldering_clever_4/esc_10.png differ diff --git a/docs/assets/assembling_soldering_clever_4/esc_11.png b/docs/assets/assembling_soldering_clever_4/esc_11.png new file mode 100644 index 00000000..bd97009a Binary files /dev/null and b/docs/assets/assembling_soldering_clever_4/esc_11.png differ diff --git a/docs/assets/assembling_soldering_clever_4/esc_3.png b/docs/assets/assembling_soldering_clever_4/esc_3.png index b8009bff..bc1f7b60 100644 Binary files a/docs/assets/assembling_soldering_clever_4/esc_3.png and b/docs/assets/assembling_soldering_clever_4/esc_3.png differ diff --git a/docs/assets/assembling_soldering_clever_4/esc_4.png b/docs/assets/assembling_soldering_clever_4/esc_4.png index 6cefcce1..216c51cb 100644 Binary files a/docs/assets/assembling_soldering_clever_4/esc_4.png and b/docs/assets/assembling_soldering_clever_4/esc_4.png differ diff --git a/docs/assets/assembling_soldering_clever_4/esc_5.png b/docs/assets/assembling_soldering_clever_4/esc_5.png index 6c305d7f..6cefcce1 100644 Binary files a/docs/assets/assembling_soldering_clever_4/esc_5.png and b/docs/assets/assembling_soldering_clever_4/esc_5.png differ diff --git a/docs/assets/assembling_soldering_clever_4/esc_6.png b/docs/assets/assembling_soldering_clever_4/esc_6.png index e48aef98..6c305d7f 100644 Binary files a/docs/assets/assembling_soldering_clever_4/esc_6.png and b/docs/assets/assembling_soldering_clever_4/esc_6.png differ diff --git a/docs/assets/assembling_soldering_clever_4/esc_7.png b/docs/assets/assembling_soldering_clever_4/esc_7.png index 4d10185f..e48aef98 100644 Binary files a/docs/assets/assembling_soldering_clever_4/esc_7.png and b/docs/assets/assembling_soldering_clever_4/esc_7.png differ diff --git a/docs/assets/assembling_soldering_clever_4/esc_8.png b/docs/assets/assembling_soldering_clever_4/esc_8.png index efea91d2..4d10185f 100644 Binary files a/docs/assets/assembling_soldering_clever_4/esc_8.png and b/docs/assets/assembling_soldering_clever_4/esc_8.png differ diff --git a/docs/assets/assembling_soldering_clever_4/esc_9.png b/docs/assets/assembling_soldering_clever_4/esc_9.png index 90f19303..efea91d2 100644 Binary files a/docs/assets/assembling_soldering_clever_4/esc_9.png and b/docs/assets/assembling_soldering_clever_4/esc_9.png differ diff --git a/docs/assets/assembling_soldering_clever_4/guard_4.png b/docs/assets/assembling_soldering_clever_4/guard_4.png new file mode 100644 index 00000000..3014bb3c Binary files /dev/null and b/docs/assets/assembling_soldering_clever_4/guard_4.png differ diff --git a/docs/assets/assembling_soldering_clever_4/guard_5.png b/docs/assets/assembling_soldering_clever_4/guard_5.png new file mode 100644 index 00000000..b2f9e2c4 Binary files /dev/null and b/docs/assets/assembling_soldering_clever_4/guard_5.png differ diff --git a/docs/assets/assembling_soldering_clever_4/guard_6.png b/docs/assets/assembling_soldering_clever_4/guard_6.png new file mode 100644 index 00000000..6fbe00aa Binary files /dev/null and b/docs/assets/assembling_soldering_clever_4/guard_6.png differ diff --git a/docs/assets/assembling_soldering_clever_4/raspberry_10.png b/docs/assets/assembling_soldering_clever_4/raspberry_10.png index c0eae049..47773a2c 100644 Binary files a/docs/assets/assembling_soldering_clever_4/raspberry_10.png and b/docs/assets/assembling_soldering_clever_4/raspberry_10.png differ diff --git a/docs/assets/assembling_soldering_clever_4/raspberry_11.png b/docs/assets/assembling_soldering_clever_4/raspberry_11.png index 539257f5..8def0da2 100644 Binary files a/docs/assets/assembling_soldering_clever_4/raspberry_11.png and b/docs/assets/assembling_soldering_clever_4/raspberry_11.png differ diff --git a/docs/assets/assembling_soldering_clever_4/raspberry_12.png b/docs/assets/assembling_soldering_clever_4/raspberry_12.png index f73341fe..c8a693dd 100644 Binary files a/docs/assets/assembling_soldering_clever_4/raspberry_12.png and b/docs/assets/assembling_soldering_clever_4/raspberry_12.png differ diff --git a/docs/assets/assembling_soldering_clever_4/raspberry_14.png b/docs/assets/assembling_soldering_clever_4/raspberry_14.png index 6326a43f..5376c15a 100644 Binary files a/docs/assets/assembling_soldering_clever_4/raspberry_14.png and b/docs/assets/assembling_soldering_clever_4/raspberry_14.png differ diff --git a/docs/assets/assembling_soldering_clever_4/raspberry_15.png b/docs/assets/assembling_soldering_clever_4/raspberry_15.png index 1ad81b76..245edbfb 100644 Binary files a/docs/assets/assembling_soldering_clever_4/raspberry_15.png and b/docs/assets/assembling_soldering_clever_4/raspberry_15.png differ diff --git a/docs/assets/assembling_soldering_clever_4/raspberry_16.png b/docs/assets/assembling_soldering_clever_4/raspberry_16.png index 9dfeda80..254d7efb 100644 Binary files a/docs/assets/assembling_soldering_clever_4/raspberry_16.png and b/docs/assets/assembling_soldering_clever_4/raspberry_16.png differ diff --git a/docs/assets/assembling_soldering_clever_4/raspberry_17.png b/docs/assets/assembling_soldering_clever_4/raspberry_17.png index 9072a5a5..c285b2ec 100644 Binary files a/docs/assets/assembling_soldering_clever_4/raspberry_17.png and b/docs/assets/assembling_soldering_clever_4/raspberry_17.png differ diff --git a/docs/assets/assembling_soldering_clever_4/raspberry_7.png b/docs/assets/assembling_soldering_clever_4/raspberry_7.png index 230620d8..4bc06915 100644 Binary files a/docs/assets/assembling_soldering_clever_4/raspberry_7.png and b/docs/assets/assembling_soldering_clever_4/raspberry_7.png differ diff --git a/docs/assets/assembling_soldering_clever_4/raspberry_8.png b/docs/assets/assembling_soldering_clever_4/raspberry_8.png index 49a3e86d..7565b5d4 100644 Binary files a/docs/assets/assembling_soldering_clever_4/raspberry_8.png and b/docs/assets/assembling_soldering_clever_4/raspberry_8.png differ diff --git a/docs/assets/assembling_soldering_clever_4/raspberry_9.png b/docs/assets/assembling_soldering_clever_4/raspberry_9.png index 925fedbb..4c60847c 100644 Binary files a/docs/assets/assembling_soldering_clever_4/raspberry_9.png and b/docs/assets/assembling_soldering_clever_4/raspberry_9.png differ diff --git a/docs/assets/clover4_sphere_guard.png b/docs/assets/clover4_sphere_guard.png new file mode 100644 index 00000000..2083989a Binary files /dev/null and b/docs/assets/clover4_sphere_guard.png differ diff --git a/docs/assets/coex_pix/coexpix-bottom-rev1.2.png b/docs/assets/coex_pix/coexpix-bottom-rev1.2.png new file mode 100644 index 00000000..fd07d436 Binary files /dev/null and b/docs/assets/coex_pix/coexpix-bottom-rev1.2.png differ diff --git a/docs/assets/coexpix-bottom.jpg b/docs/assets/coex_pix/coexpix-bottom.jpg similarity index 100% rename from docs/assets/coexpix-bottom.jpg rename to docs/assets/coex_pix/coexpix-bottom.jpg diff --git a/docs/assets/coex_pix/coexpix-top-rev1.2.png b/docs/assets/coex_pix/coexpix-top-rev1.2.png new file mode 100644 index 00000000..26a4a4c2 Binary files /dev/null and b/docs/assets/coex_pix/coexpix-top-rev1.2.png differ diff --git a/docs/assets/coexpix-top.jpg b/docs/assets/coex_pix/coexpix-top.jpg similarity index 100% rename from docs/assets/coexpix-top.jpg rename to docs/assets/coex_pix/coexpix-top.jpg diff --git a/docs/assets/sphere_guard/gps_mount.svg b/docs/assets/sphere_guard/gps_mount.svg new file mode 100644 index 00000000..83b346aa --- /dev/null +++ b/docs/assets/sphere_guard/gps_mount.svg @@ -0,0 +1,566 @@ + + + + + + + + + + image/svg+xml + + + + + + + Π Π΅Π±Ρ€ΠΎ Π² сборС + ΠšΡ€Ρ‹ΡˆΠΊΠ° + ΠšΡ€Ρ‹ΡˆΠΊΠ° + Π’Π΅Ρ€Ρ… + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_1.svg b/docs/assets/sphere_guard/sphere_1.svg new file mode 100644 index 00000000..2bb82f62 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_1.svg @@ -0,0 +1,288 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + Π›Π΅Π²ΠΎΠ΅ + ΠŸΡ€Π°Π²ΠΎΠ΅ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_10.svg b/docs/assets/sphere_guard/sphere_10.svg new file mode 100644 index 00000000..f38f8215 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_10.svg @@ -0,0 +1,2416 @@ + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_11.svg b/docs/assets/sphere_guard/sphere_11.svg new file mode 100644 index 00000000..63cdf7f7 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_11.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_12.svg b/docs/assets/sphere_guard/sphere_12.svg new file mode 100644 index 00000000..04cd6643 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_12.svg @@ -0,0 +1,335 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_13.svg b/docs/assets/sphere_guard/sphere_13.svg new file mode 100644 index 00000000..ba9e3ba1 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_13.svg @@ -0,0 +1,801 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_14.svg b/docs/assets/sphere_guard/sphere_14.svg new file mode 100644 index 00000000..8aa5a55e --- /dev/null +++ b/docs/assets/sphere_guard/sphere_14.svg @@ -0,0 +1,314 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_15.svg b/docs/assets/sphere_guard/sphere_15.svg new file mode 100644 index 00000000..270b372c --- /dev/null +++ b/docs/assets/sphere_guard/sphere_15.svg @@ -0,0 +1,330 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_16.svg b/docs/assets/sphere_guard/sphere_16.svg new file mode 100644 index 00000000..26551811 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_16.svg @@ -0,0 +1,461 @@ + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_17.svg b/docs/assets/sphere_guard/sphere_17.svg new file mode 100644 index 00000000..ec14d1df --- /dev/null +++ b/docs/assets/sphere_guard/sphere_17.svg @@ -0,0 +1,1299 @@ + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_18.svg b/docs/assets/sphere_guard/sphere_18.svg new file mode 100644 index 00000000..7c515017 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_18.svg @@ -0,0 +1,1332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_19.svg b/docs/assets/sphere_guard/sphere_19.svg new file mode 100644 index 00000000..968a8e0d --- /dev/null +++ b/docs/assets/sphere_guard/sphere_19.svg @@ -0,0 +1,232 @@ + + + + + + + + + + image/svg+xml + + + + + + + + Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ GPS + Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ с ΠΊΠΎΡ€Π·ΠΈΠ½ΠΊΠΎΠΉ + ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ‚ΠΊΠΈ + направлСния совпадали + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_2.svg b/docs/assets/sphere_guard/sphere_2.svg new file mode 100644 index 00000000..f0b768eb --- /dev/null +++ b/docs/assets/sphere_guard/sphere_2.svg @@ -0,0 +1,321 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + Π›Π΅Π²ΠΎΠ΅ + ΠŸΡ€Π°Π²ΠΎΠ΅ + ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ† смотрит Π½Π°Π²Π΅Ρ€Ρ… + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_3.svg b/docs/assets/sphere_guard/sphere_3.svg new file mode 100644 index 00000000..899001bc --- /dev/null +++ b/docs/assets/sphere_guard/sphere_3.svg @@ -0,0 +1,607 @@ + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_4.svg b/docs/assets/sphere_guard/sphere_4.svg new file mode 100644 index 00000000..2941875f --- /dev/null +++ b/docs/assets/sphere_guard/sphere_4.svg @@ -0,0 +1,718 @@ + + + + +ΠŸΡ€Π°Π²ΠΎΠ΅ ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ +Π›Π΅Π²ΠΎΠ΅ ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ + + + + + + diff --git a/docs/assets/sphere_guard/sphere_5.svg b/docs/assets/sphere_guard/sphere_5.svg new file mode 100644 index 00000000..ce73d324 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_5.svg @@ -0,0 +1,116 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_6.svg b/docs/assets/sphere_guard/sphere_6.svg new file mode 100644 index 00000000..ea07d944 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_6.svg @@ -0,0 +1,123 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/docs/assets/sphere_guard/sphere_7.svg b/docs/assets/sphere_guard/sphere_7.svg new file mode 100644 index 00000000..a26cdb76 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_7.svg @@ -0,0 +1,1080 @@ + + + + +ΠŸΠ΅Ρ€Π΅Π΄Π½ΡΡ Ρ‡Π°ΡΡ‚ΡŒ +Задняя Ρ‡Π°ΡΡ‚ΡŒ +ЛСвая Ρ‡Π°ΡΡ‚ΡŒ +ΠŸΡ€Π°Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ + + + + + + diff --git a/docs/assets/sphere_guard/sphere_8.svg b/docs/assets/sphere_guard/sphere_8.svg new file mode 100644 index 00000000..21108599 --- /dev/null +++ b/docs/assets/sphere_guard/sphere_8.svg @@ -0,0 +1,1096 @@ + + + + +ΠŸΡ€Π°Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ +ΠŸΠ΅Ρ€Π΅Π΄Π½ΡΡ Ρ‡Π°ΡΡ‚ΡŒ +ЛСвая Ρ‡Π°ΡΡ‚ΡŒ +Задняя Ρ‡Π°ΡΡ‚ΡŒ +ΠŸΠ΅Ρ€Π΅Π΄Π½ΡΡ Ρ‡Π°ΡΡ‚ΡŒ +Задняя Ρ‡Π°ΡΡ‚ΡŒ + + + + + + diff --git a/docs/assets/sphere_guard/sphere_9.svg b/docs/assets/sphere_guard/sphere_9.svg new file mode 100644 index 00000000..302d0b7e --- /dev/null +++ b/docs/assets/sphere_guard/sphere_9.svg @@ -0,0 +1,138 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/versions/clover_4_1.jpg b/docs/assets/versions/clover_4_1.jpg new file mode 100644 index 00000000..57be1e0b Binary files /dev/null and b/docs/assets/versions/clover_4_1.jpg differ diff --git a/docs/assets/versions/clover_4_2.jpg b/docs/assets/versions/clover_4_2.jpg new file mode 100644 index 00000000..9145333c Binary files /dev/null and b/docs/assets/versions/clover_4_2.jpg differ diff --git a/docs/en/4g.md b/docs/en/4g.md index 2b67e3bb..3652fe45 100644 --- a/docs/en/4g.md +++ b/docs/en/4g.md @@ -18,15 +18,15 @@ Note that when connected, the modem must be recognized in the system as a networ Create the VPN network keys to connect Raspberry Pi and the ground station. -To connect Raspberry Pi to your network, install the *openvpn* package: +To connect Raspberry Pi to your network, install the OpenVPN package: ```bash sudo apt-get install openvpn ``` -Move your keys to the */etc/openvpn/client* directory. For convenience, use the graphical SFTP data transfer interface, for example: WinSCP, FileZilla, etc. +Move your keys to the `/etc/openvpn/client` directory. For convenience, use the graphical SFTP data transfer interface, for example: WinSCP, FileZilla, etc. -To enable the client mode, you must activate the keys you have transmitted. Keys can be generated in various formats, for example: *.ovpn*, *.conf*. The key or configuration used on your copter should be strictly in *.conf* format. +To enable the client mode, you must activate the keys you have transmitted. Keys can be generated in various formats, for example: `.ovpn`, `.conf`. The key or configuration used on your copter should be strictly in `.conf` format. Initialize the service that uses your keys to connect in client mode: diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index ffb3d611..2d7466f9 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -5,6 +5,7 @@ * [Safety tips](safety.md) * [Assembly](assembly.md) * [Clover 4.2 assembly](assemble_4_2.md) + * [Clover 4.2 WorldSkills](assemble_4_2_ws.md) * [Clover 4 assembly](assemble_4.md) * [Clover 3 assembly](assemble_3.md) * [Clover 2 assembly](assemble_2.md) diff --git a/docs/en/arduino.md b/docs/en/arduino.md index e80bc97c..4ad88994 100644 --- a/docs/en/arduino.md +++ b/docs/en/arduino.md @@ -4,7 +4,7 @@ For interaction with ROS topics and services on a Raspberry Pi, you can use the The main tutorial for rosserial: http://wiki.ros.org/rosserial_arduino/Tutorials -Arudino is to be installed on Clover and connected via a USB port. +Arduino is to be installed on Clover and connected via a USB port. ## Configuring Arduino IDE @@ -14,7 +14,7 @@ To work with ROS and Arduino, you should understand the format of installed pack rosrun rosserial_arduino make_libraries.py. ``` -The obtained folder `ros_lib` is to be copied to `/libraries` on a computer with Arudino IDE. +The obtained folder `ros_lib` is to be copied to `/libraries` on a computer with Arduino IDE. ## Configuring Raspberry Pi @@ -24,7 +24,7 @@ To run the program on Arduino once, you can use command: roslaunch clover arduino.launch ``` -To start the link with Arduino at the startup automatically, set argument `arudino` in the Clover launch file (`~/catkin_ws/src/clover/clover/launch/clover.launch`): +To start the link with Arduino at the startup automatically, set argument `arduino` in the Clover launch file (`~/catkin_ws/src/clover/clover/launch/clover.launch`): ```xml @@ -202,7 +202,7 @@ getTelemetry.call(gt_req, gt_res); ## Problem -When using Arudino Nano, RAM may be insufficient. In this case, messages will appear in the Aruino IDE like: +When using Arduino Nano, RAM may be insufficient. In this case, messages will appear in the Arduino IDE like: ``` Global variables use 1837 bytes (89%) of the dynamic memory, leaving 211 bytes for local variables. The maximum is 2048 bytes. diff --git a/docs/en/assemble_3.md b/docs/en/assemble_3.md index 51311396..739bc2ec 100644 --- a/docs/en/assemble_3.md +++ b/docs/en/assemble_3.md @@ -51,7 +51,7 @@ TODO 1. Unpack the power board and install the power ribbon cable. 2. Switch the multimeter in the DC voltage measurement mode (20V or 200V range). -3. Check the correct functionning of the power board by connecting the battery. +3. Check the correct functioning of the power board by connecting the battery. * Voltage measurements are to be made between black and red wires. * Output voltage at the XT30 connector should be equal to the battery voltage (10 V to 12.6 V). * The output voltage at the power ribbon cable should be between 4.9 V to 5.3 V. @@ -69,7 +69,7 @@ TODO BLACK -> OUT- RED -> OUT+ -6. Check BEC functionning. +6. Check BEC functioning. * Solder the BEC to the power board: BLACK -> - diff --git a/docs/en/assemble_4.md b/docs/en/assemble_4.md index 1c5d4d84..66f2d4e4 100644 --- a/docs/en/assemble_4.md +++ b/docs/en/assemble_4.md @@ -29,7 +29,7 @@ ## Installing motors 1. Unbox the motors. -2. Shorten the motor wires using wire strippers or sidecutters: +2. Shorten the motor wires using wire strippers or side cutters: * Cut wires to 30 mm. * Strip 5 mm of insulation while taking care to not damage the cores @@ -315,7 +315,7 @@ The flight controller expects PPM signal from your RC gear. Switch your transmit 6. Connect the camera ribbon cable to the camera. -7. Connect the laser rangefineder to the Raspberry Pi using the following pinout: +7. Connect the laser rangefinder to the Raspberry Pi using the following pinout: * Connect **VCC** to pin 1 (**3v3**) * Connect **GND** to pin 9 (**Ground**) * Connect **SDA** to pin 3 (**GPIO2**) @@ -391,7 +391,7 @@ Perform the quadrotor components setup according to [the "Configuration" section > **Warning** Be sure to **not** mount the propellers **until the setup is complete**. Do it only when you are ready to fly. -Attach the propellers according to their rotation direction. The battery should be disconnected duting propeller installation. +Attach the propellers according to their rotation direction. The battery should be disconnected during propeller installation.
diff --git a/docs/en/assemble_4_2_ws.md b/docs/en/assemble_4_2_ws.md new file mode 100644 index 00000000..7eb43e5f --- /dev/null +++ b/docs/en/assemble_4_2_ws.md @@ -0,0 +1,352 @@ +# Clover 4 assembly + +## Fasteners size + +> **Hint** During assembly, screws and racks of various sizes are used, using fasteners of the wrong size can damage the copter. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Screw M3x10Aluminium rack 40mm
Screw M3x8Aluminium rack 15mm
Screw M3x5Nylon rack 40mm
Screw M2x5Nylon rack 30mm
Nut M3 (self-locking)Nylon rack 20mm
Nut M3 (nylon)Nylon rack 15mm
Damper rack Nylon rack 6mm
+ +## Frame Assembly + +1. Align the 4 beams with the center deck, fix them with the M3x8 screws and self-locking nuts. + +
+ + +
+ +2. Install 2 15mm posts on the center holes in the main deck and fix them with the M3x8 screws. + + + +3. Install the stiffener hook into the groove in the beam. + + + +4. Hold the stiffeners tight to the main deck. + + + +5. Tighten the stiffeners with a small carbon deck. + + + +6. Install 4 6mm nylon posts and fix them with the M3x5 screws. + + + +## Installing of motors + +1. When installing motors, pay attention to the rotation scheme of the motors. The rotation mark on the motors must match the rotation scheme. + + + +2. Mount the motor on the corresponding holes in the beam using **M3x5 screws**. + +
+ + +
+ +> **Caution** Make sure that the motors are secured with M3x5 screws, otherwise a short circuit between the windings may occur. + +## Installing ESC and PDB + +1. Install the Power Distribution Board (PDB) on the pre-mounted stands, it must be installed with the power cable pointing towards the rear of the aircraft. + +
+ + +
+ +2. Install the speed controllers (ESC) to the appropriate positions on the beam. + +
+ + +
+ +3. Tighten the speed controllers (ESC) with cable ties. + + + +4. Measure out the required amount of ESC power wire, and cut off the excess. + +5. Strip and tin the cut wires + +6. Tin the contact pads on the power distribution board. + +7. Solder the ESC power wires to the power distribution board. + +
+ + +
+ + > **Caution** Be careful with the pin signatures on the board. The red wire should go to the site with the signature *+*, and the black one to the signature *-*. + +8. Cut off the excess phase cable coming from the motors. + +9. Strip and tin the phase cables. + +10. Tin the contact pads of the governors. + +11. Solder the phase cables to the contact pads of the regulators in any order. + +
+ + +
+ +12. Solder 3 female JST connectors to *5V* pads and *bat+* pad + +
+ + +
+ +## Installing the flight controller + +The *Clover 4* set allows you to install various flight controllers, for example *COEX Pix* and *Pixracer*. + +> **Caution** When installing the flight controller, pay attention to the arrow located on the board, when installing it must be directed towards the nose of the aircraft. + +### COEX Pix + +> **Hint** Before installing the damper struts, screw in 2 layers of nylon nuts for a stronger hold or bite off excess threads with side cutters. + +1. Secure the power distribution board with nylon nuts and mount the damper posts on top. + +2. Install the flight controller and secure with nylon nuts. + + + +3. Insert the flash card for logging into the flight controller. + + + +### Pixracer + +1. Secure the power distribution board with 6mm nylon struts. + +2. Install the small mounting deck and secure with nylon nuts. + + + +3. Glue 3-4 layers of double-sided tape, glue it in the center of the small deck and place the *Pixracer* on top. + + + +4. Insert the MicroSD card into the flight controller. + + + +## Connecting a flight controller + +1. Connect the ESCs to the flight controller according to the scheme. + + + +2. Connect the power cable to the power distribution board (PDB) and the corresponding connector on the flight controller. + +
+ + +
+ +3. Install the 40mm aluminum posts onto the M3x12 screws. + +
+ + +
+ +## Installing Raspberry Pi + +1. Place the 20 mm and 40 mm posts on the mounting deck, fix them with M3x8 screws. + + + +2. Use an M3x12 bolt to cut M3 carving in the Raspberry Pi mounting holes. + +3. Screw the 6mm racks into the Raspberry Pi board, secure them with nylon nuts if necessary. + +
+ + +
+ +4. Mount the Raspberry Pi onto the mounting deck using M3x6 screws. + + + +5. Install the assembled module into the corresponding slots on the main deck of the drone. + + + +6. Plug the 5V JST into the corresponding power pins on the Raspberry Pi. + + + +7. Take 4 Dupont wires, cut 5–7 cm of cable and solder to the corresponding pins of the rangefinder. + +
+ + +
+ + | Wire | Rangefinder pin | + |------|-----------------| + | Red | 5v | + | Black | GND | + | Yellow | SDA | + | Green | SCL | + +
+ + +
+ +8. Install the rangefinder on the grip deck and glue the radio to the 3M tape. + + > **Caution** Install the rangefinder so that the nuts do not rest directly on the board. With this installation, if there is a high probability of damaging the board elements. + + + +9. Install 4 20mm nylon posts and fix them with M3x8 bolts. + + + +10. Place the camera on the small mounting deck and secure it with two short self-tapping screws. + + > **Caution** If you attach the camera to the upper right corner and the screw head touches the element on the camera, the camera will not work. + + + +11. Place the small mounting deck with the camera on the stands and secure with the M3x8 bolts. + + + +12. Place the assembled module over the Raspberry Pi module and fix it with M3x8 bolts. + + + +13. Connect the camera and Raspberry Pi with a ribbon cable. + + + +14. Connect the rangefinder to the Raspberry Pi into the appropriate pins. + + + +15. Connect the radio and the flight controller with a 4-pin cable. + + + +## Installing LED strip and legs + +1. Assemble the hoop for the LED strip by locking the ends together. + + + +2. Solder the JST male to the power pad and the Dupont-female to the signal pad. + + + +3. Stick the LED strip to the hoop, for greater strength, tighten it with 3-4 clamps. + + + +4. Install the feet on the stiffener plate with self-locking nuts and M3x8 screws only using the outermost mounting holes. From below, between the plates of the legs, install a damper silicone ring. + + + +5. Bend the legs back and install the hoop with the LED strip in the special groove on them, so that the connection cables exit from the tail side of the copter. + + + +6. Secure the legs with self-locking nuts and M3x8 screws. + + + +7. Connect the LED strip power to the JST 5V connector on the power distribution board. + + + +8. Connect the signal output of the LED strip in the Raspberry Ri to pin *GPIO21*. + + + +9. Install the mounting deck and secure it with M3x8 screws. + + + +## Setting protection + +1. Assemble the lower level of protection using 40mm posts and M3x12 screws. + + + +2. Assemble the upper layer of protection using the M3x12 screws. + + + +3. Install the protection and fix it to the beams with self-locking nuts and M3x8 screws. + + + +4. Connect the flight controller to your Raspberry Pi using the USB cable. + +
+ + +
+ +5. Install the battery strap. + + + +> **Success** The drone is assembled, next perform the ["setup"](setup.md) step. diff --git a/docs/en/assembly.md b/docs/en/assembly.md index ae6b7c4a..bfbebc5b 100644 --- a/docs/en/assembly.md +++ b/docs/en/assembly.md @@ -5,13 +5,12 @@ This section contains articles describing the assembly of each version of Clover - - + + - diff --git a/docs/en/blocks.md b/docs/en/blocks.md index 5d32d883..19699453 100644 --- a/docs/en/blocks.md +++ b/docs/en/blocks.md @@ -108,3 +108,14 @@ The block allows to set animations to LED strip, similarly to [`set_effect`](led Example of using the block with a random color (colors-related blocks are located in *Colour* category): + +### Work with GPIO {#GPIO} + +GPIO category contains blocks for working with GPIO. Note, that for correct work of these blocks, `pigpiod` daemon should be running: + +```bash +sudo systemctl enable pigpiod.service +sudo systemctl start pigpiod.service +``` + +See details on GPIO in the [appropriate article](gpio.md). diff --git a/docs/en/coex_pix.md b/docs/en/coex_pix.md index 552eb8e6..305b2ac3 100644 --- a/docs/en/coex_pix.md +++ b/docs/en/coex_pix.md @@ -58,3 +58,18 @@ The FCU has power passthrough from the *PWR* input to the servo rail. Supplying ### Board specifics The board utilizes low-noise DC-DC converters, voltage inputs have LC and ferrite filters. + +## Revision 1.2 + +### Innovations + +* Replaced USB Micro-B connector with USB Type-C connector. +* Changed the slot for microSD cards to a deeper one. +* Changed pin assignments on the I2C connector. +* Added ferrite filters in the power circuit. + +### Port pinouts + + + + diff --git a/docs/en/ir_sensors.md b/docs/en/ir_sensors.md index fb0dae01..9bed19d0 100644 --- a/docs/en/ir_sensors.md +++ b/docs/en/ir_sensors.md @@ -8,7 +8,7 @@ Infrared sensors are a convenient tool for transmitting any commands to the copt Most IR receivers operate and are connected the same way. Such receivers have 3 pins for connecting: G/GND β€” ground V/VCC β€” 5V power, S/OUT β€” signal. -ir reciver connection to raspberry +ir receiver connection to raspberry > **Hint** The signal port doesn't have to be connected to port GPIO 17; this pin may be changed during the [in/out port settings](#in/out). diff --git a/docs/en/jetson_nano.md b/docs/en/jetson_nano.md index 5e4af94b..90988dc2 100644 --- a/docs/en/jetson_nano.md +++ b/docs/en/jetson_nano.md @@ -137,7 +137,7 @@ Jetson Nano currently does not support older Raspberry Pi v1 cameras (that are b Fortunately, these cameras are available using GStreamer. You can try using the [`gscam`](http://wiki.ros.org/gscam) ROS package or our [`jetson_camera`](https://github.com/sfalexrog/jetson_camera) node. The latter requires you to build OpenCV 3.4 from source with GStreamer support. -The GStreamer pipelines are available at [JetsonHacksNano CSI camera reposotory](https://github.com/JetsonHacksNano/CSI-Camera). +The GStreamer pipelines are available at [JetsonHacksNano CSI camera repository](https://github.com/JetsonHacksNano/CSI-Camera). You may also notice that the camera image has a red tint that is more pronounced near the edges. This can be fixed by image signal processor tuning. Generally this should be done by your camera manufacturer; [here is a sample ISP configuration](https://www.arducam.com/docs/camera-for-jetson-nano/fix-red-tint-with-isp-tuning/) from Adrucam diff --git a/docs/en/leds.md b/docs/en/leds.md index 2a8ba9bc..7ee6fff6 100644 --- a/docs/en/leds.md +++ b/docs/en/leds.md @@ -12,7 +12,7 @@ Our [Raspberry Pi image](image.md) contains preinstalled modules for interfacing * control individual LED colors (low-level control); * configure the strip to display flight events. -> **Caution** LED strip can consume a lot of power! Powering it from a Raspyerry Pi may overload the computer's power circuitry. Consider using a separate BEC as a power source. +> **Caution** LED strip can consume a lot of power! Powering it from a Raspberry Pi may overload the computer's power circuitry. Consider using a separate BEC as a power source. ## High-level control diff --git a/docs/en/leds_old.md b/docs/en/leds_old.md index f6aac0fd..b163cc74 100644 --- a/docs/en/leds_old.md +++ b/docs/en/leds_old.md @@ -8,7 +8,7 @@ Connect the +5v and GND leads of your LED to a power source and the DIN (data in leds -> **Caution** LED strip can consume a lot of power! Powering it from a Raspyerry Pi may overload the computer's power circuitry. Consider using a separate BEC as a power source. +> **Caution** LED strip can consume a lot of power! Powering it from a Raspberry Pi may overload the computer's power circuitry. Consider using a separate BEC as a power source. diff --git a/docs/en/lesson1.md b/docs/en/lesson1.md index a2e04d32..2b69d6f5 100644 --- a/docs/en/lesson1.md +++ b/docs/en/lesson1.md @@ -60,7 +60,7 @@ An Unmanned Aerial Vehicle (UAV) is an aircraft flying without a pilot (crew) on Types and configuration ------------------- -There are many engines configurations: a tricopter, a hexacopter, or an octocopter, but the simplest one in terms of assembly and operation is a quadcopter, i. e., a multi-rotor platform with four engines. In turn, a quadcopter may have + and Ρ… configuration. In copters with a "+" configuration, one of the beams faces forward, while in platforms with the "x" configuration, the main direction of movement is between two adjacent beams. +There are many engines configurations: a tricopter, a hexacopter, or an octocopter, but the simplest one in terms of assembly and operation is a quadcopter, i. e., a multi-rotor platform with four engines. In turn, a quadcopter may have + and x configuration. In copters with a "+" configuration, one of the beams faces forward, while in platforms with the "x" configuration, the main direction of movement is between two adjacent beams. ![Types](../assets/1_4.png) diff --git a/docs/en/lesson2.md b/docs/en/lesson2.md index 7eed0b17..48b8405a 100644 --- a/docs/en/lesson2.md +++ b/docs/en/lesson2.md @@ -117,12 +117,11 @@ In a closed electric circuit, the sum of all the EMF is equal to the sum of the In making equations, the direction of circuit traversal is chosen and arbitrarily specified directions of currents are specified. -If an electric circuit contains two power sources, the directions of electromotive forces of which coincide, i.Π΅., connected according to Fig. 1, the EMF across the entire circuit shall be equal to the sum of the EMFs of the sources, -Ρ‚. i.Π΅., +If an electric circuit contains two power sources, the directions of electromotive forces of which coincide, i.e., connected according to Fig. 1, the EMF across the entire circuit shall be equal to the sum of the EMFs of the sources, i.e., **E = E1+E2.** -If a circuit contains two sources of EDS with opposite directions, i.Π΅., connected according to Fig. 2, the total EMF of the circuit will be equal to the difference of EMFs of these sources +If a circuit contains two sources of EDS with opposite directions, i.e., connected according to Fig. 2, the total EMF of the circuit will be equal to the difference of EMFs of these sources **Π• = Π•1β€”Π•2.** diff --git a/docs/en/migrate20.md b/docs/en/migrate20.md index d159fc21..2da6aed9 100644 --- a/docs/en/migrate20.md +++ b/docs/en/migrate20.md @@ -46,7 +46,7 @@ set_attitude = rospy.ServiceProxy('set_attitude', srv.SetAttitude) set_rates = rospy.ServiceProxy('set_rates', srv.SetRates) land = rospy.ServiceProxy('land', Trigger) -# Take off 1 ΠΌ +# Take off 1 m navigate(x=0, y=0, z=1, frame_id='body', auto_arm=True) ``` diff --git a/docs/en/optical_flow.md b/docs/en/optical_flow.md index dcb0f121..450a28f5 100644 --- a/docs/en/optical_flow.md +++ b/docs/en/optical_flow.md @@ -44,7 +44,7 @@ When using **LPE** (parameter `SYS_MC_EST_GROUP` = `local_position_estimator, at * `SENS_FLOW_ROT` – No rotation. * `SENS_FLOW_MAXHGT` – 4.0 (for the rangefinder VL53L1X) * `SENS_FLOW_MINHGT` – 0.01 (for the rangefinder VL53L1X) -* Optional: `LPE_FUSION` – falg 'pub agl as lpos down' is on (сf. [rangefinder setup](laser.md). +* Optional: `LPE_FUSION` – falg 'pub agl as lpos down' is on (see [rangefinder setup](laser.md). [The `selfcheck.py` utility](selfcheck.md) will help you verify that all settings are correctly set. @@ -97,7 +97,7 @@ When using Optical Flow, the maximal horizontal speed is further limited. This i ## Errors -If errors of `EKF INTERNAL CHECKS` occur, try to restart EKF2. To do so, enter in the MAVLink-console : Π² MAVLink-консоли: +If errors like `EKF INTERNAL CHECKS` occur, try to restart EKF2. To do so, enter in the MAVLink-console: ```nsh ekf2 stop diff --git a/docs/en/programming.md b/docs/en/programming.md index f85d3465..a55e802c 100644 --- a/docs/en/programming.md +++ b/docs/en/programming.md @@ -92,6 +92,8 @@ Read more in the [coordinate systems](frames.md) article. You can also use the ["Autonomous flight"](simple_offboard.md) article as an API reference. +> **Hint** Clover supports [blocks-based programming](blocks.md) as well. + ## Additional periphery The Clover platform also exposes APIs for interacting with other peripherals. Read more in the following articles: diff --git a/docs/en/px4_parameters.md b/docs/en/px4_parameters.md index 5bd1e7ee..d05c7690 100644 --- a/docs/en/px4_parameters.md +++ b/docs/en/px4_parameters.md @@ -20,7 +20,7 @@ This is a group of modules that calculates the current state of the copter using * Copter orientation (in the local coordinate system) – pitch, roll, yaw (one of presentations); * Copter position (in the local coordinate system) – x, y, z; * Copter speed (in the local coordinate system) – vx, vy, vz; -* Global coordinates of the copter – lattitude, longitude, altitude; +* Global coordinates of the copter – latitude, longitude, altitude; * Altitude above the surface; * Other parameters (the drift of gyroscopes, wind speed, etc.). @@ -39,15 +39,15 @@ This is a group of modules that calculates the current state of the copter using Variant 2 is the most accurate; however, it is correct to use it only if the surface the copter flies over is flat. Otherwise, the Z axis origin will move up and down with the altitude of the surface. -## Multicopter Control Position (flying by position) +## Multicopter Position Control These parameters adjust the flight of the copter by position (POSCTL, OFFBOARD, AUTO modes). `MPC_THR_HOVER` β€” hovering throttle. This option is to set to the approximate percentage of throttle needed to make the copter maintain its altitude. If copter has a tendency to gain or lose altitude during the hovering mode, reduce or increase this value. -`MPC_XY_P` – position factor *P* of the ESC. This parameter affects how sharply the copter will react to the position commands. A too high value may cause {пСрСстрСлы}. +`MPC_XY_P` – position factor *P* of the ESC. This parameter affects how sharply the copter will react to the position commands. A too high value may cause overshoots. -`MPC_XY_VEL_P` – speed factor *P* of the ESC. This parameter also affects the accuracy and sharpness of copter execution of the given position. A too high value may cause {пСрСстрСлы}. +`MPC_XY_VEL_P` – speed factor *P* of the ESC. This parameter also affects the accuracy and sharpness of copter execution of the given position. A too high value may cause overshoots. `MPC_XY_VEL_MAX` β€” the maximum horizontal speed in POSCTL, OFFBOARD, AUTO modes. diff --git a/docs/en/ros-install.md b/docs/en/ros-install.md index b2632048..1895c331 100644 --- a/docs/en/ros-install.md +++ b/docs/en/ros-install.md @@ -41,21 +41,21 @@ Now you can install the ROS package itself. ``` After the package has installed, initialize `rosdep`. -Package `rosdep` will allow to easily install dependecies for the source files that you whish to compile. Running some essential components of ROS will as well require this package. +Package `rosdep` will allow to easily install dependencies for the source files that you whish to compile. Running some essential components of ROS will as well require this package. ```bash sudo rosdep init rosdep update ``` -If you are not confortable with entering environment variables manually each time, you may configure it in a way that it add itself in your bash session on every new shell startup: +If you are not comfortable with entering environment variables manually each time, you may configure it in a way that it add itself in your bash session on every new shell startup: ```bash echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` -If you whish to install any additionnal packages for yout ROS Melodic simply use: +If you whish to install any additional packages for your ROS Melodic simply use: ```bash sudo apt-get install ros-melodic-PACKAGE diff --git a/docs/en/rviz.md b/docs/en/rviz.md index 287bfc39..0573e70b 100644 --- a/docs/en/rviz.md +++ b/docs/en/rviz.md @@ -14,7 +14,7 @@ Install package `ros-melodic-desktop-full` or `ros-melodic-desktop` using the [i Start rviz --- -To start Π΅Ρ€Ρƒ visualization of the state of Clover in real time, connect to it via Wi-Fi (`clover-xxx`) and run rviz, specifying an appropriate ROS_MASTER_URI: +To start the Clover state visualization in real time, connect to it via Wi-Fi (`clover-xxx`) and run rviz, specifying an appropriate ROS_MASTER_URI: ```(bash) ROS_MASTER_URI=http://192.168.11.1:11311 rviz diff --git a/docs/en/setup.md b/docs/en/setup.md index 7aa1c29a..29b543c1 100644 --- a/docs/en/setup.md +++ b/docs/en/setup.md @@ -14,7 +14,7 @@ Consult the [official QGroundControl user guide](https://docs.qgroundcontrol.com Prepare the MicroSD card for your flight controller. -Pixracer ΠΈ MicroSD-ΠΊΠ°Ρ€Ρ‚Π° +Pixracer and MicroSD-card * Put the card into your computer (use an adapter if necessary). * Format the card to FAT32 filesystem. Right click on the SD card icon in Windows Explorer and select "Format". Use the Disk Utility in macOS. @@ -114,7 +114,7 @@ Press the *Save* button to save the changed value to the flight controller. Chan > **Hint** Note that you should fine-tune the PID parameters for each drone individually. -#### Cicruit breaker parameters +#### Circuit breaker parameters 1. Set `CBRK_USB_CHK` to 197848 to allow flights with the USB cable connected. 2. Disable safety switch check: `CBRK_IO_SAFETY` = 22027. diff --git a/docs/en/simple_offboard.md b/docs/en/simple_offboard.md index fd372eb8..f0f71823 100644 --- a/docs/en/simple_offboard.md +++ b/docs/en/simple_offboard.md @@ -13,7 +13,7 @@ The `simple_offboard` module of the `clover` package is intended for simplified Main services are [`get_telemetry`](#gettelemetry) (receive telemetry data), [`navigate`](#navigate) (fly to a given point along a straight line), [`navigate_global`](#navigateglobal) (fly to a point specified as latitude and longitude along a straight line), [`land`](#land) (switch to landing mode). -Python samples +Python examples --- You need to create proxies for services before calling them. Use the following template for your programs: diff --git a/docs/en/simulation_vm.md b/docs/en/simulation_vm.md index 2dd3f889..0cd499f9 100644 --- a/docs/en/simulation_vm.md +++ b/docs/en/simulation_vm.md @@ -8,17 +8,21 @@ In addition to [native installation instructions](simulation_native.md), we prov * preconfigured Gazebo simulation environment; * Visual Studio Code with C++ and Python plugins. +> **Info** The default username on the VM is `clover`, with password `clover`. + The VM is an easy way to set up a simulation environment, but can be used as a development environment for a real drone as well. +## Downloading + You can download the latest VM image [in the VM releases repository](https://github.com/CopterExpress/clover_vm/releases). > **Note** The virtual machine should be used when native installation is not feasible or possible. You may experience reduced performance in programs that use 3D rendering, like rviz and Gazebo. ## Setting up the VM -You need to use a VM manager that supports OVF format, like [Virtualbox](https://www.virtualbox.org/wiki/Downloads), [VMware Player](https://www.vmware.com/products/workstation-player.html) or [VMware Workstation](https://www.vmware.com/products/workstation-pro.html). +You need to use a VM manager that supports OVF format, like [VirtualBox](https://www.virtualbox.org/wiki/Downloads), [VMware Player](https://www.vmware.com/products/workstation-player.html) or [VMware Workstation](https://www.vmware.com/products/workstation-pro.html). -> **Note** At the time of writing Virtualbox had issues running the VM, particularly with 3D applications. We recommend using VMware Player or VMware Workstation if possible. The following steps assume you're using VMware Player. +> **Note** At the time of writing VirtualBox had issues running the VM, particularly with 3D applications. We recommend using VMware Player or VMware Workstation if possible. The following steps assume you're using VMware Player. Make sure that you have hardware virtualization enabled in your BIOS/UEFI (it may be supported by your hardware but turned off by default). The steps to enable virtualization differ from manufacturer to manufacturer, but should be described in your system manual. Consult your system's manufacturer if you're having trouble turning virtualization on. @@ -33,7 +37,7 @@ Make sure that you have hardware virtualization enabled in your BIOS/UEFI (it ma 2. Right-click on the VM name and select **Virtual Machine Settings**. In the new window, set the following parameters: * increase the amount of memory available to the virtual machine (a good rule of thumb is 2048 MB per CPU core, but no less than 4 GB): - ![Increasing avaliable memory](../assets/simulation_setup_vm/03_max_memory.png) + ![Increasing available memory](../assets/simulation_setup_vm/03_max_memory.png) * increase the amount available CPU cores: ![Increasing cpu cores](../assets/simulation_setup_vm/04_core_count.png) * enable 3D acceleration: diff --git a/docs/en/snippets.md b/docs/en/snippets.md index b2cf1128..ce52b430 100644 --- a/docs/en/snippets.md +++ b/docs/en/snippets.md @@ -103,7 +103,7 @@ arming = rospy.ServiceProxy('mavros/cmd/arming', CommandBool) # ... -arming(False) # Π΄ΠΈΠ·Π°Ρ€ΠΌ +arming(False) # disarm ``` ### # {#transform} diff --git a/docs/en/sonar.md b/docs/en/sonar.md index 53c42a1a..aa8cc118 100644 --- a/docs/en/sonar.md +++ b/docs/en/sonar.md @@ -89,7 +89,7 @@ while True: ### Filtering the data -To filter (smooth out) the data and delete [emission](https://ru.wikipedia.org/wiki/Outbreak_%28statistics%29) [Kalman filter] (https://ru.wikipedia.org/wiki/Π€ΠΈΠ»ΡŒΡ‚Ρ€_Калмана) or a simple [median filter](https://ru.wikipedia.org/wiki/Median_filter) can be used. An example of median filtering implementation: +To filter (smooth out) the data and delete [outliers](https://en.wikipedia.org/wiki/Outlier), [Kalman filter](https://en.wikipedia.org/wiki/Kalman_filter) or a simple [median filter](https://ru.wikipedia.org/wiki/Median_filter) can be used. An example of median filtering implementation: ```python import collections @@ -97,7 +97,7 @@ import numpy # ... -history = collections.deque(maxlen=10) # 10 - количСство сэмплов для усрСднСния +history = collections.deque(maxlen=10) # 10 - number of samples for averaging def read_distance_filtered(): history.append(read_distance()) diff --git a/docs/en/uart.md b/docs/en/uart.md index 4e799d87..a1b8904a 100644 --- a/docs/en/uart.md +++ b/docs/en/uart.md @@ -12,7 +12,7 @@ Read more about the interface and the Protocol in [this article](https://habr.co ## Linux TTY -In Linux, there is the concept of Posix Terminal Interface (read more [here](https://ru.wikipedia.org/wiki/TTY-абстракция)). It is an abstraction over the serial or virtual interface that allows several agents to work with the device simultaneously. +In Linux, there is the concept of POSIX Terminal Interface (read more [here](https://en.wikipedia.org/wiki/POSIX_terminal_interface). It is an abstraction over the serial or virtual interface that allows several agents to work with the device simultaneously. An example of such abstraction in Raspbian may be `/dev/tty1` – the device for text output to the screen connected via HDMI. @@ -37,7 +37,7 @@ By default, Raspberry Pi 3 PL011 is connected to the Bluetooth module. And Mini For the sake of convenience of working with these outputs, aliases exist in Raspbian: * `/dev/serial0` – always points to the TTY device that is connected to the GPIO ports. -* `/dev/serial1` – always points to the TTY device that is connected to the Bluetooh module. +* `/dev/serial1` – always points to the TTY device that is connected to the Bluetooth module. ### Configuration of UART on Raspberry Pi 3 diff --git a/docs/ru/4g.md b/docs/ru/4g.md index 4c68ebef..d66dc1a9 100644 --- a/docs/ru/4g.md +++ b/docs/ru/4g.md @@ -18,15 +18,15 @@ Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ VPN сСти, для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Raspberry Pi ΠΈ Π½Π°Π·Π΅ΠΌΠ½ΠΎΠΉ станции. -Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Raspberry Pi ΠΊ вашСй сСти, установитС ΠΏΠ°ΠΊΠ΅Ρ‚ *openvpn*: +Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Raspberry Pi ΠΊ вашСй сСти, установитС ΠΏΠ°ΠΊΠ΅Ρ‚ `openvpn`: ```bash sudo apt-get install openvpn ``` -ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠΈΡ‚Π΅ ваши ΠΊΠ»ΡŽΡ‡ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ */etc/openvpn/client*. Для удобства ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ графичСский SFTP интСрфСйс ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ: WinSCP, FileZilla ΠΈ Ρ‚.Π΄. +ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠΈΡ‚Π΅ ваши ΠΊΠ»ΡŽΡ‡ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ `/etc/openvpn/client`. Для удобства ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ графичСский SFTP интСрфСйс ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ: WinSCP, FileZilla ΠΈ Ρ‚.Π΄. -Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π²Π°ΠΌΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ. ΠšΠ»ΡŽΡ‡ΠΈ ΠΌΠΎΠ³Ρƒ Π±Ρ‹Ρ‚ΡŒ сформированы Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ: *.ovpn*, *.conf*. ΠšΠ»ΡŽΡ‡ ΠΈΠ»ΠΈ конфигурация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉΡΡ Π½Π° вашСм ΠΊΠΎΠΏΡ‚Π΅Ρ€Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ строго Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ *.conf*. +Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π²Π°ΠΌΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ. ΠšΠ»ΡŽΡ‡ΠΈ ΠΌΠΎΠ³Ρƒ Π±Ρ‹Ρ‚ΡŒ сформированы Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ: `.ovpn`, `.conf`. ΠšΠ»ΡŽΡ‡ ΠΈΠ»ΠΈ конфигурация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉΡΡ Π½Π° вашСм ΠΊΠΎΠΏΡ‚Π΅Ρ€Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ строго Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ `.conf`. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ сСрвис ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ ваши ΠΊΠ»ΡŽΡ‡ΠΈ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°: @@ -34,7 +34,7 @@ sudo apt-get install openvpn sudo systemctl enable openvpn-client@config-name ``` -Π³Π΄Π΅ *config-name* - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ вашСго ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. +Π³Π΄Π΅ `config-name` - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ вашСго ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Если всС сдСлано ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ пСрСзапускС систСмы, сСрвис-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ вашСй сСти. @@ -65,7 +65,7 @@ sudo systemctl enable openvpn-client@config-name > **Info** ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ дТойстика, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° количСство Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π΅Π³ΠΎ, Π² QGroundControl(SDL2). Π’ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΡƒΠ»ΡŒΡ‚Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ всСго 4 ΠΊΠ°Π½Π°Π»Π°, Ρ‡Ρ‚ΠΎ Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° управлСния. -Если измСнСния полоТСния стиков отобраТаСтся Π² ΠΎΠΊΠ½Π΅ QGgroundControl, Π²Π°ΠΌ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠΌ происходит с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дТойстика, Π° Π½Π΅ Ρ€Π°Π΄ΠΈΠΎΠ°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹: +Если измСнСния полоТСния стиков отобраТаСтся Π² ΠΎΠΊΠ½Π΅ QGroundControl, Π²Π°ΠΌ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΏΡ‚Π΅Ρ€ΠΎΠΌ происходит с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дТойстика, Π° Π½Π΅ Ρ€Π°Π΄ΠΈΠΎΠ°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹: `COM_RC_IN_MODE` - Joystick/No RC Checks diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md index cdbc59d2..8ed598a1 100644 --- a/docs/ru/SUMMARY.md +++ b/docs/ru/SUMMARY.md @@ -80,6 +80,7 @@ * [ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ GPS](gps.md) * [Π Π°Π±ΠΎΡ‚Π° с ИК Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ](ir_sensors.md) * [Установка FPV](fpv.md) + * [Π‘Π±ΠΎΡ€ΠΊΠ° ΡˆΠ°Ρ€ΠΎΠ²ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹](sphere_guard.md) * [Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚Ρ€Π΅Π½Π΅Ρ€Π°](trainer_mode.md) * [Π’Π΅Ρ…Π½ΠΈΠΊΠ° луТСния](tinning.md) * [ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ PX4FLOW](px4flow.md) diff --git a/docs/ru/assemble_4_2_ws.md b/docs/ru/assemble_4_2_ws.md index e3b0aad2..de4c4ccb 100644 --- a/docs/ru/assemble_4_2_ws.md +++ b/docs/ru/assemble_4_2_ws.md @@ -51,7 +51,7 @@ ## Π‘Π±ΠΎΡ€ΠΊΠ° Ρ€Π°ΠΌΡ‹ -1. БовмСститС 4 Π»ΡƒΡ‡Π° с Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Π΄Π΅ΠΊΠΎΠΉ, зафиксируйтС ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΠΈΠ½Ρ‚ΠΎΠ² М3Ρ…8 ΠΈ Π³Π°Π΅ΠΊ с Π½Π΅ΠΉΠ»ΠΎΠ½ΠΎΠ²ΠΎΠΉ вставкой. +1. БовмСститС 4 Π»ΡƒΡ‡Π° с Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Π΄Π΅ΠΊΠΎΠΉ, зафиксируйтС ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΠΈΠ½Ρ‚ΠΎΠ² М3Ρ…8 ΠΈ самоконтрящихся Π³Π°Π΅ΠΊ.
@@ -102,46 +102,50 @@
-2. УстановитС рСгуляторы ΠΎΠ±ΠΎΡ€ΠΎΡ‚ΠΎΠ² (ESC) Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ мСста Π½Π° Π»ΡƒΡ‡Π΅ ΠΈ притянитС Ρ…ΠΎΠΌΡƒΡ‚Π°ΠΌΠΈ. +2. УстановитС рСгуляторы ΠΎΠ±ΠΎΡ€ΠΎΡ‚ΠΎΠ² (ESC) Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ мСста Π½Π° Π»ΡƒΡ‡Π΅.
-3. ΠžΡ‚ΠΌΠ΅Ρ€ΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство силового ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° рСгуляторов ΠΎΠ±ΠΎΡ€ΠΎΡ‚ΠΎΠ²(ESC), ΠΈ ΠΎΠ±Ρ€Π΅ΠΆΡŒΡ‚Π΅ лишнСС. +3. ΠŸΡ€ΠΈΡ‚ΡΠ½ΠΈΡ‚Π΅ рСгуляторы ΠΎΠ±ΠΎΡ€ΠΎΡ‚ΠΎΠ² (ESC) Ρ…ΠΎΠΌΡƒΡ‚Π°ΠΌΠΈ. -4. ЗачиститС ΠΈ Π·Π°Π»ΡƒΠ΄ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π΅Π·Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° + -5. Π—Π°Π»ΡƒΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ Π½Π° ΠΏΠ»Π°Ρ‚Π΅ распрСдСлСния питания. +4. ΠžΡ‚ΠΌΠ΅Ρ€ΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство силового ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° рСгуляторов ΠΎΠ±ΠΎΡ€ΠΎΡ‚ΠΎΠ²(ESC), ΠΈ ΠΎΠ±Ρ€Π΅ΠΆΡŒΡ‚Π΅ лишнСС. -6. ΠŸΡ€ΠΈΠΏΠ°ΡΠΉΡ‚Π΅ силовыС ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° рСгуляторов ΠΎΠ±ΠΎΡ€ΠΎΡ‚ΠΎΠ² ΠΊ ΠΏΠ»Π°Ρ‚Π΅ распрСдСлСния питания. +5. ЗачиститС ΠΈ Π·Π°Π»ΡƒΠ΄ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π΅Π·Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°. + +6. Π—Π°Π»ΡƒΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ Π½Π° ΠΏΠ»Π°Ρ‚Π΅ распрСдСлСния питания. + +7. ΠŸΡ€ΠΈΠΏΠ°ΡΠΉΡ‚Π΅ силовыС ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° рСгуляторов ΠΎΠ±ΠΎΡ€ΠΎΡ‚ΠΎΠ² ΠΊ ΠΏΠ»Π°Ρ‚Π΅ распрСдСлСния питания.
- +
> **Caution** Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ подписям ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² Π½Π° ΠΏΠ»Π°Ρ‚Π΅. ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄Ρ‚ΠΈ ΠΊ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ΅ с подписью *+*, Π° Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ΠΊ подписи *-*. -7. ΠžΠ±Ρ€Π΅ΠΆΡŒΡ‚Π΅ лишний Ρ„Π°Π·Π½Ρ‹ΠΉ кабСль ΠΈΠ΄ΡƒΡ‰ΠΈΠΉ ΠΎΡ‚ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ². +8. ΠžΠ±Ρ€Π΅ΠΆΡŒΡ‚Π΅ лишний Ρ„Π°Π·Π½Ρ‹ΠΉ кабСль ΠΈΠ΄ΡƒΡ‰ΠΈΠΉ ΠΎΡ‚ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ². -8. ЗачиститС ΠΈ Π·Π°Π»ΡƒΠ΄ΠΈΡ‚Π΅ Ρ„Π°Π·Π½Ρ‹Π΅ ΠΊΠ°Π±Π΅Π»ΠΈ. +9. ЗачиститС ΠΈ Π·Π°Π»ΡƒΠ΄ΠΈΡ‚Π΅ Ρ„Π°Π·Π½Ρ‹Π΅ ΠΊΠ°Π±Π΅Π»ΠΈ. -9. Π—Π°Π»ΡƒΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ рСгуляторов ΠΎΠ±ΠΎΡ€ΠΎΡ‚ΠΎΠ². +10. Π—Π°Π»ΡƒΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ рСгуляторов ΠΎΠ±ΠΎΡ€ΠΎΡ‚ΠΎΠ². -10. ΠŸΡ€ΠΈΠΏΠ°ΡΠΉΡ‚Π΅ Ρ„Π°Π·Π½Ρ‹Π΅ ΠΊΠ°Π±Π΅Π»ΠΈ ΠΊ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΌ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ°ΠΌ рСгуляторов Π² любом порядкС. +11. ΠŸΡ€ΠΈΠΏΠ°ΡΠΉΡ‚Π΅ Ρ„Π°Π·Π½Ρ‹Π΅ ΠΊΠ°Π±Π΅Π»ΠΈ ΠΊ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΌ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ°ΠΌ рСгуляторов Π² любом порядкС.
- +
-11. ΠŸΡ€ΠΈΠΏΠ°ΡΠΉΡ‚Π΅ 3 Ρ€Π°Π·ΡŠΠ΅ΠΌΠ° JST ΠΌΠ°ΠΌΠ° ΠΊ 2ΡƒΠΌ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ°ΠΌ *5V* ΠΈ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ΅ *bat+* +12. ΠŸΡ€ΠΈΠΏΠ°ΡΠΉΡ‚Π΅ 3 Ρ€Π°Π·ΡŠΠ΅ΠΌΠ° JST ΠΌΠ°ΠΌΠ° ΠΊ 2ΡƒΠΌ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ°ΠΌ *5V* ΠΈ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ΅ *bat+*.
- +
## Установка ΠΏΠΎΠ»Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° @@ -215,7 +219,7 @@ -4. УстановитС Raspberry Pi Π½Π° ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ½ΡƒΡŽ Π΄Π΅ΠΊΡƒ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΠ² Π΅Π΅ Π±ΠΎΠ»Ρ‚Π°ΠΌΠΈ М3Ρ…6. +4. УстановитС Raspberry Pi Π½Π° ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ½ΡƒΡŽ Π΄Π΅ΠΊΡƒ, Π·Π°ΠΊΡ€Π΅ΠΏΠΈΠ² Π΅Π΅ Π±ΠΎΠ»Ρ‚Π°ΠΌΠΈ М3Ρ…6. @@ -256,7 +260,7 @@ -10. На ΠΌΠ°Π»ΡƒΡŽ ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ½ΡƒΡŽ Π΄Π΅ΠΊΡƒ установитС ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ ΠΈ зафиксируйтС Π΅Π΅ двумя ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌΠΈ саморСзами, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС. +10. На ΠΌΠ°Π»ΡƒΡŽ ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ½ΡƒΡŽ Π΄Π΅ΠΊΡƒ установитС ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ ΠΈ зафиксируйтС Π΅Π΅ двумя ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌΠΈ саморСзами. > **Caution** Если Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ ΠΈ шляпка саморСза Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ элСмСнта Π½Π° ΠΊΠ°ΠΌΠ΅Ρ€Π΅, ΠΊΠ°ΠΌΠ΅Ρ€Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. @@ -266,7 +270,7 @@ -12. Π‘ΠΎΠ±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ установитС Π½Π° Π½Π°Π΄ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Raspberry Pi ΠΈ зафиксируйтС Π±ΠΎΠ»Ρ‚Π°ΠΌΠΈ М3Ρ…8. +12. Π‘ΠΎΠ±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ установитС Π½Π°Π΄ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Raspberry Pi ΠΈ зафиксируйтС Π±ΠΎΠ»Ρ‚Π°ΠΌΠΈ М3Ρ…8. @@ -278,7 +282,7 @@ -15. Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ с Ρ€Π°Π΄ΠΈΠΎΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ кабСля. +15. Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ Ρ€Π°Π΄ΠΈΠΎΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 4-Ρ… ΠΏΠΈΠ½ΠΎΠ²ΠΎΠ³ΠΎ кабСля. @@ -334,4 +338,15 @@ +4. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ ΠΊ Raspberry Pi с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ USB ΠΊ кабСля. + +
+ + +
+ +5. УстановитС Ρ€Π΅ΠΌΠ΅ΡˆΠΎΠΊ для крСплСния ΠΠšΠ‘. + + + > **Success** Π”Ρ€ΠΎΠ½ собран, Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΠΈΡ‚Π΅ [настройку](setup.md). diff --git a/docs/ru/assembly.md b/docs/ru/assembly.md index 9e91cdf2..c041f075 100644 --- a/docs/ru/assembly.md +++ b/docs/ru/assembly.md @@ -9,11 +9,11 @@ ΠšΠ»Π΅Π²Π΅Ρ€ 4.2 - + - + diff --git a/docs/ru/blocks.md b/docs/ru/blocks.md index 14e0cdcd..5e503185 100644 --- a/docs/ru/blocks.md +++ b/docs/ru/blocks.md @@ -108,3 +108,14 @@ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π±Π»ΠΎΠΊΠ° для установки случайного Ρ†Π²Π΅Ρ‚Π° (Π±Π»ΠΎΠΊΠΈ, связанныС с Ρ†Π²Π΅Ρ‚Π°ΠΌΠΈ находятся Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ *Colour*): + +### Π Π°Π±ΠΎΡ‚Π° с GPIO {#GPIO} + +ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ GPIO содСрТит Π±Π»ΠΎΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с GPIO. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ этих Π±Π»ΠΎΠΊΠΎΠ² Π΄Π΅ΠΌΠΎΠ½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с GPIO `pigpiod` Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½: + +```bash +sudo systemctl enable pigpiod.service +sudo systemctl start pigpiod.service +``` + +Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ GPIO Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² [ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅](gpio.md). diff --git a/docs/ru/coex_pix.md b/docs/ru/coex_pix.md index 8d6d7110..1326b2e5 100644 --- a/docs/ru/coex_pix.md +++ b/docs/ru/coex_pix.md @@ -35,9 +35,9 @@ ### Π‘Ρ…Π΅ΠΌΡ‹ располоТСния ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² - + - + > **Note** На ΠΏΠ»Π°Ρ‚Π΅ Ρ€Π΅Π²ΠΈΠ·ΠΈΠΈ 1.0 RC IN Ρ€Π°Π·ΡŠΠ΅ΠΌ располагался Π½Π° мСстС Ρ€Π°Π·ΡŠΠ΅ΠΌΠ° Micro SD. Распиновка самого Ρ€Π°Π·ΡŠΠ΅ΠΌΠ° ΠΎΡΡ‚Π°Π»Π°ΡΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅. @@ -58,3 +58,18 @@ ### ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΏΠ»Π°Ρ‚Ρ‹ Для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ надСТности ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΠ»Π°Ρ‚Π° оснащСна Π½ΠΈΠ·ΠΊΠΎΡˆΡƒΠΌΡΡ‰ΠΈΠΌΠΈ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡŽΡ‰ΠΈΠΌΠΈ прСобразоватСлями. УстановлСн Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ LC Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π² цСпях питания. + +## РСвизия 1.2 + +### НововвСдСния + +* Π—Π°ΠΌΠ΅Π½Π΅Π½ Ρ€Π°Π·ΡŠΠ΅ΠΌ USB Micro-B Π½Π° Ρ€Π°Π°Π·ΡŠΠ΅ΠΌ USB Type-C. +* ИзмСнСн слот для MicroSD ΠΊΠ°Ρ€Ρ‚, Π½Π° Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ. +* Π˜Π·ΠΌΠ΅Π½Π΅Π½Ρ‹ назначСния ΠΏΠΈΠ½ΠΎΠ² Π½Π° Ρ€Π°Π·ΡŒΠ΅ΠΌΠ΅ I2C. +* Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ„Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π² Ρ†Π΅ΠΏΠΈ питания. + +### Π‘Ρ…Π΅ΠΌΡ‹ располоТСния ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² + + + + diff --git a/docs/ru/programming.md b/docs/ru/programming.md index 3777f2a8..3acb253c 100644 --- a/docs/ru/programming.md +++ b/docs/ru/programming.md @@ -92,6 +92,8 @@ land() ПолноС описания API ΠšΠ»Π΅Π²Π΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ["Автономный ΠΏΠΎΠ»Π΅Ρ‚"](simple_offboard.md). +> **Hint** Π’ ΠšΠ»Π΅Π²Π΅Ρ€Π΅ Ρ‚Π°ΠΊΠΆΠ΅ доступна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° [Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования](blocks.md) Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅Ρ‚ΠΎΠ². + ## Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠšΠ»Π΅Π²Π΅Ρ€Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠ΅ΠΉ. Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ для подробностСй: diff --git a/docs/ru/projects.md b/docs/ru/projects.md index fdfc7bf7..d0d165ea 100644 --- a/docs/ru/projects.md +++ b/docs/ru/projects.md @@ -36,5 +36,6 @@ |ΠŸΠΎΠ»Π΅Ρ‚ ΠΊΠΎΠΏΡ‚Π΅Ρ€Π° Π½Π° Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ с ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ Π²Π½ΠΈΠ·|| |Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π»ΠΈΠ΄Π°Ρ€Π° ([RPLIDAR](https://www.slamtec.com/en/Lidar)) Π² ΠšΠ»Π΅Π²Π΅Ρ€|| |Зарядная станция для ΠΊΠΎΠΏΡ‚Π΅Ρ€Π° Π½Π° солнСчном ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ‚ΠΎΡ€Π΅|| +|Π‘Ρ‚Π΅Π½Π΄ для стройки коэффициСнтов PID Π½Π° ΠšΠ»Π΅Π²Π΅Ρ€Π΅|| Π’Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… конкурса ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² [Copter Hack](https://ru.coex.tech/copterhack). ΠœΡ‹ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…. diff --git a/docs/ru/simulation_vm.md b/docs/ru/simulation_vm.md index 9e6c67fe..366e473c 100644 --- a/docs/ru/simulation_vm.md +++ b/docs/ru/simulation_vm.md @@ -10,9 +10,13 @@ * ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнный симулятор Gazebo; * срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Visual Studio Code с ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Python ΠΈ C++. +> **Info** Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС - `clover`, ΠΏΠ°Ρ€ΠΎΠ»ΡŒ - `clover`. + Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ для запуска симуляторов, Ρ‚Π°ΠΊ ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с настоящим Π΄Ρ€ΠΎΠ½ΠΎΠΌ. -Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ [Π² Ρ€Π΅Π»ΠΈΠ·Π°Ρ… рСпозитория Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹](https://github.com/CopterExpress/clover_vm/releases) +## Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ + +Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ [Π² Ρ€Π΅Π»ΠΈΠ·Π°Ρ… рСпозитория Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹](https://github.com/CopterExpress/clover_vm/releases). > **Warning** Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ использованиС Ubuntu 18.04 Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, особСнно Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ 3D-Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ - jMAVSim, Gazebo, rviz - Π±ΡƒΠ΄Π΅Ρ‚ сущСствСнно Π½ΠΈΠΆΠ΅; ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² рядС случаСв Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ графичСскиС ошибки, приводящиС ΠΊ частичной ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ нСработоспособности ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. diff --git a/docs/ru/sphere_guard.md b/docs/ru/sphere_guard.md new file mode 100644 index 00000000..4c50c68f --- /dev/null +++ b/docs/ru/sphere_guard.md @@ -0,0 +1,88 @@ +# Π‘Π±ΠΎΡ€ΠΊΠ° сфСричСской Π·Π°Ρ‰ΠΈΡ‚Ρ‹ + + + +## Π‘Π±ΠΎΡ€ΠΊΠ° пояса сфСры + +1. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π½ΠΈΠ΅ крСплСния ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. + + + +2. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ Π·Π°Π΄Π½ΠΈΠ΅ крСплСния ΠΊΠΎΠΏΡ‚Π΅Ρ€Π°. + + + +3. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ пояса. + + + +4. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ заднюю Ρ‡Π°ΡΡ‚ΡŒ пояса. + + + +5. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΡƒΡŽ ΠΈ Π»Π΅Π²ΡƒΡŽ части пояса. + +
+ + +
+ +6. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ пояс сфСры (Π²ΠΈΠ΄Ρ‹ свСрху ΠΈ сбоку). + +
+ + +
+ +7. Пояс сфСры Π² сборС. + +
+ + +
+ +8. Π—Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ ΠΊΠΎΠΏΡ‚Π΅Ρ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ пояса. + +
+ + +
+ +## Π‘Π±ΠΎΡ€ΠΊΠ° Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части сфСры + +1. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ сфСры. + + + +### Установка GPS модуля + +1. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ GPS. + + + +2. УстановитС ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ GPS Π½Π° Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ сфСры. + +
+ + +
+ +### Установка ΠΊΠΎΡ€Π·ΠΈΠ½ΠΊΠΈ + +1. ΠŸΡ€ΠΎΠ΄Π΅Π½ΡŒΡ‚Π΅ ΠΏΡ€ΡƒΡ‚ΠΊΠΈ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Π·Ρ‹ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΠΊΠ΅ ΠΈ соСдинитС ΠΈΡ… ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ. + + + +2. УстановитС ΠΊΠΎΡ€Π·ΠΈΠ½ΠΊΡƒ Π² сСрСдину Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части сфСры. + + + +## Π‘Π±ΠΎΡ€ΠΊΠ° Π½ΠΈΠΆΠ½Π΅ΠΉ части сфСры + +1. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ниТнюю Ρ‡Π°ΡΡ‚ΡŒ сфСры. + + + +2. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΡˆΠ°Ρ€ΠΎΠ²ΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΈΠ· 3-Ρ… частСй. + +
VersionImage
Clover 4.2 + Clover 4.2 + +
Clover 4
ΠšΠ»Π΅Π²Π΅Ρ€ 4.1
ΠšΠ»Π΅Π²Π΅Ρ€ 4