Compare commits
78 Commits
v0.19-alph
...
v0.19-rc.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b8a8e7339d | ||
|
|
e1ab0e63b5 | ||
|
|
4a23a9274a | ||
|
|
5bc7443a7b | ||
|
|
5fe18152f0 | ||
|
|
b8d4a7fdcc | ||
|
|
c3a4f674ec | ||
|
|
591d57e2b2 | ||
|
|
4a67783706 | ||
|
|
7dc82e8154 | ||
|
|
4feac879eb | ||
|
|
6c883cab67 | ||
|
|
00048d4dfe | ||
|
|
a635b9d21d | ||
|
|
de693e3e58 | ||
|
|
9e2707ad6b | ||
|
|
a7e04fe22a | ||
|
|
3647337455 | ||
|
|
b771fbb398 | ||
|
|
7ed2dd398c | ||
|
|
45e6f396d0 | ||
|
|
0574f4cc46 | ||
|
|
f574637a3f | ||
|
|
6ede041c8a | ||
|
|
0fda24c63c | ||
|
|
a01c2b8d6c | ||
|
|
5ce348d14c | ||
|
|
5736c7acfb | ||
|
|
c6b3e837e3 | ||
|
|
78e42df0f2 | ||
|
|
a8824a696d | ||
|
|
7a216ede07 | ||
|
|
b68e42bfcc | ||
|
|
fdeab48bf5 | ||
|
|
5c1b19d9c9 | ||
|
|
7d25898694 | ||
|
|
2c6780202a | ||
|
|
cab76dea16 | ||
|
|
0e0b0aa90b | ||
|
|
e85be7ae49 | ||
|
|
bb99d68ff4 | ||
|
|
ae077304bb | ||
|
|
0baadf73a2 | ||
|
|
f0917347be | ||
|
|
eba8c7fc6a | ||
|
|
36573c12ee | ||
|
|
e293e54353 | ||
|
|
35801346d9 | ||
|
|
660b90a353 | ||
|
|
f88d9eea2e | ||
|
|
5ab5418866 | ||
|
|
910e3590b3 | ||
|
|
5ad08785c4 | ||
|
|
b75a40b9ad | ||
|
|
7bbbba31be | ||
|
|
241264a1d2 | ||
|
|
5c78b01b7b | ||
|
|
dab4e69be1 | ||
|
|
753e0a8ab4 | ||
|
|
112c51a2b9 | ||
|
|
9c6cb4cc38 | ||
|
|
b337dfa4c3 | ||
|
|
22607c5390 | ||
|
|
0f837d96a6 | ||
|
|
3fa5ee99c4 | ||
|
|
8749f1523e | ||
|
|
8b3a9dc07a | ||
|
|
a9b3613726 | ||
|
|
3530c9999e | ||
|
|
244005c9f7 | ||
|
|
761ab42a63 | ||
|
|
86feac089a | ||
|
|
13a5a0ea05 | ||
|
|
dfefad297c | ||
|
|
cb9924d083 | ||
|
|
13599a1b2e | ||
|
|
a46a96f729 | ||
|
|
b7a811d4d4 |
@@ -20,6 +20,7 @@
|
||||
"MAVLink",
|
||||
"ROS",
|
||||
"ROS Kinetic",
|
||||
"ROS Melodic",
|
||||
"OpenCV",
|
||||
"Gazebo",
|
||||
"GitHub",
|
||||
|
||||
@@ -109,7 +109,7 @@ jobs:
|
||||
- wget https://github.com/okalachev/editorconfig-checker/releases/download/1.2.1-disable-spaces-amount/ec-linux-amd64
|
||||
- chmod +x ec-linux-amd64
|
||||
script:
|
||||
- ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor"
|
||||
- ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf"
|
||||
stages:
|
||||
- Build
|
||||
- Annotate
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
[Unit]
|
||||
Description=Clever ROS package
|
||||
Requires=roscore.service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=pi
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
@@ -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
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
LOG_FILE=$1
|
||||
mv -f ${LOG_FILE} ${LOG_FILE}.1
|
||||
@@ -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/'
|
||||
|
||||
@@ -111,6 +111,7 @@ cd /home/pi/catkin_ws/src/clever
|
||||
NPM_CONFIG_UNSAFE_PERM=true npm install gitbook-cli -g
|
||||
NPM_CONFIG_UNSAFE_PERM=true gitbook install
|
||||
gitbook build
|
||||
touch node_modules/CATKIN_IGNORE docs/CATKIN_IGNORE _book/CATKIN_IGNORE clever/www/CATKIN_IGNORE apps/CATKIN_IGNORE # ignore documentation files by catkin
|
||||
|
||||
echo_stamp "Installing additional ROS packages"
|
||||
apt-get install -y --no-install-recommends \
|
||||
|
||||
@@ -66,6 +66,7 @@ apt-get update \
|
||||
&& apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
|
||||
|
||||
echo "deb http://packages.ros.org/ros/ubuntu buster main" > /etc/apt/sources.list.d/ros-latest.list
|
||||
echo "deb http://deb.coex.tech/opencv3 buster main" > /etc/apt/sources.list.d/opencv3.list
|
||||
echo "deb http://deb.coex.tech/rpi-ros-melodic buster main" > /etc/apt/sources.list.d/rpi-ros-melodic.list
|
||||
# FIXME: We still don't have these packages built for Buster
|
||||
# FIXME: Check these packages after their installation
|
||||
|
||||
@@ -17,7 +17,7 @@ EXCLUDE = 'rviz.png', 'ssid.png', 'sitl_docker_demo.png', 'qgc-params.png', 'but
|
||||
'cl3_mountBEC.JPG', 'cl3_mountRpiCamera.JPG', 'clever4-front-black-large.png', \
|
||||
'qgc-battery.png', 'qgc-radio.png', 'qgc-cal-acc.png', 'qgc-esc.png', 'qgc-cal-compass.png', \
|
||||
'qgc.png', 'qgc-parameters.png', 'clever4-front-white-large.png', 'qgc-modes.png', \
|
||||
'qgc-requires-setup.png', 'clever4-front-white.png', 'clever4-kit-white.png', '26_1.png'
|
||||
'qgc-requires-setup.png', 'clever4-front-white.png', 'clever4-kit-white.png', '26_1.png', 'battery_holder.stl'
|
||||
|
||||
code = 0
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<arg name="optical_flow" default="false"/>
|
||||
<arg name="aruco" default="false"/>
|
||||
<arg name="rangefinder_vl53l1x" default="false"/>
|
||||
<arg name="led" default="false"/>
|
||||
<arg name="led" default="true"/>
|
||||
<arg name="rc" default="true"/>
|
||||
|
||||
<!-- log formatting -->
|
||||
@@ -63,6 +63,8 @@
|
||||
<!-- vl53l1x ToF rangefinder -->
|
||||
<node name="rangefinder" pkg="vl53l1x" type="vl53l1x_node" output="screen" if="$(arg rangefinder_vl53l1x)">
|
||||
<param name="frame_id" value="rangefinder"/>
|
||||
<param name="min_signal" value="0.4"/>
|
||||
<param name="pass_statuses" type="yaml" value="[0, 6, 7, 11]"/>
|
||||
</node>
|
||||
|
||||
<!-- led strip -->
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<node pkg="ws281x" name="led" type="ws281x_node" clear_params="true" output="screen" if="$(arg ws281x)">
|
||||
<param name="led_count" value="58"/>
|
||||
<param name="gpio_pin" value="21"/>
|
||||
<param name="brightness" value="100"/>
|
||||
<param name="brightness" value="64"/>
|
||||
<param name="strip_type" value="WS2811_STRIP_GRB"/>
|
||||
<param name="target_frequency" value="800000"/>
|
||||
<param name="dma" value="10"/>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<launch>
|
||||
<arg name="fcu_conn" default="usb"/>
|
||||
<arg name="fcu_conn" default="usb"/> <!-- options: usb, uart, tcp, udp, sitl -->
|
||||
<arg name="fcu_ip" default="127.0.0.1"/>
|
||||
<arg name="gcs_bridge" default="tcp"/>
|
||||
<arg name="viz" default="true"/>
|
||||
@@ -13,9 +13,12 @@
|
||||
<!-- USB connection -->
|
||||
<param name="fcu_url" value="/dev/px4fmu" if="$(eval fcu_conn == 'usb')"/>
|
||||
|
||||
<!-- sitl -->
|
||||
<!-- sitl before PX4 1.9.0 -->
|
||||
<param name="fcu_url" value="udp://@$(arg fcu_ip):14557" if="$(eval fcu_conn == 'udp')"/>
|
||||
|
||||
<!-- sitl since PX4 1.9.0 -->
|
||||
<param name="fcu_url" value="udp://@$(arg fcu_ip):14580" if="$(eval fcu_conn == 'sitl')"/>
|
||||
|
||||
<!-- gcs bridge -->
|
||||
<param name="gcs_url" value="tcp-l://0.0.0.0:5760" if="$(eval gcs_bridge == 'tcp')"/>
|
||||
<param name="gcs_url" value="udp://0.0.0.0:14550@14550" if="$(eval gcs_bridge == 'udp')"/>
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<arg name="rosbridge" value="$(arg rosbridge)"/>
|
||||
<arg name="aruco" default="false"/>
|
||||
<arg name="rangefinder_vl53l1x" default="false"/>
|
||||
<arg name="led" default="false"/>
|
||||
<arg name="rc" default="false"/>
|
||||
</include>
|
||||
</launch>
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
|
||||
import os
|
||||
import math
|
||||
import subprocess
|
||||
import re
|
||||
@@ -94,7 +95,7 @@ def get_param(name):
|
||||
return None
|
||||
|
||||
if not res.success:
|
||||
failure('Unable to retrieve PX4 parameter %s', name)
|
||||
failure('unable to retrieve PX4 parameter %s', name)
|
||||
else:
|
||||
if res.value.integer != 0:
|
||||
return res.value.integer
|
||||
@@ -224,6 +225,12 @@ def check_fcu():
|
||||
else:
|
||||
info('LPE_FUSION: barometer fusion is disabled')
|
||||
|
||||
mag_yaw_w = get_param('ATT_W_MAG')
|
||||
if mag_yaw_w == 0:
|
||||
info('magnetometer weight (ATT_W_MAG) is zero, better for indoor flights')
|
||||
else:
|
||||
info('magnetometer weight (ATT_W_MAG) is non-zero (%.2f), better for outdoor flights', mag_yaw_w)
|
||||
|
||||
elif est == 2:
|
||||
info('selected estimator: EKF2')
|
||||
else:
|
||||
@@ -238,15 +245,18 @@ def check_fcu():
|
||||
|
||||
cbrk_usb_chk = get_param('CBRK_USB_CHK')
|
||||
if cbrk_usb_chk != 197848:
|
||||
failure('Set parameter CBRK_USB_CHK to 197848 for flying with USB connected')
|
||||
failure('set parameter CBRK_USB_CHK to 197848 for flying with USB connected')
|
||||
|
||||
try:
|
||||
battery = rospy.wait_for_message('mavros/battery', BatteryState, timeout=3)
|
||||
cell = battery.cell_voltage[0]
|
||||
if cell > 4.3 or cell < 3.0:
|
||||
failure('Incorrect cell voltage: %.2f V, https://clever.coex.tech/power', cell)
|
||||
elif cell < 3.7:
|
||||
failure('Critically low cell voltage: %.2f V, recharge battery', cell)
|
||||
if not battery.cell_voltage:
|
||||
failure('cell voltage is not available, https://clever.coex.tech/power')
|
||||
else:
|
||||
cell = battery.cell_voltage[0]
|
||||
if cell > 4.3 or cell < 3.0:
|
||||
failure('incorrect cell voltage: %.2f V, https://clever.coex.tech/power', cell)
|
||||
elif cell < 3.7:
|
||||
failure('critically low cell voltage: %.2f V, recharge battery', cell)
|
||||
except rospy.ROSException:
|
||||
failure('no battery state')
|
||||
|
||||
@@ -686,9 +696,67 @@ def check_preflight_status():
|
||||
failure(' '.join([match.groups()[1], 'check:', check_status]))
|
||||
|
||||
|
||||
@check('Network')
|
||||
def check_network():
|
||||
ros_hostname = os.environ.get('ROS_HOSTNAME').strip()
|
||||
|
||||
if not ros_hostname:
|
||||
failure('no ROS_HOSTNAME is set')
|
||||
|
||||
elif ros_hostname.endswith('.local'):
|
||||
# using mdns hostname
|
||||
hosts = open('/etc/hosts', 'r')
|
||||
for line in hosts:
|
||||
parts = line.split()
|
||||
if len(parts) < 2:
|
||||
continue
|
||||
ip = parts.pop(0).split('.')
|
||||
if ip[0] == '127': # loopback ip
|
||||
if ros_hostname in parts:
|
||||
break
|
||||
else:
|
||||
failure('not found %s in /etc/hosts, ROS will malfunction if network interfaces are down, https://clever.coex.tech/hostname', ros_hostname)
|
||||
|
||||
|
||||
@check('RPi health')
|
||||
def check_rpi_health():
|
||||
# `vcgencmd get_throttled` output codes taken from
|
||||
# https://github.com/raspberrypi/documentation/blob/JamesH65-patch-vcgencmd-vcdbg-docs/raspbian/applications/vcgencmd.md#get_throttled
|
||||
# TODO: support more base platforms?
|
||||
FLAG_UNDERVOLTAGE_NOW = 0x1
|
||||
FLAG_FREQ_CAP_NOW = 0x2
|
||||
FLAG_THROTTLING_NOW = 0x4
|
||||
FLAG_THERMAL_LIMIT_NOW = 0x8
|
||||
FLAG_UNDERVOLTAGE_OCCURRED = 0x10000
|
||||
FLAG_FREQ_CAP_OCCURRED = 0x20000
|
||||
FLAG_THROTTLING_OCCURRED = 0x40000
|
||||
FLAG_THERMAL_LIMIT_OUCCURRED = 0x80000
|
||||
|
||||
try:
|
||||
# vcgencmd outputs a single string in a form of
|
||||
# <parameter>=<value>
|
||||
# In case of `get_throttled`, <value> is a hexadecimal number
|
||||
# with some of the FLAGs OR'ed together
|
||||
output = subprocess.check_output(['vcgencmd', 'get_throttled'])
|
||||
except OSError:
|
||||
failure('could not call vcgencmd binary; not a Raspberry Pi?')
|
||||
return
|
||||
|
||||
throttle_mask = int(output.split('=')[1], base=16)
|
||||
if throttle_mask & (FLAG_THROTTLING_NOW | FLAG_THROTTLING_OCCURRED):
|
||||
failure('system throttled to prevent damage')
|
||||
if throttle_mask & (FLAG_UNDERVOLTAGE_NOW | FLAG_UNDERVOLTAGE_OCCURRED):
|
||||
failure('not enough power for onboard computer, flight inadvisable')
|
||||
if throttle_mask & (FLAG_FREQ_CAP_NOW | FLAG_FREQ_CAP_OCCURRED):
|
||||
failure('CPU frequency reduced to avoid overheating')
|
||||
if throttle_mask & (FLAG_THERMAL_LIMIT_NOW | FLAG_THERMAL_LIMIT_OUCCURRED):
|
||||
failure('CPU over soft temperature limit, expect performance loss')
|
||||
|
||||
|
||||
def selfcheck():
|
||||
check_image()
|
||||
check_clever_service()
|
||||
check_network()
|
||||
check_fcu()
|
||||
check_imu()
|
||||
check_local_position()
|
||||
@@ -701,6 +769,7 @@ def selfcheck():
|
||||
check_optical_flow()
|
||||
check_vpe()
|
||||
check_rangefinder()
|
||||
check_rpi_health()
|
||||
check_cpu_usage()
|
||||
check_boot_duration()
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 523 KiB After Width: | Height: | Size: 322 KiB |
BIN
docs/assets/4/31_2.png
Normal file
|
After Width: | Height: | Size: 772 KiB |
BIN
docs/assets/4/43_1.png
Normal file
|
After Width: | Height: | Size: 309 KiB |
BIN
docs/assets/4/pix/pixracer_sdcard.png
Normal file
|
After Width: | Height: | Size: 382 KiB |
BIN
docs/assets/4/props/props_rotation.png
Normal file
|
After Width: | Height: | Size: 426 KiB |
BIN
docs/assets/4/rpi/rpi_sdcard.png
Normal file
|
After Width: | Height: | Size: 629 KiB |
BIN
docs/assets/battery_holder.stl
Normal file
BIN
docs/assets/coexpix-bottom.jpg
Normal file
|
After Width: | Height: | Size: 368 KiB |
BIN
docs/assets/coexpix-top.jpg
Normal file
|
After Width: | Height: | Size: 405 KiB |
15980
docs/assets/dxf/arm.dxf
Normal file
15376
docs/assets/dxf/big_leg.dxf
Normal file
18364
docs/assets/dxf/central_plate.dxf
Normal file
19794
docs/assets/dxf/deck.dxf
Normal file
15378
docs/assets/dxf/grab_spacer.dxf
Normal file
15206
docs/assets/dxf/led_mount_plate.dxf
Normal file
15334
docs/assets/dxf/leg.dxf
Normal file
15256
docs/assets/dxf/prop_guard.dxf
Normal file
15790
docs/assets/dxf/prop_guard_mount.dxf
Normal file
BIN
docs/assets/programming.png
Executable file
|
After Width: | Height: | Size: 104 KiB |
BIN
docs/assets/raspberry.png
Executable file
|
After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 37 KiB |
@@ -1,6 +1,6 @@
|
||||
Using an external 3G modem
|
||||
===
|
||||
|
||||
To use an external 3G modem on Raspberry, you can use the [`sakis3g`] package (https://github.com/Trixarian/sakis3g-source).
|
||||
To use an external 3G modem on Raspberry, you can use the [`sakis3g`](https://github.com/Trixarian/sakis3g-source) package.
|
||||
|
||||
TODO
|
||||
|
||||
@@ -20,34 +20,37 @@
|
||||
* [Connection to the Pixracer](connection.md)
|
||||
* [Using QGroundControl over Wi-Fi](gcs_bridge.md)
|
||||
* [Remote shell](ssh.md)
|
||||
* [Editing files](editing.md)
|
||||
* [Command line interface](cli.md)
|
||||
* [Automated self-checks](selfcheck.md)
|
||||
* [Viewing images from cameras](web_video_server.md)
|
||||
* Programming
|
||||
* [ROS](ros.md)
|
||||
* [MAVROS](mavros.md)
|
||||
* [Overview](programming.md)
|
||||
* [Camera orientation](camera_frame.md)
|
||||
* [Coordinate systems (frames)](frames.md)
|
||||
* [Simple OFFBOARD](simple_offboard.md)
|
||||
* [Code snippets](snippets.md)
|
||||
* Fiducial markers (ArUco)
|
||||
* [Overview](aruco.md)
|
||||
* [Marker detection](aruco_marker.md)
|
||||
* [Map-based navigation](aruco_map.md)
|
||||
* [Optical Flow](optical_flow.md)
|
||||
* [Computer vision basics](camera.md)
|
||||
* [Simple OFFBOARD](simple_offboard.md)
|
||||
* [Coordinate systems (frames)](frames.md)
|
||||
* [Code snippets](snippets.md)
|
||||
* [Interfacing with a laser rangefinder](laser.md)
|
||||
* [LED strip](leds.md)
|
||||
* [Working with GPIO](gpio.md)
|
||||
* [Interfacing with a sonar](sonar.md)
|
||||
* [Computer vision basics](camera.md)
|
||||
* [Using rviz and rqt](rviz.md)
|
||||
* [Interfacing with a laser rangefinder](laser.md)
|
||||
* [Software autorun](autolaunch.md)
|
||||
* [Software autorun](autolaunch.md)
|
||||
* [ROS](ros.md)
|
||||
* [MAVROS](mavros.md)
|
||||
* Supplementary materials
|
||||
* [COEX Pix](coex_pix.md)
|
||||
* [Guide on autonomous flight](auto_setup.md)
|
||||
* [Hostname](hostname.md)
|
||||
* [PX4 Simulation](sitl.md)
|
||||
* [PID Setup](calibratePID.md)
|
||||
* [ROS Kinetic installation](ros-install.md)
|
||||
* [Model files for parts](models.md)
|
||||
* [ROS Melodic installation](ros-install.md)
|
||||
* [Remote control app](rc.md)
|
||||
* [Wi-Fi Configuration](network.md)
|
||||
* [UART settings](uart.md)
|
||||
@@ -75,7 +78,6 @@
|
||||
* [Android RC app](android.md)
|
||||
* [3D-scanning drone](3dscan.md)
|
||||
* [Human pose estimation drone control](human_pose_estimation_drone_control.md)
|
||||
* [Copter Hack 2019](copterhack2019.md)
|
||||
* [Copter Hack 2018](copterhack2018.md)
|
||||
* [Copter Hack 2017](copterhack2017.md)
|
||||
* Textbook
|
||||
* [Theory and Videos](lessons.md)
|
||||
|
||||
@@ -61,6 +61,8 @@ Usage example:
|
||||
rosrun aruco_pose genmap.py 0.33 2 4 1 1 0 > ~/catkin_ws/src/clever/aruco_pose/map/test_map.txt
|
||||
```
|
||||
|
||||
<!-- You can also use the [online map editor](arucogenmap.md) to create ArUco maps. -->
|
||||
|
||||
### Checking the map
|
||||
|
||||
The currently active map is posted in the `/aruco_map/image` ROS topic. It can be viewed using [web_video_server](web_video_server.md) by opening the following link: http://192.168.11.1:8080/snapshot?topic=/aruco_map/image
|
||||
@@ -102,6 +104,12 @@ If you're using **LPE** (`SYS_MC_EST_GROUP` parameter is set to `local_position_
|
||||
* Vision position standard deviations: `LPE_VIS_XY` = 0.1 m, `LPE_VIS_Z` = 0.1 m.
|
||||
* `LPE_VIS_DELAY` = 0 sec.
|
||||
|
||||
<!-- * Compass should not be fused: `ATT_W_MAG` = 0 -->
|
||||
|
||||
> **Hint** We recommend using **LPE** for marker-based navigation.
|
||||
|
||||
You may use [the `selfcheck.py` utility](selfcheck.md) to check your settings.
|
||||
|
||||
> **Hint** In order to use LPE with the Pixhawk v1 hardware you should download the [`px4fmu-v2_lpe.px4` firmware](firmware.md)
|
||||
|
||||
## Flight
|
||||
@@ -112,18 +120,21 @@ You will also be able to use `navigate`, `set_position` and `set_velocity` ROS s
|
||||
|
||||
```python
|
||||
# Takeoff should be performed in the "body" frame; "aruco_map" frame will appear as soon as the drone detects the marker field
|
||||
navigate(0, 0, 2, frame_id='body', speed=0.5, auto_arm=True) # Takeoff and hover 2 metres above the ground
|
||||
navigate(x=0, y=0, z=2, frame_id='body', speed=0.5, auto_arm=True) # Takeoff and hover 2 metres above the ground
|
||||
|
||||
time.sleep(5)
|
||||
|
||||
# Fly to the (2, 2) point on the marker field while being 2 metres above it
|
||||
navigate(2, 2, 2, speed=1, frame_id='aruco_map')
|
||||
navigate(x=2, y=2, z=2, speed=1, frame_id='aruco_map')
|
||||
```
|
||||
|
||||
Starting from the [image](image.md) version 0.18, the drone also can fly relative to a marker in the map, even if it doesn't see it:
|
||||
### Using a specific marker frame
|
||||
|
||||
Starting with the [image](image.md) version 0.18, the drone also can fly relative to a marker in the map, even if it is not currently visible. Like with [single-marker navigation](aruco_marker.md#working-with-detected-markers), this works by setting the frame_id parameter to aruco_ID, where ID is the desired marker number.
|
||||
|
||||
The folloding code will move the drone to the point 1 meter above the center of marker 5:
|
||||
|
||||
```python
|
||||
# Fly to 1 meter above the marker 5
|
||||
navigate(frame_id='aruco_5', x=0, y=0, z=1)
|
||||
```
|
||||
|
||||
|
||||
@@ -97,6 +97,8 @@ Perform these actions for each motor.
|
||||
|
||||
Motors with **<font color=red>red</font>** nuts should rotate **counterclockwise**, the ones with **black** nuts should rotate **clockwise**. Correct rotation direction should also be printed on the motors. You can use a servo tester or your RC transmitter and receiver to check rotation direction.
|
||||
|
||||
<img src="../assets/4/props/props_rotation.png" width=300 class="zoom center">
|
||||
|
||||
The following describes how to use your RC gear to check the motor direction.
|
||||
|
||||
### Setting up PWM mode on RC
|
||||
@@ -181,31 +183,35 @@ The flight controller expects PPM signal from your RC gear. Switch your transmit
|
||||
|
||||
## Mounting the flight controller
|
||||
|
||||
1. Align the flight controller so that the arrows on the controller and on the top carbon deck point in the same direction.
|
||||
2. Attach the flight controller to the flight controller plate using 3M double-sided adhesive pads.
|
||||
3. Connect the power cable to the **"POWER"** input of the flight controller.
|
||||
1. Insert the microSD card into your flight controller.
|
||||
|
||||
<img src="../assets/4/pix/pixracer_sdcard.png" width=300 class="zoom center border">
|
||||
|
||||
2. Align the flight controller so that the arrows on the controller and on the top carbon deck point in the same direction.
|
||||
3. Attach the flight controller to the flight controller plate using 3M double-sided adhesive pads.
|
||||
4. Connect the power cable to the **"POWER"** input of the flight controller.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/18.png" width=300 class="zoom border">
|
||||
<img src="../assets/4/18_1.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
4. Attach four 40 mm aluminum spacers to the top carbon deck using M3x10 screws.
|
||||
5. Attach four 40 mm aluminum spacers to the top carbon deck using M3x10 screws.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/19.png" width=300 class="zoom border">
|
||||
<img src="../assets/4/19_1.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
5. Connect signal wires to the flight controller as shown in these pictures:
|
||||
6. Connect signal wires to the flight controller as shown in these pictures:
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/20.png" width=300 class="zoom border">
|
||||
<img src="../assets/4/20_1.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
6. Attach two 15 mm spacers to the top carbon deck using M3x8 screws.
|
||||
7. Attach two 15 mm spacers to the top carbon deck and the front arms using M3x10 screws (this was already described in the "Frame Assembly" section, p. 2).
|
||||
7. Attach two 15 mm spacers to the top carbon deck using M3x8 screws.
|
||||
8. Attach two 15 mm spacers to the top carbon deck and the front arms using M3x10 screws (this was already described in the "Frame Assembly" section, p. 2).
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/21.png" width=300 class="zoom border">
|
||||
@@ -224,15 +230,19 @@ The flight controller expects PPM signal from your RC gear. Switch your transmit
|
||||
|
||||
## Installing the Raspberry Pi
|
||||
|
||||
1. Attach the Raspberry Pi using four standoffs.
|
||||
2. Route the BEC wires through the channel in the top carbon deck.
|
||||
1. Insert your microSD card [with our image](image.md) into the Raspberry Pi
|
||||
|
||||
<img src="../assets/4/rpi/rpi_sdcard.png" width=300 class="zoom center border">
|
||||
|
||||
2. Attach the Raspberry Pi using four standoffs.
|
||||
3. Route the BEC wires through the channel in the top carbon deck.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/24.png" width=300 class="zoom border">
|
||||
<img src="../assets/4/26.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
3. Connect the BEC outputs according to the following image:
|
||||
4. Connect the BEC outputs according to the following image:
|
||||
|
||||
<img src="../assets/4/26_1.png" width=300 class="zoom center border">
|
||||
|
||||
@@ -252,7 +262,10 @@ The flight controller expects PPM signal from your RC gear. Switch your transmit
|
||||
1. Power the LED strip from a separate BEC. Connect the **«+»** and **«-»** leads to **5v** and **Ground** respectively.
|
||||
2. Connect the **D** lead to GPIO21 (consult the [relevant article](leds.md) for more information).
|
||||
|
||||
<img src="../assets/4/31_1.png" width=300 class="zoom center border">
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/31_1.png" width=300 class="zoom border">
|
||||
<img src="../assets/4/31_2.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
## Installing the camera cable
|
||||
|
||||
@@ -339,6 +352,9 @@ The flight controller expects PPM signal from your RC gear. Switch your transmit
|
||||
</div>
|
||||
|
||||
4. Connect the flight controller to the Raspberry Pi using retractable USB cable.
|
||||
|
||||
<img src="../assets/4/43_1.png" width=300 class="zoom center border">
|
||||
|
||||
5. Attach the USB cable reel where convenient using 3M double-sided adhesive pads while making sure the cable does not interfere with the propellers.
|
||||
|
||||
<div class="image-group">
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -43,12 +43,12 @@ Additionally you can specify an arbitrary capture parameter using its [OpenCV co
|
||||
```xml
|
||||
<param name="property_0_code" value="21"/> <!-- property code 21 is CAP_PROP_AUTO_EXPOSURE -->
|
||||
<param name="property_0_value" value="0.25"/> <!-- property values are normalized as per OpenCV specs, even for "menu" controls; 0.25 means "use manual exposure" -->
|
||||
<param name="cv_cap_prop_exposure" value="0.3"> <!-- set exposure to 30% of maximum value -->
|
||||
<param name="cv_cap_prop_exposure" value="0.3"/> <!-- set exposure to 30% of maximum value -->
|
||||
```
|
||||
|
||||
## Computer vision
|
||||
|
||||
The [SD card image](image.md) comes with a preinstalled [OpenCV](https://opencv.org) library, which is commonly used for various comupter vision-related tasks. Additional libraries for converting from ROS messages to OpenCV images and back are preinstalled as well.
|
||||
The [SD card image](image.md) comes with a preinstalled [OpenCV](https://opencv.org) library, which is commonly used for various computer vision-related tasks. Additional libraries for converting from ROS messages to OpenCV images and back are preinstalled as well.
|
||||
|
||||
### Python
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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.
|
||||
@@ -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
@@ -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.
|
||||
@@ -1,5 +0,0 @@
|
||||
# Editing files
|
||||
|
||||
Use **nano** text editor to edit files on a Raspberry Pi.
|
||||
|
||||
<!-- TODO -->
|
||||
@@ -1,16 +1,33 @@
|
||||
Coordinate systems (frames)
|
||||
===
|
||||
|
||||
> **Note** Documentation for the [image](image.md), versions, starting with **0.15**. For older versions refer to [documentation for version **0.14**](https://github.com/CopterExpress/clever/blob/v0.14/docs/ru/frames.md).
|
||||
> **Note** The following applies to [image](image.md) version 0.15 and up. See [previous version of the article](https://github.com/CopterExpress/clever/blob/v0.14/docs/ru/frames.md) (Russian only) for older images.
|
||||
|
||||

|
||||

|
||||
|
||||
Main frames in package `clever`:
|
||||
Main frames in the `clever` package:
|
||||
|
||||
* `map` coordinates relative to the point of flight controller initialization: the white grid in the illustration;
|
||||
* `base_link` — coordinates relative to the quadcopter: schematic image of the quadcopter in the illustration;
|
||||
* `body` — coordinates relative to the quadcopter regardless of pitch and roll: red, blue and green lines in the illustration.
|
||||
* `map` has its origin at the flight controller initialization point and may be considered stationary. It is shown as a white grid on the image above;
|
||||
* `base_link` is rigidly bound to the drone. It is shown by the simplified drone model on the image above;
|
||||
* `body` is bound to the drone, but its Z axis points up regardless of the drone's pitch and roll. It is shown by the red, blue and green lines in the illustration;
|
||||
* `navigate_target` is bound to the current navigation target (as set by the [navigate](simple_offboard.md#navigate) service).
|
||||
|
||||
> **Hint** In accordance with [the agreement](http://www.ros.org/reps/rep-0103.html), for frames associated with the copter, the X-axis directed forward, Y – to the left, and Z – up.
|
||||
Additional frames become available when [ArUco positioning system](aruco.md) is active:
|
||||
|
||||
More clearly, 3D visualization of the coordinate systems can be viewed using [rviz](rviz.md).
|
||||
* `aruco_map` is bound to the currently active [ArUco map](aruco_map.md);
|
||||
* `aruco_N` is bound to the [marker](aruco_marker.md) with ID=N.
|
||||
|
||||
> **Hint** Frames that are bound to the drone are oriented according to [the ROS convention](http://www.ros.org/reps/rep-0103.html): the X axis points forward, Y to the left, and Z up.
|
||||
|
||||
3D visualization of the coordinate systems can be viewed using [rviz](rviz.md).
|
||||
|
||||
tf2
|
||||
--
|
||||
|
||||
Read more at http://wiki.ros.org/tf2
|
||||
|
||||
tf2 ROS package is used extensively in the Clever platform. tf2 is a set of libraries for C++, Python and other programming languages that are used to work with the frames. Internally, ROS nodes publish `TransformStamped` messages to `/tf` topic with transforms between frames at certain points in time.
|
||||
|
||||
The [`simple_offboard`](simple_offboard.md) node can be used to request the drone position in an arbitrary frame by setting the `frame_id` argument appropriately in a call to `get_telemetry` service.
|
||||
|
||||
tf2 can be used from Python to transform coordinates (for objects like PoseStamped and PointStamped) from one frame to another
|
||||
|
||||
@@ -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
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@ Optical Flow publishes data in `mavros/px4flow/raw/send` topic. In the topic `op
|
||||
|
||||
## Setup of the flight controler
|
||||
|
||||
> **Hint** Suggested parameters are applied automatically in [our custom PX4 firmware](firmware.md#modified-firmware-for-clever).
|
||||
|
||||
When using **EKF2** (parameter `SYS_MC_EST_GROUP` = `ekf2`):
|
||||
|
||||
* `EKF2_AID_MASK` – flag 'use optical flow' is on.
|
||||
|
||||
96
docs/en/programming.md
Normal file
@@ -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).
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
---
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
Simple OFFBOARD
|
||||
===
|
||||
|
||||
> **Note** Documentation for the [image](image.md), versions, starting with **0.15**. For older versions refer to [documentation for version **0.14**](https://github.com/CopterExpress/clever/blob/v0.14/docs/ru/simple_offboard.md).
|
||||
> **Note** The following applies to [image](image.md) versions **0.15** and up. Older documentation is still avaliable [for version **0.14**](https://github.com/CopterExpress/clever/blob/v0.14/docs/ru/simple_offboard.md) (Russian only).
|
||||
|
||||
<!-- -->
|
||||
|
||||
> **Hint** For autonomous flights it is recommanded to use [special PX4 firmware for Clever](firmware.md#modified-firmware-for-clever).
|
||||
> **Hint** We recommend using our [special PX4 firmware for Clever](firmware.md#modified-firmware-for-clever) for autonomous flights.
|
||||
|
||||
The `simple_offboard` module of the `clever` package is intended for simplified programming of the autonomous drone flight (`OFFBOARD` [flight mode](modes.md)). It allows setting the desired flight tasks, and automatically transforms [coordinates between frames](frames.md).
|
||||
|
||||
@@ -140,6 +140,12 @@ Flying 3 m to the right from the drone:
|
||||
navigate(x=0, y=-3, z=0, speed=1, frame_id='body')
|
||||
```
|
||||
|
||||
Flying 2 m to the left from the last navigation target:
|
||||
|
||||
```python
|
||||
navigate(x=0, y=2, z=0, speed=1, frame_id='navigate_target')
|
||||
```
|
||||
|
||||
Turn 90 degrees counterclockwise:
|
||||
|
||||
```python
|
||||
@@ -170,6 +176,8 @@ Ascending to the altitude of 2 m (command line):
|
||||
rosservice call /navigate "{x: 0.0, y: 0.0, z: 2, yaw: 0.0, yaw_rate: 0.0, speed: 0.5, frame_id: 'body', auto_arm: true}"
|
||||
```
|
||||
|
||||
> **Note** Consider using the `navigate_target` frame instead of `body` for missions that primarily use relative movements forward/back/left/right. This negates inaccuracies in relative point calculations.
|
||||
|
||||
### navigate_global
|
||||
|
||||
Flying in a straight line to a point in the global coordinate system (latitude/longitude).
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -20,21 +20,20 @@
|
||||
* [Подключение к Pixracer](connection.md)
|
||||
* [QGroundControl по Wi-Fi](gcs_bridge.md)
|
||||
* [SSH-доступ](ssh.md)
|
||||
* [Редактирование файлов](editing.md)
|
||||
* [Командная строка](cli.md)
|
||||
* [Автоматическая проверка](selfcheck.md)
|
||||
* [Просмотр видеострима с камер](web_video_server.md)
|
||||
* Программирование
|
||||
* [ROS](ros.md)
|
||||
* [MAVROS](mavros.md)
|
||||
* [Общая информация](programming.md)
|
||||
* [Ориентация камеры](camera_frame.md)
|
||||
* [Системы координат](frames.md)
|
||||
* [Автономный полет в OFFBOARD](simple_offboard.md)
|
||||
* [Примеры кода](snippets.md)
|
||||
* Визуальные маркеры (ArUco)
|
||||
* [Общая информация](aruco.md)
|
||||
* [Распознавание маркеров](aruco_marker.md)
|
||||
* [Навигация по карте маркеров](aruco_map.md)
|
||||
* [Навигация по Optical Flow](optical_flow.md)
|
||||
* [Автономный полет в OFFBOARD](simple_offboard.md)
|
||||
* [Системы координат](frames.md)
|
||||
* [Примеры кода](snippets.md)
|
||||
* [Лазерный дальномер](laser.md)
|
||||
* [Светодиодная лента](leds.md)
|
||||
* [Работа с GPIO](gpio.md)
|
||||
@@ -42,13 +41,17 @@
|
||||
* [Компьютерное зрение](camera.md)
|
||||
* [Визуализация с помощью rviz](rviz.md)
|
||||
* [Автозапуск ПО](autolaunch.md)
|
||||
* [ROS](ros.md)
|
||||
* [MAVROS](mavros.md)
|
||||
* Дополнительные материалы
|
||||
* [COEX Pix](coex_pix.md)
|
||||
* [Гид по автономному полету](auto_setup.md)
|
||||
* [Имя хоста](hostname.md)
|
||||
* [Симулятор](sitl.md)
|
||||
* [Настройка PID](pid_tuning.md)
|
||||
* [CAD-модели Клевера](models.md)
|
||||
* [Docker-контейнер с симулятором](sitl_docker.md)
|
||||
* [Установка ROS Kinetic](ros-install.md)
|
||||
* [Установка ROS Melodic](ros-install.md)
|
||||
* [Пилотирование со смартфона](rc.md)
|
||||
* [Настройка сети RPi](network.md)
|
||||
* [Интерфейс UART](uart.md)
|
||||
@@ -82,6 +85,7 @@
|
||||
* [Генератор ArUco карт](arucogenmap.md)
|
||||
* [Модель аэротакси в городе](bigchallenges.md)
|
||||
* [Шаровая защита коптера](shield.md)
|
||||
* [Дрон для 3D-сканирования человека](3dscan.md)
|
||||
* [Распознавание лиц](face_recognition.md)
|
||||
* [Управление дроном силой мысли](control_emotions.md)
|
||||
* [Подсчет количества объектов c камеры](object_counting.md)
|
||||
|
||||
@@ -120,18 +120,21 @@ rosrun aruco_pose genmap.py 0.33 2 4 1 1 0 > ~/catkin_ws/src/clever/aruco_pose/m
|
||||
|
||||
```python
|
||||
# Вначале необходимо взлететь, чтобы коптер увидел карту меток и появился фрейм aruco_map:
|
||||
navigate(0, 0, 2, frame_id='body', speed=0.5, auto_arm=True) # взлет на 2 метра
|
||||
navigate(x=0, y=0, z=2, frame_id='body', speed=0.5, auto_arm=True) # взлет на 2 метра
|
||||
|
||||
time.sleep(5)
|
||||
|
||||
# Полет в координату 2:2 маркерного поля, высота 2 метра
|
||||
navigate(2, 2, 2, speed=1, frame_id='aruco_map') # полет в координату 2:2, высота 3 метра
|
||||
navigate(x=2, y=2, z=2, speed=1, frame_id='aruco_map') # полет в координату 2:2, высота 3 метра
|
||||
```
|
||||
|
||||
Начиная с версии [образа](image.md) 0.18, доступны также полеты относительно отдельного маркера в карте, даже если дрон его не видит:
|
||||
### Полет в координаты по ID маркера
|
||||
|
||||
Начиная с версии [образа](image.md) 0.18, доступны также полёты относительно отдельного маркера в карте, даже если дрон его не видит. По аналогии с [навигацией по отдельным маркерам](aruco_marker.md#навигация-по-маркерам) при настройке карты маркеров дрон сможет лететь в координаты относительно отдельного маркера, используя фрейм aruco_ID с соответствующим ID маркера.
|
||||
|
||||
Полет в точку над маркером 5 на высоту 1 метр:
|
||||
|
||||
```python
|
||||
# Полет на высоту 1 м над маркером 5
|
||||
navigate(frame_id='aruco_5', x=0, y=0, z=1)
|
||||
```
|
||||
|
||||
|
||||
@@ -97,6 +97,8 @@
|
||||
|
||||
Моторы с **<font color=red>красными</font>** гайками должны вращаться **против** часовой стрелки, с **чёрными** - **по** часовой стрелке. Правильные направления вращения также указаны на самих моторах. Для проверки направления вращения можно использовать серво-тестер или радиоприёмник с пультом.
|
||||
|
||||
<img src="../assets/4/props/props_rotation.png" width=300 class="zoom center">
|
||||
|
||||
Использование радиоприёмника и пульта описано ниже.
|
||||
|
||||
### Перевод пульта в режим PWM
|
||||
@@ -181,31 +183,35 @@
|
||||
|
||||
## Установка полётного контроллера
|
||||
|
||||
1. Установите полетный контроллер на пластину с помощью двухстороннего скотча.
|
||||
2. Стрелки на полетном контроллере и центральной деке должны быть направлены в одну сторону.
|
||||
3. Подключите шлейф питания PDB к разъему *"POWER"* полетного контроллера, закрутив его в "косичку" для взаимной фиксации проводов.
|
||||
1. Вставьте карту microSD в полётный контроллер
|
||||
|
||||
<img src="../assets/4/pix/pixracer_sdcard.png" width=300 class="zoom center border">
|
||||
|
||||
2. Установите полетный контроллер на пластину с помощью двухстороннего скотча.
|
||||
3. Стрелки на полетном контроллере и центральной деке должны быть направлены в одну сторону.
|
||||
4. Подключите шлейф питания PDB к разъему *"POWER"* полетного контроллера, закрутив его в "косичку" для взаимной фиксации проводов.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/18.png" width=300 class="zoom border">
|
||||
<img src="../assets/4/18_1.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
4. Установите 4 алюминиевые стойки 40 мм с помощью винтов М3х10.
|
||||
5. Установите 4 алюминиевые стойки 40 мм с помощью винтов М3х10.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/19.png" width=300 class="zoom border">
|
||||
<img src="../assets/4/19_1.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
5. Подключите сигнальные провода регуляторов к полетному контроллеру следующим образом:
|
||||
6. Подключите сигнальные провода регуляторов к полетному контроллеру следующим образом:
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/20.png" width=300 class="zoom border">
|
||||
<img src="../assets/4/20_1.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
6. Установите 2 стойки "мама-мама" 15 мм на центральную деку с помощью винтов М3х8.
|
||||
7. Другие 2 стойки были установлены ранее в разделе "Сборка рамы", п. 2.
|
||||
7. Установите 2 стойки "мама-мама" 15 мм на центральную деку с помощью винтов М3х8.
|
||||
8. Другие 2 стойки были установлены ранее в разделе "Сборка рамы", п. 2.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/21.png" width=300 class="zoom border">
|
||||
@@ -224,15 +230,19 @@
|
||||
|
||||
## Установка Raspberry Pi
|
||||
|
||||
1. Установите плату Raspberry Pi на стойки, используя 4 стойки "папа-мама".
|
||||
2. Протяните провода от BEC через паз в центральной раме.
|
||||
1. Вставьте карту microSD с [записанным образом](image.md) в Raspberry Pi
|
||||
|
||||
<img src="../assets/4/rpi/rpi_sdcard.png" width=300 class="zoom center border">
|
||||
|
||||
2. Установите плату Raspberry Pi на стойки, используя 4 стойки "папа-мама".
|
||||
3. Протяните провода от BEC через паз в центральной раме.
|
||||
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/24.png" width=300 class="zoom border">
|
||||
<img src="../assets/4/26.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
3. Подключите провод питания от BEC к Raspberry, согласно схеме:
|
||||
4. Подключите провод питания от BEC к Raspberry, согласно схеме:
|
||||
|
||||
<img src="../assets/4/26_1.png" width=300 class="zoom center border">
|
||||
|
||||
@@ -252,7 +262,10 @@
|
||||
1. Питание для ленты берется от второго BEC. Подключите контакты *«-»* и *«+»* к *Ground* и *5v* на ленте соответственно.
|
||||
2. Подключите контакт *D* к GPIO-пину на Raspberry. Рекомендуется использовать пин GPIO21.
|
||||
|
||||
<img src="../assets/4/31_1.png" width=300 class="zoom center border">
|
||||
<div class="image-group">
|
||||
<img src="../assets/4/31_1.png" width=300 class="zoom border">
|
||||
<img src="../assets/4/31_2.png" width=300 class="zoom border">
|
||||
</div>
|
||||
|
||||
## Установка шлейфа для камеры
|
||||
|
||||
@@ -339,6 +352,9 @@
|
||||
</div>
|
||||
|
||||
4. Подключите USB кабель к разъему на полетном контроллере и USB разъему Raspberry Pi.
|
||||
|
||||
<img src="../assets/4/43_1.png" width=300 class="zoom center border">
|
||||
|
||||
5. Зафиксируйте "улитку" кабеля в удобном месте с помощью двухстороннего скотча так, чтобы провод не мешал вращению винтов.
|
||||
|
||||
<div class="image-group">
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
- Если необходимо, можно поменять название и пароль сети. См. статью "[Настройка сети](network.md#изменение-пароля-или-ssid-имени-сети)". Остальные операции с сетью производить не нужно.
|
||||
|
||||
- Для редактирования файлов пользуйтесь редактором nano. [Инструкция по работе с редактором](editing.md).
|
||||
- Для редактирования файлов пользуйтесь редактором nano. [Инструкция по работе с редактором](cli.md#editing).
|
||||
|
||||
> **Hint** В редакторе перемещать курсор можно только стрелками на клавиатуре.
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ raspistill -o test-image.jpg
|
||||
```xml
|
||||
<param name="property_0_code" value="21"/> <!-- property code 21 is CAP_PROP_AUTO_EXPOSURE -->
|
||||
<param name="property_0_value" value="0.25"/> <!-- property values are normalized as per OpenCV specs, even for "menu" controls; 0.25 means "use manual exposure" -->
|
||||
<param name="cv_cap_prop_exposure" value="0.3"> <!-- set exposure to 30% of maximum value -->
|
||||
<param name="cv_cap_prop_exposure" value="0.3"/> <!-- set exposure to 30% of maximum value -->
|
||||
```
|
||||
|
||||
## Компьютерное зрение
|
||||
|
||||
@@ -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
@@ -0,0 +1,80 @@
|
||||
# Командная строка
|
||||
|
||||
В Linux-системах, к семейству которых принадлежит используемая на Raspberry Pi ОС Raspbian, основным способом взаимодействия пользователя с системой является командная строка. Для работы с командной строкой [откройте SSH-соединение](ssh.md) с Raspberry Pi.
|
||||
|
||||
## Базовые команды
|
||||
|
||||
> **Hint** Двойное нажатие клавиши `Tab ↹` позволяет автоматически дополнить вводимую команду или аргумент.
|
||||
|
||||
Показать содержимое текущей директории:
|
||||
|
||||
```bash
|
||||
ls
|
||||
```
|
||||
|
||||
Перейти в директорию:
|
||||
|
||||
```bash
|
||||
cd catkin_ws/src/clever/clever/launch/
|
||||
```
|
||||
|
||||
Перейти на директорию выше:
|
||||
|
||||
```bash
|
||||
cd ..
|
||||
```
|
||||
|
||||
Вывести путь к текущей директории:
|
||||
|
||||
```bash
|
||||
pwd
|
||||
```
|
||||
|
||||
Вывести содержимое файла `file.py`:
|
||||
|
||||
```bash
|
||||
cat file.py
|
||||
```
|
||||
|
||||
Запустить Python-скрипт `file.py`:
|
||||
|
||||
```bash
|
||||
python file.py
|
||||
```
|
||||
|
||||
Перезагрузить Raspberry Pi:
|
||||
|
||||
```bash
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
Для завершения работающей программы нажмите комбинацию клавиш `Ctrl`+`C`.
|
||||
|
||||
Читайте больше о командах Linux в документации Raspberry Pi: https://www.raspberrypi.org/documentation/linux/usage/commands.md.
|
||||
|
||||
## Редактирование файлов {#editing}
|
||||
|
||||
Используйте редактор **nano** для того, чтобы создавать или редактировать файлы на Raspberry Pi. Среди текстовых редакторов, доступных в терминале, он является наиболее простым и интуитивным.
|
||||
|
||||
1. Для редактирования файла введите команду:
|
||||
|
||||
```bash
|
||||
nano путь/к/файлу
|
||||
```
|
||||
|
||||
Например:
|
||||
|
||||
```bash
|
||||
nano ~/catkin_ws/src/clever/clever/launch/clever.launch
|
||||
```
|
||||
|
||||
<img src="../assets/nano.png" alt="Редактирование файла в nano" data-action="zoom">
|
||||
2. Отредактируйте файл.
|
||||
3. Для выхода с сохранением нажмите `Ctrl`+`X`, `Y`, `Enter`.
|
||||
4. При изменении .launch-файлов необходимо перезапустить пакет `clever`:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart clever
|
||||
```
|
||||
|
||||
Для редактирования файлов также можно использовать и другие редакторы, например, **vim**.
|
||||
60
docs/ru/coex_pix.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# COEX Pix
|
||||
|
||||
Полетный контроллер **COEX Pix** является модифицированным аналогом полетного контроллера [Pixracer](https://docs.px4.io/v1.9.0/en/flight_controller/pixracer.html). Этот полетный контроллер поставляется с наборами **Клевер 4** и далее.
|
||||
|
||||
## Ревизия 1.1
|
||||
|
||||
### Характеристики
|
||||
|
||||
* Размеры платы – 35x35 мм.
|
||||
* Диаметр монтажных отверстий – 3.2 мм.
|
||||
* Расстояние между центрами монтажных отверстий – 30.5 мм.
|
||||
* Масса платы (без проводов) – 9 г.
|
||||
* Диапазон рабочих температур – -5...+65 ºC.
|
||||
* Диапазон входного напряжения – 4.8...5.5 В.
|
||||
|
||||
### Основные элементы
|
||||
|
||||
* Основной SOC – *STM32F427VIT6*.
|
||||
* Память FRAM – *FM25V02A*.
|
||||
* Датчики:
|
||||
* *MPU9250* (9 DOF) – 3-х осевой магнитометр, 3-х осевой гироскоп, 3-х осевой акселерометр.
|
||||
* *MS5607* – датчик атмосферного давления.
|
||||
|
||||
### Разъемы
|
||||
|
||||
* *TELEM 1* (JST-GH 4 pin) – разъем для подключения телеметрии, порт 1, протокол UART.
|
||||
* *TELEM 2* (JST-GH 4 pin) – разъем для подключения телеметрии, порт 2, протокол UART.
|
||||
* *GPS* (JST-GH 6 pin) – разъем для подключения ГПС модуля (UART) с компасом (I2C).
|
||||
* *I2C* (JST-GH 4 pin) – разъем для подключения поддерживаемых I2C устройств.
|
||||
* *PWR* (JST-GH 6 pin) – разъем для подключения питания с платы COEX PDB или аналогичной, датчиков напряжения и тока.
|
||||
* *RC IN* (JST-GH 4 pin) – разъем для подключения радиоприемника аппаратуры радиоуправления, канала для * снятия показаний RSSI. Поддерживаемые RC протоколы – PPM и SBUS.
|
||||
* Разьем Micro USB – для подключения к ПК для настройки и коммуникации по протоколу USB 2.0/1.1
|
||||
* Слот для карты памяти MicroSD, до 32 ГБ.
|
||||
* Серворазъемы – для подключения контроллеров моторов и других устройств.
|
||||
|
||||
### Схемы расположения контактов
|
||||
|
||||
<img src="../assets/coexpix-top.jpg" width=400 class=zoom>
|
||||
|
||||
<img src="../assets/coexpix-bottom.jpg" width=400 class=zoom>
|
||||
|
||||
> **Note** На плате ревизии 1.0 RC IN разъем располагался на месте разъема Micro SD. Распиновка самого разъема осталась такой же.
|
||||
|
||||
### Установка на Клевере
|
||||
|
||||
**Важно**: плата спроектирована для удобной установки на Клевере с поворотом на 180º по крену и 90º по рысканью (стрелка на плате находится снизу и указывает направо). Таким образом, параметр ориентации автопилота PX4 устанавливается в значение `SENS_BOARD_ROT` = `ROLL 180, YAW 90`.
|
||||
|
||||
### Рекомендации
|
||||
|
||||
Во время установки полетного контроллера, учитывайте возможные влияния магнитных полей от силовых проводов и платы распределения питания на магнитометр. В случае установки данной платы над платой распределения питания, рекомендуется (в случае использования внутреннего магнитометра) поднять плату на высоту не менее 15 мм от платы распределения питания и силовых проводов. Силовой провод от аккумуляторной батареи старайтесь зафиксировать соответственно.
|
||||
|
||||
В случае использования внешнего GPS модуля со встроенным магнитометром, внутренний магнитометр рекомендуется отключать.
|
||||
|
||||
В случае, если на дроне не предусмотрен защитный кожух, рекомендуется изолировать барометр поролоновой губкой (достаточно подложить губку между полетным контроллером и нижней частью корпуса (платой распределения питания), либо зафиксировать иным способом.
|
||||
|
||||
При подключении питания в разъем PWR, на разъеме **+** будет напряжение 5 вольт, его можно использовать для питания сервомашинок. Не рекомендуется подключать дополнительные источники питания в разъем **+**, если питание подается в разъем PWR. Питать полетный контроллер одновременно от USB и PWR\AUX разъемов допускается.
|
||||
|
||||
### Особенности платы
|
||||
|
||||
Для повышения надежности и стабильности, плата оснащена низкошумящими понижающими преобразователями. Установлен входной LC фильтр, а также ферритовые фильтры в цепях питания.
|
||||
@@ -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).
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Copter Hack 2019
|
||||
|
||||
Хакатон [Copter Hack 2019](https://copterexpress.timepad.ru/event/768108/) проходит 11–13 октября в Технополисе "Москва".
|
||||
Хакатон [Copter Hack 2019](https://copterexpress.timepad.ru/event/1017592/) проходит 11–13 октября в Технополисе "Москва".
|
||||
|
||||
Официальный сайт: https://ru.coex.tech/copterhack.
|
||||
|
||||
@@ -18,11 +18,11 @@ Timepad: https://copterexpress.timepad.ru/event/1017592/.
|
||||
|
||||
Этот параметр устанавливается для того, чтобы на программном уровне настроить ориентацию вашего *IMU* датчика находящегося на полетном контроллере.
|
||||
|
||||
### Полет с использованием Optical Flow
|
||||
### Рекомендуемая версия образа
|
||||
|
||||
При полете только с использованием Optical Flow необходимо в QGroundControl в параметре `LPE_FUSION` включить галочку `pub agl as lpos down`.
|
||||
Для Raspberry Pi версий до 3B+: [v0.18](https://github.com/CopterExpress/clever/releases/tag/v0.18)
|
||||
|
||||
Необходимо также убедиться, что лазерный дальномер корректно установлен и работает (см. [конфигурирование дальномера](laser.md)).
|
||||
Для Raspberry Pi версии 4: [v0.19-alpha.1](https://github.com/CopterExpress/clever/releases/tag/v0.19-alpha.1)
|
||||
|
||||
### Ориентация камеры
|
||||
|
||||
@@ -30,6 +30,47 @@ Timepad: https://copterexpress.timepad.ru/event/1017592/.
|
||||
|
||||
Подробнее см. статью [Ориентация камеры](camera_frame.md).
|
||||
|
||||
### Полет с использованием Optical Flow
|
||||
|
||||
Для включения optical flow установите параметры `optical_flow` и `rangefinder_vl53l1x` в файле `clever.launch` в `true`.
|
||||
|
||||
Также необходимо в QGroundControl в параметре `LPE_FUSION` включить галочку `pub agl as lpos down`.
|
||||
|
||||
Необходимо также убедиться, что лазерный дальномер корректно установлен и работает (см. [конфигурирование дальномера](laser.md)).
|
||||
|
||||
Подробнее: [Использование Optical Flow](optical_flow.md).
|
||||
|
||||
### Использование карты маркеров
|
||||
|
||||
Для настройки большой карты маркеров используйте карту с названием `cmit.txt`. Далее используйте [инструкцию](aruco_map.md).
|
||||
|
||||
### Аккумуляторы
|
||||
|
||||
**При полетах обязательно использование датчика напряжения ("пищалки"). В случае выхода из строя аккумулятора новый не предоставляется!**
|
||||
|
||||
### Съемка видео
|
||||
|
||||
Снимайте **ВСЕ** ваши полеты на видео! В случае поломки дрона на защите сможете показать видео, что будет учтено при оценке.
|
||||
|
||||
### Проблема с yaw
|
||||
|
||||
При полете по маркерам (VPE) в прошивке v1.8.2-clever.7 возможно есть ошибка, которая проявляется в том, что дрон не держит yaw по маркерам. Если у вас есть такая проблема, попробуйте залить более старую прошивку v1.8.2-clever.6, доступную по ссылке https://github.com/CopterExpress/Firmware/releases/tag/v1.8.2-clever.6. Для COEX Pix необходимо скачивать файл `px4fmu-v4_default.px4`.
|
||||
|
||||
### Проблема с navigate
|
||||
|
||||
В образе 0.18 обнаружился баг из-за которого дрон может летать по точкам слишком быстро. Если у вас это происходит, поставьте в файле `~/catkin_ws/src/clever/clever/launch/clever.launch` параметр `nav_from_sp` в значение `false` таким образом:
|
||||
|
||||
```xml
|
||||
<!-- simplified offboard control -->
|
||||
<node name="simple_offboard" pkg="clever" type="simple_offboard" output="screen" clear_params="true">
|
||||
<param name="reference_frames/body" value="map"/>
|
||||
<param name="reference_frames/base_link" value="map"/>
|
||||
<param name="reference_frames/navigate_target" value="map"/>
|
||||
<param name="reference_frames/navigate_target" value="map"/>
|
||||
<param name="nav_from_sp" value="false"/>
|
||||
</node>
|
||||
```
|
||||
|
||||
## Лекции
|
||||
|
||||
Лекция 1: введение – https://www.youtube.com/watch?v=cjtmZNuq7z0.
|
||||
@@ -41,3 +82,13 @@ Timepad: https://copterexpress.timepad.ru/event/1017592/.
|
||||
Лекция 4: автономные полеты: https://www.youtube.com/watch?v=ThXiNG1IzvI.
|
||||
|
||||
См. также другие видео на канале COEX на YouTube: https://www.youtube.com/channel/UCeCu93sLBkcgbIkIC7Jaauw/featured.
|
||||
|
||||
## Результаты
|
||||
|
||||
Команды-победители:
|
||||
|
||||
1. Бульболет – доставка картошки с помощью умной лебедки.
|
||||
2. Copter don't hurt me – управление дроном с помощью нейроинтерфейса.
|
||||
3. import torch – active track на нейронках.
|
||||
4. Автобот – freeze light через бота ВКонтакте.
|
||||
5. Stardust Crusaders – AR среда симуляции для дронов.
|
||||
|
||||
@@ -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**.
|
||||
@@ -9,7 +9,13 @@
|
||||
|
||||
* `map` — координаты относительно точки инициализации полетного контроллера: белая сетка на иллюстрации;
|
||||
* `base_link` — координаты относительно квадрокоптера: схематичное изображение квадрокоптера на иллюстрации;
|
||||
* `body` — координаты относительно квадрокоптера без учета наклонов по тангажу и крену: красная, синяя и зеленая линии на иллюстрации.
|
||||
* `body` — координаты относительно квадрокоптера без учета наклонов по тангажу и крену: красная, синяя и зеленая линии на иллюстрации;
|
||||
* `navigate_target` – координаты точки, в которую сейчас летит дрон (с использованием [navigate](simple_offboard.md#navigate)).
|
||||
|
||||
При использовании [системы позиционирования по ArUco-маркерам](aruco.md) появляются дополнительные фреймы:
|
||||
|
||||
* `aruco_map` – координаты относительно [карты ArUco-маркеров](aruco_map.md);
|
||||
* `aruco_N` – координаты относительно [маркера](aruco.md) с ID=N.
|
||||
|
||||
> **Hint** В соответствии с [соглашением](http://www.ros.org/reps/rep-0103.html), для фреймов, связанных с коптером, ось X направлена вперед, Y – налево и Z – вверх.
|
||||
|
||||
|
||||
@@ -48,3 +48,5 @@ sudo systemctl restart clever
|
||||
|
||||
1. Измените параметр `gcs_bridge` на `udp-pb`.
|
||||
2. При открытии программы QGroundControl соединение должно установиться автоматически.
|
||||
|
||||
**Далее**: [Доступ по SSH](ssh.md).
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Управление дроном для оценки позы человека
|
||||
# Управление дроном при помощи позы человека
|
||||
|
||||
## Демонстрация
|
||||
|
||||
|
||||
32
docs/ru/models.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# CAD-модели
|
||||
|
||||
На этой странице представлены CAD-модели некоторых деталей квадрокоптеров Клевер.
|
||||
|
||||
## Клевер 4
|
||||
|
||||
### Холдер для АКБ
|
||||
|
||||
Файл: [`battery_holder.stl`](https://github.com/CopterExpress/clever/raw/master/docs/assets/battery_holder.stl).
|
||||
|
||||
Материал печати: PLA/ABS/SBS.
|
||||
|
||||
Заполнение: не менее 50%.
|
||||
|
||||
Функция: устанавливается на деталь "дека монтажная", после чего позволяет надежно фиксировать АКБ с помощью ремешка. Также имеется возможность установки индикатора напряжения (с помощью 3М-скотча).
|
||||
|
||||
## Клевер 3
|
||||
|
||||
### Лазерная резка
|
||||
|
||||
* Ножка (вариант с захватом) – [`big_leg.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/big_leg.dxf).
|
||||
* Дека монтажная – [`deck.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/deck.dxf).
|
||||
* Дуга – [`prop_guard.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/prop_guard.dxf).
|
||||
* Рогатка+ушко – [`prop_guard_mount.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/prop_guard_mount.dxf).
|
||||
* Проставка – [`grab_spacer.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/grab_spacer.dxf).
|
||||
* Ножка – [`leg.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/leg.dxf).
|
||||
* Обруч (LED) – [`led_mount_plate.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/led_mount_plate.dxf).
|
||||
|
||||
### Фрезеровка
|
||||
|
||||
* Дека центральная – [`central_plate.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/central_plate.dxf).
|
||||
* Луч – [`arm.dxf`](https://github.com/CopterExpress/clever/raw/master/docs/assets/dxf/arm.dxf).
|
||||
@@ -35,7 +35,7 @@
|
||||
* **ALTCTL** (*Altitude*) — управление скоростью изменения высоты полета, углами по тангажу и крену и угловой скоростью по рысканью. Используется барометр (или иной датчик высоты).
|
||||
* **POSCTL** (*Position*) — управление скоростями набора высоты, скоростью движения вперед/назад и вправо/влево, угловой скоростью по рысканью. Наиболее простой для полетов режим. Используется барометр, GPS, компьютерное зрение, другие датчики.
|
||||
|
||||
### Автоматический полет
|
||||
### Автоматический полет {#auto}
|
||||
|
||||
В этих режимах квадрокоптер игнорирует сигналы с пульта и летает по какой-либо автоматической программе.
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Использование Optical Flow
|
||||
|
||||
При использовании технологии Optical Flow возможен полет в режиме POSCTL и автономные полеты по камере, направленной вниз, за счет измерения сдвигов текстуры поверхности пола.
|
||||
При использовании технологии Optical Flow возможен полет в режиме POSCTL и автономные полеты ([режим OFFBOARD](simple_offboard.md)) по камере, направленной вниз, за счет измерения сдвигов текстуры поверхности пола.
|
||||
|
||||
## Включение
|
||||
|
||||
> **Hint** Рекомендуется использование [специальной сборки PX4 для Клевера](firmware.md#прошивка-для-клевера).
|
||||
> **Hint** Необходимо использование [специальной сборки PX4 для Клевера](firmware.md#прошивка-для-клевера).
|
||||
|
||||
Необходимо использование дальномера. [Подключите и настройте дальномер VL53L1X](laser.md), используя инструкцию.
|
||||
|
||||
@@ -20,17 +20,7 @@ Optical Flow публикует данные в топик `mavros/px4flow/raw/s
|
||||
|
||||
## Настройка полетного контроллера
|
||||
|
||||
При использовании **EKF2** (параметр `SYS_MC_EST_GROUP` = `ekf2`):
|
||||
|
||||
* `EKF2_AID_MASK` – включен флажок use optical flow.
|
||||
* `EKF2_OF_DELAY` – 0.
|
||||
* `EKF2_OF_QMIN` – 10.
|
||||
* `EKF2_OF_N_MIN` – 0.05.
|
||||
* `EKF2_OF_N_MAX` - 0.2.
|
||||
* `SENS_FLOW_ROT` – No rotation (отсутствие поворота).
|
||||
* `SENS_FLOW_MAXHGT` – 4.0 (для дальномера VL53L1X)
|
||||
* `SENS_FLOW_MINHGT` – 0.01 (для дальномера VL53L1X)
|
||||
* Опционально: `EKF2_HGT_MODE` – range sensor (см. [конфигурирование дальномера](laser.md)).
|
||||
> **Hint** При использовании [сборки PX4 для Клевера](firmware.md#прошивка-для-клевера) необходимые параметры PX4 применятся автоматически.
|
||||
|
||||
При использовании **LPE** (параметр `SYS_MC_EST_GROUP` = `local_position_estimator, attitude_estimator_q`):
|
||||
|
||||
@@ -44,6 +34,18 @@ Optical Flow публикует данные в топик `mavros/px4flow/raw/s
|
||||
* `SENS_FLOW_MINHGT` – 0.01 (для дальномера VL53L1X)
|
||||
* Опционально: `LPE_FUSION` – включен флажок pub agl as lpos down (см. [конфигурирование дальномера](laser.md).
|
||||
|
||||
При использовании **EKF2** (параметр `SYS_MC_EST_GROUP` = `ekf2`):
|
||||
|
||||
* `EKF2_AID_MASK` – включен флажок use optical flow.
|
||||
* `EKF2_OF_DELAY` – 0.
|
||||
* `EKF2_OF_QMIN` – 10.
|
||||
* `EKF2_OF_N_MIN` – 0.05.
|
||||
* `EKF2_OF_N_MAX` - 0.2.
|
||||
* `SENS_FLOW_ROT` – No rotation (отсутствие поворота).
|
||||
* `SENS_FLOW_MAXHGT` – 4.0 (для дальномера VL53L1X)
|
||||
* `SENS_FLOW_MINHGT` – 0.01 (для дальномера VL53L1X)
|
||||
* Опционально: `EKF2_HGT_MODE` – range sensor (см. [конфигурирование дальномера](laser.md)).
|
||||
|
||||
Для проверки правильности всех настроек можно [воспользоваться утилитой `selfcheck.py`](selfcheck.md).
|
||||
|
||||
## Полет в POSCTL
|
||||
@@ -63,7 +65,13 @@ navigate(z=1.5, frame_id='body', auto_arm=True)
|
||||
Полет вперед на 1 м:
|
||||
|
||||
```python
|
||||
navigate(x=1.5, frame_id='body')
|
||||
navigate(x=1, frame_id='body')
|
||||
```
|
||||
|
||||
Полет назад на 1 м (относительно предыдущей целевой точки):
|
||||
|
||||
```python
|
||||
navigate(x=-1, frame_id='navigate_target')
|
||||
```
|
||||
|
||||
При использовании Optical Flow возможна также [навигация по ArUco-маркерам](aruco_marker.md), в том числе [используя VPE](aruco_map.md).
|
||||
|
||||
96
docs/ru/programming.md
Normal file
@@ -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).
|
||||
@@ -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).
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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.
|
||||
|
||||
Концепции
|
||||
---
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -140,6 +140,12 @@ navigate(x=5, y=0, z=3, speed=0.8, yaw=float('nan'))
|
||||
navigate(x=0, y=-3, z=0, speed=1, frame_id='body')
|
||||
```
|
||||
|
||||
Полет влево на 2 м относительно последней целевой точки полета дрона:
|
||||
|
||||
```python
|
||||
navigate(x=0, y=2, z=0, speed=1, frame_id='navigate_target')
|
||||
```
|
||||
|
||||
Повернуться на 90 градусов против часовой:
|
||||
|
||||
```python
|
||||
@@ -170,6 +176,8 @@ navigate(x=3, y=0, z=0, speed=0.5, yaw=float('nan'), yaw_rate=0.2, frame_id='bod
|
||||
rosservice call /navigate "{x: 0.0, y: 0.0, z: 2, yaw: 0.0, yaw_rate: 0.0, speed: 0.5, frame_id: 'body', auto_arm: true}"
|
||||
```
|
||||
|
||||
> **Note** При программировании миссии дрона в терминах "вперед-назад-влево-вправо" рекомендуется использовать систему координат `navigate_target` вместо `body`, чтобы не учитывать неточность прилета дрона в предыдущую целевую точку при вычислении следующей.
|
||||
|
||||
### navigate_global
|
||||
|
||||
Полет по прямой в точку в глобальной системе координат (широта/долгота).
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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-адреса:
|
||||
|
||||
|
||||
@@ -14,4 +14,4 @@
|
||||
|
||||
<img src="../assets/web.png" alt="Веб-интерфейс Клевера" class="zoom">
|
||||
|
||||
**Далее**: [Подключение QGroundControl по Wi-Fi](gcs_bridge.md).
|
||||
**Далее**: [Подключение Raspberry Pi к полетному контроллеру](connection.md).
|
||||
|
||||
@@ -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" }
|
||||
|
||||