Compare commits

..

36 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
72 changed files with 147635 additions and 467 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|\.stl"
- ./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,7 +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 # ignore documentation files by catkin
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

@@ -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

@@ -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
@@ -244,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')
@@ -692,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()
@@ -707,6 +769,7 @@ def selfcheck():
check_optical_flow()
check_vpe()
check_rangefinder()
check_rpi_health()
check_cpu_usage()
check_boot_duration()

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

@@ -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,5 +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)

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

@@ -48,7 +48,7 @@ Additionally you can specify an arbitrary capture parameter using its [OpenCV co
## 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

@@ -12,6 +12,11 @@ Main frames in the `clever` package:
* `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).
Additional frames become available when [ArUco positioning system](aruco.md) is active:
* `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).

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.

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

@@ -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,15 +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)
* [STL-модели Клевера](models.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)

View File

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

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**.

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.

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

@@ -12,6 +12,11 @@
* `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 вверх.
Более наглядно 3D визуализацию систем координат можно наблюдать, используя [rviz](rviz.md).

View File

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

View File

@@ -1,6 +1,6 @@
# STL-модели
# CAD-модели
На этой странице представлены STL-модели некоторых деталей квадрокоптеров Клевер.
На этой странице представлены CAD-модели некоторых деталей квадрокоптеров Клевер.
## Клевер 4
@@ -13,3 +13,20 @@
Заполнение: не менее 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}
В этих режимах квадрокоптер игнорирует сигналы с пульта и летает по какой-либо автоматической программе.

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

@@ -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" }