Compare commits

..

162 Commits
v0.12 ... v0.14

Author SHA1 Message Date
Oleg Kalachev
aa8ed7662f docs: add article about using sonar 2018-12-13 01:16:10 +03:00
Oleg Kalachev
06df8848bd image: add rpi_ws281x library for LED 2018-12-13 00:19:45 +03:00
Andrei Korigodski
02b365eb96 docs: fix typo in copterhack2017.md 2018-12-12 21:21:54 +03:00
Oleg Kalachev
db71d0e234 docs: tune arduino article 2018-12-12 06:07:30 +03:00
Oleg Kalachev
21121b294d docs: tune titles 2018-12-12 05:04:25 +03:00
Oleg Kalachev
4bca49113a Use normal link to documentation 2018-12-12 04:40:44 +03:00
Oleg Kalachev
54e6701c51 License file is not markdown 2018-12-12 04:29:14 +03:00
Oleg Kalachev
8f73c6af0b image: add pigpiod library 2018-12-12 04:14:37 +03:00
Oleg Kalachev
962ac189ea ios rc: merge repeated notifications 2018-12-12 02:14:13 +03:00
Oleg Kalachev
1e1d11b216 docs: add video from Copter Hack 2018 2018-12-12 00:30:58 +03:00
Oleg Kalachev
c3dd18d661 docs: tuning 2018-12-10 08:07:45 +03:00
Oleg Kalachev
e5c66ec77d docs: reduce images size 2018-12-10 07:57:32 +03:00
Oleg Kalachev
52ab8de1cc docs: editing and linting 2018-12-10 07:30:53 +03:00
Oleg Kalachev
31351100aa docs: making linter happy + remove unused 2018-12-10 07:11:00 +03:00
Oleg Kalachev
6f59e4c9d6 docs: yaw example 2018-12-09 22:58:21 +03:00
Oleg Kalachev
79a78ceb7b docs: small fix 2018-12-09 00:36:59 +03:00
Oleg Kalachev
ef3776e235 docs: add estimation info to glossary 2018-12-09 00:32:27 +03:00
Oleg Kalachev
422ce4b3f7 docs: aruco docs improvements 2018-12-08 23:45:56 +03:00
Oleg Kalachev
00a3ec01f2 docs: ‘vision yaw’ was removed from LPE_FUSION 2018-12-08 23:26:58 +03:00
Oleg Kalachev
da37f29d9d docs: improvements 2018-12-07 18:33:02 +03:00
Oleg Kalachev
a69146a36e docs: little addition 2018-12-07 18:33:02 +03:00
Oleg Kalachev
e7b12be958 docs: foo => flight 2018-12-07 06:20:23 +03:00
Arthur Golubtsov
c8994aebb4 Add camera visualization for Clever 3 2018-12-05 00:55:09 +03:00
Oleg Kalachev
47fc673d73 docs: add info on how to change wi-fi ssid and password 2018-12-05 00:14:30 +03:00
Oleg Kalachev
8a4cdb3287 docs: fix 2018-12-04 17:04:56 +03:00
Oleg Kalachev
253d3563d5 docs: fix links 2018-12-04 16:53:40 +03:00
Oleg Kalachev
96e6c5bc71 selfcheck.py: don’t capitalize failure messages 2018-12-03 06:31:10 +03:00
Oleg Kalachev
8c5a0716e7 selfcheck.py: check VPE and local position inconsistency 2018-12-03 06:26:01 +03:00
Oleg Kalachev
ff7ffa0c22 docs: editing 2018-12-01 21:29:26 +03:00
Oleg Kalachev
ced31329ef docs: small fix 2018-12-01 20:34:39 +03:00
Oleg Kalachev
3b2433127d gitbook: move Russian version to subdirectory, set up redirects, fix rich quotes, fixes 2018-12-01 06:59:02 +03:00
Oleg Kalachev
29c2ebc086 book.json cleanup 2018-11-30 21:10:36 +03:00
Oleg Kalachev
fb14d158ad gitbook: add anchors plugin 2018-11-30 20:55:29 +03:00
Oleg Kalachev
0e4b2a6e50 gitbook: fix link and add validate-links plugin 2018-11-30 20:38:56 +03:00
Oleg Kalachev
3c6482e204 .gitignore: add gitbook artifacts 2018-11-28 23:05:23 +03:00
Oleg Kalachev
72945cb094 docs: add Markdown tooling info 2018-11-28 23:03:52 +03:00
Oleg Kalachev
b8271dd49c docs: add English version 2018-11-28 02:18:50 +03:00
Oleg Kalachev
4cf8e19923 docs: unused file 2018-11-23 22:15:11 +03:00
Oleg Kalachev
436ec5e638 docs: unused files 2018-11-23 22:14:39 +03:00
Oleg Kalachev
d311c0584d docs: unused document 2018-11-23 22:12:38 +03:00
Oleg Kalachev
f98c31aba2 docs: style 2018-11-23 22:01:05 +03:00
Oleg Kalachev
3ca36f6edf docs: add link 2018-11-23 21:55:11 +03:00
Oleg Kalachev
7cdb627b1b docs: improve web_video_server article 2018-11-23 21:52:23 +03:00
Oleg Kalachev
8d8421ae35 docs: more info on image download page 2018-11-23 21:45:11 +03:00
Oleg Kalachev
08c38106ab docs: style 2018-11-23 21:39:37 +03:00
Oleg Kalachev
2a19a91714 docs: qgc_bridge: style 2018-11-23 21:35:54 +03:00
Oleg Kalachev
d9b29c89d9 docs: typo 2018-11-23 21:34:13 +03:00
Oleg Kalachev
c04eb6fd31 docs: wifi.md: add illustration 2018-11-23 21:33:10 +03:00
Oleg Kalachev
d1f58c2835 docs: style 2018-11-23 21:27:32 +03:00
Oleg Kalachev
29c360a501 markdownlint: allow question marks in headings 2018-11-23 21:23:41 +03:00
Oleg Kalachev
700e2b5e0f docs: safety.md style 2018-11-23 21:21:39 +03:00
Oleg Kalachev
ce1790d5e8 docs: fix network.md style 2018-11-23 21:18:18 +03:00
Oleg Kalachev
1f9ae88946 docs: fix style for assembling of clever 3 2018-11-23 00:05:37 +03:00
Oleg Kalachev
5abbdbab6c docs: improvements 2018-11-22 23:39:56 +03:00
Oleg Kalachev
80208e4c5e docs: style 2018-11-22 23:34:50 +03:00
Oleg Kalachev
c65f9eaace docs: unused file 2018-11-22 23:33:32 +03:00
Oleg Kalachev
9ebd744d2c docs: small addition 2018-11-22 22:45:39 +03:00
Oleg Kalachev
74fe0cce59 docs: small fix 2018-11-22 22:43:20 +03:00
Oleg Kalachev
8aec577706 gitbook: remove versions plugin 2018-11-22 22:40:50 +03:00
Oleg Kalachev
4c7cd17051 docs: make structure for summary 2018-11-22 22:39:24 +03:00
Oleg Kalachev
af2ce1bdc9 docs: edit raspberry pi article a little 2018-11-22 22:29:06 +03:00
Andrei Korigodski
de85a30065 docs: comment out TODOs in contributing.md 2018-11-22 19:59:51 +03:00
Andrei Korigodski
ae5ead3c75 docs: fix typo in contributing.md 2018-11-22 19:59:16 +03:00
Andrei Korigodski
e20d2f4076 docs: rename contribution.md to contributing.md 2018-11-22 19:48:27 +03:00
Oleg Kalachev
30a6ee9528 docs: fixes 2018-11-21 22:10:28 +03:00
Oleg Kalachev
6332e96b4e docs: fixes 2018-11-21 22:09:57 +03:00
Oleg Kalachev
4cf63fbd33 docs: fix 2018-11-21 22:08:47 +03:00
Oleg Kalachev
d32ec1004f docs: fixes 2018-11-21 22:08:27 +03:00
Oleg Kalachev
74940a3e31 docs: fixes 2018-11-21 22:05:58 +03:00
Oleg Kalachev
3de413cf71 docs: contribution 2018-11-21 22:01:17 +03:00
Oleg Kalachev
37443c9fdc docs: remove unused 2018-11-21 22:01:17 +03:00
Arthur Golubtsov
65666d619d Change docker image to add ability of copying directories 2018-11-19 18:50:20 +03:00
Arthur Golubtsov
3d85acaf68 Generate documentation pages via Gitbook toolchain and serve them with monkey-server 2018-11-19 18:48:48 +03:00
goldarte
b4287801a2 Updates docs/leds.md
Auto commit by GitBook Editor
2018-11-19 12:48:34 +00:00
Arthur Golubtsov
a51553fa1f Delete 2nd keyserver for ros, which was added for tests 2018-11-18 19:19:07 +03:00
Oleg Kalachev
e76f1a003d Merge pull request #81 from vilesovds/patch-3
docs: link in URL encoding format
2018-11-17 04:55:16 +03:00
Arthur Golubtsov
b31d88507e Fix versions of dirmngr (to 2.1.18-8~deb9u3) and python-rosdep (to 0.13.0-1) 2018-11-16 21:47:38 +03:00
Oleg Kalachev
d8ae4a3ad4 selfcheck.py: check pitch and roll angles (level horizon) 2018-11-15 22:59:05 +03:00
Oleg Kalachev
cb0f79cd2f docs: edit style 2018-11-14 19:23:37 +03:00
Oleg Kalachev
1b64cfbad6 docs: setup.md: edit style 2018-11-14 19:22:11 +03:00
Oleg Kalachev
0d7d299b7d docs: typos 2018-11-13 19:03:39 +03:00
Oleg Kalachev
9051b5d836 docs: add Butterfly terminal access info 2018-11-13 18:41:49 +03:00
Oleg Kalachev
3d95d83d9a docs: add selfchecking info 2018-11-13 18:41:49 +03:00
Arthur Golubtsov
f7e8497879 Delete pictures from root 2018-11-13 14:41:22 +03:00
DMITRY VILESOV
d61dea4b92 docs: link in URL encoding format
Самый простой способ запихнуть скобки в ссылку для gitbook - использовать %28 ... %29 вместо них. Русские символы были также закодированы на всякий случай...
2018-11-10 15:23:40 +03:00
Arthur Golubtsov
9cf4a7a9fa Edit summary structure, add missing links (zap.md and cl3_connectESC4in1.md) 2018-11-09 20:09:24 +03:00
Arthur Golubtsov
488be6185e Merge pull request #67 from Svetk0/CL3_assemble_new
Cl3 assemble new
2018-11-09 19:30:31 +03:00
Arthur Golubtsov
0649c0c58f Merge branch 'master' into CL3_assemble_new 2018-11-09 19:28:20 +03:00
Oleg Kalachev
24f30ca5e5 Merge pull request #80 from vilesovds/patch-2
docs: added escape chars to brackets in the link
2018-11-09 16:15:02 +03:00
Oleg Kalachev
eeb639d2b7 docs: edited fpv article a little 2018-11-09 01:50:32 +03:00
ArtemOsokin
abb8294bb0 Update SUMMARY.md 2018-11-09 01:43:25 +03:00
ArtemOsokin
237e562a4f docs: add fpv instruction (#1)
* Create fpv.md

* Update fpv.md

* Update fpv.md

* Add files via upload

* Add files via upload

* Add files via upload

* Update fpv.md

* Add files via upload

* Update fpv.md

* Update fpv.md

* Add files via upload

* Add files via upload

* Delete fpv_1.png

* Add files via upload

* Delete fpv_1.png

* Add files via upload
2018-11-09 01:42:47 +03:00
DMITRY VILESOV
e89185c654 docs: added escape chars to brackets in the link
А вот зачем дублировать эту ссылку под №12, но на английском - непонятно
2018-11-09 00:50:47 +03:00
Oleg Kalachev
a34272256a docs: remove image captions 2018-11-08 05:18:34 +03:00
Oleg Kalachev
e853df7781 docs: small fix 2018-11-08 05:11:53 +03:00
Oleg Kalachev
3517cfb869 Tune image captions 2018-11-08 05:08:57 +03:00
Oleg Kalachev
4886c3ef4c docs: small changes 2018-11-08 05:06:53 +03:00
Oleg Kalachev
51f8ea0ca4 gitbook: add image-caption plugin 2018-11-08 05:06:02 +03:00
Oleg Kalachev
7daa941ffe docs: add more info about Copter Hack 2018 2018-11-08 05:04:08 +03:00
Oleg Kalachev
5ed097ee0b snippets: add anchor link to each snippet 2018-11-08 04:33:23 +03:00
Oleg Kalachev
4e069c1e75 docs: tabs->spaces in python code 2018-11-08 04:27:08 +03:00
Oleg Kalachev
17ba10e2f2 snippets: add tf2 transform example 2018-11-05 21:04:04 +03:00
Arthur Golubtsov
dacf6a38ab changed default settings of main_camera.launch 2018-11-02 22:54:47 +03:00
Arthur Golubtsov
a4aa8bcc6d Add information and illustrations about camera orientations, update default settings in main_camera.launch 2018-11-02 22:28:50 +03:00
Arthur Golubtsov
5c8700257b Merge branch 'master' of https://github.com/CopterExpress/clever 2018-11-02 20:11:08 +03:00
Arthur Golubtsov
862b45a512 Add information for camera_markers visualization 2018-11-02 20:10:03 +03:00
Oleg Kalachev
db20dd0ec7 Merge pull request #79 from sfalexrog/WIP/build-script-fixes
Build script fixes
2018-11-02 18:56:43 +03:00
sfalexrog
8932314853 build-scripts: Disable system-wide upgrade for pip
Upgrading pip system-wide should be a task for the system package manager,
and doing it through pip itself seems to be frowned upon (not to mention leaving
the end user with a broken package installer and broken packages). It also seems
to have some fun/nasty side effects (like setting pip up to install packages for python3
instead of python2, for which pip2 is used).

Debian-packaged pip, while being older, doesn't seem to break stuff for now. End user should
be able to upgrade to a newer pip locally (which seems like the right thing to do), but
a possibility of having a more recent pip should be looked into nonetheless.
2018-11-02 11:08:19 +03:00
sfalexrog
8e0e5bba19 build-scripts: Fix upgrading pip for python3 2018-11-02 09:56:42 +03:00
Oleg Kalachev
3da2c1c79a Fix Etcher screensot 2018-11-01 19:25:44 +03:00
Oleg Kalachev
39e8874b87 Merge pull request #74 from timkondratiev/patch-1
Fixed missing sudoers changes
2018-10-29 16:52:40 +03:00
timkondratiev
d320702470 Fixed missing sudoers changes 2018-10-25 17:42:20 +03:00
Oleg Kalachev
110bba7c32 Update snippets.md 2018-10-23 04:45:20 +03:00
Oleg Kalachev
c653207daf Update copterhack2018.md 2018-10-21 02:46:04 +03:00
Oleg Kalachev
f1b4d779cb Update copterhack2018.md 2018-10-21 02:45:09 +03:00
Oleg Kalachev
0ead8d41e1 Update aruco.md 2018-10-21 02:41:26 +03:00
Oleg Kalachev
088e42a88a Update copterhack2018.md 2018-10-21 02:40:55 +03:00
Oleg Kalachev
12d2f42e41 docs: little update 2018-10-21 02:38:08 +03:00
goldarte
9c65f61db4 Creates docs/copterhack2018.md
Auto commit by GitBook Editor
2018-10-20 13:16:12 +00:00
Oleg Kalachev
225062cefe docs: some info on optical flow troubleshooting 2018-10-19 14:18:19 +03:00
Oleg Kalachev
a6196c182d Fix Travis build status link 2018-10-19 04:13:43 +03:00
Oleg Kalachev
1342182d7c Fix Travis build status icon 2018-10-19 04:13:01 +03:00
Oleg Kalachev
163af20d29 Tune up sitl.launch a little 2018-10-19 03:36:34 +03:00
Oleg Kalachev
d376bc0553 selfcheck: add vpe or mocap data checking 2018-10-19 03:32:42 +03:00
Oleg Kalachev
802d04e1eb selfcheck: add checking optical flow data 2018-10-19 03:23:46 +03:00
Oleg Kalachev
99b03ae5be selfcheck: add rangefinder data checking 2018-10-19 03:22:49 +03:00
Oleg Kalachev
9a3c13da77 simple_offboard: better handle non-existent frame_ids in get_telemetry 2018-10-19 00:14:19 +03:00
Oleg Kalachev
d012c4fe7a simple_offboard: fix bug when navigate target is at 0 distance 2018-10-18 23:48:26 +03:00
Oleg Kalachev
75d20b1234 docs: update opt-flow firmware link 2018-10-18 01:42:38 +03:00
Oleg Kalachev
96fb8a21e6 docs: small fix 2018-10-18 01:42:38 +03:00
Oleg Kalachev
39787af90b simple_offboard: make behaviour more reasonable when frame_id doesn’t exist 2018-10-18 01:42:38 +03:00
Oleg Kalachev
07a8ed0dc2 clever.launch: little fix 2018-10-18 01:42:38 +03:00
Oleg Kalachev
ee3941f16c Merge pull request #72 from vilesovds/patch-1
Fixed broken links
2018-10-18 00:40:54 +03:00
vilesovds
ffe89f8265 Fixed broken links 2018-10-18 00:27:07 +03:00
Artem Smirnov
2a0562188a image: Add params for monkey 2018-10-17 16:04:58 +03:00
Svetk0
ea860e20a6 Add files via upload 2018-10-03 13:23:47 +03:00
Svetk0
87686c1d36 Delete cl3_connectionESC4in1.jpg 2018-10-03 13:23:22 +03:00
Svetk0
e7ee8d2317 Add files via upload 2018-10-03 13:17:54 +03:00
Svetk0
b21c6bce9f Delete cl3_connectionESC4in1.jpg 2018-10-03 13:15:49 +03:00
Svetk0
679e0bbd00 Add files via upload 2018-10-01 23:46:16 +03:00
Svetk0
58a73b3b53 Create cl3_connectESC4in1.md 2018-10-01 23:41:17 +03:00
Svetk0
769c999c98 Update assemble_clever3_4in1.md 2018-09-20 11:51:10 +03:00
Svetk0
e0e53aa517 Add files via upload 2018-09-20 11:50:57 +03:00
Svetk0
3a59e60373 Add files via upload 2018-09-20 11:46:09 +03:00
Svetk0
78b4b9c938 Delete cl3_testMotorsFlysky.JPG 2018-09-20 11:45:26 +03:00
Svetk0
ea166af67b Delete cl3_mountPixracer.JPG 2018-09-20 11:45:00 +03:00
Svetk0
5baddc9946 Delete cl3_mountRaspberryPi.JPG 2018-09-20 11:44:32 +03:00
Svetk0
7357694211 Update assemble_clever3_4in1.md 2018-09-20 11:43:02 +03:00
Svetk0
1dd2d0c1e4 Update assemble_clever3_4in1.md 2018-09-19 17:33:16 +03:00
Svetk0
5e5d46ee4e Update assemble_clever3_4in1.md 2018-09-19 17:29:28 +03:00
Svetk0
91782898fc Update assemble_clever3_4in1.md 2018-09-19 17:28:06 +03:00
Svetk0
58d41eda8b Update assemble_clever3_4in1.md 2018-09-19 17:23:43 +03:00
Svetk0
c017102cc9 Update assemble_clever3_4in1.md 2018-09-19 17:22:50 +03:00
Svetk0
2f757f9bfd Update assemble_clever3_4in1.md 2018-09-19 15:50:10 +03:00
Svetk0
e9c759df15 Add files via upload 2018-09-19 15:48:16 +03:00
Svetk0
111eab727e Update assemble_clever3_4in1.md 2018-09-19 15:47:20 +03:00
Svetk0
1f39d5e938 Create assemble_clever3_4in1.md 2018-09-19 12:42:24 +03:00
Svetk0
9bf908bdfb Update SUMMARY.md 2018-09-19 12:41:07 +03:00
Svetk0
cba5100d17 Update SUMMARY.md 2018-09-19 12:40:44 +03:00
Svetk0
d9b3a029c3 Update assemble.md 2018-09-19 12:26:05 +03:00
Svetk0
58ede7e85e Add files via upload 2018-08-21 13:24:52 +03:00
Svetk0
432e60f9cc Add files via upload 2018-08-17 11:47:31 +03:00
153 changed files with 2097 additions and 1534 deletions

5
.gitignore vendored
View File

@@ -1,3 +1,6 @@
*.pyc
*.DS_Store
/images
/images
node_modules/
_book/
package-lock.json

View File

@@ -1,8 +1,16 @@
{
"MD003": false,
"MD010": {
"code_blocks": false
},
"MD013": false,
"MD024": false,
"MD026" :{
"punctuation": ".,;:!"
},
"MD033": false,
"MD034": false,
"MD040": false,
"MD044": {
"names": [
"MAVLink",
@@ -18,5 +26,6 @@
"ArUco"
],
"code_blocks": false
}
},
"MD045": false
}

View File

@@ -4,7 +4,7 @@ services:
- docker
env:
global:
- DOCKER="smirart/img-tool:v0.1"
- DOCKER="goldarte/img-tool:builder-mod"
- TARGET_REPO="https://github.com/${TRAVIS_REPO_SLUG}.git"
- if [[ -z ${TRAVIS_TAG} ]]; then IMAGE_VERSION="${TRAVIS_COMMIT}}"; else IMAGE_VERSION="${TRAVIS_TAG}"; fi
- IMAGE_NAME="$(basename -s '.git' ${TARGET_REPO})_${IMAGE_VERSION}.img"
@@ -16,8 +16,8 @@ script:
- docker run --privileged --rm -v /dev:/dev -v $(pwd):/builder/repo -e TRAVIS_TAG="${TRAVIS_TAG}" ${DOCKER}
before_deploy:
# Set up git user name and tag this commit
- git config --local user.name "urpylka"
- git config --local user.email "urpylka@gmail.com"
- git config --local user.name "goldarte"
- git config --local user.email "goldartt@gmail.com"
- sudo chmod -R 777 *
- cd images && zip ${IMAGE_NAME}.zip ${IMAGE_NAME}
deploy:

View File

View File

@@ -14,7 +14,7 @@ Use it to learn how to assemble, configure, pilot and program autonomous CLEVER
**Preconfigured image for Raspberry Pi 3 with installed and configured software, ready to fly, is available [in the Releases section](https://github.com/CopterExpress/clever/releases).**
[![Build Status](https://travis-ci.org/urpylka/clever.svg?branch=master)](https://travis-ci.org/urpylka/clever)
[![Build Status](https://travis-ci.org/CopterExpress/clever.svg?branch=master)](https://travis-ci.org/CopterExpress/clever)
Image includes:
@@ -25,7 +25,7 @@ Image includes:
* mavros
* CLEVER software bundle for autonomous drone control
API description (in Russian) for autonomous flights is available [on GitBook](https://copterexpress.gitbooks.io/clever/simple_offboard.html).
API description (in Russian) for autonomous flights is available [on GitBook](https://clever.copterexpress.com/simple_offboard.html).
## Manual installation

View File

@@ -64,9 +64,19 @@ new ROSLIB.Topic({
var notificationHideTimer;
function notify(text, severity) {
var repeated = notificationsEl.querySelector('.item:first-of-type[data-text=' + text + ']');
if (repeated) {
// don't repeat notifications
var count = repeated.getAttribute('data-count') || 1;
repeated.setAttribute('data-count', ++count);
repeated.innerHTML = text + ' (' + count + ')';
return;
}
var item = document.createElement('div');
item.innerHTML = text;
item.classList.add('item');
item.setAttribute('data-text', text);
notificationsEl.prepend(item);
var itemHeight = item.offsetHeight;
notificationsEl.classList.remove('anim');

View File

@@ -4,19 +4,21 @@
"author": "Copter Express",
"language": "ru",
"root": "docs/",
"plugins": ["youtube", "richquotes", "versions", "yametrika"],
"plugins": [
"youtube",
"richquotes@https://github.com/okalachev/gitbook-plugin-richquotes.git",
"yametrika",
"anchors",
"validate-links",
"bulk-redirect@https://github.com/okalachev/gitbook-plugin-bulk-redirect.git"
],
"pluginsConfig": {
"disqus": {
"shortName": "coex-clever"
},
"versions": {
"type": "tags"
},
"yametrika": {
"id": 49359238
},
"bulk-redirect": {
"basepath": "/",
"redirectsFile": "redirects.json"
}
},
"structure": {
"glossary": "_GLOSSARY.md"
}
}

View File

@@ -4,6 +4,7 @@
<!-- <li><a href="">View user reference</a> (<a href="http://clever.copterexpress.com">http://clever.copterexpress.com</a> snapshot)</li> -->
<li><a href="" id="wvs">View image topics</a> (<code>web_video_server</code>)</li>
<li><a href="" id="butterfly">Open web terminal</a> (<code>Butterfly</code>)</li>
<li><a href="/docs">Documentation</a> (<code>gitbook</code>)</li>
<!-- <li><a href="viz.html">View 3D visualization</a> (<code>ros3djs</code>)</li> -->
</ul>

View File

@@ -2,7 +2,7 @@
Description=Monkey web-server
[Service]
ExecStart=/usr/sbin/monkey
ExecStart=/usr/sbin/monkey --port 80 --workers 1
Restart=on-abort
[Install]

View File

@@ -84,6 +84,15 @@ ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-init.sh'
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/monkey-clever' '/root/'
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/index.html' '/usr/share/monkey-static/'
# Gitbook
apt-get install -y curl gnupg
curl -sL https://deb.nodesource.com/setup_11.x | bash -
apt-get install -y nodejs
npm install gitbook-cli -g
gitbook build ${REPO_DIR}'/docs'
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${REPO_DIR}'/docs/_book/' '/usr/share/monkey-static/docs/'
# Butterfly
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/butterfly.service' '/lib/systemd/system/'
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/butterfly.socket' '/lib/systemd/system/'

View File

@@ -58,7 +58,7 @@ echo_stamp "Install apt keys & repos"
# TODO: This STDOUT consist 'OK'
curl http://repo.coex.space/aptly_repo_signing.key 2> /dev/null | apt-key add -
apt-get update \
&& apt-get install --no-install-recommends -y -qq dirmngr=2.1.18-8~deb9u2 > /dev/null \
&& apt-get install --no-install-recommends -y -qq dirmngr=2.1.18-8~deb9u3 > /dev/null \
&& apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
echo "deb http://packages.ros.org/ros/ubuntu stretch main" > /etc/apt/sources.list.d/ros-latest.list
@@ -92,13 +92,14 @@ libjpeg8-dev=8d1-2 \
tcpdump \
ltrace \
libpoco-dev=1.7.6+dfsg1-5+deb9u1 \
python-rosdep=0.12.2-1 \
python-rosdep=0.13.0-1 \
python-rosinstall-generator=0.1.14-1 \
python-wstool=0.1.17-1 \
python-rosinstall=0.7.8-1 \
build-essential=12.3 \
libffi-dev \
monkey=1.6.9-1 \
pigpio python-pigpio python3-pigpio \
&& echo_stamp "Everything was installed!" "SUCCESS" \
|| (echo_stamp "Some packages wasn't installed!" "ERROR"; exit 1)
@@ -106,15 +107,24 @@ monkey=1.6.9-1 \
sed -i "s/updates_available//" /usr/share/byobu/status/status
# sed -i "s/updates_available//" /home/pi/.byobu/status
echo_stamp "Upgrade pip"
my_travis_retry pip install --upgrade pip
my_travis_retry pip3 install --upgrade pip3
#echo_stamp "Upgrade pip"
#my_travis_retry pip install --upgrade pip
#my_travis_retry pip3 install --upgrade pip
echo_stamp "Not upgrading system pip due to https://github.com/pypa/pip/issues/5599"
echo_stamp "Make sure both pip and pip3 are installed"
pip --version
pip3 --version
echo_stamp "Install and enable Butterfly (web terminal)"
my_travis_retry pip3 install butterfly
my_travis_retry pip3 install butterfly[systemd]
systemctl enable butterfly.socket
echo_stamp "Install ws281x library"
my_travis_retry pip install rpi_ws281x
echo_stamp "Setup Monkey"
mv /etc/monkey/sites/default /etc/monkey/sites/default.orig
mv /root/monkey-clever /etc/monkey/sites/default

View File

@@ -7,7 +7,7 @@
<arg name="main_camera" default="true"/>
<arg name="optical_flow" default="false"/>
<arg name="aruco" default="false"/>
<arg name="rc" value="true"/>
<arg name="rc" default="true"/>
<arg name="arduino" default="false"/>
<arg name="vl53l1x" default="false"/>

15
clever/launch/main_camera.launch Normal file → Executable file
View File

@@ -2,13 +2,18 @@
<!-- Camera position and orientation are represented by fcu -> main_camera_optical transform -->
<!-- static_transform_publisher arguments: x y z yaw pitch roll frame_id child_frame_id -->
<!-- clever 2 -->
<!--<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0 0 -0.07 -1.5707963 0 3.1415926 fcu main_camera_optical"/>-->
<!-- article about camera setup: https://clever.copterexpress.com/camera_frame.html -->
<!-- clever 3 -->
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 1.5707963 0 3.1415926 fcu main_camera_optical"/>
<!-- camera is oriented downward, camera cable goes backward [option 1] -->
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 -1.5707963 0 3.1415926 fcu main_camera_optical"/>
<!-- clever 3, upwards -->
<!-- camera is oriented downward, camera cable goes forward [option 2] -->
<!--<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 1.5707963 0 3.1415926 fcu main_camera_optical"/>-->
<!-- camera is oriented upward, camera cable goes backward [option 3] -->
<!--<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 0.07 1.5707963 0 0 fcu main_camera_optical"/>-->
<!-- camera is oriented upward, camera cable goes forward [option 4] -->
<!--<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 0.07 -1.5707963 0 0 fcu main_camera_optical"/>-->
<!-- camera node -->

View File

@@ -1,7 +1,7 @@
<launch>
<!-- Clever configuration for testing in sitl -->
<arg name="ip" default="127.0.0.1"/>
<arg name="rosbridge" default="true"/>
<arg name="rosbridge" default="false"/>
<include file="$(find clever)/launch/clever.launch">
<arg name="fcu_conn" value="udp"/>
@@ -13,5 +13,7 @@
<arg name="main_camera" default="false"/>
<arg name="rosbridge" value="$(arg rosbridge)"/>
<arg name="aruco" default="false"/>
<arg name="vl53l1x" default="false"/>
<arg name="rc" default="false"/>
</include>
</launch>

View File

@@ -6,9 +6,10 @@ import re
import traceback
import rospy
from std_srvs.srv import Trigger
from sensor_msgs.msg import Image, CameraInfo, NavSatFix, Imu
from mavros_msgs.msg import State
from sensor_msgs.msg import Image, CameraInfo, NavSatFix, Imu, Range
from mavros_msgs.msg import State, OpticalFlowRad
from geometry_msgs.msg import PoseStamped, TwistStamped
import tf.transformations as t
# TODO: roscore is running
@@ -55,9 +56,9 @@ def check_fcu():
try:
state = rospy.wait_for_message('mavros/state', State, timeout=3)
if not state.connected:
failure('No connection to the FCU (check wiring)')
failure('no connection to the FCU (check wiring)')
except rospy.ROSException:
failure('No MAVROS state (check wiring)')
failure('no MAVROS state (check wiring)')
@check('Camera')
@@ -65,18 +66,18 @@ def check_camera(name):
try:
img = rospy.wait_for_message(name + '/image_raw', Image, timeout=1)
except rospy.ROSException:
failure('%s: No images (is the camera connected properly?)', name)
failure('%s: no images (is the camera connected properly?)', name)
return
try:
info = rospy.wait_for_message(name + '/camera_info', CameraInfo, timeout=1)
except rospy.ROSException:
failure('%s: No calibration info', name)
failure('%s: no calibration info', name)
return
if img.width != info.width:
failure('%s: Calibration width doesn\'t match image width (%d != %d)', name, info.width, img.width)
failure('%s: calibration width doesn\'t match image width (%d != %d)', name, info.width, img.width)
if img.height != info.height:
failure('%s: Calibration height doesn\'t match image height (%d != %d))', name, info.height, img.height)
failure('%s: calibration height doesn\'t match image height (%d != %d))', name, info.height, img.height)
@check('Aruco detector')
@@ -84,7 +85,39 @@ def check_aruco():
try:
rospy.wait_for_message('aruco_pose/debug', Image, timeout=1)
except rospy.ROSException:
failure('No aruco_pose/debug messages')
failure('no aruco_pose/debug messages')
@check('Vision position estimate')
def check_vpe():
try:
vis = rospy.wait_for_message('mavros/vision_pose/pose', PoseStamped, timeout=1)
except rospy.ROSException:
try:
vis = rospy.wait_for_message('mavros/mocap/pose', PoseStamped, timeout=1)
except rospy.ROSException:
failure('no VPE or MoCap messages')
return
# check vision pose and estimated pose inconsistency
try:
pose = rospy.wait_for_message('mavros/local_position/pose', PoseStamped, timeout=1)
except:
return
horiz = math.hypot(vis.pose.position.x - pose.pose.position.x, vis.pose.position.y - pose.pose.position.y)
if horiz > 0.5:
failure('horizontal position inconsistency: %.2f m', horiz)
vert = vis.pose.position.z - pose.pose.position.z
if abs(vert) > 0.5:
failure('vertical position inconsistency: %.2f m', vert)
op = pose.pose.orientation
ov = vis.pose.orientation
yawp, _, _ = t.euler_from_quaternion((op.x, op.y, op.z, op.w), axes='rzyx')
yawv, _, _ = t.euler_from_quaternion((ov.x, ov.y, ov.z, ov.w), axes='rzyx')
yawdiff = yawp - yawv
yawdiff = math.degrees((yawdiff + 180) % 360 - 180)
if abs(yawdiff) > 8:
failure('yaw inconsistency: %.2f deg', yawdiff)
@check('Simple offboard node')
@@ -94,7 +127,7 @@ def check_simpleoffboard():
rospy.wait_for_service('get_telemetry', timeout=3)
rospy.wait_for_service('land', timeout=3)
except rospy.ROSException:
failure('No simple_offboard services')
failure('no simple_offboard services')
@check('IMU')
@@ -102,15 +135,25 @@ def check_imu():
try:
rospy.wait_for_message('mavros/imu/data', Imu, timeout=1)
except rospy.ROSException:
failure('No IMU data (check flight controller calibration)')
failure('no IMU data (check flight controller calibration)')
@check('Local position')
def check_local_position():
try:
rospy.wait_for_message('mavros/local_position/pose', PoseStamped, timeout=1)
pose = rospy.wait_for_message('mavros/local_position/pose', PoseStamped, timeout=1)
o = pose.pose.orientation
_, pitch, roll = t.euler_from_quaternion((o.x, o.y, o.z, o.w), axes='rzyx')
MAX_ANGLE = math.radians(2)
if abs(pitch) > MAX_ANGLE:
failure('pitch is %.2f deg; place copter horizontally or redo level horizon calib',
math.degrees(pitch))
if abs(roll) > MAX_ANGLE:
failure('roll is %.2f deg; place copter horizontally or redo level horizon calib',
math.degrees(roll))
except rospy.ROSException:
failure('No local position')
failure('no local position')
@check('Velocity estimation')
@@ -120,31 +163,53 @@ def check_velocity():
horiz = math.hypot(velocity.twist.linear.x, velocity.twist.linear.y)
vert = velocity.twist.linear.z
if abs(horiz) > 0.1:
failure('Horizontal velocity estimation is %.2f m/s; is copter staying still?' % horiz)
failure('horizontal velocity estimation is %.2f m/s; is copter staying still?' % horiz)
if abs(vert) > 0.1:
failure('Vertical velocity estimation is %.2f m/s; is copter staying still?' % vert)
failure('vertical velocity estimation is %.2f m/s; is copter staying still?' % vert)
angular = velocity.twist.angular
ANGULAR_VELOCITY_LIMIT = 0.01
if abs(angular.x) > ANGULAR_VELOCITY_LIMIT:
failure('Pitch rate estimation is %.2f rad/s (%.2f deg/s); is copter staying still?',
failure('pitch rate estimation is %.2f rad/s (%.2f deg/s); is copter staying still?',
angular.x, math.degrees(angular.x))
if abs(angular.y) > ANGULAR_VELOCITY_LIMIT:
failure('Pitch rate estimation is %.2f rad/s (%.2f deg/s); is copter staying still?',
failure('pitch rate estimation is %.2f rad/s (%.2f deg/s); is copter staying still?',
angular.y, math.degrees(angular.y))
if abs(angular.z) > ANGULAR_VELOCITY_LIMIT:
failure('Pitch rate estimation is %.2f rad/s (%.2f deg/s); is copter staying still?',
failure('pitch rate estimation is %.2f rad/s (%.2f deg/s); is copter staying still?',
angular.z, math.degrees(angular.z))
except rospy.ROSException:
failure('No velocity estimation')
failure('no velocity estimation')
@check('Global position (GPS)')
def check_global_position():
try:
rospy.wait_for_message('mavros/global_position/global', NavSatFix, timeout=2)
rospy.wait_for_message('mavros/global_position/global', NavSatFix, timeout=1)
except rospy.ROSException:
failure('No global position')
failure('no global position')
@check('Optical flow')
def check_optical_flow():
# TODO:check FPS!
try:
rospy.wait_for_message('mavros/px4flow/raw/send', OpticalFlowRad, timeout=0.5)
except rospy.ROSException:
failure('no optical flow data (from Raspberry)')
@check('Rangefinder')
def check_rangefinder():
# TODO: check FPS!
try:
rospy.wait_for_message('mavros/distance_sensor/rangefinder_3_sub', Range, timeout=0.5)
except rospy.ROSException:
failure('no randefinder data from Raspberry')
try:
rospy.wait_for_message('mavros/distance_sensor/rangefinder_0', Range, timeout=0.5)
except rospy.ROSException:
failure('no rangefinder data from PX4')
@check('Boot duration')
@@ -172,7 +237,7 @@ def check_cpu_usage():
pid, cpu, cmd = process.split('\t')
if cmd.strip() not in WHITELIST and float(cpu) > 30:
failure('High CPU usage (%s%%) detected: %s (PID %s)',
failure('high CPU usage (%s%%) detected: %s (PID %s)',
cpu.strip(), cmd.strip(), pid.strip())
@@ -185,6 +250,9 @@ def selfcheck():
check_camera('main_camera')
check_aruco()
check_simpleoffboard()
check_optical_flow()
check_vpe()
check_rangefinder()
check_cpu_usage()
check_boot_duration()

View File

@@ -131,7 +131,10 @@ BRAKE_TIME = rospy.Duration(0)
def get_navigate_setpoint(stamp, start, finish, start_stamp, speed):
distance = math.sqrt((finish.z - start.z)**2 + (finish.x - start.x)**2 + (finish.y - start.y)**2)
time = rospy.Duration(distance / speed)
k = (stamp - start_stamp) / time
if time == rospy.Duration(0):
k = 0
else:
k = (stamp - start_stamp) / time
time_left = start_stamp + time - stamp
if BRAKE_TIME and time_left < BRAKE_TIME:
@@ -161,6 +164,9 @@ def get_publisher_and_message(req, stamp, continued=True, update_frame=True):
ps.header.stamp = stamp
vs.header.stamp = stamp
# don't block on setpoints publishing
transform_timeout = rospy.Duration(0.1) if continued else TRANSFORM_TIMEOUT
if isinstance(req, (srv.NavigateRequest, srv.NavigateGlobalRequest)):
global current_nav_start, current_nav_start_stamp, current_nav_finish
@@ -168,7 +174,7 @@ def get_publisher_and_message(req, stamp, continued=True, update_frame=True):
ps.header.frame_id = req.frame_id or LOCAL_FRAME
ps.pose.position = Point(getattr(req, 'x', 0), getattr(req, 'y', 0), req.z)
ps.pose.orientation = orientation_from_euler(0, 0, req.yaw, axes='sxyz')
current_nav_finish = tf_buffer.transform(ps, LOCAL_FRAME, TRANSFORM_TIMEOUT)
current_nav_finish = tf_buffer.transform(ps, LOCAL_FRAME, transform_timeout)
if isinstance(req, srv.NavigateGlobalRequest):
# Recalculate x and y from lat and lon
@@ -200,7 +206,7 @@ def get_publisher_and_message(req, stamp, continued=True, update_frame=True):
ps.header.frame_id = req.frame_id or LOCAL_FRAME
ps.pose.position = Point(getattr(req, 'x', 0), getattr(req, 'y', 0), req.z)
ps.pose.orientation = orientation_from_euler(0, 0, req.yaw)
pose_local = tf_buffer.transform(ps, LOCAL_FRAME, TRANSFORM_TIMEOUT)
pose_local = tf_buffer.transform(ps, LOCAL_FRAME, transform_timeout)
if isinstance(req, srv.SetPositionGlobalRequest):
pose_local.pose.position.x, pose_local.pose.position.y = global_to_local(req.lat, req.lon)
@@ -221,8 +227,8 @@ def get_publisher_and_message(req, stamp, continued=True, update_frame=True):
vs.header.frame_id = req.frame_id or LOCAL_FRAME
ps.header.frame_id = req.frame_id or LOCAL_FRAME
ps.pose.orientation = orientation_from_euler(0, 0, req.yaw)
pose_local = tf_buffer.transform(ps, LOCAL_FRAME, TRANSFORM_TIMEOUT)
vector_local = tf_buffer.transform(vs, LOCAL_FRAME, TRANSFORM_TIMEOUT)
pose_local = tf_buffer.transform(ps, LOCAL_FRAME, transform_timeout)
vector_local = tf_buffer.transform(vs, LOCAL_FRAME, transform_timeout)
yaw_rate_flag = math.isnan(req.yaw)
msg = pt
@@ -238,7 +244,7 @@ def get_publisher_and_message(req, stamp, continued=True, update_frame=True):
elif isinstance(req, srv.SetAttitudeRequest):
ps.header.frame_id = req.frame_id or LOCAL_FRAME
ps.pose.orientation = orientation_from_euler(req.roll, req.pitch, req.yaw)
pose_local = tf_buffer.transform(ps, LOCAL_FRAME, TRANSFORM_TIMEOUT)
pose_local = tf_buffer.transform(ps, LOCAL_FRAME, transform_timeout)
msg = at
msg.orientation = pose_local.pose.orientation
msg.thrust = req.thrust
@@ -292,8 +298,13 @@ def handle(req):
return {'message': 'Both yaw and yaw_rate cannot be NaN'}
try:
# check frame_id existance
# (for non-blocking setpoint's publishing in get_publisher_and_message)
stamp = rospy.get_rostime()
if hasattr(req, 'frame_id'):
tf_buffer.lookup_transform(req.frame_id or LOCAL_FRAME, LOCAL_FRAME, stamp, TRANSFORM_TIMEOUT)
with handle_lock:
stamp = rospy.get_rostime()
current_req = req
current_pub, current_msg = get_publisher_and_message(req, stamp, False)
rospy.loginfo('Topic: %s, message: %s', current_pub.name, current_msg)
@@ -377,24 +388,31 @@ def get_telemetry(req):
frame_id = req.frame_id or LOCAL_FRAME
stamp = rospy.get_rostime()
if pose:
p = tf_buffer.transform(pose, frame_id, TRANSFORM_TIMEOUT)
res['x'] = p.pose.position.x
res['y'] = p.pose.position.y
res['z'] = p.pose.position.z
transform_timeout = rospy.Duration(0.4)
try:
if pose:
p = tf_buffer.transform(pose, frame_id, transform_timeout)
res['x'] = p.pose.position.x
res['y'] = p.pose.position.y
res['z'] = p.pose.position.z
# Calculate roll pitch and yaw as Tait-Bryan angles, order z-y-x
res['yaw'], res['pitch'], res['roll'] = euler_from_orientation(p.pose.orientation, axes='rzyx')
# Calculate roll pitch and yaw as Tait-Bryan angles, order z-y-x
res['yaw'], res['pitch'], res['roll'] = euler_from_orientation(p.pose.orientation, axes='rzyx')
except:
pass
if velocity:
v = Vector3Stamped()
v.header.stamp = velocity.header.stamp
v.header.frame_id = velocity.header.frame_id
v.vector = velocity.twist.linear
linear = tf_buffer.transform(v, frame_id, TRANSFORM_TIMEOUT)
res['vx'] = linear.vector.x
res['vy'] = linear.vector.y
res['vz'] = linear.vector.z
try:
v = Vector3Stamped()
v.header.stamp = velocity.header.stamp
v.header.frame_id = velocity.header.frame_id
v.vector = velocity.twist.linear
linear = tf_buffer.transform(v, frame_id, transform_timeout)
res['vx'] = linear.vector.x
res['vy'] = linear.vector.y
res['vz'] = linear.vector.z
except:
pass
res['yaw_rate'] = velocity.twist.angular.z
res['pitch_rate'] = velocity.twist.angular.y
@@ -441,21 +459,21 @@ def start_loop():
current_pub, current_msg = get_publisher_and_message(current_req, stamp, True,
getattr(current_req, 'update_frame', False))
current_msg.header.stamp = stamp
current_pub.publish(current_msg)
# For monitoring
if isinstance(current_msg, PositionTarget):
p = PoseStamped()
p.header.frame_id = LOCAL_FRAME
p.header.stamp = stamp
p.pose.position = current_msg.position
p.pose.orientation = orientation_from_euler(0, 0, current_msg.yaw + math.pi / 2)
target_pub.publish(p)
except Exception as e:
rospy.logwarn_throttle(10, str(e))
current_msg.header.stamp = stamp
current_pub.publish(current_msg)
# For monitoring
if isinstance(current_msg, PositionTarget):
p = PoseStamped()
p.header.frame_id = LOCAL_FRAME
p.header.stamp = stamp
p.pose.position = current_msg.position
p.pose.orientation = orientation_from_euler(0, 0, current_msg.yaw)
target_pub.publish(p)
r.sleep()

4
docs/LANGS.md Normal file
View File

@@ -0,0 +1,4 @@
# Languages
* [Русский](ru/)
* [English](en/)

View File

@@ -1,54 +0,0 @@
# Summary
* [Введение](README.md)
* [Глоссарий](glossary.md)
* [Сборка Клевер 2](assemble.md)
* [Сборка Клевер 3](assemble_clever3_4in1.md)
* [Первоначальная настройка](setup.md)
* [Полетные режимы](modes.md)
* [Raspberry Pi](raspberry.md)
* [Образ операционной системы на RPi](microsd_images.md)
* [Подключение Raspberry Pi к Pixhawk](connection.md)
* [Подключение по Wi-Fi](wifi.md)
* [Работа с QGroundControl через Wi-Fi](gcs_bridge.md)
* [Прошивка Pixhawk/Pixracer](firmware.md)
* [Параметры PX4](px4_parameters.md)
* [Пилотирование со смартфона](rc.md)
* [SSH-доступ](ssh.md)
* [Устройство UART](uart.md)
* [Неисправности радиоаппаратуры](radioerrors.md)
* [Безопасность](safety.md)
* [Техника безопасности по пайке](tb.md)
* [Просмотр видеострима с камер](web_video_server.md)
* [Работа с ROS](ros.md)
* [MAVROS](mavros.md)
* [Автономный полет в OFFBOARD](simple_offboard.md)
* [Примеры программ](snippets.md)
* [Навигация по ArUco-маркерам](aruco.md)
* [Взаимодействие с Arduino](arduino.md)
* [Системы координат](frames.md)
* [Работа с камерой \(компьютерное зрение\)](camera.md)
* [Ориентация камеры](camera_frame.md)
* [Визуализация с помощью rviz](rviz.md)
* [Работа с SITL](sitl.md)
* [Подключение GPS](gps.md)
* [Автозапуск ПО](autolaunch.md)
* [Использование 3G-модема](3g.md)
* [Устройство сети RPi](network.md)
* [Работа с логами PX4](flight_logs.md)
* [Протокол MAVLink](mavlink.md)
* [Типы силовых разъемов](connectortypes.md)
* [Ошибки радиоаппаратуры](radioerrors1.md)
* [Настройка PID](calibratePID.md)
* Учебник
* [Теория и видеоуроки](lessons.md)
* [Учебно-методическое пособие](metod.md)
* [Контрольные и проверочные материалы](tests.md)
* [Другое](drugoe.md)
* [CopterHack-2017](copterhack2017.md)
* [Прошивка ESC контроллеров с помощью Arduino](esc_firmware.md)
* [Работа со светодиодной лентой](leds.md)
* [Проекты на базе коптера "Клевер"](projects.md)
* [Тестовое описание Клевера по шаблону robots.ros.org/gapter/](testovoe-opisanie-klevera-po-shablonu-robotsrosorggapter.md)
* [Полезные ссылки](links.md)

View File

@@ -1,154 +0,0 @@
# Инструкция по сборке конструктора Клевер 3
В данной инструкции рассматривается сборка комплекта COEX Clever 3 с платой регуляторов 4в1
![Clever](assets/clever3_main.jpg)
## Состав конструктора
TODO
## Дополнительное оборудование
![Дополнительное оборудование](assets/additonal_eqipment.jpg)
## Условное обозначение
![Условные обозначения](assets/conditional_refer.jpg)
## Техника безопасности при пайке
Перед использованием паяльного оборудования обязательно ознакомьтесь с техникой безопасности
[Техника безопасности при пайке](tb.md)
## Установка моторов
1. Распаковать моторы
2. Закрепить мотор на луче шестигранными винтами М3х6 (самые короткие винты в комплекте с моторами). *Шестигранный ключ в комплекте.
3. Вставить гайки М3 (4 шт) в пластиковый держатель.
> Для удобства можно использовать длинный винт, либо плоскогубцы
4. Закрепить луч, нижнюю защиту луча и держатель винтами М3х12, используя крестовую отвертку.
5. Скрепить хомутом луч и нижнюю защиту луча.
> Хвост от хомута (стяжки) отрезать ножницами ![Подготовка моторов](assets/cl3_prepareMotors.JPG)
## Монтаж каркасных элементов
1. Установить пластиковые гайки М3 (4 шт) для крепления PDB на раму винтами М3х8
2. Установить стойки 6 мм (4 шт) для крепления Raspberry Pi на раму винтами М3х8
3. Установить на раму собранную конструкцию, соблюдая схему, винтами М3х16
4. Установить каркас для светодиодной ленты, используя прорези в держателях для ножек
![Монтаж стоек на раму](assets/cl3_mountElements.JPG)
## Монтаж преобразователя напряжения BEC (Припаять и проверить)
1. Распаковать плату питания и установить шлейф питания
2. Включить мультиметр в режим измерения постоянного напряжения (диапазон 20В или 200В)
3. Проверяем работоспособность платы питания, подключив АКБ
* a. Выходное напряжение на разъеме XT30 должно равняться напряжению на АКБ (от 10В до 12.6В)
* b. Выходное напряжение на шлейфе питания должно быть в пределах 4.9В до 5.3В
> Измеряем между черным и красным проводами
4. Распаковываем преобразователь напряжения и снимаем прозрачную изоляцию
5. Припаиваем два дополнительных провода на BEC
* a. Берем из набора 3 провода папа-мама (красный, черный и любого цвета)
* b. Красный и черный [залуживаем](zap.md) с обеих сторон, используя пинцет. На синем проводе залуживаем со стороны коннектора ПАПА.
Залудить - это:
* Нанести флюс на оголенную часть провода.
* Покрыть припоем.
* c. Припаиваем красный и черный провода к BEC: ЧЕРНЫЙ -> OUT-, КРАСНЫЙ -> OUT+
6. Проверяем работу BEC
* a. Припаиваем BEC на плату питания. ЧЕРНЫЙ -> -, КРАСНЫЙ -> +
* b. Подключаем АКБ и проверяем напряжение на припаянных проводах к BEC (из пункта 5) 5В - все правильно! больше 10В - отключите питание и переставьте желтую перемычку на другой пинцет, 0В - плохо спаяли
* с. Если BEC выдает 5В, то изолируем паячное соединение черной термоусадкой.
7. Монтаж светодиодной ленты. Припаять провода от BEC (из пункта 5) к светодиодной ленте
* a. Удалить силиконовый слой на ленте (надрезать ножом и оторвать)
* b. [Залудить](zap.md) контакты светодиодной ленты
* c.
* Красный -> +5V
* Черный -> GND
* Синий -> Din
![Монтаж преобразователя напряжения BEC ](assets/cl3_mountBEC.JPG)
## Монтаж платы регуляторов 4в1 и платы питания PDB
1. Установить плату регуляторов 4в1 как показано на картинке. Соединить фазные провода моторов с проводами регуляторов.
2. Закрепить плату регуляторов стойками 6 мм (4 шт.). На стойки накрутить пластиковые гайки М3 (4 шт.).
3. Установить плату распределения питания PDB как показано на картинке (разъем XT60 направлен к хвосту коптера).
4. Соединить разъемы питания платы питания и платы регуляторов XT30.
![Монтаж платы питания](assets/cl3_mountESC.JPG)
## Сопряжение приемника и пульта
1. Подключаем провод 5В от BEC в разъем приемника. Устанавливаем BIND разъем в крайний правый порт B/VCC
2. Подключаем АКБ. Индикатор на приемники должен быстро мигать (режим сброса).
3. Зажимаем и удерживаем кнопку BIND на пульте и включаем пульт. На пульте отображается процесс сопряжения RXBinding.
4. После установки сопряжения (появление доп строк на дисплее пульта), убираем BIND разъем из приемника. Отключаем АКБ.
![Сопряжение приемника и пульта](assets/cl3_bindFlysky.JPG)
> Если пульт не включается или заблокирован, то смотри здесь
[Неисправности пульта](radioerrors1.md)
## Проверка направления вращения моторов
1. Включить пульт. Убедиться, что ppm в меню RX Setup отключен ([раздел "Нет связи с полетным контроллером"](radioerrors1.md) в пункте 3 выберите “RX setup” > “PPM OUTPUT” > “Off”. Сохраните изменения (удерживаем нажатой кнопку “CANCEL”)
2. Подключите оранжевый провод S1 от платы регуляторов в CH3 на приемнике. Подключить внешнее питание.
3. Подать левым стиком газ (throttle) на 10%.
4. Проверить направления вращения мотора по схеме.Повторить для каждого мотора. Таким образом, будет понятно каким именно мотором мы управляем
5. Если необходимо изменить направление вращения, то меняем любые два фазных провода мотора (нужно переподключить).
![Проверка направления вращения моторов](assets/cl3_testMotorsFlysky.JPG)
## Монтаж и подключение полетного контроллера PixRacer
1. Установить Полетный контроллер PixRacer на двухстороний скотч 3М (2-3 слоя). *также полетный контроллер можно извлечь из корпуса и жестко установить на стойки М3х6
2. Установить стойки 40 мм, используя винты М3х8. Подключить разъем POWER
3. Подключить регуляторы, как на картинке. Подробно [про подключение регуляторов 4в1](cl3_connectESC4in1.md)
4. Подключить шлейф радиоприемника в разъем RCIN в PixRacer ![Монтаж полетного контроллера](assets/cl3_mountPixracer.JPG)
## Монтаж Raspberry Pi
1. Перевернуть коптер. Установить Raspberry на стойки, используя монтажные отверстия Raspberry. USB-разъемы направлены к хвостовой части коптера
2. Установка шлейфа для камеры
* a. поднять защелку
* b. подключить шлейф
* c. закрыть защелку
3. Подключение питания Raspberry
* 5В -> pin 04 (DC power 5v)
* GND -> pin 06 (Ground)
* Подключение светодиодной ленты pin 40 (GPIO21)
4. Сборка маунта для камеры Raspberry Pi. Используйте винт М3х16 и гайку М3. ![Монтаж Raspberry Pi Model B](assets/cl3_mountRaspberryPi.JPG)
## Монтаж Arduino и радиоприемника FlySky
1. Произведите монтаж пинов микроконтроллера Arduino Nano, используя пайку
2. Установить миконтроллер в специальной маунт и прикрепите к нижней деке, используя винты М3х16 (4 шт.)
3. Используя 2хсторонний скотч прикрепите приемник, как показано на рисунке
4. Подключите шлейф радиоприемника от PixRacer как на рисунке:
* белый -> PPM
* красный -> 5V
* черный -> GND
* оранжевый, зеленый -> сейчас не используются. Устанавливаются в неиспользуемые пины радиоприемника. ![Монтаж Arduino nano и радиоприемника Flysky i6](assets/cl3_mountArduinoandFlysky.JPG)
## Монтаж камеры Raspberry Pi
1. Установить маунт для камеры Raspberry Pi в сборе на нижнюю деку винтами М3х12 (2 шт.)
2. Подключить шлейф к камере Raspberry Pi
3. Установить камеру в маунт, закрепить саморезами М2
4. Закрепить Raspberry стойками 30 мм (4 шт.). Установить нижнюю деку в сборе на стойки винтами М3х8 (4шт.).
5. Установить ножки в маунты (4 шт.) ![Монтаж камеры RPi](assets/cl3_mountRpiCamera.JPG).
## Монтаж остальных конструктивных элементов
1. Установка нижней защиты, используя винты М3х12 (8 шт.) и стойки 30 мм (8 шт.)
2. Установка верхней защиты, используя винты М3х12 (8 шт.)
3. Установка ремешка верхнюю деку для фиксации АКБ. Закрепить верхнюю деку винтами М3х8 (4 шт.). ![Монтаж остальных конструктивных элементов](assets/cl3_mountOtherElements.JPG)
## Монтаж USB соединителей
1. Соедините PixRacer и Raspberry Pi, используя micro USB - USB кабель
2. Соедините Arduino и Raspberry Pi, используя micro USB - USB кабель. ![Монтаж USB соединителей](assets/cl3_mountUSBconnectors.JPG)

BIN
docs/assets/alcopter.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 751 KiB

After

Width:  |  Height:  |  Size: 230 KiB

BIN
docs/assets/brrc2205on.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
docs/assets/butterfly.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
docs/assets/casebattery.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
docs/assets/clever2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 126 KiB

BIN
docs/assets/etcher.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

BIN
docs/assets/explosion.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 KiB

BIN
docs/assets/fpv_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
docs/assets/fpv_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

BIN
docs/assets/fpv_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 908 KiB

BIN
docs/assets/fpv_4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 KiB

BIN
docs/assets/fpv_5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

BIN
docs/assets/github-edit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

BIN
docs/assets/hc-sr04.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
docs/assets/image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
docs/assets/qgc-params.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 972 KiB

BIN
docs/assets/raspberry3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
docs/assets/rcw-0001.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
docs/assets/selfcheck.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 KiB

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

BIN
docs/assets/ssid.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 KiB

BIN
docs/assets/testMotors.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

View File

@@ -1,31 +0,0 @@
Пакет программ на Raspberry Pi
===
Пакет программ clever_bundle, устанавливающийся на Raspberry Pi, позволяет:
* [Настраивать и управлять коптером используя QGroundControl с соединением по Wi-Fi](gcs_bridge.md)
* [Использовать веб-пульт управления квадрокоптером](web_rc.md)
* [Получать доступ к Raspberry Pi при помощи SSH](ssh.md)
* Анализировать полеты квадрокоптера с помощью RViz и RosBag
* [Работать с камерой для CV](camera.md)
* Работать с камерой для FPV
* [Управлять полетом коптера программно, используя модуль offboard](offboard.md)
* [Осуществлять навигацию в поле ArUco-маркеров](aruco.md)
* [Использовать внешний 3G-модем для осуществление связи коптера с Интернетом](3g.md)
* Разрабатывать произвольные модули и системы
Установка clever_bundle
---
Для установка пакета clever_bundle необходимо скачать последнюю версию образа SD-карты и загрузить его на флешку, например, используя программу [Etcher](https://etcher.io).
Информация
---
Образ SD-карты включает в себя:
* ОС [Raspbian Jessie](https://www.raspberrypi.org/downloads/raspbian/)
* Фреймворк [ROS](ros.md)
* Пакет [MAVROS](mavros.md) для связи с Pixhawk по [MAVLink](mavlink.md)
* Дополнительные пакеты ROS: web_video_server, usb_cam, rosbridge_suite и другие
* Пакет программ clever_bundle

View File

@@ -1,2 +0,0 @@

3
docs/en/README.md Normal file
View File

@@ -0,0 +1,3 @@
# CLEVER
This is CLEVER drone kit documentation in English.

3
docs/en/SUMMARY.md Normal file
View File

@@ -0,0 +1,3 @@
# Summary
* [UART settings](uart.md)

4
docs/en/book.json Normal file
View File

@@ -0,0 +1,4 @@
{
"language": "en",
"root": "."
}

86
docs/en/uart.md Normal file
View File

@@ -0,0 +1,86 @@
# UART interface
UART is an asynchronous serial interface for data transfer that is used in many devices. For example, GPS antennas, Wi-Fi routers, or Pixhawk.
The interface usually contains two lines: TX for data transmission, and RX for data reception. It usually uses the 5-volt logics.
To connect two devices, you have to feed the TX line of the first device to the RX line of the other one. A similar manipulation is required on the other end for ensuring two-way data transmission.
It is also necessary to synchronize the voltages connect the ground on two devices.
Read more about the interface and the Protocol in [this article](https://habr.com/post/109395/).
## 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.
An example of such abstraction in Raspbian may be `/dev/tty1` the device for text output to the screen connected via HDMI.
## UART on Raspberry Pi 3
Raspberry Pi 3 has two hardware UART interfaces:
1. Mini UART (`/dev/ttyAMA0`) uses the timing of the RPi graphics core, and therefore limits its frequency.
2. PL011 (`/dev/ttyS0`) the full-fledged UART interface on a separate chip of the microcontroller.
Read more about UART on Raspberry Pi in the [official article](https://www.raspberrypi.org/documentation/configuration/uart.md).
Using microcontroller valves, these interfaces may be switched between two physical outputs:
1. UART connector on GPIO;
2. RPi Bluetooth module.
By default, Raspberry Pi 3 PL011 is connected to the Bluetooth module. And Mini UART is disabled with the value of directive `enable_uart`, which is `0` by default.
> **Note** One should understand that directive `enable_uart` changes its default value, depending on which UART is connected to the RPi Bluetooth module with directive `dtoverlay=pi3-miniuart-bt`.
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.
### Configuration of UART on Raspberry Pi 3
To configure UART, there are directives located in `/boot/config.txt`.
To enable the UART interface on GPIO:
```txt
enable_uart=1
```
To disconnect the UART interface from the Bluetooth module:
```txt
dtoverlay=pi3-disable-bt
```
To connect Mini UART to the Bluetooth module:
```txt
dtoverlay=pi3-miniuart-bt
```
If the Bluetooth module is disabled, one should disable the hciuart service:
```bash
sudo systemctl disable hciuart.service
```
## Default image configuration
In image CLEVER, we initially disabled Mini UART and the Bluetooth module.
Bugs
----
If you use the Mini UART connection to Bluetooth, `hciuart` crashes with the following error:
![hciuart error](../assets/hciuart_error.jpg)
In case of Bluetooth disconnection
```txt
/dev/serial0 -\> ttyAMA0
/dev/serial1 -\> ttyS0
```

View File

@@ -1,4 +0,0 @@
Использование программы Etcher
===
TODO

View File

@@ -1,2 +0,0 @@
# Автоматический флип

View File

@@ -1,2 +0,0 @@
Полезные ссылки
===

View File

@@ -1,12 +0,0 @@
Управление коптером в режиме OFFBOARD
===
Координатные системы (фреймы)
---
TODO
* `local_origin` — координаты точки инициализации полетного контроллера
* `fcu` (flight control unit) — координаты квадрокоптера с учетом наклонов
* `fcu_horiz` — координаты квадрокоптера без учета наклонов по тангажу и рысканью
* `marker_map` — координаты поля ArUco-маркеров

View File

@@ -1,23 +0,0 @@
Силовые и управляющие цепи
===============================
Силовые цепи
--------------------
Из вырезки по ГОСТ 18311-80
"Электрическая цепь, содержащая элементы, функциональное назначение которых состоит в производстве или передаче основной части электрической энергии,
ее распределении, преобразовании в другой вид энергии или в электрическую энергию с другими значениями параметров."
Говоря простым языком, силовые цепи - это электрические цепи, которые предназначены для передачи большого количества энергии (тока), для обеспечения работоспособности всех систем.
В нашем случае в качестве силовой цепи будут выступать провода, соединяющие аккумулятор с платой распределения питания, а также красные и черные провода идущие на регуляторы оборотов.
![Схема силовой цепи](assets/powerConnect.jpg)
Вся энергия аккумулятора (АКБ) будет распределяться между регуляторами оборотов моторов. Чтобы моторы смогли поднять в воздух коптер, им необходимо много энергии. В качестве энергии выступает ток, который приходит с АКБ. Т.к. энергии нужно много, значит по проводам будет идти большой ток. Чтобы провода смогли выдержать такую нагрузку, необходимы провода большего диаметра. Для наших задач подойдут провода 18AWG, 16AWG, 14AWG.
Управляющие цепи
--------------------

View File

@@ -1,47 +0,0 @@
Мануал по возможным неисправностям радиоаппаратуры
==========================================
Пульт заблокирован
--------------
Если пульт заблокирован, то на ЖК Экране будет отображено предупреждение:
"Warning. Place all switches in their up position and lower the throttle".
Для разблокировки пульта необходимо привести все стики и переключатели в исходное положение, а именно:
1. Левый стик (1) в центральной нижней позиции.
2. Переключатели A, B, C, D (2) в положение “От Себя”.
3. Правый стик (3) в центре.
![Заблокированный пульт](assets/lockradio.jpg)
Нет связи с приемником
--------------
Для проверки соединения пульта с приемником, включаем пульт и смотрим индикацию на ЖК Экране:
1. Соединение с приемником отсутствует
![Нет соединения с приемником](assets/connectionLost.jpg)
2. Соединение с приемником установлено
![Есть соединения с приемником](assets/connectionOK.jpg)
Если соединение отсутствует, то
1. Проверьте, что приемник включен (моргает красный светодиод)
Если сетодиод горит непрерывно красным, то значит связь установлена с другим пультом.
2. Проведите процедуру сопряжения пульта и приемника (![Binding](../notes/binding.md))
Нет связи с полетным контроллером
--------------
Если нет связи с полетным контроллером, то на экране монитора компьютера в окне Channel Monitor не будут отображаться изменения положения слайдеров при перемещении стиками пульта.
![Нет связи с полетным контроллером](assets/notmoveslider.jpg)
1. Зайдите в МЕНЮ (удерживаем нажатой кнопку “ОК”)
2. Выберите меню “System setup” (Кнопки Up/Down - для навигации, кнопка “ОК” - подтверждение выбора
3. Выберите “RX setup” > “PPM OUTPUT” > “On”
4. Сохраните изменения (удерживаем нажатой кнопку “CANCEL”)

View File

@@ -1,22 +0,0 @@
Raspberry Pi
============
Raspberry Pi означает «малиновый пирог». Этот свободно помещающийся в ладони одноплатный компьютер создан на базе мобильного микропроцессора ARM11. У него низкое потребление энергии и он может работать даже от солнечных батарей.
* Вес 45 грамм,
* тактовая частота 700 МГц;
* есть графическое ядро в процессоре Broadcom BCM2835
* оперативная память 512 Мб;
* есть USB -разъемы (один или два в зависимости от модели); м
* наиболее применяемая модель мини-компьютера Raspberry Pi модель В - это модель В на с поддержкой Ethernet.
Сферы применения компьютера Raspberry Pi достаточно широки, ведь это всё-таки вполне полноценный компьютер. Если вам нужна машина для решения несложных задач, которые не требуют применения мощных ресурсов в плане вычисления, то вы смело можете подключать к устройству Raspberry Pi стандартные элементы компьютера: монитор; мышь; клавиатуру;
Вообще, Raspberry Pi очень популярная платформа, на которой можно реализовать множество проектов, таких как
* сервер домашней автоматизации (или система «умный дом»)
* сервер хранения данных (NAS)
* домашний медиа-сервер
* «мозговой центр» для автоматизированных станков или роботов
Собственно, в последнем качестве мы и будем его использовать, благодаря возможности подключения его к автопилоту Pixhawk.

View File

@@ -1,6 +1,6 @@
Использование внешнего 3G-модема
===
Использование внешнего 3G-модема на Raspberry возможно с помощью пакета `sakis3g`.
Использование внешнего 3G-модема на Raspberry возможно с помощью пакета [`sakis3g`](https://github.com/Trixarian/sakis3g-source).
TODO

30
docs/ru/4in1.md Normal file
View File

@@ -0,0 +1,30 @@
# Подключение регуляторов 4in1
## Распиновка платы реуляторов 4in1
Одним цветом выделены соответствующие фазные провода (рис. 1a) и управляющий ими сигнал (рис. 1b).
Например, оранжевый цвет -> нижний правый мотор -> S1 - оранжевый провода.
## Распиновка полетного контроллера Pixracer
На рис. 2a указана распиновка гребенки:
* **SIGNAL** подключение регуляторов. Каждый пин имет свой собственный сигнал. На 5 и 6 сигнал можно получать ШИМ сигнал (Например, можно подключить сервопривод).
* **GND** земля полетного контроллера. Единая шина на всех пинах GND (отмечены черным).
* 1, 2, 3, 4 порты для подключения ESC.
* 1, 2 - порты расширения выходного ШИМ сигнала (настраиваются в QGroundControl, также могут использоваться для управления гексакоптером).
На рис. 2b указана нумерация моторов полетного контроллера Pixracer.
* Стрелочка ориентация полетного контроллера.
* Черные M3, M4 моторы, вращающиеся по часовой стрелке.
* Красные M1, M2 моторы, вращающиеся против часовой стрелке.
## Иллюстрация подключения, исходя из текущей ориентации платы регуляторов 4in1
Используя рис. 1a, 1b, 2a, 2b необходимо сопоставить каждому мотору свой сигнал управления и подключить в соотвествии с порядком нумерации моторов Pixracer.
Например, мотор М3, вращающийся против часовой стрелки (верхний левый угол) управляется сигналом S4 (зеленый провод). Подключается в порт 3.
![Подключение регуляторов 4in1](../assets/cl3_connectionESC4in1.jpg)

View File

@@ -1,7 +1,7 @@
Клевер
======
<img src="assets/clever3.png" align="right" width="300px" alt="Клевер">
<img src="../assets/clever3.png" align="right" width="300px" alt="Клевер">
«Клевер» — это учебный конструктор программируемого квадрокоптера, состоящего из популярных открытых компонентов, а также набор необходимой документации и библиотек для работы с ним.
@@ -18,7 +18,7 @@
Образ для Raspberry Pi
----------------------
**Образ ОС** для RPi 3 с предустановленным и преднастроенным ПО можно скачать [здесь](microsd_images.html).
**Образ ОС** для RPi 3 с предустановленным и преднастроенным ПО можно скачать [здесь](microsd_images.md).
Образ включает в себя:
@@ -29,6 +29,6 @@
* mavros
* Набор ПО для работы с Клевером
[Описание API](simple_offboard.html) для автономных полетов.
[Описание API](simple_offboard.md) для автономных полетов.
Исходный код сборщика образа и всего ПО можно найти на [GitHub](https://github.com/CopterExpress/clever).

63
docs/ru/SUMMARY.md Normal file
View File

@@ -0,0 +1,63 @@
# Содержание
* [Введение](README.md)
* [Глоссарий](gloss.md)
* Сборка
* [Сборка Клевера 2](assemble_2.md)
* [Сборка Клевера 3](assemble_3.md)
* [Установка FPV](fpv.md)
* [Безопасность](safety.md)
* [Подключение регулятора 4 в 1](4in1.md)
* [Типы силовых разъемов](connectortypes.md)
* [Лужение](zap.md)
* [Техника безопасности по пайке](tb.md)
* [Проверка подключения](test_connection.md)
* [Неисправности радиоаппаратуры](radioerrors.md)
* [Подключение GPS](gps.md)
* Настройка
* [Первоначальная настройка](setup.md)
* [Полетные режимы](modes.md)
* [Прошивка Pixhawk/Pixracer](firmware.md)
* [Параметры PX4](px4_parameters.md)
* [Настройка PID](calibratePID.md)
* Работа с Raspberry Pi
* [Raspberry Pi](raspberry.md)
* [Образ для RPi](microsd_images.md)
* [Подключение RPi к Pixhawk](connection.md)
* [Подключение по Wi-Fi](wifi.md)
* [SSH-доступ](ssh.md)
* [Настройка сети RPi](network.md)
* [Работа с QGroundControl через Wi-Fi](gcs_bridge.md)
* [Пилотирование со смартфона](rc.md)
* [Интерфейс UART](uart.md)
* [Просмотр видеострима с камер](web_video_server.md)
* [Системы координат](frames.md)
* Программирование
* [ROS](ros.md)
* [MAVROS](mavros.md)
* [Автономный полет в OFFBOARD](simple_offboard.md)
* [Навигация по ArUco-маркерам](aruco.md)
* [Автоматическая проверка](selfcheck.md)
* [Примеры кода](snippets.md)
* [Ориентация камеры](camera_frame.md)
* [Камера \(компьютерное зрение\)](camera.md)
* [Светодиодная лента](leds.md)
* [Визуализация с помощью rviz](rviz.md)
* [Ультразвуковой дальномер](sonar.md)
* [Работа с SITL](sitl.md)
* [Автозапуск ПО](autolaunch.md)
* [Взаимодействие с Arduino](arduino.md)
* [3G-модем](3g.md)
* Проекты на базе Клевера
* [Шаровая защита коптера](shield.md)
* [CopterHack-2018](copterhack2018.md)
* [CopterHack-2017](copterhack2017.md)
* Дополнительные материалы
* [Вклад в Клевер](contributing.md)
* [Прошивка ESC контроллеров с помощью Arduino](esc_firmware.md)
* [Протокол MAVLink](mavlink.md)
* [Работа с логами PX4](flight_logs.md)
* Учебник
* [Теория и видеоуроки](lessons.md)
* [Учебно-методическое пособие](metod.md)
* [Контрольные и проверочные материалы](tests.md)

View File

@@ -1,6 +1,6 @@
# Управление коптером с Arduino
Для взаимодействия с ROS-топиками и сервисами на Raspberry Pi можно использовать библиотеку [rosserial_arduino](http://wiki.ros.org/rosserial_arduino).
Для взаимодействия с ROS-топиками и сервисами на Raspberry Pi можно использовать библиотеку [rosserial_arduino](http://wiki.ros.org/rosserial_arduino). Эта библиотека предустановлена на [образе для Raspberry Pi](microsd_images.md).
Основной туториал по rosserial: http://wiki.ros.org/rosserial_arduino/Tutorials
@@ -8,16 +8,14 @@ Arudino необходимо установить на Клевер и подк
## Настройка Arduino IDE
Для работы с ROS, Arduino необходимо понимать формат сообщений. Для этого на Clever необходимо собрать библиотеку ROS-сообщений (`ros_lib`) и скопировать в папку `<папку скетчей>/libraries`.
Для сборки библиотеки на коптере необходимо выполнить следующий скрипт:
Для работы с ROS Arduino необходимо понимать формат сообщений установленных пакетов. Для этого [на Raspberry Pi](ssh.md) необходимо собрать библиотеку ROS-сообщений:
```bash
rosrun rosserial_arduino make_libraries.py .
tar czf clever_arudino.tar.gz ros_lib
rm -rf ros_lib
```
Полученный каталог `ros_lib` необходимо скопировать в `<папку скетчей>/libraries` на компьютере с Arudino IDE.
## Настройка Raspberry Pi
Чтобы единоразово запустить программу на Arduino, можно воспользоваться командой:
@@ -40,7 +38,7 @@ sudo systemctl restart clever
## Задержки
При использовании `rosserial_arduino` микроконтроллер Arduino не должен быть заблокирован больше чем на несколько секунд (например, с использованием функции `delay`); иначе связь между Raspberry Pi и Arduino будет разорвана.
При использовании `rosserial_arduino` микроконтроллер Arduino не должен быть заблокирован больше чем на несколько секунд (например, с использованием функции `delay`); иначе связь между Raspberry Pi и Arduino будет разорвана.
При реализации долгих циклов `while` обеспечьте периодический вызов функции `hn.spinOnce`:
@@ -121,7 +119,7 @@ void setup()
delay(1000);
nh.spinOnce();
}
nav_req.auto_arm = false;
// Пролет вперед на 3 метра:
@@ -133,13 +131,13 @@ void setup()
nav_req.frame_id = "fcu_horiz";
nav_req.speed = 0.8;
navigate.call(nav_req, nav_res);
// Ждем 5 секунд
for(int i=0; i<5; i++) {
delay(1000);
nh.spinOnce();
}
}
// Полет в точку 1:0:2 по маркерному полю
nh.loginfo("Fly on point");
nav_req.auto_arm = false;
@@ -229,4 +227,4 @@ typedef ros::NodeHandle_<ArduinoHardware, 3, 3, 100, 100> NodeHandle;
// ...
NodeHandle nh;
```
```

View File

@@ -5,7 +5,7 @@
Пример ArUco-маркеров:
![](assets/markers.jpg)
![ArUco-маркеры](../assets/markers.jpg)
> **Hint** При печати визуальных маркеров необходимо использовать максимально матовую бумагу. Глянцевая бумага будет бликовать на свету, сильно ухудшая качество распознавания.
@@ -39,7 +39,7 @@ sudo systemctl restart clever
В качестве карты меток можно использовать автоматически сгенерированный [ArUco-board](https://docs.opencv.org/trunk/db/da9/tutorial_aruco_board_detection.html).
Настройка карты меток производится с помощью файла `~/catkin_ws/src/clever/clever/aruco.launch`. Для использования AruCo-board введите его параметры:
Настройка карты меток производится с помощью файла `~/catkin_ws/src/clever/clever/launch/aruco.launch`. Для использования ArUco-board введите его параметры:
```xml
<node pkg="nodelet" type="nodelet" name="aruco_pose" args="load aruco_pose/aruco_pose nodelet_manager">
@@ -84,7 +84,7 @@ sudo systemctl restart clever
Для контроля карты, по которой в данный момент коптер осуществляет навигацию, можно просмотреть содержимое топика `aruco_pose/map_image`. Через браузер его можно просмотреть при помощи [web\_video\_server](web_video_server.md) по ссылке [http://192.168.11.1:8080/snapshot?topic=/aruco\_pose/map\_image](http://192.168.11.1:8080/snapshot?topic=/aruco_pose/map_image):
![](assets/Снимок экрана 2017-11-27 в 23.20.49.png)
![](../../assets/Снимок экрана 2017-11-27 в 23.20.49.png)
При полетах необходимо убедиться, что наклеенные на пол метки соответствуют карте.
@@ -104,14 +104,18 @@ _Примечание_: указанное выше определение пр
Таким образом, нулевой является левая нижня точка маркерного поля. Угол по рысканью считается равным 0, когда коптер смотрит направо \(по оси x\).
![](assets/aruco-frame.png)
![Система координат макеров](../assets/aruco-frame.png)
### Настройка полетного контролера
Для правильной работы Vision Position Estimation необходимо \(через [QGroundControl](gcs_bridge.md)\) убедиться, что:
* Для Pixhawk: Установлена прошивка с LPE \(local position estimator\). Для Pixhawk необходимо [скачать прошивку `px4fmu-v2_lpe.px4`](https://github.com/PX4/Firmware/releases). Для Pixracer параметр `SYS_MC_EST_GROUP` должен быть установлен в `local_position_estimator, attitude_estimator_q`.
* В параметре `LPE_FUSION` включены **только** флажки `vision position`, `vision yaw`, `land detector`. Итоговое значение _28_.
* **Для Pixhawk**: Установлена прошивка с LPE \(local position estimator\). Для Pixhawk необходимо [скачать прошивку `px4fmu-v2_lpe.px4`](https://github.com/PX4/Firmware/releases).
**Для Pixracer**: параметр `SYS_MC_EST_GROUP` должен быть установлен в `local_position_estimator, attitude_estimator_q`.
> **Note** После изменения значения параметра `SYS_MC_EST_GROUP` необходимо перезагрузить полетный контроллер.
* В параметре `LPE_FUSION` включены **только** флажки `vision position`, `land detector`. Итоговое значение _20_.
* Выключен компас: `ATT_W_MAG` = 0
* Вес угла по рысканью по зрению: `ATT_W_EXT_HDG` = 0.5
* Включена ориентация по Yaw по зрению: `ATT_EXT_HDG_M` = 2 `MOCAP`.
@@ -122,9 +126,11 @@ _Примечание_: указанное выше определение пр
* `LNDMC_THR_RANGE` = 0.5
* `LNDMC_Z_VEL_MAX` = 1 m/s
<!--
Для простоты настройки можно воспользоваться готовым файлом настроек для [Clever 2](https://github.com/CopterExpress/clever/blob/master/docs/assets/Clever2LPE_160118.params) или для [Clever 3](https://github.com/CopterExpress/clever/blob/master/docs/assets/Clever3_LPE_020218.params) и вгрузить его в контроллер с помощью меню Tools - Load from file из раздела Parameters в QGroundControl.
![](assets/Screenshot from 2018-02-27 22-30-50.png)
![](../assets/Screenshot from 2018-02-27 22-30-50.png)
-->
### Полет
@@ -143,13 +149,11 @@ time.sleep(5)
navigate(2, 2, 2, speed=1, frame_id='aruco_map', update_frame=True) # полет в координату 2:2, высота 3 метра
```
См. [другие функции](simple_offboard.md) simple offboard.
См. [другие функции](simple_offboard.md) simple_offboard.
### Расположение маркеров на потолке
> **Info** Образ версии &gt;0.2.
![](assets/IMG_4175.JPG)
![Маркеры на потолке](../assets/IMG_4175.JPG)
Для навигации по маркерам, расположенным на потолке, необходимо поставить основную камеру так, чтобы она смотрела вверх и [установить соответствующий фрейм камеры](camera_frame.md).
@@ -164,6 +168,3 @@ navigate(2, 2, 2, speed=1, frame_id='aruco_map', update_frame=True) # поле
```python
navigate(x=1, y=2, z=1.1, speed=0.5, frame_id='aruco_map')
```

View File

@@ -1,10 +1,11 @@
# Инструкция по сборке конструктора Клевер 2
Инструкция по сборке конструктора Клевер 2
============================================
![Clever](assets/Clevermain.png)
![Clever](../assets/clever2.jpg)
## Состав конструктора
![Explosion](assets/explosion.png)
![Explosion](../assets/explosion.jpg)
* Рама центральная x2.
* Рама дополнительная х4.
@@ -25,7 +26,7 @@
* Зарядное устройство EFEST Luc V4 Li-lon x1.
* Защитный бокс регуляторов x4.
* Крепление под ножки x8.
* Полетный контроллер PixHawk x1.
* Полетный контроллер Pixhawk x1.
* Радиоприемник FlySky i6 x1.
* Радиопульт FlySky i6 x1.
* Зарядное устройство EFEST LUC V4 x1.
@@ -73,7 +74,7 @@
16. Ручка A (VrA).
17. Ручка B (VrB).
![radio Transmitter](assets/radioTransmitter.png)
![radio Transmitter](../assets/radioTransmitter.png)
## Дополнительное оборудование
@@ -88,7 +89,7 @@
7. Канцелярский нож
8. Мультиметр
![Дополнительное оборудование](assets/addEqipment.jpg)
![Дополнительное оборудование](../assets/addEqipment.jpg)
[Техника безопасности при пайке](tb.md)
@@ -98,7 +99,7 @@
* Распаковать моторы. Используя плоскогубцы, укоротить провода на моторах, обрезать половину длины (оставив 25 мм).
![Мотор brrc2205](assets/brrc2205.png)
![Мотор brrc2205](../assets/brrc2205.png)
Зачистить
@@ -111,18 +112,18 @@
* Нанести флюс на оголенную часть провода.
* Покрыть припоем, используя пинцет.
![Лужение](assets/zap.jpg)
![Лужение](../assets/zap.jpg)
#### Закрепить мотор на луче
* Установить мотор на сторону луча с гравировкой.
* Прикрепить моторы к лучам винтами М3х8, используя отвертку.
![Закрепить мотор на луче](assets/brrc2205on.png)
![Закрепить мотор на луче](../assets/brrc2205on.jpg)
* Лучи с моторами необходимо расположить согласно схеме. Стрелками указано направление вращения моторов.
![Вращение моторов](assets/brrc2205ondeck.png)
![Вращение моторов](../assets/brrc2205ondeck.jpg)
### Залудить три контактные площадки регулятора
@@ -131,7 +132,7 @@
Чтобы припой аккуратно заполнил всю площадку, необходимо прогреть площадку регулятора. Для этого нужно удерживать жало паяльника на контактной плащадке в течение 2 сек (или больше, если потребуется)
![Лужение контактных площадок регуляторов](assets/escDYSzap.png)
![Лужение контактных площадок регуляторов](../assets/escDYSzap.png)
* Повторить данную операцию для оставшихся трех регуляторов
@@ -139,14 +140,12 @@
Припаять ранее приготовленные провода моторов к контактным площадкам регуляторов.
![Припаять провода моторов к регуляторам](assets/solderingBrrc2205ondeckTOescDYSzap.png)
![Припаять провода моторов к регуляторам](../assets/solderingBrrc2205ondeckTOescDYSzap.png)
* Повторить данную операцию для оставшихся трех регуляторов
### Монтаж разъемов питания
[Статья про силовые и управляющие цепи](powerConnection.md)
#### Подготовка проводов для силовых разъемов XT60
1. Взять моток красных и черных проводов, промаркированных как 14AWG
@@ -154,13 +153,13 @@
* Длина 7 см (Для силового разъема XT60 pin) - 1 красный, 1 черный
* Длина 9 см (Для силового разъема XT60 socket) - 1 красный, 1 черный
![Подготовка проводов для силового разъема](assets/cutwire14AWG.jpg)
![Подготовка проводов для силового разъема](../assets/cutwire14AWG.jpg)
#### Подготовка силовых разъемов питания XT60 pin и XT60 socket
[Статья про силовые разъемы и их обозначения](connectortypes.md)
![Силовой разъем XT60](assets/xt60pinsocket.jpg)
![Силовой разъем XT60](../assets/xt60pinsocket.jpg)
1. Под разъем XT60 pin залудить два силовых провода красный и чёрный 14AWG длиной 7 см.
2. Залудить контактные площадки разъема XT60 pin.
@@ -168,7 +167,7 @@
4. Припаять красный провод к “+” контакту разъема .
5. Нарезать термоусадку ф5 (2 отрезка по 10 мм).
6. Надеть термоусадку ф5 на провода так, чтобы она закрывала контактные площадки проводов с XT60 .
7. Усадить термоусадку феном. ![Монтаж разъемов XT60](assets/mountxt60pinsocket.png)
7. Усадить термоусадку феном. ![Монтаж разъемов XT60](../assets/mountxt60pinsocket.png)
8. Повторить процедуру для разъема XT60 socket.
#### Подготовка разъема питания управляющей цепи 5В
@@ -178,15 +177,15 @@
3. Убрать 3-й (оранжевый) провод из разъема, за ненадобностью.
4. Длина оставшихся черного и красного проводов 10-12 см.
![Монтаж разъема 5В](assets/mount5vconnector.png) *было бы круто, если делать такие картинки и в формате гифки
![Монтаж разъема 5В](../assets/mount5vconnector.jpg)
### Монтаж платы распределения питания
#### Предпаячная проверка
[Статья про прозвонку](testConnection.md)
[Статья про прозвонку](test_connection.md)
![Предпаячная проверка](assets/startPDBtest.jpg)
![Предпаячная проверка](../assets/startPDBtest.jpg)
Прозвонить следующие цепи на НЕЗАМКНУТОСТЬ (отсутствие звукового сигнала мультиметра):
@@ -204,7 +203,7 @@
1. [Залудить*](zap.md) контактные площадки платы питания.
2. С помощью мультиметра проверить отсутствие контактного замыкания на плате (прозвонить)
![Постпаячная проверка](assets/zapPDBtest.jpg)
![Постпаячная проверка](../assets/zapPDBtest.jpg)
Чтобы припой аккуратно заполнил всю площадку, необходимо её прогреть. Для этого нужно удерживать жало паяльника на контактной плащадке в течение 2 сек (или больше, если потребуется)
@@ -212,7 +211,7 @@
Припаять разъем для АКБ, соблюдая полярность на контактных площадках.
![Пайка XT60 на PDB](assets/solderingxt60socketTOpdb.png)
![Пайка XT60 на PDB](../assets/solderingxt60socketTOpdb.jpg)
ВАЖНО о полярности
@@ -224,13 +223,13 @@
Припаять разъем 5В, соблюдая полярность на контактных площадках.
(на изображении: красный провод - это питание “+”)
![Пайка 5В на PDB](assets/soldering5VTOpdb.png)
![Пайка 5В на PDB](../assets/soldering5VTOpdb.jpg)
### Монтаж отсека АКБ
#### Подготовка перемычек (3 шт.)
![Перемычка](assets/jumper.png)
![Перемычка](../assets/jumper.png)
* Отрезать силовой провод длиной 2 см.
* Зачистить с обеих сторон.
@@ -241,31 +240,31 @@
#### Подготовка отсека АКБ
![Подготовка отсека АКБ](assets/casebattery.png)
![Подготовка отсека АКБ](../assets/casebattery.jpg)
* Приклеить наклейки с разметкой внутрь отсека АКБ, в соответствии с полярностью.
* Приклеить ленту из скотча на дно отсека.
### Монтаж платы распределения питания
* Установить плату питания на раму винтами М3х8 и пластиковыми гайками. ![Установка платы PDB](assets/mountPDB.png)
* Установить плату питания на раму винтами М3х8 и пластиковыми гайками. ![Установка платы PDB](../assets/mountPDB.png)
> **ВАЖНО** Стрелочка на плате направлена в сторону носового выреза
![Установка платы PDB](assets/topviewmountPDB.png)
![Установка платы PDB](../assets/topviewmountPDB.png)
#### Монтаж элементов
1. Установить гайки в пластиковые держатели. ![Монтаж пластиковых держателей](assets/holderLegs.png)
1. Установить гайки в пластиковые держатели. ![Монтаж пластиковых держателей](../assets/holderLegs.png)
2. Установить лучи на раму винтами М3х16
* Лучи устанавливаются поверх рамы
* Пластиковые держатели устанавливаются снизу рамы. ![Монтаж лучей](assets/mountBeams.png)
3. Расположение моторов. Проверить расположение моторов (моторы с черной гайкой в левом верхнем углу и в правом нижнем). ![Расположение моторов](assets/motorsTopview.png)
4. Продеть силовые провода регуляторов в отверстия. ![силовые провода моторов](assets/escWires.png)
* Пластиковые держатели устанавливаются снизу рамы. ![Монтаж лучей](../assets/mountBeams.png)
3. Расположение моторов. Проверить расположение моторов (моторы с черной гайкой в левом верхнем углу и в правом нижнем). ![Расположение моторов](../assets/motorsTopview.png)
4. Продеть силовые провода регуляторов в отверстия. ![силовые провода моторов](../assets/escWires.png)
#### Пайка силовой цепи платы питания
Припаять силовые провода регуляторов к плате питания, соблюдая полярность.
![Пайка силовых проводов на PDB](assets/solderingPowerwires.png)
![Пайка силовых проводов на PDB](../assets/solderingPowerwires.png)
ВАЖНО о полярности
@@ -274,12 +273,12 @@
### Сопряжение приемника и пульта
1. Подключить радиоприемник к разъему 5В. В любой разъем, GND внизу. На схеме питание обозначено как 5V ![Подключение питания приемника](assets/receiver5V.png)
1. Подключить радиоприемник к разъему 5В. В любой разъем, GND внизу. На схеме питание обозначено как 5V ![Подключение питания приемника](../assets/receiver5V.png)
2. Подключить АКБ. Светодиод на радиоприемнике должен мигать. ![Подключение АКБ]
#### БЕЗОПАСНОСТЬ при работе с АКБ
![БЕЗОПАСНОСТЬ при работе с АКБ](assets/safetyPower.png)
![БЕЗОПАСНОСТЬ при работе с АКБ](../assets/safetyPower.png)
#### Включение радиопульта
@@ -291,45 +290,45 @@
6. Отсоединить джампер.
7. Светодиод горит непрерывно.
![Подключение питания приемника](assets/connectingRadio.png)
![Подключение питания приемника](../assets/connectingRadio.jpg)
[Мануал по неисправностям радиоаппаратуры](radioerrors1.md)
[Мануал по неисправностям радиоаппаратуры](radioerrors.md)
### Проверка направления вращения моторов
1. Наклеить наклейки на АКБ 18650.
2. Установить 18650 в отсек АКБ, соблюдая полярность. ![Готовность отсека АКБ](assets/readyBatteryholder.png)
2. Установить 18650 в отсек АКБ, соблюдая полярность. ![Готовность отсека АКБ](../assets/readyBatteryholder.png)
3. Проверить, что разъем питания 5В подключен к приемнику по схеме.
4. Подключить регулятор мотора к 3 каналу приемника CH3 по схеме. ![Подключение регулятора к приемнику](assets/connectionESCtoReceiver.png)
4. Подключить регулятор мотора к 3 каналу приемника CH3 по схеме. ![Подключение регулятора к приемнику](../assets/connectionESCtoReceiver.png)
5. Подключить внешнее питание (АКБ).
6. Включить пульт.
7. Подать левым стиком газ (throttle) на 10%.
8. Проверить направления вращения мотора по схеме. ![Проверка вращения моторов](assets/testMotors.png)
9. Если необходимо изменить направление вращения, то меняем любые два фазных провода мотора (нужно перепаять). ![Перепайка фазных проводов](assets/resolderingESC.png)
8. Проверить направления вращения мотора по схеме. ![Проверка вращения моторов](../assets/testMotors.jpg)
9. Если необходимо изменить направление вращения, то меняем любые два фазных провода мотора (нужно перепаять). ![Перепайка фазных проводов](../assets/resolderingESC.png)
### Монтаж радиоприемника
1. Установить пластиковые стойки 30 мм на раму винтами М3х8.
2. Разъем питания 5В продеть в прорезь. ![Установка стоек и прорезь](assets/mountReceiverStud.png)
3. Приемник прикрепить к нижней дополнительной раме, используя двухсторонний скотч и ориентируясь на гравировку. Антенны направлены вперед. ![Установка радиоприемника на деку](assets/mountReceiverDeck.png)
4. Установить 3х проводной шлейф в канал PPM / CH1. ![Подключение радиоприемника](assets/receiverPPM.png)
2. Разъем питания 5В продеть в прорезь. ![Установка стоек и прорезь](../assets/mountReceiverStud.png)
3. Приемник прикрепить к нижней дополнительной раме, используя двухсторонний скотч и ориентируясь на гравировку. Антенны направлены вперед. ![Установка радиоприемника на деку](../assets/mountReceiverDeck.png)
4. Установить 3х проводной шлейф в канал PPM / CH1. ![Подключение радиоприемника](../assets/receiverPPM.png)
5. Продеть в прорезь к разъему 5 В.
6. Прикрутить нижнюю дополнительную раму к стойкам на центральной раме винтами М3х8. ![Установка нижней деки](assets/mountBottomDeck.png)
6. Прикрутить нижнюю дополнительную раму к стойкам на центральной раме винтами М3х8. ![Установка нижней деки](../assets/mountBottomDeck.png)
> **ВАЖНО** Направление стрелок на плате питания и на дополнительной раме совпадают
### Монтаж полетного контроллера
#### Переворачиваем сборку
![Переворачиваем сборку](assets/topPreview.png)
![Переворачиваем сборку](../assets/topPreview.png)
#### Установка полетного контроллера PixHawk
#### Установка полетного контроллера Pixhawk
1. Клеим 2х сторонний скотч по углам полетного контроллера. ![Полетный контроллер](assets/pixhawk.png)
> **ВАЖНО** При работе моторов возникают вибрации, отрицательно влияющие на показания датчиков полетного контроллера PixHawk. Чтобы избежать этого эффекта, количество слоев двустороннего скотча
1. Клеим 2х сторонний скотч по углам полетного контроллера. ![Полетный контроллер](../assets/pixhawk.png)
> **ВАЖНО** При работе моторов возникают вибрации, отрицательно влияющие на показания датчиков полетного контроллера Pixhawk. Чтобы избежать этого эффекта, количество слоев двустороннего скотча
лучше увеличить до 4-5.
2. Установить полетный контроллер в центр рамы. ![Полетный контроллер](assets/topviewpixhawk.png)
> **ВАЖНО** Стрелки на раме и PixHawk должны быть сонаправлены
2. Установить полетный контроллер в центр рамы. ![Полетный контроллер](../assets/topviewpixhawk.jpg)
> **ВАЖНО** Стрелки на раме и Pixhawk должны быть сонаправлены
#### Подключение полетного контроллера по схеме
@@ -337,19 +336,19 @@
2. Моторы к 1,2,3,4 портам MAIN OUT, согласно схеме
3. Питание от PDB (5В/VCC) в любой порт, кроме SB (SBUS)
![Подключение полетного контроллера](assets/connectionPixhawk.png)
![Подключение полетного контроллера](../assets/connectionPixhawk.png)
### Сборка регуляторов
1. Клеим 2х сторонний скотч на основание защитного бокса регуляторов. ![Скотч на бокс регулей](assets/escCase.png)
2. Укладываем регуляторы в защитные боксы. Крепим полученную сборку к лучам рамы. ![Вид сверху с боксами для регулей](assets/topESCcaseview.png)
1. Клеим 2х сторонний скотч на основание защитного бокса регуляторов. ![Скотч на бокс регулей](../assets/escCase.png)
2. Укладываем регуляторы в защитные боксы. Крепим полученную сборку к лучам рамы. ![Вид сверху с боксами для регулей](../assets/topESCcaseview.png)
### Установка защиты
1. Закрепить нижнюю защиту винтами М3х16 на лучах рамы. ![Установка лучевой защиты](assets/lowsafeDeck.png)
2. Закрепить ножки к пластиковым держателям винтами М3х16. ![Установка ножек](assets/safeLegs.png)
3. Закрепить стойки 30 мм в отверстия нижней защиты винтами М3х12. ![Установка нижней радиальной защиты](assets/safelowRadial.png)
4. Закрепить верхнюю защиту винтами М3х12. ![Установка верхней радиальной защиты](assets/safehighRadial.png)
1. Закрепить нижнюю защиту винтами М3х16 на лучах рамы. ![Установка лучевой защиты](../assets/lowsafeDeck.png)
2. Закрепить ножки к пластиковым держателям винтами М3х16. ![Установка ножек](../assets/safeLegs.png)
3. Закрепить стойки 30 мм в отверстия нижней защиты винтами М3х12. ![Установка нижней радиальной защиты](../assets/safelowRadial.png)
4. Закрепить верхнюю защиту винтами М3х12. ![Установка верхней радиальной защиты](../assets/safehighRadial.png)
### Монтаж отсека АКБ
@@ -360,15 +359,15 @@
* Рама дополнительная (1 шт)
* Батарейный отсек (1 шт)
1. Прикрепить батарейный отсек на верхнюю дополнительную раму винтами М3х12 и гайками. ![Монтаж отсека АКБ](assets/mountHolder.png)
2. Прикрепить верхнюю дополнительную раму на стойки винтами М3х8. ![Монтаж отсека АКБ](assets/isoViewmountHolder.png)
1. Прикрепить батарейный отсек на верхнюю дополнительную раму винтами М3х12 и гайками. ![Монтаж отсека АКБ](../assets/mountHolder.png)
2. Прикрепить верхнюю дополнительную раму на стойки винтами М3х8. ![Монтаж отсека АКБ](../assets/isoViewmountHolder.jpg)
3. Установить АКБ в отсек.
### Монтаж антенн
1. Крепим антенны на 2х сторонний скотч или изоленту, а усики продеваем в передние отверстия верхней дополнительной рамы.
![Монтаж отсека АКБ](assets/mountAntenna.png)
![Монтаж отсека АКБ](../assets/mountAntenna.png)
Коптер готов к настройке!
@@ -378,7 +377,7 @@
2. Отключить аккумулятор. Держать питание выключенным. “Сборку, настройку и ремонт производить с отключенным питанием. Подключать питание только для тестирования электронных компонентов коптера. После тестирования перед другими работами питание сразу отключить.”
3. Позвать на помощь. “Если при выполнении работ возникли какие-либо проблемы, необходимо обратиться к преподавателю или учителю, а не пытаться решить проблему самостоятельно.”
![Безопасность при сборке](assets/safetybyassem.png)
![Безопасность при сборке](../assets/safetybyassem.png)
## Безопасность при работе с Li-ion аккумуляторами 18650
@@ -386,4 +385,4 @@
2. При подключении (отключении) аккумуляторов держаться только за разъёмы, тянуть или дергать за провода запрещается.
3. В случае обрыва разъемов, обнаружения нарушений целостности изоляции или корпуса аккумулятора, не трогая его, немедленно сообщить преподавателю.
[ТЕХНИКА БЕЗОПАСНОСТИ ПРИ ПАЙКЕ И ЛЁТНОЙ ЭКСПЛУАТАЦИИ КОПТЕРОВ](safety.md)
См. статью [техника безопасности при пайке и лётной эксплуатации коптеров](safety.md).

235
docs/ru/assemble_3.md Normal file
View File

@@ -0,0 +1,235 @@
# Сборка Клевера 3
В данной инструкции рассматривается сборка комплекта COEX Clever 3 с платой регуляторов 4в1.
![Клевер 3](../assets/clever3_main.jpg)
> **Caution** Перед использованием паяльного оборудования обязательно ознакомьтесь с [техникой безопасности при пайке](tb.md).
<!--
## Состав конструктора
TODO
-->
## Дополнительное оборудование
![Дополнительное оборудование](../assets/additonal_eqipment.jpg)
## Условные обозначения
![Условные обозначения](../assets/conditional_refer.jpg)
## Установка моторов
1. Распаковать моторы.
2. Закрепить мотор на луче шестигранными винтами М3х6 (самые короткие винты в комплекте с моторами).
Шестигранный ключ в комплекте.
3. Вставить гайки М3 (4 шт) в пластиковый держатель.
Для удобства можно использовать длинный винт, либо плоскогубцы
4. Закрепить луч, нижнюю защиту луча и держатель винтами М3х12, используя крестовую отвертку.
5. Скрепить хомутом луч и нижнюю защиту луча.
Хвост от хомута (стяжки) отрезать ножницами.
![Подготовка моторов](../assets/cl3_prepareMotors.JPG)
## Монтаж каркасных элементов
1. Установить пластиковые гайки М3 (4 шт) для крепления PDB на раму винтами М3х8.
2. Установить стойки 6 мм (4 шт) для крепления Raspberry Pi на раму винтами М3х8.
3. Установить на раму собранную конструкцию, соблюдая схему, винтами М3х16.
4. Установить каркас для светодиодной ленты, используя прорези в держателях для ножек.
![Монтаж стоек на раму](../assets/cl3_mountElements.JPG)
## Монтаж преобразователя напряжения BEC (припаять и проверить)
1. Распаковать плату питания и установить шлейф питания.
2. Включить мультиметр в режим измерения постоянного напряжения (диапазон 20В или 200В).
3. Проверить работоспособность платы питания, подключив АКБ
* Выходное напряжение на разъеме XT30 должно равняться напряжению на АКБ (от 10В до 12.6В).
* Выходное напряжение на шлейфе питания должно быть в пределах 4.9В до 5.3В.
* Измеряем между черным и красным проводами.
4. Распаковывать преобразователь напряжения и снимаем прозрачную изоляцию.
5. Припаять два дополнительных провода на BEC
* Взять из набора 3 провода папа-мама (красный, черный и любого цвета)
* Красный и черный [залудить](zap.md) с обеих сторон, используя пинцет. На синем проводе залудить со стороны коннектора ПАПА.
Залудить - это:
* Нанести флюс на оголенную часть провода.
* Покрыть припоем.
* Припаять красный и черный провода к BEC:
ЧЕРНЫЙ -> OUT-
КРАСНЫЙ -> OUT+
6. Проверить работу BEC.
* Припаять BEC на плату питания:
ЧЕРНЫЙ -> -
КРАСНЫЙ -> +
* Подключить АКБ и проверяем напряжение на припаянных проводах к BEC (из пункта 5).
5В - все правильно!
больше 10В - отключите питание и переставьте желтую перемычку на другой пинцет.
0В - плохо спаяли.
* Если BEC выдает 5В, то изолируем паячное соединение черной термоусадкой.
7. Монтаж светодиодной ленты.
* Припаять провода от BEC (из пункта 5) к светодиодной ленте.
* Удалить силиконовый слой на ленте (надрезать ножом и оторвать).
* [Залудить](zap.md) контакты светодиодной ленты.
Красный -> +5V
Черный -> GND
Синий -> Din
![Монтаж преобразователя напряжения BEC ](../assets/cl3_mountBEC.JPG)
## Монтаж платы регуляторов 4в1 и платы питания PDB
1. Установить плату регуляторов 4в1, как показано на картинке.
Соединить фазные провода моторов с проводами регуляторов.
2. Закрепить плату регуляторов стойками 6 мм (4 шт.).
На стойки накрутить пластиковые гайки М3 (4 шт.).
3. Установить плату распределения питания PDB, как показано на картинке (разъем XT60 направлен к хвосту коптера).
4. Соединить разъемы питания платы питания и платы регуляторов XT30.
![Монтаж платы питания](../assets/cl3_mountESC.JPG)
## Сопряжение приемника и пульта
1. Подключить провод 5В от BEC в разъем приемника.
Установить BIND разъем в крайний правый порт B/VCC.
2. Подключить АКБ. Индикатор на приемники должен быстро мигать (режим сброса).
3. Зажать и удерживать кнопку BIND на пульте и включаем пульт.
На пульте отображается процесс сопряжения RXBinding
4. После установки сопряжения (появление допю строк на дисплее пульта):
* Убрать BIND разъем из приемника.
* Отключить АКБ.
![Сопряжение приемника и пульта](../assets/cl3_bindFlysky.JPG)
> **Hint** Если пульт не включается или заблокирован, см.
статью [неисправности пульта](radioerrors.md).
## Проверка направления вращения моторов
1. Включить пульт.
Убедиться, что ppm в меню RX Setup отключен ([раздел "Нет связи с полетным контроллером"](radioerrors.md))
В пункте 3 выберите “RX setup” > “PPM OUTPUT” > “Off”.
Сохраните изменения (удерживаем нажатой кнопку “CANCEL”).
2. Подключить оранжевый провод S1 от платы регуляторов в CH3 на приемнике. Подключить внешнее питание.
3. Подать левым стиком газ (throttle) на 10%.
4. Проверить направления вращения мотора по схеме.Повторить для каждого мотора. Таким образом, будет понятно каким именно мотором мы управляем.
5. Если необходимо изменить направление вращения, то меняем любые два фазных провода мотора (нужно переподключить).
![Проверка направления вращения моторов](../assets/cl3_testMotorsFlysky.JPG)
## Монтаж и подключение полетного контроллера Pixracer
1. Установить Полетный контроллер Pixracer на двухстороний скотч 3М (2-3 слоя).
Также полетный контроллер можно извлечь из корпуса и жестко установить на стойке М3х6.
2. Установить стойки 40 мм, используя винты М3х87.
Подключить разъем POWER.
3. Подключить регуляторы, как на картинке.
Подробно [про подключение регуляторов 4в1](4in1.md).
4. Подключить шлейф радиоприемника в разъем RCIN в Pixracer.
![Монтаж полетного контроллера](../assets/cl3_mountPixracer.JPG)
## Монтаж Raspberry
1. Перевернуть коптер.
Установить Raspberry на стойки, используя монтажные отверстия Raspberry.
USB-разъемы направлены к хвостовой части коптера.
2. Установка шлейфа для камеры:
* поднять защелку;
* подключить шлейф;
* закрыть защелку.
3. Подключение питания Raspberry:
5В -> pin 04 (DC power 5v)
GND -> pin 06 (Ground)
Подключение светодиодной ленты pin 40 (GPIO21)
4. Сборка маунта для камеры RPi.
Используйте винт М3х16 и гайку М3
![Монтаж Raspberry Pi Model B](../assets/cl3_mountRaspberryPi.JPG)
## Монтаж Arduino и радиоприемника FlySky
1. Произвести монтаж пинов микроконтроллера Arduino Nano, используя пайку.
2. Установить миконтроллер в специальной маунт и прикрепите к нижней деке, используя винты М3х16 (4 шт.).
3. Используя 2хсторонний скотч, прикрепить приемник, как показано на рисунке.
4. Подключить шлейф радиоприемника от Pixracer как на рисунке.
белый -> PPM
красный -> 5V
черный -> GND
оранжевый, зеленый -> сейчас не используются. Устанавливаются в неиспользуемые пины радиоприемника
![Монтаж Arduino nano и радиоприемника Flysky i6](../assets/cl3_mountArduinoandFlysky.JPG)
## Монтаж камеры RPi
1. Установить маунт для камеры Rpi в сборе на нижнюю деку винтами М3х12 (2 шт.).
2. Подключить шлейф к камере RPi.
3. Установить камеру в маунт, закрепить саморезами М2.
4. Закрепить Raspberry стойками 30 мм (4 шт.).
Установить нижнюю деку в сборе на стойки винтами М3х8 (4шт.)
5. Установить ножки в маунты (4 шт.).
![Монтаж камеры RPi](../assets/cl3_mountRpiCamera.JPG)
## Монтаж остальных конструктивных элементов
1. Установить нижней защиты, используя винты М3х12 (8 шт.) и стойки 30 мм (8 шт.).
2. Установить верхней защиты, используя винты М3х12 (8 шт.).
3. Установить ремешок в верхнюю деку для фиксации АКБ.
Закрепить верхнюю деку винтами М3х8 (4 шт.)
![Монтаж остальных конструктивных элементов](../assets/cl3_mountOtherElements.JPG)
## Монтаж USB соединителей
1. Соедините Pixracer и Raspberry, используя micro USB - USB кабель.
2. Соедините Arduino и Raspberry, используя micro USB - USB кабель.
![Монтаж USB соединителей](../assets/cl3_mountUSBconnectors.JPG).
Подробнее про подключение см. [статью](connection.md).

View File

@@ -1,4 +1,4 @@
Автозапускаемое ПО
Автозапуск ПО
===
systemd

4
docs/ru/book.json Normal file
View File

@@ -0,0 +1,4 @@
{
"language": "ru",
"root": "."
}

View File

@@ -1,17 +1,16 @@
### Как настраивать PID
# Настройка коэффициентов PID
На практике самая распространенная проблема это быстрые осцилляции, возникающие из-за слишком большого значения параметра P. В данной ситуации следует уменьшить его значение (все параметры выставляются экспериментальным путем, исходя из поведения аппарата).
На практике самая распространенная проблема это быстрые осцилляции, возникающие из-за слишком большого значения параметра P.
В данной ситуации следует уменьшить его значение (все параметры выставляются экспериментальным путем, исходя из поведения аппарата).
Также стоит проверить чтобы осцилляций не было при резком спуске (в противном случае уменьшить P)
Также стоит проверить чтобы осцилляций не было при резком спуске (в противном случае уменьшить P).
Медленные раскачивания коптера из стороны в сторону при попытке удержания заданной точки связаны с перебором значения I.
В случае если при движении коптер раскачивается следует поднять это значение
В случае если коптер плохо держит заданное положение следует увеличить параметр D при переборе или недостатке параметра D возникают осцилляции
В случае если при движении коптер раскачивается следует поднять это значение.
В случае если коптер плохо держит заданное положение следует увеличить параметр D при переборе или недостатке параметра D возникают осцилляции.
#### ВАЖНО настройку D следует начинать с минимальных значений , в 3-4 раза меньше значений по умолчанию, если таковые присутствуют
> **Note** Настройку D следует начинать с минимальных значений, в 34 раза меньше значений по умолчанию, если таковые присутствуют.
Параметры для Rate Pitch and Rate Roll должны быть одинаковыми
По YAW параметры следует менять отдельно, согласно вышеуказанной инструкции (как правило рысканье не требует серьезной настройки, можно оставить по умолчанию)
Параметры для Rate Pitch and Rate Roll должны быть одинаковыми.
![Осцилляции по ROLL](assets/oscillRoll.jpg)
По YAW параметры следует менять отдельно, согласно вышеуказанной инструкции (как правило рысканье не требует серьезной настройки, можно оставить по умолчанию).
![Осцилляции по ROLL](../assets/oscillRoll.jpg)

View File

@@ -8,7 +8,7 @@
Эта строка задает статическую трансформацию между фреймом `fcu` ([соответствует корпусу полетного контроллера](frames.md)) и камерой (`main_camera_optical`) в формате:
```
```txt
сдвиг_x сдвиг_y сдвиг_z угол_рысканье угол_тангаж угол_крен
```
@@ -22,20 +22,40 @@
## Настройки для Клевера
### Клевер 3, камера вниз
> Первое изображение - как выглядит модель коптера в Rviz при указанных настройках, второе - как выглядит Клевер при тех же настройках.
### 1. Камера направлена вниз, шлейф назад
```xml
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 -1.5707963 0 3.1415926 fcu main_camera_optical"/>
```
![](../assets/camera_option_1_rviz.png)
![](../assets/camera_option_1_clever.jpg)
### 2. Камера направлена вниз, шлейф вперёд
```xml
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 1.5707963 0 3.1415926 fcu main_camera_optical"/>
```
### Клевер 3, камера вверх
![](../assets/camera_option_2_rviz.png)
![](../assets/camera_option_2_clever.jpg)
### 3. Камера направлена вверх, шлейф назад
```xml
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 0.07 1.5707963 0 0 fcu main_camera_optical"/>
```
![](../assets/camera_option_3_rviz.png)
![](../assets/camera_option_3_clever.jpg)
### 4. Камера направлена вверх, шлейф вперёд
```xml
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 0.07 -1.5707963 0 0 fcu main_camera_optical"/>
```
### Клевер 2, камера вниз
```xml
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0 0 -0.07 -1.5707963 0 3.1415926 fcu main_camera_optical"/>
```
![](../assets/camera_option_4_rviz.png)
![](../assets/camera_option_4_clever.jpg)

View File

@@ -1,9 +1,9 @@
Подключение Pixhawk/Pixracer к Raspberry Pi
===
Для программирования [автономных полетов](simple_offboard.md), [работы с Pixhawk по Wi-Fi](gcs_bridge.md), использования [веб-пульта](web_rc.md) и других функций необходимо подсоединить Raspberry Pi к Pixhawk.
Для программирования [автономных полетов](simple_offboard.md), [работы с Pixhawk (Pixracer) по Wi-Fi](gcs_bridge.md), использования [телефонного пульта](rc.md) и других функций необходимо подсоединить Raspberry Pi к Pixhawk (Pixracer).
Убедиться в работоспособности подключения, выполнив на Raspberry Pi:
Убедиться в работоспособности подключения, [выполнив на Raspberry Pi](ssh.md):
```bash
rostopic echo /mavros/state
@@ -28,7 +28,7 @@ rostopic echo /mavros/state
sudo systemctl restart clever
```
> **Hint** Для корректной работы подключения Raspberry Pi и Pixhawk по USB необходимо установить значение параметра `CBRK_USB_CHK` на 197848.
> **Hint** Для корректной работы подключения Raspberry Pi и Pixhawk по USB необходимо установить значение [параметра](px4_parameters.md) `CBRK_USB_CHK` на 197848.
Подключение по UART
---

View File

@@ -1,27 +1,28 @@
Типы силовых разъемов
=====================
XT-60
-----
Один из самых надёжных силовых разъёмов, которые стараются применять на силовых аккумуляторах. Именно такие аккумуляторы используются на Li-Po аккумуляторах для коптеров.
# Типы силовых разъемов
![XT-60](assets/xt60.jpg)
## XT-60
T-plug
------
Аналог XT-60. Имеет различные вариации для упрозщения разъединения.
Один из самых надёжных силовых разъёмов, которые стараются применять на силовых аккумуляторах. Именно такие аккумуляторы используются на Li-Po аккумуляторах для коптеров.
![T-plug](assets/t-plug.jpg)
<img src="../assets/xt60.jpg" alt="XT-60" width=200>
JST-XH или балансировочный разъем
-----------------------------
Разъёмы данного типа часто применяются для балансировки отдельных элементов в составе сборки из нескольких литий-полимерных (Li-Pol), литий-ионных (Li-ion) или литий-фосфатных (LiFePO4) аккумуляторов.
## T-plug
Аналог XT-60. Имеет различные вариации для упрозщения разъединения.
<img src="../assets/t-plug.jpg" alt="T-plug" width=200>
## JST-XH или балансировочный разъем
Разъёмы данного типа часто применяются для балансировки отдельных элементов в составе сборки из нескольких литий-полимерных (Li-Pol), литий-ионных (Li-ion) или литий-фосфатных (LiFePO4) аккумуляторов.
Подобные разъёмы с разным количеством штырьков устанавливаются в большинство современных зарядных устройств для балансировки литиевых элементов при заряде.
Может использоваться в сочетании с Buzzer (пищалкой) для контроля заряда аккумулятора.
![JST-XH](assets/balance.jpg)
<img src="../assets/balance.jpg" alt="JST-XH" width=200>
Gold bullet Conector или "Бананы"
-----------------------------
Существует великое множество штырьковых разъёмов типа Gold bullet Conector. Разъёмы данного типа отличаются друг от друга диаметром и размером. Наиболее распространены разъёмы с диаметром коннектора 2 мм, 3 мм и 4 мм.
## Gold bullet Conector или "Бананы"
Существует великое множество штырьковых разъёмов типа Gold bullet Conector. Разъёмы данного типа отличаются друг от друга диаметром и размером. Наиболее распространены разъёмы с диаметром коннектора 2 мм, 3 мм и 4 мм.
Часто используется для создания беспаечных соединений на PDB и моторах.
![Banana](assets/banana.jpg)
<img src="../assets/Banana.jpg" alt="Banana" width=200>

45
docs/ru/contributing.md Normal file
View File

@@ -0,0 +1,45 @@
# Вклад в Клевер
Клевер это, по большей части, [open source](https://ru.wikipedia.org/wiki/Открытое_программное_обеспечение) и [open hardware](https://ru.wikipedia.org/wiki/Открытое_аппаратное_обеспечение) проект, который ставит своей целью уменьшение порога входа в разработку проектов, связанных с летающей робототехникой. Вы можете внести свой вклад, предлагая исправления и улучшения в документацию и ПО Клевера.
> **Note** Для внесения предложений по изменению документации или ПО Клевера необходимо иметь аккаунт на [GitHub](https://github.com).
## Markdown
Вся документация Клевера написана в широко распространенном формате [Markdown](https://ru.wikipedia.org/wiki/Markdown). В Интернете существует множество руководств по нему.
На русском: https://guides.hexlet.io/markdown/.
На английском: https://www.markdownguide.org/getting-started, https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet.
Для удобного редактирования текста, вы можете использовать текстовые редакторы с поддержкой Markdown: [Typora](https://typora.io), [Dillinger](https://dillinger.io/) (веб), [VSCode](https://code.visualstudio.com) с плагином [Markdown Editor](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.MarkdownEditor).
Для локальной сборки статического сайта документации необходимо использовать утилиту [`gitbook-cli`](https://github.com/GitbookIO/gitbook-cli).
## Исправление ошибок в документации
Если вы нашли ошибку в документации или хотите ее улучшить, используйте механизм Pull Request'ов.
1. Найдите файл с интересующей вас статьей в репозитории  https://github.com/CopterExpress/clever/tree/master/docs.
2. Нажмите кнопку "Редактировать".
<img src="../assets/github-edit.png" alt="GitHub Edit">
3. Внесите необходимые изменения.
4. Нажмите кнопку "Propose file change".
5. Опишите ваше изменение и нажмите кнопку "Create Pull Request".
6. Ожидайте принятия ваших изменений :)
Более подробную информацию о Pull Request'ах смотрите [на GitHub](https://help.github.com/articles/about-pull-requests/) (англ.) или в [документации по git](https://git-scm.com/book/ru/v2/GitHub-Внесение-собственного-вклада-в-проекты) (русск.).
<!--
## Добавление новой статьи
TODO
-->
## Ваш проект с Клевером
Если вы реализовали собственный интересный проект на Клевере, вы можете добавить статью о нем в раздел "Проекты на базе Клевера".
<!-- TODO -->

View File

@@ -7,6 +7,8 @@ Copter Hack 2017
<iframe width="560" height="315" src="https://www.youtube.com/embed/xgXheg3TTs4?rel=0" frameborder="0" allowfullscreen></iframe>
Запись видеолекций https://copterexpress.timepad.ru/event/510375/.
Модули
---
@@ -34,7 +36,7 @@ SSID Wi-Fi
Чтобы изменить SSID раздаваемого Wi-Fi необходимо любым способом изменить параметр ssid в файле ``/etc/hostapd/hostapd.conf``.
Список разпознанных маркеров
Список распознанных маркеров
---
```bash
@@ -50,18 +52,14 @@ rostopic echo /marker_data
* [Пакет MAVRos](mavros.md)
* Неплохая вводная статья
https://habrahabr.ru/post/227425/
* Неплохая вводная статья: https://habrahabr.ru/post/227425/
* Сигналы, применяющиеся в дронах
https://geektimes.ru/post/258186/
* Сигналы, применяющиеся в дронах: https://geektimes.ru/post/258186/
* Хорошая статья про ПИДы
https://habrahabr.ru/company/technoworks/blog/216437/
* Хорошая статья про ПИДы: https://habrahabr.ru/company/technoworks/blog/216437/
* Запись видеолекций
https://copterexpress.timepad.ru/event/510375/
* Запись видеолекций: https://copterexpress.timepad.ru/event/510375/
* [Aubio](https://aubio.org), библиотека для анализа звука (музыки)
* Пакеты для работы с музыкой для Python https://wiki.python.org/moin/PythonInMusic
* Пакеты для работы с музыкой для Python: https://wiki.python.org/moin/PythonInMusic

37
docs/ru/copterhack2018.md Normal file
View File

@@ -0,0 +1,37 @@
# Copter Hack 2018
Хакатон [Copter Hack 2018](https://copterexpress.timepad.ru/event/768108/) прошел 1921 октября в Технополисе "Москва".
<img src="../assets/copterhack18.jpg" height=400px title="Copter Hack 2018">
Чат хакатона: https://t.me/CopterHack.
Стрим хакатона: https://www.youtube.com/watch?v=nIo5HSqlt6I.
Фотографии с хакатона: https://drive.google.com/open?id=1ozdXol4rhKwhHbsrnfxrp3CqazBRm-3W.
## Видео
<iframe width="560" height="315" src="https://www.youtube.com/embed/iv9I-JwaAhE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
## Лекции
Лекция 1: сборка  https://www.youtube.com/watch?v=gEs-w7BRPM8.
Лекция 2: настройка  https://www.youtube.com/watch?v=sPqSCCmgdG0.
Лекция 3: прошивка PX4  https://www.youtube.com/watch?v=WFnZAIypgMQ.
Лекция 4: автономные полеты https://www.youtube.com/watch?v=gD6a7aSEf9M.
## Результаты
Команды-победители:
1. Starshine (Москва) — управление дроном с помощью "умной" перчатки.
2. Alcopter (Москва) — управление дроном с помощью жестов и смены поз.
3. Весёлый коптер (Самара) — бот Vkontakte для управления коптером, совместный полет "Жужи" и "Клевера 3".
4. International Post (Новосибирск) — автоматический разброс листовок с дрона.
5. ЛАМАР (Екатеринбург) — станция автоматической смены аккумулятора квадрокоптера.
<img src="../assets/alcopter.jpg" title="Команда Alcopter" height=300px>

View File

@@ -1,5 +1,5 @@
В составе набора имеется 4 дополнительных рамы (поз. 2).
Они абсолютно одинаковые.
Они абсолютно одинаковые.
Поэтому для дальнейшего удобства понимания инструкции условно разделим их на верхнюю и нижнюю дополнительные рамы
![Общая раскладка](assets/allElements.png)
![Общая раскладка](../assets/allElements.png)

View File

@@ -20,26 +20,26 @@
1. Запустите программу BLHeliSuite и выберите вкладку Make interfaces.
![](assets/BLHeliSuite_SiLabs_ESC_Setup_2.png)
![](../assets/BLHeliSuite_SiLabs_ESC_Setup_2.png)
2. Подключите Arduino к компьютеру, при необходимости посмотрите в диспетчере устройств номер COM порта, к которому подключена плата.
3. Нажмите Arduino 4way-interface в разделе Make Arduino Interface Boards и выберите файл прошивки. После выбора файла начнётся прошивка контроллера.
![](assets/BLHeliSuite_Make_Interfaces.png)
![](assets/BLHeliSuite_Interface_Options.png)
![](assets/BLHeliSuite_Arduino_Select_Firmware.png)
![](../assets/BLHeliSuite_Make_Interfaces.png)
![](../assets/BLHeliSuite_Interface_Options.png)
![](../assets/BLHeliSuite_Arduino_Select_Firmware.png)
4. После прошивки Arduino вернитесь на вкладку Silabs ESC Setup и подключитесь к Arduino, предварительно выбрав интерфейс программатора 4way-if и COM порт Arduino.
![](assets/BLHeliSuite_4way-if_Select.png)
![](assets/BLHeliSuite_ESC_Setup_Connect.png)
![](../assets/BLHeliSuite_4way-if_Select.png)
![](../assets/BLHeliSuite_ESC_Setup_Connect.png)
## Подключение ESC регуляторов к Arduino
Для прошивки или изменения настроек регуляторов необходимо подключить сигнальные порты (обычно белого цвета) ESC регуляторов к портам Arduino, предварительно посмотрев в мануале (см. рисунок ниже), какие порты используются для соединения с регуляторами. Так же нужно соединить GND Arduino с землёй одного из регуляторов (обычно черного цвета). Регуляторы должны быть подключены к питанию, а если к регуляторам подключены моторы, **на них не должно быть винтов**.
![](assets/BLHeliSuite_Arduino_Pinout_For_4way-if.png)
![](../assets/BLHeliSuite_Arduino_Pinout_For_4way-if.png)
В случае с Arduino Mega, сигнальные порты регуляторов подключаются к портам D43-D49 и D51.
@@ -47,8 +47,8 @@
Для загрузки информации о версии прошивки и настроек регуляторов нужно нажать на кнопку Check.
![](assets/BLHeliSuite_ESC_Setup_Check.png)
![](assets/BLHeliSuite_SiLabs_ESC_Setup_1.png)
![](../assets/BLHeliSuite_ESC_Setup_Check.png)
![](../assets/BLHeliSuite_SiLabs_ESC_Setup_1.png)
Основные параметры, которые нас интересуют, это:
@@ -60,7 +60,7 @@
Самый левый мотор в списке моторов \(Multiple ESC\) считается главным \(мастер\). Нажимая на номера моторов, можно включать/выключать возможность записи в них настроек. После изменения необходимых параметров можно записать в нужные моторы настройки, нажав на кнопку Write Setup.
![](assets/BLHeliSuite_ESC_Setup_Write_Setup.png)
![](../assets/BLHeliSuite_ESC_Setup_Write_Setup.png)
Для отображения настроек со всех регуляторов одновременно можно воспользоваться вкладкой ESC Overview.
@@ -75,4 +75,3 @@
## Видеоинструкция по перепрошивке ESC регуляторов
Для лучшего понимания того, что описано в статье, рекомендуем посмотреть наглядное руководство по подключению электроники и прошивке регуляторов на английском языке на [youtube](https://www.youtube.com/watch?v=i6lhMcQLRSU&feature=youtu.be).

Some files were not shown because too many files have changed in this diff Show More