Compare commits

..

78 Commits

Author SHA1 Message Date
Oleg Kalachev
b8a8e7339d docs: fix typo 2019-12-08 23:52:36 +03:00
Alexey Rogachevskiy
e1ab0e63b5 Limit syslog size (#195)
* builder: Put file size limits in rsyslog.conf

* rsyslog: Add simple log rotation script

* rsyslog: Add rate limiting
2019-12-06 21:29:52 +03:00
Alexey Rogachevskiy
4a23a9274a Move to Raspbian Buster (#193)
* builder: Build against Buster

* builder: Use correct repository specifications

* builder: Move ld.so.preload to have less errors

* builder: Use coex repo to install Monkey

* builder: Search for buster ROS packages

* aruco_pose: Vendor in aruco library from OpenCV 3.4.6

* builder: Move to ROS Melodic

* builder: Update kernel version

* aruco_pose, clever: Remove opencv3 ROS dependency

* builder: Update rosdep

* travis: Disable eclint for vendored aruco library

* tests: Don't try to locate opencv in ros

* roscore: Use melodic distribution

* Revert "aruco_pose: Vendor in aruco library from OpenCV 3.4.6"

This reverts commit 9c14a8c002bb3396f9a7d9b2ba39969207f066ba.

* aruco_pose: Vendor opencv_contrib/aruco again

* builder: Add led packages

* builder: Remove unused builder code

* travis: Add native tests

* builder: Set permissions for standalone-install

* builder: Use -y for package installation

* builder: Add repo for standalone build

* builder: Use correct file types for standalone install

* aruco_pose: Accept rgb8 map images

* builder: Disable mjpg_streamer test

* aruco_pose: Allow rgb8 map images (again)

* builder: Re-add mjpgstreamer

* builder: Install tornado==4.2.1 for rosbridge_suite

* builder: Use more recent base image

* builder: Use default kernel

* builder: Move ld.so.preload back after tests

* builder: Disable catkin tests

These tests fail on a remote machine but seem to pass just fine on real hardware. Something must have changed between Kinetic and Melodic, and we must investigate more, but for now we just need a working image.

* aruco_pose: Remove unused vendored code

* selfcheck: Update systemd-analyze regex

* builder: Add opencv repository

* rosdep: Update package definitions for Melodic

* rosdep: Use proper yaml formatting

* travis: Remove unnecessary space

* docs: Reference Melodic wherever possible
2019-12-06 21:25:19 +03:00
Oleg Kalachev
5bc7443a7b Adjust default vl53l1x rangefinder parameters 2019-12-06 20:40:47 +03:00
Oleg Kalachev
5fe18152f0 selfcheck.py: fix letters case 2019-12-06 01:14:17 +03:00
Oleg Kalachev
b8d4a7fdcc selfcheck.py: don’t fall with exception if cell voltage array is empty 2019-12-06 01:11:48 +03:00
timkondratiev
c3a4f674ec docs: fix tf2 code snippet (#194)
* fix transform code

* fix transform code

* docs: import PoseStamped directly from geometry_msgs
2019-12-03 01:19:50 +03:00
Oleg Kalachev
591d57e2b2 selfcheck.py: correct case 2019-11-26 19:30:23 +03:00
Alexey Rogachevskiy
4a67783706 selfcheck.py: add hardware health checks (#192)
* selfcheck: Add hardware health checks

* docs: Update selfcheck documentation (en/ru)

* selfcheck: "Hardware health" -> "RPi health"
2019-11-25 20:51:27 +03:00
Alexey Rogachevskiy
7dc82e8154 docs: English translation updates (#190)
* docs: Add CLI article (en)

* docs: Update frames article (en)

* docs: Add article about part models (en)

* docs: Update Raspberry Pi article (en)

* docs: Remove unused raspberry3.jpg

* docs: Add COEX Pix article (en)

* docs: Add CopterHack 2019 article (en)

* docs: Update connection article (en)

* docs: Add programming overview (en)

* docs: Add anchor in modes article

* docs: Fix link in auto_setup, add editing ID (en)

* docs: Rearrange summary to match Russian version (en)

* docs/camera_frame: Add link to cli#editing (en)

* docs/wifi: Fix link to next article (en)

* docs: Add "next" links where appropriate (en)
2019-11-25 20:22:41 +03:00
Alexey Rogachevskiy
4feac879eb docs: Fix incorrect path and link 2019-11-25 18:40:18 +03:00
Alamoris
6c883cab67 builder: Fix typo 2019-11-23 16:26:28 +03:00
Oleg Kalachev
00048d4dfe ci: ignore .dxf-files in editorconfig-checker 2019-11-23 14:17:54 +03:00
Alamoris
a635b9d21d builder: Ignore app and clever/www directory by catkin 2019-11-22 14:48:59 +03:00
Oleg Kalachev
de693e3e58 docs: fix 2019-11-21 17:15:12 +03:00
Oleg Kalachev
9e2707ad6b docs: fix 2019-11-21 16:54:14 +03:00
Oleg Kalachev
a7e04fe22a docs: fix 2019-11-21 16:44:41 +03:00
Oleg Kalachev
3647337455 docs: fix 2019-11-21 16:42:23 +03:00
Oleg Kalachev
b771fbb398 docs: add dxf files files 2019-11-21 16:33:05 +03:00
Oleg Kalachev
7ed2dd398c docs: fix link 2019-11-21 16:32:05 +03:00
Oleg Kalachev
45e6f396d0 image: remove after=network.target from service files to speed up booting 2019-11-20 17:31:05 +03:00
Oleg Kalachev
0574f4cc46 selfcheck.py: add network check 2019-11-15 09:58:36 +03:00
Oleg Kalachev
f574637a3f gitbook: add redirect from hostname/ 2019-11-15 09:45:57 +03:00
Oleg Kalachev
6ede041c8a docs: little fix 2019-11-14 21:30:40 +03:00
Oleg Kalachev
0fda24c63c docs: add programming intro and re-arrange articles in programming section 2019-11-14 21:13:27 +03:00
Oleg Kalachev
a01c2b8d6c docs: add next links 2019-11-14 21:11:25 +03:00
Oleg Kalachev
5ce348d14c docs: id for editing section in cli article 2019-11-14 21:09:34 +03:00
Oleg Kalachev
5736c7acfb docs: fix editing links 2019-11-14 21:06:50 +03:00
Oleg Kalachev
c6b3e837e3 docs: fix next link in wifi article 2019-11-14 21:05:06 +03:00
Oleg Kalachev
78e42df0f2 docs: id for auto mode in modes article 2019-11-14 21:04:52 +03:00
Oleg Kalachev
a8824a696d docs: rework connection article 2019-11-14 21:04:36 +03:00
Oleg Kalachev
7a216ede07 docs: update raspberry article 2019-11-14 20:48:56 +03:00
Oleg Kalachev
b68e42bfcc docs: replace editing article with cli article 2019-11-14 19:30:54 +03:00
Oleg Kalachev
fdeab48bf5 docs: add aruco-related frames to frames article 2019-11-14 17:55:20 +03:00
Oleg Kalachev
5c1b19d9c9 docs: fix set_velocity call 2019-11-14 15:47:52 +03:00
Oleg Kalachev
7d25898694 led: don’t indicate low voltage lower than 2.0 2019-11-13 19:27:13 +03:00
Oleg Kalachev
2c6780202a Disable led for sitl 2019-11-12 00:15:51 +03:00
Alexey Rogachevskiy
cab76dea16 Assembly images updates (#188)
* docs: Update LED connection images

* docs: Add motor direction and USB connection

* docs: Crop props_rotation.png

* docs: Add RPi microSD installation (en/ru)

* docs: Add note about FCU microSD (en/ru)
2019-11-11 15:14:09 +03:00
Oleg Kalachev
0e0b0aa90b docs: update models article 2019-11-08 00:20:06 +03:00
Oleg Kalachev
e85be7ae49 Merge pull request #189 from Alamoris/change_led_state 2019-11-07 23:36:24 +03:00
Oleg Kalachev
bb99d68ff4 led: decrease default brightness to 64 2019-11-07 23:34:39 +03:00
Oleg Kalachev
ae077304bb docs: restored link to 3d-scanner article 2019-11-07 21:14:03 +03:00
Alamoris
0baadf73a2 launch: change defaul led node status 2019-11-07 12:48:27 +03:00
Oleg Kalachev
f0917347be docs: replace link to battery_holder.stl 2019-11-07 05:32:19 +03:00
Oleg Kalachev
eba8c7fc6a docs: add stl-models page link to summary 2019-11-07 05:01:12 +03:00
Oleg Kalachev
36573c12ee ci: ignore .stl-files in editoconfig-checker 2019-11-07 04:59:25 +03:00
Oleg Kalachev
e293e54353 docs: ignore battery_holder size 2019-11-07 04:46:11 +03:00
Oleg Kalachev
35801346d9 docs: add page for STL-models, add battery holder model 2019-11-07 04:41:46 +03:00
Oleg Kalachev
660b90a353 docs: remove link to unexisting arucogenmap article 2019-11-07 01:00:31 +03:00
Oleg Kalachev
f88d9eea2e mavros.launch: add fcu_conn option for sitl since PX4 1.9.0 2019-11-06 22:54:38 +03:00
Oleg Kalachev
5ab5418866 docs: remove english textbook from summary 2019-10-31 01:07:34 +03:00
timkondratiev
910e3590b3 docs: update article name (#187) 2019-10-30 18:08:52 +03:00
Alexey Rogachevskiy
5ad08785c4 docs: translation updates (#186)
* docs: Update frames article (en)

* docs: Add navigate_target notes to simple_offboard (en)

* docs: Update note about single-marker navigation

* docs: Add note about auto parameters in PX4 (en)
2019-10-29 23:40:30 +03:00
Oleg Kalachev
b75a40b9ad image: make documentation files ignored by catkin for speeding up roslaunch (#184) 2019-10-29 23:05:45 +03:00
Oleg Kalachev
7bbbba31be docs: fix typos 2019-10-29 21:32:56 +03:00
Oleg Kalachev
241264a1d2 docs: fix link 2019-10-27 18:13:09 +03:00
Oleg Kalachev
5c78b01b7b gitbook: switch to last markdownlint-cli as the issue is fixed 2019-10-27 18:05:12 +03:00
Ilya Petrov
dab4e69be1 docs: little description mistake fix (#185) 2019-10-25 15:34:47 +03:00
Oleg Kalachev
753e0a8ab4 selfcheck.py: report magnetometer weight parameter 2019-10-25 02:59:08 +03:00
stinger000
112c51a2b9 docs: update coex_pix.md (#183) 2019-10-25 01:02:27 +03:00
Oleg Kalachev
9c6cb4cc38 docs: small fix 2019-10-23 01:13:04 +03:00
Oleg Kalachev
b337dfa4c3 docs: small fix 2019-10-23 01:06:01 +03:00
Oleg Kalachev
22607c5390 docs: add COEX Pix article to summary 2019-10-23 01:03:34 +03:00
Oleg Kalachev
0f837d96a6 docs: small fix in COEX Pix article 2019-10-23 00:57:16 +03:00
Oleg Kalachev
3fa5ee99c4 docs: add COEX Pix article 2019-10-23 00:52:21 +03:00
Oleg Kalachev
8749f1523e gitbook: revert to markdownlint-cli@0.18.0 as the latest version has false positives on MD044 2019-10-22 01:47:26 +03:00
Oleg Kalachev
8b3a9dc07a docs: fix navigate examples in aruco maps navigating 2019-10-21 23:44:08 +03:00
Oleg Kalachev
a9b3613726 docs: add winners to copter hack 2019 2019-10-15 17:59:31 +03:00
Oleg Kalachev
3530c9999e docs: add info on bugs to copter hack 2019 pag 2019-10-13 15:04:09 +03:00
Alexey Rogachevskiy
244005c9f7 docs: Fix XML in camera.md 2019-10-12 22:05:10 +03:00
Oleg Kalachev
761ab42a63 docs: update copter hack 2019 article 2019-10-12 17:56:03 +03:00
Oleg Kalachev
86feac089a docs: update copter hack 2019 article 2019-10-12 17:53:38 +03:00
Oleg Kalachev
13a5a0ea05 docs: update optical flow article 2019-10-12 16:54:38 +03:00
Oleg Kalachev
dfefad297c docs: update copter hack 2019 2019-10-12 16:51:46 +03:00
Oleg Kalachev
cb9924d083 docs: add note about flying to marker in markers map 2019-10-12 14:55:52 +03:00
Oleg Kalachev
13599a1b2e docs: note about autmatic parameters for flow in clever PX4 2019-10-12 14:49:11 +03:00
Oleg Kalachev
a46a96f729 docs: add notes about navigate_target frame 2019-10-12 14:26:47 +03:00
Arthur Golubtsov
b7a811d4d4 Add information about image versions 2019-10-12 10:04:38 +03:00
98 changed files with 147924 additions and 532 deletions

View File

@@ -20,6 +20,7 @@
"MAVLink",
"ROS",
"ROS Kinetic",
"ROS Melodic",
"OpenCV",
"Gazebo",
"GitHub",

View File

@@ -109,7 +109,7 @@ jobs:
- wget https://github.com/okalachev/editorconfig-checker/releases/download/1.2.1-disable-spaces-amount/ec-linux-amd64
- chmod +x ec-linux-amd64
script:
- ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor"
- ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf"
stages:
- Build
- Annotate

View File

@@ -1,7 +1,6 @@
[Unit]
Description=Clever ROS package
Requires=roscore.service
After=network.target
[Service]
User=pi

View File

@@ -1,723 +1,735 @@
catkin:
debian:
buster: ros-melodic-catkin
buster: [ros-melodic-catkin]
genmsg:
debian:
buster: ros-melodic-genmsg
buster: [ros-melodic-genmsg]
gencpp:
debian:
buster: ros-melodic-gencpp
buster: [ros-melodic-gencpp]
geneus:
debian:
buster: ros-melodic-geneus
buster: [ros-melodic-geneus]
genlisp:
debian:
buster: ros-melodic-genlisp
buster: [ros-melodic-genlisp]
gennodejs:
debian:
buster: ros-melodic-gennodejs
buster: [ros-melodic-gennodejs]
genpy:
debian:
buster: ros-melodic-genpy
buster: [ros-melodic-genpy]
bond_core:
debian:
buster: ros-melodic-bond-core
buster: [ros-melodic-bond-core]
cmake_modules:
debian:
buster: ros-melodic-cmake-modules
buster: [ros-melodic-cmake-modules]
class_loader:
debian:
buster: ros-melodic-class-loader
buster: [ros-melodic-class-loader]
common_msgs:
debian:
buster: ros-melodic-common-msgs
buster: [ros-melodic-common-msgs]
common_tutorials:
debian:
buster: ros-melodic-common-tutorials
buster: [ros-melodic-common-tutorials]
cpp_common:
debian:
buster: ros-melodic-cpp-common
buster: [ros-melodic-cpp-common]
desktop:
debian:
buster: ros-melodic-desktop
buster: [ros-melodic-desktop]
diagnostics:
debian:
buster: ros-melodic-diagnostics
buster: [ros-melodic-diagnostics]
executive_smach:
debian:
buster: ros-melodic-executive-smach
buster: [ros-melodic-executive-smach]
geometry:
debian:
buster: ros-melodic-geometry
buster: [ros-melodic-geometry]
geometry_tutorials:
debian:
buster: ros-melodic-geometry-tutorials
buster: [ros-melodic-geometry-tutorials]
gl_dependency:
debian:
buster: ros-melodic-gl-dependency
buster: [ros-melodic-gl-dependency]
image_common:
debian:
buster: ros-melodic-image-common
buster: [ros-melodic-image-common]
image_pipeline:
debian:
buster: ros-melodic-image-pipeline
buster: [ros-melodic-image-pipeline]
image_transport_plugins:
debian:
buster: ros-melodic-image-transport-plugins
buster: [ros-melodic-image-transport-plugins]
laser_pipeline:
debian:
buster: ros-melodic-laser-pipeline
buster: [ros-melodic-laser-pipeline]
mavlink:
debian:
buster: ros-melodic-mavlink
buster: [ros-melodic-mavlink]
media_export:
debian:
buster: ros-melodic-media-export
buster: [ros-melodic-media-export]
message_generation:
debian:
buster: ros-melodic-message-generation
buster: [ros-melodic-message-generation]
message_runtime:
debian:
buster: ros-melodic-message-runtime
buster: [ros-melodic-message-runtime]
mk:
debian:
buster: ros-melodic-mk
buster: [ros-melodic-mk]
nodelet_core:
debian:
buster: ros-melodic-nodelet-core
buster: [ros-melodic-nodelet-core]
orocos_kdl:
debian:
buster: ros-melodic-orocos-kdl
buster: [ros-melodic-orocos-kdl]
perception:
debian:
buster: ros-melodic-perception
buster: [ros-melodic-perception]
perception_pcl:
debian:
buster: ros-melodic-perception-pcl
buster: [ros-melodic-perception-pcl]
python_orocos_kdl:
debian:
buster: ros-melodic-python-orocos-kdl
buster: [ros-melodic-python-orocos-kdl]
qt_dotgraph:
debian:
buster: ros-melodic-qt-dotgraph
buster: [ros-melodic-qt-dotgraph]
qt_gui:
debian:
buster: ros-melodic-qt-gui
buster: [ros-melodic-qt-gui]
qt_gui_py_common:
debian:
buster: ros-melodic-qt-gui-py-common
buster: [ros-melodic-qt-gui-py-common]
qwt_dependency:
debian:
buster: ros-melodic-qwt-dependency
buster: [ros-melodic-qwt-dependency]
robot:
debian:
buster: ros-melodic-robot
buster: [ros-melodic-robot]
ros:
debian:
buster: ros-melodic-ros
buster: [ros-melodic-ros]
ros_base:
debian:
buster: ros-melodic-ros-base
buster: [ros-melodic-ros-base]
ros_comm:
debian:
buster: ros-melodic-ros-comm
buster: [ros-melodic-ros-comm]
ros_core:
debian:
buster: ros-melodic-ros-core
buster: [ros-melodic-ros-core]
ros_environment:
debian:
buster: ros-melodic-ros-environment
buster: [ros-melodic-ros-environment]
ros_tutorials:
debian:
buster: ros-melodic-ros-tutorials
buster: [ros-melodic-ros-tutorials]
rosapi:
debian:
buster: ros-melodic-rosapi
buster: [ros-melodic-rosapi]
rosbag_migration_rule:
debian:
buster: ros-melodic-rosbag-migration-rule
buster: [ros-melodic-rosbag-migration-rule]
rosbash:
debian:
buster: ros-melodic-rosbash
buster: [ros-melodic-rosbash]
rosboost_cfg:
debian:
buster: ros-melodic-rosboost-cfg
buster: [ros-melodic-rosboost-cfg]
rosbridge_server:
debian:
buster: ros-melodic-rosbridge-server
buster: [ros-melodic-rosbridge-server]
rosbridge_suite:
debian:
buster: ros-melodic-rosbridge-suite
buster: [ros-melodic-rosbridge-suite]
rosbuild:
debian:
buster: ros-melodic-rosbuild
buster: [ros-melodic-rosbuild]
rosclean:
debian:
buster: ros-melodic-rosclean
buster: [ros-melodic-rosclean]
roscpp_core:
debian:
buster: ros-melodic-roscpp-core
buster: [ros-melodic-roscpp-core]
roscpp_traits:
debian:
buster: ros-melodic-roscpp-traits
buster: [ros-melodic-roscpp-traits]
roscreate:
debian:
buster: ros-melodic-roscreate
buster: [ros-melodic-roscreate]
rosgraph:
debian:
buster: ros-melodic-rosgraph
buster: [ros-melodic-rosgraph]
roslang:
debian:
buster: ros-melodic-roslang
buster: [ros-melodic-roslang]
roslint:
debian:
buster: ros-melodic-roslint
buster: [ros-melodic-roslint]
roslisp:
debian:
buster: ros-melodic-roslisp
buster: [ros-melodic-roslisp]
rosmake:
debian:
buster: ros-melodic-rosmake
buster: [ros-melodic-rosmake]
rosmaster:
debian:
buster: ros-melodic-rosmaster
buster: [ros-melodic-rosmaster]
rospack:
debian:
buster: ros-melodic-rospack
buster: [ros-melodic-rospack]
roslib:
debian:
buster: ros-melodic-roslib
buster: [ros-melodic-roslib]
rosparam:
debian:
buster: ros-melodic-rosparam
buster: [ros-melodic-rosparam]
rospy:
debian:
buster: ros-melodic-rospy
buster: [ros-melodic-rospy]
rosserial:
debian:
buster: ros-melodic-rosserial
buster: [ros-melodic-rosserial]
rosserial_msgs:
debian:
buster: ros-melodic-rosserial-msgs
buster: [ros-melodic-rosserial-msgs]
rosserial_python:
debian:
buster: ros-melodic-rosserial-python
buster: [ros-melodic-rosserial-python]
rosservice:
debian:
buster: ros-melodic-rosservice
buster: [ros-melodic-rosservice]
rostime:
debian:
buster: ros-melodic-rostime
buster: [ros-melodic-rostime]
roscpp_serialization:
debian:
buster: ros-melodic-roscpp-serialization
buster: [ros-melodic-roscpp-serialization]
python_qt_binding:
debian:
buster: ros-melodic-python-qt-binding
buster: [ros-melodic-python-qt-binding]
roslaunch:
debian:
buster: ros-melodic-roslaunch
buster: [ros-melodic-roslaunch]
rosunit:
debian:
buster: ros-melodic-rosunit
buster: [ros-melodic-rosunit]
angles:
debian:
buster: ros-melodic-angles
buster: [ros-melodic-angles]
libmavconn:
debian:
buster: ros-melodic-libmavconn
buster: [ros-melodic-libmavconn]
rosconsole:
debian:
buster: ros-melodic-rosconsole
buster: [ros-melodic-rosconsole]
pluginlib:
debian:
buster: ros-melodic-pluginlib
buster: [ros-melodic-pluginlib]
qt_gui_cpp:
debian:
buster: ros-melodic-qt-gui-cpp
buster: [ros-melodic-qt-gui-cpp]
resource_retriever:
debian:
buster: ros-melodic-resource-retriever
buster: [ros-melodic-resource-retriever]
rosconsole_bridge:
debian:
buster: ros-melodic-rosconsole-bridge
buster: [ros-melodic-rosconsole-bridge]
roslz4:
debian:
buster: ros-melodic-roslz4
buster: [ros-melodic-roslz4]
rosserial_client:
debian:
buster: ros-melodic-rosserial-client
buster: [ros-melodic-rosserial-client]
rostest:
debian:
buster: ros-melodic-rostest
buster: [ros-melodic-rostest]
rqt_action:
debian:
buster: ros-melodic-rqt-action
buster: [ros-melodic-rqt-action]
rqt_bag:
debian:
buster: ros-melodic-rqt-bag
buster: [ros-melodic-rqt-bag]
rqt_bag_plugins:
debian:
buster: ros-melodic-rqt-bag-plugins
buster: [ros-melodic-rqt-bag-plugins]
rqt_common_plugins:
debian:
buster: ros-melodic-rqt-common-plugins
buster: [ros-melodic-rqt-common-plugins]
rqt_console:
debian:
buster: ros-melodic-rqt-console
buster: [ros-melodic-rqt-console]
rqt_dep:
debian:
buster: ros-melodic-rqt-dep
buster: [ros-melodic-rqt-dep]
rqt_graph:
debian:
buster: ros-melodic-rqt-graph
buster: [ros-melodic-rqt-graph]
rqt_gui:
debian:
buster: ros-melodic-rqt-gui
buster: [ros-melodic-rqt-gui]
rqt_logger_level:
debian:
buster: ros-melodic-rqt-logger-level
buster: [ros-melodic-rqt-logger-level]
rqt_moveit:
debian:
buster: ros-melodic-rqt-moveit
buster: [ros-melodic-rqt-moveit]
rqt_msg:
debian:
buster: ros-melodic-rqt-msg
buster: [ros-melodic-rqt-msg]
rqt_nav_view:
debian:
buster: ros-melodic-rqt-nav-view
buster: [ros-melodic-rqt-nav-view]
rqt_plot:
debian:
buster: ros-melodic-rqt-plot
buster: [ros-melodic-rqt-plot]
rqt_pose_view:
debian:
buster: ros-melodic-rqt-pose-view
buster: [ros-melodic-rqt-pose-view]
rqt_publisher:
debian:
buster: ros-melodic-rqt-publisher
buster: [ros-melodic-rqt-publisher]
rqt_py_console:
debian:
buster: ros-melodic-rqt-py-console
buster: [ros-melodic-rqt-py-console]
rqt_reconfigure:
debian:
buster: ros-melodic-rqt-reconfigure
buster: [ros-melodic-rqt-reconfigure]
rqt_robot_dashboard:
debian:
buster: ros-melodic-rqt-robot-dashboard
buster: [ros-melodic-rqt-robot-dashboard]
rqt_robot_monitor:
debian:
buster: ros-melodic-rqt-robot-monitor
buster: [ros-melodic-rqt-robot-monitor]
rqt_robot_plugins:
debian:
buster: ros-melodic-rqt-robot-plugins
buster: [ros-melodic-rqt-robot-plugins]
rqt_robot_steering:
debian:
buster: ros-melodic-rqt-robot-steering
buster: [ros-melodic-rqt-robot-steering]
rqt_runtime_monitor:
debian:
buster: ros-melodic-rqt-runtime-monitor
buster: [ros-melodic-rqt-runtime-monitor]
rqt_service_caller:
debian:
buster: ros-melodic-rqt-service-caller
buster: [ros-melodic-rqt-service-caller]
rqt_shell:
debian:
buster: ros-melodic-rqt-shell
buster: [ros-melodic-rqt-shell]
rqt_srv:
debian:
buster: ros-melodic-rqt-srv
buster: [ros-melodic-rqt-srv]
rqt_tf_tree:
debian:
buster: ros-melodic-rqt-tf-tree
buster: [ros-melodic-rqt-tf-tree]
rqt_top:
debian:
buster: ros-melodic-rqt-top
buster: [ros-melodic-rqt-top]
rqt_topic:
debian:
buster: ros-melodic-rqt-topic
buster: [ros-melodic-rqt-topic]
rqt_web:
debian:
buster: ros-melodic-rqt-web
buster: [ros-melodic-rqt-web]
smach:
debian:
buster: ros-melodic-smach
buster: [ros-melodic-smach]
smclib:
debian:
buster: ros-melodic-smclib
buster: [ros-melodic-smclib]
std_msgs:
debian:
buster: ros-melodic-std-msgs
buster: [ros-melodic-std-msgs]
actionlib_msgs:
debian:
buster: ros-melodic-actionlib-msgs
buster: [ros-melodic-actionlib-msgs]
bond:
debian:
buster: ros-melodic-bond
buster: [ros-melodic-bond]
diagnostic_msgs:
debian:
buster: ros-melodic-diagnostic-msgs
buster: [ros-melodic-diagnostic-msgs]
geometry_msgs:
debian:
buster: ros-melodic-geometry-msgs
buster: [ros-melodic-geometry-msgs]
eigen_conversions:
debian:
buster: ros-melodic-eigen-conversions
buster: [ros-melodic-eigen-conversions]
kdl_conversions:
debian:
buster: ros-melodic-kdl-conversions
buster: [ros-melodic-kdl-conversions]
nav_msgs:
debian:
buster: ros-melodic-nav-msgs
buster: [ros-melodic-nav-msgs]
rosbridge_msgs:
debian:
buster: ros-melodic-rosbridge-msgs
buster: [ros-melodic-rosbridge-msgs]
rosgraph_msgs:
debian:
buster: ros-melodic-rosgraph-msgs
buster: [ros-melodic-rosgraph-msgs]
rosmsg:
debian:
buster: ros-melodic-rosmsg
buster: [ros-melodic-rosmsg]
rqt_py_common:
debian:
buster: ros-melodic-rqt-py-common
buster: [ros-melodic-rqt-py-common]
shape_msgs:
debian:
buster: ros-melodic-shape-msgs
buster: [ros-melodic-shape-msgs]
smach_msgs:
debian:
buster: ros-melodic-smach-msgs
buster: [ros-melodic-smach-msgs]
std_srvs:
debian:
buster: ros-melodic-std-srvs
buster: [ros-melodic-std-srvs]
tf2_msgs:
debian:
buster: ros-melodic-tf2-msgs
buster: [ros-melodic-tf2-msgs]
tf2:
debian:
buster: ros-melodic-tf2
buster: [ros-melodic-tf2]
tf2_eigen:
debian:
buster: ros-melodic-tf2-eigen
buster: [ros-melodic-tf2-eigen]
trajectory_msgs:
debian:
buster: ros-melodic-trajectory-msgs
buster: [ros-melodic-trajectory-msgs]
control_msgs:
debian:
buster: ros-melodic-control-msgs
buster: [ros-melodic-control-msgs]
urdf_parser_plugin:
debian:
buster: ros-melodic-urdf-parser-plugin
buster: [ros-melodic-urdf-parser-plugin]
urdfdom_py:
debian:
buster: ros-melodic-urdfdom-py
buster: [ros-melodic-urdfdom-py]
uuid_msgs:
debian:
buster: ros-melodic-uuid-msgs
buster: [ros-melodic-uuid-msgs]
geographic_msgs:
debian:
buster: ros-melodic-geographic-msgs
buster: [ros-melodic-geographic-msgs]
vision_opencv:
debian:
buster: ros-melodic-vision-opencv
buster: [ros-melodic-vision-opencv]
visualization_msgs:
debian:
buster: ros-melodic-visualization-msgs
buster: [ros-melodic-visualization-msgs]
visualization_tutorials:
debian:
buster: ros-melodic-visualization-tutorials
buster: [ros-melodic-visualization-tutorials]
viz:
debian:
buster: ros-melodic-viz
buster: [ros-melodic-viz]
webkit_dependency:
debian:
buster: ros-melodic-webkit-dependency
buster: [ros-melodic-webkit-dependency]
xmlrpcpp:
debian:
buster: ros-melodic-xmlrpcpp
buster: [ros-melodic-xmlrpcpp]
roscpp:
debian:
buster: ros-melodic-roscpp
buster: [ros-melodic-roscpp]
bondcpp:
debian:
buster: ros-melodic-bondcpp
buster: [ros-melodic-bondcpp]
bondpy:
debian:
buster: ros-melodic-bondpy
buster: [ros-melodic-bondpy]
nodelet:
debian:
buster: ros-melodic-nodelet
buster: [ros-melodic-nodelet]
nodelet_tutorial_math:
debian:
buster: ros-melodic-nodelet-tutorial-math
buster: [ros-melodic-nodelet-tutorial-math]
pluginlib_tutorials:
debian:
buster: ros-melodic-pluginlib-tutorials
buster: [ros-melodic-pluginlib-tutorials]
roscpp_tutorials:
debian:
buster: ros-melodic-roscpp-tutorials
buster: [ros-melodic-roscpp-tutorials]
rosout:
debian:
buster: ros-melodic-rosout
buster: [ros-melodic-rosout]
async_web_server_cpp:
debian:
buster: ros-melodic-async-web-server-cpp
buster: [ros-melodic-async-web-server-cpp]
camera_calibration:
debian:
buster: ros-melodic-camera-calibration
buster: [ros-melodic-camera-calibration]
diagnostic_aggregator:
debian:
buster: ros-melodic-diagnostic-aggregator
buster: [ros-melodic-diagnostic-aggregator]
diagnostic_updater:
debian:
buster: ros-melodic-diagnostic-updater
buster: [ros-melodic-diagnostic-updater]
diagnostic_common_diagnostics:
debian:
buster: ros-melodic-diagnostic-common-diagnostics
buster: [ros-melodic-diagnostic-common-diagnostics]
dynamic_reconfigure:
debian:
buster: ros-melodic-dynamic-reconfigure
buster: [ros-melodic-dynamic-reconfigure]
filters:
debian:
buster: ros-melodic-filters
buster: [ros-melodic-filters]
joint_state_publisher:
debian:
buster: ros-melodic-joint-state-publisher
buster: [ros-melodic-joint-state-publisher]
message_filters:
debian:
buster: ros-melodic-message-filters
buster: [ros-melodic-message-filters]
ros_pytest:
debian:
buster: ros-melodic-ros-pytest
buster: [ros-melodic-ros-pytest]
rosauth:
debian:
buster: ros-melodic-rosauth
buster: [ros-melodic-rosauth]
rosbag_storage:
debian:
buster: ros-melodic-rosbag-storage
buster: [ros-melodic-rosbag-storage]
rosnode:
debian:
buster: ros-melodic-rosnode
buster: [ros-melodic-rosnode]
rospy_tutorials:
debian:
buster: ros-melodic-rospy-tutorials
buster: [ros-melodic-rospy-tutorials]
rosshow:
debian:
buster: ros-melodic-rosshow
buster: [ros-melodic-rosshow]
rostopic:
debian:
buster: ros-melodic-rostopic
buster: [ros-melodic-rostopic]
rqt_gui_cpp:
debian:
buster: ros-melodic-rqt-gui-cpp
buster: [ros-melodic-rqt-gui-cpp]
rqt_gui_py:
debian:
buster: ros-melodic-rqt-gui-py
buster: [ros-melodic-rqt-gui-py]
self_test:
debian:
buster: ros-melodic-self-test
buster: [ros-melodic-self-test]
smach_ros:
debian:
buster: ros-melodic-smach-ros
buster: [ros-melodic-smach-ros]
tf2_py:
debian:
buster: ros-melodic-tf2-py
buster: [ros-melodic-tf2-py]
topic_tools:
debian:
buster: ros-melodic-topic-tools
buster: [ros-melodic-topic-tools]
rosbag:
debian:
buster: ros-melodic-rosbag
buster: [ros-melodic-rosbag]
actionlib:
debian:
buster: ros-melodic-actionlib
buster: [ros-melodic-actionlib]
actionlib_tutorials:
debian:
buster: ros-melodic-actionlib-tutorials
buster: [ros-melodic-actionlib-tutorials]
diagnostic_analysis:
debian:
buster: ros-melodic-diagnostic-analysis
buster: [ros-melodic-diagnostic-analysis]
nodelet_topic_tools:
debian:
buster: ros-melodic-nodelet-topic-tools
buster: [ros-melodic-nodelet-topic-tools]
roswtf:
debian:
buster: ros-melodic-roswtf
buster: [ros-melodic-roswtf]
rqt_launch:
debian:
buster: ros-melodic-rqt-launch
buster: [ros-melodic-rqt-launch]
sensor_msgs:
debian:
buster: ros-melodic-sensor-msgs
buster: [ros-melodic-sensor-msgs]
camera_calibration_parsers:
debian:
buster: ros-melodic-camera-calibration-parsers
buster: [ros-melodic-camera-calibration-parsers]
cv_bridge:
debian:
buster: ros-melodic-cv-bridge
buster: [ros-melodic-cv-bridge]
image_geometry:
debian:
buster: ros-melodic-image-geometry
buster: [ros-melodic-image-geometry]
image_transport:
debian:
buster: ros-melodic-image-transport
buster: [ros-melodic-image-transport]
camera_info_manager:
debian:
buster: ros-melodic-camera-info-manager
buster: [ros-melodic-camera-info-manager]
compressed_depth_image_transport:
debian:
buster: ros-melodic-compressed-depth-image-transport
buster: [ros-melodic-compressed-depth-image-transport]
compressed_image_transport:
debian:
buster: ros-melodic-compressed-image-transport
buster: [ros-melodic-compressed-image-transport]
cv_camera:
debian:
buster: ros-melodic-cv-camera
buster: [ros-melodic-cv-camera]
image_proc:
debian:
buster: ros-melodic-image-proc
buster: [ros-melodic-image-proc]
image_publisher:
debian:
buster: ros-melodic-image-publisher
buster: [ros-melodic-image-publisher]
map_msgs:
debian:
buster: ros-melodic-map-msgs
buster: [ros-melodic-map-msgs]
mavros_msgs:
debian:
buster: ros-melodic-mavros-msgs
buster: [ros-melodic-mavros-msgs]
pcl_msgs:
debian:
buster: ros-melodic-pcl-msgs
buster: [ros-melodic-pcl-msgs]
pcl_conversions:
debian:
buster: ros-melodic-pcl-conversions
buster: [ros-melodic-pcl-conversions]
polled_camera:
debian:
buster: ros-melodic-polled-camera
buster: [ros-melodic-polled-camera]
rqt_image_view:
debian:
buster: ros-melodic-rqt-image-view
buster: [ros-melodic-rqt-image-view]
stereo_msgs:
debian:
buster: ros-melodic-stereo-msgs
buster: [ros-melodic-stereo-msgs]
image_view:
debian:
buster: ros-melodic-image-view
buster: [ros-melodic-image-view]
rosbridge_library:
debian:
buster: ros-melodic-rosbridge-library
buster: [ros-melodic-rosbridge-library]
stereo_image_proc:
debian:
buster: ros-melodic-stereo-image-proc
buster: [ros-melodic-stereo-image-proc]
tf2_ros:
debian:
buster: ros-melodic-tf2-ros
buster: [ros-melodic-tf2-ros]
depth_image_proc:
debian:
buster: ros-melodic-depth-image-proc
buster: [ros-melodic-depth-image-proc]
mavros:
debian:
buster: ros-melodic-mavros
buster: [ros-melodic-mavros]
tf:
debian:
buster: ros-melodic-tf
buster: [ros-melodic-tf]
interactive_markers:
debian:
buster: ros-melodic-interactive-markers
buster: [ros-melodic-interactive-markers]
interactive_marker_tutorials:
debian:
buster: ros-melodic-interactive-marker-tutorials
buster: [ros-melodic-interactive-marker-tutorials]
laser_geometry:
debian:
buster: ros-melodic-laser-geometry
buster: [ros-melodic-laser-geometry]
laser_assembler:
debian:
buster: ros-melodic-laser-assembler
buster: [ros-melodic-laser-assembler]
laser_filters:
debian:
buster: ros-melodic-laser-filters
buster: [ros-melodic-laser-filters]
pcl_ros:
debian:
buster: ros-melodic-pcl-ros
buster: [ros-melodic-pcl-ros]
tf2_geometry_msgs:
debian:
buster: ros-melodic-tf2-geometry-msgs
buster: [ros-melodic-tf2-geometry-msgs]
image_rotate:
debian:
buster: ros-melodic-image-rotate
buster: [ros-melodic-image-rotate]
tf2_kdl:
debian:
buster: ros-melodic-tf2-kdl
buster: [ros-melodic-tf2-kdl]
tf2_web_republisher:
debian:
buster: ros-melodic-tf2-web-republisher
buster: [ros-melodic-tf2-web-republisher]
tf_conversions:
debian:
buster: ros-melodic-tf-conversions
buster: [ros-melodic-tf-conversions]
theora_image_transport:
debian:
buster: ros-melodic-theora-image-transport
buster: [ros-melodic-theora-image-transport]
turtlesim:
debian:
buster: ros-melodic-turtlesim
buster: [ros-melodic-turtlesim]
turtle_actionlib:
debian:
buster: ros-melodic-turtle-actionlib
buster: [ros-melodic-turtle-actionlib]
turtle_tf:
debian:
buster: ros-melodic-turtle-tf
buster: [ros-melodic-turtle-tf]
turtle_tf2:
debian:
buster: ros-melodic-turtle-tf2
buster: [ros-melodic-turtle-tf2]
urdf:
debian:
buster: ros-melodic-urdf
buster: [ros-melodic-urdf]
kdl_parser:
debian:
buster: ros-melodic-kdl-parser
buster: [ros-melodic-kdl-parser]
kdl_parser_py:
debian:
buster: ros-melodic-kdl-parser-py
buster: [ros-melodic-kdl-parser-py]
mavros_extras:
debian:
buster: ros-melodic-mavros-extras
buster: [ros-melodic-mavros-extras]
robot_state_publisher:
debian:
buster: ros-melodic-robot-state-publisher
buster: [ros-melodic-robot-state-publisher]
rviz:
debian:
buster: ros-melodic-rviz
buster: [ros-melodic-rviz]
librviz_tutorial:
debian:
buster: ros-melodic-librviz-tutorial
buster: [ros-melodic-librviz-tutorial]
rqt_rviz:
debian:
buster: ros-melodic-rqt-rviz
buster: [ros-melodic-rqt-rviz]
rviz_plugin_tutorials:
debian:
buster: ros-melodic-rviz-plugin-tutorials
buster: [ros-melodic-rviz-plugin-tutorials]
rviz_python_tutorial:
debian:
buster: ros-melodic-rviz-python-tutorial
buster: [ros-melodic-rviz-python-tutorial]
urdf_tutorial:
debian:
buster: ros-melodic-urdf-tutorial
buster: [ros-melodic-urdf-tutorial]
usb_cam:
debian:
buster: ros-melodic-usb-cam
buster: [ros-melodic-usb-cam]
visualization_marker_tutorials:
debian:
buster: ros-melodic-visualization-marker-tutorials
buster: [ros-melodic-visualization-marker-tutorials]
vl53l1x:
debian:
buster: ros-melodic-vl53l1x
buster: [ros-melodic-vl53l1x]
web_video_server:
debian:
buster: ros-melodic-web-video-server
buster: [ros-melodic-web-video-server]
xacro:
debian:
buster: ros-melodic-xacro
buster: [ros-melodic-xacro]
led_msgs:
debian:
buster: ros-melodic-led-msgs
buster: [ros-melodic-led-msgs]
ws281x:
debian:
stretch: ros-melodic-ws281x
buster: [ros-melodic-ws281x]
ddynamic_reconfigure:
debian:
buster: [ros-melodic-ddynamic-reconfigure]
librealsense2:
debian:
buster: [ros-melodic-librealsense2]
realsense2_camera:
debian:
buster: [ros-melodic-realsense2-camera]
realsense2_description:
debian:
buster: [ros-melodic-realsense2-description]

View File

@@ -1,6 +1,5 @@
[Unit]
Description=Launcher for the ROS master, parameter server and rosout logging node
After=network.target
[Service]
User=pi

113
builder/assets/rsyslog.conf Normal file
View File

@@ -0,0 +1,113 @@
# /etc/rsyslog.conf configuration file for rsyslog
#
# For more information install rsyslog-doc and see
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
#################
#### MODULES ####
#################
module(load="imuxsock") # provides support for local system logging
module(load="imklog") # provides kernel logging support
#module(load="immark") # provides --MARK-- message capability
# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")
# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")
###########################
#### GLOBAL DIRECTIVES ####
###########################
#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#
# Set the default permissions for all log files.
#
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog
#
# Limit log to 40 messages per second on average (should be plenty)
#
$SystemLogRateLimitInterval 5
$SystemLogRateLimitBurst 200
#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
#
# Enable custom output channels to limit file sizes
#
$outchannel limauth,/var/log/auth.log,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/auth.log
$outchannel limsyslog,/var/log/syslog,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/syslog
$outchannel limdaemon,/var/log/daemon.log,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/daemon.log
$outchannel limkern,/var/log/kern.log,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/kern.log
$outchannel limlpr,/var/log/lpr.log,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/lpr.log
$outchannel limmail,/var/log/mail.log,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/mail.log
$outchannel limmailinfo,/var/log/mail.info,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/mail.info
$outchannel limmailwarn,/var/log/mail.warn,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/mail.warn
$outchannel limmailerr,/var/log/mail.err,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/mail.err
$outchannel limuser,/var/log/user.log,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/user.log
$outchannel limdebug,/var/log/debug,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/debug
$outchannel limmsgs,/var/log/messages,10485760,/etc/rsyslog.d/rsysrot.sh /var/log/messages
###############
#### RULES ####
###############
#
# First some standard log files. Log by facility.
#
auth,authpriv.* :omfile:$limauth
*.*;auth,authpriv.none :omfile:$limsyslog
#cron.* /var/log/cron.log
daemon.* :omfile:$limdaemon
kern.* :omfile:$limkern
lpr.* :omfile:$limlpr
mail.* :omfile:$limmail
user.* :omfile:$limuser
#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info :omfile:$limmailinfo
mail.warn :omfile:$limmailwarn
mail.err :omfile:$limmailerr
#
# Some "catch-all" log files.
#
*.=debug;\
auth,authpriv.none;\
news.none;mail.none :omfile:$limdebug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none :omfile:$limmsgs
#
# Emergencies are sent to everybody logged in.
#
*.emerg :omusrmsg:*

4
builder/assets/rsysrot.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
LOG_FILE=$1
mv -f ${LOG_FILE} ${LOG_FILE}.1

View File

@@ -95,7 +95,9 @@ done
# Monkey
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/monkey' '/root/'
# rsyslog config
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/rsyslog.conf' '/etc'
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/rsysrot.sh' '/etc/rsyslog.d'
# Butterfly
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/butterfly.service' '/lib/systemd/system/'
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/butterfly.socket' '/lib/systemd/system/'

View File

@@ -111,6 +111,7 @@ cd /home/pi/catkin_ws/src/clever
NPM_CONFIG_UNSAFE_PERM=true npm install gitbook-cli -g
NPM_CONFIG_UNSAFE_PERM=true gitbook install
gitbook build
touch node_modules/CATKIN_IGNORE docs/CATKIN_IGNORE _book/CATKIN_IGNORE clever/www/CATKIN_IGNORE apps/CATKIN_IGNORE # ignore documentation files by catkin
echo_stamp "Installing additional ROS packages"
apt-get install -y --no-install-recommends \

View File

@@ -66,6 +66,7 @@ apt-get update \
&& apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
echo "deb http://packages.ros.org/ros/ubuntu buster main" > /etc/apt/sources.list.d/ros-latest.list
echo "deb http://deb.coex.tech/opencv3 buster main" > /etc/apt/sources.list.d/opencv3.list
echo "deb http://deb.coex.tech/rpi-ros-melodic buster main" > /etc/apt/sources.list.d/rpi-ros-melodic.list
# FIXME: We still don't have these packages built for Buster
# FIXME: Check these packages after their installation

View File

@@ -17,7 +17,7 @@ EXCLUDE = 'rviz.png', 'ssid.png', 'sitl_docker_demo.png', 'qgc-params.png', 'but
'cl3_mountBEC.JPG', 'cl3_mountRpiCamera.JPG', 'clever4-front-black-large.png', \
'qgc-battery.png', 'qgc-radio.png', 'qgc-cal-acc.png', 'qgc-esc.png', 'qgc-cal-compass.png', \
'qgc.png', 'qgc-parameters.png', 'clever4-front-white-large.png', 'qgc-modes.png', \
'qgc-requires-setup.png', 'clever4-front-white.png', 'clever4-kit-white.png', '26_1.png'
'qgc-requires-setup.png', 'clever4-front-white.png', 'clever4-kit-white.png', '26_1.png', 'battery_holder.stl'
code = 0

View File

@@ -8,7 +8,7 @@
<arg name="optical_flow" default="false"/>
<arg name="aruco" default="false"/>
<arg name="rangefinder_vl53l1x" default="false"/>
<arg name="led" default="false"/>
<arg name="led" default="true"/>
<arg name="rc" default="true"/>
<!-- log formatting -->
@@ -63,6 +63,8 @@
<!-- vl53l1x ToF rangefinder -->
<node name="rangefinder" pkg="vl53l1x" type="vl53l1x_node" output="screen" if="$(arg rangefinder_vl53l1x)">
<param name="frame_id" value="rangefinder"/>
<param name="min_signal" value="0.4"/>
<param name="pass_statuses" type="yaml" value="[0, 6, 7, 11]"/>
</node>
<!-- led strip -->

View File

@@ -9,7 +9,7 @@
<node pkg="ws281x" name="led" type="ws281x_node" clear_params="true" output="screen" if="$(arg ws281x)">
<param name="led_count" value="58"/>
<param name="gpio_pin" value="21"/>
<param name="brightness" value="100"/>
<param name="brightness" value="64"/>
<param name="strip_type" value="WS2811_STRIP_GRB"/>
<param name="target_frequency" value="800000"/>
<param name="dma" value="10"/>

View File

@@ -1,5 +1,5 @@
<launch>
<arg name="fcu_conn" default="usb"/>
<arg name="fcu_conn" default="usb"/> <!-- options: usb, uart, tcp, udp, sitl -->
<arg name="fcu_ip" default="127.0.0.1"/>
<arg name="gcs_bridge" default="tcp"/>
<arg name="viz" default="true"/>
@@ -13,9 +13,12 @@
<!-- USB connection -->
<param name="fcu_url" value="/dev/px4fmu" if="$(eval fcu_conn == 'usb')"/>
<!-- sitl -->
<!-- sitl before PX4 1.9.0 -->
<param name="fcu_url" value="udp://@$(arg fcu_ip):14557" if="$(eval fcu_conn == 'udp')"/>
<!-- sitl since PX4 1.9.0 -->
<param name="fcu_url" value="udp://@$(arg fcu_ip):14580" if="$(eval fcu_conn == 'sitl')"/>
<!-- gcs bridge -->
<param name="gcs_url" value="tcp-l://0.0.0.0:5760" if="$(eval gcs_bridge == 'tcp')"/>
<param name="gcs_url" value="udp://0.0.0.0:14550@14550" if="$(eval gcs_bridge == 'udp')"/>

View File

@@ -13,6 +13,7 @@
<arg name="rosbridge" value="$(arg rosbridge)"/>
<arg name="aruco" default="false"/>
<arg name="rangefinder_vl53l1x" default="false"/>
<arg name="led" default="false"/>
<arg name="rc" default="false"/>
</include>
</launch>

View File

@@ -278,7 +278,8 @@ void handleLog(const rosgraph_msgs::Log& log)
void handleBattery(const sensor_msgs::BatteryState& msg)
{
for (auto const& voltage : msg.cell_voltage) {
if (voltage < low_battery_threshold) {
if (voltage < low_battery_threshold &&
voltage > 2.0) { // voltage < 2.0 likely indicates incorrect voltage measurement
// notify low battery every time
notify("low_battery");
}

View File

@@ -9,6 +9,7 @@
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
import os
import math
import subprocess
import re
@@ -94,7 +95,7 @@ def get_param(name):
return None
if not res.success:
failure('Unable to retrieve PX4 parameter %s', name)
failure('unable to retrieve PX4 parameter %s', name)
else:
if res.value.integer != 0:
return res.value.integer
@@ -224,6 +225,12 @@ def check_fcu():
else:
info('LPE_FUSION: barometer fusion is disabled')
mag_yaw_w = get_param('ATT_W_MAG')
if mag_yaw_w == 0:
info('magnetometer weight (ATT_W_MAG) is zero, better for indoor flights')
else:
info('magnetometer weight (ATT_W_MAG) is non-zero (%.2f), better for outdoor flights', mag_yaw_w)
elif est == 2:
info('selected estimator: EKF2')
else:
@@ -238,15 +245,18 @@ def check_fcu():
cbrk_usb_chk = get_param('CBRK_USB_CHK')
if cbrk_usb_chk != 197848:
failure('Set parameter CBRK_USB_CHK to 197848 for flying with USB connected')
failure('set parameter CBRK_USB_CHK to 197848 for flying with USB connected')
try:
battery = rospy.wait_for_message('mavros/battery', BatteryState, timeout=3)
cell = battery.cell_voltage[0]
if cell > 4.3 or cell < 3.0:
failure('Incorrect cell voltage: %.2f V, https://clever.coex.tech/power', cell)
elif cell < 3.7:
failure('Critically low cell voltage: %.2f V, recharge battery', cell)
if not battery.cell_voltage:
failure('cell voltage is not available, https://clever.coex.tech/power')
else:
cell = battery.cell_voltage[0]
if cell > 4.3 or cell < 3.0:
failure('incorrect cell voltage: %.2f V, https://clever.coex.tech/power', cell)
elif cell < 3.7:
failure('critically low cell voltage: %.2f V, recharge battery', cell)
except rospy.ROSException:
failure('no battery state')
@@ -686,9 +696,67 @@ def check_preflight_status():
failure(' '.join([match.groups()[1], 'check:', check_status]))
@check('Network')
def check_network():
ros_hostname = os.environ.get('ROS_HOSTNAME').strip()
if not ros_hostname:
failure('no ROS_HOSTNAME is set')
elif ros_hostname.endswith('.local'):
# using mdns hostname
hosts = open('/etc/hosts', 'r')
for line in hosts:
parts = line.split()
if len(parts) < 2:
continue
ip = parts.pop(0).split('.')
if ip[0] == '127': # loopback ip
if ros_hostname in parts:
break
else:
failure('not found %s in /etc/hosts, ROS will malfunction if network interfaces are down, https://clever.coex.tech/hostname', ros_hostname)
@check('RPi health')
def check_rpi_health():
# `vcgencmd get_throttled` output codes taken from
# https://github.com/raspberrypi/documentation/blob/JamesH65-patch-vcgencmd-vcdbg-docs/raspbian/applications/vcgencmd.md#get_throttled
# TODO: support more base platforms?
FLAG_UNDERVOLTAGE_NOW = 0x1
FLAG_FREQ_CAP_NOW = 0x2
FLAG_THROTTLING_NOW = 0x4
FLAG_THERMAL_LIMIT_NOW = 0x8
FLAG_UNDERVOLTAGE_OCCURRED = 0x10000
FLAG_FREQ_CAP_OCCURRED = 0x20000
FLAG_THROTTLING_OCCURRED = 0x40000
FLAG_THERMAL_LIMIT_OUCCURRED = 0x80000
try:
# vcgencmd outputs a single string in a form of
# <parameter>=<value>
# In case of `get_throttled`, <value> is a hexadecimal number
# with some of the FLAGs OR'ed together
output = subprocess.check_output(['vcgencmd', 'get_throttled'])
except OSError:
failure('could not call vcgencmd binary; not a Raspberry Pi?')
return
throttle_mask = int(output.split('=')[1], base=16)
if throttle_mask & (FLAG_THROTTLING_NOW | FLAG_THROTTLING_OCCURRED):
failure('system throttled to prevent damage')
if throttle_mask & (FLAG_UNDERVOLTAGE_NOW | FLAG_UNDERVOLTAGE_OCCURRED):
failure('not enough power for onboard computer, flight inadvisable')
if throttle_mask & (FLAG_FREQ_CAP_NOW | FLAG_FREQ_CAP_OCCURRED):
failure('CPU frequency reduced to avoid overheating')
if throttle_mask & (FLAG_THERMAL_LIMIT_NOW | FLAG_THERMAL_LIMIT_OUCCURRED):
failure('CPU over soft temperature limit, expect performance loss')
def selfcheck():
check_image()
check_clever_service()
check_network()
check_fcu()
check_imu()
check_local_position()
@@ -701,6 +769,7 @@ def selfcheck():
check_optical_flow()
check_vpe()
check_rangefinder()
check_rpi_health()
check_cpu_usage()
check_boot_duration()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 523 KiB

After

Width:  |  Height:  |  Size: 322 KiB

BIN
docs/assets/4/31_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 772 KiB

BIN
docs/assets/4/43_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

BIN
docs/assets/coexpix-top.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 KiB

15980
docs/assets/dxf/arm.dxf Normal file

File diff suppressed because it is too large Load Diff

15376
docs/assets/dxf/big_leg.dxf Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

19794
docs/assets/dxf/deck.dxf Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

15334
docs/assets/dxf/leg.dxf Normal file

File diff suppressed because it is too large Load Diff

15256
docs/assets/dxf/prop_guard.dxf Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

BIN
docs/assets/programming.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
docs/assets/raspberry.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

View File

@@ -1,6 +1,6 @@
Using an external 3G modem
===
To use an external 3G modem on Raspberry, you can use the [`sakis3g`] package (https://github.com/Trixarian/sakis3g-source).
To use an external 3G modem on Raspberry, you can use the [`sakis3g`](https://github.com/Trixarian/sakis3g-source) package.
TODO

View File

@@ -20,34 +20,37 @@
* [Connection to the Pixracer](connection.md)
* [Using QGroundControl over Wi-Fi](gcs_bridge.md)
* [Remote shell](ssh.md)
* [Editing files](editing.md)
* [Command line interface](cli.md)
* [Automated self-checks](selfcheck.md)
* [Viewing images from cameras](web_video_server.md)
* Programming
* [ROS](ros.md)
* [MAVROS](mavros.md)
* [Overview](programming.md)
* [Camera orientation](camera_frame.md)
* [Coordinate systems (frames)](frames.md)
* [Simple OFFBOARD](simple_offboard.md)
* [Code snippets](snippets.md)
* Fiducial markers (ArUco)
* [Overview](aruco.md)
* [Marker detection](aruco_marker.md)
* [Map-based navigation](aruco_map.md)
* [Optical Flow](optical_flow.md)
* [Computer vision basics](camera.md)
* [Simple OFFBOARD](simple_offboard.md)
* [Coordinate systems (frames)](frames.md)
* [Code snippets](snippets.md)
* [Interfacing with a laser rangefinder](laser.md)
* [LED strip](leds.md)
* [Working with GPIO](gpio.md)
* [Interfacing with a sonar](sonar.md)
* [Computer vision basics](camera.md)
* [Using rviz and rqt](rviz.md)
* [Interfacing with a laser rangefinder](laser.md)
* [Software autorun](autolaunch.md)
* [Software autorun](autolaunch.md)
* [ROS](ros.md)
* [MAVROS](mavros.md)
* Supplementary materials
* [COEX Pix](coex_pix.md)
* [Guide on autonomous flight](auto_setup.md)
* [Hostname](hostname.md)
* [PX4 Simulation](sitl.md)
* [PID Setup](calibratePID.md)
* [ROS Kinetic installation](ros-install.md)
* [Model files for parts](models.md)
* [ROS Melodic installation](ros-install.md)
* [Remote control app](rc.md)
* [Wi-Fi Configuration](network.md)
* [UART settings](uart.md)
@@ -75,7 +78,6 @@
* [Android RC app](android.md)
* [3D-scanning drone](3dscan.md)
* [Human pose estimation drone control](human_pose_estimation_drone_control.md)
* [Copter Hack 2019](copterhack2019.md)
* [Copter Hack 2018](copterhack2018.md)
* [Copter Hack 2017](copterhack2017.md)
* Textbook
* [Theory and Videos](lessons.md)

View File

@@ -61,6 +61,8 @@ Usage example:
rosrun aruco_pose genmap.py 0.33 2 4 1 1 0 > ~/catkin_ws/src/clever/aruco_pose/map/test_map.txt
```
<!-- You can also use the [online map editor](arucogenmap.md) to create ArUco maps. -->
### Checking the map
The currently active map is posted in the `/aruco_map/image` ROS topic. It can be viewed using [web_video_server](web_video_server.md) by opening the following link: http://192.168.11.1:8080/snapshot?topic=/aruco_map/image
@@ -102,6 +104,12 @@ If you're using **LPE** (`SYS_MC_EST_GROUP` parameter is set to `local_position_
* Vision position standard deviations: `LPE_VIS_XY` = 0.1 m, `LPE_VIS_Z` = 0.1 m.
* `LPE_VIS_DELAY` = 0 sec.
<!-- * Compass should not be fused: `ATT_W_MAG` = 0 -->
> **Hint** We recommend using **LPE** for marker-based navigation.
You may use [the `selfcheck.py` utility](selfcheck.md) to check your settings.
> **Hint** In order to use LPE with the Pixhawk v1 hardware you should download the [`px4fmu-v2_lpe.px4` firmware](firmware.md)
## Flight
@@ -112,18 +120,21 @@ You will also be able to use `navigate`, `set_position` and `set_velocity` ROS s
```python
# Takeoff should be performed in the "body" frame; "aruco_map" frame will appear as soon as the drone detects the marker field
navigate(0, 0, 2, frame_id='body', speed=0.5, auto_arm=True) # Takeoff and hover 2 metres above the ground
navigate(x=0, y=0, z=2, frame_id='body', speed=0.5, auto_arm=True) # Takeoff and hover 2 metres above the ground
time.sleep(5)
# Fly to the (2, 2) point on the marker field while being 2 metres above it
navigate(2, 2, 2, speed=1, frame_id='aruco_map')
navigate(x=2, y=2, z=2, speed=1, frame_id='aruco_map')
```
Starting from the [image](image.md) version 0.18, the drone also can fly relative to a marker in the map, even if it doesn't see it:
### Using a specific marker frame
Starting with the [image](image.md) version 0.18, the drone also can fly relative to a marker in the map, even if it is not currently visible. Like with [single-marker navigation](aruco_marker.md#working-with-detected-markers), this works by setting the frame_id parameter to aruco_ID, where ID is the desired marker number.
The folloding code will move the drone to the point 1 meter above the center of marker 5:
```python
# Fly to 1 meter above the marker 5
navigate(frame_id='aruco_5', x=0, y=0, z=1)
```

View File

@@ -97,6 +97,8 @@ Perform these actions for each motor.
Motors with **<font color=red>red</font>** nuts should rotate **counterclockwise**, the ones with **black** nuts should rotate **clockwise**. Correct rotation direction should also be printed on the motors. You can use a servo tester or your RC transmitter and receiver to check rotation direction.
<img src="../assets/4/props/props_rotation.png" width=300 class="zoom center">
The following describes how to use your RC gear to check the motor direction.
### Setting up PWM mode on RC
@@ -181,31 +183,35 @@ The flight controller expects PPM signal from your RC gear. Switch your transmit
## Mounting the flight controller
1. Align the flight controller so that the arrows on the controller and on the top carbon deck point in the same direction.
2. Attach the flight controller to the flight controller plate using 3M double-sided adhesive pads.
3. Connect the power cable to the **"POWER"** input of the flight controller.
1. Insert the microSD card into your flight controller.
<img src="../assets/4/pix/pixracer_sdcard.png" width=300 class="zoom center border">
2. Align the flight controller so that the arrows on the controller and on the top carbon deck point in the same direction.
3. Attach the flight controller to the flight controller plate using 3M double-sided adhesive pads.
4. Connect the power cable to the **"POWER"** input of the flight controller.
<div class="image-group">
<img src="../assets/4/18.png" width=300 class="zoom border">
<img src="../assets/4/18_1.png" width=300 class="zoom border">
</div>
4. Attach four 40 mm aluminum spacers to the top carbon deck using M3x10 screws.
5. Attach four 40 mm aluminum spacers to the top carbon deck using M3x10 screws.
<div class="image-group">
<img src="../assets/4/19.png" width=300 class="zoom border">
<img src="../assets/4/19_1.png" width=300 class="zoom border">
</div>
5. Connect signal wires to the flight controller as shown in these pictures:
6. Connect signal wires to the flight controller as shown in these pictures:
<div class="image-group">
<img src="../assets/4/20.png" width=300 class="zoom border">
<img src="../assets/4/20_1.png" width=300 class="zoom border">
</div>
6. Attach two 15 mm spacers to the top carbon deck using M3x8 screws.
7. Attach two 15 mm spacers to the top carbon deck and the front arms using M3x10 screws (this was already described in the "Frame Assembly" section, p. 2).
7. Attach two 15 mm spacers to the top carbon deck using M3x8 screws.
8. Attach two 15 mm spacers to the top carbon deck and the front arms using M3x10 screws (this was already described in the "Frame Assembly" section, p. 2).
<div class="image-group">
<img src="../assets/4/21.png" width=300 class="zoom border">
@@ -224,15 +230,19 @@ The flight controller expects PPM signal from your RC gear. Switch your transmit
## Installing the Raspberry Pi
1. Attach the Raspberry Pi using four standoffs.
2. Route the BEC wires through the channel in the top carbon deck.
1. Insert your microSD card [with our image](image.md) into the Raspberry Pi
<img src="../assets/4/rpi/rpi_sdcard.png" width=300 class="zoom center border">
2. Attach the Raspberry Pi using four standoffs.
3. Route the BEC wires through the channel in the top carbon deck.
<div class="image-group">
<img src="../assets/4/24.png" width=300 class="zoom border">
<img src="../assets/4/26.png" width=300 class="zoom border">
</div>
3. Connect the BEC outputs according to the following image:
4. Connect the BEC outputs according to the following image:
<img src="../assets/4/26_1.png" width=300 class="zoom center border">
@@ -252,7 +262,10 @@ The flight controller expects PPM signal from your RC gear. Switch your transmit
1. Power the LED strip from a separate BEC. Connect the **«+»** and **«-»** leads to **5v** and **Ground** respectively.
2. Connect the **D** lead to GPIO21 (consult the [relevant article](leds.md) for more information).
<img src="../assets/4/31_1.png" width=300 class="zoom center border">
<div class="image-group">
<img src="../assets/4/31_1.png" width=300 class="zoom border">
<img src="../assets/4/31_2.png" width=300 class="zoom border">
</div>
## Installing the camera cable
@@ -339,6 +352,9 @@ The flight controller expects PPM signal from your RC gear. Switch your transmit
</div>
4. Connect the flight controller to the Raspberry Pi using retractable USB cable.
<img src="../assets/4/43_1.png" width=300 class="zoom center border">
5. Attach the USB cable reel where convenient using 3M double-sided adhesive pads while making sure the cable does not interfere with the propellers.
<div class="image-group">

View File

@@ -25,7 +25,7 @@ This manual contains links to other articles in which each of the topics address
- You can change the name and password of the network if you want to. See the article "[Network Settings] (network.md # change-password-or-ssid-network-name)". The remaining operations with the network are unnecessary.
- Use the nano editor to edit files. [Instructions for working with nano] (editing.md).
- Use the nano editor to edit files. [Instructions for working with nano](cli.md#editing).
> **Hint** In nano, you can only move the cursor with the arrow keys on the keyboard.

View File

@@ -43,12 +43,12 @@ Additionally you can specify an arbitrary capture parameter using its [OpenCV co
```xml
<param name="property_0_code" value="21"/> <!-- property code 21 is CAP_PROP_AUTO_EXPOSURE -->
<param name="property_0_value" value="0.25"/> <!-- property values are normalized as per OpenCV specs, even for "menu" controls; 0.25 means "use manual exposure" -->
<param name="cv_cap_prop_exposure" value="0.3"> <!-- set exposure to 30% of maximum value -->
<param name="cv_cap_prop_exposure" value="0.3"/> <!-- set exposure to 30% of maximum value -->
```
## Computer vision
The [SD card image](image.md) comes with a preinstalled [OpenCV](https://opencv.org) library, which is commonly used for various comupter vision-related tasks. Additional libraries for converting from ROS messages to OpenCV images and back are preinstalled as well.
The [SD card image](image.md) comes with a preinstalled [OpenCV](https://opencv.org) library, which is commonly used for various computer vision-related tasks. Additional libraries for converting from ROS messages to OpenCV images and back are preinstalled as well.
### Python

View File

@@ -2,7 +2,7 @@
> **Note** Documentation for the versions [of image](image.md), starting with **0.15**. For earlier versions, see [documentation for version **0.14**](https://github.com/CopterExpress/clever/blob/v0.14/docs/ru/camera_frame.md).
Position and orientation of the main camera is determined in file `~/catkin_ws/src/clever/clever/launch/main_camera.launch`:
Position and orientation of the main camera is [set in file](cli.md#editing) `~/catkin_ws/src/clever/clever/launch/main_camera.launch`:
```xml
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0 0 -0.07 -1.5707963 0 3.1415926 base_link main_camera_optical"/>

80
docs/en/cli.md Normal file
View File

@@ -0,0 +1,80 @@
# Command line interface
The Raspberry Pi OS, Raspbian, uses CLI as its primary user interface (which is common for Linux-based operating systems). You can use [a secure shell connection](ssh.md) to access the command line.
## Basic commands
> **Hint** Double-tapping the `Tab ↹` key autocompletes the command or its argument. This is known as "tab completion".
Show the contents of the current directory:
```bash
ls
```
Change current (working) directory:
```bash
cd catkin_ws/src/clever/clever/launch
```
Go one directory level up:
```bash
cd ..
```
Print path to the current directory:
```bash
pwd
```
Print contents of the `file.py` file:
```bash
cat file.py
```
Run `file.py` as a Python script:
```bash
python file.py
```
Reboot Raspberry Pi:
```bash
sudo reboot
```
You can terminate currently running (foreground) program by pressing `Ctrl`+`C`.
Read more about the Linux command line in the Raspberry Pi documentation: https://www.raspberrypi.org/documentation/linux/usage/commands.md.
## Editing files {#editing}
You can use **nano** to edit files on the Raspberry Pi. It is one of the more user-friendly console-based text editor.
1. Use the following command to edit or create a file:
```bash
nano path/to/file
```
For example:
```bash
nano ~/catkin_ws/src/clever/clever/launch/clever.launch
```
<img src="../assets/nano.png" alt="Editing files in nano" data-action="zoom">
2. Edit the file.
3. Press `Ctrl`+`X`, `Y`, `Enter` to save your file and exit.
4. Restart the `clever` package if you've changed .launch files:
```bash
sudo systemctl restart clever
```
You may also use other editors like **vim** if you prefer.

60
docs/en/coex_pix.md Normal file
View File

@@ -0,0 +1,60 @@
# COEX Pix
The **COEX Pix** flight controller is a modified [Pixracer](https://docs.px4.io/v1.9.0/en/flight_controller/pixracer.html) FCU. It is a part of the **Clever 4** quadrotor kit.
## Revision 1.1
### Physical specs
* Board size: 35x35 mm.
* Mounting hole pattern: standard 30.5 mm.
* Mounting hole diameter: 3.2 mm.
* Board mass: 9 g.
* Operating temperature range: -5..+65 ºC.
* Input voltage: 4.8..5.5 V.
### Key features
* Main System-on-Chip: *STM32F427VIT6*.
* FRAM chip: *FM25V02A*
* Built-in sensors:
* *MPU9250* 9DOF accelerometer/gyroscope/magnetometer.
* *MS5607* barometer.
### Ports
* *TELEM 1* (JST-GH 4 pin) telemetry port 1, UART.
* *TELEM 2* (JST-GH 4 pin) telemetry port 2, UART.
* *GPS* (JST-GH 6 pin) GNSS (UART) and external compass (I2C) port.
* *I2C* (JST-GH 4 pin) I2C port for supported devices (shares lanes with *GPS* port).
* *PWR* (JST-GH 6 pin) port for PDB connection (COEX PDB or compatible), with two power lanes, two ground lanes, and voltage and current sensor inputs.
* *RC IN* (JST-GH 4 pin) RC input port with RSSI pin. Supports PPM and S.BUS protocols.
* Micro USB port for PC connection (USB 2.0/1.1).
* MicroSD slot (supports up to 32gb microSD cards).
* 6 servo outputs for ESCs and other peripherals.
### Port pinouts
<img src="../assets/coexpix-top.jpg" width="400" class="zoom">
<img src="../assets/coexpix-bottom.jpg" width="400" class="zoom">
> **Note** On rev. 1.0 boards *RC IN* port and microSD slot are switched. Pinout for the *RC IN* port is the same on these boards.
### Mounting suggestions
**Important**: The board is meant to be installed with a non-standard orientation (roll 180º, yaw 90º) on the Clever airframe. Therefore, the `SENS_BOARD_ROT` PX4 parameter should be set to `ROLL 180, YAW 90`.
### Usage notes
In order to reduce magnetic interference from the PDB and power cables you should mount the FCU as far away from these parts as possible. You should have at least 15 mm clearance from high-power parts.
You may want to disable internal compass if you're using an external GNSS+compass module.
If your drone does not have a protective cover for the FCU, you should place a piece of foam over the barometer.
The FCU has power passthrough from the *PWR* input to the servo rail. Supplying additional power to the servo rail is not recommended if the *PWR* input is used. Powering the FCU from USB and *PWR*/*AUX* inputs is acceptable.
### Board specifics
The board utilizes low-noise DC-DC converters, voltage inputs have LC and ferrite filters.

View File

@@ -1,60 +1,52 @@
Connecting Pixhawk/Pixracer to Raspberry Pi
===
# Connecting Raspberry Pi to the flight controller
To program [autonomous flights](simple_offboard.md) [work with Pixhawk (Pixracer) over Wi-Fi](gcs_bridge.md), use [of a phone transmitter] (rc.md), and other functions, it is necessary to connect Raspberry Pi to Pixhawk (Pixracer).
In order to program [autonomous flights](simple_offboard.md), [work with Pixhawk or Pixracer over Wi-Fi](gcs_bridge.md), use [controller app](rc.md) and access other functions you need to connect your Raspberry Pi to the flight controller.
Check operability of the connection [by running on Raspberry Pi](ssh.md):
## USB connection
```bash
rostopic echo /mavros/state
```
USB connection is the preferred way to connect to the flight controller.
The `connected` field should contain value `True`.
1. Connect your FCU to the Raspberry Pi using a microUSB to USB cable.
2. [Connect to the Raspberry Pi over SSH](ssh.md).
3. Make sure the connection is working by [running the following command on the Raspberry Pi](ssh.md):
Connection via USB
---
```bash
rostopic echo /mavros/state
```
Connect Pixhawk/Pixracer to micro USB in Raspberry Pi with a USB cable.
The `connected` field should have the `True` value.s
Make sure that in Clever launch file (`~/catkin_ws/src/clever/clever/launch/clever.launch`), connection type is set to USB:
> **Hint** You need to set the `CBRK_USB_CHK` [parameter](px4_parameters.md) to 197848 for the USB connection to work.
```xml
<arg name="fcu_conn" default="usb"/>
```
## UART connection
After the launch file is edited, restart package `clever`:
<!-- TODO: Connection scheme -->
```bash
sudo systemctl restart clever
```
UART connection is another way for the Raspberry Pi and FCU to communicate.
> **Hint** For correct operation of the Raspberry Pi connection to Pixhawk via USB, set value of [parameter](px4_parameters.md) `CBRK_USB_CHK` to 197848.
1. Connect Raspberry Pi to your FCU using a UART cable.
2. [Connect to the Raspberry Pi over SSH](ssh.md).
3. Change the connection type in `~/catkin_ws/src/clever/clever/launch/clever.launch` to UART:
Connection via UART
---
```xml
<arg name="fcu_conn" default="uart"/>
```
TODO connection diagram
Be sure to restart the `clever` service after editing the .launch file:
Make sure that in Clever launch file (`~/catkin_ws/src/clever/clever/clever.launch`), connection type is set to UART:
```bash
sudo systemctl restart clever
```
```xml
<arg name="fcu_conn" default="uart"/>
```
> **Hint** Set the `SYS_COMPANION` PX4 parameter to 921600 to enable UART on the FCU.
After the launch-file is edited, restart package `clever`:
## SITL connection
```bash
sudo systemctl restart clever
```
> **Hint** For correct operation of the Raspberry Pi connection to Pixhawk via UART, set value of parameter`SYS_COMPANION` to 921600.
Connection to SITL
---
To connect locally/remotely to a running [SITL](sitl.md), set argument `fcu_conn` to `udp`, and `fcu_ip` to the IP address of the machine where SITL is running (`127.0.0.1` for local):
In order to connect to a local or a remote [SITL](sitl.md) instance set the `fcu_conn` parameter to `udp` and `fcu_ip` to the IP address of the SITL instance (`127.0.0.1` if you are running the instance locally):
```xml
<arg name="fcu_conn" default="udp"/>
<arg name="fcu_ip" default="127.0.0.1"/>
```
**Next**: [Using QGroundControl over Wi-Fi](gcs_bridge.md)

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

@@ -0,0 +1,94 @@
# Copter Hack 2019
The [Copter Hack 2019](https://copterexpress.timepad.ru/event/1017592/) hackathon took place on the 11th to 13th of October in the "Moscow" Technopolis.
Event page: https://coex.tech/copterhack.
Hackathon chat: https://t.me/CopterHack.
Timepad event page: https://copterexpress.timepad.ru/event/1017592/.
## Information for participants
### COEX Pix specifics
Be sure to set the *Autopilot orientation* parameter to `ROTATION_ROLL_180_YAW_90` if you're using the *COEX Pix* flight controller. This parameter should be applied during calibration of each sensor.
<img src="../assets/autopilot_orientation.png" class="center" width="600">
This parameter is used for *IMU* orientation correction.
### Suggested image versions
Raspberry Pi versions 3B+ and lower: [v0.18](https://github.com/CopterExpress/clever/releases/tag/v0.18)
Raspberry Pi version 4: [v0.19-alpha.1](https://github.com/CopterExpress/clever/releases/tag/v0.19-alpha.1)
### Camera orientation
Some drones have the camera mounted with the cable going forward. You should set this orientation in the `main_camera.launch` file in the `clever` package.
Further reading: [Camera orientation](camera_frame.md)
### Using Optical Flow
In order to enable optical flow set `optical_flow` and `rangefinder_vl53l1x` parameters to `true` in `clever.launch`.
Enable `pub agl as lpos down` in `LPE_FUSION` parameter using QGroundControl.
Make sure the rangefinder is mounted correctly and is working (see [Interfacing with a laser rangefinder](laser.md)).
Further reading: [Optical Flow](optical_flow.md).
### Using ArUco map
Use the `cmit.txt` map. See [instructions](aruco_map.md).
### Drone batteries
**The battery indicator should be connected to the battery at all times. The organizers will not replace your damaged batteries!**
### Flight videos
Be sure to record **ALL** your flights on video! If your drone fails before your presentation, you'll be able to at least show your videos.
### Yaw problem
The v1.8.2-clever.7 FCU firmware has a potential bug that manifests during VPE (marker-based) flights. If your drone does not correct its yaw when using ArUco markers, try using an older firmware version (v1.8.2-clever.6, available from https://github.com/CopterExpress/Firmware/releases/tag/v1.8.2-clever.6). Download `px4fmu-v4_default.px4` for COEX Pix.
### `navigate` service problem
The 0.18 Raspberry Pi image has a potential bug that makes the drone fly through waypoints too fast. Try setting the `nav_from_sp` parameter to `false` in `~/catkin_ws/src/clever/clever/launch/clever.launch` if you are affected by it:
```xml
<!-- simplified offboard control -->
<node name="simple_offboard" pkg="clever" type="simple_offboard" output="screen" clear_params="true">
<param name="reference_frames/body" value="map"/>
<param name="reference_frames/base_link" value="map"/>
<param name="reference_frames/navigate_target" value="map"/>
<param name="reference_frames/navigate_target" value="map"/>
<param name="nav_from_sp" value="false"/>
</node>
```
## Lectures (in Russian)
Lecture 1: Introduction  https://www.youtube.com/watch?v=cjtmZNuq7z0.
Lecture 2: FCU setup  https://www.youtube.com/watch?v=PJNDYFPZQms.
Lecture 3: PX4 architecture  https://www.youtube.com/watch?v=_jl7FImq3jk.
Lecture 4: Autonomous flights  https://www.youtube.com/watch?v=ThXiNG1IzvI.
Be sure to check out other videos on the COEX YouTube channel: https://www.youtube.com/channel/UCeCu93sLBkcgbIkIC7Jaauw/featured.
## Results
Winners:
1. Bulbolet potato delivery using a smart hoist.
2. Copter don't hurt me controlling drone using a neural interface.
3. import torch active track using neural networks.
4. Autobot freeze light through a VK bot.
5. Stardust Crusaders AR drone simulation.

View File

@@ -1,5 +0,0 @@
# Editing files
Use **nano** text editor to edit files on a Raspberry Pi.
<!-- TODO -->

View File

@@ -1,16 +1,33 @@
Coordinate systems (frames)
===
> **Note** Documentation for the [image](image.md), versions, starting with **0.15**. For older versions refer to [documentation for version **0.14**](https://github.com/CopterExpress/clever/blob/v0.14/docs/ru/frames.md).
> **Note** The following applies to [image](image.md) version 0.15 and up. See [previous version of the article](https://github.com/CopterExpress/clever/blob/v0.14/docs/ru/frames.md) (Russian only) for older images.
![Clever coordinates systems (TF2)](../assets/frames.png)
![TF2 Clever frames](../assets/frames.png)
Main frames in package `clever`:
Main frames in the `clever` package:
* `map` coordinates relative to the point of flight controller initialization: the white grid in the illustration;
* `base_link` — coordinates relative to the quadcopter: schematic image of the quadcopter in the illustration;
* `body` — coordinates relative to the quadcopter regardless of pitch and roll: red, blue and green lines in the illustration.
* `map` has its origin at the flight controller initialization point and may be considered stationary. It is shown as a white grid on the image above;
* `base_link` is rigidly bound to the drone. It is shown by the simplified drone model on the image above;
* `body` is bound to the drone, but its Z axis points up regardless of the drone's pitch and roll. It is shown by the red, blue and green lines in the illustration;
* `navigate_target` is bound to the current navigation target (as set by the [navigate](simple_offboard.md#navigate) service).
> **Hint** In accordance with [the agreement](http://www.ros.org/reps/rep-0103.html), for frames associated with the copter, the X-axis directed forward, Y to the left, and Z up.
Additional frames become available when [ArUco positioning system](aruco.md) is active:
More clearly, 3D visualization of the coordinate systems can be viewed using [rviz](rviz.md).
* `aruco_map` is bound to the currently active [ArUco map](aruco_map.md);
* `aruco_N` is bound to the [marker](aruco_marker.md) with ID=N.
> **Hint** Frames that are bound to the drone are oriented according to [the ROS convention](http://www.ros.org/reps/rep-0103.html): the X axis points forward, Y to the left, and Z up.
3D visualization of the coordinate systems can be viewed using [rviz](rviz.md).
tf2
--
Read more at http://wiki.ros.org/tf2
tf2 ROS package is used extensively in the Clever platform. tf2 is a set of libraries for C++, Python and other programming languages that are used to work with the frames. Internally, ROS nodes publish `TransformStamped` messages to `/tf` topic with transforms between frames at certain points in time.
The [`simple_offboard`](simple_offboard.md) node can be used to request the drone position in an arbitrary frame by setting the `frame_id` argument appropriately in a call to `get_telemetry` service.
tf2 can be used from Python to transform coordinates (for objects like PoseStamped and PointStamped) from one frame to another

View File

@@ -67,3 +67,5 @@ Change parameter `gcs_bridge` in the launch file:
```
After opening the QGroundControl application, the connection should be established automatically.
**Next**: [Remote access using SSH](ssh.md)

15
docs/en/models.md Normal file
View File

@@ -0,0 +1,15 @@
# Model files for parts
This page contains models and drawings of some of the drone parts. They can be used for 3D printing and/or laser cutting replacement parts.
## Clever 4
### Battery holder
File: [`battery_holder.stl`](https://github.com/CopterExpress/clever/raw/master/docs/assets/battery_holder.stl).
Filament: PLA/ABS/SBS.
Infill: 50% or more.
Description: the holder should be installed on the top deck. It allows the user to secure the battery with the battery strap and to mount your battery level indicator using a 3M pad.

View File

@@ -35,7 +35,7 @@ In manual mode the pilot controls the drone directly. GPS, computer vision data,
* **ALTCTL** (ALTITUDE) — control of the altitude rate, pitch, roll and yaw angular velocity. Requires a barometer or another altitude source.
* **POSCTL** (POSITION) — control of the altitude rate, forward/backward and right/left speed, and yaw angular velocity. It is the easiest flying mode. The barometer, GPS, computer vision, and other sensors are used.
### Auto flight modes
### Auto flight modes {#auto}
In autonomous flight modes the quadcopter ignores the control signals from the transmitter and uses a program to fly.

View File

@@ -20,6 +20,8 @@ Optical Flow publishes data in `mavros/px4flow/raw/send` topic. In the topic `op
## Setup of the flight controler
> **Hint** Suggested parameters are applied automatically in [our custom PX4 firmware](firmware.md#modified-firmware-for-clever).
When using **EKF2** (parameter `SYS_MC_EST_GROUP` = `ekf2`):
* `EKF2_AID_MASK` flag 'use optical flow' is on.

96
docs/en/programming.md Normal file
View File

@@ -0,0 +1,96 @@
# Programming
<img src="../assets/programming.png" width="250" align="right">
The Clever platform allows a [Raspberry Pi](raspberry.md) computer to be used for programming autonomous flights. The flight program is typically written using the Python programming language. The program may [receive telemetry data](simple_offboard.md#get_telemetry) (which includes battery data, attitude, position, and other parameters) and send commands like: [fly to a point in space](simple_offboard.md#navigate), [set attitude](simple_offboard.md#set_attitude), [set angular rates](simple_offboard.md#set_rates), and others.
The platform utilizes the [ROS framework](ros.md), which allows the user program to communicate with the Clever services that are running as a `clever` systemd daemon. The [MAVROS](mavros.md) package is used to interact with the flight controller.
PX4 uses [OFFBOARD mode](modes.md#auto) for autonomous flights. The Clever API can be used to transition the drone to this flight mode automatically. If you need to interrupt the autonomous flight, use your flight mode stick on your RC controller to transition to any other flight mode.
## Positioning system {#positioning}
A drone has to use a positioning system to be able to hover still or to fly from point to point. The system should compute the drone position and feed this data into the flight controller. Clever allows using multiple positioning systems, such as [optical flow](optical_flow.md) (requires a [camera](camera.md) and a [rangefinder](laser.md)), [fiducial markers](aruco.md) (requires a camera and markers), GPS and others.
### Optical flow
Optical flow is used to compute shifts between consecutive frames and to use this data to compute the drone shifting in space.
Read more in the [Optical Flow article](optical_flow.md).
### ArUco markers
Fiducial markers allow the drone to compute its position relative to these markers. This data may then be transferred to the flight controller.
Read more about [ArUco markers](aruco.md) in our articles about them.
### GPS (outdoor flight)
GPS allows you to specify global Earth coordinates (latitude and longitude). The [`navigate_global`](simple_offboard.md#navigate_global) function takes these as parameters instead of the usual cartesian coordinates.
Read more in the [GPS connection](gps.md) article.
## Autonomous flight {#flight}
After you've configured your positioning system, you can start writing programs for autonomous flights. Use the [SSH connection to the Raspberry Pi](ssh.md) to run your scripts. In order to run a Python script use the `python` command:
```bash
python flight.py
```
Below is a complete flight program that performs a takeoff, flies forward and lands:
```python
#coding: utf8
import rospy
from clever import srv
from std_srvs.srv import Trigger
rospy.init_node('flight')
get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry)
navigate = rospy.ServiceProxy('navigate', srv.Navigate)
land = rospy.ServiceProxy('land', Trigger)
# Takeoff and hover 1 m above the ground
navigate(x=0, y=0, z=1, frame_id='body', auto_arm=True)
# Wait for 3 seconds
rospy.sleep(3)
# Fly forward 1 m
navigate(x=1, y=0, z=0, frame_id='body')
# Wait for 3 seconds
rospy.sleep(3)
# Perform landing
land()
```
> **Note** The `navigate` function call is not blocking; that is, the program will continue executing the next commands before the drone arrives at the set point. Look at the [`navigate_wait`](snippets.md#block-nav) snippet for a blocking function.
Note that only the first `navigate` call has its `auto_arm` parameter set to `True`. This parameter arms the drone and transitions it to the OFFBOARD flight mode.
The `frame_id` parameter specifies which frame of reference will be used for the target point:
* `body` is rigidly bound to the drone body;
* `navigate_target` has its origin at the last target point for `navigate`;
* `map` is the drone's local frame;
* `aruco_map` is bound to the ArUco marker map;
* `aruco_N` is bound to the marker with ID=N.
Read more in the [coordinate systems](frames.md) article.
You can also use the ["Autonomous flight"](simple_offboard.md) article as an API reference.
## Additional periphery
The Clever platform also exposes APIs for interacting with other peripherals. Read more in the following articles:
* [LED strip](leds.md);
* [laser rangefinder](laser.md);
* [GPIO](gpio.md);
* [ultrasonic rangefinder](sonar.md);
* [camera](camera.md).

View File

@@ -3,7 +3,9 @@ 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 "Clever".
<img src="../assets/raspberry3.jpg" width="500">
<img src="../assets/raspberry.png" class="center zoom" alt="Raspberry Pi 3" width="400">
Technical specifications:
* Weight is 45 grams.
* Clock rate is 1.2 GHz.
@@ -12,19 +14,6 @@ Raspberry Pi
* Four USB 2.0 ports.
* An HDMI port.
The scope of Raspberry Pi computer application is quite wide, since after all it is quite a full-fledged computer. If you need a machine to solve simple problems that do not require too many resources in terms of calculations, you can safely connect your Raspberry Pi device to the standard PC elements: a monitor, a mouse, or a keyboard.
Raspberry Pi is connected to the flight controller in the Clever kit and is used as a companion computer. It can be used to [connect to the drone over Wi-Fi](wifi.md), perform autonomous flights, access peripherals and much more.
The Raspberry Pi is a very popular platform where you can implement a variety of projects, such as:
* a home automation server (or a "smart house" system);
* a data storage server (NAS);
* a home media server;
* a "think-tank" for automated machines or robots.
In fact, we will use it as the last in the list, due to its ability to connect to the Pixhawk autopilot.
See more:
* [RPi image](image.md)
* [SSH access](ssh.md)
* [Network setup](network.md)
**Next**: [Raspberry Pi image](image.md)

View File

@@ -1,14 +1,10 @@
# ROS Kinetic package installation and setup
# ROS Melodic package installation and setup
In order to use tools such as rqt, rviz and others as well as running the simulator (SITL), you will need to install and setup ROS package
> **Hint** For more details on installation refer to [the main article](http://wiki.ros.org/kinetic/Installation/Ubuntu).
> **Hint** For more details on installation refer to [the main article](http://wiki.ros.org/melodic/Installation/Ubuntu).
<!-- -->
> **Hint** If you are using Ubuntu 18.04, you will need to install ROS Melodic instead of ROS Kinetic. A complete guide of the installation is available [here](http://wiki.ros.org/melodic/Installation/Ubuntu).
## ROS Kinetic installation on Ubuntu
## ROS Melodic installation on Ubuntu
To find the correct package version, you will need to change the settings of your repositories. Go to "Software and updates" and enable `restricted`, `universe` and `multiverse`.
@@ -35,13 +31,13 @@ Now you can install the ROS package itself.
+ If you plan to use ROS together with the simulator (also includes tools such as rqt, rviz and others):
```bash
sudo apt-get install ros-kinetic-desktop-full
sudo apt-get install ros-melodic-desktop-full
```
+ If you plan to use ROS exclusively for tools rqt, rviz etc.:
```bash
sudo apt-get install ros-kinetic-desktop
sudo apt-get install ros-melodic-desktop
```
After the package has installed, initialize `rosdep`.
@@ -55,12 +51,12 @@ 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:
```bash
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
```
If you whish to install any additionnal packages for yout ROS Kinetic simply use:
If you whish to install any additionnal packages for yout ROS Melodic simply use:
```bash
sudo apt-get install ros-kinetic-PACKAGE
sudo apt-get install ros-melodic-PACKAGE
```

View File

@@ -8,13 +8,13 @@ ROS is a widely used framework for developing complex and distributed robotic sy
Installation
---
Main article: http://wiki.ros.org/kinetic/Installation/Ubuntu
Main article: http://wiki.ros.org/melodic/Installation/Ubuntu
ROS is already installed on [the RPi image](image.md).
To use ROS on a PC, we recommend using Ubuntu Linux (or a virtual machine such as Parallels Desktop Lite](https://itunes.apple.com/ru/app/parallels-desktop-lite/id1085114709?mt=12) or [VirtualBox](https://www.virtualbox.org)).
> **Note** For ROS Kinetic distribution, we recommend using Ubuntu 16.04.
> **Note** For ROS Melodic distribution, we recommend using Ubuntu 18.04.
Concepts
---

View File

@@ -9,7 +9,7 @@ The [rviz] tool(http://wiki.ros.org/rviz) allows real-time visualization of all
To use rviz and rqt, a PC running Ubuntu Linux (or a virtual machine such as [Parallels Desktop Lite] (https://itunes.apple.com/ru/app/parallels-desktop-lite/id1085114709?mt=12) or [VirtualBox] (https://www.virtualbox.org)) is required.
Install package `ros-kinetic-desktop-full` or `ros-kinetic-desktop` using the [installation documentation](http://wiki.ros.org/kinetic/Installation/Ubuntu).
Install package `ros-melodic-desktop-full` or `ros-melodic-desktop` using the [installation documentation](http://wiki.ros.org/melodic/Installation/Ubuntu).
Start rviz
---
@@ -48,7 +48,7 @@ Axis or Grid configured to frame `aruco_map` will visualize the location [on the
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:
```(bash)
sudo apt-get install ros-kinetic-jsk-visualization
sudo apt-get install ros-melodic-jsk-visualization
```
Starting the rqt toolkit
@@ -71,5 +71,5 @@ ROS_MASTER_URI=http://192.168.11.1:11311 rqt_image_view
Brief description of useful rqt plugins:
* `rqt_image_view` viewing images from topics like `sensor_msgs/Image`;
* `rqt_multiplot` Building charts from the data from of arbitrary topics (installation: `sudo apt-get install ros-kinetic-rqt-multiplot`);
* `rqt_multiplot` Building charts from the data from of arbitrary topics (installation: `sudo apt-get install ros-melodic-rqt-multiplot`);
* Bag working with [Bag-files](http://wiki.ros.org/rosbag).

View File

@@ -21,7 +21,9 @@ Description of some checks:
* Global position (GPS) — checks for presence of global position data (GPS module is required for this check);
* Camera — checks for proper operation of the Raspberry camera.
* ArUco — checks whether [ArUco](aruco.md) detection is working
* VPE — checks whether VPE data is published
* Rangefinder — checks whether [rangefinder](laser.md) data is published
* VPE — checks whether VPE data is published.
* Rangefinder — checks whether [rangefinder](laser.md) data is published.
* RPi health checks the [onboard computer](raspberrypi.md) status.
* CPU usage checks the CPU load of the onboard computer.
> **Caution** Pay attention on the checks marked with *WARN* sign. If necessary, contact [Copter Express technical support](tg://resolve?domain=COEXHelpdesk).

View File

@@ -1,11 +1,11 @@
Simple OFFBOARD
===
> **Note** Documentation for the [image](image.md), versions, starting with **0.15**. For older versions refer to [documentation for version **0.14**](https://github.com/CopterExpress/clever/blob/v0.14/docs/ru/simple_offboard.md).
> **Note** The following applies to [image](image.md) versions **0.15** and up. Older documentation is still avaliable [for version **0.14**](https://github.com/CopterExpress/clever/blob/v0.14/docs/ru/simple_offboard.md) (Russian only).
<!-- -->
> **Hint** For autonomous flights it is recommanded to use [special PX4 firmware for Clever](firmware.md#modified-firmware-for-clever).
> **Hint** We recommend using our [special PX4 firmware for Clever](firmware.md#modified-firmware-for-clever) for autonomous flights.
The `simple_offboard` module of the `clever` package is intended for simplified programming of the autonomous drone flight (`OFFBOARD` [flight mode](modes.md)). It allows setting the desired flight tasks, and automatically transforms [coordinates between frames](frames.md).
@@ -140,6 +140,12 @@ Flying 3 m to the right from the drone:
navigate(x=0, y=-3, z=0, speed=1, frame_id='body')
```
Flying 2 m to the left from the last navigation target:
```python
navigate(x=0, y=2, z=0, speed=1, frame_id='navigate_target')
```
Turn 90 degrees counterclockwise:
```python
@@ -170,6 +176,8 @@ Ascending to the altitude of 2 m (command line):
rosservice call /navigate "{x: 0.0, y: 0.0, z: 2, yaw: 0.0, yaw_rate: 0.0, speed: 0.5, frame_id: 'body', auto_arm: true}"
```
> **Note** Consider using the `navigate_target` frame instead of `body` for missions that primarily use relative movements forward/back/left/right. This negates inaccuracies in relative point calculations.
### navigate_global
Flying in a straight line to a point in the global coordinate system (latitude/longitude).

View File

@@ -120,6 +120,7 @@ Transforming the position (`PoseStamped`) from one system of coordinates ([of fr
```python
import tf2_ros
import tf2_geometry_msgs
from geometry_msgs.msg import PoseStamped
tf_buffer = tf2_ros.Buffer()
tf_listener = tf2_ros.TransformListener(tf_buffer)

View File

@@ -124,7 +124,7 @@ Ultrasonic distance gage RCW-0001 is compatible with distance gage HC-SR04. Use
An example of a flight program with the use of [simple_offboard](simple_offboard.md), which makes the copter fly forward until the connected ultrasonic distance gage detects an obstacle:
```python
set_velocity(x=0.5, frame_id='body', auto_arm=True) # flying forward at the velocity of 0.5 mps
set_velocity(vx=0.5, frame_id='body', auto_arm=True) # flying forward at the velocity of 0.5 mps
while True:
if read_distance_filtered() < 1:

View File

@@ -25,3 +25,5 @@ Web access
Starting with version 0.11.4 [of the image](image.md), access to the shell is also available via a web browser (using [Butterfly](https://github.com/paradoxxxzero/butterfly)). To gain access, open web page http://192.168.11.1, and select link *Open web terminal*:
<img src="../assets/butterfly.png">
**Next**: [Command-line interface](cli.md)

View File

@@ -36,7 +36,7 @@ Parameters `width`, `height`, etc. re also available. Read more about `web_video
## Browse with rqt_image_view
To browse images with the rqt tools the user needs a computer with Ubuntu 16.04 и [ROS Kinetic](http://wiki.ros.org/kinetic/Installation/Ubuntu).
To browse images with the rqt tools the user needs a computer with Ubuntu 18.04 and [ROS Melodic](http://wiki.ros.org/melodic/Installation/Ubuntu).
[Connect to the Clever Wi-Fi network](wifi.md) an run `rqt_image_view` with its IP-address:

View File

@@ -15,4 +15,4 @@ After connecting to Clever Wi-Fi, open http://192.168.11.1 in you web browser. I
<img src="../assets/web.png" alt="Веб-интерфейс Клевера" class="zoom">
**Next**: [Using QGroundControl via Wi-Fi](gcs_bridge.md).
**Next**: [Connecting Raspberry Pi to the flight controller](connection.md).

View File

@@ -20,21 +20,20 @@
* [Подключение к Pixracer](connection.md)
* [QGroundControl по Wi-Fi](gcs_bridge.md)
* [SSH-доступ](ssh.md)
* [Редактирование файлов](editing.md)
* [Командная строка](cli.md)
* [Автоматическая проверка](selfcheck.md)
* [Просмотр видеострима с камер](web_video_server.md)
* Программирование
* [ROS](ros.md)
* [MAVROS](mavros.md)
* [Общая информация](programming.md)
* [Ориентация камеры](camera_frame.md)
* [Системы координат](frames.md)
* [Автономный полет в OFFBOARD](simple_offboard.md)
* [Примеры кода](snippets.md)
* Визуальные маркеры (ArUco)
* [Общая информация](aruco.md)
* [Распознавание маркеров](aruco_marker.md)
* [Навигация по карте маркеров](aruco_map.md)
* [Навигация по Optical Flow](optical_flow.md)
* [Автономный полет в OFFBOARD](simple_offboard.md)
* [Системы координат](frames.md)
* [Примеры кода](snippets.md)
* [Лазерный дальномер](laser.md)
* [Светодиодная лента](leds.md)
* [Работа с GPIO](gpio.md)
@@ -42,13 +41,17 @@
* [Компьютерное зрение](camera.md)
* [Визуализация с помощью rviz](rviz.md)
* [Автозапуск ПО](autolaunch.md)
* [ROS](ros.md)
* [MAVROS](mavros.md)
* Дополнительные материалы
* [COEX Pix](coex_pix.md)
* [Гид по автономному полету](auto_setup.md)
* [Имя хоста](hostname.md)
* [Симулятор](sitl.md)
* [Настройка PID](pid_tuning.md)
* [CAD-модели Клевера](models.md)
* [Docker-контейнер с симулятором](sitl_docker.md)
* [Установка ROS Kinetic](ros-install.md)
* [Установка ROS Melodic](ros-install.md)
* [Пилотирование со смартфона](rc.md)
* [Настройка сети RPi](network.md)
* [Интерфейс UART](uart.md)
@@ -82,6 +85,7 @@
* [Генератор ArUco карт](arucogenmap.md)
* [Модель аэротакси в городе](bigchallenges.md)
* [Шаровая защита коптера](shield.md)
* [Дрон для 3D-сканирования человека](3dscan.md)
* [Распознавание лиц](face_recognition.md)
* [Управление дроном силой мысли](control_emotions.md)
* [Подсчет количества объектов c камеры](object_counting.md)

View File

@@ -120,18 +120,21 @@ rosrun aruco_pose genmap.py 0.33 2 4 1 1 0 > ~/catkin_ws/src/clever/aruco_pose/m
```python
# Вначале необходимо взлететь, чтобы коптер увидел карту меток и появился фрейм aruco_map:
navigate(0, 0, 2, frame_id='body', speed=0.5, auto_arm=True) # взлет на 2 метра
navigate(x=0, y=0, z=2, frame_id='body', speed=0.5, auto_arm=True) # взлет на 2 метра
time.sleep(5)
# Полет в координату 2:2 маркерного поля, высота 2 метра
navigate(2, 2, 2, speed=1, frame_id='aruco_map') # полет в координату 2:2, высота 3 метра
navigate(x=2, y=2, z=2, speed=1, frame_id='aruco_map') # полет в координату 2:2, высота 3 метра
```
Начиная с версии [образа](image.md) 0.18, доступны также полеты относительно отдельного маркера в карте, даже если дрон его не видит:
### Полет в координаты по ID маркера
Начиная с версии [образа](image.md) 0.18, доступны также полёты относительно отдельного маркера в карте, даже если дрон его не видит. По аналогии с [навигацией по отдельным маркерам](aruco_marker.md#навигация-по-маркерам) при настройке карты маркеров дрон сможет лететь в координаты относительно отдельного маркера, используя фрейм aruco_ID с соответствующим ID маркера.
Полет в точку над маркером 5 на высоту 1 метр:
```python
# Полет на высоту 1 м над маркером 5
navigate(frame_id='aruco_5', x=0, y=0, z=1)
```

View File

@@ -97,6 +97,8 @@
Моторы с **<font color=red>красными</font>** гайками должны вращаться **против** часовой стрелки, с **чёрными** - **по** часовой стрелке. Правильные направления вращения также указаны на самих моторах. Для проверки направления вращения можно использовать серво-тестер или радиоприёмник с пультом.
<img src="../assets/4/props/props_rotation.png" width=300 class="zoom center">
Использование радиоприёмника и пульта описано ниже.
### Перевод пульта в режим PWM
@@ -181,31 +183,35 @@
## Установка полётного контроллера
1. Установите полетный контроллер на пластину с помощью двухстороннего скотча.
2. Стрелки на полетном контроллере и центральной деке должны быть направлены в одну сторону.
3. Подключите шлейф питания PDB к разъему *"POWER"* полетного контроллера, закрутив его в "косичку" для взаимной фиксации проводов.
1. Вставьте карту microSD в полётный контроллер
<img src="../assets/4/pix/pixracer_sdcard.png" width=300 class="zoom center border">
2. Установите полетный контроллер на пластину с помощью двухстороннего скотча.
3. Стрелки на полетном контроллере и центральной деке должны быть направлены в одну сторону.
4. Подключите шлейф питания PDB к разъему *"POWER"* полетного контроллера, закрутив его в "косичку" для взаимной фиксации проводов.
<div class="image-group">
<img src="../assets/4/18.png" width=300 class="zoom border">
<img src="../assets/4/18_1.png" width=300 class="zoom border">
</div>
4. Установите 4 алюминиевые стойки 40 мм с помощью винтов М3х10.
5. Установите 4 алюминиевые стойки 40 мм с помощью винтов М3х10.
<div class="image-group">
<img src="../assets/4/19.png" width=300 class="zoom border">
<img src="../assets/4/19_1.png" width=300 class="zoom border">
</div>
5. Подключите сигнальные провода регуляторов к полетному контроллеру следующим образом:
6. Подключите сигнальные провода регуляторов к полетному контроллеру следующим образом:
<div class="image-group">
<img src="../assets/4/20.png" width=300 class="zoom border">
<img src="../assets/4/20_1.png" width=300 class="zoom border">
</div>
6. Установите 2 стойки "мама-мама" 15 мм на центральную деку с помощью винтов М3х8.
7. Другие 2 стойки были установлены ранее в разделе "Сборка рамы", п. 2.
7. Установите 2 стойки "мама-мама" 15 мм на центральную деку с помощью винтов М3х8.
8. Другие 2 стойки были установлены ранее в разделе "Сборка рамы", п. 2.
<div class="image-group">
<img src="../assets/4/21.png" width=300 class="zoom border">
@@ -224,15 +230,19 @@
## Установка Raspberry Pi
1. Установите плату Raspberry Pi на стойки, используя 4 стойки "папа-мама".
2. Протяните провода от BEC через паз в центральной раме.
1. Вставьте карту microSD с [записанным образом](image.md) в Raspberry Pi
<img src="../assets/4/rpi/rpi_sdcard.png" width=300 class="zoom center border">
2. Установите плату Raspberry Pi на стойки, используя 4 стойки "папа-мама".
3. Протяните провода от BEC через паз в центральной раме.
<div class="image-group">
<img src="../assets/4/24.png" width=300 class="zoom border">
<img src="../assets/4/26.png" width=300 class="zoom border">
</div>
3. Подключите провод питания от BEC к Raspberry, согласно схеме:
4. Подключите провод питания от BEC к Raspberry, согласно схеме:
<img src="../assets/4/26_1.png" width=300 class="zoom center border">
@@ -252,7 +262,10 @@
1. Питание для ленты берется от второго BEC. Подключите контакты *«-»* и *«+»* к *Ground* и *5v* на ленте соответственно.
2. Подключите контакт *D* к GPIO-пину на Raspberry. Рекомендуется использовать пин GPIO21.
<img src="../assets/4/31_1.png" width=300 class="zoom center border">
<div class="image-group">
<img src="../assets/4/31_1.png" width=300 class="zoom border">
<img src="../assets/4/31_2.png" width=300 class="zoom border">
</div>
## Установка шлейфа для камеры
@@ -339,6 +352,9 @@
</div>
4. Подключите USB кабель к разъему на полетном контроллере и USB разъему Raspberry Pi.
<img src="../assets/4/43_1.png" width=300 class="zoom center border">
5. Зафиксируйте "улитку" кабеля в удобном месте с помощью двухстороннего скотча так, чтобы провод не мешал вращению винтов.
<div class="image-group">

View File

@@ -25,7 +25,7 @@
- Если необходимо, можно поменять название и пароль сети. См. статью "[Настройка сети](network.md#изменение-пароля-или-ssid-имени-сети)". Остальные операции с сетью производить не нужно.
- Для редактирования файлов пользуйтесь редактором nano. [Инструкция по работе с редактором](editing.md).
- Для редактирования файлов пользуйтесь редактором nano. [Инструкция по работе с редактором](cli.md#editing).
> **Hint** В редакторе перемещать курсор можно только стрелками на клавиатуре.

View File

@@ -45,7 +45,7 @@ raspistill -o test-image.jpg
```xml
<param name="property_0_code" value="21"/> <!-- property code 21 is CAP_PROP_AUTO_EXPOSURE -->
<param name="property_0_value" value="0.25"/> <!-- property values are normalized as per OpenCV specs, even for "menu" controls; 0.25 means "use manual exposure" -->
<param name="cv_cap_prop_exposure" value="0.3"> <!-- set exposure to 30% of maximum value -->
<param name="cv_cap_prop_exposure" value="0.3"/> <!-- set exposure to 30% of maximum value -->
```
## Компьютерное зрение

View File

@@ -4,7 +4,7 @@
Для корректной работы всех модулей, связанных с компьютерным зрением (в том числе [полет по ArUco-маркерам](aruco.md) и [Optical Flow](optical_flow.md)) необходимо корректно выставленная ориентация основной камеры Клевера.
Расположение и ориентация камеры [задается в файле](editing.md) `~/catkin_ws/src/clever/clever/launch/main_camera.launch`:
Расположение и ориентация камеры [задается в файле](cli.md#editing) `~/catkin_ws/src/clever/clever/launch/main_camera.launch`:
```xml
<node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0 0 -0.07 -1.5707963 0 3.1415926 base_link main_camera_optical"/>

80
docs/ru/cli.md Normal file
View File

@@ -0,0 +1,80 @@
# Командная строка
В Linux-системах, к семейству которых принадлежит используемая на Raspberry Pi ОС Raspbian, основным способом взаимодействия пользователя с системой является командная строка. Для работы с командной строкой [откройте SSH-соединение](ssh.md) с Raspberry Pi.
## Базовые команды
> **Hint** Двойное нажатие клавиши `Tab ↹` позволяет автоматически дополнить вводимую команду или аргумент.
Показать содержимое текущей директории:
```bash
ls
```
Перейти в директорию:
```bash
cd catkin_ws/src/clever/clever/launch/
```
Перейти на директорию выше:
```bash
cd ..
```
Вывести путь к текущей директории:
```bash
pwd
```
Вывести содержимое файла `file.py`:
```bash
cat file.py
```
Запустить Python-скрипт `file.py`:
```bash
python file.py
```
Перезагрузить Raspberry Pi:
```bash
sudo reboot
```
Для завершения работающей программы нажмите комбинацию клавиш `Ctrl`+`C`.
Читайте больше о командах Linux в документации Raspberry Pi: https://www.raspberrypi.org/documentation/linux/usage/commands.md.
## Редактирование файлов {#editing}
Используйте редактор **nano** для того, чтобы создавать или редактировать файлы на Raspberry Pi. Среди текстовых редакторов, доступных в терминале, он является наиболее простым и интуитивным.
1. Для редактирования файла введите команду:
```bash
nano путь/к/файлу
```
Например:
```bash
nano ~/catkin_ws/src/clever/clever/launch/clever.launch
```
<img src="../assets/nano.png" alt="Редактирование файла в nano" data-action="zoom">
2. Отредактируйте файл.
3. Для выхода с сохранением нажмите `Ctrl`+`X`, `Y`, `Enter`.
4. При изменении .launch-файлов необходимо перезапустить пакет `clever`:
```bash
sudo systemctl restart clever
```
Для редактирования файлов также можно использовать и другие редакторы, например, **vim**.

60
docs/ru/coex_pix.md Normal file
View File

@@ -0,0 +1,60 @@
# COEX Pix
Полетный контроллер **COEX Pix** является модифицированным аналогом полетного контроллера [Pixracer](https://docs.px4.io/v1.9.0/en/flight_controller/pixracer.html). Этот полетный контроллер поставляется с наборами **Клевер 4** и далее.
## Ревизия 1.1
### Характеристики
* Размеры платы 35x35 мм.
* Диаметр монтажных отверстий 3.2 мм.
* Расстояние между центрами монтажных отверстий 30.5 мм.
* Масса платы (без проводов) 9 г.
* Диапазон рабочих температур -5...+65 ºC.
* Диапазон входного напряжения 4.8...5.5 В.
### Основные элементы
* Основной SOC *STM32F427VIT6*.
* Память FRAM *FM25V02A*.
* Датчики:
* *MPU9250* (9 DOF) 3-х осевой магнитометр, 3-х осевой гироскоп, 3-х осевой акселерометр.
* *MS5607* датчик атмосферного давления.
### Разъемы
* *TELEM 1* (JST-GH 4 pin) разъем для подключения телеметрии, порт 1, протокол UART.
* *TELEM 2* (JST-GH 4 pin) разъем для подключения телеметрии, порт 2, протокол UART.
* *GPS* (JST-GH 6 pin) разъем для подключения ГПС модуля (UART) с компасом (I2C).
* *I2C* (JST-GH 4 pin) разъем для подключения поддерживаемых I2C устройств.
* *PWR* (JST-GH 6 pin) разъем для подключения питания с платы COEX PDB или аналогичной, датчиков напряжения и тока.
* *RC IN* (JST-GH 4 pin) разъем для подключения радиоприемника аппаратуры радиоуправления, канала для * снятия показаний RSSI. Поддерживаемые RC протоколы PPM и SBUS.
* Разьем Micro USB для подключения к ПК для настройки и коммуникации по протоколу USB 2.0/1.1
* Слот для карты памяти MicroSD, до 32 ГБ.
* Серворазъемы для подключения контроллеров моторов и других устройств.
### Схемы расположения контактов
<img src="../assets/coexpix-top.jpg" width=400 class=zoom>
<img src="../assets/coexpix-bottom.jpg" width=400 class=zoom>
> **Note** На плате ревизии 1.0 RC IN разъем располагался на месте разъема Micro SD. Распиновка самого разъема осталась такой же.
### Установка на Клевере
**Важно**: плата спроектирована для удобной установки на Клевере с поворотом на 180º по крену и 90º по рысканью (стрелка на плате находится снизу и указывает направо). Таким образом, параметр ориентации автопилота PX4 устанавливается в значение `SENS_BOARD_ROT` = `ROLL 180, YAW 90`.
### Рекомендации
Во время установки полетного контроллера, учитывайте возможные влияния магнитных полей от силовых проводов и платы распределения питания на магнитометр. В случае установки данной платы над платой распределения питания, рекомендуется (в случае использования внутреннего магнитометра) поднять плату на высоту не менее 15 мм от платы распределения питания и силовых проводов. Силовой провод от аккумуляторной батареи старайтесь зафиксировать соответственно.
В случае использования внешнего GPS модуля со встроенным магнитометром, внутренний магнитометр рекомендуется отключать.
В случае, если на дроне не предусмотрен защитный кожух, рекомендуется изолировать барометр поролоновой губкой (достаточно подложить губку между полетным контроллером и нижней частью корпуса (платой распределения питания), либо зафиксировать иным способом.
При подключении питания в разъем PWR, на разъеме **+** будет напряжение 5 вольт, его можно использовать для питания сервомашинок. Не рекомендуется подключать дополнительные источники питания в разъем **+**, если питание подается в разъем PWR. Питать полетный контроллер одновременно от USB и PWR\AUX разъемов допускается.
### Особенности платы
Для повышения надежности и стабильности, плата оснащена низкошумящими понижающими преобразователями. Установлен входной LC фильтр, а также ферритовые фильтры в цепях питания.

View File

@@ -1,56 +1,46 @@
Подключение Pixhawk/Pixracer к Raspberry Pi
===
# Подключение Raspberry Pi к полетному контроллеру
Для программирования [автономных полетов](simple_offboard.md), [работы с Pixhawk (Pixracer) по Wi-Fi](gcs_bridge.md), использования [телефонного пульта](rc.md) и других функций необходимо подсоединить Raspberry Pi к Pixhawk (Pixracer).
Для программирования [автономных полетов](simple_offboard.md), [работы с Pixhawk (Pixracer) по Wi-Fi](gcs_bridge.md), использования [телефонного пульта](rc.md) и других функций необходимо соединение Raspberry Pi и полетного контроллера.
Убедиться в работоспособности подключения, [выполнив на Raspberry Pi](ssh.md):
## Подключение по USB
```bash
rostopic echo /mavros/state
```
Основным способом подключения является подключение по интерфейсу USB.
Поле `connected` должно содержать значение `True`.
1. Соедините Raspberry Pi и полетный контроллер micro-USB to USB кабелем.
2. [Подключитесь в Raspberry Pi по SSH](ssh.md).
3. Убедитесь в работоспособности подключения, [выполнив на Raspberry Pi](ssh.md):
Подключение по USB
---
```bash
rostopic echo /mavros/state
```
Соедините Pixhawk/Pixracer и Raspberry Pi micro-USB to USB кабелем.
Необходимо убедиться, что в launch-файле Клевера (`~/catkin_ws/src/clever/clever/launch/clever.launch`) тип подключения установлен на USB:
```xml
<arg name="fcu_conn" default="usb"/>
```
При изменении launch-файла необходимо перезапустить пакет `clever`:
```bash
sudo systemctl restart clever
```
Поле `connected` должно содержать значение `True`.
> **Hint** Для корректной работы подключения Raspberry Pi и Pixhawk по USB необходимо установить значение [параметра](px4_parameters.md) `CBRK_USB_CHK` на 197848.
Подключение по UART
---
## Подключение по UART
TODO схема подключения
<!-- TODO схема подключения -->
Необходимо убедиться, что в launch-файле Клевера (`~/catkin_ws/src/clever/clever/clever.launch`) тип подключения установлен на UART:
Дополнительным способом подключения является подключение подключение по интерйсу UART.
```xml
<arg name="fcu_conn" default="uart"/>
```
1. Подключите Raspberry Pi к полетному контроллеру по UART.
2. [Подключитесь в Raspberry Pi по SSH](ssh.md).
3. Поменяйте в launch-файле Клевера (`~/catkin_ws/src/clever/clever/launch/clever.launch`) тип подключения на UART:
При изменении launch-файла необходимо перезапустить пакет `clever`:
```xml
<arg name="fcu_conn" default="uart"/>
```
```bash
sudo systemctl restart clever
```
При изменении launch-файла необходимо перезапустить пакет `clever`:
> **Hint** Для корректной работы подключения Raspberry Pi и Pixhawk по UART необходимо установить значение параметра `SYS_COMPANION` на 921600.
```bash
sudo systemctl restart clever
```
Подключение к SITL
---
> **Hint** Для корректной работы подключения Raspberry Pi и полетного контроллера по UART необходимо установить значение параметра `SYS_COMPANION` на 921600.
## Подключение к SITL
Для того, чтобы подсоединиться к локально/удаленно запущенному [SITL](sitl.md), необходимо установить аргумент `fcu_conn` в `udp`, и `fcu_ip` в IP-адрес машины, где запущен SITL (`127.0.0.1` для локального):
@@ -58,3 +48,5 @@ sudo systemctl restart clever
<arg name="fcu_conn" default="udp"/>
<arg name="fcu_ip" default="127.0.0.1"/>
```
**Далее**: [Подключение QGroundControl по Wi-Fi](gcs_bridge.md).

View File

@@ -1,6 +1,6 @@
# Copter Hack 2019
Хакатон [Copter Hack 2019](https://copterexpress.timepad.ru/event/768108/) проходит 1113 октября в Технополисе "Москва".
Хакатон [Copter Hack 2019](https://copterexpress.timepad.ru/event/1017592/) проходит 1113 октября в Технополисе "Москва".
Официальный сайт: https://ru.coex.tech/copterhack.
@@ -18,11 +18,11 @@ Timepad: https://copterexpress.timepad.ru/event/1017592/.
Этот параметр устанавливается для того, чтобы на программном уровне настроить ориентацию вашего *IMU* датчика находящегося на полетном контроллере.
### Полет с использованием Optical Flow
### Рекомендуемая версия образа
При полете только с использованием Optical Flow необходимо в QGroundControl в параметре `LPE_FUSION` включить галочку `pub agl as lpos down`.
Для Raspberry Pi версий до 3B+: [v0.18](https://github.com/CopterExpress/clever/releases/tag/v0.18)
Необходимо также убедиться, что лазерный дальномер корректно установлен и работает (см. [конфигурирование дальномера](laser.md)).
Для Raspberry Pi версии 4: [v0.19-alpha.1](https://github.com/CopterExpress/clever/releases/tag/v0.19-alpha.1)
### Ориентация камеры
@@ -30,6 +30,47 @@ Timepad: https://copterexpress.timepad.ru/event/1017592/.
Подробнее см. статью [Ориентация камеры](camera_frame.md).
### Полет с использованием Optical Flow
Для включения optical flow установите параметры `optical_flow` и `rangefinder_vl53l1x` в файле `clever.launch` в `true`.
Также необходимо в QGroundControl в параметре `LPE_FUSION` включить галочку `pub agl as lpos down`.
Необходимо также убедиться, что лазерный дальномер корректно установлен и работает (см. [конфигурирование дальномера](laser.md)).
Подробнее: [Использование Optical Flow](optical_flow.md).
### Использование карты маркеров
Для настройки большой карты маркеров используйте карту с названием `cmit.txt`. Далее используйте [инструкцию](aruco_map.md).
### Аккумуляторы
**При полетах обязательно использование датчика напряжения ("пищалки"). В случае выхода из строя аккумулятора новый не предоставляется!**
### Съемка видео
Снимайте **ВСЕ** ваши полеты на видео! В случае поломки дрона на защите сможете показать видео, что будет учтено при оценке.
### Проблема с yaw
При полете по маркерам (VPE) в прошивке v1.8.2-clever.7 возможно есть ошибка, которая проявляется в том, что дрон не держит yaw по маркерам. Если у вас есть такая проблема, попробуйте залить более старую прошивку v1.8.2-clever.6, доступную по ссылке https://github.com/CopterExpress/Firmware/releases/tag/v1.8.2-clever.6. Для COEX Pix необходимо скачивать файл `px4fmu-v4_default.px4`.
### Проблема с navigate
В образе 0.18 обнаружился баг из-за которого дрон может летать по точкам слишком быстро. Если у вас это происходит, поставьте в файле `~/catkin_ws/src/clever/clever/launch/clever.launch` параметр `nav_from_sp` в значение `false` таким образом:
```xml
<!-- simplified offboard control -->
<node name="simple_offboard" pkg="clever" type="simple_offboard" output="screen" clear_params="true">
<param name="reference_frames/body" value="map"/>
<param name="reference_frames/base_link" value="map"/>
<param name="reference_frames/navigate_target" value="map"/>
<param name="reference_frames/navigate_target" value="map"/>
<param name="nav_from_sp" value="false"/>
</node>
```
## Лекции
Лекция 1: введение  https://www.youtube.com/watch?v=cjtmZNuq7z0.
@@ -41,3 +82,13 @@ Timepad: https://copterexpress.timepad.ru/event/1017592/.
Лекция 4: автономные полеты: https://www.youtube.com/watch?v=ThXiNG1IzvI.
См. также другие видео на канале COEX на YouTube: https://www.youtube.com/channel/UCeCu93sLBkcgbIkIC7Jaauw/featured.
## Результаты
Команды-победители:
1. Бульболет – доставка картошки с помощью умной лебедки.
2. Copter don't hurt me – управление дроном с помощью нейроинтерфейса.
3. import torch  active track на нейронках.
4. Автобот freeze light через бота ВКонтакте.
5. Stardust Crusaders  AR среда симуляции для дронов.

View File

@@ -1,27 +0,0 @@
# Редактирование файлов
Используйте редактор **nano** для того, чтобы редактировать файлы на Raspberry Pi. Среди текстовых редакторов, доступных в терминале, он является наиболее простым и интуитивным.
1. [Откройте SSH-соединение](ssh.md) с Raspberry Pi любым из способов.
2. Для редактирования файла введите команду:
```bash
nano путь/к/файлу
```
Например:
```bash
nano ~/catkin_ws/src/clever/clever/launch/clever.launch
```
<img src="../assets/nano.png" alt="Редактирование файла в nano" data-action="zoom">
3. Отредактируйте файл.
4. Для выхода с сохранением нажмите *Ctrl+X*, *y*, *Enter*.
5. При изменении .launch-файлов необходимо перезапустить пакет `clever`:
```bash
sudo systemctl restart clever
```
Для редактирования файлов также можно использовать и другие редакторы, например, **vim**.

View File

@@ -9,7 +9,13 @@
* `map` — координаты относительно точки инициализации полетного контроллера: белая сетка на иллюстрации;
* `base_link` — координаты относительно квадрокоптера: схематичное изображение квадрокоптера на иллюстрации;
* `body` — координаты относительно квадрокоптера без учета наклонов по тангажу и крену: красная, синяя и зеленая линии на иллюстрации.
* `body` — координаты относительно квадрокоптера без учета наклонов по тангажу и крену: красная, синяя и зеленая линии на иллюстрации;
* `navigate_target` координаты точки, в которую сейчас летит дрон (с использованием [navigate](simple_offboard.md#navigate)).
При использовании [системы позиционирования по ArUco-маркерам](aruco.md) появляются дополнительные фреймы:
* `aruco_map` координаты относительно [карты ArUco-маркеров](aruco_map.md);
* `aruco_N` координаты относительно [маркера](aruco.md) с ID=N.
> **Hint** В соответствии с [соглашением](http://www.ros.org/reps/rep-0103.html), для фреймов, связанных с коптером, ось X направлена вперед, Y налево и Z вверх.

View File

@@ -48,3 +48,5 @@ sudo systemctl restart clever
1. Измените параметр `gcs_bridge` на `udp-pb`.
2. При открытии программы QGroundControl соединение должно установиться автоматически.
**Далее**: [Доступ по SSH](ssh.md).

View File

@@ -1,4 +1,4 @@
# Управление дроном для оценки позы человека
# Управление дроном при помощи позы человека
## Демонстрация

32
docs/ru/models.md Normal file
View File

@@ -0,0 +1,32 @@
# CAD-модели
На этой странице представлены CAD-модели некоторых деталей квадрокоптеров Клевер.
## Клевер 4
### Холдер для АКБ
Файл: [`battery_holder.stl`](https://github.com/CopterExpress/clever/raw/master/docs/assets/battery_holder.stl).
Материал печати: PLA/ABS/SBS.
Заполнение: не менее 50%.
Функция: устанавливается на деталь "дека монтажная", после чего позволяет надежно фиксировать АКБ с помощью ремешка. Также имеется возможность установки индикатора напряжения (с помощью 3М-скотча).
## Клевер 3
### Лазерная резка
* Ножка (вариант с захватом) [`big_leg.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/big_leg.dxf).
* Дека монтажная [`deck.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/deck.dxf).
* Дуга [`prop_guard.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/prop_guard.dxf).
* Рогатка+ушко [`prop_guard_mount.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/prop_guard_mount.dxf).
* Проставка [`grab_spacer.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/grab_spacer.dxf).
* Ножка [`leg.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/leg.dxf).
* Обруч (LED) [`led_mount_plate.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/led_mount_plate.dxf).
### Фрезеровка
* Дека центральная  [`central_plate.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/central_plate.dxf).
* Луч  [`arm.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/arm.dxf).

View File

@@ -35,7 +35,7 @@
* **ALTCTL** (*Altitude*) — управление скоростью изменения высоты полета, углами по тангажу и крену и угловой скоростью по рысканью. Используется барометр (или иной датчик высоты).
* **POSCTL** (*Position*) — управление скоростями набора высоты, скоростью движения вперед/назад и вправо/влево, угловой скоростью по рысканью. Наиболее простой для полетов режим. Используется барометр, GPS, компьютерное зрение, другие датчики.
### Автоматический полет
### Автоматический полет {#auto}
В этих режимах квадрокоптер игнорирует сигналы с пульта и летает по какой-либо автоматической программе.

View File

@@ -1,10 +1,10 @@
# Использование Optical Flow
При использовании технологии Optical Flow возможен полет в режиме POSCTL и автономные полеты по камере, направленной вниз, за счет измерения сдвигов текстуры поверхности пола.
При использовании технологии Optical Flow возможен полет в режиме POSCTL и автономные полеты ([режим OFFBOARD](simple_offboard.md)) по камере, направленной вниз, за счет измерения сдвигов текстуры поверхности пола.
## Включение
> **Hint** Рекомендуется использование [специальной сборки PX4 для Клевера](firmware.md#прошивка-для-клевера).
> **Hint** Необходимо использование [специальной сборки PX4 для Клевера](firmware.md#прошивка-для-клевера).
Необходимо использование дальномера. [Подключите и настройте дальномер VL53L1X](laser.md), используя инструкцию.
@@ -20,17 +20,7 @@ Optical Flow публикует данные в топик `mavros/px4flow/raw/s
## Настройка полетного контроллера
При использовании **EKF2** (параметр `SYS_MC_EST_GROUP` = `ekf2`):
* `EKF2_AID_MASK` включен флажок use optical flow.
* `EKF2_OF_DELAY`  0.
* `EKF2_OF_QMIN` 10.
* `EKF2_OF_N_MIN`  0.05.
* `EKF2_OF_N_MAX` - 0.2.
* `SENS_FLOW_ROT` No rotation (отсутствие поворота).
* `SENS_FLOW_MAXHGT` 4.0 (для дальномера VL53L1X)
* `SENS_FLOW_MINHGT` 0.01 (для дальномера VL53L1X)
* Опционально: `EKF2_HGT_MODE` range sensor (см. [конфигурирование дальномера](laser.md)).
> **Hint** При использовании [сборки PX4 для Клевера](firmware.md#прошивка-для-клевера) необходимые параметры PX4 применятся автоматически.
При использовании **LPE** (параметр `SYS_MC_EST_GROUP` = `local_position_estimator, attitude_estimator_q`):
@@ -44,6 +34,18 @@ Optical Flow публикует данные в топик `mavros/px4flow/raw/s
* `SENS_FLOW_MINHGT` 0.01 (для дальномера VL53L1X)
* Опционально: `LPE_FUSION` – включен флажок pub agl as lpos down (см. [конфигурирование дальномера](laser.md).
При использовании **EKF2** (параметр `SYS_MC_EST_GROUP` = `ekf2`):
* `EKF2_AID_MASK` включен флажок use optical flow.
* `EKF2_OF_DELAY`  0.
* `EKF2_OF_QMIN` 10.
* `EKF2_OF_N_MIN`  0.05.
* `EKF2_OF_N_MAX` - 0.2.
* `SENS_FLOW_ROT` No rotation (отсутствие поворота).
* `SENS_FLOW_MAXHGT` 4.0 (для дальномера VL53L1X)
* `SENS_FLOW_MINHGT` 0.01 (для дальномера VL53L1X)
* Опционально: `EKF2_HGT_MODE` range sensor (см. [конфигурирование дальномера](laser.md)).
Для проверки правильности всех настроек можно [воспользоваться утилитой `selfcheck.py`](selfcheck.md).
## Полет в POSCTL
@@ -63,7 +65,13 @@ navigate(z=1.5, frame_id='body', auto_arm=True)
Полет вперед на 1 м:
```python
navigate(x=1.5, frame_id='body')
navigate(x=1, frame_id='body')
```
Полет назад на 1 м (относительно предыдущей целевой точки):
```python
navigate(x=-1, frame_id='navigate_target')
```
При использовании Optical Flow возможна также [навигация по ArUco-маркерам](aruco_marker.md), в том числе [используя VPE](aruco_map.md).

96
docs/ru/programming.md Normal file
View File

@@ -0,0 +1,96 @@
# Программирование
<img src="../assets/programming.png" width=250 align=right>
Платформа Клевера позволяет использовать [Raspberry Pi](raspberry.md) для того, чтобы запрограммировать автономный полет дрона. Чаще всего программа для автономного полета пишется на языке Python. Программа может [получать телеметрию](simple_offboard.md#get_telemetry) (заряд батареи, ориентацию, расположение и т. д.) и отправлять команды: [полететь в точку](simple_offboard.md#navigate), [установить ориентацию](simple_offboard.md#set_attitude), [угловую скорость](simple_offboard.md#set_rates) и т. д.
Платформа основывается на [фреймворке ROS](ros.md), который обеспечивает связь между пользовательской программой и сервисами Клевера, которые запущены в фоне в виде systemd-демона `clever`. Для связи с полетным контроллером используется пакет [MAVROS](mavros.md).
Для автономного полета в PX4 используется [режим OFFBOARD](modes.md#auto). API Клевера переводит дрон в этом режим автоматически. В случае необходимости прерывания автономного полета, необходимо перевести дрон в любой другой режим, используя стик переключения режимов на пульте.
## Система позиционирования {#positioning}
Для того, чтобы дрон мог зависать на месте или летать между точками, необходимо использование система позиционирования. Такая система должна вычислять и сообщать дрону, где он находится. Клевер предполагает использование нескольких систем позиционирования: [optical flow](optical_flow.md) (используется [камера](camera.md) и [лазерный дальномер](laser.md)), [визуальные маркеры](aruco.md) (используется камера и маркеры, наклеенные на пол или потолок), GPS и других.
### Optical flow
Принцип работы optical flow основан на вычислении сдвигов между соседними кадрами с камеры и передачи этой информации в полетный контроллер для дальнейшего расчета смещения дрона относительно изначальной точки.
Для настройки этой системы позиционирования обращайтесь к [соответствующей статье](optical_flow.md).
### ArUco-маркеры
Технология визуальных маркеров позволяет рассчитать позицию дрона относительно распознанных маркеров и передать эту информацию в полетный контроллер.
Читайте [цикл статей про ArUco-маркеры](aruco.md) для получения подробностей.
### GPS (уличный полет)
Использование GPS позволяет также использовать для навигации глобальные координаты широту и долготу (функция [`navigate_global`](simple_offboard.md#navigate_global)).
Основная статья: [подключение GPS](gps.md).
## Автономный полет {#flight}
После настройки системы позиционирования становится возможным написание скриптов для автономных полетов. Для выполнения скриптов [подключитесь в Raspberry Pi по SSH](ssh.md). Для того, чтобы запустить Python-скрипт, используйте команду `python`:
```bash
python flight.py
```
Пример программы для полета (взлет, пролет вперед, посадка):
```python
# coding: utf8
import rospy
from clever import srv
from std_srvs.srv import Trigger
rospy.init_node('flight')
get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry)
navigate = rospy.ServiceProxy('navigate', srv.Navigate)
land = rospy.ServiceProxy('land', Trigger)
# Взлет на высоту 1 м
navigate(x=0, y=0, z=1, frame_id='body', auto_arm=True)
# Ожидание 3 секунды
rospy.sleep(3)
# Пролет вперед 1 метр
navigate(x=1, y=0, z=0, frame_id='body')
# Ожидание 3 секунды
rospy.sleep(3)
# Посадка
land()
```
> **note** Функция navigate не ожидает, пока дрон долетит до целевой точки; скрипт продолжит выполнение сразу. Для блокирующей версии смотрите пример функции [`navigate_wait`](snippets.md#block-nav).
Обратите внимание, что параметр `auto_arm` установлен на `True` только у первого вызова функции `navigate`. Этот параметр армит дрон и переводит его в режим автономного полета (OFFBOARD).
Параметр `frame_id` задает систему координат, относительно которой задаются целевая точка для полета дрона:
* `body` связана с корпусом дрона;
* `navigate_target` связана с предыдущей целевой точкой полета;
* `map` связана с локальной системой координат дрона;
* `aruco_map` связана с картой ArUco-маркеров;
* `aruco_N` связана ArUco-маркером с ID=N.
Подробности описаны в статье "[Системы координат](frames.md)".
Полное описания API Клевера приведено в статье ["Автономный полет"](simple_offboard.md).
## Дополнительное оборудование
Платформа Клевера также имеет API для работы с периферией. Читайте соответствующие статьи для подробностей:
* [работа со светодиодной лентой](leds.md);
* [лазерный дальномер](laser.md);
* [GPIO](gpio.md);
* [ультразвуковой дальномер](sonar.md);
* [камера](camera.md).

View File

@@ -3,7 +3,9 @@ Raspberry Pi
**Raspberry Pi** это свободно помещающийся на ладони одноплатный компьютер, созданный на базе мобильного микропроцессора ARM. Он обладает низким энергопотреблением и может работать даже от солнечных батарей. Raspberry Pi входит в комплекты программируемого квадрокоптера Клевер.
<img src="../assets/raspberry3.jpg" class="center zoom" alt="Raspberry Pi 3" width="400">
<img src="../assets/raspberry.png" class="center zoom" alt="Raspberry Pi 3" width="400">
Технические характеристики:
* Вес 45 грамм.
* Тактовая частота 1.2 ГГц.
@@ -12,15 +14,6 @@ Raspberry Pi
* 4 порта USB 2.0.
* HDMI-порт.
Сферы применения компьютера Raspberry Pi достаточно широки, ведь это всё-таки вполне полноценный компьютер. Если вам нужна машина для решения несложных задач, которые не требуют применения мощных ресурсов в плане вычисления, то вы смело можете подключать к устройству Raspberry Pi стандартные элементы компьютера: монитор; мышь; клавиатуру.
Raspberry Pi очень популярная платформа, на которой можно реализовать множество проектов, таких как:
* сервер домашней автоматизации (или система «умный дом»);
* сервер хранения данных (NAS);
* домашний медиа-сервер;
* «мозговой центр» для автоматизированных станков или роботов.
Собственно, в последнем качестве мы и будем его использовать, благодаря возможности подключения его к автопилоту Pixhawk.
В Клевере Raspberry Pi подключается к полетному контроллеру и используется как вспомогательный компьютер. Он позволяет [подключаться к дрону по Wi-Fi](wifi.md), программировать автономные полеты, работать с периферией и многое другое.
**Далее**: [образ для Raspberry Pi](image.md).

View File

@@ -1,14 +1,10 @@
# Установка и настройка пакета ROS Kinetic
# Установка и настройка пакета ROS Melodic
Для работы с такими инструментами как: rqt, rviz и т. д., а также для запуска симулятора (SITL) вам потребуется установленный и настроенный пакет ROS.
> **Hint** Более подробную инструкцию по установке смотрите в [основной статье](http://wiki.ros.org/kinetic/Installation/Ubuntu).
> **Hint** Более подробную инструкцию по установке смотрите в [основной статье](http://wiki.ros.org/melodic/Installation/Ubuntu).
<!-- -->
> **Hint** В случае, если вы используете Ubuntu версии 18.04, вместо ROS Kinetic вам нужно будет установить ROS Melodic. Полную инструкцию по установке вы можете найти [здесь](http://wiki.ros.org/melodic/Installation/Ubuntu).
## Установка ROS Kinetic на Ubuntu
## Установка ROS Melodic на Ubuntu
Для того, чтобы загрузить и установить правильную версию пакета требуется сделать настройки репозиториев, для этого откройте "Программы и обновления" и разрешите `restricted`, `universe` и `multiverse`.
@@ -35,13 +31,13 @@ sudo apt-get update
+ Если вы планируете использовать ROS вместе с симуляцией (также содержит инструменты: rqt, rviz и т. д):
```bash
sudo apt-get install ros-kinetic-desktop-full
sudo apt-get install ros-melodic-desktop-full
```
+ Если вы планируете использовать ROS исключительно работать с инструментами rqt, rviz и т. д:
```bash
sudo apt-get install ros-kinetic-desktop
sudo apt-get install ros-melodic-desktop
```
После установки пакета вам нужно инициализировать `rosdep`.
@@ -55,12 +51,12 @@ rosdep update
Если вам не удобно запускать переменное окружение вручную каждый раз, вы можете настроить его так, чтобы оно добавлялось в ваш сеанс bash при каждом запуске новой оболочки:
```bash
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
```
Если вы хотите установить какие-либо дополнительные пакеты для вашего ROS Kinetic просто используйте:
Если вы хотите установить какие-либо дополнительные пакеты для вашего ROS Melodic просто используйте:
```bash
sudo apt-get install ros-kinetic-PACKAGE
sudo apt-get install ros-melodic-PACKAGE
```

View File

@@ -8,13 +8,13 @@ ROS – это широко используемый фреймворк для
Установка
---
Основная статья: http://wiki.ros.org/kinetic/Installation/Ubuntu
Основная статья: http://wiki.ros.org/melodic/Installation/Ubuntu
ROS уже установлен на [образе для RPi](image.md).
Для использования ROS на компьютере рекомендуется ОС Ubuntu Linux (либо виртуальная машина, например [Parallels Desktop Lite](https://itunes.apple.com/ru/app/parallels-desktop-lite/id1085114709?mt=12) или [VirtualBox](https://www.virtualbox.org)).
> **Note** Для дистрибутива ROS Kinetic рекомендуется Ubuntu версии 16.04.
> **Note** Для дистрибутива ROS Melodic рекомендуется Ubuntu версии 18.04.
Концепции
---

View File

@@ -9,7 +9,7 @@
Для использования rviz и rqt необходим компьютер с ОС Ubuntu Linux (либо виртуальная машина, например [Parallels Desktop Lite](https://itunes.apple.com/ru/app/parallels-desktop-lite/id1085114709?mt=12) или [VirtualBox](https://www.virtualbox.org)).
На него необходимо установить пакет `ros-kinetic-desktop-full` или `ros-kinetic-desktop`, используя [документацию по установке](http://wiki.ros.org/kinetic/Installation/Ubuntu).
На него необходимо установить пакет `ros-melodic-desktop-full` или `ros-melodic-desktop`, используя [документацию по установке](http://wiki.ros.org/melodic/Installation/Ubuntu).
Запуск rviz
---
@@ -48,7 +48,7 @@ Axis или Grid настроенный на фрейм `aruco_map` будут
Рекомендуется также установка набора дополнительных полезных плагинов для rviz [jsk_rviz_plugins](https://jsk-docs.readthedocs.io/en/latest/jsk_visualization/doc/jsk_rviz_plugins/index.html). Это набор позволяет визуализировать топики типа `TwistStamped` (скорость), `CameraInfo`, `PolygonArray` и многое другое. Для установки используйте команду:
```bash
sudo apt-get install ros-kinetic-jsk-visualization
sudo apt-get install ros-melodic-jsk-visualization
```
Запуск инструментов rqt
@@ -71,5 +71,5 @@ ROS_MASTER_URI=http://192.168.11.1:11311 rqt_image_view
Краткое описание полезных rqt-плагинов:
* `rqt_image_view` просмотр изображений из топиков типа `sensor_msgs/Image`;
* `rqt_multiplot` построение графиков по данным из произвольным топиков (установка: `sudo apt-get install ros-kinetic-rqt-multiplot`);
* `rqt_multiplot` построение графиков по данным из произвольным топиков (установка: `sudo apt-get install ros-melodic-rqt-multiplot`);
* Bag работа с [Bag-файлами](http://wiki.ros.org/rosbag).

View File

@@ -21,5 +21,7 @@ rosrun clever selfcheck.py
* ArUco проверка работы [распознавания ArUco-маркеров](aruco.md).
* VPE проверка правильности работы VPE.
* Rangefinder проверка работы [дальномера](laser.md).
* RPi health проверка состояния [бортового компьютера](raspberrypi.md).
* CPU usage проверка загруженности процессора бортового компьютера.
> **Caution** Обращайте пристальное внимание на предупреждения, отмеченные строкой *WARN*. При необходимости, обращайтесь в [Техподдержку Copter Express](tg://resolve?domain=COEXHelpdesk).

View File

@@ -140,6 +140,12 @@ navigate(x=5, y=0, z=3, speed=0.8, yaw=float('nan'))
navigate(x=0, y=-3, z=0, speed=1, frame_id='body')
```
Полет влево на 2 м относительно последней целевой точки полета дрона:
```python
navigate(x=0, y=2, z=0, speed=1, frame_id='navigate_target')
```
Повернуться на 90 градусов против часовой:
```python
@@ -170,6 +176,8 @@ navigate(x=3, y=0, z=0, speed=0.5, yaw=float('nan'), yaw_rate=0.2, frame_id='bod
rosservice call /navigate "{x: 0.0, y: 0.0, z: 2, yaw: 0.0, yaw_rate: 0.0, speed: 0.5, frame_id: 'body', auto_arm: true}"
```
> **Note** При программировании миссии дрона в терминах "вперед-назад-влево-вправо" рекомендуется использовать систему координат `navigate_target` вместо `body`, чтобы не учитывать неточность прилета дрона в предыдущую целевую точку при вычислении следующей.
### navigate_global
Полет по прямой в точку в глобальной системе координат (широта/долгота).

View File

@@ -77,22 +77,22 @@ roslaunch mavros px4.launch fcu_url:=udp://@127.0.0.1:14557
Для того, чтобы запустить симулятор полета дрона, Gazebo или jMAVSim вам потребуется сделать соответственные настройки вашей среды.
> **Caution** Среда `ROS Kinetic` в изначально ориентированна для `Ubuntu (Xenial)` версии 16.04, по этому актуальность данной инструкции гарантируется только для соответственной версии операционной системы.
> **Caution** Среда `ROS Melodic` изначально ориентированна для Ubuntu версии 18.04 (Bionic), поэтому актуальность данной инструкции гарантируется только для данной версии операционной системы.
В первую очередь вам потребуется установить полный пакет ROS Kinetic desktop-full, инструкцию по установке вы можете найти в [статье по установке ROS](ros-install.md).
В первую очередь вам потребуется установить полный пакет ROS Melodic desktop-full, инструкцию по установке вы можете найти в [статье по установке ROS](ros-install.md).
После того, как вы выполнили указанные выше инструкции, вам нужно проверить, есть ли в вашем пакете `ROS` все нужные пакеты.
```bash
sudo apt-get install ros-kinetic-gazebo-ros \
ros-kinetic-gazebo-dev \
ros-kinetic-gazebo-plugins \
ros-kinetic-gazebo-ros-pkgs \
ros-kinetic-gazebo-msgs \
ros-kinetic-geographic-msgs
sudo apt-get install ros-melodic-gazebo-ros \
ros-melodic-gazebo-dev \
ros-melodic-gazebo-plugins \
ros-melodic-gazebo-ros-pkgs \
ros-melodic-gazebo-msgs \
ros-melodic-geographic-msgs
```
Чтобы избежать ошибок во время запуска симулятора, вам нужно будет установить Gazebo v7.14, для этого подключите необходимый репозиторий и добавьте соответствующие ключи:
Чтобы избежать ошибок во время запуска симулятора, вам нужно будет установить Gazebo v9.11, для этого подключите необходимый репозиторий и добавьте соответствующие ключи:
```bash
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'

View File

@@ -164,6 +164,7 @@ arming(False) # дизарм
```python
import tf2_ros
import tf2_geometry_msgs
from geometry_msgs.msg import PoseStamped
tf_buffer = tf2_ros.Buffer()
tf_listener = tf2_ros.TransformListener(tf_buffer)

View File

@@ -124,7 +124,7 @@ while True:
Пример полетной программы с использованием [simple_offboard](simple_offboard.md), которая заставляет коптер лететь вперед, пока подключенный ультразвуковой дальномер не задетектирует препятствие:
```python
set_velocity(x=0.5, frame_id='body', auto_arm=True) # полет вперед со скоростью 0.5 мс
set_velocity(vx=0.5, frame_id='body', auto_arm=True) # полет вперед со скоростью 0.5 мс
while True:
if read_distance_filtered() < 1:

View File

@@ -21,3 +21,5 @@ ssh pi@192.168.11.1
Начиная с версии 0.11.4 [образа](image.md) доступ к шеллу также доступен через веб-браузер (с использованием [Butterfly](https://github.com/paradoxxxzero/butterfly)). Для доступа откройте страницу http://192.168.11.1 и выберите на ней ссылку *Open web terminal*:
<img src="../assets/butterfly.png">
**Далее**: [Командная строка](cli.md).

View File

@@ -36,7 +36,7 @@ http://192.168.11.1:8080/stream_viewer?topic=/main_camera/image_raw&type=mjpeg&q
## Просмотр через rqt_image_view
Для просмотра изображений через инструменты rqt необходим компьютер с установленной Ubuntu 16.04 и [ROS Kinetic](http://wiki.ros.org/kinetic/Installation/Ubuntu).
Для просмотра изображений через инструменты rqt необходим компьютер с установленной Ubuntu 18.04 и [ROS Melodic](http://wiki.ros.org/melodic/Installation/Ubuntu).
[Подключитесь к Wi-Fi сети Клевера](wifi.md) и запустите `rqt_image_view` с указанием его IP-адреса:

View File

@@ -14,4 +14,4 @@
<img src="../assets/web.png" alt="Веб-интерфейс Клевера" class="zoom">
**Далее**: [Подключение QGroundControl по Wi-Fi](gcs_bridge.md).
**Далее**: [Подключение Raspberry Pi к полетному контроллеру](connection.md).

View File

@@ -53,6 +53,7 @@
{ "from": "laser/", "to": "ru/laser.html" },
{ "from": "led/", "to": "ru/leds.html" },
{ "from": "leds/", "to": "ru/leds.html" },
{ "from": "hostname/", "to": "ru/hostname.html" },
{ "from": "ru/microsd_images.html", "to": "ru/image.html" },
{ "from": "en/microsd_images.html", "to": "en/image.html" }