mirror of
https://github.com/CopterExpress/clover.git
synced 2026-06-01 15:39:32 +00:00
Compare commits
49 Commits
fix-gpio
...
v0.23-rc.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
47e39d5331 | ||
|
|
e86b4da0ed | ||
|
|
6bcd670190 | ||
|
|
e3958d7fef | ||
|
|
fb47858010 | ||
|
|
b628825420 | ||
|
|
a525714e3a | ||
|
|
29fdbf23af | ||
|
|
6eacb8966a | ||
|
|
d8afb711f0 | ||
|
|
b3ac99fbef | ||
|
|
cba12e115e | ||
|
|
ae9a5154ab | ||
|
|
bb6a6c81f3 | ||
|
|
1878e467ac | ||
|
|
d27bbf31bd | ||
|
|
8668295cfe | ||
|
|
535b366bab | ||
|
|
9f6aa7dabd | ||
|
|
f4d00a47af | ||
|
|
0f438235c2 | ||
|
|
e4ad687e28 | ||
|
|
5d58ffd1db | ||
|
|
b2ed1fccc6 | ||
|
|
aa136e7f15 | ||
|
|
9743bcbaaf | ||
|
|
75aed624db | ||
|
|
75b63ad77d | ||
|
|
36a4962bc0 | ||
|
|
140535b0b4 | ||
|
|
2cd3be1139 | ||
|
|
6909ba5819 | ||
|
|
2a8c85144e | ||
|
|
f1783bdd0b | ||
|
|
528be179e6 | ||
|
|
fe588e7af9 | ||
|
|
15551db840 | ||
|
|
65bc74b5ec | ||
|
|
ac4f16f973 | ||
|
|
baf8b736d4 | ||
|
|
bb318ce93f | ||
|
|
d7b6968fee | ||
|
|
08f6aa7aee | ||
|
|
d5e729c66c | ||
|
|
27c83d062c | ||
|
|
04bc9fb017 | ||
|
|
b2928dd536 | ||
|
|
2a4163cbeb | ||
|
|
d1edc95ab5 |
4
.github/workflows/docs.yml
vendored
4
.github/workflows/docs.yml
vendored
@@ -10,6 +10,10 @@ jobs:
|
||||
docs:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- name: Cancel previous runs
|
||||
uses: styfle/cancel-workflow-action@0.9.1
|
||||
with:
|
||||
access_token: ${{ github.token }}
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v1
|
||||
|
||||
@@ -112,7 +112,7 @@ my_travis_retry pip3 install wheel
|
||||
my_travis_retry pip3 install -r /home/pi/catkin_ws/src/clover/clover/requirements.txt
|
||||
source /opt/ros/${ROS_DISTRO}/setup.bash
|
||||
# Don't build simulation plugins for actual drone
|
||||
catkin_make -j2 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCATKIN_BLACKLIST_PACKAGES=clover_gazebo_plugins
|
||||
catkin_make -j2 -DCMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
source devel/setup.bash
|
||||
|
||||
echo_stamp "Install clever package (for backwards compatibility)"
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<remap from="~pose_cov" to="aruco_map/pose"/>
|
||||
<remap from="~vpe" to="mavros/vision_pose/pose"/>
|
||||
<param name="frame_id" value="aruco_map_detected"/>
|
||||
<param name="publish_zero" value="true"/>
|
||||
<param name="force_init" value="true"/>
|
||||
<param name="offset_frame_id" value="aruco_map"/>
|
||||
</node>
|
||||
</launch>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Config file for mavros
|
||||
# Based on https://raw.githubusercontent.com/mavlink/mavros/master/mavros/launch/px4_config.yaml
|
||||
|
||||
startup_px4_usb_quirk: true
|
||||
startup_px4_usb_quirk: false
|
||||
|
||||
conn:
|
||||
heartbeat_rate: 1.0 # send hertbeat rate in Hertz
|
||||
@@ -13,6 +13,7 @@ time:
|
||||
time_ref_source: "fcu" # time_reference source
|
||||
timesync_mode: MAVLINK
|
||||
timesync_avg_alpha: 0.6 # timesync averaging factor
|
||||
publish_sim_time: false # don't publish /clock
|
||||
|
||||
global_position:
|
||||
frame_id: "map" # origin frame
|
||||
|
||||
@@ -53,6 +53,7 @@ private:
|
||||
std::unique_ptr<tf2_ros::Buffer> tf_buffer_;
|
||||
std::unique_ptr<tf2_ros::TransformListener> tf_listener_;
|
||||
bool calc_flow_gyro_;
|
||||
float flow_gyro_default_;
|
||||
|
||||
void onInit()
|
||||
{
|
||||
@@ -69,6 +70,7 @@ private:
|
||||
roi_px_ = nh_priv.param("roi", 128);
|
||||
roi_rad_ = nh_priv.param("roi_rad", 0.0);
|
||||
calc_flow_gyro_ = nh_priv.param("calc_flow_gyro", false);
|
||||
flow_gyro_default_ = nh_priv.param("flow_gyro_default", NAN);
|
||||
|
||||
img_pub_ = it_priv.advertise("debug", 1);
|
||||
flow_pub_ = nh.advertise<mavros_msgs::OpticalFlowRad>("mavros/px4flow/raw/send", 1);
|
||||
@@ -194,9 +196,9 @@ private:
|
||||
uint32_t integration_time_us = integration_time.toSec() * 1.0e6;
|
||||
|
||||
// Calculate flow gyro
|
||||
flow_.integrated_xgyro = NAN;
|
||||
flow_.integrated_ygyro = NAN;
|
||||
flow_.integrated_zgyro = NAN;
|
||||
flow_.integrated_xgyro = flow_gyro_default_;
|
||||
flow_.integrated_ygyro = flow_gyro_default_;
|
||||
flow_.integrated_zgyro = flow_gyro_default_;
|
||||
|
||||
if (calc_flow_gyro_) {
|
||||
try {
|
||||
|
||||
@@ -201,18 +201,13 @@ def check_fcu():
|
||||
if version_str == '':
|
||||
info('no version data available from SITL')
|
||||
|
||||
r = re.compile(r'^FW (git tag|version): (v?\d\.\d\.\d.*)$')
|
||||
is_clover_firmware = False
|
||||
for ver_line in version_str.split('\n'):
|
||||
match = r.search(ver_line)
|
||||
if match is not None:
|
||||
field, version = match.groups()
|
||||
info('firmware %s: %s' % (field, version))
|
||||
if 'clover' in version or 'clever' in version:
|
||||
is_clover_firmware = True
|
||||
|
||||
if not is_clover_firmware:
|
||||
failure('not running Clover PX4 firmware, https://clover.coex.tech/firmware')
|
||||
for line in version_str.split('\n'):
|
||||
if line.startswith('FW version: '):
|
||||
info(line[len('FW version: '):])
|
||||
elif line.startswith('FW git tag: '):
|
||||
info(line[len('FW git tag: '):])
|
||||
elif line.startswith('HW arch: '):
|
||||
info(line[len('HW arch: '):])
|
||||
|
||||
est = get_param('SYS_MC_EST_GROUP')
|
||||
if est == 1:
|
||||
@@ -485,6 +480,9 @@ def check_local_position():
|
||||
failure('roll is %.2f deg; place copter horizontally or redo level horizon calib',
|
||||
math.degrees(roll))
|
||||
|
||||
if not tf_buffer.can_transform('base_link', pose.header.frame_id, rospy.get_rostime(), rospy.Duration(0.5)):
|
||||
failure('can\'t transform from %s to base_link (timeout 0.5 s): is TF enabled?', pose.header.frame_id)
|
||||
|
||||
except rospy.ROSException:
|
||||
failure('no local position')
|
||||
|
||||
@@ -614,7 +612,7 @@ def check_boot_duration():
|
||||
output = subprocess.check_output('systemd-analyze').decode()
|
||||
r = re.compile(r'([\d\.]+)s\s*$', flags=re.MULTILINE)
|
||||
duration = float(r.search(output).groups()[0])
|
||||
if duration > 15:
|
||||
if duration > 20:
|
||||
failure('long Raspbian boot duration: %ss (systemd-analyze for analyzing)', duration)
|
||||
|
||||
|
||||
@@ -648,13 +646,22 @@ def check_clover_service():
|
||||
elif 'failed' in output:
|
||||
failure('service failed to run, check your launch-files')
|
||||
|
||||
r = re.compile(r'^(.*)\[(FATAL|ERROR)\] \[\d+.\d+\]: (.*?)(\x1b(.*))?$')
|
||||
BLACKLIST = 'Unexpected command 520', 'Time jump detected', 'different index:'
|
||||
|
||||
r = re.compile(r'^(.*)\[(FATAL|ERROR| WARN)\] \[\d+.\d+\]: (.*?)(\x1b(.*))?$')
|
||||
error_count = OrderedDict()
|
||||
try:
|
||||
for line in open('/tmp/clover.err', 'r'):
|
||||
skip = False
|
||||
for substr in BLACKLIST:
|
||||
if substr in line:
|
||||
skip = True
|
||||
if skip:
|
||||
continue
|
||||
|
||||
node_error = r.search(line)
|
||||
if node_error:
|
||||
msg = node_error.groups()[1] + ': ' + node_error.groups()[2]
|
||||
msg = node_error.groups()[1].strip() + ': ' + node_error.groups()[2]
|
||||
if msg in error_count:
|
||||
error_count[msg] += 1
|
||||
else:
|
||||
|
||||
@@ -181,6 +181,7 @@ inline bool waitTransform(const string& target, const string& source,
|
||||
ros::spinOnce();
|
||||
r.sleep();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
#define TIMEOUT(msg, timeout) (msg.header.stamp.isZero() || (ros::Time::now() - msg.header.stamp > timeout))
|
||||
@@ -847,6 +848,7 @@ bool land(std_srvs::Trigger::Request& req, std_srvs::Trigger::Response& res)
|
||||
busy = false;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
|
||||
@@ -141,11 +141,11 @@ int main(int argc, char **argv) {
|
||||
vpe_pub = nh_priv.advertise<PoseStamped>("vpe", 1);
|
||||
//vpe_cov_pub = nh_priv_.advertise<PoseStamped>("pose_cov_pub", 1);
|
||||
|
||||
if (nh_priv.param("publish_zero", false)) {
|
||||
if (nh_priv.param("force_init", false) || nh_priv.param("publish_zero", false)) { // publish_zero is old name
|
||||
// publish zero to initialize the local position
|
||||
zero_timer = nh.createTimer(ros::Duration(0.1), &publishZero);
|
||||
publish_zero_timout = ros::Duration(nh_priv.param("publish_zero_timout", 5.0));
|
||||
publish_zero_duration = ros::Duration(nh_priv.param("publish_zero_duration", 5.0));
|
||||
publish_zero_timout = ros::Duration(nh_priv.param("force_init_timeout", 5.0));
|
||||
publish_zero_duration = ros::Duration(nh_priv.param("force_init_duration", 5.0));
|
||||
local_position_sub = nh.subscribe("mavros/local_position/pose", 1, &localPositionCallback);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,11 +3,13 @@ const ros = new ROSLIB.Ros({ url: url });
|
||||
|
||||
ros.on('connection', function () {
|
||||
document.body.classList.add('connected');
|
||||
document.body.classList.remove('closed');
|
||||
init();
|
||||
});
|
||||
|
||||
ros.on('close', function () {
|
||||
document.body.classList.remove('connected');
|
||||
document.body.classList.add('closed');
|
||||
setTimeout(function() {
|
||||
// reconnect
|
||||
ros.connect(url);
|
||||
@@ -37,13 +39,14 @@ function viewTopicsList() {
|
||||
let rosdistro;
|
||||
|
||||
function viewTopic(topic) {
|
||||
title.innerHTML = topic;
|
||||
let index = '<a href=topics.html>Topics</a>';
|
||||
title.innerHTML = `${index}: ${topic}`;
|
||||
topicMessage.style.display = 'block';
|
||||
|
||||
ros.getTopicType(topic, function(typeStr) {
|
||||
const [pack, type] = typeStr.split('/');
|
||||
let href = `https://docs.ros.org/en/${rosdistro}/api/${pack}/html/msg/${type}.html`;
|
||||
title.innerHTML = `${topic} <a id="topic-type" href=${href} target="_blank">${typeStr}</a>`;
|
||||
title.innerHTML = `${index}: ${topic} <a id="topic-type" href=${href} target="_blank">${typeStr}</a>`;
|
||||
});
|
||||
|
||||
new ROSLIB.Topic({ ros: ros, name: topic }).subscribe(function(msg) {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
}
|
||||
#topic-type { font-family: monospace; font-size: 0.5em; vertical-align: super; font-weight: normal; }
|
||||
.topic { font-family: monospace; }
|
||||
body.closed { background-color: rgb(207, 207, 207); }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -464,7 +464,7 @@ Blockly.Python.led_count = function(block) {
|
||||
|
||||
function pigpio() {
|
||||
Blockly.Python.definitions_['import_pigpio'] = 'import pigpio';
|
||||
Blockly.Python.definitions_['init_pigpio'] = 'pi = pigpio.pi()';
|
||||
Blockly.Python.definitions_['init_pigpio'] = 'pi = pigpio.pi()\nif not pi.connected: raise Exception(\'Cannot connect to pigpiod\')';
|
||||
}
|
||||
|
||||
const GPIO_READ = `\ndef gpio_read(pin):
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
* [CopterHack-2019](copterhack2019.md)
|
||||
* [CopterHack-2018](copterhack2018.md)
|
||||
* [CopterHack-2017](copterhack2017.md)
|
||||
* [Video contest](video_contest.md)
|
||||
* [Clover-based projects](projects.md)
|
||||
* [Autonomous Multirotor Landing System (AMLS)](amls.md)
|
||||
* [Drone show](clever-show.md)
|
||||
|
||||
@@ -75,9 +75,9 @@ else:
|
||||
shape = 'undefined'
|
||||
color = 'undefined'
|
||||
|
||||
if shape = 'brown':
|
||||
if shape == 'brown':
|
||||
culture = "greshiha"
|
||||
if shape = 'yellow_orange':
|
||||
if shape == 'yellow_orange':
|
||||
culture = "pshenitsa"
|
||||
|
||||
image_sub = rospy.Subscriber('main_camera/image_raw', Image, image_colback_color)
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# ArUco markers
|
||||
|
||||
> **Note** The following applies to [image versions](image.md) **0.16** and up. Older documentation is still available for [for version **0.15.1**](https://github.com/CopterExpress/clover/blob/v0.15.1/docs/en/aruco.md).
|
||||
|
||||
[ArUco markers](https://docs.opencv.org/3.2.0/d5/dae/tutorial_aruco_detection.html) are commonly used for vision-based position estimation.
|
||||
|
||||
Examples of ArUco markers:
|
||||
|
||||
@@ -6,7 +6,7 @@ Software autorun
|
||||
systemd
|
||||
---
|
||||
|
||||
Main documentation: [https://wiki.archlinux.org/index.php/Systemd_(Russian)](https://wiki.archlinux.org/index.php/Systemd_(Russian)).
|
||||
Main documentation: [https://wiki.archlinux.org/title/Systemd](https://wiki.archlinux.org/title/Systemd).
|
||||
|
||||
All automatically started Clover software is launched as a `clover.service` systemd service.
|
||||
|
||||
@@ -50,12 +50,12 @@ You can add your own node to the list of automatically launched ones. To do this
|
||||
|
||||
The started file must have *permission* to run:
|
||||
|
||||
```(bash)
|
||||
```bash
|
||||
chmod +x my_program.py
|
||||
```
|
||||
|
||||
When scripting languages are used, [shebang] should be placed at the beginning of the file (https://ru.wikipedia.org/wiki/Shebang_(Unix)), for example:
|
||||
When scripting languages are used, a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) should be placed at the beginning of the file, for example:
|
||||
|
||||
```(bash)
|
||||
```bash
|
||||
#!/usr/bin/env python
|
||||
```
|
||||
|
||||
@@ -11,33 +11,35 @@ The proposed projects have to be open-source and be compatible with the Clover q
|
||||
## Projects of the contest's participants {#participants}
|
||||
|
||||
|Place|Team|Project|Points|
|
||||
|-|-|-|-|
|
||||
|:-:|-|-|-|
|
||||
||🇰🇬 Alatoo University Team|[Облачная платформа для симулятора Клевера](https://github.com/pteacher/clover/blob/clover_simulator/docs/ru/clover-development-studio.md)||
|
||||
||🇧🇾 FTL|[Advanced Clover 2](https://github.com/FTL-team/clover/blob/FTL-advancedClover2/docs/ru/advancedclover2.md)||
|
||||
||🇺🇸 EnviroFleet|[EnviroFleet](https://github.com/gueyman/clover/blob/envirofleet/docs/en/enviro_fleet.md)||
|
||||
||🇻🇳 Dragon&Tanker|[Dragon&Tanker](https://github.com/uml4/clover/blob/drone_observe_autonomous_car/docs/en/dragon_and_tanker_team.md)||
|
||||
||🇧🇾 FTL|[Advanced Clover 2](https://github.com/FTL-team/clover/blob/FTL-advancedClover2/docs/ru/advanced_clover_simulator.md)||
|
||||
||🇷🇺 Stereo|[Neural obstacle avoidance](https://github.com/den250400/clover/blob/neural-obstacle-avoidance/docs/en/neural-obstacle-avoidance.md)||
|
||||
||🇷🇺 Space clowns|[Copter For Space](https://github.com/slavikyd/clover/blob/patch-3/docs/ru/c4s.md)||
|
||||
||🇷🇺 R.S.|[Drone Hawk](https://github.com/slavaroot/clover/blob/droneHawkSecurity/docs/ru/drone-hawk-security.md)||
|
||||
||🇲🇾 Moopt|[IoT Water Monitoring & Optimization](https://github.com/kafechew/clover/blob/master/docs/en/moopt-uav.md)||
|
||||
||🇧🇷 Atena - Grupo SEMEAR|[Swarm in Blocks](https://github.com/Grupo-SEMEAR-USP/clover/blob/Swarm_in_Blocks/docs/en/Swarm_in_Blocks.md)||
|
||||
||🇧🇷 Atena - Grupo SEMEAR|[Swarm in Blocks](https://github.com/Grupo-SEMEAR-USP/clover/blob/Swarm_in_Blocks/docs/en/swarm_in_blocks.md)||
|
||||
||🇷🇺 Clevertron|[Clevertron](https://github.com/Daniel-drone/clover/blob/Clevertron-1/docs/ru/clevertron.md)||
|
||||
||🇷🇺 Clover Rescue Team|[Rescue Clover](https://github.com/DevMBS/clover/blob/CloverRescueTeam/docs/ru/clover-rescue-team.md)||
|
||||
||🇵🇱 Edgenoon|[Neural and vision-based landing method](https://github.com/edgenoon-ai/clover/blob/neural_vision_based_landing_method/docs/en/neural_vision_based_landing_method.md)||
|
||||
||🇷🇺 CopterCat|[CopterCat](https://github.com/matveylapin/clover/blob/CopterCat/docs/ru/сopter_сat.md)||
|
||||
||🇷🇺 Дрой Ронов|[Clover Swarm](https://github.com/stinger000/clever/blob/clover_swarm_request/docs/ru/clover-swarm.md)||
|
||||
||🇩🇪 Inondro|[Inondro Pix](https://github.com/Inondro/clover/blob/inondro-pix/docs/en/inondro_copterhack22_pix.md)||
|
||||
||🇷🇺 V-NAV|[Visual Navigation](https://github.com/v-nav/clover/blob/v-nav_article/docs/ru/v-nav.md)||
|
||||
||🇷🇺 Бизнес-гуси|[Drone Rover Climbing System](https://github.com/HexaHEX/clover/blob/CopterHack2022_Business_Geese-1/docs/ru/business_geese.md)||
|
||||
||🇷🇺 fuall|[Доставка дронами](https://github.com/Silly4s/clover/blob/master/docs/ru/dostavka.md)||
|
||||
||🇮🇳 DJS Phoenix|[Autonomous valet parking drone assistance](https://github.com/DJSPhoenix/clover/blob/DJSPhoenix-Ikshana/docs/en/djs_phoenix_ikshana.md)||
|
||||
||🇷🇺 Джедаи 1581|[Ретранслятор на базе Клевера](https://github.com/JJNIK/clover/blob/patch-1/docs/ru/1581.md)||
|
||||
||🇷🇺 SPECTRE|[SPECTRE](https://github.com/alakhmenev/clover/blob/spectre_team/docs/ru/spectre_team.md)||
|
||||
||🇷🇺 Lucky flight|[Swarm of Improved Clover](https://github.com/bessiaka/clover/blob/Lucky-flight/docs/ru/lucky_flight.md)||
|
||||
||🇷🇺 SolidEye|[Разработка лидара без движущихся частей](https://github.com/feanorgg/clover/blob/solideye/docs/ru/solid_eye.md)||
|
||||
||🇰🇬 AI_U_CLOVER|[AIU_CLOVER](https://github.com/zhibekm/clover/blob/zhibekm-patch-1/docs/en/aiu-article.md)||
|
||||
||🇷🇺 Scout_Drone|[Создание поисково-спасательного беспилотного летательного аппарата](https://github.com/MustafaNatur/clover/blob/Scout_Drone.md/docs/ru/scout_drone.md)||
|
||||
||🇷🇺 С305|[Система мониторинга воздуха](https://github.com/Ruslan2288/clover/blob/master/docs/ru/air_monitor.md)| |
|
||||
|✕|🇻🇳 Dragon&Tanker|[Dragon&Tanker](https://github.com/uml4/clover/blob/drone_observe_autonomous_car/docs/en/dragon_and_tanker_team.md)||
|
||||
|✕|🇷🇺 V-NAV|[Visual Navigation](https://github.com/v-nav/clover/blob/v-nav_article/docs/ru/v-nav.md)||
|
||||
|✕|🇷🇺 Джедаи 1581|[Ретранслятор на базе Клевера](https://github.com/JJNIK/clover/blob/patch-1/docs/ru/1581.md)||
|
||||
|✕|🇷🇺 Lucky flight|[Swarm of Improved Clover](https://github.com/bessiaka/clover/blob/Lucky-flight/docs/ru/lucky_flight.md)||
|
||||
|✕|🇺🇸 EnviroFleet|[EnviroFleet](https://github.com/gueyman/clover/blob/envirofleet/docs/en/enviro_fleet.md)||
|
||||
|✕|🇷🇺 Бизнес-гуси|[Drone Rover Climbing System](https://github.com/HexaHEX/clover/blob/CopterHack2022_Business_Geese-1/docs/ru/business_geese.md)||
|
||||
|✕|🇷🇺 fuall|[Доставка дронами](https://github.com/Silly4s/clover/blob/master/docs/ru/dostavka.md)||
|
||||
|✕|🇷🇺 Scout_Drone|[Создание поисково-спасательного беспилотного летательного аппарата](https://github.com/MustafaNatur/clover/blob/Scout_Drone.md/docs/ru/scout_drone.md)| |
|
||||
|
||||
✕ – teams which haven't qualified for the Final.
|
||||
|
||||
## Company case competition
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ Examples of MAVLink messages:
|
||||
* `GLOBAL_POSITION_INT` – global position of the quadcopter (latitude/longitude/altitude);
|
||||
* `COMMAND_LONG` – a command to the quadcopter (take off, land, toggle modes, etc).
|
||||
|
||||
A complete list of MAVLink messages is available in [MAVLink documentation] (http://mavlink.org/messages/common).
|
||||
A complete list of MAVLink messages is available in [MAVLink documentation](https://mavlink.io/en/messages/common.html).
|
||||
|
||||
### System, system component
|
||||
|
||||
|
||||
@@ -51,8 +51,6 @@ python3 flight.py
|
||||
Below is a complete flight program that performs a takeoff, flies forward and lands:
|
||||
|
||||
```python
|
||||
#coding: utf8
|
||||
|
||||
import rospy
|
||||
from clover import srv
|
||||
from std_srvs.srv import Trigger
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Raspberry Pi
|
||||
============
|
||||
|
||||
**Raspberry Pi** is a single-board computer that fits in the palm, created on the basis of ARM mobile microprocessor. It features low energy consumption, and it can even run on solar panels. Raspberry Pi 3 is included in the kits for programmable quadcopters "Clover".
|
||||
**Raspberry Pi** is a single-board computer that fits in the palm, created on the basis of ARM mobile microprocessor. It features low energy consumption, and it can even run on solar panels. A Raspberry Pi is included in the kits for programmable quadcopters "Clover".
|
||||
|
||||
<img src="../assets/raspberry.png" class="center zoom" alt="Raspberry Pi 3" width="400">
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ Each topic has the a of messages it passes. ROS include a lot of standard messag
|
||||
|Message type|Description|
|
||||
|-|-|
|
||||
|[`std_msgs/Int64`](https://docs.ros.org/api/std_msgs/html/msg/Int64.html)|Integer number.|
|
||||
|[`std_msgs/Float64`](https://docs.ros.org/api/std_msgs/html/msg/Float64.html)|Double-precision floating-point number|
|
||||
|[`std_msgs/Float64`](https://docs.ros.org/api/std_msgs/html/msg/Float64.html)|Double-precision floating-point number.|
|
||||
|[`std_msgs/String`](https://docs.ros.org/api/std_msgs/html/msg/String.html)|String.|
|
||||
|[`geometry_msgs/PoseStamped`](https://docs.ros.org/api/geometry_msgs/html/msg/PoseStamped.html)|Position and orientation of an object in a given [coordinate system](frames.md) and a time stamp (widely used for passing the robot pose or some robot's part pose).|
|
||||
|[`geometry_msgs/TwistStamped`](https://docs.ros.org/api/geometry_msgs/html/msg/TwistStamped.html)|Linear and angular velocity of an object in a given coordinate system and a time stamp.|
|
||||
|
||||
@@ -43,7 +43,7 @@ Axis or Grid configured to frame `aruco_map` will visualize the location [on the
|
||||
|
||||
### jsk_rviz_plugins
|
||||
|
||||
It is also recommended to install additional useful plugins for rviz [jsk_rviz_plugins](https://jsk-docs.readthedocs.io/en/latest/jsk_visualization/doc/jsk_rviz_plugins/index.html). This kit allows visualizing topics like `TwistStamped` (velocity) `CameraInfo`, `PolygonArray`, and many more. To install, use command:
|
||||
It is also recommended to install additional useful plugins for rviz [jsk_rviz_plugins](https://jsk-visualization.readthedocs.io/en/latest/jsk_rviz_plugins/index.html). This kit allows visualizing topics like `TwistStamped` (velocity) `CameraInfo`, `PolygonArray`, and many more. To install, use command:
|
||||
|
||||
```(bash)
|
||||
sudo apt-get install ros-melodic-jsk-visualization
|
||||
|
||||
@@ -4,31 +4,56 @@ Setting up the simulation environment from scratch requires some effort, but res
|
||||
|
||||
> **Hint** See up-to-date commands set for installation Clover simulation software in the script, that builds the virtual machine image with the simulator: [`install_software.sh`](https://github.com/CopterExpress/clover_vm/blob/master/scripts/install_software.sh).
|
||||
|
||||
Prerequisites: Ubuntu 20.04 and [ROS Noetic](http://wiki.ros.org/noetic/Installation/Ubuntu).
|
||||
Prerequisites: **Ubuntu 20.04**.
|
||||
|
||||
## Install ROS
|
||||
|
||||
Install ROS Noetic using the [official installation manual](http://wiki.ros.org/noetic/Installation/Ubuntu) (Desktop or Full install).
|
||||
|
||||
Add sourcing ROS' `setup.bash` initialization script to your `.bashrc`:
|
||||
|
||||
```bash
|
||||
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
Install required tools:
|
||||
|
||||
```bash
|
||||
sudo apt install build-essential git python3-pip python3-rosdep
|
||||
```
|
||||
|
||||
## Create a workspace for the simulation
|
||||
|
||||
Throughout this guide we will be using the `catkin_ws` as the workspace name. Feel free to change it in your setup. We will be creating it in the home directory of the current user (`~`).
|
||||
|
||||
Create the workspace and clone Clover sources:
|
||||
Create a workspace for the simulation:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/catkin_ws/src
|
||||
cd ~/catkin_ws
|
||||
catkin_make
|
||||
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
Clone Clover sources:
|
||||
|
||||
```bash
|
||||
cd ~/catkin_ws/src
|
||||
git clone --depth 1 https://github.com/CopterExpress/clover
|
||||
git clone --depth 1 https://github.com/CopterExpress/ros_led
|
||||
git clone --depth 1 https://github.com/ethz-asl/mav_comm
|
||||
```
|
||||
|
||||
Install all prerequisites using `rosdep`:
|
||||
Install all dependencies using `rosdep`:
|
||||
|
||||
```bash
|
||||
cd ~/catkin_ws
|
||||
sudo rosdep init
|
||||
rosdep update
|
||||
rosdep install --from-paths src --ignore-src -y
|
||||
```
|
||||
|
||||
Install Python-dependencies:
|
||||
Install Python dependencies:
|
||||
|
||||
```bash
|
||||
sudo /usr/bin/python3 -m pip install -r ~/catkin_ws/src/clover/clover/requirements.txt
|
||||
@@ -36,15 +61,19 @@ sudo /usr/bin/python3 -m pip install -r ~/catkin_ws/src/clover/clover/requiremen
|
||||
|
||||
## Get PX4 sources
|
||||
|
||||
PX4 will be built along with the other packages in our workspace. You may clone it directly into the workspace or put it somewhere and symlink to `~/catkin_ws/src`. We will need to put its `sitl_gazebo` submodule in `~/catkin_ws/src` as well. For simplicity's sake we will clone the firmware directly to the workspace:
|
||||
PX4 will be built along with the other packages in our workspace. You may clone it directly into the workspace or put it somewhere and symlink to `~/catkin_ws/src`. We will need to put its `sitl_gazebo` and `mavlink` submodules into `~/catkin_ws/src` as well.
|
||||
|
||||
Clone PX4 sources and make the required symlinks:
|
||||
|
||||
```bash
|
||||
cd ~/catkin_ws/src
|
||||
git clone --recursive --depth 1 --branch v1.12.0 https://github.com/PX4/PX4-Autopilot.git ~/PX4-Autopilot
|
||||
ln -s ~/PX4-Autopilot ~/catkin_ws/src/PX4-Autopilot
|
||||
ln -s ~/PX4-Autopilot/Tools/sitl_gazebo ~/catkin_ws/src/sitl_gazebo
|
||||
ln -s ~/PX4-Autopilot ~/catkin_ws/src/
|
||||
ln -s ~/PX4-Autopilot/Tools/sitl_gazebo ~/catkin_ws/src/
|
||||
ln -s ~/PX4-Autopilot/mavlink ~/catkin_ws/src/
|
||||
```
|
||||
|
||||
> **Hint** You may use more recent PX4 version, but there would be more risk of something would not be working.
|
||||
|
||||
## Install PX4 prerequisites
|
||||
|
||||
PX4 comes with its own script for dependency installation. We may as well leverage it:
|
||||
@@ -56,10 +85,12 @@ sudo ./ubuntu.sh
|
||||
|
||||
This will install everything required to build PX4 and its SITL environment.
|
||||
|
||||
You may want to skip installing the ARM toolchain if you're not planning on compiling PX4 for your flight controller. To do this, use the `--no-nuttx` flag:
|
||||
> **Hint** You may want to skip installing the ARM toolchain if you're not planning on compiling PX4 for your flight controller. To do this, use the `--no-nuttx` flag: `sudo ./ubuntu.sh --no-nuttx`.
|
||||
|
||||
```
|
||||
sudo ./ubuntu.sh --no-nuttx
|
||||
Install more required Python packages:
|
||||
|
||||
```bash
|
||||
pip3 install --user toml
|
||||
```
|
||||
|
||||
## Add the Clover airframe
|
||||
@@ -67,7 +98,7 @@ sudo ./ubuntu.sh --no-nuttx
|
||||
Add the Clover airframe to PX4 using the command:
|
||||
|
||||
```bash
|
||||
ln -s "$(catkin_find clover_simulation airframes)"/* ~/PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/airframes/
|
||||
ln -s ~/catkin_ws/src/clover/clover_simulation/airframes/* ~/PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/airframes/
|
||||
```
|
||||
|
||||
## Install geographiclib datasets
|
||||
@@ -80,20 +111,44 @@ sudo /opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh
|
||||
|
||||
## Build the simulator
|
||||
|
||||
With all dependencies installed, you can build your workspace:
|
||||
Build your workspace:
|
||||
|
||||
```bash
|
||||
cd ~/catkin_ws
|
||||
catkin_make
|
||||
```
|
||||
|
||||
> **Note** Some of the files - particularly Gazebo plugins - require large amounts of RAM to be built. You may wish to reduce the number of parallel jobs; the number of parallel jobs should be equal to the amount of RAM in gigabytes divided by 2 - so a 16GB machine should use no more than 8 jobs. You can specify the number of jobs using the `-j` flag: `catkin_make -j8`
|
||||
> **Note** If building fails with RAM issues (`c++: fatal error: Killed signal terminated program cc1plus`), reduce the number of parallel jobs using `-j` key. For example, to use only two parallel jobs use `catkin_make -j2` command.
|
||||
|
||||
## Run the simulator
|
||||
|
||||
In order to be sure that everything was built correctly, try running the simulator for the first time:
|
||||
|
||||
```bash
|
||||
source ~/catkin_ws/devel/setup.bash
|
||||
roslaunch clover_simulation simulator.launch
|
||||
```
|
||||
|
||||
You can test autonomous flight using example scripts in `~/catkin_ws/src/clover/clover/examples` directory.
|
||||
|
||||
## Additional steps
|
||||
|
||||
Optionally, install roscore systemd service to have roscore running in background:
|
||||
|
||||
```bash
|
||||
sed -i "s/pi/$USER/g" ~/catkin_ws/src/clover/builder/assets/roscore.service
|
||||
sudo cp ~/catkin_ws/src/clover/builder/assets/roscore.service /etc/systemd/system
|
||||
sudo systemctl enable roscore
|
||||
sudo systemctl start roscore
|
||||
```
|
||||
|
||||
Install any web server to serve Clover's web tools (`~/.ros/www` directory), e. g. Monkey:
|
||||
|
||||
```bash
|
||||
wget https://github.com/CopterExpress/clover_vm/raw/master/assets/packages/monkey_1.6.9-1_amd64.deb -O /tmp/monkey_1.6.9-1_amd64.deb
|
||||
sudo apt-get install -y /tmp/monkey_1.6.9-1_amd64.deb
|
||||
sed "s/pi/$USER/g" ~/catkin_ws/src/clover/builder/assets/monkey | sudo tee /etc/monkey/sites/default
|
||||
sudo -E sh -c "sed -i 's/SymLink Off/SymLink On/' /etc/monkey/monkey.conf"
|
||||
sudo cp ~/catkin_ws/src/clover/builder/assets/monkey.service /etc/systemd/system/monkey.service
|
||||
sudo systemctl enable monkey
|
||||
sudo systemctl start monkey
|
||||
```
|
||||
|
||||
@@ -5,7 +5,7 @@ PX4 Simulation
|
||||
|
||||
Main article: https://dev.px4.io/en/simulation/
|
||||
|
||||
PX4 simulation is possible in Linux and macOS with the use of physical environment simulation systems [jMAVSim](https://pixhawk.org/dev/hil/jmavsim) and [the Gazebo](http://gazebosim.org).
|
||||
PX4 simulation is possible in Linux and macOS with the use of physical environment simulation systems [jMAVSim](https://docs.px4.io/master/en/simulation/jmavsim.html) and [the Gazebo](http://gazebosim.org).
|
||||
|
||||
jMAVSim is a lightweight environment intended only for testing multi-rotor aircraft systems; Gazebo is a versatile environment for all types of robots.
|
||||
|
||||
|
||||
@@ -399,3 +399,45 @@ while not rospy.is_shutdown():
|
||||
break
|
||||
rospy.sleep(0.2)
|
||||
```
|
||||
|
||||
### # {#get-param}
|
||||
|
||||
Read flight controller's parameter:
|
||||
|
||||
```python
|
||||
from mavros_msgs.srv import ParamGet
|
||||
from mavros_msgs.msg import ParamValue
|
||||
|
||||
# ...
|
||||
|
||||
param_get = rospy.ServiceProxy('mavros/param/get', ParamGet)
|
||||
|
||||
# ...
|
||||
|
||||
# Read parameter of type INT
|
||||
value = param_get(param_id='COM_FLTMODE1').value.integer
|
||||
|
||||
# Read parameter of type FLOAT
|
||||
value = param_get(param_id='MPC_Z_P').value.float
|
||||
```
|
||||
|
||||
### # {#set-param}
|
||||
|
||||
Set flight controller's parameter:
|
||||
|
||||
```python
|
||||
from mavros_msgs.srv import ParamSet
|
||||
from mavros_msgs.msg import ParamValue
|
||||
|
||||
# ...
|
||||
|
||||
param_set = rospy.ServiceProxy('mavros/param/set', ParamSet)
|
||||
|
||||
# ...
|
||||
|
||||
# Set parameter of type INT:
|
||||
param_set(param_id='COM_FLTMODE1', value=ParamValue(integer=8))
|
||||
|
||||
# Set parameter of type FLOAT:
|
||||
param_set(param_id='MPC_Z_P', value=ParamValue(real=1.5))
|
||||
```
|
||||
|
||||
@@ -89,7 +89,7 @@ while True:
|
||||
|
||||
### Filtering the data
|
||||
|
||||
To filter (smooth out) the data and delete [outliers](https://en.wikipedia.org/wiki/Outlier), [Kalman filter](https://en.wikipedia.org/wiki/Kalman_filter) or a simple [median filter](https://ru.wikipedia.org/wiki/Median_filter) can be used. An example of median filtering implementation:
|
||||
To filter (smooth out) the data and delete [outliers](https://en.wikipedia.org/wiki/Outlier), [Kalman filter](https://en.wikipedia.org/wiki/Kalman_filter) or a simple [median filter](https://en.wikipedia.org/wiki/Median_filter) can be used. An example of median filtering implementation:
|
||||
|
||||
```python
|
||||
import collections
|
||||
|
||||
25
docs/en/video_contest.md
Normal file
25
docs/en/video_contest.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Contest for the best educational video on assembly and configuration
|
||||
|
||||
Requirements:
|
||||
|
||||
- the video contains the entire process of assembling and configuring the Clover 4.2 drone kit: from opening the box with components to flying the copter in Position mode using ArUco markers;
|
||||
- the video is uploaded to YouTube and is public accessible;
|
||||
- the video contains voice-over in English;
|
||||
- the video lasts from 6 to 60 minutes.
|
||||
|
||||
Dates of the contest: February 12 – December 13, 2021.
|
||||
|
||||
## Prizes
|
||||
|
||||
- 🥇 1st place: $500 (USD).
|
||||
- 🥈 2nd place: $300 (USD).
|
||||
- 🥉 3rd place: $200 (USD).
|
||||
|
||||
## Results
|
||||
|
||||
|Place|Participant|Link to the video|
|
||||
|:-:|-|-|
|
||||
|1|🇷🇺 Philipp Batalin|https://www.youtube.com/watch?v=f0rpdulOSEk|
|
||||
|2|🇮🇹 Sara Pettinari|https://www.youtube.com/watch?v=PxxfyVH6RRA|
|
||||
|3|🇲🇾 Kai Feng Chew|https://www.youtube.com/watch?v=skgSwFle6Ms|
|
||||
|3|🇰🇿 Nikita Lobanov|https://www.youtube.com/watch?v=93b1epEM3SQ|
|
||||
@@ -17,7 +17,7 @@
|
||||
* [Работа с FS-A8S](rc_flysky_a8s.md)
|
||||
* [Полетные режимы](modes.md)
|
||||
* [Настройка питания](power.md)
|
||||
* [Настройка failsafe](failsafe.md)
|
||||
* [Настройка Failsafe](failsafe.md)
|
||||
* [Ручной полет](flight.md)
|
||||
* [Упражнения](flight_exercises.md)
|
||||
* [Работа с Raspberry Pi](raspberry.md)
|
||||
@@ -114,6 +114,7 @@
|
||||
* [Робокросс-2019](robocross2019.md)
|
||||
* [CopterHack-2018](copterhack2018.md)
|
||||
* [CopterHack-2017](copterhack2017.md)
|
||||
* [Конкурс видео](video_contest.md)
|
||||
* [Проекты на базе Клевера](projects.md)
|
||||
* [Система автоматической посадки (AMLS)](amls.md)
|
||||
* [Разработка системы для управления БПЛА с помощью шлема виртуальной реальности](remote-control-with-oculusvr.md)
|
||||
|
||||
@@ -75,9 +75,9 @@ else:
|
||||
shape = 'undefined'
|
||||
color = 'undefined'
|
||||
|
||||
if shape = 'brown':
|
||||
if shape == 'brown':
|
||||
culture = "greshiha"
|
||||
if shape = 'yellow_orange':
|
||||
if shape == 'yellow_orange':
|
||||
culture = "pshenitsa"
|
||||
|
||||
image_sub = rospy.Subscriber('main_camera/image_raw', Image, image_colback_color)
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
4. Последовательно устанавливайте квадрокоптер в каждую из указанных ориентаций до появления желтой рамки.
|
||||
5. Вращайте квадрокоптер по направлению стрелки до появления зеленой рамки.
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/v1.9.0/en/config/compass.html.
|
||||
> **Warning** Последние версии прошивки PX4 не поддерживают внутренний компас на полетном контроллере COEX Pix. При появлении ошибки *No mags found* перейдите во вкладку *Parameters*, установите параметры `SYS_HAS_MAG` в `0`, `EKF2_MAG_TYPE` в `None` и перезагрузите полетный контроллер (*Tools* => *Reboot Vehicle*).
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/master/en/config/compass.html.
|
||||
|
||||
## Гироскоп
|
||||
|
||||
@@ -27,7 +29,7 @@
|
||||
|
||||
> **Warning** Во время калибровки гироскопа квадрокоптер не должен менять своего положения, шататься и т. д.
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/v1.9.0/en/config/gyroscope.html.
|
||||
Дополнительная информация: https://docs.px4.io/master/en/config/gyroscope.html.
|
||||
|
||||
## Акселерометр
|
||||
|
||||
@@ -38,7 +40,7 @@
|
||||
3. Последовательно устанавливайте квадрокоптер в каждую из указанных ориентаций до появления желтой рамки.
|
||||
4. Держите квадрокоптер неподвижно до появления зеленой рамки.
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/v1.9.0/en/config/accelerometer.html.
|
||||
Дополнительная информация: https://docs.px4.io/master/en/config/accelerometer.html.
|
||||
|
||||
## Уровень горизонта
|
||||
|
||||
@@ -50,6 +52,6 @@
|
||||
4. Нажмите *OK*.
|
||||
5. Дождитесь окончания калибровки.
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/v1.9.0/en/config/level_horizon_calibration.html.
|
||||
Дополнительная информация: https://docs.px4.io/master/en/config/level_horizon_calibration.html.
|
||||
|
||||
**Далее**: [Настройка пульта](radio.md).
|
||||
|
||||
@@ -42,4 +42,4 @@ sudo systemctl start clever-blocks.service
|
||||
python main.py
|
||||
```
|
||||
|
||||
После запуска Вы можете открыть веб-интерфейс для блочного программирования по адресу [192.168.11.1:5000](192.168.11.1:5000).
|
||||
После запуска Вы можете открыть веб-интерфейс для блочного программирования по адресу [192.168.11.1:5000](http://192.168.11.1:5000).
|
||||
|
||||
@@ -11,33 +11,35 @@ CopterHack 2022 — это международный конкурс по ра
|
||||
## Проекты участников конкурса {#participants}
|
||||
|
||||
|Место|Команда|Проект|Балл|
|
||||
|-|-|-|-|
|
||||
|:-:|-|-|-|
|
||||
||🇰🇬 Alatoo University Team|[Облачная платформа для симулятора Клевера](https://github.com/pteacher/clover/blob/clover_simulator/docs/ru/clover-development-studio.md)||
|
||||
||🇧🇾 FTL|[Advanced Clover 2](https://github.com/FTL-team/clover/blob/FTL-advancedClover2/docs/ru/advancedclover2.md)||
|
||||
||🇺🇸 EnviroFleet|[EnviroFleet](https://github.com/gueyman/clover/blob/envirofleet/docs/en/enviro_fleet.md)||
|
||||
||🇻🇳 Dragon&Tanker|[Dragon&Tanker](https://github.com/uml4/clover/blob/drone_observe_autonomous_car/docs/en/dragon_and_tanker_team.md)||
|
||||
||🇧🇾 FTL|[Advanced Clover 2](https://github.com/FTL-team/clover/blob/FTL-advancedClover2/docs/ru/advanced_clover_simulator.md)||
|
||||
||🇷🇺 Stereo|[Neural obstacle avoidance](https://github.com/den250400/clover/blob/neural-obstacle-avoidance/docs/en/neural-obstacle-avoidance.md)||
|
||||
||🇷🇺 Space clowns|[Copter For Space](https://github.com/slavikyd/clover/blob/patch-3/docs/ru/c4s.md)||
|
||||
||🇷🇺 R.S.|[Drone Hawk](https://github.com/slavaroot/clover/blob/droneHawkSecurity/docs/ru/drone-hawk-security.md)||
|
||||
||🇲🇾 Moopt|[IoT Water Monitoring & Optimization](https://github.com/kafechew/clover/blob/master/docs/en/moopt-uav.md)||
|
||||
||🇧🇷 Atena - Grupo SEMEAR|[Swarm in Blocks](https://github.com/Grupo-SEMEAR-USP/clover/blob/Swarm_in_Blocks/docs/en/Swarm_in_Blocks.md)||
|
||||
||🇧🇷 Atena - Grupo SEMEAR|[Swarm in Blocks](https://github.com/Grupo-SEMEAR-USP/clover/blob/Swarm_in_Blocks/docs/en/swarm_in_blocks.md)||
|
||||
||🇷🇺 Clevertron|[Clevertron](https://github.com/Daniel-drone/clover/blob/Clevertron-1/docs/ru/clevertron.md)||
|
||||
||🇷🇺 Clover Rescue Team|[Rescue Clover](https://github.com/DevMBS/clover/blob/CloverRescueTeam/docs/ru/clover-rescue-team.md)||
|
||||
||🇵🇱 Edgenoon|[Neural and vision-based landing method](https://github.com/edgenoon-ai/clover/blob/neural_vision_based_landing_method/docs/en/neural_vision_based_landing_method.md)||
|
||||
||🇷🇺 CopterCat|[CopterCat](https://github.com/matveylapin/clover/blob/CopterCat/docs/ru/сopter_сat.md)||
|
||||
||🇷🇺 Дрой Ронов|[Clover Swarm](https://github.com/stinger000/clever/blob/clover_swarm_request/docs/ru/clover-swarm.md)||
|
||||
||🇩🇪 Inondro|[Inondro Pix](https://github.com/Inondro/clover/blob/inondro-pix/docs/en/inondro_copterhack22_pix.md)||
|
||||
||🇷🇺 V-NAV|[Visual Navigation](https://github.com/v-nav/clover/blob/v-nav_article/docs/ru/v-nav.md)||
|
||||
||🇷🇺 Бизнес-гуси|[Drone Rover Climbing System](https://github.com/HexaHEX/clover/blob/CopterHack2022_Business_Geese-1/docs/ru/business_geese.md)||
|
||||
||🇷🇺 fuall|[Доставка дронами](https://github.com/Silly4s/clover/blob/master/docs/ru/dostavka.md)||
|
||||
||🇮🇳 DJS Phoenix|[Autonomous valet parking drone assistance](https://github.com/DJSPhoenix/clover/blob/DJSPhoenix-Ikshana/docs/en/djs_phoenix_ikshana.md)||
|
||||
||🇷🇺 Джедаи 1581|[Ретранслятор на базе Клевера](https://github.com/JJNIK/clover/blob/patch-1/docs/ru/1581.md)||
|
||||
||🇷🇺 SPECTRE|[SPECTRE](https://github.com/alakhmenev/clover/blob/spectre_team/docs/ru/spectre_team.md)||
|
||||
||🇷🇺 Lucky flight|[Swarm of Improved Clover](https://github.com/bessiaka/clover/blob/Lucky-flight/docs/ru/lucky_flight.md)||
|
||||
||🇷🇺 SolidEye|[Разработка лидара без движущихся частей](https://github.com/feanorgg/clover/blob/solideye/docs/ru/solid_eye.md)||
|
||||
||🇰🇬 AI_U_CLOVER|[AIU_CLOVER](https://github.com/zhibekm/clover/blob/zhibekm-patch-1/docs/en/aiu-article.md)||
|
||||
||🇷🇺 Scout_Drone|[Создание поисково-спасательного беспилотного летательного аппарата](https://github.com/MustafaNatur/clover/blob/Scout_Drone.md/docs/ru/scout_drone.md)||
|
||||
||🇷🇺 С305|[Система мониторинга воздуха](https://github.com/Ruslan2288/clover/blob/master/docs/ru/air_monitor.md)| |
|
||||
|✕|🇻🇳 Dragon&Tanker|[Dragon&Tanker](https://github.com/uml4/clover/blob/drone_observe_autonomous_car/docs/en/dragon_and_tanker_team.md)||
|
||||
|✕|🇷🇺 V-NAV|[Visual Navigation](https://github.com/v-nav/clover/blob/v-nav_article/docs/ru/v-nav.md)||
|
||||
|✕|🇷🇺 Джедаи 1581|[Ретранслятор на базе Клевера](https://github.com/JJNIK/clover/blob/patch-1/docs/ru/1581.md)||
|
||||
|✕|🇷🇺 Lucky flight|[Swarm of Improved Clover](https://github.com/bessiaka/clover/blob/Lucky-flight/docs/ru/lucky_flight.md)||
|
||||
|✕|🇺🇸 EnviroFleet|[EnviroFleet](https://github.com/gueyman/clover/blob/envirofleet/docs/en/enviro_fleet.md)||
|
||||
|✕|🇷🇺 Бизнес-гуси|[Drone Rover Climbing System](https://github.com/HexaHEX/clover/blob/CopterHack2022_Business_Geese-1/docs/ru/business_geese.md)||
|
||||
|✕|🇷🇺 fuall|[Доставка дронами](https://github.com/Silly4s/clover/blob/master/docs/ru/dostavka.md)||
|
||||
|✕|🇷🇺 Scout_Drone|[Создание поисково-спасательного беспилотного летательного аппарата](https://github.com/MustafaNatur/clover/blob/Scout_Drone.md/docs/ru/scout_drone.md)| |
|
||||
|
||||
✕ – команды, не дошедшие до финала.
|
||||
|
||||
## Направление "кейс компании"
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# Настройка failsafe
|
||||
# Настройка Failsafe
|
||||
|
||||
Основная статья: https://docs.px4.io/master/en/config/safety.html.
|
||||
|
||||
Во вкладке *Safety* настраиваются реакции квадрокоптера на различные нештатные ситуации. Рекомендуется включить как минимум реакцию на потерю связи с пультом управления:
|
||||
|
||||
1. Откройте вкладку *Safety*.
|
||||
1. В программе QGroundControl перейдите в панель *Vehicle Setup* и выберите меню *Safety*.
|
||||
2. В блоке *RC Loss Failsafe Trigger* выберите один из рекомендуемых вариантов реакции на потерю связи с пультом:
|
||||
* *Land mode* – переход в режим посадки;
|
||||
* *Terminate* – аварийное отключение моторов.
|
||||
3. В поле *RC Loss Timeout* выберите значение таймаута, по истечении которого связь с пультом считается потерянной. Рекомендуемое значение – 0.5 s.
|
||||
3. В поле *RC Loss Timeout* выберите значение таймаута, по истечении которого связь с пультом считается потерянной. Рекомендуемое значение – 2 s.
|
||||
|
||||
<img src="../assets/qgc-failsafe.png" alt="QGroundControl failsafe" class="zoom">
|
||||
|
||||
@@ -29,7 +29,7 @@ MAVLink-сообщение это отдельная "порция" данных
|
||||
* `GLOBAL_POSITION_INT` – глобальная позиция квадрокоптера (широта/долгота/высота);
|
||||
* `COMMAND_LONG` – команда для квадрокоптера (взлететь, сесть, переключить режим и т. д.).
|
||||
|
||||
Полный список MAVLink-сообщений можно посмотреть в [документации MAVLink](http://mavlink.org/messages/common).
|
||||
Полный список MAVLink-сообщений можно посмотреть в [документации MAVLink](https://mavlink.io/en/messages/common.html).
|
||||
|
||||
### Система, компонент системы
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
# Полетные режимы
|
||||
|
||||
**Режим** полетного контроллера PX4 определяет, как именно коптер (или другое ТС) должно себя вести: каким образом интерпретировать входящие команды и сигналы с пульта. Режим переключается одним из переключателей на пульте радиоуправления.
|
||||
**Режим** полетного контроллера PX4 определяет, как именно квадрокоптер (или другой аппарат) должен себя вести: каким образом интерпретировать входящие команды и сигналы с пульта. Режим переключается одним из переключателей на пульте радиоуправления.
|
||||
|
||||
Чтобы настроить полетные режимы:
|
||||
|
||||
1. Зайдите во вкладку *Vehicle Setup*.
|
||||
1. В программе QGroundControl перейдите в панель *Vehicle Setup*.
|
||||
2. Выберите меню *Flight Modes*.
|
||||
3. Установите переключатель режимов на переключатель SwC (Channel 6).
|
||||
4. Выберите необходимые полетные режимы.
|
||||
3. Установите переключатель режимов (*Mode Channel*) на переключатель SwC (*Channel 6*).
|
||||
4. Опционально, установите экстренное отключение пропеллеров (*Emergency Kill Switch Channel*) на переключатель SwA (*Channel 5*).
|
||||
5. Выберите необходимые полетные режимы.
|
||||
|
||||
Рекомендуемые полетные режимы:
|
||||
|
||||
@@ -15,8 +16,8 @@
|
||||
* Flight Mode 4: *Altitude*.
|
||||
* Flight Mode 6: *Position*.
|
||||
|
||||
5. Проверьте корректность переключения режимов, переключая переключатель на пульте.
|
||||
6. Назначьте аварийное отключение моторов (*Kill switch*) на переключатель SwA (Channel 5).
|
||||
6. Проверьте корректность переключения режимов, переключая переключатель на пульте.
|
||||
7. Назначьте аварийное отключение моторов (*Kill switch*) на переключатель SwA (Channel 5).
|
||||
|
||||
<img src="../assets/qgc-modes.png" class="zoom" alt="QGroundControl modes">
|
||||
|
||||
|
||||
@@ -4,9 +4,7 @@
|
||||
|
||||
## Включение
|
||||
|
||||
> **Hint** Необходимо использование [специальной сборки PX4 для Клевера](firmware.md#прошивка-для-клевера).
|
||||
|
||||
Необходимо использование дальномера. [Подключите и настройте дальномер VL53L1X](laser.md), используя инструкцию.
|
||||
> **Hint** Для работы Optical Flow необходим [подключенный и настроенный лазерный дальномер](laser.md).
|
||||
|
||||
Включите Optical Flow в файле `~/catkin_ws/src/clover/clover/launch/clover.launch`:
|
||||
|
||||
@@ -14,7 +12,7 @@
|
||||
<arg name="optical_flow" default="true"/>
|
||||
```
|
||||
|
||||
Optical Flow публикует данные в топик `mavros/px4flow/raw/send`. Кроме того, в топик `optical_flow/debug` публикуется визуализация, которую можно просмотреть с помощью [web_video_server](web_video_server.md).
|
||||
Optical Flow публикует данные в топик `/mavros/px4flow/raw/send`. Кроме того, в топик `/optical_flow/debug` публикуется визуализация, которую можно просмотреть с помощью [web_video_server](web_video_server.md).
|
||||
|
||||
> **Info** Для правильной работы модуль камеры должен быть корректно подключен и [сконфигурирован](camera.md).
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Настройка PID регуляторов
|
||||
|
||||
Основная статья: https://docs.px4.io/v1.9.0/en/config_mc/pid_tuning_guide_multicopter.html.
|
||||
Основная статья: https://docs.px4.io/master/en/config_mc/pid_tuning_guide_multicopter.html.
|
||||
|
||||
В этой статье описаны методы и основные технологии настройки каскадного ПИД-регулятора. Приведенные советы и методики подходят для любых видов рам (Квадрокоптеров, Гексакоптеров, Октокоптеров и т.д.).
|
||||
|
||||
|
||||
@@ -6,15 +6,16 @@
|
||||
|
||||
> **Note** Калибровка делителя напряжения должна выполняться с подключенным АКБ.
|
||||
|
||||
В случае отсутствия индикатора напряжения или невозможности ручной калибровки, установите усредненное значение делителя напряжения для комплекта Клевер 4 (*Voltage divider* = 11).
|
||||
|
||||
1. Установите параметр *Number of cells* в соответствии с количеством банок в АКБ (*3S* для Клевера 4).
|
||||
2. Откалибруйте делитель напряжения:
|
||||
1. В программе QGroundControl перейдите в панель *Vehicle Setup* и выберите меню *Power*.
|
||||
2. Установите параметр *Number of cells* в соответствии с количеством банок в АКБ (*3S* для Клевера 4).
|
||||
3. Откалибруйте делитель напряжения:
|
||||
* Подключите индикатор напряжения к балансировочному разъему АКБ.
|
||||
* Нажмите кнопку *Calculate* напротив надписи *Voltage Divider*.
|
||||
* Введите в открывшемся поле суммарное значение напряжения с индикатора напряжения.
|
||||
* Нажмите *Close*, чтобы сохранить рассчитанное значение.
|
||||
|
||||
В случае отсутствия индикатора напряжения или невозможности ручной калибровки, установите усредненное значение делителя напряжения для комплекта Клевер 4 (*Voltage divider* = 11).
|
||||
|
||||
<img src="../assets/qgc-voltage-divider.png" class="zoom">
|
||||
|
||||
Дополнительная информация: https://docs.qgroundcontrol.com/en/SetupView/Power.html.
|
||||
@@ -30,6 +31,6 @@
|
||||
|
||||
<img src="../assets/qgc-power.png" class="zoom">
|
||||
|
||||
Дополнительная информация: https://docs.px4.io/v1.9.0/en/advanced_config/esc_calibration.html.
|
||||
Дополнительная информация: https://docs.px4.io/master/en/advanced_config/esc_calibration.html.
|
||||
|
||||
**Далее**: [настройка Failsafe](failsafe.md).
|
||||
|
||||
@@ -51,8 +51,6 @@ python3 flight.py
|
||||
Пример программы для полета (взлет, пролет вперед, посадка):
|
||||
|
||||
```python
|
||||
# coding: utf8
|
||||
|
||||
import rospy
|
||||
from clover import srv
|
||||
from std_srvs.srv import Trigger
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
## Подключение пульта
|
||||
|
||||
1. Зайдите во вкладку *Vehicle Setup* и выберите меню *Radio*.
|
||||
1. В программе QGroundControl перейдите в панель *Vehicle Setup* и выберите меню *Radio*.
|
||||
2. Включите пульт, переводя переключатель *POWER* в верхнее положение.
|
||||
3. Убедитесь, что связь с приемником установлена.
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ Axis или Grid настроенный на фрейм `aruco_map` будут
|
||||
|
||||
### jsk_rviz_plugins
|
||||
|
||||
Рекомендуется также установка набора дополнительных полезных плагинов для rviz [jsk_rviz_plugins](https://jsk-docs.readthedocs.io/en/latest/jsk_visualization/doc/jsk_rviz_plugins/index.html). Это набор позволяет визуализировать топики типа `TwistStamped` (скорость), `CameraInfo`, `PolygonArray` и многое другое. Для установки используйте команду:
|
||||
Рекомендуется также установка набора дополнительных полезных плагинов для rviz [jsk_rviz_plugins](https://jsk-visualization.readthedocs.io/en/latest/jsk_rviz_plugins/index.html). Это набор позволяет визуализировать топики типа `TwistStamped` (скорость), `CameraInfo`, `PolygonArray` и многое другое. Для установки используйте команду:
|
||||
|
||||
```bash
|
||||
sudo apt-get install ros-melodic-jsk-visualization
|
||||
|
||||
@@ -16,33 +16,26 @@
|
||||
|
||||
<img src="../assets/pix-sd.png" alt="Pixracer и MicroSD-карта" class="zoom center" width=400>
|
||||
|
||||
* Установите карту в компьютер (используйте адаптер при необходимости).
|
||||
* Отформатируйте карту в файловую систему FAT32. Для этого кликните на значок SD-карты в "Проводнике" и нажмите "Форматирование" в Windows. Используйте "Дисковую утилиту" в macOS.
|
||||
* Выполните "Безопасное извлечение" карты, извлеките карту.
|
||||
* Установите карту в полетный контроллер.
|
||||
1. Установите карту в компьютер (используйте адаптер при необходимости).
|
||||
2. Отформатируйте карту в файловую систему FAT32. Для этого кликните на значок SD-карты в "Проводнике" и нажмите "Форматирование" в Windows. Используйте "Дисковую утилиту" в macOS.
|
||||
3. Выполните "Безопасное извлечение" карты, извлеките карту.
|
||||
4. Установите карту в полетный контроллер.
|
||||
|
||||
## Загрузка прошивки в полетный контроллер
|
||||
|
||||
Основная статья: https://docs.qgroundcontrol.com/en/SetupView/Firmware.html.
|
||||
Для использования всех наиболее актуальных функций PX4 используйте последнюю версию прошивки PX4 (*1.12+*).
|
||||
|
||||
> **Note** Перед осуществлением перепрошивки Pixracer не должен быть подключен к компьютеру по USB.
|
||||
> **Note** Альтернативой является использование более старой прошивки (*1.8.2*) [с патчами COEX](firmware.md). В этой прошивке функциональность автономных полетов является более оттестированной и отлаженной. Прошивка может быть скачана с GitHub — **<a class="latest-firmware v4" href="https://github.com/CopterExpress/Firmware/releases">Скачать</a>**.
|
||||
|
||||
Для Клевера, в особенности для осуществления автономных полетов, рекомендуется использовать версию прошивки PX4 от Copter Express. Скачайте актуальную версию прошивки на GitHub — **<a class="latest-firmware v4" href="https://github.com/CopterExpress/Firmware/releases">скачать</a>**.
|
||||
|
||||
> **Info** Для квадрокоптеров с Pixhawk (Клевер 2) существует отдельная версия прошивки. Подробности смотрите в статье "[Прошивка полетного контроллера](firmware.md)".
|
||||
|
||||
Загрузите прошивку в полетный контролер:
|
||||
1. Отключите полетный контроллер от компьютера (если он подключен).
|
||||
2. Запустите программу QGroundControl.
|
||||
3. Перейдите в панель *Vehicle Setup* (кликнув на логотип QGroundControl в левом верхнем углу) и выберите меню *Firmware*.
|
||||
4. Подключите полетный контроллер к компьютеру по USB.
|
||||
5. Выберите в появившемся меню справа *PX4 Flight Stack*.
|
||||
|
||||
<img src="../assets/qgc-firmware.png" alt="QGroundControl firmware upload" class="zoom">
|
||||
|
||||
1. Запустите программу QGroundControl.
|
||||
2. Зайдите во вкладку *Vehicle Setup*.
|
||||
3. Выберите меню *Firmware*.
|
||||
4. Подключите Pixracer к компьютеру по USB.
|
||||
5. Дождитесь подключения Pixracer к QGroundControl.
|
||||
6. Выберите в меню справа *PX4 Flight Stack*.
|
||||
|
||||
Для загрузки прошивки от Copter Express (рекомендуется):
|
||||
Для загрузки прошивки COEX:
|
||||
|
||||
* Выберите *Advanced settings*.
|
||||
* В выпадающем меню выберите *Custom firmware file...*
|
||||
|
||||
@@ -4,16 +4,40 @@
|
||||
|
||||
> **Hint** Смотрите актуальный набор команд установки необходимого ПО для запуска симулятора Клевера в скрипте сборки виртуальной машины с симулятором: [`install_software.sh`](https://github.com/CopterExpress/clover_vm/blob/master/scripts/install_software.sh).
|
||||
|
||||
Требования для сборки: Ubuntu 20.04 и [ROS Noetic](http://wiki.ros.org/noetic/Installation/Ubuntu).
|
||||
Требования для сборки: **Ubuntu 20.04**.
|
||||
|
||||
## Установка ROS
|
||||
|
||||
Установите ROS Noetic используя [официальную документацию по установке](http://wiki.ros.org/noetic/Installation/Ubuntu) (Desktop или Full установка).
|
||||
|
||||
Добавьте выполнение инициализирующего скрипта ROS `setup.bash` в ваш файл `.bashrc`:
|
||||
|
||||
```bash
|
||||
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
Установите необходимые инструменты, которые понадобятся для дальнейшей установки:
|
||||
|
||||
```bash
|
||||
sudo apt install build-essential git python3-pip python3-rosdep
|
||||
```
|
||||
|
||||
## Создание рабочего пространства для симулятора
|
||||
|
||||
В этой статье мы будем использовать `catkin_ws` как имя рабочего пространства (вы можете поменять её). Мы создадим её в домашнем каталоге текущего пользователя (`~`).
|
||||
|
||||
Создайте рабочее пространство и загрузите исходный код Клевера:
|
||||
Создайте рабочее пространство:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/catkin_ws/src
|
||||
cd ~/catkin_ws
|
||||
catkin_make
|
||||
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
Склонируйте исходный код пакетов Clover:
|
||||
|
||||
```bash
|
||||
cd ~/catkin_ws/src
|
||||
git clone --depth 1 https://github.com/CopterExpress/clover
|
||||
git clone --depth 1 https://github.com/CopterExpress/ros_led
|
||||
@@ -24,6 +48,7 @@ git clone --depth 1 https://github.com/ethz-asl/mav_comm
|
||||
|
||||
```bash
|
||||
cd ~/catkin_ws
|
||||
sudo rosdep init
|
||||
rosdep update
|
||||
rosdep install --from-paths src --ignore-src -y
|
||||
```
|
||||
@@ -36,15 +61,19 @@ sudo /usr/bin/python3 -m pip install -r ~/catkin_ws/src/clover/clover/requiremen
|
||||
|
||||
## Загрузка исходного кода PX4
|
||||
|
||||
Сборка PX4 будет осуществлена вместе с другими пакетами в нашем рабочем пространстве. Вы можете загрузить его прямо в рабочее пространство или поместить куда-нибудь и создать симлинк к `~/catkin_ws/src`. Нам также нужно будет поместить его подмодуль `sitl_gazebo` в `~/catkin_ws/src`. Для упрощения мы загрузим прошивку прямо в рабочее пространство:
|
||||
Сборка PX4 будет осуществлена вместе с другими пакетами в нашем рабочем пространстве. Вы можете загрузить его прямо в рабочее пространство или поместить куда-нибудь и создать симлинк к `~/catkin_ws/src`. Нам также нужно будет поместить его подмодули `sitl_gazebo` и `mavlink` в `~/catkin_ws/src`.
|
||||
|
||||
Склонируйте исходный код PX4 и создайте необходимые симлинки:
|
||||
|
||||
```bash
|
||||
cd ~/catkin_ws/src
|
||||
git clone --recursive --depth 1 --branch v1.12.0 https://github.com/PX4/PX4-Autopilot.git ~/PX4-Autopilot
|
||||
ln -s ~/PX4-Autopilot ~/catkin_ws/src/PX4-Autopilot
|
||||
ln -s ~/PX4-Autopilot/Tools/sitl_gazebo ~/catkin_ws/src/sitl_gazebo
|
||||
ln -s ~/PX4-Autopilot ~/catkin_ws/src/
|
||||
ln -s ~/PX4-Autopilot/Tools/sitl_gazebo ~/catkin_ws/src/
|
||||
ln -s ~/PX4-Autopilot/mavlink ~/catkin_ws/src/
|
||||
```
|
||||
|
||||
> **Hint** Вы можете использовать более позднюю версию PX4 с большим риском, что что-то не заработает.
|
||||
|
||||
## Установка зависимостей PX4
|
||||
|
||||
PX4 имеет свой собственный скрипт для установки зависимостей. Воспользуемся им:
|
||||
@@ -56,10 +85,12 @@ sudo ./ubuntu.sh
|
||||
|
||||
Он установит все, что нужно для сборки PX4 и SITL.
|
||||
|
||||
Также вы можете пропустить установку ARM тулчейна, если вы не планируете компилировать PX4 для вашего полетного контроллера. Для этого воспользуйтесь флагом `--no-nuttx`:
|
||||
> **Hint** Также вы можете пропустить установку ARM тулчейна, если вы не планируете компилировать PX4 для вашего полетного контроллера. Для этого воспользуйтесь флагом `--no-nuttx`: `sudo ./ubuntu.sh --no-nuttx`.
|
||||
|
||||
```
|
||||
sudo ./ubuntu.sh --no-nuttx
|
||||
Установите дополнительные необходимые Python-пакеты:
|
||||
|
||||
```bash
|
||||
pip3 install --user toml
|
||||
```
|
||||
|
||||
## Добавление рамы Клевера
|
||||
@@ -67,7 +98,7 @@ sudo ./ubuntu.sh --no-nuttx
|
||||
Добавьте в PX4 раму Клевера с помощью следующей команды:
|
||||
|
||||
```bash
|
||||
ln -s "$(catkin_find clover_simulation airframes)"/* ~/PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/airframes/
|
||||
ln -s ~/catkin_ws/src/clover/clover_simulation/airframes/* ~/PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/airframes/
|
||||
```
|
||||
|
||||
## Установка датасетов geographiclib
|
||||
@@ -87,13 +118,37 @@ cd ~/catkin_ws
|
||||
catkin_make
|
||||
```
|
||||
|
||||
> **Note** Некоторые файлы, особенно плагины Gazebo, требуют большого объема оперативной памяти для сборки. Вы можете уменьшить количество параллельных процессов; количество параллельных процессов должно быть равно объёму RAM в гигабайтах, поделенному на 2. Например, для машины с 16Гб следует указывать не более 8 процессов. Вы можете указать количество процессов, используя флаг `-j` : ```catkin_make -j8```
|
||||
> **Note** Если процесс сборки завершится с ошибкой, связанной с недостатком памяти (`c++: fatal error: Killed signal terminated program cc1plus`), уменьшите количество параллельно исполняемых процессов используя ключ `-j`. Например, чтобы использовать только два параллельных процесса используйте команду `catkin_make -j2`.
|
||||
|
||||
## Запуск симулятора
|
||||
|
||||
Чтобы удостовериться в том, что все было собрано корректно, попробуйте запустить симулятор:
|
||||
|
||||
```bash
|
||||
source ~/catkin_ws/devel/setup.bash
|
||||
roslaunch clover_simulation simulator.launch
|
||||
```
|
||||
|
||||
Вы можете проверить автономный полет используя скрипты в директории `~/catkin_ws/src/clover/clover/examples`.
|
||||
|
||||
## Дополнительные шаги
|
||||
|
||||
Опционально вы можете установить systemd-сервис для roscore для того, чтобы roscore был постоянно запущен в фоне:
|
||||
|
||||
```bash
|
||||
sed -i "s/pi/$USER/g" ~/catkin_ws/src/clover/builder/assets/roscore.service
|
||||
sudo cp ~/catkin_ws/src/clover/builder/assets/roscore.service /etc/systemd/system
|
||||
sudo systemctl enable roscore
|
||||
sudo systemctl start roscore
|
||||
```
|
||||
|
||||
Установите любой веб-сервер, чтобы раздавать веб-инструменты Клевера (директория `~/.ros/www`), например, Monkey:
|
||||
|
||||
```bash
|
||||
wget https://github.com/CopterExpress/clover_vm/raw/master/assets/packages/monkey_1.6.9-1_amd64.deb -O /tmp/monkey_1.6.9-1_amd64.deb
|
||||
sudo apt-get install -y /tmp/monkey_1.6.9-1_amd64.deb
|
||||
sed "s/pi/$USER/g" ~/catkin_ws/src/clover/builder/assets/monkey | sudo tee /etc/monkey/sites/default
|
||||
sudo -E sh -c "sed -i 's/SymLink Off/SymLink On/' /etc/monkey/monkey.conf"
|
||||
sudo cp ~/catkin_ws/src/clover/builder/assets/monkey.service /etc/systemd/system/monkey.service
|
||||
sudo systemctl enable monkey
|
||||
sudo systemctl start monkey
|
||||
```
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
Основная статья: https://dev.px4.io/en/simulation/
|
||||
|
||||
Симуляция PX4 возможна в ОС GNU/Linux и macOS с использованием систем симуляции физической среды [jMAVSim](https://pixhawk.org/dev/hil/jmavsim) и [Gazebo](http://gazebosim.org).
|
||||
Симуляция PX4 возможна в ОС GNU/Linux и macOS с использованием систем симуляции физической среды [jMAVSim](https://docs.px4.io/master/en/simulation/jmavsim.html) и [Gazebo](http://gazebosim.org).
|
||||
|
||||
jMAVSim является легковесной средой, предназначенной только для тестирование мультироторных летательных систем; Gazebo – универсальная среда для любых типов роботов.
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* Пакеты [ROS](http://www.ros.org/), требуемые для запуска нод Клевера
|
||||
* Собранный для симулятора PX4
|
||||
* Легковесный web-интерфейс для Gazebo [Gzweb](http://gazebosim.org/gzweb.html)
|
||||
* Web-терминал [Butterfly](http://paradoxxxzero.github.io/2014/02/28/butterfly.html)
|
||||
* Web-терминал [Butterfly](https://github.com/paradoxxxzero/butterfly)
|
||||
|
||||
## Предварительная настройка
|
||||
|
||||
|
||||
@@ -417,3 +417,45 @@ while not rospy.is_shutdown():
|
||||
break
|
||||
rospy.sleep(0.2)
|
||||
```
|
||||
|
||||
### # {#get-param}
|
||||
|
||||
Считать параметр полетного контроллера:
|
||||
|
||||
```python
|
||||
from mavros_msgs.srv import ParamGet
|
||||
from mavros_msgs.msg import ParamValue
|
||||
|
||||
# ...
|
||||
|
||||
param_get = rospy.ServiceProxy('mavros/param/get', ParamGet)
|
||||
|
||||
# ...
|
||||
|
||||
# Считать параметр типа INT
|
||||
value = param_get(param_id='COM_FLTMODE1').value.integer
|
||||
|
||||
# Считать параметр типа FLOAT
|
||||
value = param_get(param_id='MPC_Z_P').value.float
|
||||
```
|
||||
|
||||
### # {#set-param}
|
||||
|
||||
Изменить параметр полетного контроллера:
|
||||
|
||||
```python
|
||||
from mavros_msgs.srv import ParamSet
|
||||
from mavros_msgs.msg import ParamValue
|
||||
|
||||
# ...
|
||||
|
||||
param_set = rospy.ServiceProxy('mavros/param/set', ParamSet)
|
||||
|
||||
# ...
|
||||
|
||||
# Изменить параметр типа INT:
|
||||
param_set(param_id='COM_FLTMODE1', value=ParamValue(integer=8))
|
||||
|
||||
# Изменить параметр типа FLOAT:
|
||||
param_set(param_id='MPC_Z_P', value=ParamValue(real=1.5))
|
||||
```
|
||||
|
||||
25
docs/ru/video_contest.md
Normal file
25
docs/ru/video_contest.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Конкурс на лучшее образовательное видео по сборке и настройке
|
||||
|
||||
Требования:
|
||||
|
||||
- видео содержит весь процесс сборки и настройки конструктора Клевер 4.2: от открытия коробки с компонентами до летающего Коптера в режиме Position по ArUco-маркерам;
|
||||
- видео загружено на YouTube и находится в открытом доступе;
|
||||
- видео содержит озвучивание и субтитры на русском языке;
|
||||
- видео длится от 6 до 60 минут.
|
||||
|
||||
Даты проведения конкурса: 12 февраля – 13 декабря 2021.
|
||||
|
||||
## Призы
|
||||
|
||||
- 🥇 1 место: $500.
|
||||
- 🥈 2 место: $300.
|
||||
- 🥉 3 место: $200.
|
||||
|
||||
## Результаты
|
||||
|
||||
|Место|Участник|Ссылка на видео|
|
||||
|:-:|-|-|
|
||||
|1|🇷🇺 Филипп Баталин|https://www.youtube.com/watch?v=f0rpdulOSEk|
|
||||
|2|🇮🇹 Sara Pettinari|https://www.youtube.com/watch?v=PxxfyVH6RRA|
|
||||
|3|🇲🇾 Kai Feng Chew|https://www.youtube.com/watch?v=skgSwFle6Ms|
|
||||
|3|🇰🇿 Никита Лобанов|https://www.youtube.com/watch?v=93b1epEM3SQ|
|
||||
@@ -63,6 +63,7 @@
|
||||
{ "from": "power/", "to": "en/power.html" },
|
||||
{ "from": "connection/", "to": "en/connection.html" },
|
||||
{ "from": "clover_vm/", "to": "en/simulation_vm.html" },
|
||||
{ "from": "gpio/", "to": "en/gpio.html" },
|
||||
|
||||
{ "from": "ru/microsd_images.html", "to": "image.html" },
|
||||
{ "from": "en/microsd_images.html", "to": "image.html" }
|
||||
|
||||
Reference in New Issue
Block a user