Compare commits
162 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aa8ed7662f | ||
|
|
06df8848bd | ||
|
|
02b365eb96 | ||
|
|
db71d0e234 | ||
|
|
21121b294d | ||
|
|
4bca49113a | ||
|
|
54e6701c51 | ||
|
|
8f73c6af0b | ||
|
|
962ac189ea | ||
|
|
1e1d11b216 | ||
|
|
c3dd18d661 | ||
|
|
e5c66ec77d | ||
|
|
52ab8de1cc | ||
|
|
31351100aa | ||
|
|
6f59e4c9d6 | ||
|
|
79a78ceb7b | ||
|
|
ef3776e235 | ||
|
|
422ce4b3f7 | ||
|
|
00a3ec01f2 | ||
|
|
da37f29d9d | ||
|
|
a69146a36e | ||
|
|
e7b12be958 | ||
|
|
c8994aebb4 | ||
|
|
47fc673d73 | ||
|
|
8a4cdb3287 | ||
|
|
253d3563d5 | ||
|
|
96e6c5bc71 | ||
|
|
8c5a0716e7 | ||
|
|
ff7ffa0c22 | ||
|
|
ced31329ef | ||
|
|
3b2433127d | ||
|
|
29c2ebc086 | ||
|
|
fb14d158ad | ||
|
|
0e4b2a6e50 | ||
|
|
3c6482e204 | ||
|
|
72945cb094 | ||
|
|
b8271dd49c | ||
|
|
4cf8e19923 | ||
|
|
436ec5e638 | ||
|
|
d311c0584d | ||
|
|
f98c31aba2 | ||
|
|
3ca36f6edf | ||
|
|
7cdb627b1b | ||
|
|
8d8421ae35 | ||
|
|
08c38106ab | ||
|
|
2a19a91714 | ||
|
|
d9b29c89d9 | ||
|
|
c04eb6fd31 | ||
|
|
d1f58c2835 | ||
|
|
29c360a501 | ||
|
|
700e2b5e0f | ||
|
|
ce1790d5e8 | ||
|
|
1f9ae88946 | ||
|
|
5abbdbab6c | ||
|
|
80208e4c5e | ||
|
|
c65f9eaace | ||
|
|
9ebd744d2c | ||
|
|
74fe0cce59 | ||
|
|
8aec577706 | ||
|
|
4c7cd17051 | ||
|
|
af2ce1bdc9 | ||
|
|
de85a30065 | ||
|
|
ae5ead3c75 | ||
|
|
e20d2f4076 | ||
|
|
30a6ee9528 | ||
|
|
6332e96b4e | ||
|
|
4cf63fbd33 | ||
|
|
d32ec1004f | ||
|
|
74940a3e31 | ||
|
|
3de413cf71 | ||
|
|
37443c9fdc | ||
|
|
65666d619d | ||
|
|
3d85acaf68 | ||
|
|
b4287801a2 | ||
|
|
a51553fa1f | ||
|
|
e76f1a003d | ||
|
|
b31d88507e | ||
|
|
d8ae4a3ad4 | ||
|
|
cb0f79cd2f | ||
|
|
1b64cfbad6 | ||
|
|
0d7d299b7d | ||
|
|
9051b5d836 | ||
|
|
3d95d83d9a | ||
|
|
f7e8497879 | ||
|
|
d61dea4b92 | ||
|
|
9cf4a7a9fa | ||
|
|
488be6185e | ||
|
|
0649c0c58f | ||
|
|
24f30ca5e5 | ||
|
|
eeb639d2b7 | ||
|
|
abb8294bb0 | ||
|
|
237e562a4f | ||
|
|
e89185c654 | ||
|
|
a34272256a | ||
|
|
e853df7781 | ||
|
|
3517cfb869 | ||
|
|
4886c3ef4c | ||
|
|
51f8ea0ca4 | ||
|
|
7daa941ffe | ||
|
|
5ed097ee0b | ||
|
|
4e069c1e75 | ||
|
|
17ba10e2f2 | ||
|
|
dacf6a38ab | ||
|
|
a4aa8bcc6d | ||
|
|
5c8700257b | ||
|
|
862b45a512 | ||
|
|
db20dd0ec7 | ||
|
|
8932314853 | ||
|
|
8e0e5bba19 | ||
|
|
3da2c1c79a | ||
|
|
39e8874b87 | ||
|
|
d320702470 | ||
|
|
110bba7c32 | ||
|
|
c653207daf | ||
|
|
f1b4d779cb | ||
|
|
0ead8d41e1 | ||
|
|
088e42a88a | ||
|
|
12d2f42e41 | ||
|
|
9c65f61db4 | ||
|
|
225062cefe | ||
|
|
a6196c182d | ||
|
|
1342182d7c | ||
|
|
163af20d29 | ||
|
|
d376bc0553 | ||
|
|
802d04e1eb | ||
|
|
99b03ae5be | ||
|
|
9a3c13da77 | ||
|
|
d012c4fe7a | ||
|
|
75d20b1234 | ||
|
|
96fb8a21e6 | ||
|
|
39787af90b | ||
|
|
07a8ed0dc2 | ||
|
|
ee3941f16c | ||
|
|
ffe89f8265 | ||
|
|
2a0562188a | ||
|
|
ea860e20a6 | ||
|
|
87686c1d36 | ||
|
|
e7ee8d2317 | ||
|
|
b21c6bce9f | ||
|
|
679e0bbd00 | ||
|
|
58a73b3b53 | ||
|
|
769c999c98 | ||
|
|
e0e53aa517 | ||
|
|
3a59e60373 | ||
|
|
78b4b9c938 | ||
|
|
ea166af67b | ||
|
|
5baddc9946 | ||
|
|
7357694211 | ||
|
|
1dd2d0c1e4 | ||
|
|
5e5d46ee4e | ||
|
|
91782898fc | ||
|
|
58d41eda8b | ||
|
|
c017102cc9 | ||
|
|
2f757f9bfd | ||
|
|
e9c759df15 | ||
|
|
111eab727e | ||
|
|
1f39d5e938 | ||
|
|
9bf908bdfb | ||
|
|
cba5100d17 | ||
|
|
d9b3a029c3 | ||
|
|
58ede7e85e | ||
|
|
432e60f9cc |
5
.gitignore
vendored
@@ -1,3 +1,6 @@
|
||||
*.pyc
|
||||
*.DS_Store
|
||||
/images
|
||||
/images
|
||||
node_modules/
|
||||
_book/
|
||||
package-lock.json
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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).**
|
||||
|
||||
[](https://travis-ci.org/urpylka/clever)
|
||||
[](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
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
22
book.json
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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/'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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 -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
@@ -0,0 +1,4 @@
|
||||
# Languages
|
||||
|
||||
* [Русский](ru/)
|
||||
* [English](en/)
|
||||
@@ -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)
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
# Инструкция по сборке конструктора Клевер 3
|
||||
|
||||
В данной инструкции рассматривается сборка комплекта COEX Clever 3 с платой регуляторов 4в1
|
||||
|
||||

|
||||
|
||||
## Состав конструктора
|
||||
|
||||
TODO
|
||||
|
||||
## Дополнительное оборудование
|
||||
|
||||

|
||||
|
||||
## Условное обозначение
|
||||
|
||||

|
||||
|
||||
## Техника безопасности при пайке
|
||||
|
||||
Перед использованием паяльного оборудования обязательно ознакомьтесь с техникой безопасности
|
||||
[Техника безопасности при пайке](tb.md)
|
||||
|
||||
## Установка моторов
|
||||
|
||||
1. Распаковать моторы
|
||||
2. Закрепить мотор на луче шестигранными винтами М3х6 (самые короткие винты в комплекте с моторами). *Шестигранный ключ в комплекте.
|
||||
3. Вставить гайки М3 (4 шт) в пластиковый держатель.
|
||||
> Для удобства можно использовать длинный винт, либо плоскогубцы
|
||||
4. Закрепить луч, нижнюю защиту луча и держатель винтами М3х12, используя крестовую отвертку.
|
||||
5. Скрепить хомутом луч и нижнюю защиту луча.
|
||||
> Хвост от хомута (стяжки) отрезать ножницами 
|
||||
|
||||
## Монтаж каркасных элементов
|
||||
|
||||
1. Установить пластиковые гайки М3 (4 шт) для крепления PDB на раму винтами М3х8
|
||||
2. Установить стойки 6 мм (4 шт) для крепления Raspberry Pi на раму винтами М3х8
|
||||
3. Установить на раму собранную конструкцию, соблюдая схему, винтами М3х16
|
||||
4. Установить каркас для светодиодной ленты, используя прорези в держателях для ножек
|
||||
|
||||

|
||||
|
||||
## Монтаж преобразователя напряжения 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
|
||||
|
||||

|
||||
|
||||
## Монтаж платы регуляторов 4в1 и платы питания PDB
|
||||
|
||||
1. Установить плату регуляторов 4в1 как показано на картинке. Соединить фазные провода моторов с проводами регуляторов.
|
||||
2. Закрепить плату регуляторов стойками 6 мм (4 шт.). На стойки накрутить пластиковые гайки М3 (4 шт.).
|
||||
3. Установить плату распределения питания PDB как показано на картинке (разъем XT60 направлен к хвосту коптера).
|
||||
4. Соединить разъемы питания платы питания и платы регуляторов XT30.
|
||||
|
||||

|
||||
|
||||
## Сопряжение приемника и пульта
|
||||
|
||||
1. Подключаем провод 5В от BEC в разъем приемника. Устанавливаем BIND разъем в крайний правый порт B/VCC
|
||||
2. Подключаем АКБ. Индикатор на приемники должен быстро мигать (режим сброса).
|
||||
3. Зажимаем и удерживаем кнопку BIND на пульте и включаем пульт. На пульте отображается процесс сопряжения RXBinding.
|
||||
4. После установки сопряжения (появление доп строк на дисплее пульта), убираем BIND разъем из приемника. Отключаем АКБ.
|
||||
|
||||

|
||||
|
||||
> Если пульт не включается или заблокирован, то смотри здесь
|
||||
[Неисправности пульта](radioerrors1.md)
|
||||
|
||||
## Проверка направления вращения моторов
|
||||
|
||||
1. Включить пульт. Убедиться, что ppm в меню RX Setup отключен ([раздел "Нет связи с полетным контроллером"](radioerrors1.md) в пункте 3 выберите “RX setup” > “PPM OUTPUT” > “Off”. Сохраните изменения (удерживаем нажатой кнопку “CANCEL”)
|
||||
2. Подключите оранжевый провод S1 от платы регуляторов в CH3 на приемнике. Подключить внешнее питание.
|
||||
3. Подать левым стиком газ (throttle) на 10%.
|
||||
4. Проверить направления вращения мотора по схеме.Повторить для каждого мотора. Таким образом, будет понятно каким именно мотором мы управляем
|
||||
5. Если необходимо изменить направление вращения, то меняем любые два фазных провода мотора (нужно переподключить).
|
||||
|
||||

|
||||
|
||||
## Монтаж и подключение полетного контроллера PixRacer
|
||||
|
||||
1. Установить Полетный контроллер PixRacer на двухстороний скотч 3М (2-3 слоя). *также полетный контроллер можно извлечь из корпуса и жестко установить на стойки М3х6
|
||||
|
||||
2. Установить стойки 40 мм, используя винты М3х8. Подключить разъем POWER
|
||||
|
||||
3. Подключить регуляторы, как на картинке. Подробно [про подключение регуляторов 4в1](cl3_connectESC4in1.md)
|
||||
4. Подключить шлейф радиоприемника в разъем RCIN в PixRacer 
|
||||
|
||||
## Монтаж 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. 
|
||||
|
||||
## Монтаж Arduino и радиоприемника FlySky
|
||||
|
||||
1. Произведите монтаж пинов микроконтроллера Arduino Nano, используя пайку
|
||||
2. Установить миконтроллер в специальной маунт и прикрепите к нижней деке, используя винты М3х16 (4 шт.)
|
||||
3. Используя 2хсторонний скотч прикрепите приемник, как показано на рисунке
|
||||
4. Подключите шлейф радиоприемника от PixRacer как на рисунке:
|
||||
* белый -> PPM
|
||||
* красный -> 5V
|
||||
* черный -> GND
|
||||
* оранжевый, зеленый -> сейчас не используются. Устанавливаются в неиспользуемые пины радиоприемника. 
|
||||
|
||||
## Монтаж камеры Raspberry Pi
|
||||
|
||||
1. Установить маунт для камеры Raspberry Pi в сборе на нижнюю деку винтами М3х12 (2 шт.)
|
||||
2. Подключить шлейф к камере Raspberry Pi
|
||||
3. Установить камеру в маунт, закрепить саморезами М2
|
||||
4. Закрепить Raspberry стойками 30 мм (4 шт.). Установить нижнюю деку в сборе на стойки винтами М3х8 (4шт.).
|
||||
5. Установить ножки в маунты (4 шт.) .
|
||||
|
||||
## Монтаж остальных конструктивных элементов
|
||||
|
||||
1. Установка нижней защиты, используя винты М3х12 (8 шт.) и стойки 30 мм (8 шт.)
|
||||
2. Установка верхней защиты, используя винты М3х12 (8 шт.)
|
||||
3. Установка ремешка верхнюю деку для фиксации АКБ. Закрепить верхнюю деку винтами М3х8 (4 шт.). 
|
||||
|
||||
## Монтаж USB соединителей
|
||||
|
||||
1. Соедините PixRacer и Raspberry Pi, используя micro USB - USB кабель
|
||||
2. Соедините Arduino и Raspberry Pi, используя micro USB - USB кабель. 
|
||||
BIN
docs/assets/alcopter.jpg
Normal file
|
After Width: | Height: | Size: 456 KiB |
|
Before Width: | Height: | Size: 751 KiB After Width: | Height: | Size: 230 KiB |
BIN
docs/assets/brrc2205on.jpg
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
docs/assets/brrc2205ondeck.jpg
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
docs/assets/butterfly.png
Normal file
|
After Width: | Height: | Size: 695 KiB |
BIN
docs/assets/camera_option_1_clever.jpg
Normal file
|
After Width: | Height: | Size: 419 KiB |
BIN
docs/assets/camera_option_1_rviz.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
docs/assets/camera_option_2_clever.jpg
Normal file
|
After Width: | Height: | Size: 423 KiB |
BIN
docs/assets/camera_option_2_rviz.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
docs/assets/camera_option_3_clever.jpg
Normal file
|
After Width: | Height: | Size: 379 KiB |
BIN
docs/assets/camera_option_3_rviz.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
docs/assets/camera_option_4_clever.jpg
Normal file
|
After Width: | Height: | Size: 378 KiB |
BIN
docs/assets/camera_option_4_rviz.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
docs/assets/casebattery.jpg
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
docs/assets/cl3_connectionESC4in1.jpg
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
docs/assets/clever2.jpg
Normal file
|
After Width: | Height: | Size: 208 KiB |
BIN
docs/assets/commander-check.png
Normal file
|
After Width: | Height: | Size: 530 KiB |
BIN
docs/assets/connectingRadio.jpg
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
docs/assets/copter_visualization.png
Executable file
|
After Width: | Height: | Size: 448 KiB |
BIN
docs/assets/copterhack18.jpg
Normal file
|
After Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 126 KiB |
BIN
docs/assets/etcher.gif
Normal file
|
After Width: | Height: | Size: 238 KiB |
BIN
docs/assets/explosion.jpg
Normal file
|
After Width: | Height: | Size: 283 KiB |
BIN
docs/assets/fpv_1.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
docs/assets/fpv_2.png
Normal file
|
After Width: | Height: | Size: 308 KiB |
BIN
docs/assets/fpv_3.png
Normal file
|
After Width: | Height: | Size: 908 KiB |
BIN
docs/assets/fpv_4.png
Normal file
|
After Width: | Height: | Size: 670 KiB |
BIN
docs/assets/fpv_5.png
Normal file
|
After Width: | Height: | Size: 451 KiB |
BIN
docs/assets/github-edit.png
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
docs/assets/hc-sr04-scheme.png
Normal file
|
After Width: | Height: | Size: 327 KiB |
BIN
docs/assets/hc-sr04.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
docs/assets/image.png
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
docs/assets/isoViewmountHolder.jpg
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
docs/assets/mount5vconnector.jpg
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
docs/assets/mountAntenna.jpg
Normal file
|
After Width: | Height: | Size: 174 KiB |
BIN
docs/assets/mountBottomDeck.jpg
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
docs/assets/qgc-params.png
Normal file
|
After Width: | Height: | Size: 972 KiB |
BIN
docs/assets/raspberry3.jpg
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
docs/assets/rcw-0001.jpg
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
docs/assets/selfcheck.png
Normal file
|
After Width: | Height: | Size: 442 KiB |
BIN
docs/assets/soldering5VTOpdb.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 310 KiB After Width: | Height: | Size: 208 KiB |
BIN
docs/assets/solderingxt60socketTOpdb.jpg
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
docs/assets/sonar-filtered.png
Normal file
|
After Width: | Height: | Size: 223 KiB |
BIN
docs/assets/ssid.png
Normal file
|
After Width: | Height: | Size: 775 KiB |
BIN
docs/assets/testMotors.jpg
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
docs/assets/topviewpixhawk.jpg
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
docs/assets/web_video_server.png
Normal file
|
After Width: | Height: | Size: 216 KiB |
@@ -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
|
||||
@@ -1,2 +0,0 @@
|
||||
|
||||
|
||||
3
docs/en/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# CLEVER
|
||||
|
||||
This is CLEVER drone kit documentation in English.
|
||||
3
docs/en/SUMMARY.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Summary
|
||||
|
||||
* [UART settings](uart.md)
|
||||
4
docs/en/book.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"language": "en",
|
||||
"root": "."
|
||||
}
|
||||
86
docs/en/uart.md
Normal 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:
|
||||
|
||||

|
||||
|
||||
In case of Bluetooth disconnection
|
||||
|
||||
```txt
|
||||
/dev/serial0 -\> ttyAMA0
|
||||
/dev/serial1 -\> ttyS0
|
||||
```
|
||||
@@ -1,4 +0,0 @@
|
||||
Использование программы Etcher
|
||||
===
|
||||
|
||||
TODO
|
||||
@@ -1,2 +0,0 @@
|
||||
# Автоматический флип
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
Полезные ссылки
|
||||
===
|
||||
@@ -1,12 +0,0 @@
|
||||
Управление коптером в режиме OFFBOARD
|
||||
===
|
||||
|
||||
Координатные системы (фреймы)
|
||||
---
|
||||
|
||||
TODO
|
||||
|
||||
* `local_origin` — координаты точки инициализации полетного контроллера
|
||||
* `fcu` (flight control unit) — координаты квадрокоптера с учетом наклонов
|
||||
* `fcu_horiz` — координаты квадрокоптера без учета наклонов по тангажу и рысканью
|
||||
* `marker_map` — координаты поля ArUco-маркеров
|
||||
@@ -1,23 +0,0 @@
|
||||
Силовые и управляющие цепи
|
||||
===============================
|
||||
|
||||
Силовые цепи
|
||||
--------------------
|
||||
Из вырезки по ГОСТ 18311-80
|
||||
|
||||
"Электрическая цепь, содержащая элементы, функциональное назначение которых состоит в производстве или передаче основной части электрической энергии,
|
||||
ее распределении, преобразовании в другой вид энергии или в электрическую энергию с другими значениями параметров."
|
||||
|
||||
Говоря простым языком, силовые цепи - это электрические цепи, которые предназначены для передачи большого количества энергии (тока), для обеспечения работоспособности всех систем.
|
||||
В нашем случае в качестве силовой цепи будут выступать провода, соединяющие аккумулятор с платой распределения питания, а также красные и черные провода идущие на регуляторы оборотов.
|
||||
|
||||

|
||||
|
||||
Вся энергия аккумулятора (АКБ) будет распределяться между регуляторами оборотов моторов. Чтобы моторы смогли поднять в воздух коптер, им необходимо много энергии. В качестве энергии выступает ток, который приходит с АКБ. Т.к. энергии нужно много, значит по проводам будет идти большой ток. Чтобы провода смогли выдержать такую нагрузку, необходимы провода большего диаметра. Для наших задач подойдут провода 18AWG, 16AWG, 14AWG.
|
||||
|
||||
|
||||
|
||||
|
||||
Управляющие цепи
|
||||
--------------------
|
||||
|
||||
@@ -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) в центре.
|
||||
|
||||

|
||||
|
||||
|
||||
Нет связи с приемником
|
||||
--------------
|
||||
Для проверки соединения пульта с приемником, включаем пульт и смотрим индикацию на ЖК Экране:
|
||||
|
||||
1. Соединение с приемником отсутствует
|
||||
|
||||

|
||||
|
||||
2. Соединение с приемником установлено
|
||||
|
||||

|
||||
|
||||
Если соединение отсутствует, то
|
||||
1. Проверьте, что приемник включен (моргает красный светодиод)
|
||||
Если сетодиод горит непрерывно красным, то значит связь установлена с другим пультом.
|
||||
|
||||
2. Проведите процедуру сопряжения пульта и приемника ()
|
||||
|
||||
Нет связи с полетным контроллером
|
||||
--------------
|
||||
Если нет связи с полетным контроллером, то на экране монитора компьютера в окне Channel Monitor не будут отображаться изменения положения слайдеров при перемещении стиками пульта.
|
||||
|
||||

|
||||
|
||||
1. Зайдите в МЕНЮ (удерживаем нажатой кнопку “ОК”)
|
||||
2. Выберите меню “System setup” (Кнопки Up/Down - для навигации, кнопка “ОК” - подтверждение выбора
|
||||
3. Выберите “RX setup” > “PPM OUTPUT” > “On”
|
||||
4. Сохраните изменения (удерживаем нажатой кнопку “CANCEL”)
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -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
@@ -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.
|
||||
|
||||

|
||||
@@ -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
@@ -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)
|
||||
@@ -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;
|
||||
```
|
||||
```
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
Пример ArUco-маркеров:
|
||||
|
||||

|
||||

|
||||
|
||||
> **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):
|
||||
|
||||

|
||||

|
||||
|
||||
При полетах необходимо убедиться, что наклеенные на пол метки соответствуют карте.
|
||||
|
||||
@@ -104,14 +104,18 @@ _Примечание_: указанное выше определение пр
|
||||
|
||||
Таким образом, нулевой является левая нижня точка маркерного поля. Угол по рысканью считается равным 0, когда коптер смотрит направо \(по оси x\).
|
||||
|
||||

|
||||

|
||||
|
||||
### Настройка полетного контролера
|
||||
|
||||
Для правильной работы 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.
|
||||
|
||||

|
||||

|
||||
-->
|
||||
|
||||
### Полет
|
||||
|
||||
@@ -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** Образ версии >0.2.
|
||||
|
||||

|
||||

|
||||
|
||||
Для навигации по маркерам, расположенным на потолке, необходимо поставить основную камеру так, чтобы она смотрела вверх и [установить соответствующий фрейм камеры](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')
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
# Инструкция по сборке конструктора Клевер 2
|
||||
Инструкция по сборке конструктора Клевер 2
|
||||
============================================
|
||||
|
||||

|
||||

|
||||
|
||||
## Состав конструктора
|
||||
|
||||

|
||||

|
||||
|
||||
* Рама центральная 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).
|
||||
|
||||

|
||||

|
||||
|
||||
## Дополнительное оборудование
|
||||
|
||||
@@ -88,7 +89,7 @@
|
||||
7. Канцелярский нож
|
||||
8. Мультиметр
|
||||
|
||||

|
||||

|
||||
|
||||
[Техника безопасности при пайке](tb.md)
|
||||
|
||||
@@ -98,7 +99,7 @@
|
||||
|
||||
* Распаковать моторы. Используя плоскогубцы, укоротить провода на моторах, обрезать половину длины (оставив 25 мм).
|
||||
|
||||

|
||||

|
||||
|
||||
Зачистить
|
||||
|
||||
@@ -111,18 +112,18 @@
|
||||
* Нанести флюс на оголенную часть провода.
|
||||
* Покрыть припоем, используя пинцет.
|
||||
|
||||

|
||||

|
||||
|
||||
#### Закрепить мотор на луче
|
||||
|
||||
* Установить мотор на сторону луча с гравировкой.
|
||||
* Прикрепить моторы к лучам винтами М3х8, используя отвертку.
|
||||
|
||||

|
||||

|
||||
|
||||
* Лучи с моторами необходимо расположить согласно схеме. Стрелками указано направление вращения моторов.
|
||||
|
||||

|
||||

|
||||
|
||||
### Залудить три контактные площадки регулятора
|
||||
|
||||
@@ -131,7 +132,7 @@
|
||||
|
||||
Чтобы припой аккуратно заполнил всю площадку, необходимо прогреть площадку регулятора. Для этого нужно удерживать жало паяльника на контактной плащадке в течение 2 сек (или больше, если потребуется)
|
||||
|
||||

|
||||

|
||||
|
||||
* Повторить данную операцию для оставшихся трех регуляторов
|
||||
|
||||
@@ -139,14 +140,12 @@
|
||||
|
||||
Припаять ранее приготовленные провода моторов к контактным площадкам регуляторов.
|
||||
|
||||

|
||||

|
||||
|
||||
* Повторить данную операцию для оставшихся трех регуляторов
|
||||
|
||||
### Монтаж разъемов питания
|
||||
|
||||
[Статья про силовые и управляющие цепи](powerConnection.md)
|
||||
|
||||
#### Подготовка проводов для силовых разъемов XT60
|
||||
|
||||
1. Взять моток красных и черных проводов, промаркированных как 14AWG
|
||||
@@ -154,13 +153,13 @@
|
||||
* Длина 7 см (Для силового разъема XT60 pin) - 1 красный, 1 черный
|
||||
* Длина 9 см (Для силового разъема XT60 socket) - 1 красный, 1 черный
|
||||
|
||||

|
||||

|
||||
|
||||
#### Подготовка силовых разъемов питания XT60 pin и XT60 socket
|
||||
|
||||
[Статья про силовые разъемы и их обозначения](connectortypes.md)
|
||||
|
||||

|
||||

|
||||
|
||||
1. Под разъем XT60 pin залудить два силовых провода красный и чёрный 14AWG длиной 7 см.
|
||||
2. Залудить контактные площадки разъема XT60 pin.
|
||||
@@ -168,7 +167,7 @@
|
||||
4. Припаять красный провод к “+” контакту разъема .
|
||||
5. Нарезать термоусадку ф5 (2 отрезка по 10 мм).
|
||||
6. Надеть термоусадку ф5 на провода так, чтобы она закрывала контактные площадки проводов с XT60 .
|
||||
7. Усадить термоусадку феном. 
|
||||
7. Усадить термоусадку феном. 
|
||||
8. Повторить процедуру для разъема XT60 socket.
|
||||
|
||||
#### Подготовка разъема питания управляющей цепи 5В
|
||||
@@ -178,15 +177,15 @@
|
||||
3. Убрать 3-й (оранжевый) провод из разъема, за ненадобностью.
|
||||
4. Длина оставшихся черного и красного проводов 10-12 см.
|
||||
|
||||
 *было бы круто, если делать такие картинки и в формате гифки
|
||||

|
||||
|
||||
### Монтаж платы распределения питания
|
||||
|
||||
#### Предпаячная проверка
|
||||
|
||||
[Статья про прозвонку](testConnection.md)
|
||||
[Статья про прозвонку](test_connection.md)
|
||||
|
||||

|
||||

|
||||
|
||||
Прозвонить следующие цепи на НЕЗАМКНУТОСТЬ (отсутствие звукового сигнала мультиметра):
|
||||
|
||||
@@ -204,7 +203,7 @@
|
||||
1. [Залудить*](zap.md) контактные площадки платы питания.
|
||||
2. С помощью мультиметра проверить отсутствие контактного замыкания на плате (прозвонить)
|
||||
|
||||

|
||||

|
||||
|
||||
Чтобы припой аккуратно заполнил всю площадку, необходимо её прогреть. Для этого нужно удерживать жало паяльника на контактной плащадке в течение 2 сек (или больше, если потребуется)
|
||||
|
||||
@@ -212,7 +211,7 @@
|
||||
|
||||
Припаять разъем для АКБ, соблюдая полярность на контактных площадках.
|
||||
|
||||

|
||||

|
||||
|
||||
ВАЖНО о полярности
|
||||
|
||||
@@ -224,13 +223,13 @@
|
||||
Припаять разъем 5В, соблюдая полярность на контактных площадках.
|
||||
(на изображении: красный провод - это питание “+”)
|
||||
|
||||

|
||||

|
||||
|
||||
### Монтаж отсека АКБ
|
||||
|
||||
#### Подготовка перемычек (3 шт.)
|
||||
|
||||

|
||||

|
||||
|
||||
* Отрезать силовой провод длиной 2 см.
|
||||
* Зачистить с обеих сторон.
|
||||
@@ -241,31 +240,31 @@
|
||||
|
||||
#### Подготовка отсека АКБ
|
||||
|
||||

|
||||

|
||||
|
||||
* Приклеить наклейки с разметкой внутрь отсека АКБ, в соответствии с полярностью.
|
||||
* Приклеить ленту из скотча на дно отсека.
|
||||
|
||||
### Монтаж платы распределения питания
|
||||
|
||||
* Установить плату питания на раму винтами М3х8 и пластиковыми гайками. 
|
||||
* Установить плату питания на раму винтами М3х8 и пластиковыми гайками. 
|
||||
> **ВАЖНО** Стрелочка на плате направлена в сторону носового выреза
|
||||

|
||||

|
||||
|
||||
#### Монтаж элементов
|
||||
|
||||
1. Установить гайки в пластиковые держатели. 
|
||||
1. Установить гайки в пластиковые держатели. 
|
||||
2. Установить лучи на раму винтами М3х16
|
||||
* Лучи устанавливаются поверх рамы
|
||||
* Пластиковые держатели устанавливаются снизу рамы. 
|
||||
3. Расположение моторов. Проверить расположение моторов (моторы с черной гайкой в левом верхнем углу и в правом нижнем). 
|
||||
4. Продеть силовые провода регуляторов в отверстия. 
|
||||
* Пластиковые держатели устанавливаются снизу рамы. 
|
||||
3. Расположение моторов. Проверить расположение моторов (моторы с черной гайкой в левом верхнем углу и в правом нижнем). 
|
||||
4. Продеть силовые провода регуляторов в отверстия. 
|
||||
|
||||
#### Пайка силовой цепи платы питания
|
||||
|
||||
Припаять силовые провода регуляторов к плате питания, соблюдая полярность.
|
||||
|
||||

|
||||

|
||||
|
||||
ВАЖНО о полярности
|
||||
|
||||
@@ -274,12 +273,12 @@
|
||||
|
||||
### Сопряжение приемника и пульта
|
||||
|
||||
1. Подключить радиоприемник к разъему 5В. В любой разъем, GND внизу. На схеме питание обозначено как 5V 
|
||||
1. Подключить радиоприемник к разъему 5В. В любой разъем, GND внизу. На схеме питание обозначено как 5V 
|
||||
2. Подключить АКБ. Светодиод на радиоприемнике должен мигать. ![Подключение АКБ]
|
||||
|
||||
#### БЕЗОПАСНОСТЬ при работе с АКБ
|
||||
|
||||

|
||||

|
||||
|
||||
#### Включение радиопульта
|
||||
|
||||
@@ -291,45 +290,45 @@
|
||||
6. Отсоединить джампер.
|
||||
7. Светодиод горит непрерывно.
|
||||
|
||||

|
||||

|
||||
|
||||
[Мануал по неисправностям радиоаппаратуры](radioerrors1.md)
|
||||
[Мануал по неисправностям радиоаппаратуры](radioerrors.md)
|
||||
|
||||
### Проверка направления вращения моторов
|
||||
|
||||
1. Наклеить наклейки на АКБ 18650.
|
||||
2. Установить 18650 в отсек АКБ, соблюдая полярность. 
|
||||
2. Установить 18650 в отсек АКБ, соблюдая полярность. 
|
||||
3. Проверить, что разъем питания 5В подключен к приемнику по схеме.
|
||||
4. Подключить регулятор мотора к 3 каналу приемника CH3 по схеме. 
|
||||
4. Подключить регулятор мотора к 3 каналу приемника CH3 по схеме. 
|
||||
5. Подключить внешнее питание (АКБ).
|
||||
6. Включить пульт.
|
||||
7. Подать левым стиком газ (throttle) на 10%.
|
||||
8. Проверить направления вращения мотора по схеме. 
|
||||
9. Если необходимо изменить направление вращения, то меняем любые два фазных провода мотора (нужно перепаять). 
|
||||
8. Проверить направления вращения мотора по схеме. 
|
||||
9. Если необходимо изменить направление вращения, то меняем любые два фазных провода мотора (нужно перепаять). 
|
||||
|
||||
### Монтаж радиоприемника
|
||||
|
||||
1. Установить пластиковые стойки 30 мм на раму винтами М3х8.
|
||||
2. Разъем питания 5В продеть в прорезь. 
|
||||
3. Приемник прикрепить к нижней дополнительной раме, используя двухсторонний скотч и ориентируясь на гравировку. Антенны направлены вперед. 
|
||||
4. Установить 3х проводной шлейф в канал PPM / CH1. 
|
||||
2. Разъем питания 5В продеть в прорезь. 
|
||||
3. Приемник прикрепить к нижней дополнительной раме, используя двухсторонний скотч и ориентируясь на гравировку. Антенны направлены вперед. 
|
||||
4. Установить 3х проводной шлейф в канал PPM / CH1. 
|
||||
5. Продеть в прорезь к разъему 5 В.
|
||||
6. Прикрутить нижнюю дополнительную раму к стойкам на центральной раме винтами М3х8. 
|
||||
6. Прикрутить нижнюю дополнительную раму к стойкам на центральной раме винтами М3х8. 
|
||||
> **ВАЖНО** Направление стрелок на плате питания и на дополнительной раме совпадают
|
||||
|
||||
### Монтаж полетного контроллера
|
||||
|
||||
#### Переворачиваем сборку
|
||||
|
||||

|
||||

|
||||
|
||||
#### Установка полетного контроллера PixHawk
|
||||
#### Установка полетного контроллера Pixhawk
|
||||
|
||||
1. Клеим 2х сторонний скотч по углам полетного контроллера. 
|
||||
> **ВАЖНО** При работе моторов возникают вибрации, отрицательно влияющие на показания датчиков полетного контроллера PixHawk. Чтобы избежать этого эффекта, количество слоев двустороннего скотча
|
||||
1. Клеим 2х сторонний скотч по углам полетного контроллера. 
|
||||
> **ВАЖНО** При работе моторов возникают вибрации, отрицательно влияющие на показания датчиков полетного контроллера Pixhawk. Чтобы избежать этого эффекта, количество слоев двустороннего скотча
|
||||
лучше увеличить до 4-5.
|
||||
2. Установить полетный контроллер в центр рамы. 
|
||||
> **ВАЖНО** Стрелки на раме и PixHawk должны быть сонаправлены
|
||||
2. Установить полетный контроллер в центр рамы. 
|
||||
> **ВАЖНО** Стрелки на раме и Pixhawk должны быть сонаправлены
|
||||
|
||||
#### Подключение полетного контроллера по схеме
|
||||
|
||||
@@ -337,19 +336,19 @@
|
||||
2. Моторы к 1,2,3,4 портам MAIN OUT, согласно схеме
|
||||
3. Питание от PDB (5В/VCC) в любой порт, кроме SB (SBUS)
|
||||
|
||||

|
||||

|
||||
|
||||
### Сборка регуляторов
|
||||
|
||||
1. Клеим 2х сторонний скотч на основание защитного бокса регуляторов. 
|
||||
2. Укладываем регуляторы в защитные боксы. Крепим полученную сборку к лучам рамы. 
|
||||
1. Клеим 2х сторонний скотч на основание защитного бокса регуляторов. 
|
||||
2. Укладываем регуляторы в защитные боксы. Крепим полученную сборку к лучам рамы. 
|
||||
|
||||
### Установка защиты
|
||||
|
||||
1. Закрепить нижнюю защиту винтами М3х16 на лучах рамы. 
|
||||
2. Закрепить ножки к пластиковым держателям винтами М3х16. 
|
||||
3. Закрепить стойки 30 мм в отверстия нижней защиты винтами М3х12. 
|
||||
4. Закрепить верхнюю защиту винтами М3х12. 
|
||||
1. Закрепить нижнюю защиту винтами М3х16 на лучах рамы. 
|
||||
2. Закрепить ножки к пластиковым держателям винтами М3х16. 
|
||||
3. Закрепить стойки 30 мм в отверстия нижней защиты винтами М3х12. 
|
||||
4. Закрепить верхнюю защиту винтами М3х12. 
|
||||
|
||||
### Монтаж отсека АКБ
|
||||
|
||||
@@ -360,15 +359,15 @@
|
||||
* Рама дополнительная (1 шт)
|
||||
* Батарейный отсек (1 шт)
|
||||
|
||||
1. Прикрепить батарейный отсек на верхнюю дополнительную раму винтами М3х12 и гайками. 
|
||||
2. Прикрепить верхнюю дополнительную раму на стойки винтами М3х8. 
|
||||
1. Прикрепить батарейный отсек на верхнюю дополнительную раму винтами М3х12 и гайками. 
|
||||
2. Прикрепить верхнюю дополнительную раму на стойки винтами М3х8. 
|
||||
3. Установить АКБ в отсек.
|
||||
|
||||
### Монтаж антенн
|
||||
|
||||
1. Крепим антенны на 2х сторонний скотч или изоленту, а усики продеваем в передние отверстия верхней дополнительной рамы.
|
||||
|
||||

|
||||

|
||||
|
||||
Коптер готов к настройке!
|
||||
|
||||
@@ -378,7 +377,7 @@
|
||||
2. Отключить аккумулятор. Держать питание выключенным. “Сборку, настройку и ремонт производить с отключенным питанием. Подключать питание только для тестирования электронных компонентов коптера. После тестирования перед другими работами питание сразу отключить.”
|
||||
3. Позвать на помощь. “Если при выполнении работ возникли какие-либо проблемы, необходимо обратиться к преподавателю или учителю, а не пытаться решить проблему самостоятельно.”
|
||||
|
||||

|
||||

|
||||
|
||||
## Безопасность при работе с Li-ion аккумуляторами 18650
|
||||
|
||||
@@ -386,4 +385,4 @@
|
||||
2. При подключении (отключении) аккумуляторов держаться только за разъёмы, тянуть или дергать за провода запрещается.
|
||||
3. В случае обрыва разъемов, обнаружения нарушений целостности изоляции или корпуса аккумулятора, не трогая его, немедленно сообщить преподавателю.
|
||||
|
||||
[ТЕХНИКА БЕЗОПАСНОСТИ ПРИ ПАЙКЕ И ЛЁТНОЙ ЭКСПЛУАТАЦИИ КОПТЕРОВ](safety.md)
|
||||
См. статью [техника безопасности при пайке и лётной эксплуатации коптеров](safety.md).
|
||||
235
docs/ru/assemble_3.md
Normal file
@@ -0,0 +1,235 @@
|
||||
# Сборка Клевера 3
|
||||
|
||||
В данной инструкции рассматривается сборка комплекта COEX Clever 3 с платой регуляторов 4в1.
|
||||
|
||||

|
||||
|
||||
> **Caution** Перед использованием паяльного оборудования обязательно ознакомьтесь с [техникой безопасности при пайке](tb.md).
|
||||
|
||||
<!--
|
||||
## Состав конструктора
|
||||
|
||||
TODO
|
||||
-->
|
||||
|
||||
## Дополнительное оборудование
|
||||
|
||||

|
||||
|
||||
## Условные обозначения
|
||||
|
||||

|
||||
|
||||
## Установка моторов
|
||||
|
||||
1. Распаковать моторы.
|
||||
2. Закрепить мотор на луче шестигранными винтами М3х6 (самые короткие винты в комплекте с моторами).
|
||||
|
||||
Шестигранный ключ в комплекте.
|
||||
|
||||
3. Вставить гайки М3 (4 шт) в пластиковый держатель.
|
||||
|
||||
Для удобства можно использовать длинный винт, либо плоскогубцы
|
||||
|
||||
4. Закрепить луч, нижнюю защиту луча и держатель винтами М3х12, используя крестовую отвертку.
|
||||
5. Скрепить хомутом луч и нижнюю защиту луча.
|
||||
|
||||
Хвост от хомута (стяжки) отрезать ножницами.
|
||||
|
||||

|
||||
|
||||
## Монтаж каркасных элементов
|
||||
|
||||
1. Установить пластиковые гайки М3 (4 шт) для крепления PDB на раму винтами М3х8.
|
||||
2. Установить стойки 6 мм (4 шт) для крепления Raspberry Pi на раму винтами М3х8.
|
||||
3. Установить на раму собранную конструкцию, соблюдая схему, винтами М3х16.
|
||||
4. Установить каркас для светодиодной ленты, используя прорези в держателях для ножек.
|
||||
|
||||

|
||||
|
||||
## Монтаж преобразователя напряжения 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
|
||||
|
||||

|
||||
|
||||
## Монтаж платы регуляторов 4в1 и платы питания PDB
|
||||
|
||||
1. Установить плату регуляторов 4в1, как показано на картинке.
|
||||
|
||||
Соединить фазные провода моторов с проводами регуляторов.
|
||||
|
||||
2. Закрепить плату регуляторов стойками 6 мм (4 шт.).
|
||||
|
||||
На стойки накрутить пластиковые гайки М3 (4 шт.).
|
||||
|
||||
3. Установить плату распределения питания PDB, как показано на картинке (разъем XT60 направлен к хвосту коптера).
|
||||
4. Соединить разъемы питания платы питания и платы регуляторов XT30.
|
||||
|
||||

|
||||
|
||||
## Сопряжение приемника и пульта
|
||||
|
||||
1. Подключить провод 5В от BEC в разъем приемника.
|
||||
|
||||
Установить BIND разъем в крайний правый порт B/VCC.
|
||||
|
||||
2. Подключить АКБ. Индикатор на приемники должен быстро мигать (режим сброса).
|
||||
3. Зажать и удерживать кнопку BIND на пульте и включаем пульт.
|
||||
|
||||
На пульте отображается процесс сопряжения RXBinding
|
||||
|
||||
4. После установки сопряжения (появление допю строк на дисплее пульта):
|
||||
* Убрать BIND разъем из приемника.
|
||||
* Отключить АКБ.
|
||||
|
||||

|
||||
|
||||
> **Hint** Если пульт не включается или заблокирован, см.
|
||||
статью [неисправности пульта](radioerrors.md).
|
||||
|
||||
## Проверка направления вращения моторов
|
||||
|
||||
1. Включить пульт.
|
||||
|
||||
Убедиться, что ppm в меню RX Setup отключен ([раздел "Нет связи с полетным контроллером"](radioerrors.md))
|
||||
|
||||
В пункте 3 выберите “RX setup” > “PPM OUTPUT” > “Off”.
|
||||
|
||||
Сохраните изменения (удерживаем нажатой кнопку “CANCEL”).
|
||||
|
||||
2. Подключить оранжевый провод S1 от платы регуляторов в CH3 на приемнике. Подключить внешнее питание.
|
||||
3. Подать левым стиком газ (throttle) на 10%.
|
||||
4. Проверить направления вращения мотора по схеме.Повторить для каждого мотора. Таким образом, будет понятно каким именно мотором мы управляем.
|
||||
5. Если необходимо изменить направление вращения, то меняем любые два фазных провода мотора (нужно переподключить).
|
||||
|
||||

|
||||
|
||||
## Монтаж и подключение полетного контроллера Pixracer
|
||||
|
||||
1. Установить Полетный контроллер Pixracer на двухстороний скотч 3М (2-3 слоя).
|
||||
Также полетный контроллер можно извлечь из корпуса и жестко установить на стойке М3х6.
|
||||
|
||||
2. Установить стойки 40 мм, используя винты М3х87.
|
||||
|
||||
Подключить разъем POWER.
|
||||
|
||||
3. Подключить регуляторы, как на картинке.
|
||||
|
||||
Подробно [про подключение регуляторов 4в1](4in1.md).
|
||||
|
||||
4. Подключить шлейф радиоприемника в разъем RCIN в Pixracer.
|
||||
|
||||

|
||||
|
||||
## Монтаж 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
|
||||
|
||||

|
||||
|
||||
## Монтаж Arduino и радиоприемника FlySky
|
||||
|
||||
1. Произвести монтаж пинов микроконтроллера Arduino Nano, используя пайку.
|
||||
2. Установить миконтроллер в специальной маунт и прикрепите к нижней деке, используя винты М3х16 (4 шт.).
|
||||
3. Используя 2хсторонний скотч, прикрепить приемник, как показано на рисунке.
|
||||
4. Подключить шлейф радиоприемника от Pixracer как на рисунке.
|
||||
|
||||
белый -> PPM
|
||||
красный -> 5V
|
||||
черный -> GND
|
||||
оранжевый, зеленый -> сейчас не используются. Устанавливаются в неиспользуемые пины радиоприемника
|
||||
|
||||

|
||||
|
||||
## Монтаж камеры RPi
|
||||
|
||||
1. Установить маунт для камеры Rpi в сборе на нижнюю деку винтами М3х12 (2 шт.).
|
||||
2. Подключить шлейф к камере RPi.
|
||||
3. Установить камеру в маунт, закрепить саморезами М2.
|
||||
4. Закрепить Raspberry стойками 30 мм (4 шт.).
|
||||
|
||||
Установить нижнюю деку в сборе на стойки винтами М3х8 (4шт.)
|
||||
|
||||
5. Установить ножки в маунты (4 шт.).
|
||||
|
||||

|
||||
|
||||
## Монтаж остальных конструктивных элементов
|
||||
|
||||
1. Установить нижней защиты, используя винты М3х12 (8 шт.) и стойки 30 мм (8 шт.).
|
||||
2. Установить верхней защиты, используя винты М3х12 (8 шт.).
|
||||
3. Установить ремешок в верхнюю деку для фиксации АКБ.
|
||||
|
||||
Закрепить верхнюю деку винтами М3х8 (4 шт.)
|
||||
|
||||

|
||||
|
||||
## Монтаж USB соединителей
|
||||
|
||||
1. Соедините Pixracer и Raspberry, используя micro USB - USB кабель.
|
||||
2. Соедините Arduino и Raspberry, используя micro USB - USB кабель.
|
||||
|
||||
.
|
||||
|
||||
Подробнее про подключение см. [статью](connection.md).
|
||||
@@ -1,4 +1,4 @@
|
||||
Автозапускаемое ПО
|
||||
Автозапуск ПО
|
||||
===
|
||||
|
||||
systemd
|
||||
4
docs/ru/book.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"language": "ru",
|
||||
"root": "."
|
||||
}
|
||||
@@ -1,17 +1,16 @@
|
||||
### Как настраивать PID
|
||||
# Настройка коэффициентов PID
|
||||
|
||||
На практике самая распространенная проблема это быстрые осцилляции, возникающие из-за слишком большого значения параметра P. В данной ситуации следует уменьшить его значение (все параметры выставляются экспериментальным путем, исходя из поведения аппарата).
|
||||
|
||||
На практике самая распространенная проблема это быстрые осцилляции, возникающие из-за слишком большого значения параметра P.
|
||||
В данной ситуации следует уменьшить его значение (все параметры выставляются экспериментальным путем, исходя из поведения аппарата).
|
||||
|
||||
Также стоит проверить чтобы осцилляций не было при резком спуске (в противном случае уменьшить P)
|
||||
Также стоит проверить чтобы осцилляций не было при резком спуске (в противном случае уменьшить P).
|
||||
Медленные раскачивания коптера из стороны в сторону при попытке удержания заданной точки связаны с перебором значения I.
|
||||
В случае если при движении коптер раскачивается следует поднять это значение
|
||||
В случае если коптер плохо держит заданное положение следует увеличить параметр D при переборе или недостатке параметра D возникают осцилляции
|
||||
В случае если при движении коптер раскачивается следует поднять это значение.
|
||||
В случае если коптер плохо держит заданное положение следует увеличить параметр D при переборе или недостатке параметра D возникают осцилляции.
|
||||
|
||||
#### ВАЖНО настройку D следует начинать с минимальных значений , в 3-4 раза меньше значений по умолчанию, если таковые присутствуют
|
||||
> **Note** Настройку D следует начинать с минимальных значений, в 3–4 раза меньше значений по умолчанию, если таковые присутствуют.
|
||||
|
||||
Параметры для Rate Pitch and Rate Roll должны быть одинаковыми
|
||||
По YAW параметры следует менять отдельно, согласно вышеуказанной инструкции (как правило рысканье не требует серьезной настройки, можно оставить по умолчанию)
|
||||
Параметры для Rate Pitch and Rate Roll должны быть одинаковыми.
|
||||
|
||||

|
||||
По YAW параметры следует менять отдельно, согласно вышеуказанной инструкции (как правило рысканье не требует серьезной настройки, можно оставить по умолчанию).
|
||||
|
||||

|
||||
@@ -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"/>
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
### 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, камера вверх
|
||||

|
||||

|
||||
|
||||
### 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"/>
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
### 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"/>
|
||||
```
|
||||

|
||||

|
||||
@@ -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
|
||||
---
|
||||
@@ -1,27 +1,28 @@
|
||||
Типы силовых разъемов
|
||||
=====================
|
||||
XT-60
|
||||
-----
|
||||
Один из самых надёжных силовых разъёмов, которые стараются применять на силовых аккумуляторах. Именно такие аккумуляторы используются на Li-Po аккумуляторах для коптеров.
|
||||
# Типы силовых разъемов
|
||||
|
||||

|
||||
## XT-60
|
||||
|
||||
T-plug
|
||||
------
|
||||
Аналог XT-60. Имеет различные вариации для упрозщения разъединения.
|
||||
Один из самых надёжных силовых разъёмов, которые стараются применять на силовых аккумуляторах. Именно такие аккумуляторы используются на Li-Po аккумуляторах для коптеров.
|
||||
|
||||

|
||||
<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 (пищалкой) для контроля заряда аккумулятора.
|
||||
|
||||

|
||||
<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 и моторах.
|
||||

|
||||
|
||||
<img src="../assets/Banana.jpg" alt="Banana" width=200>
|
||||
45
docs/ru/contributing.md
Normal 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 -->
|
||||
@@ -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
@@ -0,0 +1,37 @@
|
||||
# Copter Hack 2018
|
||||
|
||||
Хакатон [Copter Hack 2018](https://copterexpress.timepad.ru/event/768108/) прошел 19–21 октября в Технополисе "Москва".
|
||||
|
||||
<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>
|
||||
@@ -1,5 +1,5 @@
|
||||
В составе набора имеется 4 дополнительных рамы (поз. 2).
|
||||
Они абсолютно одинаковые.
|
||||
Они абсолютно одинаковые.
|
||||
Поэтому для дальнейшего удобства понимания инструкции условно разделим их на верхнюю и нижнюю дополнительные рамы
|
||||
|
||||

|
||||

|
||||
@@ -20,26 +20,26 @@
|
||||
|
||||
1. Запустите программу BLHeliSuite и выберите вкладку Make interfaces.
|
||||
|
||||

|
||||

|
||||
|
||||
2. Подключите Arduino к компьютеру, при необходимости посмотрите в диспетчере устройств номер COM порта, к которому подключена плата.
|
||||
|
||||
3. Нажмите Arduino 4way-interface в разделе Make Arduino Interface Boards и выберите файл прошивки. После выбора файла начнётся прошивка контроллера.
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
4. После прошивки Arduino вернитесь на вкладку Silabs ESC Setup и подключитесь к Arduino, предварительно выбрав интерфейс программатора 4way-if и COM порт Arduino.
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## Подключение ESC регуляторов к Arduino
|
||||
|
||||
Для прошивки или изменения настроек регуляторов необходимо подключить сигнальные порты (обычно белого цвета) ESC регуляторов к портам Arduino, предварительно посмотрев в мануале (см. рисунок ниже), какие порты используются для соединения с регуляторами. Так же нужно соединить GND Arduino с землёй одного из регуляторов (обычно черного цвета). Регуляторы должны быть подключены к питанию, а если к регуляторам подключены моторы, **на них не должно быть винтов**.
|
||||
|
||||

|
||||

|
||||
|
||||
В случае с Arduino Mega, сигнальные порты регуляторов подключаются к портам D43-D49 и D51.
|
||||
|
||||
@@ -47,8 +47,8 @@
|
||||
|
||||
Для загрузки информации о версии прошивки и настроек регуляторов нужно нажать на кнопку Check.
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
Основные параметры, которые нас интересуют, это:
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
Самый левый мотор в списке моторов \(Multiple ESC\) считается главным \(мастер\). Нажимая на номера моторов, можно включать/выключать возможность записи в них настроек. После изменения необходимых параметров можно записать в нужные моторы настройки, нажав на кнопку Write Setup.
|
||||
|
||||

|
||||

|
||||
|
||||
Для отображения настроек со всех регуляторов одновременно можно воспользоваться вкладкой ESC Overview.
|
||||
|
||||
@@ -75,4 +75,3 @@
|
||||
## Видеоинструкция по перепрошивке ESC регуляторов
|
||||
|
||||
Для лучшего понимания того, что описано в статье, рекомендуем посмотреть наглядное руководство по подключению электроники и прошивке регуляторов на английском языке на [youtube](https://www.youtube.com/watch?v=i6lhMcQLRSU&feature=youtu.be).
|
||||
|
||||