Compare commits

..

304 Commits

Author SHA1 Message Date
Oleg Kalachev
07b92fb646 cv_camera 0.5.1 2021-06-07 18:42:01 +03:00
Oleg Kalachev
f68d8dc34e Update Raspberry Pi OS to 2021-05-07 2021-06-04 07:13:21 +03:00
Oleg Kalachev
f8156f5815 Revert cv_camera to 0.5.0 2021-06-04 07:13:11 +03:00
Oleg Kalachev
e0fddc7b05 docs: minor fix 2021-06-03 17:53:35 +03:00
Oleg Kalachev
c7a5ff2a8f Update cv_camera version to 0.5.1 2021-06-03 14:18:32 +03:00
Oleg Kalachev
35e9d5827a Transfer main camera nodelet manager to main_camera.launch 2021-06-03 09:04:29 +03:00
Oleg Kalachev
9221920d5b Use exec in waitfile 2021-06-03 05:37:43 +03:00
Oleg Kalachev
5ca5918561 Wait for v4l2 device before launching the camera driver 2021-06-03 05:37:36 +03:00
Oleg Kalachev
9a9de320df Make v4l2 device file an argument in main_camera.launch 2021-06-03 05:37:27 +03:00
Oleg Kalachev
a2ab6e22e0 docs: remove non-working example 2021-06-02 08:02:57 +03:00
Oleg Kalachev
2b36de5dfe Don’t use ROS for QR recognition test 2021-06-02 07:00:18 +03:00
Oleg Kalachev
e9a9e57bce Fix QR recognition test 2021-06-01 20:45:57 +03:00
Oleg Kalachev
a378506313 Fix standalone-install for Python 2 2021-06-01 11:16:47 +03:00
Oleg Kalachev
71af0c19e0 Fix permissions 2021-06-01 06:44:56 +03:00
Oleg Kalachev
3e44024082 Add more imports to tests
(from documentation)
2021-06-01 05:16:44 +03:00
Oleg Kalachev
e1137b3e80 Import SetLEDs, LEDStateArray, LEDState in tests 2021-06-01 05:10:10 +03:00
Oleg Kalachev
13f0d59853 Fix QR recognition code for Python 3 2021-06-01 05:05:31 +03:00
Oleg Kalachev
5d7c689480 Move QR recognition test to a separate file 2021-06-01 04:44:44 +03:00
Oleg Kalachev
2ce459f960 Fix 2021-06-01 04:42:16 +03:00
Oleg Kalachev
a7941a0785 Add test for QR recognition 2021-06-01 04:36:30 +03:00
Oleg Kalachev
d5f1eb617d Add Noetic building to CI 2021-06-01 04:03:20 +03:00
Oleg Kalachev
20867e2cd3 Merge branch 'master' into 22-armhf 2021-06-01 04:00:06 +03:00
Oleg Kalachev
f51044f44e CI: add new key for apt
Fixing https://github.com/CopterExpress/clover/runs/2700356960#step:3:74
2021-06-01 03:58:57 +03:00
Oleg Kalachev
b64159d5d6 builder: less verbosity 2021-06-01 03:58:39 +03:00
Oleg Kalachev
bf017f4514 CI: push documentation site to the main repo 2021-06-01 03:58:34 +03:00
Oleg Kalachev
02a0df1e1c CI: change apt to apt-get 2021-06-01 03:58:25 +03:00
Oleg Kalachev
5ff9ee165a CI: remove .travis.yml 2021-06-01 03:57:37 +03:00
Oleg Kalachev
f0c43dd4c2 CI: split up to several workflows 2021-06-01 03:57:29 +03:00
Oleg Kalachev
7dc2889903 CI: use gh-pages target branch for docs 2021-06-01 03:57:20 +03:00
Oleg Kalachev
eb5e132b93 CI: change docs target branch to master 2021-06-01 03:57:11 +03:00
Oleg Kalachev
5b6d754d25 CI: change docs target branch to actions 2021-06-01 03:57:05 +03:00
Oleg Kalachev
2d0278b1b3 CI: move documentation building to GitHub Actions (#337) 2021-06-01 03:56:57 +03:00
Oleg Kalachev
c26fcd2e1d readme: add support chat badge 2021-06-01 03:55:40 +03:00
Oleg Kalachev
72e6c2db94 readme: change build badge to GitHub Actions 2021-06-01 03:55:31 +03:00
Oleg Kalachev
1a516d49b4 CI: move image building to GitHub actions (#335)
* Start working on building image in GitHub actions

* Trigger GitHub on push to any branch

* Fix TRAVIS_TAG

* Add compress image step

* Disable image build in Travis

* Add upload image step

* Fix compress image

* Fix

* Fix

* Minor fix

* Trigger build on tag

* Show images sizes not in human format

* Upload only built image

* Make prerelease

* Upload assets on release not on tags
2021-06-01 03:55:21 +03:00
Oleg Kalachev
25a7d0f97f docs: add links to hardware sources 2021-06-01 03:54:45 +03:00
Oleg Kalachev
d413be5101 CI: move Melodic build and editorconfig-lint to GitHub Actions (#331)
* Create main.yml

* Update main.yml

* Disable native Melodic build in Travis

* Run editorconfig-lint in Actions

* Let wget be less verbose

* Test

* Test ok

* Disable editorconfig-lint in Travis
2021-06-01 03:53:59 +03:00
Oleg Kalachev
f29686b9f4 CI: add new key for apt
Fixing https://github.com/CopterExpress/clover/runs/2700356960#step:3:74
2021-06-01 03:44:20 +03:00
Oleg Kalachev
b7f1f2b391 builder: less verbosity 2021-05-29 13:22:57 +03:00
Oleg Kalachev
6b0bb41564 CI: push documentation site to the main repo 2021-05-29 06:11:29 +03:00
Oleg Kalachev
563e5acad6 CI: change apt to apt-get 2021-05-29 05:31:29 +03:00
Oleg Kalachev
5932faa29c CI: remove .travis.yml 2021-05-29 05:29:32 +03:00
Oleg Kalachev
bcc2e86e6f CI: split up to several workflows 2021-05-29 05:27:20 +03:00
Oleg Kalachev
e80a1cc7d6 CI: use gh-pages target branch for docs 2021-05-28 22:43:58 +03:00
Oleg Kalachev
5fd3a92c7b CI: change docs target branch to master 2021-05-28 22:21:07 +03:00
Oleg Kalachev
84b87055df CI: change docs target branch to actions 2021-05-28 21:20:43 +03:00
Oleg Kalachev
7cc0f066c7 CI: move documentation building to GitHub Actions (#337) 2021-05-28 21:09:09 +03:00
Oleg Kalachev
868fc728dd readme: add support chat badge 2021-05-28 01:47:33 +03:00
Oleg Kalachev
faa90b89f6 readme: change build badge to GitHub Actions 2021-05-28 01:31:32 +03:00
Oleg Kalachev
f4d07e2c2c CI: move image building to GitHub actions (#335)
* Start working on building image in GitHub actions

* Trigger GitHub on push to any branch

* Fix TRAVIS_TAG

* Add compress image step

* Disable image build in Travis

* Add upload image step

* Fix compress image

* Fix

* Fix

* Minor fix

* Trigger build on tag

* Show images sizes not in human format

* Upload only built image

* Make prerelease

* Upload assets on release not on tags
2021-05-28 01:25:29 +03:00
Oleg Kalachev
fad7886012 docs: add links to hardware sources 2021-05-27 20:33:47 +03:00
Oleg Kalachev
ee9e504d68 CI: fix authentication in Docker 2021-05-27 00:09:25 +03:00
Oleg Kalachev
3c5a7bf685 CI: fix Bash syntax 2021-05-27 00:09:20 +03:00
Oleg Kalachev
856e94aafa CI: add Docker authentication on image build 2021-05-27 00:09:04 +03:00
Oleg Kalachev
7eb139fd22 CI: fix authentication in Docker 2021-05-26 23:56:41 +03:00
Oleg Kalachev
855d13e210 CI: fix Bash syntax 2021-05-26 23:46:09 +03:00
Oleg Kalachev
781b8962be CI: add Docker authentication on image build 2021-05-26 23:43:52 +03:00
Oleg Kalachev
047a965f9f CI: move Melodic build and editorconfig-lint to GitHub Actions (#331)
* Create main.yml

* Update main.yml

* Disable native Melodic build in Travis

* Run editorconfig-lint in Actions

* Let wget be less verbose

* Test

* Test ok

* Disable editorconfig-lint in Travis
2021-05-24 16:31:29 +03:00
Oleg Kalachev
47060db84b travis: disable native kinetic build 2021-05-20 20:59:50 +03:00
Oleg Kalachev
2693fd4ace docs: typos 2021-05-20 20:46:48 +03:00
Oleg Kalachev
faa702cab0 docs: typos 2021-05-20 20:27:46 +03:00
Oleg Kalachev
150ecbe29d Remove all unneeded static’s 2021-05-20 18:32:49 +03:00
Oleg Kalachev
df5e83e416 led: add error/ignore parameter to ignore some errors 2021-05-20 18:30:47 +03:00
Oleg Kalachev
1f2ba65669 Minor fix 2021-05-20 18:00:22 +03:00
Oleg Kalachev
a3aecc6d3a Minor fix 2021-05-19 21:56:02 +03:00
Oleg Kalachev
602c1eb20a image: add image-view package for recording video from topics 2021-05-19 20:34:23 +03:00
Oleg Kalachev
cf7f083faf Merge branch 'master' into 22-armhf 2021-05-19 19:24:28 +03:00
Oleg Kalachev
8d771cf51f docs: add packages article 2021-05-19 19:20:19 +03:00
Oleg Kalachev
a48d8264f4 Show nodelet version 2021-05-19 18:27:49 +03:00
Oleg Kalachev
533ab9423d Remove hacks 2021-05-19 18:26:20 +03:00
Oleg Kalachev
0eb360d7f1 www: add viewing clover.err file from web interface 2021-05-19 16:40:26 +03:00
Oleg Kalachev
27be9eb281 www: add viewing clover.err file from web interface 2021-05-19 16:40:10 +03:00
Oleg Kalachev
7ca8cb44e0 image: add cmake-modules package 2021-05-19 16:15:51 +03:00
Oleg Kalachev
a829dfdbcd Disable hack 2021-05-19 15:46:31 +03:00
Oleg Kalachev
e5a7d7d096 Disable unneeded hack 2021-05-19 13:51:25 +03:00
Oleg Kalachev
0ab8e33738 Test 2021-05-18 19:44:21 +03:00
Oleg Kalachev
f8222e1028 mavros.launch: fix 2021-05-14 15:34:41 +03:00
Oleg Kalachev
dce0c00773 Minor fix 2021-05-14 13:29:05 +03:00
Oleg Kalachev
dc8c5d9db9 clover.launch: disable rc node by default 2021-05-14 12:05:43 +03:00
Oleg Kalachev
261faaec0e Add waitfile script to wait for a file before starting a node 2021-05-14 12:05:23 +03:00
Oleg Kalachev
dbd9a4a238 optical_flow: publish debug image even when calc_flow_gyro failed 2021-05-13 18:52:22 +03:00
Oleg Kalachev
a43c63fd21 Merge branch 'master' into 22-armhf 2021-05-13 14:42:46 +03:00
Oleg Kalachev
80d446e857 blocks: show traceback in error alert 2021-05-13 14:36:15 +03:00
Oleg Kalachev
609a7ab014 blocks: print exception info on error 2021-05-13 11:46:03 +03:00
Oleg Kalachev
c0d9bd7ef0 mavros.launch: add default 'prefix' argument 2021-05-12 23:41:33 +03:00
deadln
cdd6000c58 Fix packages installation (#326)
* Catkin install testing

* Update standalone-install.sh

* Fix aruco_pose DetectorParams generating

* Update builder/standalone-install.sh

* Fix

* Fix

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-05-07 10:23:54 +03:00
Oleg Kalachev
480a9b1f0a clover.launch: remove shell node autolaunch as it’s not needed 2021-05-01 08:52:42 +03:00
Oleg Kalachev
4943cb94b0 www: simplify showing image version on the main page
Using a clover_version symlink instead of shell node
2021-05-01 08:49:27 +03:00
Oleg Kalachev
e0ca1272bb clover.launch: wait for px4fmu device until starting mavros 2021-04-23 22:46:48 +03:00
Oleg Kalachev
cb88537ddc docs: add snippet for using aruco_detect/enabled dynamic parameter 2021-04-20 16:55:31 +03:00
Oleg Kalachev
5870521b4b Trigger build to update ws281x package 2021-04-16 13:28:18 +03:00
Oleg Kalachev
659380c575 docs: clover_vm redirect 2021-04-16 10:34:07 +03:00
SeliverstovaE
b4a8119bd7 docs: minor change to copterhack2021.md (ru) (#324)
* Update copterhack2021.md

* Update docs/ru/copterhack2021.md

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-04-14 22:23:43 +03:00
SeliverstovaE
c72eb1b440 docs: minor change to copterhack2021.md (#325)
* Update copterhack2021.md

* Update docs/en/copterhack2021.md

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-04-14 22:22:36 +03:00
Oleg Kalachev
f825901a19 docs: add link to selfcheck utility to programming article 2021-04-13 10:58:20 +03:00
Oleg Kalachev
200c5dea57 image: fix documentation building in image 2021-04-13 09:43:47 +03:00
Oleg Kalachev
0504569b0c Fix building documentation 2021-04-13 09:41:54 +03:00
Oleg Kalachev
9829ee2e72 docs: minor change 2021-04-13 09:32:26 +03:00
Oleg Kalachev
dfdaf3aa4f image: add get_telemetry example 2021-04-13 08:50:10 +03:00
Oleg Kalachev
63f979c2ff docs: minor redirects update 2021-04-13 08:33:30 +03:00
Oleg Kalachev
c899d74f95 Fix documentation building in image 2021-04-10 07:49:26 +03:00
Oleg Kalachev
a722397a72 Fix building documentation 2021-04-10 07:38:03 +03:00
Oleg Kalachev
606c52f782 Restore .git directory in clover repo 2021-04-10 03:09:57 +03:00
Oleg Kalachev
0d702b0c01 Merge branch 'master' into 22-armhf 2021-04-09 17:50:34 +03:00
Oleg Kalachev
42f6da25b7 More cleanup 2021-04-09 17:45:48 +03:00
Oleg Kalachev
5c56b6a5ed Sources lists cleanup 2021-04-09 17:30:55 +03:00
Oleg Kalachev
ff2e8b0709 Cleanup 2021-04-09 17:28:08 +03:00
Oleg Kalachev
bd38ad56c7 Continue... 2021-04-09 15:57:15 +03:00
Oleg Kalachev
9f2acc49c5 And yet another 2021-04-09 13:27:53 +03:00
Oleg Kalachev
f5c11bc528 And another 2021-04-09 13:27:35 +03:00
Oleg Kalachev
3e713c6c8a Another try to fix 2021-04-09 13:21:33 +03:00
Oleg Kalachev
6ce2822b78 Revert "Another try to fix"
This reverts commit 5a4c3a0da7.
2021-04-09 12:23:39 +03:00
Oleg Kalachev
5a4c3a0da7 Another try to fix 2021-04-09 12:05:51 +03:00
Oleg Kalachev
6b2f1445e8 Try to fix 2021-04-09 12:05:01 +03:00
Oleg Kalachev
55d6e47c60 Display all CMake variables 2021-04-09 10:56:50 +03:00
Oleg Kalachev
558baae1fc More debugging 2021-04-09 10:53:20 +03:00
Oleg Kalachev
f81247ccf3 Debugging 2021-04-09 10:50:55 +03:00
Oleg Kalachev
7ac4f8bec0 Verbosity 2021-04-09 09:00:57 +03:00
Oleg Kalachev
2111b366db Revert "Revert "image: use older CMake (3.13.4-1)""
This reverts commit a28c774e8f.
2021-04-09 08:46:47 +03:00
Oleg Kalachev
a28c774e8f Revert "image: use older CMake (3.13.4-1)"
This reverts commit df28da0060.
2021-04-09 08:04:20 +03:00
Oleg Kalachev
a8b321ce22 Try to fix 2021-04-09 07:49:37 +03:00
Oleg Kalachev
109542dc91 Try to fix 2021-04-09 06:40:26 +03:00
Oleg Kalachev
72252eb06e Revert "Temporarily disable rc and camera_markers building"
This reverts commit e119220e91.
2021-04-09 06:37:36 +03:00
Oleg Kalachev
876092e33e Fix standalone-install 2021-04-09 06:20:17 +03:00
Oleg Kalachev
e119220e91 Temporarily disable rc and camera_markers building 2021-04-09 05:19:57 +03:00
Oleg Kalachev
4a403b2399 Be verbose 2021-04-09 05:19:40 +03:00
Oleg Kalachev
ed64507bef Try to fix 2021-04-09 05:03:59 +03:00
Oleg Kalachev
98ff1d2b50 Yet another attempt to fix pthreads ld error 2021-04-09 03:20:19 +03:00
Oleg Kalachev
a8a42fe33d Another attempt to fix pthreads ld error 2021-04-08 14:18:02 +03:00
Oleg Kalachev
bd0037f3c9 Try to fix pthreads ld error 2021-04-08 13:34:21 +03:00
Oleg Kalachev
67b7e903fd Fix pthreads ld error 2021-04-08 12:42:52 +03:00
Oleg Kalachev
a184eb00af image: bring back moving ld.so.preload out of the way while building 2021-04-08 11:44:15 +03:00
Oleg Kalachev
2bd49201be image: update Raspberry Pi OS to 2021-03-04 2021-04-08 11:32:43 +03:00
Oleg Kalachev
b8dafce816 readme: add downloads count badge 2021-04-08 10:39:39 +03:00
Oleg Kalachev
19e0b94fda docs: publish grip spacer dxf 2021-04-01 20:37:29 +03:00
Oleg Kalachev
957e57692c docs: fix coex pix image 2021-04-01 19:41:59 +03:00
Oleg Kalachev
0d49c426eb docs: fix coexpix 1.2 bottom pinout 2021-03-31 21:40:02 +03:00
Oleg Kalachev
b1f104ce5e image: set pi3-disable-bt overlay correctly
The previous method replaced all the dtoverlay variables to pi3-disable-bt, which is incorrect
2021-03-30 21:17:38 +03:00
Oleg Kalachev
80177b3ea4 image: remove .git to reduce size 2021-03-26 15:46:28 +03:00
Oleg Kalachev
3223d3817e image: add tree utility 2021-03-26 04:57:00 +03:00
Oleg Kalachev
4612f7e9f0 builder: show ws281x and led_msgs versions 2021-03-26 01:12:37 +03:00
Oleg Kalachev
df28da0060 image: use older CMake (3.13.4-1)
Fixing https://travis-ci.org/github/CopterExpress/clover/jobs/764367665#L6984
2021-03-25 23:23:10 +03:00
Oleg Kalachev
a026410fdb image: set CRYPTOGRAPHY_DONT_BUILD_RUST=1 2021-03-25 20:28:56 +03:00
Oleg Kalachev
dd1a212cd0 image: use older CMake (3.13.4-1)
Fixing https://travis-ci.org/github/CopterExpress/clover/jobs/764367665#L6984
2021-03-25 20:26:54 +03:00
Oleg Kalachev
20b6824012 image: update Raspberry Pi OS to 2021-01-12 2021-03-25 20:23:34 +03:00
Oleg Kalachev
73d39e9ca6 Fix Node.js installation 2021-03-24 22:19:46 +03:00
Oleg Kalachev
23eac48fa4 Add CRYPTOGRAPHY_DONT_BUILD_RUST=1 2021-03-24 21:39:09 +03:00
Oleg Kalachev
9cdcbbc901 Merge branch 'master' into 22-armhf 2021-03-24 20:59:33 +03:00
Oleg Kalachev
6f6933234c docs: compress pdfs 2021-03-24 19:14:38 +03:00
Oleg Kalachev
3edafbef97 docs: retry building pdf a couple of times 2021-03-24 15:46:52 +03:00
Oleg Kalachev
7740a136ce docs: enable building pdf 2021-03-24 15:27:42 +03:00
Oleg Kalachev
380112de6a docs: add some photos for copter hack 2021 page 2021-03-22 16:41:17 +03:00
Oleg Kalachev
79f5c6d0e7 docs: publish full copter hack 2021 results 2021-03-22 14:18:16 +03:00
Oleg Kalachev
e207b55966 docs: some minor editing 2021-03-22 14:15:24 +03:00
Oleg Kalachev
043a4ad67c docs: change title for Blue Jay Eindhoven article 2021-03-21 01:07:09 +03:00
Oleg Kalachev
dbeb2b354d docs: minor fixes 2021-03-20 23:20:10 +03:00
Oleg Kalachev
6134965f2a docs: very minor fix 2021-03-20 20:29:55 +03:00
Oleg Kalachev
976bb7aeea docs: some edits 2021-03-20 19:45:02 +03:00
Oleg Kalachev
faa0e6d8d2 docs: make images zoomable 2021-03-20 19:11:14 +03:00
Oleg Kalachev
d02151aedd docs: forgotten file 2021-03-20 15:26:22 +03:00
bessiaka
7f0606397e docs: add octapadzog copter hack article (#320)
* Added octapadzog article

* Add article to summary

* List article

* Edit article

* Optimize images

* Fix

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-20 15:26:00 +03:00
Yuriy
fb2842a0a1 docs: edits to anticorona drones article (#318)
* Integrate changes

* Update anticorona_drones.md

* Update anticorona_drones.md

* Update anticorona_drones.md

* Update anticorona_drones.md

* Add link to gdrive

* Optimize images

* Edit article

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-20 15:00:51 +03:00
slavikyd
9a9621ab4b docs: changes on drone-agronom.md (#319)
* Changes on drone-agronom.md

Это Вячеслав из команды Quadrotor. Редактирую так по причине каких-то проблем с гитхабом на моем компьютере. Прошу прощения за неудобства

* Fix

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-20 14:26:48 +03:00
Oleg Kalachev
171804149c docs: minor fix to zaural viking article 2021-03-20 14:24:54 +03:00
Oleg Kalachev
0cb7494023 Add Blue Jay Eindhoven copter hack article 2021-03-20 14:09:15 +03:00
Frey Hertz
e0a81e0ca8 docs: add Amls team copter hack article (#313)
* Create amls.md

* Create amls.md

* Update SUMMARY.md

* Update SUMMARY.md

* Add files via upload

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Delete docs/assets/amls directory

* Update amls.md

* Update amls.md

* Update amls.md

* Add files via upload

* Delete docs/assets/amls directory

* Add files via upload

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Delete youtube_amls_results.jpg

* Delete youtube_exposure_test.jpg

* Delete youtube_first_tests.jpg

* Delete youtube_gazebo.jpg

* Delete youtube_gps_hold.jpg

* Delete youtube_holding_in_motion.jpg

* Delete youtube_landing_test.jpg

* Delete youtube_light_sensor.jpg

* Delete youtube_optical_catch.jpg

* Delete youtube_pressure_holding.jpg

* Delete youtube_speedometer_test.jpg

* Delete youtube_stabilization_1.jpg

* Delete youtube_stabilization_2.jpg

* Delete youtube_static_stabilization.jpg

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Update amls.md

* Add files via upload

* Add files via upload

* Add files via upload

* List article

* Fix YouTube codes

* Remove RU/EN from the title

Co-authored-by: Yas-lab <79026153+Yas-lab@users.noreply.github.com>
Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-19 15:45:35 +03:00
Ivan-Alekov
1e5e9cdc43 docs: add Hardaton quidditch team copter hack article (#315)
* Add new article for Clover

* Update and rename Хардатон_Квиддич.md to Hardaton_Quidditch.md

* Update Hardaton_Quidditch.md

* Update SUMMARY.md

* Add files via upload

* Delete docs/assets/Хардатон_Квиддич directory

* Update Hardaton_Quidditch.md

* Delete Команда.jpg

* Delete Хардатон.jpg

* Add files via upload

* Update Hardaton_Quidditch.md

* Update Hardaton_Quidditch.md

* Update Hardaton_Quidditch.md

* Update Hardaton_Quidditch.md

* Update Hardaton_Quidditch.md

* Update Hardaton_Quidditch.md

* Change file name case

* Edit article

* List article

* Update hardaton_quidditch.md

* Update hardaton_quidditch.md

* Add files via upload

* Update hardaton_quidditch.md

* Update hardaton_quidditch.md

* Update hardaton_quidditch.md

* Update hardaton_quidditch.md

* Update hardaton_quidditch.md

* Update hardaton_quidditch.md

* Update hardaton_quidditch.md

* Remove unused image

* Minor fix

* Optimize images

* Make embedded video smaller

* Minor fix

* Add link to copter hack page in the header

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-19 14:26:38 +03:00
Oleg Kalachev
5e315c477e docs: minor fix 2021-03-19 14:08:20 +03:00
Artem Batalov
f45000f595 docs: add EasyToFly team copter hack article (#309)
* First draft of article

* Update SUMMARY.md

* Fix titles levels

* Remove trailing dot from the title

* Info about team

* Start writing usage

* Iframe to youtube

* Installation manual

* Edit article

* Edit article more

* List article

* Team contacts

* Logo to assets

* Links to hard details

* Start of collision detection

* Fixes

* Very minor fix

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-19 13:59:53 +03:00
GalinaDa
48a1385a1a docs: add ProCleVeR team copter hack article (#316)
* Add remote-control-with-oculusvr for Clover

* Edit article

* List article

* Update remote-control-with-oculusvr.md

Update article

* Edit article

Co-authored-by: GalinaDa <GalinaDa@users.noreply.github.com>
Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-19 13:43:06 +03:00
Max
765c470baa docs: add FTL team copter hack article article (#310)
* Start draft

* Fix linting

* Finish

* Move images from imgur to assets and add contacts

* Change letters case

* Edit article

* List article

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-18 19:20:43 +03:00
Тилек Сыдыков
fd69beed7b docs: add MINIONS team copter hack article (#305)
* images

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

* images added

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

Link to Fukuoka technique

* draft

* .

* lint changes

* python endings changed to LF

* update youtube video

* new1

* files changed

* files changed png again1

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

* Update seeding_drone.md

* Delete main.py

* Update seeding_drone.md

* total commit

* new

* small fixes

* Add team name header

* Editing (ru)

* Editing (en, ru)

* Reduce electronic1.png size

* Remove unneeded trailing spaces

* Update seeding_drone.md

* Remove redundant empty lines

* Minor fix

* List MINIONS article

* Move references to the bottom

* Typo

Co-authored-by: Ruslan Isaev <subfear@mail.ru>
Co-authored-by: sahinysf <yussuf.shakhin@iaau.edu.kg>
Co-authored-by: Yussuf <60141821+Sahinysf@users.noreply.github.com>
Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-18 17:56:26 +03:00
DenDenMushi999
1d4179bccf docs: add Atomic Ferrets team copter hack article (#306)
* add artile copterhack2021

add article about race timing system

* add artcile race timimng system again

* Update race_timing_sys_copterhack.md

* add a picture

* finish article copterhack

* Update race_timing_sys_copterhack.md

* List Atomic Ferrets article

* Add team name

* Fix

* Edit article

* add contacts to "atomic ferrets"

* Edit

Co-authored-by: DenDenMushi <den.davletshin00@mail.ru>
Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-18 16:15:24 +03:00
slavikyd
0b2095bbb8 docs: add Quadrotor copter hack team article (#308)
* Add new article for Clover

* Changes and retrying of adding new add new article for clover

* Fix

* Edit article

* List drone-agronom article

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-18 16:07:20 +03:00
Yuriy
a0436fbcc5 docs: add Drones to fight Corona team copter hack article (#307)
* Create an article

* Move antironoca_drones aritcles to projects section

* Editing

* Move images to assets folder

* Update anticorona_drones.md

* Update anticorona_drones.md

* Update anticorona_drones.md

* Update anticorona_drones.md

* List drones to fight corona article

* Move images to anticorona subfolder, edit article

* Add contacts

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-18 14:44:11 +03:00
Oleg Kalachev
aee867d6bc docs: forgotten file 2021-03-18 13:43:21 +03:00
Oleg Kalachev
3c078ab92f docs: add DroMap copter hack article 2021-03-18 13:42:58 +03:00
Oleg Kalachev
d780aedb88 docs: mention contact info in contributing article 2021-03-18 10:58:17 +03:00
jadenbh13
a16d9d80fc docs: add Bennie and the Jetson TX2 copter hack article (#314)
* Add files via upload

* Add Bennie article

* Remove ArticleDraft.pdf

* Add files via upload

* Add files via upload

* Update bennie.md

* Update bennie.md

* Rename article in the summary

* Remove unneeded files

* Minor fix

* List Bennie article

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-17 18:02:30 +03:00
Daniel Honies
10d250d96a docs: add ADDI team copter hack article (#311)
* add CH2021 generative design project by ADDI

* fixes

* another fix

* add to summary

* fix issues

fixes issues concerning image size and markdown lint

* Update docs/en/SUMMARY.md

* Minor fix

* Optimize images more

* List article in the copter hack article

* Fix

* Case fix

* add contact info

* Minor fix to contact info arrangement

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-17 17:46:34 +03:00
Oleg Kalachev
acdcf20392 docs: remove unneeded trailing spaces and fix a typo 2021-03-16 16:39:02 +03:00
Oleg Kalachev
796d614f5e docs: minor fix 2021-03-16 14:22:21 +03:00
Oleg Kalachev
f8de7443d7 docs: minor edit for linter 2021-03-16 14:22:15 +03:00
Oleg Kalachev
5c3ffdbeb6 docs: add article of Zaural Viking team on Copter Hack 2021 2021-03-16 13:51:57 +03:00
Oleg Kalachev
1c732137c6 travis: suppress error codes from building the pdf 2021-03-16 11:45:17 +03:00
Oleg Kalachev
345aad9e64 docs: move copter hack articles to events section 2021-03-16 11:21:02 +03:00
PerizatKurmanbaeva
02c67ea71a docs: add CopterHack-2021 D-drone article (#303)
* d-drone init article ru, en, assets

* Change model and assemling, assets

* Add assets, change web site

* Add assets, change web site

* Edit ddrone article

* en and ru added and linted

* special thanks added

* added STL models

* Added gif

* Remove space from file name

* Slight editing

* Add teams articles list

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-03-16 11:19:34 +03:00
Oleg Kalachev
050e0fedb9 docs: forgotten file 2021-03-15 19:48:18 +03:00
Oleg Kalachev
0e9b54934c docs: add copterhack-2021 arcticle (en) 2021-03-15 19:47:27 +03:00
Oleg Kalachev
793b614b7b builder: fix getting pip in standalone-install 2021-03-15 14:40:12 +03:00
Oleg Kalachev
62ab5c2357 builder: fix get-pip url for python 2 2021-03-15 14:29:03 +03:00
Oleg Kalachev
181a78e4a9 image: use old pip for Python 2 2021-03-15 14:13:45 +03:00
Oleg Kalachev
c72eb0c027 docs: link to blocks in projects list 2021-03-14 10:27:37 +03:00
Oleg Kalachev
5d99e44c30 docs: restore COEX GPS article 2021-03-12 10:06:34 +03:00
Oleg Kalachev
5eb9b4acbe Revert "docs: add COEX GPS article"
This reverts commit 1dea541df2.
2021-03-12 10:01:04 +03:00
Oleg Kalachev
30ada8f311 Revert "docs: add some text to COEX GPS article"
This reverts commit 50dc17badb.
2021-03-12 09:57:31 +03:00
Oleg Kalachev
e717829945 gitbook: fix retrieving the latest version of the firmware 2021-03-10 11:12:25 +03:00
Oleg Kalachev
50dc17badb docs: add some text to COEX GPS article 2021-03-10 08:03:57 +03:00
Oleg Kalachev
1dea541df2 docs: add COEX GPS article 2021-03-09 17:35:18 +03:00
Oleg Kalachev
d6b950b726 docs: some edits to coex pdb articles 2021-02-27 21:20:23 +03:00
Oleg Kalachev
e2a1d3aaeb docs: minor fix 2021-02-27 01:57:59 +03:00
Oleg Kalachev
165e4d1a61 docs: add COEX PDB page (en/ru) 2021-02-27 01:47:44 +03:00
Oleg Kalachev
4f631300d4 docs: fix sonar example 2021-02-26 15:48:01 +03:00
deadln
e252a1cddc Update package versions (#302)
* Update version in clover_blocks package.xml

* Changed all packages versions to 0.21.1
2021-02-21 22:20:43 +03:00
deadln
25dd17c286 Add packages changelogs (#301)
* Generated changelogs

* Cleared aruco_pose changelog

* Cleared clover changelog

* Cleared clover_blocks changelog

* Cleared clover_description changelog

* Cleared clover_simulation changelog

* Cleared roswww_static changelog

* Fixed typo in roswww_static changelog

* Simplify changelogs

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2021-02-19 23:37:36 +03:00
timkondratiev
b9395e3d18 simulator: Add default ArUco map based on "cmit.txt" (#300)
* Add ArUco map model

* Add ArUco map into the new .world file and set this world as the default.
2021-02-17 14:48:18 +03:00
Oleg Kalachev
edc740c8c0 Change Raspberry Pi OS to latest armhf, use packages.coex.tech as a source 2021-01-30 17:45:31 +03:00
timkondratiev
a32dd7dcdd clover_simulation: fix XML formatting in generated world (#299)
Changed the way of adding an XML element into the .world file to fix the formatting issue.
2021-01-27 16:01:59 +03:00
MatveyBarabanshchikov
1e12e34070 docs: add agriculture.md article (rus/eng) (#297)
* add agriculture.md

* add photos for agriculture.md

* Update agriculture.md

Add photos and fixed code.

* Update agriculture.md

Changed the name and the content of the article.

* Add agriculture.md at SUMMARY.md

* Update agriculture.md

Fixed indentation errors.

* Update agriculture.md

Fixed text bugs.

* Create the English version of agriculture.md

* Update agriculture.md

Fixed English.

* Add agriculture.md to SUMMARY.md (eng)

* Delete field.png

* Delete field2.png

* Update pictures for agriculture.md

* Update links to images in agriculture.md

* Update links to images in agriculture.md

* Delete field.jpg

* Delete field2.jpg

* Add update photo at agriculture.md

* Update ugriculture.md

* Update agriculture.md

* Update agriculture.md

* Update agriculture.md

Fixed text bugs.

* Update ugriculture.md

Fixed text bugs.

* Update agriculture.md

Fixed text bugs.

* Update agriculture.md

Updated the article according to the recommendations.

* Update agriculture.md

Updated the article according to the recommendations.
2021-01-22 04:16:08 +03:00
Oleg Kalachev
3ff675d794 docs: add clover 4.2 dimension drawings 2021-01-12 22:00:17 +03:00
Alamoris
bb3e4befe5 docs: add Zerotire VPN article (#295)
* docs: Added article about configuring zerotire VPN

* docs: Add paragraph about macos VPN connection

* docs: Fix md exeptions

* dosc: Fix orthography

* docs: Add eng version, some fix

* docs: Fix

* docs: Small fix

* docs: Add paragraph about QGC connection

* docs: Add images and fix md

* Update docs/en/zerotire_vpn.md

* Update docs/ru/zerotire_vpn.md

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2020-12-28 21:22:38 +03:00
Alamoris
fe71007ebd docs: add images for article about mechanical grip (#294) 2020-12-18 13:34:23 +03:00
Oleg Kalachev
68cec159f7 simulation: add type:=jmavsim to simulator.launch, remove sitl.launch, some adjustments 2020-12-08 16:28:57 +03:00
Oleg Kalachev
4e8127f690 docs: add vertical markers article to the summary 2020-12-08 15:28:29 +03:00
Alamoris
8f78f2b6e4 docs: add translations of articles about grippers and assembling an FPV set (#288)
* docs: Add translations and fix rusian articles

* docs: Fix md and style

* docs: Fix summary and dupont naming

* docs: Fix summary tabbing
2020-12-08 14:17:20 +03:00
Oleg Kalachev
c8163cd38b docs: add translation of the wall_aruco article and fix the Russian version (#289) 2020-12-08 01:13:35 +03:00
Oleg Kalachev
7831992d6a Edit 2020-12-08 01:12:25 +03:00
Volga
873befdba9 docs: Added translation of the wall_aruco article and fix russian version 2020-12-08 00:55:50 +03:00
Oleg Kalachev
c3cbc305c3 docs: add clarification on set_rates rotation directions 2020-12-05 04:27:47 +03:00
Oleg Kalachev
b71e802a2e docs: replace Pixracer with COEX pix on the main page 2020-12-05 04:07:38 +03:00
Ralf Seidel
3c5f2c958e docs: add heading for "Brushless motors" (#287) 2020-12-04 00:19:00 +03:00
Oleg Kalachev
267993aec4 Add title to the main clover page 2020-12-03 00:24:15 +03:00
Oleg Kalachev
86dd42c3b3 docs: fix main illustration (en) 2020-12-02 04:06:00 +03:00
Oleg Kalachev
9d338d843b docs: fix 2020-11-30 22:15:38 +03:00
Oleg Kalachev
3e100bee91 docs: add note on Pixhawk firmware to setup article 2020-11-30 22:15:32 +03:00
Oleg Kalachev
8a29b9a37a Fix checking unused assets 2020-11-30 00:55:40 +03:00
Oleg Kalachev
2e80a06db1 docs: add main clover image for black background 2020-11-29 23:03:10 +03:00
Oleg Kalachev
0003985c3b docs: fix typos 2020-11-28 01:37:41 +03:00
Oleg Kalachev
f250916ede docs: fix more images in coex pix article 2020-11-28 01:33:27 +03:00
Oleg Kalachev
ee2944a1d3 docs: fix images in coex_pix article 2020-11-27 17:57:47 +03:00
Oleg Kalachev
a088524468 docs: change /led redirect to English version, shortened links in examples 2020-11-27 03:06:57 +03:00
Oleg Kalachev
215fe237ca docs: fix check_unused_assets 2020-11-26 22:54:12 +03:00
Oleg Kalachev
8c1b5c19d0 readme: update main illustration 2020-11-26 20:39:57 +03:00
Oleg Kalachev
779dfb3f4f docs: update the main illustration 2020-11-26 20:36:24 +03:00
Oleg Kalachev
23d503adc5 docs: correct mode and kill switch channels 2020-11-26 19:56:04 +03:00
Oleg Kalachev
0350ecbff7 docs: decrease pix-sd.png size 2020-11-26 18:18:01 +03:00
Oleg Kalachev
12bed337dc docs: add video review of the simulator 2020-11-26 18:18:01 +03:00
Volga
6a1b609ccd docs: Update COEX Pix rev. 1.2 images 2020-11-25 11:16:38 +03:00
Oleg Kalachev
3d5c51a42e aruco_detect: add 'enabled' dynamic param 2020-11-24 22:34:12 +03:00
Oleg Kalachev
3702ed0c86 docs: reduce images sizes in setup section 2020-11-24 15:03:23 +03:00
Oleg Kalachev
741abadb54 docs: add big leg model 2020-11-23 20:55:41 +03:00
Oleg Kalachev
c6dc732867 docs: remove trailing whitespace 2020-11-23 20:45:32 +03:00
Oleg Kalachev
ba76e51966 docs: fix blocks page address 2020-11-21 13:38:21 +03:00
Oleg Kalachev
7951f0e2ba docs: minor fix 2020-11-20 17:55:06 +03:00
Alamoris
cd58c03c0f docs: assembling grips and fpv (ru) (#283)
* docs: Add article about magnetic and mechanical grippers

* docs: Add and fix article about install fpv camera

* fpv: orthography, punctuation, and style

* magnetic_grip: orthography and punctuation

* mechanical_grip: orthography, punctuation, and style

* Fix lists style

* docs: Added magnetic grip assembly images

* docs: Add translate draft

* docs: Delete article translations

* docs: Fix incorrect image name

* docs: Add images about assembling FPV

* docs: Fix images size

* Optimize images

* Fixes

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2020-11-20 15:12:20 +03:00
Oleg Kalachev
ce6b2530c4 image: don’t install espeak to reduce size 2020-11-17 15:13:56 +03:00
Oleg Kalachev
14e4af76aa image: change clone depth to 1 2020-11-17 15:12:59 +03:00
Konstantin Petrykin
f3f1557b0b docs: add COEX Duocam docs (ru) (#285)
* docs: add COEX Duocam docs

* Orthography and punctuation

* docs: change gitup_seek image resolution and extension

* docs: add missing duocam-mavlink article

* docs: fix linter problems in duocam-mavlink article

* docs: add a link to doucam-mavlink in SUMMARY

* Decrease the size of gitup_seek image

* Make duocam_mavlink a subsection of duocam section

* Edit duocam articles

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2020-11-16 13:29:28 +03:00
Oleg Kalachev
18d410db24 docs: update setup section 2020-11-14 17:56:50 +03:00
Oleg Kalachev
9cddc81d1d Merge branch 'master' into 22 2020-11-13 12:36:56 +03:00
Volga
207dc88579 docs: Update coex pix images 2020-11-13 12:26:23 +03:00
Oleg Kalachev
58f6ac4b39 simple_offboard: fix checking kill switch state 2020-11-12 06:43:46 +03:00
Oleg Kalachev
688e4f0ca9 docs: add link to blocks into programming intro article 2020-11-10 06:16:12 +03:00
Oleg Kalachev
7cbe823700 blocks: add set_duty_cycle block 2020-11-10 06:06:44 +03:00
Oleg Kalachev
df681e0a79 docs: add gpio info to block article 2020-11-10 06:06:20 +03:00
Oleg Kalachev
8aad2fc363 blocks: fix units in set_servo tooltip 2020-11-10 04:10:41 +03:00
Oleg Kalachev
3c8dd14c9d docs: update clover versions images 2020-11-10 01:22:37 +03:00
Alexey Rogachevskiy
ced9b56452 clover: Attempt to respawn dying nodelets 2020-11-07 16:52:57 +03:00
Alexey Rogachevskiy
8bd4d3a8f8 builder: Build with debug symbols 2020-11-07 16:43:27 +03:00
Alexey Rogachevskiy
4730dabaaf aruco_pose: Simplify dynamic parameter callback setting 2020-11-05 23:48:34 +03:00
Alexey Rogachevskiy
0991427878 aruco_pose: Don't expose vendored library symbols 2020-11-05 23:47:49 +03:00
Alexey Rogachevskiy
3d4c02bc03 aruco_pose, clover: Move subscriptions to the end of init 2020-11-05 23:22:30 +03:00
Alexey Rogachevskiy
8a6bdccc9c aruco_pose, clover: Reduce the amount of OpenCV libs requested 2020-11-05 23:20:59 +03:00
Volga
3a20bc3212 docs: Fix broken image link 2020-11-05 01:20:56 +03:00
Volga
1105cd8750 docs: Add clover 4 sphere guard image 2020-11-04 23:53:21 +03:00
Alamoris
43d7e7c70b docs: add article on assembling clover 4.2 WS (en) (#282)
* docs: Add translation of the article about assembling clover 4_2 WS

* Minor fix

* docs: Add new renders and update article

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2020-11-04 01:34:44 +03:00
Oleg Kalachev
7a1e885df1 blocks: add led_count block 2020-11-04 00:45:34 +03:00
Oleg Kalachev
9a9c2d5c9f blocks: fix gpio blocks indentation 2020-11-03 23:23:40 +03:00
Alamoris
eaeb146878 docs: add article about assembling sphere guard (#284)
* docs: Add article about assembling sphere guard

* docs: Add article into summary

* docs: Fix broken images

* Shorten the article name

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2020-11-03 17:56:57 +03:00
Volga
2452be05ff docs: Update assembly images 2020-11-03 17:13:40 +03:00
Oleg Kalachev
a4336a39c9 blocks: change default z to 1 in aruco-marker example 2020-11-03 16:58:26 +03:00
Volga
9cdf7dea41 docs: Update assembliy renders in article aboutt clover WS 2020-11-03 16:03:37 +03:00
Volga
b90dc3c020 docs: Update article about coex pix 2020-11-03 13:27:07 +03:00
Oleg Kalachev
91252d8d50 image: decrease git clone depth 2020-10-31 22:31:21 +03:00
Oleg Kalachev
c4b94390e9 image: increase compression level more 2020-10-31 18:11:10 +03:00
Oleg Kalachev
1b4167365e image: increase compression level 2020-10-31 16:48:01 +03:00
Oleg Kalachev
01ec592abb docs: remove unused assets 2020-10-28 17:07:39 +03:00
Alexey Rogachevskiy
f36401274d aruco_pose: Make vendored library compatible with older OpenCVs 2020-10-28 14:46:31 +03:00
Alexey Rogachevskiy
2cfd21269c aruco_pose: Make sure there are no undefined symbols
Also, compile in apriltag_quad_thresh.cpp - it contains some of the functions referenced
in aruco.cpp, which would otherwise be undefined.
2020-10-28 13:52:05 +03:00
Volga
e2e2e04381 docs: Fix image link 2020-10-28 11:44:45 +03:00
Andrei Korigodski
27e0189cf5 readme: remove table with logos 2020-10-27 20:35:54 +03:00
Andrei Korigodskii
e3d89cbc4c readme: change title and update description
Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2020-10-27 20:13:11 +03:00
Oleg Kalachev
81bcfef85b led: change default number of leds to 72 2020-10-27 19:52:54 +03:00
Oleg Kalachev
a0ac85e0d3 led: change default number of leds to 72 2020-10-27 19:52:02 +03:00
Oleg Kalachev
83e5911110 docs: add pid tuning stand idea to projects 2020-10-27 19:38:29 +03:00
Oleg Kalachev
05d634d2d3 docs: make download link to vm more notable 2020-10-27 19:38:29 +03:00
Oleg Kalachev
4967d651bd docs: add default username/password info to the simulator vm article 2020-10-27 19:38:29 +03:00
Volga
91f948d3f4 docs: Fix orthography 2020-10-27 17:07:59 +03:00
Volga
ebf55244f4 docs: Update renders in the article about clover 4_2 WS 2020-10-27 17:01:53 +03:00
Alexey Rogachevskiy
00412125f9 clover: Use proper variable in aruco.launch 2020-10-27 11:27:52 +03:00
Alexey Rogachevskiy
55366a1fac aruco_gen: Open file in binary mode for Python3 compatibility 2020-10-27 11:26:49 +03:00
Oleg Kalachev
cc2ebb368d blocks: fix set_leds with color-typed argument 2020-10-25 19:21:05 +03:00
Oleg Kalachev
5b6d08e25d blocks: fix set_leds with color-typed argument 2020-10-25 19:20:45 +03:00
Oleg Kalachev
33500a13d0 docs: update and fix 0.22 migration articles 2020-10-25 00:16:17 +03:00
Oleg Kalachev
d7d95132ab blocks: force led_leds index to int 2020-10-24 22:18:56 +03:00
Oleg Kalachev
8036214406 Merge branch 'master' of github.com:CopterExpress/clever 2020-10-24 21:53:06 +03:00
Oleg Kalachev
5d3c8c89cb builder: make pi an owner of examples files 2020-10-24 21:52:54 +03:00
Oleg Kalachev
2075fa52ef examples: make leds.py more verbose 2020-10-24 21:52:34 +03:00
Andrei Korigodski
b0e1e1ffae docs: fix translation 2020-10-24 09:46:21 +03:00
Oleg Kalachev
4482f973db docs: editing 2020-10-23 13:08:09 +03:00
Oleg Kalachev
b1c7ee6b66 docs: editing 2020-10-23 12:35:41 +03:00
Oleg Kalachev
ff9e669352 docs: minor fixes 2020-10-23 12:23:53 +03:00
Oleg Kalachev
6c8291749f simple_offboard: correctly check manual control timeout, separate it from kill switch check 2020-10-22 19:12:51 +03:00
Alamoris
039d2438cd docs: paragraph about changes in Coex pix version 1.2 (#281)
* docs: add description about coex pix 1.2

* docs: Add new revision 1.2 schemes

* docs: More changes added
2020-10-22 11:09:40 +03:00
558 changed files with 31755 additions and 630 deletions

29
.github/workflows/build-image.yaml vendored Normal file
View File

@@ -0,0 +1,29 @@
name: Build RPi image
on:
push:
branches: [ '*' ]
pull_request:
branches: [ master ]
release:
types: [ created ]
jobs:
build-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build image
run: |
docker run --privileged --rm -v /dev:/dev -v $(pwd):/builder/repo -e TRAVIS_TAG="${{ github.event.release.tag_name }}" sfalexrog/img-tool:qemu-update
- name: Compress image
run: |
sudo chmod -R 777 images && zip -9 $(echo images/clover_*).zip images/clover_* && ls -l images
- name: Upload image
uses: softprops/action-gh-release@v1
if: ${{ github.event_name == 'release' }}
with:
files: images/clover_*.zip
prerelease: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

23
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,23 @@
name: Build
on:
push:
branches: [ '*' ]
pull_request:
branches: [ master ]
jobs:
build-melodic:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Native Melodic build
run: |
docker run --rm -v $(pwd):/root/catkin_ws/src/clover ros:melodic-ros-base /root/catkin_ws/src/clover/builder/standalone-install.sh
build-noetic:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Native Noetic build
run: |
docker run --rm -v $(pwd):/root/catkin_ws/src/clover ros:noetic-ros-base /root/catkin_ws/src/clover/builder/standalone-install.sh

54
.github/workflows/docs.yml vendored Normal file
View File

@@ -0,0 +1,54 @@
name: Documentation
on:
push:
branches: [ '*' ]
pull_request:
branches: [ master ]
jobs:
documentation:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
with: { node-version: '10' }
- name: Setup tools
run: |
sudo sh -c "echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections"
sudo apt-get update && sudo apt-get install -y calibre msttcorefonts
npm install gitbook-cli -g
gitbook fetch 3.2.3 && npm i npm@3.10.10 --prefix=~/.gitbook/versions/3.2.3/ # fixing https://travis-ci.org/github/CopterExpress/clover/jobs/766541125#L932
npm install markdownlint-cli -g
npm install svgexport -g
gitbook -V
markdownlint -V
- name: Run markdownlint
run: markdownlint docs
- name: Check Assets
run: |
./check_assets_size.py
./check_unused_assets.py
- name: Build GitBook
run: |
gitbook install
gitbook build
- name: Generate PDF
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
run: |
for i in 1 2 3 4; do gitbook pdf ./ _book/clover.pdf && break || sleep 1; done
sudo apt-get -q install ghostscript
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_ru_compressed.pdf _book/clover_ru.pdf
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=_book/clover_en_compressed.pdf _book/clover_en.pdf
rm _book/clover_ru.pdf && mv _book/clover_ru_compressed.pdf _book/clover_ru.pdf
rm _book/clover_en.pdf && mv _book/clover_en_compressed.pdf _book/clover_en.pdf
ls -lah _book/clover*.pdf
- name: Deploy
uses: JamesIves/github-pages-deploy-action@4.1.3
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
with:
branch: gh-pages
folder: _book
clean: true
single-commit: true # to avoid multiple copies of large pdf files

18
.github/workflows/editorconfig.yaml vendored Normal file
View File

@@ -0,0 +1,18 @@
name: Editorconfig lint
on:
push:
branches: [ '*' ]
pull_request:
branches: [ master ]
jobs:
editorconfig:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: .editorconfig Linter
run: |
wget --no-verbose https://github.com/okalachev/editorconfig-checker/releases/download/1.2.1-disable-spaces-amount/ec-linux-amd64
chmod +x ec-linux-amd64
./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|blockly/|clover_blocks/programs/|highlight/|python.js|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf|\.dae"

View File

@@ -23,6 +23,7 @@
"ROS Melodic",
"ROS Noetic",
"OpenCV",
"OpenVPN",
"Gazebo",
"GitHub",
"FPV",
@@ -107,7 +108,9 @@
"UDP",
"QR",
"Li-ion",
"Nvidia"
"Nvidia",
"VirtualBox",
"VMware"
],
"code_blocks": false
},

View File

@@ -1,125 +0,0 @@
os: linux
dist: xenial
language: generic
services:
- docker
env:
global:
- DOCKER="sfalexrog/img-tool:qemu-aarch64"
- TARGET_REPO="https://github.com/${TRAVIS_REPO_SLUG}.git"
- IMAGE_VERSION=${TRAVIS_TAG:-${TRAVIS_COMMIT:0:7}}
- IMAGE_NAME="$(basename -s '.git' ${TARGET_REPO})_${IMAGE_VERSION}.img"
git:
depth: 50
jobs:
fast_finish: true
include:
- stage: Build
name: "Raspberry Pi Image Build"
cache:
directories:
- imgcache
before_script:
- docker pull ${DOCKER}
# Check if there are any cached images, copy them to our "images" directory
- if [ -n "$(ls -A imgcache/*.zip)" ]; then mkdir -p images && cp imgcache/*.zip images; fi
script:
- if [[ -z ${TRAVIS_TAG} && "${TRAVIS_PULL_REQUEST}" != "false" ]]; then
echo "Commit range is ${TRAVIS_COMMIT_RANGE}" &&
if [ $(git diff --name-only ${TRAVIS_COMMIT_RANGE} | grep -v ^"docs/" | wc -l) -eq 0 ]; then
echo " === Docs-only change; skipping build ===" &&
export SKIP_BUILD=true;
fi;
fi
- if [ -z ${SKIP_BUILD} ]; then
docker run --privileged --rm -v /dev:/dev -v $(pwd):/builder/repo -e TRAVIS_TAG="${TRAVIS_TAG}" ${DOCKER};
fi
before_cache:
- cp images/*.zip imgcache
after_success:
- sudo chmod -R 777 *
- cd images && zip ${IMAGE_NAME}.zip ${IMAGE_NAME} && stat --printf="Compressed image size:%s\n" ${IMAGE_NAME}.zip
before_deploy:
# Set up git user name and tag this commit
- git config --local user.name "goldarte"
- git config --local user.email "goldartt@gmail.com"
deploy:
provider: releases
token: ${GITHUB_OAUTH_TOKEN}
file: ${IMAGE_NAME}.zip
skip_cleanup: true
on:
tags: true
draft: true
name: ${TRAVIS_TAG}
- stage: Build
name: "Native Kinetic build"
env:
- NATIVE_DOCKER=ros:kinetic-ros-base
before_script:
- docker pull ${NATIVE_DOCKER}
script:
- docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh
- stage: Build
name: "Native Melodic build"
env:
- NATIVE_DOCKER=ros:melodic-ros-base
before_script:
- docker pull ${NATIVE_DOCKER}
script:
- docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh
- stage: Build
name: "Native Noetic build"
env:
- NATIVE_DOCKER=ros:noetic-ros-base
before_script:
- docker pull ${NATIVE_DOCKER}
script:
- docker run --rm -v $(pwd):/root/catkin_ws/src/clover ${NATIVE_DOCKER} /root/catkin_ws/src/clover/builder/standalone-install.sh
- stage: Build
name: "Documentation"
language: node_js
node_js:
- "10"
before_script:
- sudo sh -c "echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections"
- sudo apt update && sudo apt install -y calibre msttcorefonts
- npm install gitbook-cli -g
- npm install markdownlint-cli -g
- npm install svgexport -g
- gitbook -V
- markdownlint -V
script:
- markdownlint docs
- ./check_assets_size.py
- ./check_unused_assets.py
- gitbook install
- gitbook build
- gitbook pdf ./ _book/clover.pdf
deploy:
provider: pages
local_dir: _book
skip_cleanup: true
token: ${GITHUB_OAUTH_TOKEN}
keep_history: true
target_branch: master
repo: CopterExpress/clover.coex.tech
fqdn: clover.coex.tech
verbose: true
on:
branch: master
- stage: Build
name: Editorconfig-lint
language: generic
before_script:
- 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|blockly/|clover_blocks/programs/|highlight/|python.js|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf|\.dae"
stages:
- Build
# More info there
# https://github.com/travis-ci/travis-ci/issues/6893
# https://docs.travis-ci.com/user/customizing-the-build/
# https://docs.travis-ci.com/user/deployment/releases
# https://docs.travis-ci.com/user/environment-variables/

View File

@@ -1,12 +1,14 @@
# COEX Clover Drone Kit
# clover🍀: create autonomous drones easily
<img src="docs/assets/clever4-front-white.png" align="right" width="400px" alt="Clover Drone">
<img src="docs/assets/clover42-main.png" align="right" width="400px" alt="COEX Clover Drone">
Clover is an educational programmable drone kit consisting of an unassembled quadcopter, open source software and documentation. The kit includes Pixracer-compatible autopilot running PX4 firmware, Raspberry Pi 4 as companion computer, a camera for computer vision navigation as well as additional sensors and peripheral devices.
Clover is an open source [ROS](https://www.ros.org)-based framework, providing user-friendly tools to control [PX4](https://px4.io)-powered drones. Clover is available as a ROS package, but is shipped mainly as a preconfigured image for Raspberry Pi. Once you've installed Raspberry Pi on your drone and flashed the image to its microSD card, taking the drone up in the air is a matter of minutes.
The main documentation is available [on Gitbook](https://clover.coex.tech/).
COEX Clover Drone is an educational programmable drone kit, suited perfectly for running clover software. The kit is shipped unassembled and includes Pixracer-compatible autopilot running PX4 firmware, Raspberry Pi 4 as a companion computer, a camera for computer vision navigation as well as additional sensors and peripheral devices. Batteries included.
Official website: <a href="https://coex.tech/clover">coex.tech/clover</a>.
The main documentation is available at [https://clover.coex.tech](https://clover.coex.tech/). Official website: [coex.tech/clover](https://coex.tech/clover).
[__Support us on Kickstarter!__](https://www.kickstarter.com/projects/copterexpress/cloverdrone)
## Video compilation
@@ -18,7 +20,8 @@ Clover drone is used on a wide range of educational events, including [Copter Ha
Preconfigured image for Raspberry Pi with installed and configured software, ready to fly, is available [in the Releases section](https://github.com/CopterExpress/clover/releases).
[![Build Status](https://travis-ci.org/CopterExpress/clover.svg?branch=master)](https://travis-ci.org/CopterExpress/clover)
![GitHub Workflow Status](https://img.shields.io/github/workflow/status/CopterExpress/clover/CI)
![GitHub all releases](https://img.shields.io/github/downloads/CopterExpress/clover/total)
Image features:
@@ -35,6 +38,10 @@ API description for autonomous flights is available [on GitBook](https://clover.
For manual package installation and running see [`clover` package documentation](clover/README.md).
## Support
[![Telegram Support Chat](https://img.shields.io/endpoint?label=Support%20Chat&url=https%3A%2F%2Ftelegram-badge-4mbpu8e0fit4.runkit.sh%2F%3Furl%3Dhttps%3A%2F%2Ft.me%2FCOEXHelpDesk)](https://t.me/COEXHelpdesk)
## License
While the Clover platform source code is available under the MIT License, note, that the [documentation](docs/) is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

8
aruco_pose/CHANGELOG.rst Normal file
View File

@@ -0,0 +1,8 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package aruco_pose
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0.21.1 (2020-11-17)
-------------------
* First release of aruco_pose package to ROS
* Contributors: Alamoris, Alexey Rogachevskiy, Arthur Golubtsov, Ilya Petrov, Oleg Kalachev

View File

@@ -24,7 +24,7 @@ find_package(catkin REQUIRED COMPONENTS
# Workaround for OpenCV 3/4 support
set(_opencv_version 4)
find_package(OpenCV ${_opencv_version} QUIET)
find_package(OpenCV ${_opencv_version} QUIET COMPONENTS core imgproc calib3d)
if (NOT OpenCV_FOUND)
message(STATUS "Did not find OpenCV 4, searching for OpenCV 3")
set(_opencv_version 3)
@@ -119,7 +119,7 @@ generate_messages(
## Generate dynamic reconfigure parameters in the 'cfg' folder
generate_dynamic_reconfigure_options(
cfg/DetectorParams.cfg
cfg/Detector.cfg
)
###################################
@@ -180,6 +180,13 @@ target_link_libraries(aruco_pose
${OpenCV_LIBRARIES}
)
# Prevent aruco_pose from having undefined symbols
set_property(TARGET aruco_pose
APPEND
PROPERTY LINK_FLAGS
-Wl,--no-undefined
)
#############
## Install ##
#############

View File

@@ -8,6 +8,8 @@ p = cv2.aruco.DetectorParameters_create()
gen = ParameterGenerator()
gen.add("enabled", bool_t, 0, "if detection enabled", True)
gen.add("adaptiveThreshConstant", double_t, 0,
"Constant for adaptive thresholding before finding contours",
p.adaptiveThreshConstant, 0, 100)

View File

@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<package format="2">
<name>aruco_pose</name>
<version>0.0.1</version>
<version>0.21.1</version>
<description>Positioning with ArUco markers</description>
<maintainer email="okalachev@gmail.com">Oleg Kalachev</maintainer>

View File

@@ -62,6 +62,7 @@ private:
std::unique_ptr<tf2_ros::Buffer> tf_buffer_;
std::unique_ptr<tf2_ros::TransformListener> tf_listener_;
std::shared_ptr<dynamic_reconfigure::Server<aruco_pose::DetectorConfig>> dyn_srv_;
bool enabled_ = true;
cv::Ptr<cv::aruco::Dictionary> dictionary_;
cv::Ptr<cv::aruco::DetectorParameters> parameters_;
image_transport::Publisher debug_pub_;
@@ -110,17 +111,14 @@ public:
image_transport::ImageTransport it(nh_);
image_transport::ImageTransport it_priv(nh_priv_);
map_markers_sub_ = nh_.subscribe("map_markers", 1, &ArucoDetect::mapMarkersCallback, this);
dyn_srv_ = std::make_shared<dynamic_reconfigure::Server<aruco_pose::DetectorConfig>>(nh_priv_);
dyn_srv_->setCallback(std::bind(&ArucoDetect::paramCallback, this, std::placeholders::_1, std::placeholders::_2));
debug_pub_ = it_priv.advertise("debug", 1);
markers_pub_ = nh_priv_.advertise<aruco_pose::MarkerArray>("markers", 1);
vis_markers_pub_ = nh_priv_.advertise<visualization_msgs::MarkerArray>("visualization", 1);
img_sub_ = it.subscribeCamera("image_raw", 1, &ArucoDetect::imageCallback, this);
dyn_srv_ = std::make_shared<dynamic_reconfigure::Server<aruco_pose::DetectorConfig>>(nh_priv_);
dynamic_reconfigure::Server<aruco_pose::DetectorConfig>::CallbackType cb;
cb = std::bind(&ArucoDetect::paramCallback, this, std::placeholders::_1, std::placeholders::_2);
dyn_srv_->setCallback(cb);
map_markers_sub_ = nh_.subscribe("map_markers", 1, &ArucoDetect::mapMarkersCallback, this);
NODELET_INFO("ready");
}
@@ -128,6 +126,8 @@ public:
private:
void imageCallback(const sensor_msgs::ImageConstPtr& msg, const sensor_msgs::CameraInfoConstPtr &cinfo)
{
if (!enabled_) return;
Mat image = cv_bridge::toCvShare(msg, "bgr8")->image;
vector<int> ids;
@@ -356,6 +356,7 @@ private:
void paramCallback(aruco_pose::DetectorConfig &config, uint32_t level)
{
enabled_ = config.enabled;
parameters_->adaptiveThreshConstant = config.adaptiveThreshConstant;
parameters_->adaptiveThreshWinSizeMin = config.adaptiveThreshWinSizeMin;
parameters_->adaptiveThreshWinSizeMax = config.adaptiveThreshWinSizeMax;

View File

@@ -124,6 +124,11 @@ public:
vis_markers_pub_ = nh_priv_.advertise<visualization_msgs::MarkerArray>("visualization", 1, true);
debug_pub_ = it_priv.advertise("debug", 1);
publishMarkersFrames();
publishMarkers();
publishMapImage();
vis_markers_pub_.publish(vis_array_);
image_sub_.subscribe(nh_, "image_raw", 1);
info_sub_.subscribe(nh_, "camera_info", 1);
markers_sub_.subscribe(nh_, "markers", 1);
@@ -131,11 +136,6 @@ public:
sync_.reset(new message_filters::Synchronizer<SyncPolicy>(SyncPolicy(10), image_sub_, info_sub_, markers_sub_));
sync_->registerCallback(boost::bind(&ArucoMap::callback, this, _1, _2, _3));
publishMarkersFrames();
publishMarkers();
publishMapImage();
vis_markers_pub_.publish(vis_array_);
NODELET_INFO("ready");
}

View File

@@ -7,6 +7,7 @@ endif()
message(STATUS "Adding vendored aruco_pose OpenCV module")
add_library(_opencv_aruco STATIC
vendor/aruco/src/apriltag_quad_thresh.cpp
vendor/aruco/src/aruco.cpp
vendor/aruco/src/charuco.cpp
vendor/aruco/src/dictionary.cpp
@@ -23,7 +24,7 @@ target_compile_definitions(_opencv_aruco PRIVATE
CV_OVERRIDE=override
)
target_compile_options(_opencv_aruco PRIVATE
-fpic -fPIC
-fpic -fPIC -fvisibility=hidden
)
target_include_directories(_opencv_aruco PUBLIC

View File

@@ -94,7 +94,7 @@ void ptsort_(struct pt *pts, int sz)
// Use stack storage if it's not too big.
cv::AutoBuffer<struct pt, 1024> _tmp_stack(sz);
memcpy(_tmp_stack.data(), pts, sizeof(struct pt) * sz);
memcpy(_tmp_stack, pts, sizeof(struct pt) * sz);
int asz = sz/2;
int bsz = sz - asz;
@@ -470,11 +470,11 @@ int quad_segment_agg(int sz, struct line_fit_pt *lfps, int indices[4]){
int rvalloc_pos = 0;
int rvalloc_size = 3*sz;
cv::AutoBuffer<struct remove_vertex, 0> rvalloc_(std::max(1, rvalloc_size));
memset(rvalloc_.data(), 0, sizeof(rvalloc_[0]) * rvalloc_.size()); // TODO Add AutoBuffer zero fill
struct remove_vertex *rvalloc = rvalloc_.data();
memset(rvalloc_, 0, sizeof(rvalloc_[0]) * rvalloc_.size()); // TODO Add AutoBuffer zero fill
struct remove_vertex *rvalloc = rvalloc_;
cv::AutoBuffer<struct segment, 0> segs_(std::max(1, sz)); // TODO Add AutoBuffer zero fill
memset(segs_.data(), 0, sizeof(segs_[0]) * segs_.size());
struct segment *segs = segs_.data();
memset(segs_, 0, sizeof(segs_[0]) * segs_.size());
struct segment *segs = segs_;
// populate with initial entries
for (int i = 0; i < sz; i++) {
@@ -753,8 +753,8 @@ int fit_quad(const Ptr<DetectorParameters> &_params, const Mat im, zarray_t *clu
// efficiently computed for any contiguous range of indices.
cv::AutoBuffer<struct line_fit_pt, 64> lfps_(sz);
memset(lfps_.data(), 0, sizeof(lfps_[0]) * lfps_.size()); // TODO Add AutoBuffer zero fill
struct line_fit_pt *lfps = lfps_.data();
memset(lfps_, 0, sizeof(lfps_[0]) * lfps_.size()); // TODO Add AutoBuffer zero fill
struct line_fit_pt *lfps = lfps_;
for (int i = 0; i < sz; i++) {
struct pt *p;

View File

@@ -1,4 +1,4 @@
# Information: https://clover.coex.tech/en/aruco.html
# Information: https://clover.coex.tech/aruco
import rospy
from clover import srv

View File

@@ -0,0 +1,11 @@
# Information: https://clover.coex.tech/en/simple_offboard.html#gettelemetry
import rospy
from clover import srv
rospy.init_node('flight')
get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry)
# Print drone's state
print(get_telemetry())

View File

@@ -1,4 +1,4 @@
# Information: https://clover.coex.tech/en/leds.html
# Information: https://clover.coex.tech/led
import rospy
from clover.srv import SetLEDEffect
@@ -7,19 +7,25 @@ rospy.init_node('leds')
set_effect = rospy.ServiceProxy('led/set_effect', SetLEDEffect) # define proxy to ROS-service
print('Fill red')
set_effect(r=255, g=0, b=0) # fill strip with red color
rospy.sleep(2)
print('Fill green')
set_effect(r=0, g=100, b=0) # fill strip with green color
rospy.sleep(2)
print('Fade to blue')
set_effect(effect='fade', r=0, g=0, b=255) # fade to blue color
rospy.sleep(2)
print('Flash red')
set_effect(effect='flash', r=255, g=0, b=0) # flash twice with red color
rospy.sleep(5)
rospy.sleep(2)
print('Blink white')
set_effect(effect='blink', r=255, g=255, b=255) # blink with white color
rospy.sleep(5)
print('Rainbow')
set_effect(effect='rainbow') # show rainbow

View File

@@ -65,7 +65,7 @@ echo_stamp "#6 Turn on UART"
# https://github.com/RPi-Distro/raspi-config/pull/75
/usr/bin/raspi-config nonint do_serial 1
/usr/bin/raspi-config nonint set_config_var enable_uart 1 /boot/config.txt
/usr/bin/raspi-config nonint set_config_var dtoverlay pi3-disable-bt /boot/config.txt
echo dtoverlay=pi3-disable-bt >> /boot/config.txt
systemctl disable hciuart.service
# After adding to Raspbian OS

View File

@@ -15,7 +15,8 @@
set -e # Exit immidiately on non-zero result
SOURCE_IMAGE="https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2020-08-24/2020-08-20-raspios-buster-arm64-lite.zip"
# https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit
SOURCE_IMAGE="https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-05-28/2021-05-07-raspios-buster-armhf-lite.zip"
export DEBIAN_FRONTEND=${DEBIAN_FRONTEND:='noninteractive'}
export LANG=${LANG:='C.UTF-8'}
@@ -105,7 +106,7 @@ ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/monkey.
# software install
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-software.sh'
# examples
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/examples' '/home/pi/'
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/examples' '/home/pi/' # TODO: symlink?
# network setup
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-network.sh'
# avahi setup

View File

@@ -55,4 +55,7 @@ echo_stamp "Set max space for syslogs"
# https://unix.stackexchange.com/questions/139513/how-to-clear-journalctl
sed -i 's/#SystemMaxUse=/SystemMaxUse=200M/' /etc/systemd/journald.conf
echo_stamp "Move /etc/ld.so.preload out of the way"
mv /etc/ld.so.preload /etc/ld.so.preload.disabled-for-build
echo_stamp "End of init image"

View File

@@ -80,7 +80,7 @@ my_travis_retry sudo -u pi rosdep update
export ROS_IP='127.0.0.1' # needed for running tests
echo_stamp "Reconfiguring Clover repository for simplier unshallowing"
# echo_stamp "Reconfiguring Clover repository for simplier unshallowing"
cd /home/pi/catkin_ws/src/clover
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
@@ -90,8 +90,8 @@ echo_stamp "Installing OpenCV 4.2-compatible ROS packages"
apt install -y --no-install-recommends \
ros-${ROS_DISTRO}-compressed-image-transport=1.14.0-0buster \
ros-${ROS_DISTRO}-cv-bridge=1.15.0-0buster \
ros-${ROS_DISTRO}-cv-camera=0.5.0-0buster \
ros-${ROS_DISTRO}-image-publisher=1.15.2-0buster \
ros-${ROS_DISTRO}-cv-camera=0.5.1-0buster \
ros-${ROS_DISTRO}-image-publisher=1.15.3-0buster \
ros-${ROS_DISTRO}-web-video-server=0.2.1-0buster
apt-mark hold \
ros-${ROS_DISTRO}-compressed-image-transport \
@@ -100,6 +100,9 @@ ros-${ROS_DISTRO}-cv-camera \
ros-${ROS_DISTRO}-image-publisher \
ros-${ROS_DISTRO}-web-video-server
echo_stamp "Installing libboost-dev" # https://travis-ci.org/github/CopterExpress/clover/jobs/766318908#L6536
my_travis_retry apt-get install -y --no-install-recommends libboost-dev libboost-all-dev
echo_stamp "Build and install Clover"
cd /home/pi/catkin_ws
# Don't try to install gazebo_ros
@@ -109,7 +112,7 @@ my_travis_retry pip3 install wheel
my_travis_retry pip3 install -r /home/pi/catkin_ws/src/clover/clover/requirements.txt
source /opt/ros/${ROS_DISTRO}/setup.bash
# Don't build simulation plugins for actual drone
catkin_make -j2 -DCMAKE_BUILD_TYPE=Release -DCATKIN_BLACKLIST_PACKAGES=clover_gazebo_plugins
catkin_make -j2 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCATKIN_BLACKLIST_PACKAGES=clover_gazebo_plugins
echo_stamp "Install clever package (for backwards compatibility)"
cd /home/pi/catkin_ws/src/clover/builder/assets/clever
@@ -119,6 +122,7 @@ rm -rf build # remove build artifacts
echo_stamp "Build Clover documentation"
cd /home/pi/catkin_ws/src/clover
NPM_CONFIG_UNSAFE_PERM=true npm install gitbook-cli -g
NPM_CONFIG_UNSAFE_PERM=true gitbook fetch 3.2.3 && npm i npm@3.10.10 --prefix=~/.gitbook/versions/3.2.3/ # fixing https://travis-ci.org/github/CopterExpress/clover/jobs/766541125#L932
NPM_CONFIG_UNSAFE_PERM=true gitbook install
gitbook build
touch node_modules/CATKIN_IGNORE docs/CATKIN_IGNORE _book/CATKIN_IGNORE clover/www/CATKIN_IGNORE apps/CATKIN_IGNORE # ignore documentation files by catkin
@@ -131,7 +135,9 @@ my_travis_retry apt-get install -y --no-install-recommends \
ros-${ROS_DISTRO}-usb-cam \
ros-${ROS_DISTRO}-vl53l1x \
ros-${ROS_DISTRO}-ws281x \
ros-${ROS_DISTRO}-rosshow
ros-${ROS_DISTRO}-rosshow \
ros-${ROS_DISTRO}-cmake-modules \
ros-${ROS_DISTRO}-image-view
# TODO move GeographicLib datasets to Mavros debian package
echo_stamp "Install GeographicLib datasets (needed for mavros)" \
@@ -145,6 +151,9 @@ catkin_make run_tests #&& catkin_test_results
echo_stamp "Change permissions for catkin_ws"
chown -Rf pi:pi /home/pi/catkin_ws
echo_stamp "Change permissions for examples"
chown -Rf pi:pi /home/pi/examples
echo_stamp "Setup ROS environment"
cat << EOF >> /home/pi/.bashrc
LANG='C.UTF-8'

View File

@@ -64,15 +64,14 @@ echo "APT::Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries
echo_stamp "Install apt keys & repos"
# TODO: This STDOUT consist 'OK'
curl http://deb.coex.tech/aptly_repo_signing.key 2> /dev/null | apt-key add -
apt-get update \
&& apt-get install --no-install-recommends -y dirmngr > /dev/null \
&& 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/opencv4 buster main" > /etc/apt/sources.list.d/opencv3.list
echo "deb http://deb.coex.tech/ros buster main" > /etc/apt/sources.list.d/rpi-ros-melodic.list
echo "deb http://deb.coex.tech/clover buster main" > /etc/apt/sources.list.d/clover.list
wget -O - 'http://packages.coex.tech/key.asc' | apt-key add -
echo 'deb http://packages.coex.tech buster main' >> /etc/apt/sources.list
echo_stamp "Update apt cache"
@@ -82,6 +81,7 @@ apt-get update
# Let's retry fetching those packages several times, just in case
echo_stamp "Software installing"
my_travis_retry apt-get install --no-install-recommends -y cmake-data=3.13.4-1 cmake=3.13.4-1 # FIXME: using older CMake due to https://travis-ci.org/github/CopterExpress/clover/jobs/764367665#L6984
my_travis_retry apt-get install --no-install-recommends -y \
unzip \
zip \
@@ -94,8 +94,9 @@ lsof \
git \
dnsmasq \
tmux \
tree \
vim \
cmake \
libjpeg8 \
tcpdump \
libpoco-dev \
libzbar0 \
@@ -122,9 +123,10 @@ sed -i "s/updates_available//" /usr/share/byobu/status/status
echo_stamp "Installing pip"
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip2.py
python3 get-pip.py
python get-pip.py
rm get-pip.py
python get-pip2.py
rm get-pip.py get-pip2.py
#my_travis_retry pip install --upgrade pip
#my_travis_retry pip3 install --upgrade pip
@@ -134,6 +136,7 @@ pip3 --version
echo_stamp "Install and enable Butterfly (web terminal)"
echo_stamp "Workaround for tornado >= 6.0 breaking butterfly"
export CRYPTOGRAPHY_DONT_BUILD_RUST=1
my_travis_retry pip3 install tornado==5.1.1
my_travis_retry pip3 install butterfly
my_travis_retry pip3 install butterfly[systemd]
@@ -145,15 +148,16 @@ my_travis_retry pip3 install --prefer-binary rpi_ws281x
echo_stamp "Setup Monkey"
mv /etc/monkey/sites/default /etc/monkey/sites/default.orig
mv /root/monkey /etc/monkey/sites/default
sed -i 's/SymLink Off/SymLink On/' /etc/monkey/monkey.conf
systemctl enable monkey.service
echo_stamp "Install Node.js"
cd /home/pi
wget https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-arm64.tar.gz
tar -xzf node-v10.15.0-linux-arm64.tar.gz
cp -R node-v10.15.0-linux-arm64/* /usr/local/
rm -rf node-v10.15.0-linux-arm64/
rm node-v10.15.0-linux-arm64.tar.gz
wget --no-verbose https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-armv6l.tar.gz
tar -xzf node-v10.15.0-linux-armv6l.tar.gz
cp -R node-v10.15.0-linux-armv6l/* /usr/local/
rm -rf node-v10.15.0-linux-armv6l/
rm node-v10.15.0-linux-armv6l.tar.gz
echo_stamp "Installing ptvsd"
my_travis_retry pip install ptvsd

View File

@@ -20,9 +20,16 @@ export ROS_DISTRO='noetic'
export ROS_IP='127.0.0.1'
source /opt/ros/${ROS_DISTRO}/setup.bash
source /home/pi/catkin_ws/devel/setup.bash
systemctl start roscore
cd /home/pi/catkin_ws/src/clover/builder/test/
./tests.sh
./tests.py
./tests_py3.py
[[ $(./test_qr.py) == "Found QRCODE with data Проверка Unicode with center at x=66.0, y=66.0" ]]
[[ $(./tests_clever.py) == "Warning: clever package is renamed to clover" ]] # test backwards compatibility
systemctl stop roscore
echo "Move /etc/ld.so.preload back to its original position"
mv /etc/ld.so.preload.disabled-for-build /etc/ld.so.preload

View File

@@ -3,15 +3,16 @@
# Perform a "standalone install" in a Docker container
set -e
# Step 1: Install pip
apt update
apt install -y curl
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 # https://github.com/osrf/docker_images/issues/535
apt-get update
apt-get install -y curl
if [ "x${ROS_PYTHON_VERSION}" = "x3" ]; then
PYTHON=python3
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
else
PYTHON=python
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
fi
${PYTHON} ./get-pip.py
# Step 1.5: Add deb.coex.tech to apt
@@ -40,7 +41,7 @@ ws281x:
ubuntu:
${CODENAME}: [ros-${ROS_DISTRO}-ws281x]
EOF
apt update
apt-get update
rosdep update
# Step 2: Run rosdep to install all dependencies
@@ -60,3 +61,6 @@ ${PYTHON} -m pip install --upgrade pytest
cd /root/catkin_ws
source devel/setup.bash
catkin_make run_tests && catkin_test_results
# Step 5: Install packages
catkin_make install

BIN
builder/test/qr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

42
builder/test/test_qr.py Executable file
View File

@@ -0,0 +1,42 @@
#!/usr/bin/env python3
# Test QG recognition example
# Should be synced with the documentation: /docs/en/camera.md, /docs/ru/camera.md
# TODO: use real ROS topics
import rospy
from pyzbar import pyzbar
from cv_bridge import CvBridge
from sensor_msgs.msg import Image
bridge = CvBridge()
# rospy.init_node('barcode_test')
# Image subscriber callback function
def image_callback(data):
cv_image = bridge.imgmsg_to_cv2(data, 'bgr8') # OpenCV image
barcodes = pyzbar.decode(cv_image)
for barcode in barcodes:
b_data = barcode.data.decode("utf-8")
b_type = barcode.type
(x, y, w, h) = barcode.rect
xc = x + w/2
yc = y + h/2
print("Found {} with data {} with center at x={}, y={}".format(b_type, b_data, xc, yc))
# rospy.signal_shutdown('done')
# image_sub = rospy.Subscriber('main_camera/image_raw', Image, image_callback, queue_size=1)
# ==============================================================================
# Publish test image
# rospy.sleep(2)
import cv2
img = cv2.imread('qr.png')
image_callback(bridge.cv2_to_imgmsg(img, 'bgr8'))
# image_pub = rospy.Publisher('/main_camera/image_raw', Image, queue_size=1, latch=True)
# image_pub.publish(bridge.cv2_to_imgmsg(img, 'bgr8'))
# rospy.spin()

View File

@@ -4,18 +4,26 @@
import rospy
from geometry_msgs.msg import PoseStamped
from sensor_msgs.msg import Range, BatteryState
import cv2
import cv2.aruco
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import numpy
import mavros
from mavros_msgs.msg import State, StatusText, ExtendedState
from mavros_msgs.msg import State, StatusText, ExtendedState, RCIn, Mavlink
from mavros_msgs.srv import CommandBool, CommandLong, SetMode
from std_srvs.srv import Trigger
from clover.srv import GetTelemetry, Navigate, NavigateGlobal, SetPosition, SetVelocity, \
SetAttitude, SetRates, SetLEDEffect
from led_msgs.srv import SetLEDs
from led_msgs.msg import LEDStateArray, LEDState
from aruco_pose.msg import Marker, MarkerArray, Point2D
import dynamic_reconfigure.client
import tf2_ros
import tf2_geometry_msgs
@@ -25,7 +33,7 @@ import pymavlink
from pymavlink import mavutil
import rpi_ws281x
import pigpio
from espeak import espeak
# from espeak import espeak
from pyzbar import pyzbar
print(cv2.getBuildInformation())

View File

@@ -32,7 +32,7 @@ monkey --version
pigpiod -v
i2cdetect -V
butterfly -h
espeak --version
# espeak --version
mjpg_streamer --version
# ros stuff
@@ -43,6 +43,8 @@ rosversion aruco_pose
rosversion vl53l1x
rosversion mavros
rosversion mavros_extras
rosversion ws281x
rosversion led_msgs
rosversion dynamic_reconfigure
rosversion tf2_web_republisher
rosversion compressed_image_transport
@@ -52,6 +54,8 @@ rosversion usb_cam
rosversion cv_camera
rosversion web_video_server
rosversion rosshow
rosversion nodelet
rosversion image_view
# validate examples are present
[[ $(ls /home/pi/examples/*) ]]

View File

@@ -4,7 +4,9 @@ import os
import sys
import subprocess
EXCLUDE = ('clever4-front-white.png', '.DS_Store', 'clever4-front-black-large.png')
EXCLUDE = ('clever4-front-white.png', 'clever4-front-white-large.png', '.DS_Store',
'clever4-front-black-large.png','clover42-black.png')
code = 0
os.chdir('./docs')

8
clover/CHANGELOG.rst Normal file
View File

@@ -0,0 +1,8 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package clover
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0.21.1 (2020-11-17)
-------------------
* First release of clover package to ROS
* Contributors: Alexey Rogachevskiy, Arthur Golubtsov, Oleg Kalachev

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 2.8.3)
cmake_minimum_required(VERSION 3.0)
project(clover)
## Compile as C++11, supported in ROS Kinetic and newer
@@ -32,7 +32,7 @@ find_package(GeographicLib REQUIRED)
# Workaround for OpenCV 3/4 support
set(_opencv_version 4)
find_package(OpenCV ${_opencv_version} QUIET)
find_package(OpenCV ${_opencv_version} QUIET COMPONENTS calib3d imgproc)
if (NOT OpenCV_FOUND)
message(STATUS "Did not find OpenCV 4, searching for OpenCV 3")
set(_opencv_version 3)

View File

@@ -44,16 +44,12 @@ Alternatively you may change the `fcu_url` property in `mavros.launch` file to p
## Running
To start connection to SITL, use:
```bash
roslaunch clover sitl.launch
```
To start connection to the flight controller, use:
```bash
roslaunch clover clover.launch
```
For the simulation information see the [corresponding article](https://clover.coex.tech/en/simulation.html).
> Note that the package is configured to connect to `/dev/px4fmu` by default (see [previous section](#manual-installation)). Install udev rules or specify path to your FCU device in `mavros.launch`.

View File

@@ -9,14 +9,14 @@
<!-- For additional help go to https://clover.coex.tech/aruco -->
<!-- aruco_detect: detect aruco markers, estimate poses -->
<node name="aruco_detect" pkg="nodelet" if="$(arg aruco_detect)" type="nodelet" args="load aruco_pose/aruco_detect nodelet_manager" output="screen" clear_params="true">
<node name="aruco_detect" pkg="nodelet" if="$(arg aruco_detect)" type="nodelet" args="load aruco_pose/aruco_detect main_camera_nodelet_manager" output="screen" clear_params="true" respawn="true">
<remap from="image_raw" to="main_camera/image_raw"/>
<remap from="camera_info" to="main_camera/camera_info"/>
<remap from="map_markers" to="aruco_map/markers" if="$(arg aruco_map)"/>
<param name="estimate_poses" value="true"/>
<param name="send_tf" value="true"/>
<param name="known_tilt" value="map" if="$(eval placement == 'floor')"/>
<param name="known_tilt" value="map_flipped" if="$(eval position == 'ceiling')"/>
<param name="known_tilt" value="map_flipped" if="$(eval placement == 'ceiling')"/>
<param name="length" value="$(arg length)"/>
<!-- aruco detector parameters -->
<param name="cornerRefinementMethod" value="2"/> <!-- contour refinement -->
@@ -26,7 +26,7 @@
</node>
<!-- aruco_map: estimate aruco map pose -->
<node name="aruco_map" pkg="nodelet" type="nodelet" if="$(arg aruco_map)" args="load aruco_pose/aruco_map nodelet_manager" output="screen" clear_params="true">
<node name="aruco_map" pkg="nodelet" type="nodelet" if="$(arg aruco_map)" args="load aruco_pose/aruco_map main_camera_nodelet_manager" output="screen" clear_params="true" respawn="true">
<remap from="image_raw" to="main_camera/image_raw"/>
<remap from="camera_info" to="main_camera/camera_info"/>
<remap from="markers" to="aruco_detect/markers"/>

View File

@@ -11,8 +11,7 @@
<arg name="rangefinder_vl53l1x" default="true"/>
<arg name="led" default="true"/>
<arg name="blocks" default="false"/>
<arg name="rc" default="true"/>
<arg name="shell" default="true"/>
<arg name="rc" default="false"/>
<arg name="simulator" default="false"/> <!-- flag that we are operating on a simulated drone -->
@@ -37,18 +36,13 @@
<include file="$(find clover)/launch/aruco.launch" if="$(arg aruco)"/>
<!-- optical flow -->
<node pkg="nodelet" type="nodelet" name="optical_flow" args="load clover/optical_flow nodelet_manager" if="$(arg optical_flow)" clear_params="true" output="screen">
<node pkg="nodelet" type="nodelet" name="optical_flow" args="load clover/optical_flow main_camera_nodelet_manager" if="$(arg optical_flow)" clear_params="true" output="screen" respawn="true">
<remap from="image_raw" to="main_camera/image_raw"/>
<remap from="camera_info" to="main_camera/camera_info"/>
<param name="calc_flow_gyro" value="true"/>
<param name="roi_rad" value="0.8"/>
</node>
<!-- main nodelet manager -->
<node pkg="nodelet" type="nodelet" name="nodelet_manager" args="manager" output="screen" clear_params="true">
<param name="num_worker_threads" value="2"/>
</node>
<node pkg="tf2_ros" type="static_transform_publisher" name="map_flipped_frame" args="0 0 0 3.1415926 3.1415926 0 map map_flipped"/>
<!-- simplified offboard control -->
@@ -91,9 +85,6 @@
<param name="use_fake_gcs" value="false"/>
</node>
<!-- Shell access through ROS service -->
<node name="shell" pkg="clover" type="shell" output="screen" if="$(arg shell)"/>
<!-- Update static directory -->
<node pkg="roswww_static" name="roswww_static" type="main.py" clear_params="true">
<param name="default_package" value="clover"/>

View File

@@ -2,7 +2,7 @@
<arg name="ws281x" default="true"/>
<arg name="led_effect" default="true"/>
<arg name="led_notify" default="true"/>
<arg name="led_count" default="58"/>
<arg name="led_count" default="72"/>
<arg name="gpio_pin" default="21"/>
<arg name="simulator" default="false"/>
@@ -36,7 +36,7 @@
posctl: { r: 50, g: 100, b: 220 }
offboard: { r: 220, g: 20, b: 250 }
low_battery: { threshold: 3.6, effect: blink_fast, r: 255, g: 0, b: 0 }
error: { effect: flash, r: 255, g: 0, b: 0 }
error: { effect: flash, r: 255, g: 0, b: 0, ignore: [ "[lpe] vision position timeout" ]}
</rosparam>
</node>
</launch>

View File

@@ -3,6 +3,7 @@
<arg name="direction_z" default="down"/> <!-- direction the camera points: down, up -->
<arg name="direction_y" default="backward"/> <!-- direction the camera cable points: backward, forward -->
<arg name="device" default="/dev/video0"/> <!-- v4l2 device -->
<arg name="simulator" default="false"/>
<node if="$(eval direction_z == 'down' and direction_y == 'backward')" pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 -1.5707963 0 3.1415926 base_link main_camera_optical"/>
@@ -17,9 +18,14 @@
<!-- static_transform_publisher arguments: x y z yaw pitch roll frame_id child_frame_id -->
<!-- <node pkg="tf2_ros" type="static_transform_publisher" name="main_camera_frame" args="0.05 0 -0.07 -1.5707963 0 3.1415926 base_link main_camera_optical"/> -->
<!-- camera nodelet manager -->
<node pkg="nodelet" type="nodelet" name="main_camera_nodelet_manager" args="manager" output="screen" clear_params="true" respawn="true">
<param name="num_worker_threads" value="2"/>
</node>
<!-- camera node -->
<node pkg="nodelet" type="nodelet" name="main_camera" args="load cv_camera/CvCameraNodelet nodelet_manager" clear_params="true" unless="$(arg simulator)">
<param name="device_path" value="/dev/video0"/> <!-- v4l2 device -->
<node pkg="nodelet" type="nodelet" name="main_camera" args="load cv_camera/CvCameraNodelet main_camera_nodelet_manager" launch-prefix="rosrun clover waitfile $(arg device)" clear_params="true" unless="$(arg simulator)" respawn="true">
<param name="device_path" value="$(arg device)"/>
<param name="frame_id" value="main_camera_optical"/>
<param name="camera_info_url" value="file://$(find clover)/camera_info/fisheye_cam.yaml"/>

View File

@@ -6,13 +6,16 @@
<arg name="viz" default="true"/>
<arg name="respawn" default="true"/>
<arg name="distance_sensor_remap" default="rangefinder/range"/>
<arg name="usb_device" default="/dev/px4fmu"/>
<arg name="prefix" default="" unless="$(eval fcu_conn == 'usb')"/>
<arg name="prefix" default="rosrun clover waitfile $(arg usb_device)" if="$(eval fcu_conn == 'usb')"/>
<node pkg="mavros" type="mavros_node" name="mavros" required="false" clear_params="true" respawn="$(arg respawn)" unless="$(eval fcu_conn == 'none')" respawn_delay="1" output="screen">
<node pkg="mavros" type="mavros_node" name="mavros" launch-prefix="$(arg prefix)" required="false" clear_params="true" respawn="$(arg respawn)" unless="$(eval fcu_conn == 'none')" respawn_delay="1" output="screen">
<!-- UART connection -->
<param name="fcu_url" value="/dev/ttyAMA0:921600" if="$(eval fcu_conn is None or fcu_conn == 'uart')"/>
<!-- USB connection -->
<param name="fcu_url" value="/dev/px4fmu" if="$(eval fcu_conn == 'usb')"/>
<param name="fcu_url" value="$(arg usb_device)" if="$(eval fcu_conn == 'usb')"/>
<!-- sitl before PX4 1.9.0 -->
<param name="fcu_url" value="udp://@$(arg fcu_ip):14557" if="$(eval fcu_conn == 'udp')"/>

View File

@@ -1,19 +0,0 @@
<launch>
<!-- clover configuration for testing in sitl -->
<arg name="ip" default="127.0.0.1"/>
<arg name="rosbridge" default="false"/>
<include file="$(find clover)/launch/clover.launch">
<arg name="fcu_conn" value="udp"/>
<arg name="fcu_ip" value="$(arg ip)"/>
<arg name="gcs_bridge" value="false"/>
<arg name="optical_flow" value="false"/>
<arg name="web_video_server" default="false"/>
<arg name="main_camera" default="false"/>
<arg name="rosbridge" value="$(arg rosbridge)"/>
<arg name="aruco" default="false"/>
<arg name="rangefinder_vl53l1x" default="false"/>
<arg name="led" default="false"/>
<arg name="rc" default="false"/>
</include>
</launch>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<package format="3">
<name>clover</name>
<version>0.0.1</version>
<version>0.21.1</version>
<description>The Clover package</description>
<maintainer email="okalachev@gmail.com">Oleg Kalachev</maintainer>

View File

@@ -12,6 +12,7 @@
#include <ros/ros.h>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
#include <clover/SetLEDEffect.h>
@@ -29,6 +30,7 @@ ros::Timer timer;
ros::Time start_time;
double blink_rate, blink_fast_rate, flash_delay, fade_period, wipe_period, rainbow_period;
double low_battery_threshold;
std::vector<std::string> error_ignore;
bool blink_state;
led_msgs::SetLEDs set_leds;
led_msgs::LEDStateArray state, start_state;
@@ -274,6 +276,10 @@ void handleMavrosState(const mavros_msgs::State& msg)
void handleLog(const rosgraph_msgs::Log& log)
{
if (log.level >= rosgraph_msgs::Log::ERROR) {
// check if ignored
for (auto const& str : error_ignore) {
if (log.msg.find(str) != std::string::npos) return;
}
notify("error");
}
}
@@ -302,6 +308,7 @@ int main(int argc, char **argv)
nh_priv.param("rainbow_period", rainbow_period, 5.0);
nh_priv.param("notify/low_battery/threshold", low_battery_threshold, 3.7);
nh_priv.param("notify/error/ignore", error_ignore, {});
ros::service::waitForService("set_leds"); // cannot work without set_leds service
set_leds_srv = nh.serviceClient<led_msgs::SetLEDs>("set_leds", true);

View File

@@ -70,7 +70,6 @@ private:
roi_rad_ = nh_priv.param("roi_rad", 0.0);
calc_flow_gyro_ = nh_priv.param("calc_flow_gyro", false);
img_sub_ = it.subscribeCamera("image_raw", 1, &OpticalFlow::flow, this);
img_pub_ = it_priv.advertise("debug", 1);
flow_pub_ = nh.advertise<mavros_msgs::OpticalFlowRad>("mavros/px4flow/raw/send", 1);
velo_pub_ = nh_priv.advertise<geometry_msgs::TwistStamped>("angular_velocity", 1);
@@ -83,6 +82,8 @@ private:
flow_.distance = -1; // no distance sensor available
flow_.temperature = 0;
img_sub_ = it.subscribeCamera("image_raw", 1, &OpticalFlow::flow, this);
NODELET_INFO("Optical Flow initialized");
}
@@ -152,7 +153,7 @@ private:
cv::Point2d shift = cv::phaseCorrelate(prev_, curr_, hann_, &response);
// Publish raw shift in pixels
static geometry_msgs::Vector3Stamped shift_vec;
geometry_msgs::Vector3Stamped shift_vec;
shift_vec.header.stamp = msg->header.stamp;
shift_vec.header.frame_id = msg->header.frame_id;
shift_vec.vector.x = shift.x;
@@ -179,7 +180,7 @@ private:
double flow_y = atan2(points_undist[0].y, focal_length_y);
// // Convert to FCU frame
static geometry_msgs::Vector3Stamped flow_camera, flow_fcu;
geometry_msgs::Vector3Stamped flow_camera, flow_fcu;
flow_camera.header.frame_id = msg->header.frame_id;
flow_camera.header.stamp = msg->header.stamp;
flow_camera.vector.x = flow_y; // +y means counter-clockwise rotation around Y axis
@@ -198,7 +199,7 @@ private:
if (calc_flow_gyro_) {
try {
auto flow_gyro_camera = calcFlowGyro(msg->header.frame_id, prev_stamp_, msg->header.stamp);
static geometry_msgs::Vector3Stamped flow_gyro_fcu;
geometry_msgs::Vector3Stamped flow_gyro_fcu;
tf_buffer_->transform(flow_gyro_camera, flow_gyro_fcu, fcu_frame_id_);
flow_.integrated_xgyro = flow_gyro_fcu.vector.x;
flow_.integrated_ygyro = flow_gyro_fcu.vector.y;
@@ -206,7 +207,7 @@ private:
} catch (const tf2::TransformException& e) {
// Invalidate previous frame
prev_.release();
return;
goto publish_debug;
}
}
@@ -218,6 +219,10 @@ private:
flow_.quality = (uint8_t)(response * 255);
flow_pub_.publish(flow_);
prev_ = curr_.clone();
prev_stamp_ = msg->header.stamp;
publish_debug:
// Publish debug image
if (img_pub_.getNumSubscribers() > 0) {
// publish debug image
@@ -231,15 +236,12 @@ private:
}
// Publish estimated angular velocity
static geometry_msgs::TwistStamped velo;
geometry_msgs::TwistStamped velo;
velo.header.stamp = msg->header.stamp;
velo.header.frame_id = fcu_frame_id_;
velo.twist.angular.x = flow_.integrated_x / integration_time.toSec();
velo.twist.angular.y = flow_.integrated_y / integration_time.toSec();
velo.twist.angular.x = flow_fcu.vector.x / integration_time.toSec();
velo.twist.angular.y = flow_fcu.vector.y / integration_time.toSec();
velo_pub_.publish(velo);
prev_ = curr_.clone();
prev_stamp_ = msg->header.stamp;
}
}

View File

@@ -496,10 +496,16 @@ inline void checkManualControl()
}
if (check_kill_switch) {
const int KILL_SWITCH_BIT = 12; // https://github.com/PX4/Firmware/blob/c302514a0809b1765fafd13c014d705446ae1113/src/modules/mavlink/mavlink_messages.cpp#L3975
bool kill_switch = manual_control.buttons & (1 << KILL_SWITCH_BIT);
// switch values: https://github.com/PX4/PX4-Autopilot/blob/c302514a0809b1765fafd13c014d705446ae1113/msg/manual_control_setpoint.msg#L3
const uint8_t SWITCH_POS_NONE = 0; // switch is not mapped
const uint8_t SWITCH_POS_ON = 1; // switch activated
const uint8_t SWITCH_POS_MIDDLE = 2; // middle position
const uint8_t SWITCH_POS_OFF = 3; // switch not activated
if (kill_switch)
const int KILL_SWITCH_BIT = 12; // https://github.com/PX4/Firmware/blob/c302514a0809b1765fafd13c014d705446ae1113/src/modules/mavlink/mavlink_messages.cpp#L3975
uint8_t kill_switch = (manual_control.buttons & (0b11 << KILL_SWITCH_BIT)) >> KILL_SWITCH_BIT;
if (kill_switch == SWITCH_POS_ON)
throw std::runtime_error("Kill switch is on");
}
}
@@ -706,7 +712,7 @@ bool serve(enum setpoint_type_t sp_type, float x, float y, float z, float vx, fl
}
if (sp_type == VELOCITY) {
static Vector3Stamped vel;
Vector3Stamped vel;
vel.header.frame_id = frame_id;
vel.header.stamp = stamp;
vel.vector.x = vx;

View File

@@ -53,7 +53,7 @@ void publishZero(const ros::TimerEvent& e)
}
ROS_INFO_THROTTLE(10, "publish zero");
static geometry_msgs::PoseStamped zero;
geometry_msgs::PoseStamped zero;
zero.header.frame_id = local_frame_id;
zero.header.stamp = e.current_real;
zero.pose.orientation.w = 1;

9
clover/src/waitfile Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
# $ ./waitfile <file> <command> <args...>
# wait until <file> appears and then invoke <command> with <args>
echo "wait for file $1"
while [ ! -e "$1" ]; do sleep 1; done;
echo "file $1 appeared"
exec "${@:2}"

View File

@@ -33,19 +33,3 @@ def test_web_video_server(node):
# Python 3
import urllib.request as urllib
urllib.urlopen("http://localhost:8080").read()
def test_shell(node):
execute = rospy.ServiceProxy('exec', srv.Execute)
execute.wait_for_service(5)
res = execute(cmd='echo foo')
assert res.code == 0
assert res.output == 'foo\n'
res = execute(cmd='foo')
assert res.code == 32512
assert res.output == ''
res = execute(cmd='ls foo')
assert res.code == 512
assert res.output == ''

1
clover/www/clover.err Symbolic link
View File

@@ -0,0 +1 @@
/tmp/clover.err

1
clover/www/clover_version Symbolic link
View File

@@ -0,0 +1 @@
/etc/clover_version

View File

@@ -1,3 +1,5 @@
<title>Clover Drone Kit Tools</title>
<h1>Clover Drone Kit Tools</h1>
<ul>
@@ -7,19 +9,20 @@
<li><a href="viz.html">View 3D visualization</a> (<code>ros3djs</code>)</li>
<li><a href="aruco_map.html">3D visualization for markers map</a> (<code>ros3djs</code>)</li>
<li><a href="../clover_blocks/">Blocks programming</a> (<code>Blockly</code>)</li>
<li><a href="clover.err">Clover console</a> (<code>/tmp/clover.err</code>)</li>
</ul>
<div class="version"></div>
<script src="js/roslib.js"></script>
<script type="text/javascript">
document.querySelector("#wvs").href = location.protocol + '//' + location.hostname + ':8080';
document.querySelector("#butterfly").href = location.protocol + '//' + location.hostname + ':57575';
// Determine image version
var ros = new ROSLIB.Ros({ url: 'ws://' + location.hostname + ':9090' });
var exec = new ROSLIB.Service({ ros: ros, name : '/exec', serviceType : 'clover/Execute' });
exec.callService(new ROSLIB.ServiceRequest({ cmd: 'cat /etc/clover_version' }), function(result) {
document.querySelector('.version').innerHTML = 'Version: ' + result.output;
fetch('clover_version').then(function(response) {
if (response.status !== 200) return;
response.text().then(function(text) {
document.querySelector('.version').innerHTML = 'Version: ' + text;
});
});
</script>

View File

@@ -0,0 +1,8 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package clover_blocks
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0.21.1 (2020-11-17)
-------------------
* First release of clover_blocks package to ROS
* Contributors: Oleg Kalachev

View File

@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<package format="2">
<name>clover_blocks</name>
<version>0.0.0</version>
<version>0.21.1</version>
<description>Blockly programming support for Clover</description>
<maintainer email="okalachev@gmail.com">Oleg Kalachev</maintainer>
<license>MIT</license>

View File

@@ -29,7 +29,7 @@
</value>
<value name="Z">
<shadow type="math_number" id="n0ULZn64%k.:,l(,D?TZ">
<field name="NUM">0</field>
<field name="NUM">1</field>
</shadow>
</value>
<value name="ID">

View File

@@ -1,106 +1,91 @@
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="_{V-S5HPBUl]CcJkL1Jw">led_count</variable>
</variables>
<block type="variables_set" id="{)^J~:UMX%D;RWvztWLN" x="113" y="87">
<field name="VAR" id="_{V-S5HPBUl]CcJkL1Jw">led_count</field>
<value name="VALUE">
<block type="math_number" id="V_W$3,VFwZjcc|?|1o`l">
<field name="NUM">58</field>
<block type="controls_whileUntil" id="U1it{GcGuSS:=[xiwZr1" x="113" y="113">
<field name="MODE">WHILE</field>
<value name="BOOL">
<block type="logic_boolean" id="]7ZDRwde}/RqjQCX}aVW">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="controls_whileUntil" id="U1it{GcGuSS:=[xiwZr1">
<field name="MODE">WHILE</field>
<value name="BOOL">
<block type="logic_boolean" id="]7ZDRwde}/RqjQCX}aVW">
<field name="BOOL">TRUE</field>
</block>
<statement name="DO">
<block type="set_effect" id="WI0zqOz/z3].cR/6UWHn">
<field name="EFFECT">FILL</field>
<value name="COLOR">
<shadow type="colour_picker" id="B`6;Xv{s2TFp8Yd=ZpSD">
<field name="COLOUR">#000000</field>
</shadow>
</value>
<statement name="DO">
<block type="set_effect" id="WI0zqOz/z3].cR/6UWHn">
<field name="EFFECT">FILL</field>
<value name="COLOR">
<shadow type="colour_picker" id="B`6;Xv{s2TFp8Yd=ZpSD">
<field name="COLOUR">#000000</field>
<next>
<block type="set_led" id="^Vcs}ki?#ctf7rAchix$">
<value name="INDEX">
<shadow type="math_number" id="U;VWW$[*LOF7Gf,~?YR7">
<field name="NUM">0</field>
</shadow>
</value>
<next>
<block type="set_led" id="^Vcs}ki?#ctf7rAchix$">
<value name="INDEX">
<shadow type="math_number" id="U;VWW$[*LOF7Gf,~?YR7">
<field name="NUM">0</field>
<block type="math_arithmetic" id="AI6PZBd`]_Z%_~4c-%dB">
<field name="OP">MULTIPLY</field>
<value name="A">
<shadow type="math_number" id="|p}X]`SedK3).F/;}NlB">
<field name="NUM">1</field>
</shadow>
<block type="math_arithmetic" id="AI6PZBd`]_Z%_~4c-%dB">
<field name="OP">MULTIPLY</field>
<block type="math_arithmetic" id="-haE#:,cg{-J=NZERA;F">
<field name="OP">DIVIDE</field>
<value name="A">
<shadow type="math_number" id="|p}X]`SedK3).F/;}NlB">
<shadow type="math_number" id="::st;ot}[r]csqceURu*">
<field name="NUM">1</field>
</shadow>
<block type="math_arithmetic" id="-haE#:,cg{-J=NZERA;F">
<field name="OP">DIVIDE</field>
<block type="math_arithmetic" id="a%+LN)F~=Igg+,p02[qo">
<field name="OP">ADD</field>
<value name="A">
<shadow type="math_number" id="::st;ot}[r]csqceURu*">
<shadow type="math_number" id="*yIGN((y)/^z0:f5:VDw">
<field name="NUM">1</field>
</shadow>
<block type="math_arithmetic" id="a%+LN)F~=Igg+,p02[qo">
<field name="OP">ADD</field>
<value name="A">
<shadow type="math_number" id="*yIGN((y)/^z0:f5:VDw">
<field name="NUM">1</field>
</shadow>
<block type="get_yaw" id="mf%77q30bEqNfc/3`Mtb">
<field name="FRAME_ID">MAP</field>
<value name="ID">
<shadow type="math_number" id="xb32G.N#ip`|^Xv*MOmY">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</value>
<value name="B">
<shadow type="math_number" id="T/fTrm;j2Azgav;gI{ZW">
<field name="NUM">180</field>
<block type="get_yaw" id="mf%77q30bEqNfc/3`Mtb">
<field name="FRAME_ID">MAP</field>
<value name="ID">
<shadow type="math_number" id="xb32G.N#ip`|^Xv*MOmY">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</value>
<value name="B">
<shadow type="math_number" id="Wo1/ZCeir,u6/.e1H+BB">
<field name="NUM">360</field>
<shadow type="math_number" id="T/fTrm;j2Azgav;gI{ZW">
<field name="NUM">180</field>
</shadow>
</value>
</block>
</value>
<value name="B">
<shadow type="math_number" id="jENTcXz0C5/=)Xpd!}LL">
<field name="NUM">1</field>
<shadow type="math_number" id="Wo1/ZCeir,u6/.e1H+BB">
<field name="NUM">360</field>
</shadow>
<block type="variables_get" id="Ko,`n=i88FY~`YbQLA?[">
<field name="VAR" id="_{V-S5HPBUl]CcJkL1Jw">led_count</field>
</block>
</value>
</block>
</value>
<value name="COLOR">
<shadow type="colour_picker" id="+vw3bff.5c[=_w,Xm^C(">
<field name="COLOUR">#3366ff</field>
<value name="B">
<shadow type="math_number" id="jENTcXz0C5/=)Xpd!}LL">
<field name="NUM">1</field>
</shadow>
<block type="led_count" id="vM@X8s!xa]v}AaK6PWF5"></block>
</value>
</block>
</value>
<value name="COLOR">
<shadow type="colour_picker" id="+vw3bff.5c[=_w,Xm^C(">
<field name="COLOUR">#3366ff</field>
</shadow>
</value>
<next>
<block type="wait" id="DT%f$bn1*1El5zsgUW8Y">
<value name="TIME">
<shadow type="math_number" id="~Y0hNY[_^#v@aZkE-TH[">
<field name="NUM">0.1</field>
</shadow>
</value>
<next>
<block type="wait" id="DT%f$bn1*1El5zsgUW8Y">
<value name="TIME">
<shadow type="math_number" id="~Y0hNY[_^#v@aZkE-TH[">
<field name="NUM">0.1</field>
</shadow>
</value>
</block>
</next>
</block>
</next>
</block>
</statement>
</next>
</block>
</next>
</statement>
</block>
</xml>
</xml>

View File

@@ -11,7 +11,8 @@
from __future__ import print_function
import rospy
import os
import os, sys
import traceback
import threading
import re
import uuid
@@ -116,7 +117,12 @@ def run(req):
rospy.loginfo('Program forced to stop')
except Exception as e:
rospy.logerr(str(e))
error_pub.publish(str(e))
traceback.print_exc()
etype, value, tb = sys.exc_info()
fmt = traceback.format_exception(etype, value, tb)
fmt.pop(1) # remove 'clover_blocks' file frame
exc_info = ''.join(fmt)
error_pub.publish(str(e) + '\n\n' + exc_info)
rospy.loginfo('Program terminated')
running_lock.release()

View File

@@ -353,6 +353,17 @@ Blockly.Blocks['set_effect'] = {
}
};
Blockly.Blocks['led_count'] = {
init: function () {
this.appendDummyInput()
.appendField("LED count");
this.setOutput(true, "Number");
this.setColour(COLOR_LED);
this.setTooltip("Returns the number of LEDs (configured in led.launch).");
this.setHelpUrl(DOCS_URL + '#' + this.type);
}
};
Blockly.Blocks['take_off'] = {
init: function () {
this.appendValueInput("ALT")
@@ -535,7 +546,7 @@ Blockly.Blocks['gpio_read'] = {
this.setOutput(true, "Boolean");
this.setColour(COLOR_GPIO);
this.setTooltip("Returns if there is voltage on a GPIO pin.");
this.setHelpUrl(DOCS_URL + '#' + this.type);
this.setHelpUrl(DOCS_URL + '#GPIO');
}
};
@@ -552,7 +563,7 @@ Blockly.Blocks['gpio_write'] = {
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip("Set GPIO pin level.");
this.setHelpUrl(DOCS_URL + '#' + this.type);
this.setHelpUrl(DOCS_URL + '#GPIO');
}
};
@@ -568,7 +579,24 @@ Blockly.Blocks['set_servo'] = {
this.setColour(COLOR_GPIO);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip("Set PWM on a GPIO pin to control servo. PWM is specified in range of 5002500 ms.");
this.setHelpUrl(DOCS_URL + '#' + this.type);
this.setTooltip("Set PWM on a GPIO pin to control servo. PWM is specified in range of 5002500 μs.");
this.setHelpUrl(DOCS_URL + '#GPIO');
}
};
Blockly.Blocks['set_duty_cycle'] = {
init: function () {
this.appendValueInput("PIN")
.setCheck("Number")
.appendField("set GPIO pin");
this.appendValueInput("DUTY_CYCLE")
.setCheck("Number")
.appendField("to duty cycle");
this.setInputsInline(true);
this.setColour(COLOR_GPIO);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip("Set PWM duty cycle on a GPIO pin (better to control LEDs, etc). Duty cycle is set in range of 01.");
this.setHelpUrl(DOCS_URL + '#GPIO');
}
};

View File

@@ -106,6 +106,7 @@
<value name="INDEX"><shadow type="math_number"><field name="NUM">0</field></shadow></value>
<value name="COLOR"><shadow type="colour_picker"></shadow></value>
</block>
<block type="led_count"></block>
</category>
<category name="GPIO" colour="#5b97cc">
<block type="gpio_read">
@@ -119,6 +120,10 @@
<value name="PIN"><shadow type="math_number"><field name="NUM">1</field></shadow></value>
<value name="PWM"><shadow type="math_number"><field name="NUM">1500</field></shadow></value>
</block>
<block type="set_duty_cycle">
<value name="PIN"><shadow type="math_number"><field name="NUM">1</field></shadow></value>
<value name="DUTY_CYCLE"><shadow type="math_number"><field name="NUM">0.5</field></shadow></value>
</block>
</category>
<sep></sep>
<category name="Logic" colour="#5b80a5">

View File

@@ -15,7 +15,7 @@ Blockly.Python.addReservedWords('_b,_print');
Blockly.Python.addReservedWords('rospy,srv,Trigger,get_telemetry,navigate,set_velocity,land');
Blockly.Python.addReservedWords('navigate_wait,land_wait,wait_arrival,wait_yaw,get_distance');
Blockly.Python.addReservedWords('pigpio,pi,Range');
Blockly.Python.addReservedWords('SetLEDEffect,set_effect');
Blockly.Python.addReservedWords('SetLEDEffect,set_effect,led_count,get_led_count');
Blockly.Python.addReservedWords('SetLEDs,LEDState,set_leds');
const IMPORT_SRV = `from clover import srv
@@ -87,6 +87,9 @@ function generateROSDefinitions() {
Blockly.Python.definitions_['import_set_led'] = 'from led_msgs.srv import SetLEDs\nfrom led_msgs.msg import LEDState';
code += `set_leds = rospy.ServiceProxy('led/set_leds', SetLEDs, persistent=True)\n`;
}
if (rosDefinitions.ledStateArray) {
Blockly.Python.definitions_['import_led_state_array'] = 'from led_msgs.msg import LEDStateArray';
}
if (rosDefinitions.navigateWait) {
Blockly.Python.definitions_['import_math'] = 'import math';
code += NAVIGATE_WAIT();
@@ -388,29 +391,48 @@ Blockly.Python.set_led = function(block) {
if (/^'(.*)'$/.test(colorCode)) { // is simple string
let color = parseColor(colorCode);
return `set_leds([LEDState(index=${index}, r=${color.r}, g=${color.g}, b=${color.b})])\n`;
return `set_leds([LEDState(index=int(${index}), r=${color.r}, g=${color.g}, b=${color.b})])\n`; // TODO: check for simple int
} else {
let parseColor = Blockly.Python.provideFunction_('parse_color', [PARSE_COLOR]);
return `set_leds([LEDState(index=${index}, **${parseColor}(${colorCode})])\n`;
return `set_leds([LEDState(index=${index}, **${parseColor}(${colorCode}))])\n`;
}
}
const GET_LED_COUNT = `led_count = None
def get_led_count():
global led_count
if led_count is None:
led_count = len(rospy.wait_for_message('led/state', LEDStateArray, timeout=10).leds)
return led_count\n`;
Blockly.Python.led_count = function(block) {
rosDefinitions.ledStateArray = true;
initNode();
Blockly.Python.definitions_['get_led_count'] = GET_LED_COUNT;
return [`get_led_count()`, Blockly.Python.ORDER_FUNCTION_CALL]
}
function pigpio() {
Blockly.Python.definitions_['import_pigpio'] = 'import pigpio';
Blockly.Python.definitions_['init_pigpio'] = 'pi = pigpio.pi()';
}
const GPIO_READ = `\ndef gpio_read(pin):
pi.set_mode(pin, pigpio.INPUT)
return pi.read(pin)\n`;
pi.set_mode(pin, pigpio.INPUT)
return pi.read(pin)\n`;
const GPIO_WRITE = `\ndef gpio_write(pin, level):
pi.set_mode(pin, pigpio.OUTPUT)
pi.write(pin, level)\n`;
pi.set_mode(pin, pigpio.OUTPUT)
pi.write(pin, level)\n`;
const SET_SERVO = `\ndef set_servo(pin, pwm):
pi.set_mode(pin, pigpio.OUTPUT)
pi.set_servo_pulsewidth(pin, pwm)\n`;
pi.set_mode(pin, pigpio.OUTPUT)
pi.set_servo_pulsewidth(pin, pwm)\n`;
const SET_DUTY_CYCLE = `\ndef set_duty_cycle(pin, duty_cycle):
pi.set_mode(pin, pigpio.OUTPUT)
pi.set_PWM_dutycycle(pin, duty_cycle * 255)\n`;
Blockly.Python.gpio_read = function(block) {
pigpio();
@@ -434,3 +456,11 @@ Blockly.Python.set_servo = function(block) {
var pwm = Blockly.Python.valueToCode(block, 'PWM', Blockly.Python.ORDER_NONE);
return `set_servo(${pin}, ${pwm})\n`;
}
Blockly.Python.set_duty_cycle = function(block) {
pigpio();
Blockly.Python.definitions_['set_duty_cycle'] = SET_DUTY_CYCLE;
var pin = Blockly.Python.valueToCode(block, 'PIN', Blockly.Python.ORDER_NONE);
var dutyCycle = Blockly.Python.valueToCode(block, 'DUTY_CYCLE', Blockly.Python.ORDER_NONE);
return `set_duty_cycle(${pin}, ${dutyCycle})\n`;
}

View File

@@ -0,0 +1,9 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package clover_description
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0.21.1 (2020-11-17)
-------------------
* First release of clover_description package to ROS
* Contributors: Alexey Rogachevskiy

View File

@@ -1,6 +1,6 @@
<package format="2">
<name>clover_description</name>
<version>0.0.1</version>
<version>0.21.1</version>
<description>The clover_description package provides URDF models of the Clover series of quadcopters.</description>
<maintainer email="sfalexrog@gmail.com">Alexey Rogachevskiy</maintainer>

View File

@@ -0,0 +1,8 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package clover_simulation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0.21.1 (2020-11-17)
-------------------
* First release of clover_simulation package to ROS
* Contributors: Alexey Rogachevskiy

View File

@@ -52,7 +52,7 @@ target_compile_options(throttling_camera PRIVATE -std=c++11)
add_dependencies(throttling_camera ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})
install(DIRECTORY meshes DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})
install(DIRECTORY models DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})
install(DIRECTORY resources DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})
catkin_install_python(PROGRAMS scripts/aruco_gen

View File

@@ -1,4 +1,5 @@
<launch>
<arg name="type" default="gazebo"/> <!-- gazebo, jmavsim, none (only clover packages) -->
<arg name="mav_id" default="0"/>
<arg name="est" default="ekf2"/> <!-- PX4 estimator: lpe, ekf2 -->
<arg name="vehicle" default="clover"/> <!-- PX4 vehicle configuration: clover, clover_vpe -->
@@ -9,22 +10,22 @@
<arg name="use_clover_physics" default="false"/> <!-- Use inertial parameters from CAD models -->
<!-- Gazebo instance -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<include file="$(find gazebo_ros)/launch/empty_world.launch" if="$(eval type == 'gazebo')">
<!-- Workaround for crashes in VMware -->
<env name="SVGA_VGPU10" value="0"/>
<arg name="gui" value="true"/>
<arg name="world_name" value="$(find clover_simulation)/resources/worlds/clover.world"/>
<arg name="world_name" value="$(find clover_simulation)/resources/worlds/clover_aruco.world"/>
<arg name="verbose" value="true"/>
</include>
<!-- PX4 instance -->
<node name="sitl_$(arg mav_id)" pkg="px4" type="px4" output="screen" args="$(find px4)/ROMFS/px4fmu_common -s etc/init.d-posix/rcS -i $(arg mav_id)">
<node name="sitl_$(arg mav_id)" pkg="px4" type="px4" output="screen" args="$(find px4)/ROMFS/px4fmu_common -s etc/init.d-posix/rcS -i $(arg mav_id)" unless="$(eval type == 'none')">
<env name="PX4_SIM_MODEL" value="$(arg vehicle)"/>
<env name="PX4_ESTIMATOR" value="$(arg est)"/>
</node>
<!-- Clover model -->
<include file="$(find clover_description)/launch/spawn_drone.launch">
<include file="$(find clover_description)/launch/spawn_drone.launch" if="$(eval type == 'gazebo')">
<arg name="main_camera" value="$(arg main_camera)"/>
<arg name="rangefinder" value="$(arg rangefinder)"/>
<arg name="led" value="$(arg led)"/>
@@ -32,10 +33,20 @@
<arg name="use_clover_physics" value="$(arg use_clover_physics)"/>
</include>
<node name="jmavsim" pkg="px4" type="jmavsim_run.sh" output="screen" if="$(eval type == 'jmavsim')"/>
<param name="use_sim_time" value="false" if="$(eval type == 'jmavsim')"/>
<!-- Clover services -->
<include file="$(find clover)/launch/clover.launch">
<arg name="simulator" value="true"/>
<arg name="fcu_conn" value="sitl"/>
<arg name="fcu_ip" value="127.0.0.1"/>
<arg name="gcs_bridge" value=""/>
<arg name="rc" default="false"/>
<arg name="web_video_server" default="false" if="$(eval type == 'jmavsim')"/>
<arg name="main_camera" default="false" if="$(eval type == 'jmavsim')"/>
<arg name="aruco" default="false" if="$(eval type == 'jmavsim')"/>
<arg name="led" default="false" if="$(eval type == 'jmavsim')"/>
</include>
</launch>

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Some files were not shown because too many files have changed in this diff Show More