Compare commits

...

38 Commits

Author SHA1 Message Date
Oleg Kalachev
749e34b3c4 simple_offboard: add take_off service 2020-12-08 16:49:41 +03:00
Oleg Kalachev
68cec159f7 simulation: add type:=jmavsim to simulator.launch, remove sitl.launch, some adjustments 2020-12-08 16:28:57 +03:00
Oleg Kalachev
4e8127f690 docs: add vertical markers article to the summary 2020-12-08 15:28:29 +03:00
Alamoris
8f78f2b6e4 docs: add translations of articles about grippers and assembling an FPV set (#288)
* docs: Add translations and fix rusian articles

* docs: Fix md and style

* docs: Fix summary and dupont naming

* docs: Fix summary tabbing
2020-12-08 14:17:20 +03:00
Oleg Kalachev
c8163cd38b docs: add translation of the wall_aruco article and fix the Russian version (#289) 2020-12-08 01:13:35 +03:00
Oleg Kalachev
7831992d6a Edit 2020-12-08 01:12:25 +03:00
Volga
873befdba9 docs: Added translation of the wall_aruco article and fix russian version 2020-12-08 00:55:50 +03:00
Oleg Kalachev
c3cbc305c3 docs: add clarification on set_rates rotation directions 2020-12-05 04:27:47 +03:00
Oleg Kalachev
b71e802a2e docs: replace Pixracer with COEX pix on the main page 2020-12-05 04:07:38 +03:00
Ralf Seidel
3c5f2c958e docs: add heading for "Brushless motors" (#287) 2020-12-04 00:19:00 +03:00
Oleg Kalachev
267993aec4 Add title to the main clover page 2020-12-03 00:24:15 +03:00
Oleg Kalachev
86dd42c3b3 docs: fix main illustration (en) 2020-12-02 04:06:00 +03:00
Oleg Kalachev
9d338d843b docs: fix 2020-11-30 22:15:38 +03:00
Oleg Kalachev
3e100bee91 docs: add note on Pixhawk firmware to setup article 2020-11-30 22:15:32 +03:00
Oleg Kalachev
8a29b9a37a Fix checking unused assets 2020-11-30 00:55:40 +03:00
Oleg Kalachev
2e80a06db1 docs: add main clover image for black background 2020-11-29 23:03:10 +03:00
Oleg Kalachev
0003985c3b docs: fix typos 2020-11-28 01:37:41 +03:00
Oleg Kalachev
f250916ede docs: fix more images in coex pix article 2020-11-28 01:33:27 +03:00
Oleg Kalachev
ee2944a1d3 docs: fix images in coex_pix article 2020-11-27 17:57:47 +03:00
Oleg Kalachev
a088524468 docs: change /led redirect to English version, shortened links in examples 2020-11-27 03:06:57 +03:00
Oleg Kalachev
215fe237ca docs: fix check_unused_assets 2020-11-26 22:54:12 +03:00
Oleg Kalachev
8c1b5c19d0 readme: update main illustration 2020-11-26 20:39:57 +03:00
Oleg Kalachev
779dfb3f4f docs: update the main illustration 2020-11-26 20:36:24 +03:00
Oleg Kalachev
23d503adc5 docs: correct mode and kill switch channels 2020-11-26 19:56:04 +03:00
Oleg Kalachev
0350ecbff7 docs: decrease pix-sd.png size 2020-11-26 18:18:01 +03:00
Oleg Kalachev
12bed337dc docs: add video review of the simulator 2020-11-26 18:18:01 +03:00
Volga
6a1b609ccd docs: Update COEX Pix rev. 1.2 images 2020-11-25 11:16:38 +03:00
Oleg Kalachev
3d5c51a42e aruco_detect: add 'enabled' dynamic param 2020-11-24 22:34:12 +03:00
Oleg Kalachev
3702ed0c86 docs: reduce images sizes in setup section 2020-11-24 15:03:23 +03:00
Oleg Kalachev
741abadb54 docs: add big leg model 2020-11-23 20:55:41 +03:00
Oleg Kalachev
c6dc732867 docs: remove trailing whitespace 2020-11-23 20:45:32 +03:00
Oleg Kalachev
ba76e51966 docs: fix blocks page address 2020-11-21 13:38:21 +03:00
Oleg Kalachev
7951f0e2ba docs: minor fix 2020-11-20 17:55:06 +03:00
Alamoris
cd58c03c0f docs: assembling grips and fpv (ru) (#283)
* docs: Add article about magnetic and mechanical grippers

* docs: Add and fix article about install fpv camera

* fpv: orthography, punctuation, and style

* magnetic_grip: orthography and punctuation

* mechanical_grip: orthography, punctuation, and style

* Fix lists style

* docs: Added magnetic grip assembly images

* docs: Add translate draft

* docs: Delete article translations

* docs: Fix incorrect image name

* docs: Add images about assembling FPV

* docs: Fix images size

* Optimize images

* Fixes

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2020-11-20 15:12:20 +03:00
Oleg Kalachev
ce6b2530c4 image: don’t install espeak to reduce size 2020-11-17 15:13:56 +03:00
Oleg Kalachev
14e4af76aa image: change clone depth to 1 2020-11-17 15:12:59 +03:00
Konstantin Petrykin
f3f1557b0b docs: add COEX Duocam docs (ru) (#285)
* docs: add COEX Duocam docs

* Orthography and punctuation

* docs: change gitup_seek image resolution and extension

* docs: add missing duocam-mavlink article

* docs: fix linter problems in duocam-mavlink article

* docs: add a link to doucam-mavlink in SUMMARY

* Decrease the size of gitup_seek image

* Make duocam_mavlink a subsection of duocam section

* Edit duocam articles

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2020-11-16 13:29:28 +03:00
Oleg Kalachev
18d410db24 docs: update setup section 2020-11-14 17:56:50 +03:00
112 changed files with 5573 additions and 140 deletions

View File

@@ -10,7 +10,7 @@ env:
- IMAGE_VERSION=${TRAVIS_TAG:-${TRAVIS_COMMIT:0:7}} - IMAGE_VERSION=${TRAVIS_TAG:-${TRAVIS_COMMIT:0:7}}
- IMAGE_NAME="$(basename -s '.git' ${TARGET_REPO})_${IMAGE_VERSION}.img" - IMAGE_NAME="$(basename -s '.git' ${TARGET_REPO})_${IMAGE_VERSION}.img"
git: git:
depth: 25 depth: 1
jobs: jobs:
fast_finish: true fast_finish: true
include: include:

View File

@@ -1,6 +1,6 @@
# clover🍀: create autonomous drones easily # clover🍀: create autonomous drones easily
<img src="docs/assets/clever4-front-white.png" align="right" width="400px" alt="COEX Clover Drone"> <img src="docs/assets/clover42-main.png" align="right" width="400px" alt="COEX Clover Drone">
Clover is an open source [ROS](https://www.ros.org)-based framework, providing user-friendly tools to control [PX4](https://px4.io)-powered drones. Clover is available as a ROS package, but is shipped mainly as a preconfigured image for Raspberry Pi. Once you've installed Raspberry Pi on your drone and flashed the image to its microSD card, taking the drone up in the air is a matter of minutes. Clover is an open source [ROS](https://www.ros.org)-based framework, providing user-friendly tools to control [PX4](https://px4.io)-powered drones. Clover is available as a ROS package, but is shipped mainly as a preconfigured image for Raspberry Pi. Once you've installed Raspberry Pi on your drone and flashed the image to its microSD card, taking the drone up in the air is a matter of minutes.

View File

@@ -8,6 +8,8 @@ p = cv2.aruco.DetectorParameters_create()
gen = ParameterGenerator() gen = ParameterGenerator()
gen.add("enabled", bool_t, 0, "if detection enabled", True)
gen.add("adaptiveThreshConstant", double_t, 0, gen.add("adaptiveThreshConstant", double_t, 0,
"Constant for adaptive thresholding before finding contours", "Constant for adaptive thresholding before finding contours",
p.adaptiveThreshConstant, 0, 100) p.adaptiveThreshConstant, 0, 100)

View File

@@ -62,6 +62,7 @@ private:
std::unique_ptr<tf2_ros::Buffer> tf_buffer_; std::unique_ptr<tf2_ros::Buffer> tf_buffer_;
std::unique_ptr<tf2_ros::TransformListener> tf_listener_; std::unique_ptr<tf2_ros::TransformListener> tf_listener_;
std::shared_ptr<dynamic_reconfigure::Server<aruco_pose::DetectorConfig>> dyn_srv_; std::shared_ptr<dynamic_reconfigure::Server<aruco_pose::DetectorConfig>> dyn_srv_;
bool enabled_ = true;
cv::Ptr<cv::aruco::Dictionary> dictionary_; cv::Ptr<cv::aruco::Dictionary> dictionary_;
cv::Ptr<cv::aruco::DetectorParameters> parameters_; cv::Ptr<cv::aruco::DetectorParameters> parameters_;
image_transport::Publisher debug_pub_; image_transport::Publisher debug_pub_;
@@ -128,6 +129,8 @@ public:
private: private:
void imageCallback(const sensor_msgs::ImageConstPtr& msg, const sensor_msgs::CameraInfoConstPtr &cinfo) void imageCallback(const sensor_msgs::ImageConstPtr& msg, const sensor_msgs::CameraInfoConstPtr &cinfo)
{ {
if (!enabled_) return;
Mat image = cv_bridge::toCvShare(msg, "bgr8")->image; Mat image = cv_bridge::toCvShare(msg, "bgr8")->image;
vector<int> ids; vector<int> ids;
@@ -356,6 +359,7 @@ private:
void paramCallback(aruco_pose::DetectorConfig &config, uint32_t level) void paramCallback(aruco_pose::DetectorConfig &config, uint32_t level)
{ {
enabled_ = config.enabled;
parameters_->adaptiveThreshConstant = config.adaptiveThreshConstant; parameters_->adaptiveThreshConstant = config.adaptiveThreshConstant;
parameters_->adaptiveThreshWinSizeMin = config.adaptiveThreshWinSizeMin; parameters_->adaptiveThreshWinSizeMin = config.adaptiveThreshWinSizeMin;
parameters_->adaptiveThreshWinSizeMax = config.adaptiveThreshWinSizeMax; parameters_->adaptiveThreshWinSizeMax = config.adaptiveThreshWinSizeMax;

View File

@@ -1,4 +1,4 @@
# Information: https://clover.coex.tech/en/aruco.html # Information: https://clover.coex.tech/aruco
import rospy import rospy
from clover import srv from clover import srv

View File

@@ -1,4 +1,4 @@
# Information: https://clover.coex.tech/en/leds.html # Information: https://clover.coex.tech/led
import rospy import rospy
from clover.srv import SetLEDEffect from clover.srv import SetLEDEffect

View File

@@ -110,7 +110,6 @@ libffi-dev \
monkey \ monkey \
pigpio python-pigpio python3-pigpio \ pigpio python-pigpio python3-pigpio \
i2c-tools \ i2c-tools \
espeak espeak-data python-espeak \
ntpdate \ ntpdate \
python-dev \ python-dev \
python3-dev \ python3-dev \

View File

@@ -25,7 +25,7 @@ import pymavlink
from pymavlink import mavutil from pymavlink import mavutil
import rpi_ws281x import rpi_ws281x
import pigpio import pigpio
from espeak import espeak # from espeak import espeak
from pyzbar import pyzbar from pyzbar import pyzbar
print cv2.getBuildInformation() print cv2.getBuildInformation()

View File

@@ -32,7 +32,7 @@ monkey --version
pigpiod -v pigpiod -v
i2cdetect -V i2cdetect -V
butterfly -h butterfly -h
espeak --version # espeak --version
mjpg_streamer --version mjpg_streamer --version
# ros stuff # ros stuff

View File

@@ -4,7 +4,9 @@ import os
import sys import sys
import subprocess import subprocess
EXCLUDE = ('clever4-front-white.png', '.DS_Store', 'clever4-front-black-large.png') EXCLUDE = ('clever4-front-white.png', 'clever4-front-white-large.png', '.DS_Store',
'clever4-front-black-large.png','clover42-black.png')
code = 0 code = 0
os.chdir('./docs') os.chdir('./docs')

View File

@@ -82,6 +82,7 @@ add_service_files(
GetTelemetry.srv GetTelemetry.srv
Navigate.srv Navigate.srv
NavigateGlobal.srv NavigateGlobal.srv
TakeOff.srv
SetPosition.srv SetPosition.srv
SetVelocity.srv SetVelocity.srv
SetAttitude.srv SetAttitude.srv

View File

@@ -44,16 +44,12 @@ Alternatively you may change the `fcu_url` property in `mavros.launch` file to p
## Running ## Running
To start connection to SITL, use:
```bash
roslaunch clover sitl.launch
```
To start connection to the flight controller, use: To start connection to the flight controller, use:
```bash ```bash
roslaunch clover clover.launch roslaunch clover clover.launch
``` ```
For the simulation information see the [corresponding article](https://clover.coex.tech/en/simulation.html).
> Note that the package is configured to connect to `/dev/px4fmu` by default (see [previous section](#manual-installation)). Install udev rules or specify path to your FCU device in `mavros.launch`. > Note that the package is configured to connect to `/dev/px4fmu` by default (see [previous section](#manual-installation)). Install udev rules or specify path to your FCU device in `mavros.launch`.

View File

@@ -1,19 +0,0 @@
<launch>
<!-- clover configuration for testing in sitl -->
<arg name="ip" default="127.0.0.1"/>
<arg name="rosbridge" default="false"/>
<include file="$(find clover)/launch/clover.launch">
<arg name="fcu_conn" value="udp"/>
<arg name="fcu_ip" value="$(arg ip)"/>
<arg name="gcs_bridge" value="false"/>
<arg name="optical_flow" value="false"/>
<arg name="web_video_server" default="false"/>
<arg name="main_camera" default="false"/>
<arg name="rosbridge" value="$(arg rosbridge)"/>
<arg name="aruco" default="false"/>
<arg name="rangefinder_vl53l1x" default="false"/>
<arg name="led" default="false"/>
<arg name="rc" default="false"/>
</include>
</launch>

View File

@@ -41,6 +41,7 @@
#include <clover/GetTelemetry.h> #include <clover/GetTelemetry.h>
#include <clover/Navigate.h> #include <clover/Navigate.h>
#include <clover/NavigateGlobal.h> #include <clover/NavigateGlobal.h>
#include <clover/TakeOff.h>
#include <clover/SetPosition.h> #include <clover/SetPosition.h>
#include <clover/SetVelocity.h> #include <clover/SetVelocity.h>
#include <clover/SetAttitude.h> #include <clover/SetAttitude.h>
@@ -781,6 +782,10 @@ bool navigateGlobal(NavigateGlobal::Request& req, NavigateGlobal::Response& res)
return serve(NAVIGATE_GLOBAL, NAN, NAN, req.z, NAN, NAN, NAN, NAN, NAN, req.yaw, NAN, NAN, req.yaw_rate, req.lat, req.lon, NAN, req.speed, req.frame_id, req.auto_arm, res.success, res.message); return serve(NAVIGATE_GLOBAL, NAN, NAN, req.z, NAN, NAN, NAN, NAN, NAN, req.yaw, NAN, NAN, req.yaw_rate, req.lat, req.lon, NAN, req.speed, req.frame_id, req.auto_arm, res.success, res.message);
} }
bool takeOff(TakeOff::Request& req, TakeOff::Response& res) {
return serve(NAVIGATE, 0, 0, req.alt, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, 0, NAN, NAN, NAN, req.speed, body.child_frame_id, true, res.success, res.message);
}
bool setPosition(SetPosition::Request& req, SetPosition::Response& res) { bool setPosition(SetPosition::Request& req, SetPosition::Response& res) {
return serve(POSITION, req.x, req.y, req.z, NAN, NAN, NAN, NAN, NAN, req.yaw, NAN, NAN, req.yaw_rate, NAN, NAN, NAN, NAN, req.frame_id, req.auto_arm, res.success, res.message); return serve(POSITION, req.x, req.y, req.z, NAN, NAN, NAN, NAN, NAN, req.yaw, NAN, NAN, req.yaw_rate, NAN, NAN, NAN, NAN, req.frame_id, req.auto_arm, res.success, res.message);
} }
@@ -905,6 +910,7 @@ int main(int argc, char **argv)
auto gt_serv = nh.advertiseService("get_telemetry", &getTelemetry); auto gt_serv = nh.advertiseService("get_telemetry", &getTelemetry);
auto na_serv = nh.advertiseService("navigate", &navigate); auto na_serv = nh.advertiseService("navigate", &navigate);
auto ng_serv = nh.advertiseService("navigate_global", &navigateGlobal); auto ng_serv = nh.advertiseService("navigate_global", &navigateGlobal);
auto to_serv = nh.advertiseService("take_off", &takeOff);
auto sp_serv = nh.advertiseService("set_position", &setPosition); auto sp_serv = nh.advertiseService("set_position", &setPosition);
auto sv_serv = nh.advertiseService("set_velocity", &setVelocity); auto sv_serv = nh.advertiseService("set_velocity", &setVelocity);
auto sa_serv = nh.advertiseService("set_attitude", &setAttitude); auto sa_serv = nh.advertiseService("set_attitude", &setAttitude);

5
clover/srv/TakeOff.srv Normal file
View File

@@ -0,0 +1,5 @@
float32 alt
float32 speed
---
bool success
string message

View File

@@ -1,3 +1,5 @@
<title>Clover Drone Kit Tools</title>
<h1>Clover Drone Kit Tools</h1> <h1>Clover Drone Kit Tools</h1>
<ul> <ul>

View File

@@ -1,4 +1,5 @@
<launch> <launch>
<arg name="type" default="gazebo"/> <!-- gazebo, jmavsim, none (only clover packages) -->
<arg name="mav_id" default="0"/> <arg name="mav_id" default="0"/>
<arg name="est" default="ekf2"/> <!-- PX4 estimator: lpe, ekf2 --> <arg name="est" default="ekf2"/> <!-- PX4 estimator: lpe, ekf2 -->
<arg name="vehicle" default="clover"/> <!-- PX4 vehicle configuration: clover, clover_vpe --> <arg name="vehicle" default="clover"/> <!-- PX4 vehicle configuration: clover, clover_vpe -->
@@ -9,7 +10,7 @@
<arg name="use_clover_physics" default="false"/> <!-- Use inertial parameters from CAD models --> <arg name="use_clover_physics" default="false"/> <!-- Use inertial parameters from CAD models -->
<!-- Gazebo instance --> <!-- Gazebo instance -->
<include file="$(find gazebo_ros)/launch/empty_world.launch"> <include file="$(find gazebo_ros)/launch/empty_world.launch" if="$(eval type == 'gazebo')">
<!-- Workaround for crashes in VMware --> <!-- Workaround for crashes in VMware -->
<env name="SVGA_VGPU10" value="0"/> <env name="SVGA_VGPU10" value="0"/>
<arg name="gui" value="true"/> <arg name="gui" value="true"/>
@@ -18,13 +19,13 @@
</include> </include>
<!-- PX4 instance --> <!-- PX4 instance -->
<node name="sitl_$(arg mav_id)" pkg="px4" type="px4" output="screen" args="$(find px4)/ROMFS/px4fmu_common -s etc/init.d-posix/rcS -i $(arg mav_id)"> <node name="sitl_$(arg mav_id)" pkg="px4" type="px4" output="screen" args="$(find px4)/ROMFS/px4fmu_common -s etc/init.d-posix/rcS -i $(arg mav_id)" unless="$(eval type == 'none')">
<env name="PX4_SIM_MODEL" value="$(arg vehicle)"/> <env name="PX4_SIM_MODEL" value="$(arg vehicle)"/>
<env name="PX4_ESTIMATOR" value="$(arg est)"/> <env name="PX4_ESTIMATOR" value="$(arg est)"/>
</node> </node>
<!-- Clover model --> <!-- Clover model -->
<include file="$(find clover_description)/launch/spawn_drone.launch"> <include file="$(find clover_description)/launch/spawn_drone.launch" if="$(eval type == 'gazebo')">
<arg name="main_camera" value="$(arg main_camera)"/> <arg name="main_camera" value="$(arg main_camera)"/>
<arg name="rangefinder" value="$(arg rangefinder)"/> <arg name="rangefinder" value="$(arg rangefinder)"/>
<arg name="led" value="$(arg led)"/> <arg name="led" value="$(arg led)"/>
@@ -32,10 +33,20 @@
<arg name="use_clover_physics" value="$(arg use_clover_physics)"/> <arg name="use_clover_physics" value="$(arg use_clover_physics)"/>
</include> </include>
<node name="jmavsim" pkg="px4" type="jmavsim_run.sh" output="screen" if="$(eval type == 'jmavsim')"/>
<param name="use_sim_time" value="false" if="$(eval type == 'jmavsim')"/>
<!-- Clover services --> <!-- Clover services -->
<include file="$(find clover)/launch/clover.launch"> <include file="$(find clover)/launch/clover.launch">
<arg name="simulator" value="true"/> <arg name="simulator" value="true"/>
<arg name="fcu_conn" value="sitl"/> <arg name="fcu_conn" value="sitl"/>
<arg name="fcu_ip" value="127.0.0.1"/> <arg name="fcu_ip" value="127.0.0.1"/>
<arg name="gcs_bridge" value=""/>
<arg name="rc" default="false"/>
<arg name="web_video_server" default="false" if="$(eval type == 'jmavsim')"/>
<arg name="main_camera" default="false" if="$(eval type == 'jmavsim')"/>
<arg name="aruco" default="false" if="$(eval type == 'jmavsim')"/>
<arg name="led" default="false" if="$(eval type == 'jmavsim')"/>
</include> </include>
</launch> </launch>

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 415 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

BIN
docs/assets/fpv/fpv_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

BIN
docs/assets/fpv/fpv_10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
docs/assets/fpv/fpv_11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
docs/assets/fpv/fpv_12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
docs/assets/fpv/fpv_13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
docs/assets/fpv/fpv_14.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
docs/assets/fpv/fpv_15.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
docs/assets/fpv/fpv_16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

BIN
docs/assets/fpv/fpv_17.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

BIN
docs/assets/fpv/fpv_18.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

BIN
docs/assets/fpv/fpv_19.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
docs/assets/fpv/fpv_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

BIN
docs/assets/fpv/fpv_20.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
docs/assets/fpv/fpv_21.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

BIN
docs/assets/fpv/fpv_22.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

BIN
docs/assets/fpv/fpv_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
docs/assets/fpv/fpv_4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

BIN
docs/assets/fpv/fpv_5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

BIN
docs/assets/fpv/fpv_6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
docs/assets/fpv/fpv_7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
docs/assets/fpv/fpv_8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
docs/assets/fpv/fpv_9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 815 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 827 KiB

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 870 KiB

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 677 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 623 KiB

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 602 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 822 KiB

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 821 KiB

After

Width:  |  Height:  |  Size: 253 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 824 KiB

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 837 KiB

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 970 KiB

View File

@@ -40,13 +40,9 @@ section ul li:before {
margin-bottom: 0.85em; margin-bottom: 0.85em;
} }
/* Main Clover image */ .book.color-theme-2 img.big-clover {
.book img.bigclever {
margin-bottom: -12%;
}
.book.color-theme-2 img.bigclever {
/* change image for black background */ /* change image for black background */
content:url(assets/clever4-front-black-large.png); content:url(assets/clover42-black.png);
} }
footer { footer {

View File

@@ -1,10 +1,10 @@
# COEX Clover # COEX Clover
<img class="center bigclever zoom" src="../assets/clever4-front-white-large.png" width="80%" alt="COEX Clover 4"> <img class="center zoom big-clover" src="../assets/clover42-main.png" width="80%" alt="Clover 4.2">
**Clover** is an educational kit of a programmable quadcopter that consists of popular open source components, and a set of necessary documentation and libraries for working with it. **Clover** is an educational kit of a programmable quadcopter that consists of popular open source components, and a set of necessary documentation and libraries for working with it.
The kit includes a Pixhawk/Pixracer flight controller with the PX4 flight stack, a [Raspberry Pi 4](raspberry.md) as a controlling onboard computer, and a [camera module](camera.md) for performing flights with the use of computer vision, as well as a set of various sensors and other peripherals. The kit includes a [COEX Pix](coex_pix.md) flight controller with the PX4 flight stack, a [Raspberry Pi 4](raspberry.md) as a controlling onboard computer, and a [camera module](camera.md) for performing flights with the use of computer vision, as well as a set of various sensors and other peripherals.
The Clover platform contains a [pre-configured image for Raspberry Pi](image.md) with the full set of required software for working with peripheral devices and [programming autonomous flights](simple_offboard.md). The source code of the platform and of the documentation is open and [available on GitHub](https://github.com/CopterExpress/clover). The Clover platform contains a [pre-configured image for Raspberry Pi](image.md) with the full set of required software for working with peripheral devices and [programming autonomous flights](simple_offboard.md). The source code of the platform and of the documentation is open and [available on GitHub](https://github.com/CopterExpress/clover).

View File

@@ -57,6 +57,7 @@
* [Guide on autonomous flight](auto_setup.md) * [Guide on autonomous flight](auto_setup.md)
* [Hostname](hostname.md) * [Hostname](hostname.md)
* [PX4 Simulation](sitl.md) * [PX4 Simulation](sitl.md)
* [Navigation using vertical ArUco-markers](wall_aruco.md)
* [PID Setup](calibratePID.md) * [PID Setup](calibratePID.md)
* [Model files for parts](models.md) * [Model files for parts](models.md)
* [ROS Melodic installation](ros-install.md) * [ROS Melodic installation](ros-install.md)
@@ -76,7 +77,10 @@
* [Interfacing with Arduino](arduino.md) * [Interfacing with Arduino](arduino.md)
* [Connecting GPS](gps.md) * [Connecting GPS](gps.md)
* [Working with IR sensors](ir_sensors.md) * [Working with IR sensors](ir_sensors.md)
* [FPV Setup](fpv.md) * [FPV Setup](fpv_clover_4_2.md)
* [FPV Setup (Clover 3)](fpv.md)
* [Magnetic grip](magnetic_grip.md)
* [Mechanical grip](mechanical_grip.md)
* [Trainer mode](trainer_mode.md) * [Trainer mode](trainer_mode.md)
* [Tinning](tinning.md) * [Tinning](tinning.md)
* [Types of power connectors](connectortypes.md) * [Types of power connectors](connectortypes.md)

View File

@@ -14,7 +14,7 @@ For correct work of the blocks programming, `blocks` argument in the Clover laun
## Running ## Running
To run Clover's blocks programming interface, [connect to Clover's Wi-Fi](wifi.md) and go to web-page http://192.168.11.1:8080/clover_blocks/ or click the link *Blocks programming* at the [main page](wifi.md#web-interface). To run Clover's blocks programming interface, [connect to Clover's Wi-Fi](wifi.md) and go to web-page http://192.168.11.1/clover_blocks/ or click the link *Blocks programming* at the [main page](wifi.md#web-interface).
The page looks as follows: The page looks as follows:

View File

@@ -2,7 +2,7 @@
In order to perform the sensor calibration, select the *Vehicle Setup* tab and choose the *Sensors* menu. In order to perform the sensor calibration, select the *Vehicle Setup* tab and choose the *Sensors* menu.
> **Caution** If you use the flight controller *COEX Pix*, all *Autopilot Orientation* columns must specify `ROTATION_ROLL_180_YAW_90`, otherwise the flight controller will not correctly perceive the tilt and rotation of the copter. > **Caution** If you use the flight controller [*COEX Pix*](coex_pix.md), all *Autopilot Orientation* columns must specify `ROTATION_ROLL_180_YAW_90`, otherwise the flight controller will not correctly perceive the tilt and rotation of the copter.
## Compass ## Compass

View File

@@ -35,9 +35,9 @@ The **COEX Pix** flight controller is a modified [Pixracer](https://docs.px4.io/
### Port pinouts ### Port pinouts
<img src="../assets/coexpix-top.jpg" width="400" class="zoom"> <img src="../assets/coex_pix/coexpix-top.jpg" width="400" class="zoom">
<img src="../assets/coexpix-bottom.jpg" width="400" class="zoom"> <img src="../assets/coex_pix/coexpix-bottom.jpg" width="400" class="zoom">
> **Note** On rev. 1.0 boards *RC IN* port and microSD slot are switched. Pinout for the *RC IN* port is the same on these boards. > **Note** On rev. 1.0 boards *RC IN* port and microSD slot are switched. Pinout for the *RC IN* port is the same on these boards.
@@ -70,6 +70,6 @@ The board utilizes low-noise DC-DC converters, voltage inputs have LC and ferrit
### Port pinouts ### Port pinouts
<img src="../assets/coex_pix/coexpix-top-rev1.2.jpg" width=400 class=zoom> <img src="../assets/coex_pix/coexpix-top-rev1.2.png" width=400 class=zoom>
<img src="../assets/coex_pix/coexpix-bottom-rev1.2.jpg" width=400 class=zoom> <img src="../assets/coex_pix/coexpix-bottom-rev1.2.png" width=400 class=zoom>

94
docs/en/fpv_clover_4_2.md Normal file
View File

@@ -0,0 +1,94 @@
# Installing and configuring FPV equipment
## Preparing and installing the FPV camera and transmitter
1. Install the small mounting deck onto the main frame.
<div class="image-group">
<img src="../assets/fpv/fpv_1.png" width=300 class="zoom border">
<img src="../assets/fpv/fpv_2.png" width=300 class="zoom border">
</div>
2. Install the camera mount bracket into the corresponding holes.
<div class="image-group">
<img src="../assets/fpv/fpv_3.png" width=300 class="zoom border">
<img src="../assets/fpv/fpv_4.png" width=300 class="zoom border">
</div>
3. Cut the three-pin supplied camera cable.
<div class="image-group">
<img src="../assets/fpv/fpv_5.png" width=300 class="zoom border">
<img src="../assets/fpv/fpv_6.png" width=300 class="zoom border">
</div>
4. Tin the wires
<img src="../assets/fpv/fpv_7.png" width=300 class="zoom border center">
5. Solder the JST-male connector to the power wires of the camera.
<div class="image-group">
<img src="../assets/fpv/fpv_8.png" width=300 class="zoom border">
<img src="../assets/fpv/fpv_9.png" width=300 class="zoom border">
</div>
> **Hint** Сheck what you are wearing shrink tubes before soldering the wires.
6. Solder the JST male connector to the transmitter.
<div class="image-group">
<img src="../assets/fpv/fpv_10.png" width=300 class="zoom border">
<img src="../assets/fpv/fpv_11.png" width=300 class="zoom border">
</div>
7. Solder the yellow camera signal cable to the transmitter.
<div class="image-group">
<img src="../assets/fpv/fpv_12.png" width=300 class="zoom border">
<img src="../assets/fpv/fpv_13.png" width=300 class="zoom border">
</div>
8. Connect the antenna to the transmitter.
<img src="../assets/fpv/fpv_14.png" width=300 class="zoom border center">
> **Caution** If voltage is applied to a transmitter without an antenna, there is a high probability that it will burn out.
9. Place the receiver onto the mounting deck, securing it with ties.
<img src="../assets/fpv/fpv_15.png" width=300 class="zoom border center">
10. Place the mounting deck with the receiver on the bottom of the aircraft.
<img src="../assets/fpv/fpv_16.png" width=300 class="zoom border center">
11. Place the camera in the bracket and secure it with the 4 attached bolts. The camera should be at an angle of 15°-20° relative to the plane of the aircraft.
<div class="image-group">
<img src="../assets/fpv/fpv_17.png" width=300 class="zoom border">
<img src="../assets/fpv/fpv_18.png" width=300 class="zoom border">
</div>
<div class="image-group">
<img src="../assets/fpv/fpv_19.png" width=300 class="zoom border">
<img src="../assets/fpv/fpv_20.png" width=300 class="zoom border">
</div>
12. Connect the signal cable to the camera.
<img src="../assets/fpv/fpv_21.png" width=300 class="zoom border center">
13. Connect the camera's power cable to the power JST soldered to the *BAT+* and *GND* pads on the power distribution board.
14. Connect the transmitter power cable to JST at 5V.
<img src="../assets/fpv/fpv_22.png" width=300 class="zoom border center">
## Setting up and connecting FPV goggles
1. Install the two supplied antennas on the glasses.
2. Turn on the glasses by holding the power button for 3-4 seconds.
3. Turn on the aircraft and make sure the transmitter LED is blue.
4. Press the *Auto Search* button on the glasses to automatically search for an available radio channel.

View File

@@ -86,6 +86,8 @@ How it works: Works from DC. I.e., by applying voltage from a DC source (a batte
* Rapid wear * Rapid wear
### Brushless motors
Brushless motors, in which the moving part is the stator, are more efficient than brush-type motors. This is achieved due to the absence of brushes. However, since motor design is much more complicated, they are more expensive. Brushless motors, in which the moving part is the stator, are more efficient than brush-type motors. This is achieved due to the absence of brushes. However, since motor design is much more complicated, they are more expensive.
**Advantages:** **Advantages:**

65
docs/en/magnetic_grip.md Normal file
View File

@@ -0,0 +1,65 @@
# Assembling and setting up the electromagnetic gripper
The magnetic gripper can be assembled in various ways according to the wiring diagram.
<img src="../assets/magnet_grip/scheme.jpg" width=300 class="zoom border center">
The following is an example of assembling an electromagnetic capture circuit on a breadboard.
> **Info** It is recommended to lay the wiring between the elements on the back side of the board (in the following images, the wiring is done over the diagram for illustrative purpose).
1. Place the Schottky diode, 10K resistor, and transistor on the soldering board.
<img src="../assets/magnet_grip/magnet1.png" width=300 class="zoom border center">
2. Solder the contacts on the other side of the board and bite off the remaining element legs.
3. Connect the pins of the resistor and the two outer legs of the transistor.
<img src="../assets/magnet_grip/magnet2.png" width=300 class="zoom border center">
4. Connect the center leg of the transistor and the leg of the Schottky diode (opposite to the gray marking strip).
<img src="../assets/magnet_grip/magnet3.png" width=300 class="zoom border center">
5. Cut the required amount of magnetic grab wire and solder it to the pins of the Schottky diode.
<img src="../assets/magnet_grip/magnet4.png" width=300 class="zoom border center">
6. Solder the *Dupont* - male wires to the transistor and diode leg (red, black wires), and the *Dupont* - fmale wire to the opposite transistor leg (white wire).
<img src="../assets/magnet_grip/magnet5.png" width=300 class="zoom border center">
## Checking the operation of the electromagnetic gripper
In order to check the operation of the gripper, apply a voltage of 5V to the signal wire. You can use the *Dupont* dad-dad wire for that.
<img src="../assets/magnet_grip/magnet_check.png" width=300 class="zoom border center">
After applying voltage, the magnet should turn on.
## Connecting to Raspberry Pi
Connect the magnetic gripper to a Raspberry Pi for software activation.
<img src="../assets/magnet_grip/magnet_raspberry.png" width=300 class="zoom border center">
An example of the code activating the magnetic gripper can be found [here](gpio.md#connecting-an-electromagnet).
## Connecting to Arduino
Connect the gripper to the Arduino Nano board in order to control it manually.
It is convenient to place it on the same soldering board — insert it into the appropriate holes and solder it from the back to the board.
<img src="../assets/magnet_grip/magnet_arduino1.png" width=300 class="zoom border center">
Then connect the signal output of the circuit to the selected port and solder the *Dupont* female wire to the selected signal port on the board.
<img src="../assets/magnet_grip/magnet_arduino2.png" width=300 class="zoom border center">
## Installation of electromagnetic gripper
1. Install an electromagnet into the center hole on the gripper deck.
2. Use a zip tie to pull the assembled circuit to the back of the deck.
3. Plug the Arduino *D11* signal pin into one of the *AUX* pins on the flight controller.
4. Plug the power wire of the electromagnetic gripper to JST 5V.

View File

@@ -0,0 +1,18 @@
# Assembling and setting up a mechanical gripper
1. Combine the main gripper plates.
2. Install the servo in the appropriate groove in the center of the plates with the axle gear in the middle.
3. Hold down the gripper plates with the small spacers.
4. Install the gripper deck so that the mounting holes in the grapple correspond with the self-tapping holes in the plate.
5. Fix the gripper structure with self-tapping screws.
6. Turn the servo gear to the end position.
7. Install the cruciform mount onto the gear.
8. Secure the cruciform mount using the screw attached to the servo.
9. Tie the servo thread so that there is a 2 to 3 cm margin.
10. Thread the servo thread into the corresponding tensioning slots.
11. Fasten the grip claws with small self-tapping screws so that their angle is 25°40°.
12. Install the assembled grip onto the aircraft from below.
13. Insert the servo cable into the *AUX* 1-2 output on the flight controller.
14. Go to the *Radio* tab to control capture with the remote control.
15. In the *AUX 1/2 Passthrough RC channel* parameter, select the desired channel.
16. Now, when you switch the toggle switch of the corresponding channel, the capture will be closed or opened.

View File

@@ -80,6 +80,24 @@ This page contains models and drawings of some of the drone parts. They can be u
</tr> </tr>
</table> </table>
## Clover 4.2 WorldSkills
### Milling
<table>
<tr><th width=150>Preview</th><th>Part</th><th width=1>File</th></tr>
<tr>
<td><img src="../assets/dxf/4.2/big_leg.png"></td>
<td>
<b>Big leg</b>.<br>
Function: Extended footing element.<br>
Материал: Monolithic polycarbonate 2mm.<br>
Quantity: 2 шт.
</td>
<td><a href="https://github.com/CopterExpress/clover/raw/master/docs/assets/dxf/4.2/big_leg.dxf"><code>big_leg.dxf</code></a></td>
</tr>
</table>
## Clover 4 ## Clover 4
### 3D print ### 3D print

View File

@@ -6,7 +6,7 @@ In order to configure flight modes:
1. Open the *Vehicle Setup* tab in QGroundControl. 1. Open the *Vehicle Setup* tab in QGroundControl.
2. Select the *Flight Modes* menu. 2. Select the *Flight Modes* menu.
3. Choose SwC (Channel 5) as mode selection switch. 3. Choose SwC (Channel 6) as mode selection switch.
4. Set desired flight modes. 4. Set desired flight modes.
The following flight modes are recommended: The following flight modes are recommended:
@@ -16,7 +16,7 @@ In order to configure flight modes:
* Flight Mode 6: *Position*. * Flight Mode 6: *Position*.
5. Check mode switching by changing the switch position. 5. Check mode switching by changing the switch position.
6. Choose SwA (Channel 6) as emergency motor stop (*Kill switch*). 6. Choose SwA (Channel 5) as emergency motor stop (*Kill switch*).
<img src="../assets/qgc-modes.png" class="zoom" alt="QGroundControl modes"> <img src="../assets/qgc-modes.png" class="zoom" alt="QGroundControl modes">

View File

@@ -15,7 +15,7 @@ If there is no voltage indicator or manual calibration is not possible, set the
* Put the battery voltage into the prompt and click *Calculate*. * Put the battery voltage into the prompt and click *Calculate*.
* Press *Close* to save the calculated value. * Press *Close* to save the calculated value.
<img src="../assets/qgc-battery.png" class="zoom"> <img src="../assets/qgc-voltage-divider.png" class="zoom">
Further reading: https://docs.qgroundcontrol.com/en/SetupView/Power.html. Further reading: https://docs.qgroundcontrol.com/en/SetupView/Power.html.
@@ -28,7 +28,7 @@ Further reading: https://docs.qgroundcontrol.com/en/SetupView/Power.html.
3. Connect the battery when prompted. 3. Connect the battery when prompted.
4. Wait for the *Calibration complete*. 4. Wait for the *Calibration complete*.
<img src="../assets/qgc-esc.png" class="zoom"> <img src="../assets/qgc-power.png" class="zoom">
Further reading: https://docs.px4.io/v1.9.0/en/advanced_config/esc_calibration.html. Further reading: https://docs.px4.io/v1.9.0/en/advanced_config/esc_calibration.html.

View File

@@ -29,6 +29,8 @@ Main article: https://docs.qgroundcontrol.com/en/SetupView/Firmware.html
We recommend using the modified version of PX4 by CopterExpress for the Clover drone, especially for autonomous flights. Download the latest stable version **<a class="latest-firmware v4" href="https://github.com/CopterExpress/Firmware/releases">from our GitHub</a>**. We recommend using the modified version of PX4 by CopterExpress for the Clover drone, especially for autonomous flights. Download the latest stable version **<a class="latest-firmware v4" href="https://github.com/CopterExpress/Firmware/releases">from our GitHub</a>**.
> **Info** For Pixhawk-based quadcopters there is a separate firmware version. See details in "[Pixhawk / Pixracer firmware flashing](firmware.md)" article.
Flash the flight controller with this firmware: Flash the flight controller with this firmware:
<img src="../assets/qgc-firmware.png" alt="QGroundControl firmware upload" class="zoom"> <img src="../assets/qgc-firmware.png" alt="QGroundControl firmware upload" class="zoom">
@@ -68,12 +70,12 @@ This is how the main QGroundControl settings window will look like:
### Selecting the airframe ### Selecting the airframe
<img src="../assets/qgc-frame-apply.png" alt="QGroundControl frame selection" class="zoom"> <img src="../assets/qgc-frame-apply-clover4.png" alt="QGroundControl frame selection" class="zoom">
1. Open the *Vehicle Setup* tab. 1. Open the *Vehicle Setup* tab.
2. Select the *Airframe* menu. 2. Select the *Airframe* menu.
3. Select the *Quadrotor X* airframe type. 3. Select the *Quadrotor X* airframe type.
4. Select the *Generic Quadrotor X* from the dropdown menu. 4. For Clover 4 select *COEX Clover 4* from the dropdown menu. Otherwise select *Generic Quadrotor X*.
5. Return to the top of the list and press *Apply and Restart* button, confirm by pressing *Apply*. 5. Return to the top of the list and press *Apply and Restart* button, confirm by pressing *Apply*.
6. Wait for the settings to be applied and for the flight controller to restart. 6. Wait for the settings to be applied and for the flight controller to restart.
@@ -87,6 +89,8 @@ Press the *Save* button to save the changed value to the flight controller. Chan
#### Configuring PID regulators #### Configuring PID regulators
> **Info** Selecting *COEX Clover 4* frame subtype doesn't require setting PID coefficients.
##### Averaged PID coefficients for the Clover 4 drone ##### Averaged PID coefficients for the Clover 4 drone
* `MC_PITCHRATE_P` = 0.087 * `MC_PITCHRATE_P` = 0.087

View File

@@ -295,6 +295,8 @@ Parameters:
* `thrust` — throttle level, ranges from 0 (no throttle, propellers are stopped) to 1 (full throttle). * `thrust` — throttle level, ranges from 0 (no throttle, propellers are stopped) to 1 (full throttle).
* `auto_arm` switch the drone to `OFFBOARD` and arm automatically (**the drone will take off**); * `auto_arm` switch the drone to `OFFBOARD` and arm automatically (**the drone will take off**);
The positive direction of `yaw_rate` rotation (when viewed from the top) is counterclockwise,`pitch_rate` rotation is forward, `roll_rate` rotation is to the left.
### land ### land
Switch the drone to landing [mode](modes.md) (`AUTO.LAND` or similar). Switch the drone to landing [mode](modes.md) (`AUTO.LAND` or similar).

View File

@@ -32,3 +32,9 @@ The simulation environment is based on the following components:
* ROS packages and Gazebo plugins. * ROS packages and Gazebo plugins.
<!-- TODO: Write more, add a diagram, etc --> <!-- TODO: Write more, add a diagram, etc -->
## Video
Short video review of the simulator:
<iframe width="560" height="315" src="https://www.youtube.com/embed/8HYXREMDfzQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

View File

@@ -1,7 +1,7 @@
PX4 Simulation PX4 Simulation
=== ===
> **Hint** This article is about running a standalone PX4 simulation with a generic quadcopter. Consider using [our configuration](simulation.md) for a more Clover-like experience. > **Warning** This article is about running a standalone PX4 simulation with a generic quadcopter and **is outdated**. Consider using [our configuration](simulation.md) for a more Clover-like experience.
Main article: https://dev.px4.io/en/simulation/ Main article: https://dev.px4.io/en/simulation/

58
docs/en/wall_aruco.md Normal file
View File

@@ -0,0 +1,58 @@
# Navigation using vertical ArUco-markers
The algorithm of the navigation through visual ArUco-markers, that was implemented in the Clever image, supports the flexible configuration of the markers in area. It allows you to place them on any surface, at any angle.
## Installing the vertical camera mount
For a better recognition of the markers, you need to set the camera vertically so that the lens is pointed parallel to the horizon.
> **Note** The configuration file allows you to configure the location of the camera in area relative to the copter in any way. For your convenience, we will review the option of installing the camera at an angle of 90 degrees to the horizon in the direction of the copter's nose.
### Camera mount, 3D printing
Print the [camera mount](models.md#clover-3).
Install the mount in a convenient location, so that the camera has a minimum number of unnecessary objects (protection, legs, propellers, beams) — all of it will negatively affect the recognition of the markers.
## Setting the camera transform
To set the camera position at the desired angle, open the file `main_camera.launch`, located in `~/catkin_ws/src/clover/clover/launch/`.
```bash
nano ~/catkin_ws/src/clover/clover/launch/main_camera.launch
```
In the parameters `direction_x`, `direction_y`, set empty values manually or enter the following lines:
```bash
sed -i "/direction_z/s/default=\".*\"/default=\"\"/" /home/pi/catkin_ws/src/clover/clover/launch/main_camera.launch
sed -i "/direction_y/s/default=\".*\"/default=\"\"/" /home/pi/catkin_ws/src/clover/clover/launch/main_camera.launch
```
Edit one of the configuration lines or add the line shown bellow:
```xml
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 0.05 -1.5707963 0 -1.5707963 base_link main_camera_optical"/>
```
> **Note**. Only one camera configuration can be used at a time. If you insert the line above, don't forget to comment the currently active one. The syntax highlighting system will help you determine that — the active line will be highlighted in a different color than the comments. To comment, add the `<!--` and `-->` symbols at the beginning and the end respectively.
If you are using the marker map, where the markers have equal distances along the x and y axes, you can use [script for creating markers map `gen_map.py`](aruco_map.md#marker-map-definition). Otherwise, you will need to set them manually. To do this, go to the directory `map_name.txt` and create a map file. Fill out your map according to the [map syntax](aruco_map.md#marker-map-definition). Here is an example of a marker map with a random marker location:
>**Hint**. When filling out the map, select one of the markers as the origin, and measure the distance to all other markers relative to it. If all your parameters are oriented same way, you can choose not to specify all 8 parameters, but only the first 5: the marker index, size, and its location in space along the x, y, and z axes, respectively.
```
106 0.33 0 0 0
103 0.33 1.53 0.23 0
153 0.40 -0.56 1.36 0
```
After you fill out the map, you need to apply it. To do it, edit the file `aruco.launch`, located in `~/catkin_ws/src/clover/clover/launch/`. Change the line `<param name="map" value="$(find aruco_pose)/map/map_name.txt"/>`, where `map_name.txt` is the name of your map file.
If you are using markers that are not linked to horizontal surfaces (floor, ceiling), you must disable the parameter `known_tilt` both in the module `aruco_detect` and `aruco_map` in the same file. To do it automatically, enter:
```bash
sed -i "/known_tilt/s/value=\".*\"/value=\"\"/" /home/pi/catkin_ws/src/clover/clover/launch/aruco.launch
```
After all the settings, call `sudo systemctl restart clover` to restart the `clover` service.

View File

@@ -1,10 +1,10 @@
# Клевер # Клевер
<img class="center bigclever zoom" src="../assets/clever4-front-white-large.png" width="80%" alt="Клевер 4"> <img class="center zoom big-clover" src="../assets/clover42-main.png" width="80%" alt="Клевер 4.2">
**«Клевер»** — это учебный конструктор программируемого квадрокоптера, состоящего из популярных открытых компонентов, а также набор необходимой документации и библиотек для работы с ним. **«Клевер»** — это учебный конструктор программируемого квадрокоптера, состоящего из популярных открытых компонентов, а также набор необходимой документации и библиотек для работы с ним.
Набор включает в себя полетный контроллер Pixracer с полетным стеком PX4, [Raspberry Pi 4](raspberry.md) в качестве управляющего бортового компьютера, [модуль камеры](camera.md) для реализации полетов с использованием компьютерного зрения, а также набор различных датчиков и другой периферии. Набор включает в себя полетный контроллер [COEX Pix](coex_pix.md) с полетным стеком PX4, [Raspberry Pi 4](raspberry.md) в качестве управляющего бортового компьютера, [модуль камеры](camera.md) для реализации полетов с использованием компьютерного зрения, а также набор различных датчиков и другой периферии.
Платформа Клевера также включает в себя преднастроенный [образ для Raspberry Pi](image.md) в полным набором необходимого ПО для работы со всей периферией и [программирования автономных полетов](simple_offboard.md). Исходный код платформы Клевера и данной документации открыт и [доступен на GitHub](https://github.com/CopterExpress/clover). Платформа Клевера также включает в себя преднастроенный [образ для Raspberry Pi](image.md) в полным набором необходимого ПО для работы со всей периферией и [программирования автономных полетов](simple_offboard.md). Исходный код платформы Клевера и данной документации открыт и [доступен на GitHub](https://github.com/CopterExpress/clover).

View File

@@ -79,7 +79,10 @@
* [Взаимодействие с Arduino](arduino.md) * [Взаимодействие с Arduino](arduino.md)
* [Подключение GPS](gps.md) * [Подключение GPS](gps.md)
* [Работа с ИК датчиками](ir_sensors.md) * [Работа с ИК датчиками](ir_sensors.md)
* [Установка FPV](fpv.md) * [Установка FPV](fpv_clover_4_2.md)
* [Установка FPV (Клевер 3)](fpv.md)
* [Магнитный захват](magnetic_grip.md)
* [Механический захват](mechanical_grip.md)
* [Сборка шаровой защиты](sphere_guard.md) * [Сборка шаровой защиты](sphere_guard.md)
* [Управление в режиме тренера](trainer_mode.md) * [Управление в режиме тренера](trainer_mode.md)
* [Техника лужения](tinning.md) * [Техника лужения](tinning.md)
@@ -91,6 +94,8 @@
* [Светодиодная лента (legacy)](leds_old.md) * [Светодиодная лента (legacy)](leds_old.md)
* [Вклад в Клевер](contributing.md) * [Вклад в Клевер](contributing.md)
* [Переход на версию 0.20](migrate20.md) * [Переход на версию 0.20](migrate20.md)
* [COEX Duocam](duocam.md)
* [Виртуальная MAVLink-камера](duocam_mavlink.md)
* [Мероприятия](events.md) * [Мероприятия](events.md)
* [CopterHack-2021](copterhack2021.md) * [CopterHack-2021](copterhack2021.md)
* [CopterHack-2019](copterhack2019.md) * [CopterHack-2019](copterhack2019.md)

View File

@@ -14,7 +14,7 @@
## Запуск ## Запуск
Для того, чтобы открыть интерфейс блочного программирования в Клевере, [подключитесь к Клеверу по Wi-Fi](wifi.md) и перейдите на страницу http://192.168.11.1:8080/clover_blocks/ либо нажмите ссылку *Blocks programming* на [основной веб-странице Клевера](wifi.md#веб-интерфейс). Для того, чтобы открыть интерфейс блочного программирования в Клевере, [подключитесь к Клеверу по Wi-Fi](wifi.md) и перейдите на страницу http://192.168.11.1/clover_blocks/ либо нажмите ссылку *Blocks programming* на [основной веб-странице Клевера](wifi.md#веб-интерфейс).
Интерфейс выглядит следующим образом: Интерфейс выглядит следующим образом:

View File

@@ -2,7 +2,7 @@
Чтобы откалибровать датчики зайдите во вкладку *Vehicle Setup* и выберите меню *Sensors*. Чтобы откалибровать датчики зайдите во вкладку *Vehicle Setup* и выберите меню *Sensors*.
> **Caution** Если вы используете полетный контроллер *COEX Pix*, во всех графах *Autopilot Orientation* необходимо указать значение `ROTATION_ROLL_180_YAW_90`, иначе полетный контроллер будет не корректно воспринимать наклоны и повороты коптера. > **Caution** Если вы используете полетный контроллер [*COEX Pix*](coex_pix.md), во всех графах *Autopilot Orientation* необходимо указать значение `ROTATION_ROLL_180_YAW_90`, иначе полетный контроллер будет не корректно воспринимать наклоны и повороты коптера.
## Компас ## Компас

View File

@@ -63,9 +63,9 @@
### Нововведения ### Нововведения
* Заменен разъем USB Micro-B на раазъем USB Type-C. * Заменен разъем USB Micro-B на разъем USB Type-C.
* Изменен слот для MicroSD карт, на более глубокий. * Изменен слот для MicroSD карт, на более глубокий.
* Изменены назначения пинов на разьеме I2C. * Изменены назначения пинов на разъеме I2C.
* Добавлены ферритовые фильтры в цепи питания. * Добавлены ферритовые фильтры в цепи питания.
### Схемы расположения контактов ### Схемы расположения контактов

197
docs/ru/duocam.md Normal file
View File

@@ -0,0 +1,197 @@
# COEX DuoCam
"COEX DuoCam" это программно-аппаратный комплекс, позволяющий получать комбинированное визуально-тепловизионное изображение.
<img src="../assets/duocam/gitup_seek.jpg" width=400 class="center" alt="duocam">
В качестве источника визуальной картинки теоретически можно использовать любую камеру, имеющую CSI или HDMI-выход.
В качестве источника тепловизионной картинки можно использовать тепловизоры Seek Compact или Seek Compact Pro.
В качестве платформы для запуска обрабатывающего софта рекомендуется использовать одноплатный компьютер Raspberry Pi 4B.
## Подключение устройств
Тепловизор подключается в один из портов USB 3.0 на RPi4. Во второй USB 3.0-порт подключается Wi-Fi адаптер для осуществления связи с наземной станцией.
Визуальная камера подключается в CSI порт напрямую или через HDMI-CSI-конвертер.
В порт USB 2.0 следует подключить USB-flash устройство, на которое будет производиться сохранение фото и видеофайлов.
## Принцип работы
Программная часть осуществляет наложение тепловизионной картинки на визуальную. С помощью конфигурационного файла или виджета управления свойствами камеры в QGroundControl можно изменять результирующее изображение.
### Выбор модели тепловизора
Первоначально надо определиться, какая у вас модель тепловизора (простая или Pro) и выставить соответствующую настройку в конфиг-файле (`enable: yes` у seek_thermal_pro или seek_thermal в разделе thermal_camera_models. Важно не забыть выставить `enable: no` у камеры, которую не предполагается использовать).
### Управление наложением
При включенном визуальном (`show_visual: yes`) и термическом (`show_thermal: yes`) изображениях, термическое будет налагаться на визуальное в регион, заданный в свойстве `overlay_thermal_on_visual` (начальная точка с координатами `(x_start, y_start)`, ширина региона - `thermal_region_width`, высота - `thermal_region_height`).
Если отключить визуальное изображение (`show_visual: no`), то термическое развернется на весь экран.
Если отключить термическое (`show_thermal: no`), то будет транслироваться только визуальное.
Если отключить оба изображение перестанет транслироваться.
### Центровка
Для центровки результирующего изображения (из-за физического сдвига объективов камер термическое будет сдвинутого относительно центра визуального) следует использовать свойства раздела `final_frame_cropping`. Принцип аналогичен предыдущему разделу.
### Детекторы контуров (edge detectors)
Для облегчения понимания термического изображения, есть возможность включения наложения на него соответствующих контуров визуального изображения. В программе реализована поддержка двух алгоритмов детектирования контуров: [Sobel](https://docs.opencv.org/3.4/d2/d2c/tutorial_sobel_derivatives.html) и [Canny](https://docs.opencv.org/3.4/da/d5c/tutorial_canny_detector.html). В соответствующих разделах конфига (`apply_sobel` и `apply_canny`) можно поэкспериментировать с некоторыми свойствами детекторов.
### Колоризация
Для большей наглядности, тепловизионное изображение можно колорифицировать. Для этого необходимо выставить свойство `apply_colormap: yes`.
Конкретную схему колорификации можно выбрать из [списка](https://docs.opencv.org/2.4/modules/contrib/doc/facerec/colormaps.html), указав порядковый номер схемы в свойстве `colormap`.
### Свойства транслируемого видео и сохраняемых файлов
Свойства транслируемого видео можно изменять в разделе `output_video`. Делать это стоит с четким пониманием того, что делаешь - неправильные настройки могут сломать трансляцию. Например, разрешение видео должно совпадать с настройками gstreamer'а, который осуществляет последующее кодирование.
Для настройки сохраняемого на флеш-накопитель видео следует пользоваться группой свойств `encode_video`.
Каталоги для сохранения фото и видеофайлов можно указать в свойствах `path_to_save`.
### Настройки дополнительной отображаемой информации
Скрывать\показывать частоту кадров в секунду визуального и термического изображений можно при помощи свойства `show_fps`.
Показывать\скрывать перекрестие с температурой центрального пикселя можно при помощи свойства `draw_temp`.
### Подстройка температуры
В зависимости от используемого тепловизора, может потребоваться корректировка температурного диапазона. В секции `temperature_calibration` Доступны две настройки:
* Сдвиг (`offset`) - линейный сдвиг температурного диапазон на указанное число.
* Масштаб (`scale`) - пропорциональное изменение шкалы.
### Выравнивание градиента температуры от центра к краям
Если на тепловизионном изображении наблюдается "рамка", вызванная увеличением определяемой температуры к краям, то следует применить выравнивающий фильтр (виньетирование). Настройки располагаются в секции `vignette`:
* `enable` - включить-выключить наложение фильтра.
* `show_center` - показать точку "центра" для отладки ее положения.
* `center_x` - X-координата "центра".
* `center_y` - Y-координата "центра".
* `max_decrement_relative` - максимальное уменьшение температуры к краям.
## Виджет управления камерой для QGroundControl
![QGC_widget](../assets/duocam/qgc_duocam_widget.png)
### Где взять
QGC c необходимый функционалом для управления "COEX DuoCam" можно скачать в нашем [репозитории](https://github.com/CopterExpress/qgroundcontrol/releases). Скачивать следует тот релиз, в названии которого присутствует слово `duocam` с максимальным порядковым номером.
### Как использовать
При открытии виджета QGC пошлет MAVLink-сообщения с запросом текущих значений свойств. Необходимо дождаться, пока они все до конца загрузятся. Если загрузка не завершается в течение минуты, необходимо нажать кнопку "Refresh values".
При изменении значений свойств QGC осуществляет коммуникацию с DuoCam посредством протокола MAVLink, поэтому нет смысла очень часто нажимать контролы - наоборот, после нажатия следует дождаться изменения картинки и только потом переходить к следующему свойству.
[Подробнее об архитектуре DuoCam и программе `duocam-mavlink`](duocam_mavlink.md).
## Конфигурационный файл
Для более глубокой настройки DuoCam можно использовать конфигурационный файл.
### Как добраться
Для редактирования конфигурационного файла необходимо извлечь microSD-карту из RPi4, вставить в кард-ридер своего компьютера (от операционной системы требуется возможность читать файловую систему ext4), открыть файл по адресу `<microSD>/etc/duocam/camera.yaml`.
Также можно зайти по SSH на работающую RPi4 и отредактировать конфигурационный файл внутри системы по тому же пути.
### Образец конфигурационного файла
```yaml
show_visual: yes
show_thermal: yes
flip_thermal: no
apply_sobel:
enable: yes
sobel_scale: 3
sobel_delta: 0
apply_canny: no
draw_temp: yes
output_video:
device: /dev/video1
width: 1280
height: 720
bytes_per_pixel: 3
framerate: 20
path_to_save_photos: /media/usb0/
path_to_save_videos: /media/usb0/
encode_video:
width: 720
height: 480
framerate: 10
thermal_camera_models:
seek_thermal_pro:
enable: no
sensor_resolution:
width: 320
height: 240
overlay_thermal_on_visual:
# These values are for GitUp3
x_start: 282
y_start: 102
thermal_region_width: 600
thermal_region_height: 400
transparency: 0.3
# These values are for Raspicam
# x_start: 425
# y_start: 155
# thermal_region_width: 900
# thermal_region_height: 600
final_frame_cropping:
enable: yes
x_start: 0
y_start: 0
width: 1160
height: 610
seek_thermal:
enable: yes
sensor_resolution:
width: 206
height: 156
overlay_thermal_on_visual:
x_start: 282
y_start: 102
thermal_region_width: 600
thermal_region_height: 400
transparency: 0.3
final_frame_cropping:
enable: yes
x_start: 0
y_start: 0
width: 1160
height: 610
# Colormaps are taken from: https://docs.opencv.org/2.4/modules/contrib/doc/facerec/colormaps.html
# COLORMAP_AUTUMN = 0,
# COLORMAP_BONE = 1,
# COLORMAP_JET = 2,
# COLORMAP_WINTER = 3,
# COLORMAP_RAINBOW = 4,
# COLORMAP_OCEAN = 5,
# COLORMAP_SUMMER = 6,
# COLORMAP_SPRING = 7,
# COLORMAP_COOL = 8,
# COLORMAP_HSV = 9,
# COLORMAP_PINK = 10,
# COLORMAP_HOT = 11
apply_colormap:
enable: yes
colormap: 4
```

104
docs/ru/duocam_mavlink.md Normal file
View File

@@ -0,0 +1,104 @@
# Виртуальная MAVLink-камера COEX DuoCam
Полётные контроллеры поддерживают разные способы взаимодействия с внешними камерами, включая протокол MAVLink. Обычно коммуникация с помощью данного протокола требует использования UART-порта на полётном контроллере, но есть возможность работать с камерой в основном потоке MAVLink-телеметрии с БПЛА.
Утилита `duocam-mavlink` отвечает за работу виртуальной MAVLink-камеры и встраивается в общую телеметрию между полётным контроллером и QGroundControl.
![Блок-схема COEX DuoCam](../assets/duocam/duocam.png)
На блок-схеме прямыми линиями обозначены взаимодействия между блоками, пунктирными линиями уточняется характер взаимодействия.
> **Warning** Протокол взаимодействия находится в процессе модификации. В новых версиях планируется избавиться от прямой отправки значений параметров и их количества от `duocam-mavlink` к QGroundControl.
`duocam-camera` и `duocam-mavlink` обмениваются данными с помощью очередей POSIX. Имена очередей и формат сообщений доступен в репозитории [duocam-common](https://github.com/CopterExpress/duocam-common).
Для объединения блоков, взаимодействующих через MAVLink, можно использовать любой MAVLink-коммутатор/маршрутизатор, который либо позволяет отключить таблицу коммутации, либо заполняет её по схеме *MAVLink ID:Component ID* (например, `cmavnode`, `mavlink-fast-switch`, `mavlink-switch`).
> **Warning** При использовании `mavlink-fast-switch` требуется использовать `mavlink-serial-bridge`, либо любой другой мост для передачи MAVLink из последовательного порта в UDP, так как `mavlink-fast-switch` работает только с UDP.
## Конфигурационный файл
Для редактирования конфигурационного файла необходимо извлечь microSD-карту из RPi4, вставить в кард-ридер своего компьютера (от операционной системы требуется возможность читать файловую систему ext4), открыть файл по адресу `<microSD>/etc/duocam/mavlink.yaml`.
Также можно зайти по SSH на работающую RPi4 и отредактировать конфигурационный файл внутри системы по тому же пути.
Для корректной работы `duocam-mavlink` требуется *MAVLink ID* полётного контроллера (параметр `vehicle_id`) и `MAVLink ID` QGroundControl (параметр `qgc_vehicle_id`). `duocam-mavlink` ожидает телеметрию на UDP (параметры `ip` и `port`) и отправляет сообщения HEARTBEAT с частотой, согласно параметру `heartbeat_frequency`, представляясь, как компонент полётного контроллера `MAV_COMP_ID_CAMERA`.
Максимальная задержка от `duocam-camera` задаётся параметром `command_timeout`.
Если система DuoCam используется для полётов внутри помещений, то должен быть включен параметр `no_gps`.
## Пример конфигурационного файла
```yaml
# MAVLink vehicle ID that owns the camera
vehicle_id: 1
# Enable this flag for indoor use
no_gps: False
# QGC vehicle ID
qgc_vehicle_id: 255
mavlink:
# IP address of the interface to listen port on (0.0.0.0 for all interfaces)
ip: 127.0.0.1
# UDP port
port: 14540
# Heartbeat frequency (Hz)
heartbeat_frequency: 1.0
# Camera driver command timeout (s)
command_timeout: 3.0
```
## Пример конфигурационного файла для `mavlink-fast-switch`
```yaml
# MAVLink endpoints
endpoints:
# UAV endpoint
- name: "uav"
local:
port: 14588
# DuoCam MAVLink endpoint
- name: "duocam-mavlink"
remote:
ip: "127.0.0.1"
port: 14540
# GCS endpoint
- name: "gcs"
remote:
ip: "127.0.0.1"
port: 14550
# Enable MAVLink ID table
# HINT: Can't use this feature with duocam
id-table: False
```
## Пример конфигурационного файла для `mavlink-serial-bridge`
```yaml
# Serial device settings
serial:
# Device file
device: "/dev/ttyS0"
# Baudrate
baudrate: 57600
# Flow control (hardware, none)
flow: none
# Software serial TX buffer (bytes) (2048 by default)
tx-buffer: 2048
# UDP port settings
udp:
# Remote host settings (optional, listening mode if not presented)
remote:
ip: 127.0.0.1
port: 14588
# Lock remote host on the initial value (optional, False by default)
lock: True
# Broadcast mode (optional, False by default)
broadcast: False
# Local settings (optional, all interfaces and a random port by default)
local:
# Local IP address (0.0.0.0 to listen on all interfaces) (optional, all interfaces by default)
ip: 127.0.0.1
# Local UDP port (0 to select a random free port) (optional, 0 by default)
port: 0
```

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