Compare commits
21 Commits
v0.21-alph
...
v0.21
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91252d8d50 | ||
|
|
c4b94390e9 | ||
|
|
1b4167365e | ||
|
|
01ec592abb | ||
|
|
e2e2e04381 | ||
|
|
27e0189cf5 | ||
|
|
e3d89cbc4c | ||
|
|
a0ac85e0d3 | ||
|
|
83e5911110 | ||
|
|
05d634d2d3 | ||
|
|
4967d651bd | ||
|
|
91f948d3f4 | ||
|
|
ebf55244f4 | ||
|
|
5b6d08e25d | ||
|
|
8036214406 | ||
|
|
5d3c8c89cb | ||
|
|
2075fa52ef | ||
|
|
b0e1e1ffae | ||
|
|
4482f973db | ||
|
|
b1c7ee6b66 | ||
|
|
ff9e669352 |
@@ -22,6 +22,7 @@
|
||||
"ROS Kinetic",
|
||||
"ROS Melodic",
|
||||
"OpenCV",
|
||||
"OpenVPN",
|
||||
"Gazebo",
|
||||
"GitHub",
|
||||
"FPV",
|
||||
@@ -106,7 +107,9 @@
|
||||
"UDP",
|
||||
"QR",
|
||||
"Li-ion",
|
||||
"Nvidia"
|
||||
"Nvidia",
|
||||
"VirtualBox",
|
||||
"VMware"
|
||||
],
|
||||
"code_blocks": false
|
||||
},
|
||||
|
||||
@@ -10,7 +10,7 @@ env:
|
||||
- IMAGE_VERSION=${TRAVIS_TAG:-${TRAVIS_COMMIT:0:7}}
|
||||
- IMAGE_NAME="$(basename -s '.git' ${TARGET_REPO})_${IMAGE_VERSION}.img"
|
||||
git:
|
||||
depth: 50
|
||||
depth: 25
|
||||
jobs:
|
||||
fast_finish: true
|
||||
include:
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
- cp images/*.zip imgcache
|
||||
after_success:
|
||||
- sudo chmod -R 777 *
|
||||
- cd images && zip ${IMAGE_NAME}.zip ${IMAGE_NAME} && stat --printf="Compressed image size:%s\n" ${IMAGE_NAME}.zip
|
||||
- cd images && zip -9 ${IMAGE_NAME}.zip ${IMAGE_NAME} && stat --printf="Compressed image size:%s\n" ${IMAGE_NAME}.zip
|
||||
before_deploy:
|
||||
# Set up git user name and tag this commit
|
||||
- git config --local user.name "goldarte"
|
||||
|
||||
12
README.md
@@ -1,12 +1,14 @@
|
||||
# COEX Clover Drone Kit
|
||||
# clover🍀: create autonomous drones easily
|
||||
|
||||
<img src="docs/assets/clever4-front-white.png" align="right" width="400px" alt="Clover Drone">
|
||||
<img src="docs/assets/clever4-front-white.png" align="right" width="400px" alt="COEX Clover Drone">
|
||||
|
||||
Clover is an educational programmable drone kit consisting of an unassembled quadcopter, open source software and documentation. The kit includes Pixracer-compatible autopilot running PX4 firmware, Raspberry Pi 4 as companion computer, a camera for computer vision navigation as well as additional sensors and peripheral devices.
|
||||
Clover is an open source [ROS](https://www.ros.org)-based framework, providing user-friendly tools to control [PX4](https://px4.io)-powered drones. Clover is available as a ROS package, but is shipped mainly as a preconfigured image for Raspberry Pi. Once you've installed Raspberry Pi on your drone and flashed the image to its microSD card, taking the drone up in the air is a matter of minutes.
|
||||
|
||||
The main documentation is available [on Gitbook](https://clover.coex.tech/).
|
||||
COEX Clover Drone is an educational programmable drone kit, suited perfectly for running clover software. The kit is shipped unassembled and includes Pixracer-compatible autopilot running PX4 firmware, Raspberry Pi 4 as a companion computer, a camera for computer vision navigation as well as additional sensors and peripheral devices. Batteries included.
|
||||
|
||||
Official website: <a href="https://coex.tech/clover">coex.tech/clover</a>.
|
||||
The main documentation is available at [https://clover.coex.tech](https://clover.coex.tech/). Official website: [coex.tech/clover](https://coex.tech/clover).
|
||||
|
||||
[__Support us on Kickstarter!__](https://www.kickstarter.com/projects/copterexpress/cloverdrone)
|
||||
|
||||
## Video compilation
|
||||
|
||||
|
||||
@@ -7,19 +7,25 @@ rospy.init_node('leds')
|
||||
|
||||
set_effect = rospy.ServiceProxy('led/set_effect', SetLEDEffect) # define proxy to ROS-service
|
||||
|
||||
print('Fill red')
|
||||
set_effect(r=255, g=0, b=0) # fill strip with red color
|
||||
rospy.sleep(2)
|
||||
|
||||
print('Fill green')
|
||||
set_effect(r=0, g=100, b=0) # fill strip with green color
|
||||
rospy.sleep(2)
|
||||
|
||||
print('Fade to blue')
|
||||
set_effect(effect='fade', r=0, g=0, b=255) # fade to blue color
|
||||
rospy.sleep(2)
|
||||
|
||||
print('Flash red')
|
||||
set_effect(effect='flash', r=255, g=0, b=0) # flash twice with red color
|
||||
rospy.sleep(5)
|
||||
rospy.sleep(2)
|
||||
|
||||
print('Blink white')
|
||||
set_effect(effect='blink', r=255, g=255, b=255) # blink with white color
|
||||
rospy.sleep(5)
|
||||
|
||||
print('Rainbow')
|
||||
set_effect(effect='rainbow') # show rainbow
|
||||
|
||||
@@ -105,7 +105,7 @@ ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/monkey.
|
||||
# software install
|
||||
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-software.sh'
|
||||
# examples
|
||||
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/examples' '/home/pi/'
|
||||
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/examples' '/home/pi/' # TODO: symlink?
|
||||
# network setup
|
||||
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-network.sh'
|
||||
# avahi setup
|
||||
|
||||
@@ -130,6 +130,9 @@ catkin_make run_tests #&& catkin_test_results
|
||||
echo_stamp "Change permissions for catkin_ws"
|
||||
chown -Rf pi:pi /home/pi/catkin_ws
|
||||
|
||||
echo_stamp "Change permissions for examples"
|
||||
chown -Rf pi:pi /home/pi/examples
|
||||
|
||||
echo_stamp "Setup ROS environment"
|
||||
cat << EOF >> /home/pi/.bashrc
|
||||
LANG='C.UTF-8'
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<arg name="ws281x" default="true"/>
|
||||
<arg name="led_effect" default="true"/>
|
||||
<arg name="led_notify" default="true"/>
|
||||
<arg name="led_count" default="58"/>
|
||||
<arg name="led_count" default="72"/>
|
||||
<arg name="gpio_pin" default="21"/>
|
||||
|
||||
<arg name="simulator" default="false"/>
|
||||
|
||||
@@ -391,7 +391,7 @@ Blockly.Python.set_led = function(block) {
|
||||
return `set_leds([LEDState(index=${index}, r=${color.r}, g=${color.g}, b=${color.b})])\n`;
|
||||
} else {
|
||||
let parseColor = Blockly.Python.provideFunction_('parse_color', [PARSE_COLOR]);
|
||||
return `set_leds([LEDState(index=${index}, **${parseColor}(${colorCode})])\n`;
|
||||
return `set_leds([LEDState(index=${index}, **${parseColor}(${colorCode}))])\n`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 549 KiB After Width: | Height: | Size: 218 KiB |
BIN
docs/assets/assembling_soldering_clever_4/esc_11.png
Normal file
|
After Width: | Height: | Size: 549 KiB |
|
Before Width: | Height: | Size: 333 KiB After Width: | Height: | Size: 331 KiB |
|
Before Width: | Height: | Size: 469 KiB After Width: | Height: | Size: 466 KiB |
|
Before Width: | Height: | Size: 330 KiB After Width: | Height: | Size: 469 KiB |
|
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 330 KiB |
|
Before Width: | Height: | Size: 324 KiB After Width: | Height: | Size: 472 KiB |
|
Before Width: | Height: | Size: 461 KiB After Width: | Height: | Size: 324 KiB |
|
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 461 KiB |
BIN
docs/assets/assembling_soldering_clever_4/guard_4.png
Normal file
|
After Width: | Height: | Size: 564 KiB |
BIN
docs/assets/assembling_soldering_clever_4/guard_5.png
Normal file
|
After Width: | Height: | Size: 593 KiB |
BIN
docs/assets/assembling_soldering_clever_4/guard_6.png
Normal file
|
After Width: | Height: | Size: 314 KiB |
|
Before Width: | Height: | Size: 303 KiB After Width: | Height: | Size: 301 KiB |
|
Before Width: | Height: | Size: 366 KiB After Width: | Height: | Size: 362 KiB |
@@ -18,15 +18,15 @@ Note that when connected, the modem must be recognized in the system as a networ
|
||||
|
||||
Create the VPN network keys to connect Raspberry Pi and the ground station.
|
||||
|
||||
To connect Raspberry Pi to your network, install the *openvpn* package:
|
||||
To connect Raspberry Pi to your network, install the OpenVPN package:
|
||||
|
||||
```bash
|
||||
sudo apt-get install openvpn
|
||||
```
|
||||
|
||||
Move your keys to the */etc/openvpn/client* directory. For convenience, use the graphical SFTP data transfer interface, for example: WinSCP, FileZilla, etc.
|
||||
Move your keys to the `/etc/openvpn/client` directory. For convenience, use the graphical SFTP data transfer interface, for example: WinSCP, FileZilla, etc.
|
||||
|
||||
To enable the client mode, you must activate the keys you have transmitted. Keys can be generated in various formats, for example: *.ovpn*, *.conf*. The key or configuration used on your copter should be strictly in *.conf* format.
|
||||
To enable the client mode, you must activate the keys you have transmitted. Keys can be generated in various formats, for example: `.ovpn`, `.conf`. The key or configuration used on your copter should be strictly in `.conf` format.
|
||||
|
||||
Initialize the service that uses your keys to connect in client mode:
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ For interaction with ROS topics and services on a Raspberry Pi, you can use the
|
||||
|
||||
The main tutorial for rosserial: http://wiki.ros.org/rosserial_arduino/Tutorials
|
||||
|
||||
Arudino is to be installed on Clover and connected via a USB port.
|
||||
Arduino is to be installed on Clover and connected via a USB port.
|
||||
|
||||
## Configuring Arduino IDE
|
||||
|
||||
@@ -14,7 +14,7 @@ To work with ROS and Arduino, you should understand the format of installed pack
|
||||
rosrun rosserial_arduino make_libraries.py.
|
||||
```
|
||||
|
||||
The obtained folder `ros_lib` is to be copied to `<sketches folder>/libraries` on a computer with Arudino IDE.
|
||||
The obtained folder `ros_lib` is to be copied to `<sketches folder>/libraries` on a computer with Arduino IDE.
|
||||
|
||||
## Configuring Raspberry Pi
|
||||
|
||||
@@ -24,7 +24,7 @@ To run the program on Arduino once, you can use command:
|
||||
roslaunch clover arduino.launch
|
||||
```
|
||||
|
||||
To start the link with Arduino at the startup automatically, set argument `arudino` in the Clover launch file (`~/catkin_ws/src/clover/clover/launch/clover.launch`):
|
||||
To start the link with Arduino at the startup automatically, set argument `arduino` in the Clover launch file (`~/catkin_ws/src/clover/clover/launch/clover.launch`):
|
||||
|
||||
```xml
|
||||
<arg name="arduino" default="true"/>
|
||||
@@ -202,7 +202,7 @@ getTelemetry.call(gt_req, gt_res);
|
||||
|
||||
## Problem
|
||||
|
||||
When using Arudino Nano, RAM may be insufficient. In this case, messages will appear in the Aruino IDE like:
|
||||
When using Arduino Nano, RAM may be insufficient. In this case, messages will appear in the Arduino IDE like:
|
||||
|
||||
```
|
||||
Global variables use 1837 bytes (89%) of the dynamic memory, leaving 211 bytes for local variables. The maximum is 2048 bytes.
|
||||
|
||||
@@ -51,7 +51,7 @@ TODO
|
||||
|
||||
1. Unpack the power board and install the power ribbon cable.
|
||||
2. Switch the multimeter in the DC voltage measurement mode (20V or 200V range).
|
||||
3. Check the correct functionning of the power board by connecting the battery.
|
||||
3. Check the correct functioning of the power board by connecting the battery.
|
||||
* Voltage measurements are to be made between black and red wires.
|
||||
* Output voltage at the XT30 connector should be equal to the battery voltage (10 V to 12.6 V).
|
||||
* The output voltage at the power ribbon cable should be between 4.9 V to 5.3 V.
|
||||
@@ -69,7 +69,7 @@ TODO
|
||||
BLACK -> OUT-
|
||||
RED -> OUT+
|
||||
|
||||
6. Check BEC functionning.
|
||||
6. Check BEC functioning.
|
||||
* Solder the BEC to the power board:
|
||||
|
||||
BLACK -> -
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
## Installing motors
|
||||
|
||||
1. Unbox the motors.
|
||||
2. Shorten the motor wires using wire strippers or sidecutters:
|
||||
2. Shorten the motor wires using wire strippers or side cutters:
|
||||
|
||||
* Cut wires to 30 mm.
|
||||
* Strip 5 mm of insulation while taking care to not damage the cores
|
||||
@@ -315,7 +315,7 @@ The flight controller expects PPM signal from your RC gear. Switch your transmit
|
||||
<img src="../assets/assembling_clever4/lower_deck_4.png" width=300 class="zoom border center">
|
||||
|
||||
6. Connect the camera ribbon cable to the camera.
|
||||
7. Connect the laser rangefineder to the Raspberry Pi using the following pinout:
|
||||
7. Connect the laser rangefinder to the Raspberry Pi using the following pinout:
|
||||
* Connect **VCC** to pin 1 (**3v3**)
|
||||
* Connect **GND** to pin 9 (**Ground**)
|
||||
* Connect **SDA** to pin 3 (**GPIO2**)
|
||||
@@ -391,7 +391,7 @@ Perform the quadrotor components setup according to [the "Configuration" section
|
||||
|
||||
> **Warning** Be sure to **not** mount the propellers **until the setup is complete**. Do it only when you are ready to fly.
|
||||
|
||||
Attach the propellers according to their rotation direction. The battery should be disconnected duting propeller installation.
|
||||
Attach the propellers according to their rotation direction. The battery should be disconnected during propeller installation.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/assembling_clever4/final_2.png" width=300 class="zoom border">
|
||||
|
||||
@@ -8,7 +8,7 @@ Infrared sensors are a convenient tool for transmitting any commands to the copt
|
||||
|
||||
Most IR receivers operate and are connected the same way. Such receivers have 3 pins for connecting: G/GND — ground V/VCC — 5V power, S/OUT — signal.
|
||||
|
||||
<img src="../assets/IR_reciver_connection.png" height="500px" alt="ir reciver connection to raspberry">
|
||||
<img src="../assets/IR_reciver_connection.png" height="500px" alt="ir receiver connection to raspberry">
|
||||
|
||||
> **Hint** The signal port doesn't have to be connected to port GPIO 17; this pin may be changed during the [in/out port settings](#in/out).
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ Jetson Nano currently does not support older Raspberry Pi v1 cameras (that are b
|
||||
|
||||
Fortunately, these cameras are available using GStreamer. You can try using the [`gscam`](http://wiki.ros.org/gscam) ROS package or our [`jetson_camera`](https://github.com/sfalexrog/jetson_camera) node. The latter requires you to build OpenCV 3.4 from source with GStreamer support.
|
||||
|
||||
The GStreamer pipelines are available at [JetsonHacksNano CSI camera reposotory](https://github.com/JetsonHacksNano/CSI-Camera).
|
||||
The GStreamer pipelines are available at [JetsonHacksNano CSI camera repository](https://github.com/JetsonHacksNano/CSI-Camera).
|
||||
|
||||
You may also notice that the camera image has a red tint that is more pronounced near the edges. This can be fixed by image signal processor tuning. Generally this should be done by your camera manufacturer; [here is a sample ISP configuration](https://www.arducam.com/docs/camera-for-jetson-nano/fix-red-tint-with-isp-tuning/) from Adrucam
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ Our [Raspberry Pi image](image.md) contains preinstalled modules for interfacing
|
||||
* control individual LED colors (low-level control);
|
||||
* configure the strip to display flight events.
|
||||
|
||||
> **Caution** LED strip can consume a lot of power! Powering it from a Raspyerry Pi may overload the computer's power circuitry. Consider using a separate BEC as a power source.
|
||||
> **Caution** LED strip can consume a lot of power! Powering it from a Raspberry Pi may overload the computer's power circuitry. Consider using a separate BEC as a power source.
|
||||
|
||||
## High-level control
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ Connect the +5v and GND leads of your LED to a power source and the DIN (data in
|
||||
|
||||
<img src="../assets/led_connection.png" height="400px" alt="leds">
|
||||
|
||||
> **Caution** LED strip can consume a lot of power! Powering it from a Raspyerry Pi may overload the computer's power circuitry. Consider using a separate BEC as a power source.
|
||||
> **Caution** LED strip can consume a lot of power! Powering it from a Raspberry Pi may overload the computer's power circuitry. Consider using a separate BEC as a power source.
|
||||
|
||||
<!-- -->
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ An Unmanned Aerial Vehicle (UAV) is an aircraft flying without a pilot (crew) on
|
||||
Types and configuration
|
||||
-------------------
|
||||
|
||||
There are many engines configurations: a tricopter, a hexacopter, or an octocopter, but the simplest one in terms of assembly and operation is a quadcopter, i. e., a multi-rotor platform with four engines. In turn, a quadcopter may have + and х configuration. In copters with a "+" configuration, one of the beams faces forward, while in platforms with the "x" configuration, the main direction of movement is between two adjacent beams.
|
||||
There are many engines configurations: a tricopter, a hexacopter, or an octocopter, but the simplest one in terms of assembly and operation is a quadcopter, i. e., a multi-rotor platform with four engines. In turn, a quadcopter may have + and x configuration. In copters with a "+" configuration, one of the beams faces forward, while in platforms with the "x" configuration, the main direction of movement is between two adjacent beams.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -117,12 +117,11 @@ In a closed electric circuit, the sum of all the EMF is equal to the sum of the
|
||||
|
||||
In making equations, the direction of circuit traversal is chosen and arbitrarily specified directions of currents are specified.
|
||||
|
||||
If an electric circuit contains two power sources, the directions of electromotive forces of which coincide, i.е., connected according to Fig. 1, the EMF across the entire circuit shall be equal to the sum of the EMFs of the sources,
|
||||
т. i.е.,
|
||||
If an electric circuit contains two power sources, the directions of electromotive forces of which coincide, i.e., connected according to Fig. 1, the EMF across the entire circuit shall be equal to the sum of the EMFs of the sources, i.e.,
|
||||
|
||||
**E = E1+E2.**
|
||||
|
||||
If a circuit contains two sources of EDS with opposite directions, i.е., connected according to Fig. 2, the total EMF of the circuit will be equal to the difference of EMFs of these sources
|
||||
If a circuit contains two sources of EDS with opposite directions, i.e., connected according to Fig. 2, the total EMF of the circuit will be equal to the difference of EMFs of these sources
|
||||
|
||||
**Е = Е1—Е2.**
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ set_attitude = rospy.ServiceProxy('set_attitude', srv.SetAttitude)
|
||||
set_rates = rospy.ServiceProxy('set_rates', srv.SetRates)
|
||||
land = rospy.ServiceProxy('land', Trigger)
|
||||
|
||||
# Take off 1 м
|
||||
# Take off 1 m
|
||||
navigate(x=0, y=0, z=1, frame_id='body', auto_arm=True)
|
||||
```
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ When using **LPE** (parameter `SYS_MC_EST_GROUP` = `local_position_estimator, at
|
||||
* `SENS_FLOW_ROT` – No rotation.
|
||||
* `SENS_FLOW_MAXHGT` – 4.0 (for the rangefinder VL53L1X)
|
||||
* `SENS_FLOW_MINHGT` – 0.01 (for the rangefinder VL53L1X)
|
||||
* Optional: `LPE_FUSION` – falg 'pub agl as lpos down' is on (сf. [rangefinder setup](laser.md).
|
||||
* Optional: `LPE_FUSION` – falg 'pub agl as lpos down' is on (see [rangefinder setup](laser.md).
|
||||
|
||||
[The `selfcheck.py` utility](selfcheck.md) will help you verify that all settings are correctly set.
|
||||
|
||||
@@ -97,7 +97,7 @@ When using Optical Flow, the maximal horizontal speed is further limited. This i
|
||||
|
||||
## Errors
|
||||
|
||||
If errors of `EKF INTERNAL CHECKS` occur, try to restart EKF2. To do so, enter in the MAVLink-console : в MAVLink-консоли:
|
||||
If errors like `EKF INTERNAL CHECKS` occur, try to restart EKF2. To do so, enter in the MAVLink-console:
|
||||
|
||||
```nsh
|
||||
ekf2 stop
|
||||
|
||||
@@ -20,7 +20,7 @@ This is a group of modules that calculates the current state of the copter using
|
||||
* Copter orientation (in the local coordinate system) – pitch, roll, yaw (one of presentations);
|
||||
* Copter position (in the local coordinate system) – x, y, z;
|
||||
* Copter speed (in the local coordinate system) – vx, vy, vz;
|
||||
* Global coordinates of the copter – lattitude, longitude, altitude;
|
||||
* Global coordinates of the copter – latitude, longitude, altitude;
|
||||
* Altitude above the surface;
|
||||
* Other parameters (the drift of gyroscopes, wind speed, etc.).
|
||||
|
||||
@@ -39,15 +39,15 @@ This is a group of modules that calculates the current state of the copter using
|
||||
|
||||
Variant 2 is the most accurate; however, it is correct to use it only if the surface the copter flies over is flat. Otherwise, the Z axis origin will move up and down with the altitude of the surface.
|
||||
|
||||
## Multicopter Control Position (flying by position)
|
||||
## Multicopter Position Control
|
||||
|
||||
These parameters adjust the flight of the copter by position (POSCTL, OFFBOARD, AUTO modes).
|
||||
|
||||
`MPC_THR_HOVER` — hovering throttle. This option is to set to the approximate percentage of throttle needed to make the copter maintain its altitude. If copter has a tendency to gain or lose altitude during the hovering mode, reduce or increase this value.
|
||||
|
||||
`MPC_XY_P` – position factor *P* of the ESC. This parameter affects how sharply the copter will react to the position commands. A too high value may cause {перестрелы}.
|
||||
`MPC_XY_P` – position factor *P* of the ESC. This parameter affects how sharply the copter will react to the position commands. A too high value may cause overshoots.
|
||||
|
||||
`MPC_XY_VEL_P` – speed factor *P* of the ESC. This parameter also affects the accuracy and sharpness of copter execution of the given position. A too high value may cause {перестрелы}.
|
||||
`MPC_XY_VEL_P` – speed factor *P* of the ESC. This parameter also affects the accuracy and sharpness of copter execution of the given position. A too high value may cause overshoots.
|
||||
|
||||
`MPC_XY_VEL_MAX` — the maximum horizontal speed in POSCTL, OFFBOARD, AUTO modes.
|
||||
|
||||
|
||||
@@ -41,21 +41,21 @@ Now you can install the ROS package itself.
|
||||
```
|
||||
|
||||
After the package has installed, initialize `rosdep`.
|
||||
Package `rosdep` will allow to easily install dependecies for the source files that you whish to compile. Running some essential components of ROS will as well require this package.
|
||||
Package `rosdep` will allow to easily install dependencies for the source files that you whish to compile. Running some essential components of ROS will as well require this package.
|
||||
|
||||
```bash
|
||||
sudo rosdep init
|
||||
rosdep update
|
||||
```
|
||||
|
||||
If you are not confortable with entering environment variables manually each time, you may configure it in a way that it add itself in your bash session on every new shell startup:
|
||||
If you are not comfortable with entering environment variables manually each time, you may configure it in a way that it add itself in your bash session on every new shell startup:
|
||||
|
||||
```bash
|
||||
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
If you whish to install any additionnal packages for yout ROS Melodic simply use:
|
||||
If you whish to install any additional packages for your ROS Melodic simply use:
|
||||
|
||||
```bash
|
||||
sudo apt-get install ros-melodic-PACKAGE
|
||||
|
||||
@@ -14,7 +14,7 @@ Install package `ros-melodic-desktop-full` or `ros-melodic-desktop` using the [i
|
||||
Start rviz
|
||||
---
|
||||
|
||||
To start еру visualization of the state of Clover in real time, connect to it via Wi-Fi (`clover-xxx`) and run rviz, specifying an appropriate ROS_MASTER_URI:
|
||||
To start the Clover state visualization in real time, connect to it via Wi-Fi (`clover-xxx`) and run rviz, specifying an appropriate ROS_MASTER_URI:
|
||||
|
||||
```(bash)
|
||||
ROS_MASTER_URI=http://192.168.11.1:11311 rviz
|
||||
|
||||
@@ -14,7 +14,7 @@ Consult the [official QGroundControl user guide](https://docs.qgroundcontrol.com
|
||||
|
||||
Prepare the MicroSD card for your flight controller.
|
||||
|
||||
<img src="../assets/pix-sd.png" alt="Pixracer и MicroSD-карта" class="zoom center" width=400>
|
||||
<img src="../assets/pix-sd.png" alt="Pixracer and MicroSD-card" class="zoom center" width=400>
|
||||
|
||||
* Put the card into your computer (use an adapter if necessary).
|
||||
* Format the card to FAT32 filesystem. Right click on the SD card icon in Windows Explorer and select "Format". Use the Disk Utility in macOS.
|
||||
@@ -114,7 +114,7 @@ Press the *Save* button to save the changed value to the flight controller. Chan
|
||||
|
||||
> **Hint** Note that you should fine-tune the PID parameters for each drone individually. <!-- TODO: add PID article link -->
|
||||
|
||||
#### Cicruit breaker parameters
|
||||
#### Circuit breaker parameters
|
||||
|
||||
1. Set `CBRK_USB_CHK` to 197848 to allow flights with the USB cable connected.
|
||||
2. Disable safety switch check: `CBRK_IO_SAFETY` = 22027.
|
||||
|
||||
@@ -13,7 +13,7 @@ The `simple_offboard` module of the `clover` package is intended for simplified
|
||||
|
||||
Main services are [`get_telemetry`](#gettelemetry) (receive telemetry data), [`navigate`](#navigate) (fly to a given point along a straight line), [`navigate_global`](#navigateglobal) (fly to a point specified as latitude and longitude along a straight line), [`land`](#land) (switch to landing mode).
|
||||
|
||||
Python samples
|
||||
Python examples
|
||||
---
|
||||
|
||||
You need to create proxies for services before calling them. Use the following template for your programs:
|
||||
|
||||
@@ -8,17 +8,21 @@ In addition to [native installation instructions](simulation_native.md), we prov
|
||||
* preconfigured Gazebo simulation environment;
|
||||
* Visual Studio Code with C++ and Python plugins.
|
||||
|
||||
> **Info** The default username on the VM is `clover`, with password `clover`.
|
||||
|
||||
The VM is an easy way to set up a simulation environment, but can be used as a development environment for a real drone as well.
|
||||
|
||||
## Downloading
|
||||
|
||||
You can download the latest VM image [in the VM releases repository](https://github.com/CopterExpress/clover_vm/releases).
|
||||
|
||||
> **Note** The virtual machine should be used when native installation is not feasible or possible. You may experience reduced performance in programs that use 3D rendering, like rviz and Gazebo.
|
||||
|
||||
## Setting up the VM
|
||||
|
||||
You need to use a VM manager that supports OVF format, like [Virtualbox](https://www.virtualbox.org/wiki/Downloads), [VMware Player](https://www.vmware.com/products/workstation-player.html) or [VMware Workstation](https://www.vmware.com/products/workstation-pro.html).
|
||||
You need to use a VM manager that supports OVF format, like [VirtualBox](https://www.virtualbox.org/wiki/Downloads), [VMware Player](https://www.vmware.com/products/workstation-player.html) or [VMware Workstation](https://www.vmware.com/products/workstation-pro.html).
|
||||
|
||||
> **Note** At the time of writing Virtualbox had issues running the VM, particularly with 3D applications. We recommend using VMware Player or VMware Workstation if possible. The following steps assume you're using VMware Player.
|
||||
> **Note** At the time of writing VirtualBox had issues running the VM, particularly with 3D applications. We recommend using VMware Player or VMware Workstation if possible. The following steps assume you're using VMware Player.
|
||||
|
||||
Make sure that you have hardware virtualization enabled in your BIOS/UEFI (it may be supported by your hardware but turned off by default). The steps to enable virtualization differ from manufacturer to manufacturer, but should be described in your system manual. Consult your system's manufacturer if you're having trouble turning virtualization on.
|
||||
|
||||
@@ -33,7 +37,7 @@ Make sure that you have hardware virtualization enabled in your BIOS/UEFI (it ma
|
||||
2. Right-click on the VM name and select **Virtual Machine Settings**. In the new window, set the following parameters:
|
||||
|
||||
* increase the amount of memory available to the virtual machine (a good rule of thumb is 2048 MB per CPU core, but no less than 4 GB):
|
||||

|
||||

|
||||
* increase the amount available CPU cores:
|
||||

|
||||
* enable 3D acceleration:
|
||||
|
||||
@@ -103,7 +103,7 @@ arming = rospy.ServiceProxy('mavros/cmd/arming', CommandBool)
|
||||
|
||||
# ...
|
||||
|
||||
arming(False) # дизарм
|
||||
arming(False) # disarm
|
||||
```
|
||||
|
||||
### # {#transform}
|
||||
|
||||
@@ -89,7 +89,7 @@ while True:
|
||||
|
||||
### Filtering the data
|
||||
|
||||
To filter (smooth out) the data and delete [emission](https://ru.wikipedia.org/wiki/Outbreak_%28statistics%29) [Kalman filter] (https://ru.wikipedia.org/wiki/Фильтр_Калмана) or a simple [median filter](https://ru.wikipedia.org/wiki/Median_filter) can be used. An example of median filtering implementation:
|
||||
To filter (smooth out) the data and delete [outliers](https://en.wikipedia.org/wiki/Outlier), [Kalman filter](https://en.wikipedia.org/wiki/Kalman_filter) or a simple [median filter](https://ru.wikipedia.org/wiki/Median_filter) can be used. An example of median filtering implementation:
|
||||
|
||||
```python
|
||||
import collections
|
||||
@@ -97,7 +97,7 @@ import numpy
|
||||
|
||||
# ...
|
||||
|
||||
history = collections.deque(maxlen=10) # 10 - количество сэмплов для усреднения
|
||||
history = collections.deque(maxlen=10) # 10 - number of samples for averaging
|
||||
|
||||
def read_distance_filtered():
|
||||
history.append(read_distance())
|
||||
|
||||
@@ -12,7 +12,7 @@ Read more about the interface and the Protocol in [this article](https://habr.co
|
||||
|
||||
## Linux TTY
|
||||
|
||||
In Linux, there is the concept of Posix Terminal Interface (read more [here](https://ru.wikipedia.org/wiki/TTY-абстракция)). It is an abstraction over the serial or virtual interface that allows several agents to work with the device simultaneously.
|
||||
In Linux, there is the concept of POSIX Terminal Interface (read more [here](https://en.wikipedia.org/wiki/POSIX_terminal_interface). It is an abstraction over the serial or virtual interface that allows several agents to work with the device simultaneously.
|
||||
|
||||
An example of such abstraction in Raspbian may be `/dev/tty1` – the device for text output to the screen connected via HDMI.
|
||||
|
||||
@@ -37,7 +37,7 @@ By default, Raspberry Pi 3 PL011 is connected to the Bluetooth module. And Mini
|
||||
For the sake of convenience of working with these outputs, aliases exist in Raspbian:
|
||||
|
||||
* `/dev/serial0` – always points to the TTY device that is connected to the GPIO ports.
|
||||
* `/dev/serial1` – always points to the TTY device that is connected to the Bluetooh module.
|
||||
* `/dev/serial1` – always points to the TTY device that is connected to the Bluetooth module.
|
||||
|
||||
### Configuration of UART on Raspberry Pi 3
|
||||
|
||||
|
||||
@@ -18,15 +18,15 @@
|
||||
|
||||
Сформируйте необходимые ключи VPN сети, для подключения Raspberry Pi и наземной станции.
|
||||
|
||||
Для того, чтобы подключить Raspberry Pi к вашей сети, установите пакет *openvpn*:
|
||||
Для того, чтобы подключить Raspberry Pi к вашей сети, установите пакет `openvpn`:
|
||||
|
||||
```bash
|
||||
sudo apt-get install openvpn
|
||||
```
|
||||
|
||||
Перенесите ваши ключи в директорию */etc/openvpn/client*. Для удобства используйте графический SFTP интерфейс передачи данных, к примеру: WinSCP, FileZilla и т.д.
|
||||
Перенесите ваши ключи в директорию `/etc/openvpn/client`. Для удобства используйте графический SFTP интерфейс передачи данных, к примеру: WinSCP, FileZilla и т.д.
|
||||
|
||||
Для включения режима клиента, необходимо активировать переданные вами ключи. Ключи могу быть сформированы в различных форматах, к примеру: *.ovpn*, *.conf*. Ключ или конфигурация использующийся на вашем коптере, должны быть строго в формате *.conf*.
|
||||
Для включения режима клиента, необходимо активировать переданные вами ключи. Ключи могу быть сформированы в различных форматах, к примеру: `.ovpn`, `.conf`. Ключ или конфигурация использующийся на вашем коптере, должны быть строго в формате `.conf`.
|
||||
|
||||
Инициализируйте сервис применяющий ваши ключи для подключения в режиме клиента:
|
||||
|
||||
@@ -34,7 +34,7 @@ sudo apt-get install openvpn
|
||||
sudo systemctl enable openvpn-client@config-name
|
||||
```
|
||||
|
||||
где *config-name* - название вашего конфигурационного файла.
|
||||
где `config-name` - название вашего конфигурационного файла.
|
||||
|
||||
Если все сделано правильно, при каждом перезапуске системы, сервис-клиент будет автоматически подключаться к вашей сети.
|
||||
|
||||
@@ -65,7 +65,7 @@ sudo systemctl enable openvpn-client@config-name
|
||||
|
||||
> **Info** При выборе джойстика, обратите внимание на количество рабочих каналов и на поддержку его, в QGroundControl(SDL2). Встречаются пульты поддерживающие всего 4 канала, что не удобно для такого типа управления.
|
||||
|
||||
Если изменения положения стиков отображается в окне QGgroundControl, вам остается только применить параметр, определяющий, что управление коптером происходит с помощью джойстика, а не радиоаппаратуры:
|
||||
Если изменения положения стиков отображается в окне QGroundControl, вам остается только применить параметр, определяющий, что управление коптером происходит с помощью джойстика, а не радиоаппаратуры:
|
||||
|
||||
`COM_RC_IN_MODE` - Joystick/No RC Checks
|
||||
|
||||
|
||||
@@ -102,46 +102,50 @@
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_2.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
2. Установите регуляторы оборотов (ESC) в соответствующие места на луче и притяните хомутами.
|
||||
2. Установите регуляторы оборотов (ESC) в соответствующие места на луче.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_3.png" width=300 class="zoom border">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_4.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
3. Отмерьте необходимое количество силового провода регуляторов оборотов(ESC), и обрежьте лишнее.
|
||||
3. Притяните регуляторы оборотов (ESC) хомутами.
|
||||
|
||||
4. Зачистите и залудите обрезанные провода
|
||||
<img id="prop_rotation" src="../assets/assembling_soldering_clever_4/esc_5.png" width=300 class="zoom border center">
|
||||
|
||||
5. Залудите контактные площадки на плате распределения питания.
|
||||
4. Отмерьте необходимое количество силового провода регуляторов оборотов(ESC), и обрежьте лишнее.
|
||||
|
||||
6. Припаяйте силовые провода регуляторов оборотов к плате распределения питания.
|
||||
5. Зачистите и залудите обрезанные провода.
|
||||
|
||||
6. Залудите контактные площадки на плате распределения питания.
|
||||
|
||||
7. Припаяйте силовые провода регуляторов оборотов к плате распределения питания.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_5.png" width=300 class="zoom border">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_6.png" width=300 class="zoom border">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_7.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
> **Caution** Будьте внимательны к подписям контактов на плате. Красный провод должен идти к площадке с подписью *+*, а черный к подписи *-*.
|
||||
|
||||
7. Обрежьте лишний фазный кабель идущий от моторов.
|
||||
8. Обрежьте лишний фазный кабель идущий от моторов.
|
||||
|
||||
8. Зачистите и залудите фазные кабели.
|
||||
9. Зачистите и залудите фазные кабели.
|
||||
|
||||
9. Залудите контактные площадки регуляторов оборотов.
|
||||
10. Залудите контактные площадки регуляторов оборотов.
|
||||
|
||||
10. Припаяйте фазные кабели к контактным площадкам регуляторов в любом порядке.
|
||||
11. Припаяйте фазные кабели к контактным площадкам регуляторов в любом порядке.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_7.png" width=300 class="zoom border">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_8.png" width=300 class="zoom border">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_9.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
11. Припаяйте 3 разъема JST мама к 2ум площадкам *5V* и площадке *bat+*
|
||||
12. Припаяйте 3 разъема JST мама к 2ум площадкам *5V* и площадке *bat+*.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_9.png" width=300 class="zoom border">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_10.png" width=300 class="zoom border">
|
||||
<img src="../assets/assembling_soldering_clever_4/esc_11.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
## Установка полетного контроллера
|
||||
@@ -334,4 +338,15 @@
|
||||
|
||||
<img src="../assets/assembling_soldering_clever_4/guard_3.png" width=300 class="zoom border center">
|
||||
|
||||
4. Подключите полетный контролер к Raspberry Pi с помощью USB к кабеля.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/assembling_soldering_clever_4/guard_4.png" width=300 class="zoom border">
|
||||
<img src="../assets/assembling_soldering_clever_4/guard_5.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
5. Установите ремешок для крепления АКБ.
|
||||
|
||||
<img src="../assets/assembling_soldering_clever_4/guard_6.png" width=300 class="zoom border center">
|
||||
|
||||
> **Success** Дрон собран, далее произведите [настройку](setup.md).
|
||||
|
||||
@@ -36,5 +36,6 @@
|
||||
|Полет коптера на точку на изображении с камеры, направленной вертикально вниз||
|
||||
|Внедрение лидара ([RPLIDAR](https://www.slamtec.com/en/Lidar)) в Клевер||
|
||||
|Зарядная станция для коптера на солнечном концентраторе|<!-- placeholder for gitbook-->|
|
||||
|Стенд для стройки коэффициентов PID на Клевере|<!-- placeholder for gitbook-->|
|
||||
|
||||
Вышеперечисленные и другие проекты вы также можете реализовать в рамках конкурса проектов [Copter Hack](https://ru.coex.tech/copterhack). Мы приглашаем команды для реализации проектов и в других форматах.
|
||||
|
||||
@@ -10,9 +10,13 @@
|
||||
* предварительно настроенный симулятор Gazebo;
|
||||
* среда разработки Visual Studio Code с плагинами для разработки на Python и C++.
|
||||
|
||||
> **Info** Имя пользователя по умолчанию на виртуальной машине - `clover`, пароль - `clover`.
|
||||
|
||||
Виртуальная машина может использоваться как для запуска симуляторов, так и для работы с настоящим дроном.
|
||||
|
||||
Скачать текущую версию виртуальной машины можно [в релизах репозитория виртуальной машины](https://github.com/CopterExpress/clover_vm/releases)
|
||||
## Скачивание
|
||||
|
||||
Скачать текущую версию виртуальной машины можно [в релизах репозитория виртуальной машины](https://github.com/CopterExpress/clover_vm/releases).
|
||||
|
||||
> **Warning** Виртуальную машину следует использовать только в тех случаях, когда по каким-то причинам использование Ubuntu 18.04 напрямую невозможно. Производительность всех программ, особенно тех, которые используют 3D-графику - jMAVSim, Gazebo, rviz - будет существенно ниже; кроме того, в ряде случаев будут возникать графические ошибки, приводящие к частичной или полной неработоспособности указанных программ.
|
||||
|
||||
|
||||