Compare commits

..

244 Commits

Author SHA1 Message Date
Oleg Kalachev
621b70711d Typo 2024-06-18 00:52:59 +03:00
Oleg Kalachev
2a2fbe3bed Add vision_msgs package 2024-06-18 00:52:30 +03:00
Oleg Kalachev
add15ac2fe Remove libcamera_ros from dependencies as this package is not commonly available 2024-06-16 13:15:49 +03:00
Oleg Kalachev
abe6f5cf0f Add rosdep key for libcamera_ros package 2024-06-16 12:22:27 +03:00
Oleg Kalachev
b04d8311bd Add tool for rescaling camera info file
Generate fisheye_cam camera info for all the
different resolutions
2024-06-16 08:33:25 +03:00
Oleg Kalachev
b7e8acefb4 Use libcamera_ros camera driver
v4l2 doesn't work on Bookworm with RPi camera
2024-06-16 08:32:44 +03:00
Oleg Kalachev
caa974b71c Fix running rosbridge_suite adding ROS_OV_OVERRIDE env variable
It gives error 'Could not detect OS' (from roslib) on Bookworm without that
2024-05-22 14:17:59 +03:00
Oleg Kalachev
3f00001d9a Merge branch 'master' into bookworm 2024-05-09 20:40:34 +03:00
Oleg Kalachev
1a9e689b8c Disable exiting on error in init scripts 2024-05-08 20:09:09 +03:00
Oleg Kalachev
1e2f92f165 Fix Wi-Fi creation 2024-05-08 20:07:10 +03:00
Oleg Kalachev
d087d1c953 Try to fix 2024-05-07 22:26:25 +03:00
Oleg Kalachev
01c495597b Upload image to artifacts if this is not master 2024-05-07 21:39:42 +03:00
Oleg Kalachev
8c8fdcda54 Try to fix Butterfly installation 2024-05-07 21:33:06 +03:00
Oleg Kalachev
fbe353b767 Bring back CRYPTOGRAPHY_DONT_BUILD_RUST while installing Butterfly 2024-05-07 02:24:48 +03:00
Oleg Kalachev
4748d34fa2 Fix pi home directory permissions to make Monkey work 2024-05-07 01:53:01 +03:00
Oleg Kalachev
afe46ab7e5 Clean initial scripts, fix UART setup 2024-05-07 01:01:40 +03:00
Oleg Kalachev
d7e8d22bf6 Fix ws281x version checks as it was updated 2024-04-28 22:15:09 +03:00
Oleg Kalachev
ee4165ea26 Use 7z image archive to reduce size 2024-04-28 00:06:36 +03:00
Oleg Kalachev
0a265db50e Update upload-artifact action version 2024-04-28 00:06:21 +03:00
Oleg Kalachev
04d4dcaa1c Compress image to zip using 7z with ultra level to reduce archive size 2024-04-27 22:14:45 +03:00
Oleg Kalachev
6adfc038a2 Print size of image archive in human style 2024-04-27 22:08:09 +03:00
Oleg Kalachev
5877235e9a Fix adding pi user 2024-04-27 16:19:15 +03:00
Oleg Kalachev
b70c4387f7 Fix 2024-04-27 11:26:51 +03:00
Oleg Kalachev
00fb98c0c2 Create Wi-Fi AP using NetworkManager 2024-04-27 00:55:11 +03:00
Oleg Kalachev
249800bc87 Fix config.txt path to the new 2024-04-27 00:54:43 +03:00
Oleg Kalachev
465bdd743b Enable ssh using raspi-config 2024-04-27 00:54:18 +03:00
Oleg Kalachev
028d1ecd82 Create pi user which is not created by default now 2024-04-27 00:54:06 +03:00
Oleg Kalachev
70439f172d selfcheck.py: address situation when individual cells voltage is unknown
When length of cell_voltage array is 1, it means that cell voltage is
unknown and overall voltage is reported instead. Consider this situation
gathering the number of cells from PX4 parameters.
2024-04-25 22:20:01 +03:00
Oleg Kalachev
dacaa8ebde docs: minor fixes 2024-04-25 11:12:29 +03:00
Oleg Kalachev
a5309765f1 Some changes to markdownlint config 2024-04-25 11:04:55 +03:00
Oleg Kalachev
2e86ed199a Implement possibility to upload image from repo not named clover 2024-04-25 10:50:02 +03:00
Oleg Kalachev
ad14822684 Fix running aruco_detect without aruco_map enabled
use_map_markers parameter blocked aruco_detect from running
2024-04-25 10:48:20 +03:00
Oleg Kalachev
4517cdf595 Merge branch 'cleanup-build' into bookworm 2024-04-18 07:46:34 +03:00
Oleg Kalachev
dc2293e960 More build scripts cleanup 2024-04-18 06:51:11 +03:00
Oleg Kalachev
1b191d9cf0 Major build scripts cleanup
Including removing echo_stamp, which is not needed
2024-04-18 06:49:46 +03:00
Oleg Kalachev
41b6311d9e Enable echo in image-init, move disabling ld preload to the top 2024-04-18 06:17:31 +03:00
Oleg Kalachev
b39fa10ba9 One more fix to working with fstab 2024-04-18 06:13:12 +03:00
Oleg Kalachev
2c62fa3583 Fix work with fstab 2024-04-18 06:08:50 +03:00
Oleg Kalachev
8dcdae1259 Remove editing /boot/firmware/cmdline.txt 2024-04-18 05:36:19 +03:00
Oleg Kalachev
be27a6d3a3 Correct cmdline.txt and fstab editing for the new OS version 2024-04-18 05:04:43 +03:00
Oleg Kalachev
d8c26c114e Add installation of xxd which is needed for generating SSID 2024-04-18 05:04:12 +03:00
Oleg Kalachev
ef43b04a8b Update Raspberry Pi OS to 2024-03-15 2024-04-17 08:27:27 +03:00
Oleg Kalachev
960a105cba Disable full remove of apt cache 2024-04-17 06:48:59 +03:00
Oleg Kalachev
4fcd0eaf2f Cleanup apt including all caches in the end of the build 2024-04-16 04:06:30 +03:00
Oleg Kalachev
f9026fa0e3 Cleanup /tmp in image build 2024-04-15 07:04:41 +03:00
Oleg Kalachev
cd5a9d1176 Cleanup pip cache in image build 2024-04-15 07:03:59 +03:00
Oleg Kalachev
cfe430676b Clean npm cache after building docs 2024-04-15 07:02:36 +03:00
Oleg Kalachev
3bccfd8c06 Do apt-get clean after autoremove 2024-04-15 06:45:59 +03:00
Oleg Kalachev
fef8a3299e Try to use autoremove to reduce image size 2024-04-14 04:12:14 +03:00
Oleg Kalachev
63deabe01d Code cleanup 2024-04-14 04:11:21 +03:00
Oleg Kalachev
b021afff7e Make apt-get clean verbose 2024-04-14 04:10:45 +03:00
Oleg Kalachev
b3d28723d7 Upload image artifact on on manual workflow run 2024-04-14 04:08:03 +03:00
Oleg Kalachev
22c9d238d4 Don't install boost explicitly 2024-04-14 01:42:28 +03:00
Oleg Kalachev
eb1a6f4349 Upload image to artifacts 2024-04-14 01:42:06 +03:00
Oleg Kalachev
a41004d294 Merge remote-tracking branch 'origin/master' into bookworm 2024-04-13 23:56:50 +03:00
Oleg Kalachev
e788bf3d4d Merge noetic-bookworm into noetic-rosdep-clover, remove noetic-bullseye 2024-04-13 23:54:40 +03:00
Oleg Kalachev
6e8a0d14b3 Disable back catkin_test_results, cleanup 2024-04-13 23:29:33 +03:00
Oleg Kalachev
78465fc93f Replace ptvsd with debugpy
ptvsd is deprecated
2024-04-13 22:43:57 +03:00
Oleg Kalachev
bf8482a6ce Enable catkin_test_results call 2024-04-13 22:39:27 +03:00
Oleg Kalachev
4659772d40 Cleanup 2024-04-13 22:38:52 +03:00
Oleg Kalachev
62cade7404 Add correct librocos resolve to rosdep 2024-04-13 22:38:35 +03:00
Oleg Kalachev
fa7a05bdb1 Bring back printing largest installed packages 2024-04-13 22:36:48 +03:00
Oleg Kalachev
936efa985d Make clover rosdep file more priority to fix build 2024-04-13 21:32:55 +03:00
Oleg Kalachev
5580bd754c Don't run roscore in image validate script 2024-04-13 21:31:38 +03:00
Oleg Kalachev
50c295ed3e Wait until roscore is terminated before script end 2024-04-13 20:10:12 +03:00
Oleg Kalachev
0f76999214 Stop roscore using killall before ending the validate script 2024-04-13 20:08:55 +03:00
Oleg Kalachev
f7ae2c21a4 Add some sleep to try to fix busy error 2024-04-13 19:16:36 +03:00
Oleg Kalachev
fae431c890 Disable printing largest packages 2024-04-13 03:55:41 +03:00
Oleg Kalachev
fdbd989d0e Move recovering ld.so.preload file at the end of the build 2024-04-13 03:55:09 +03:00
Oleg Kalachev
649e596479 Disable compressed_image_transport 2024-04-12 23:50:38 +03:00
Oleg Kalachev
d9d85f5979 Skip python3-catkin-pkg-modules and python3-rosdep-modules via rosdep file 2024-04-12 20:54:18 +03:00
Oleg Kalachev
bcf355acf9 Ignore python3-rosdep-modules dependency 2024-04-12 20:23:36 +03:00
Oleg Kalachev
89912c67b8 Ignore python3-catkin-pkg-modules dependency 2024-04-12 20:20:53 +03:00
Oleg Kalachev
05c773b297 Bring back rosdep init 2024-04-12 19:39:28 +03:00
Oleg Kalachev
51d6d78b3d Fix 2024-04-12 17:29:54 +03:00
Oleg Kalachev
dd5dff7922 Bring back installing rosdep with pip 2024-04-12 16:44:04 +03:00
Oleg Kalachev
94c102b5e0 Install catkin before sourcing setup.bash 2024-04-12 01:33:32 +03:00
Oleg Kalachev
70026fef74 Disable rosdep init 2024-04-12 01:16:43 +03:00
Oleg Kalachev
41f81f35e6 Don't install rosdep using pip 2024-04-12 00:25:52 +03:00
Oleg Kalachev
e7ae321b54 Add ros-base installation 2024-04-11 22:56:50 +03:00
Oleg Kalachev
5b35df41b1 Print out environment variables right after setup.bash call 2024-04-11 22:21:53 +03:00
Oleg Kalachev
51af09bde8 Print out environment variables for debug 2024-04-11 21:06:06 +03:00
Oleg Kalachev
3d17433ba8 Print catkin_ws contents for debug 2024-04-11 19:42:48 +03:00
Oleg Kalachev
2e174b2bc0 Print out caktin path 2024-04-11 16:42:57 +03:00
Oleg Kalachev
9bff8b47dc Start roscore directly instead of using systemd 2024-04-11 16:41:52 +03:00
Oleg Kalachev
cceb62cfc4 Remove butterfly installation workarounds 2024-04-11 05:45:14 +03:00
Oleg Kalachev
4e111fa299 Check butterfly installation via butterfly.server.py 2024-04-11 04:03:45 +03:00
Oleg Kalachev
ba7f15b1d7 Allow pip usage globally 2024-04-11 03:03:34 +03:00
Oleg Kalachev
30e9d111ec Fix pip installation check 2024-04-11 03:01:14 +03:00
Oleg Kalachev
8087bb26c9 Re-arrange installed software list 2024-04-11 03:00:27 +03:00
Oleg Kalachev
3ef0065ab2 Bring back Monkey setup 2024-04-11 02:57:27 +03:00
Oleg Kalachev
d0fa541d13 Validate espeak is installed 2024-04-11 02:50:34 +03:00
Oleg Kalachev
31dde130b4 Update cv_camera version for check 2024-04-11 02:49:27 +03:00
Oleg Kalachev
bced762f77 Bring back ipython 2024-04-11 02:49:15 +03:00
Oleg Kalachev
2d8ac74f8d Remove Python 2 tests 2024-04-11 01:55:30 +03:00
Oleg Kalachev
0e2f1b9ac1 Bring back rosbridge-suite 2024-04-11 01:02:55 +03:00
Oleg Kalachev
f4733e7209 Remove not existing wno rosbridge-suite package installation 2024-04-11 00:58:13 +03:00
Oleg Kalachev
2cfdf36768 Bring mjpeg-streamer installation back 2024-04-11 00:29:06 +03:00
Oleg Kalachev
24961393a5 Add missing pluginlib dependency to aruco_pose 2024-04-10 21:21:33 +03:00
Oleg Kalachev
f16273c1ae Add rosserial_server to noetic-bookworm.yaml 2024-04-10 21:21:22 +03:00
Oleg Kalachev
9f20448831 Fix shellcheck errors 2024-04-10 21:21:09 +03:00
Oleg Kalachev
343a09a242 Remove printing out /opt/ros 2024-04-10 01:11:05 +03:00
Oleg Kalachev
9355790333 Print out /opt/ros contents 2024-04-05 19:42:25 +03:00
Oleg Kalachev
d07a55334f Change a bit the way of enabling pip packages installation 2024-04-05 19:42:17 +03:00
Oleg Kalachev
72197392fa Enable installing packages with pip 2024-04-05 19:14:55 +03:00
Oleg Kalachev
c91da69552 Add some correct dependencies resolves for bookworm 2024-04-05 18:47:22 +03:00
Oleg Kalachev
8e09a1243a Bring back monkey 2024-04-05 18:47:01 +03:00
Oleg Kalachev
f6594dee62 Try to fix rosdep update another way 2024-04-05 16:00:19 +03:00
Oleg Kalachev
a3fad60aae Try to fix rosdep update from pi: enable preserve-env 2024-04-05 15:31:47 +03:00
Oleg Kalachev
e548cade90 Try to fix rosdep update from pi 2024-04-05 14:54:54 +03:00
Oleg Kalachev
407ab40614 Bring back installation python's pigpio, systemd, espeak, and python3-dev 2024-04-05 14:37:45 +03:00
Oleg Kalachev
90d447734d Set ROS_OS_OVERRIDE 2024-04-05 14:33:37 +03:00
Oleg Kalachev
f5a7dc2b94 Disable packages.ros.org and install rosdep using pip3 2024-04-05 14:21:24 +03:00
Oleg Kalachev
2085b68cec Bring back ws281x 2024-04-05 02:39:21 +03:00
Oleg Kalachev
c5bf88d858 Don't install ws281 for now 2024-04-05 00:39:35 +03:00
Oleg Kalachev
5cf42ee650 Disable monkey 2024-04-04 23:35:48 +03:00
Oleg Kalachev
a5a87f8590 Disable mjpeg-streamer installation 2024-04-04 23:21:28 +03:00
Oleg Kalachev
8c119b8bc9 Use packages.ros.org/ros/ubuntu buster 2024-04-04 23:11:39 +03:00
Oleg Kalachev
b1f36bf966 Disable package.ros.org 2024-04-04 23:06:48 +03:00
Oleg Kalachev
100eca7210 Correctly add coex package source considering Debian release 2024-04-04 23:02:57 +03:00
Oleg Kalachev
3a53b86707 Install liboost-all-dev 2024-04-04 21:51:37 +03:00
Oleg Kalachev
ed623c2e97 Correct debian version codename 2024-04-04 21:16:27 +03:00
Oleg Kalachev
956490b9bc Disable holding opencv 4.2 compatible packages 2024-04-04 21:01:09 +03:00
Oleg Kalachev
5790d4de01 Fix used rosdep file 2024-04-04 20:44:47 +03:00
Oleg Kalachev
bea3149ac5 Fix 2024-04-04 20:29:39 +03:00
Oleg Kalachev
8c56da44fd --break-system-packages 2024-04-04 20:17:17 +03:00
Oleg Kalachev
26bff21253 Don't install Python 2's pip 2024-04-04 19:54:31 +03:00
Oleg Kalachev
eedb028232 Install pip using apt 2024-04-04 19:36:52 +03:00
Oleg Kalachev
c1a7fc7765 Echo commands while installing software 2024-04-04 19:18:01 +03:00
Oleg Kalachev
4ccd5003ad Disable python-pigpio installation 2024-04-03 00:48:39 +03:00
Oleg Kalachev
9dde4d0c51 Disable libjpeg8 install 2024-04-03 00:43:00 +03:00
Oleg Kalachev
23c795f21f Disable ipython installation 2024-04-02 23:52:40 +03:00
Oleg Kalachev
05fc8ff626 Disable some missing packages installation 2024-04-02 23:46:00 +03:00
Oleg Kalachev
380b395c72 Remove cmake=3.13.4-1 installation 2024-04-02 23:08:21 +03:00
Oleg Kalachev
b01f090453 Switch to use prebuilt packages 2024-04-02 23:00:40 +03:00
Oleg Kalachev
f1e9e50617 Install future python module 2024-03-08 05:03:37 +03:00
Oleg Kalachev
f0048f804a Set ROS_PYTHON_VERSION to 3 2024-03-08 04:35:42 +03:00
Oleg Kalachev
857d134919 Install cmake 2024-03-08 04:07:20 +03:00
Oleg Kalachev
8f47a26a1b Add Poco library 2024-03-08 03:23:53 +03:00
Oleg Kalachev
77b195c203 Merge branch 'master' into bookworm 2024-03-08 03:22:53 +03:00
Oleg Kalachev
bd99923f6b Install python3-empy 2024-03-04 22:13:10 +03:00
Oleg Kalachev
521c248c90 Fix 2024-03-04 21:27:33 +03:00
Oleg Kalachev
7a4f611e47 Fix running install_geographiclib_datasets script 2024-03-04 21:10:27 +03:00
Oleg Kalachev
39cd8d5827 Fix ROS build 2024-03-04 20:47:00 +03:00
Oleg Kalachev
6fa9442963 Replace libgeographic-dev dependency as suggested 2024-03-01 03:25:27 +03:00
Oleg Kalachev
ce4d84d8c1 Build most of the Clover dependency packages 2024-03-01 01:25:49 +03:00
Oleg Kalachev
0356133ab7 Merge branch 'master' into bookworm 2024-02-21 15:07:29 +03:00
Oleg Kalachev
147d6238d5 Fix patching 2024-02-21 00:19:26 +03:00
Oleg Kalachev
9576141376 Apply needed patches 2024-02-20 23:22:27 +03:00
Oleg Kalachev
39f0be296e Set OS to bullseye when doing rosdep update and install
Disable building packages
2024-02-20 21:04:05 +03:00
Oleg Kalachev
cf6f8f3488 Install Catkin using pip 2024-02-06 23:09:38 +03:00
Oleg Kalachev
4b059f3145 Skip log4cxx in rosdep 2024-02-06 21:55:01 +03:00
Oleg Kalachev
ce3b6c0cc7 Fix 2024-02-06 21:44:28 +03:00
Oleg Kalachev
9d0499159a Add --break-system-packages flag to pip 2024-02-06 21:34:31 +03:00
Oleg Kalachev
3906bc0318 Install pip using apt 2024-02-06 21:05:14 +03:00
Oleg Kalachev
ee9b3d8fe7 Use --break-system-packages flag for pip 2024-02-06 20:47:07 +03:00
Oleg Kalachev
aac5b25c60 Install rosdep and rosinstall-generator using pip 2024-02-06 20:26:09 +03:00
Oleg Kalachev
5211630542 Uncomment add ROS apt sources 2024-02-06 16:49:43 +03:00
Oleg Kalachev
bb2afd5e9d Fix 2024-02-06 16:38:19 +03:00
Oleg Kalachev
88668897f9 Fix 2024-02-06 16:26:08 +03:00
Oleg Kalachev
36daaddfb2 Correct RPI_IMAGE_NAME 2024-02-06 16:16:51 +03:00
Oleg Kalachev
b5e2073007 Add --allow-releaseinfo-change flag 2024-02-06 16:11:21 +03:00
Oleg Kalachev
1154969af2 Merge branch 'master' into bookworm 2024-02-06 16:09:52 +03:00
Oleg Kalachev
225d8e85ff Foo 2024-02-06 16:08:21 +03:00
Oleg Kalachev
bf29e87cea Use unxz to unarchive image 2024-02-06 16:06:51 +03:00
Oleg Kalachev
24c15f6e65 Decompress image using xz 2024-02-06 16:03:54 +03:00
Oleg Kalachev
d6acb0a202 Base Debian version is update to bookworm 2024-02-06 15:48:25 +03:00
Oleg Kalachev
6defbea453 Update Raspberry Pi OS to 2023-12-11 2024-02-06 15:46:51 +03:00
Oleg Kalachev
9e8470a3cb Install TinyXML 2022-10-11 16:05:47 +06:00
Oleg Kalachev
e9cd3d917c Try to fix --install-layout not recognized issue 2022-10-08 19:54:19 +06:00
Oleg Kalachev
373cefb01c Remove fakeroot as we are root 2022-10-07 22:51:34 +06:00
Oleg Kalachev
d0039ea23f Typo 2022-10-07 20:44:20 +06:00
Oleg Kalachev
bd25818aa7 Add rosdep file to help bloom-generate resolve Bullseye dependencies 2022-10-07 14:34:30 +06:00
Oleg Kalachev
a73457c5c5 Debug 2022-10-07 14:08:10 +06:00
Oleg Kalachev
c8a4d49577 Try to build from catkin workdspace 2022-10-06 23:24:12 +06:00
Oleg Kalachev
123379b60e Fix 2022-10-06 23:23:21 +06:00
Oleg Kalachev
71d3144691 fix 2022-10-06 15:18:14 +06:00
Oleg Kalachev
d306a9d96d Try 2022-10-05 17:45:49 +06:00
Oleg Kalachev
1d514cf5ca Merge branch 'master' into bullseye 2022-10-05 17:42:06 +06:00
Oleg Kalachev
96adadeae9 Put Debian build log to file 2022-09-24 18:14:44 +03:00
Oleg Kalachev
a1061ff32c Add ls 2022-09-24 13:46:34 +03:00
Oleg Kalachev
e9d13b865c Build Debian packages 2022-09-24 12:58:56 +03:00
Oleg Kalachev
b655a4274e List built ROS packages 2022-09-23 23:10:20 +03:00
Oleg Kalachev
d58a59afab Fix 2022-09-23 22:48:19 +03:00
Oleg Kalachev
d0fabd8b3e Fix 2022-09-23 19:40:06 +03:00
Oleg Kalachev
b50207e5e9 Install ROS to /opt/ros/ 2022-09-23 18:44:18 +03:00
Oleg Kalachev
97797a9178 Fix 2022-09-23 15:53:20 +03:00
Oleg Kalachev
1e8569b664 Fix 2022-09-23 15:35:23 +03:00
Oleg Kalachev
21cc47eecb Fix 2022-09-23 15:20:09 +03:00
Oleg Kalachev
4c56adafb2 Fix 2022-09-23 03:17:30 +03:00
Oleg Kalachev
8a524a8aa5 Fix 2022-09-23 03:11:47 +03:00
Oleg Kalachev
5493445747 Manually install catkin_pkg 2022-09-23 03:04:30 +03:00
Oleg Kalachev
0ef26334dc Fix 2022-09-23 02:45:52 +03:00
Oleg Kalachev
8d83e8faa3 Add ROS sources for Ubuntu 2022-09-23 02:36:01 +03:00
Oleg Kalachev
9b90214d9d Try to fix 2022-09-23 01:53:56 +03:00
Oleg Kalachev
224f6cee27 Fix 2022-09-23 01:38:59 +03:00
Oleg Kalachev
ff04b2fb75 Fix 2022-09-23 01:21:12 +03:00
Oleg Kalachev
473444ae33 Fix 2022-09-23 01:13:41 +03:00
Oleg Kalachev
168734ad8c Remove sources list before rosdep init 2022-09-23 00:56:49 +03:00
Oleg Kalachev
4e7b2e379a Restore rosdep init 2022-09-23 00:50:29 +03:00
Oleg Kalachev
ad1d51fd9e Fix 2022-09-23 00:42:20 +03:00
Oleg Kalachev
57c415db22 Add os flag to rosdep update 2022-09-23 00:32:35 +03:00
Oleg Kalachev
568386a758 Install GeographicLib datasets in build workflow 2022-09-23 00:31:21 +03:00
Oleg Kalachev
55f8f4fa1a aruco_detect: check for duplicates in marker transforms, send all transforms in one message 2022-09-23 00:31:19 +03:00
Oleg Kalachev
dd0dd6b5c1 aruco_pose: add duplicate test to CMakeLists.txt 2022-09-23 00:31:19 +03:00
Oleg Kalachev
4c40bea226 aruco_pose: implement test for TF_REPEATED_DATA when multiple markers with the same ID 2022-09-23 00:31:18 +03:00
Oleg Kalachev
6b3f5c3690 Simplify script for testing native Noetic build 2022-09-23 00:31:18 +03:00
Oleg Kalachev
63067823ee Show number of messages received in topic viewer 2022-09-23 00:31:17 +03:00
Oleg Kalachev
880f67c3bc Fix error when viewing messages without header in topic viewer 2022-09-23 00:31:17 +03:00
Oleg Kalachev
839aeb6a26 clover.launch: make force_init argument overridable externally 2022-09-23 00:31:16 +03:00
Oleg Kalachev
b123585756 mavros.launch: fix fcu_url for hitl connection 2022-09-23 00:31:16 +03:00
Oleg Kalachev
fa4757a4c8 mavros.launch: add hitl option for fcu_conn argument 2022-09-23 00:31:15 +03:00
Oleg Kalachev
28d77aea33 selfcheck.py: skip boot duration check on not Clover image 2022-09-23 00:31:15 +03:00
Oleg Kalachev
0425e1da24 optical_flow: timeout for previous frame
For cases when optical flow is dynamically disabled and enabled back
2022-09-23 00:31:14 +03:00
Oleg Kalachev
692d424a0b Remove obsolete note from readme 2022-09-23 00:31:14 +03:00
Oleg Kalachev
1c9fd7b126 docs: remove some obsolete notes about renaming 2022-09-23 00:31:13 +03:00
oponfil
a1752c1642 docs: update connection article (en) (#363)
* Add instructions on how to connect FMU to Raspberry Pi by UART

* Remove sitl connection section

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2022-09-23 00:31:13 +03:00
oponfil
0dbd2d1048 docs: update connection article (#362)
* Add instructions on how to connect FMU to Raspberry Pi by UART

* Remove inactual sitl connection

Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2022-09-23 00:31:12 +03:00
oponfil
79408861a2 docs: docs: correction in mavros article on global setpoints (en) (#358)
Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2022-09-23 00:31:12 +03:00
oponfil
063f2c3c13 docs: correction in mavros article on global setpoints (#357)
Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
2022-09-23 00:31:10 +03:00
Oleg Kalachev
68819bbd34 docs: update PX4 to v1.12.3 in native simulation installation article 2022-09-23 00:31:10 +03:00
Oleg Kalachev
3a5c3d5bb4 docs: comment out link to install_software.sh in simulation installation manual
The link confuses users so they often try to run it
2022-09-23 00:31:09 +03:00
Oleg Kalachev
032eb52a88 Fix python-pymavlink installation adding some lxml dependencies
Otherwise installation falls with:
Error: Please make sure the libxml2 and libxslt development packages are installed
2022-09-23 00:31:09 +03:00
Oleg Kalachev
7dc24437cf vpe_publisher: fix reading map and base link frame_id from mavros 2022-09-23 00:31:08 +03:00
Oleg Kalachev
1ccb756931 Update docs job runner to ubuntu 22.04
https://github.com/actions/runner-images/issues/6002
2022-09-23 00:31:08 +03:00
Oleg Kalachev
b5268a7b62 Deploy docs using build artifacts instead of gh-pages branch (#452)
https://github.blog/changelog/2021-12-16-github-pages-using-github-actions-for-builds-and-deployments-for-public-repositories/
2022-09-23 00:31:07 +03:00
Elena Seliverstova
a0663d6b36 Update the contact link in Telegram 2022-09-23 00:31:07 +03:00
Elena Seliverstova
26f2c966ff Update the contact link in Telegram 2022-09-23 00:31:06 +03:00
Elena Seliverstova
4517186862 docs: add new articles about CopterHack2023 (#450) 2022-09-23 00:31:06 +03:00
Oleg Kalachev
5236afe035 Make PX4 node required in the sim 2022-09-23 00:31:05 +03:00
Oleg Kalachev
fe1707d0c3 simulator: change COM_RCL_EXCEPT param to enable offboard flights without RC on PX4 v1.13 2022-09-23 00:31:05 +03:00
Oleg Kalachev
03854d2589 Implement dynamic reconfiguration for aruco_map (#448) 2022-09-23 00:31:04 +03:00
Niels Hoppe
28339e65af Add missing dependency 2022-09-23 00:31:04 +03:00
Oleg Kalachev
e11f0cf054 Minor whitespace fix 2022-09-23 00:31:03 +03:00
Oleg Kalachev
c1045cd11e Add shortcut launch-file to run the simulation 2022-09-23 00:31:03 +03:00
Oleg Kalachev
aa3373da58 docs: redirect for blocks programming article 2022-09-23 00:31:01 +03:00
Oleg Kalachev
a4ad408228 Restore rosdep update 2022-09-23 00:09:09 +03:00
Oleg Kalachev
0d436637cd Trigger build 2022-09-22 23:59:23 +03:00
Oleg Kalachev
18daff1044 Fix 2022-06-18 00:11:51 +03:00
Oleg Kalachev
b96d17a746 Fix 2022-06-18 00:00:47 +03:00
Oleg Kalachev
1506d3fd96 Fix 2022-06-17 23:55:15 +03:00
Oleg Kalachev
eec0833707 Merge branch 'master' into bullseye 2022-06-17 22:14:41 +03:00
Oleg Kalachev
f9883baa87 builder: script to build ROS from scratch 2022-02-09 19:42:18 +03:00
Oleg Kalachev
3bebecf91e Update Raspberry Pi OS to 2022-01-28 (bullseye) 2022-02-05 19:40:06 +03:00
32 changed files with 1210 additions and 377 deletions

View File

@@ -17,14 +17,24 @@ jobs:
- 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
# - name: Compress image
# run: |
# cd images && sudo chmod -R 777 . && zip -9 $(echo clover_*).zip clover_* && ls -lh . && unzip -l clover_*.zip
- name: Compress image using 7-Zip
run: |
cd images && sudo chmod -R 777 . && zip -9 $(echo clover_*).zip clover_* && ls -l . && unzip -l clover_*.zip
cd images && sudo chmod -R 777 . && 7z a -mx=9 $(echo *_*).7z *_* && ls -lh . && 7z l *_*.7z
- name: Upload image
uses: softprops/action-gh-release@v1
if: ${{ github.event_name == 'release' }}
with:
files: images/clover_*.zip
files: images/*_*.zip
prerelease: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload image to artifacts
if: ${{ github.event_name == 'workflow_dispatch' || github.ref != 'refs/heads/master' }}
uses: actions/upload-artifact@v4
with:
name: image
path: images/*_*.7z
retention-days: 1

View File

@@ -113,7 +113,9 @@
"VMware",
"DuoCam"
],
"code_blocks": false
"code_blocks": false,
"html_elements": false
},
"MD045": false
"MD045": false,
"MD051": false
}

View File

@@ -28,6 +28,7 @@
<depend>sensor_msgs</depend>
<depend>rostest</depend>
<depend>dynamic_reconfigure</depend>
<depend>pluginlib</depend>
<depend condition="$ROS_PYTHON_VERSION == 2">python-docopt</depend>
<depend condition="$ROS_PYTHON_VERSION == 3">python3-docopt</depend>

View File

@@ -5,7 +5,7 @@ Requires=roscore.service
[Service]
User=pi
ExecStart=/bin/bash -c ". /home/pi/catkin_ws/devel/setup.sh; \
ROS_HOSTNAME=`hostname`.local exec stdbuf -o L roslaunch clover clover.launch --wait --screen --skip-log-check \
ROS_HOSTNAME=`hostname`.local ROS_OS_OVERRIDE=debian:bookworm exec stdbuf -o L roslaunch clover clover.launch --wait --screen --skip-log-check \
2> >(tee /tmp/clover.err)"
ExecStartPre=+rm /var/log/clover.log

View File

@@ -13,70 +13,38 @@
# copies or substantial portions of the Software.
#
set -e # Exit immidiately on non-zero result
echo_stamp() {
# TEMPLATE: echo_stamp <TEXT> <TYPE>
# TYPE: SUCCESS, ERROR, INFO
# More info there https://www.shellhacks.com/ru/bash-colors/
TEXT="$(date '+[%Y-%m-%d %H:%M:%S]') $1"
TEXT="\e[1m$TEXT\e[0m" # BOLD
case "$2" in
SUCCESS)
TEXT="\e[32m${TEXT}\e[0m";; # GREEN
ERROR)
TEXT="\e[31m${TEXT}\e[0m";; # RED
*)
TEXT="\e[34m${TEXT}\e[0m";; # BLUE
esac
echo -e ${TEXT}
}
# https://www.raspberrypi.com/documentation/computers/configuration.html
##################################################
# Configure hardware interfaces
##################################################
# 1. Enable sshd
echo_stamp "#1 Turn on sshd"
touch /boot/ssh
# /usr/bin/raspi-config nonint do_ssh 0
echo "--- Enable sshd"
/usr/bin/raspi-config nonint do_ssh 0
# 2. Enable GPIO
echo_stamp "#2 GPIO enabled by default"
echo "--- GPIO enabled by default"
# 3. Enable I2C
echo_stamp "#3 Turn on I2C"
echo "--- Enable I2C"
/usr/bin/raspi-config nonint do_i2c 0
# 4. Enable SPI
echo_stamp "#4 Turn on SPI"
echo "--- Enable SPI"
/usr/bin/raspi-config nonint do_spi 0
# 5. Enable raspicam
echo_stamp "#5 Turn on raspicam"
echo "--- Enable raspicam"
/usr/bin/raspi-config nonint do_camera 0
# 6. Enable hardware UART
echo_stamp "#6 Turn on UART"
echo "--- Setup UART"
# Temporary solution
# 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
echo dtoverlay=pi3-disable-bt >> /boot/config.txt
/usr/bin/raspi-config nonint do_serial_hw 0
/usr/bin/raspi-config nonint do_serial_cons 1
echo dtoverlay=pi3-disable-bt >> /boot/firmware/config.txt
systemctl disable hciuart.service
# After adding to Raspbian OS
# https://github.com/RPi-Distro/raspi-config/commit/d6d9ecc0d9cbe4aaa9744ae733b9cb239e79c116
#/usr/bin/raspi-config nonint do_serial 2
# 7. Enable V4L driver http://robocraft.ru/blog/electronics/3158.html
echo "--- Enable v4l2 driver"
# http://robocraft.ru/blog/electronics/3158.html
#echo "bcm2835-v4l2" >> /etc/modules
echo_stamp "#7 Turn on v4l2 driver"
if ! grep -q "^bcm2835-v4l2" /etc/modules;
then printf "bcm2835-v4l2\n" >> /etc/modules
fi
echo_stamp "#8 End of configure hardware interfaces"

View File

@@ -13,63 +13,31 @@
# copies or substantial portions of the Software.
#
set -e # Exit immidiately on non-zero result
echo_stamp() {
# TEMPLATE: echo_stamp <TEXT> <TYPE>
# TYPE: SUCCESS, ERROR, INFO
# More info there https://www.shellhacks.com/ru/bash-colors/
TEXT="$(date '+[%Y-%m-%d %H:%M:%S]') $1"
TEXT="\e[1m$TEXT\e[0m" # BOLD
case "$2" in
SUCCESS)
TEXT="\e[32m${TEXT}\e[0m";; # GREEN
ERROR)
TEXT="\e[31m${TEXT}\e[0m";; # RED
*)
TEXT="\e[34m${TEXT}\e[0m";; # BLUE
esac
echo -e ${TEXT}
}
echo "--- Fix home directory permissions"
chmod +rx /home/pi
NEW_SSID='clover-'$(head -c 100 /dev/urandom | xxd -ps -c 100 | sed -e "s/[^0-9]//g" | cut -c 1-4)
echo_stamp "Setting SSID to ${NEW_SSID}"
# TODO: Use wpa_cli insted direct file edit
# FIXME: We rely on raspberrypi-net-mods to copy our file to /etc/wpa_supplicant.
# This is not very reliable, but seems to fix our rfkill problem.
cat << EOF >> /boot/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=GB
network={
ssid="${NEW_SSID}"
psk="cloverwifi"
mode=2
proto=WPA RSN
key_mgmt=WPA-PSK
pairwise=CCMP
group=CCMP
auth_alg=OPEN
}
EOF
echo "--- Creating Wi-Fi AP with SSID=${NEW_SSID}"
nmcli con add type wifi ifname wlan0 mode ap con-name clover ssid $NEW_SSID autoconnect true \
&& nmcli con modify clover 802-11-wireless.band bg \
&& nmcli con modify clover ipv4.method shared ipv4.address 192.168.11.1/24 \
&& nmcli con modify clover ipv6.method disabled \
&& nmcli con modify clover wifi-sec.key-mgmt wpa-psk \
&& nmcli con modify clover wifi-sec.psk "cloverwifi" \
&& systemctl disable dnsmasq # disable dnsmasq to avoid conflicts with NetworkManager's dnsmasq
NEW_HOSTNAME=$(echo ${NEW_SSID} | tr '[:upper:]' '[:lower:]')
echo_stamp "Setting hostname to $NEW_HOSTNAME"
hostnamectl set-hostname $NEW_HOSTNAME
sed -i 's/127\.0\.1\.1.*/127.0.1.1\t'${NEW_HOSTNAME}' '${NEW_HOSTNAME}'.local/g' /etc/hosts
echo "--- Setting hostname to $NEW_HOSTNAME"
hostnamectl set-hostname $NEW_HOSTNAME \
&& sed -i 's/127\.0\.1\.1.*/127.0.1.1\t'${NEW_HOSTNAME}' '${NEW_HOSTNAME}'.local/g' /etc/hosts
# .local (mdns) hostname added to make it accesable when wlan and ethernet interfaces are down
echo_stamp "Enable ROS services"
echo "--- Enable ROS services"
systemctl enable roscore
systemctl enable clover
echo_stamp "Harware setup"
echo "--- Harware setup"
/root/hardware_setup.sh
echo_stamp "Remove init scripts"
echo "--- Remove init scripts"
rm /root/init_rpi.sh /root/hardware_setup.sh
echo_stamp "End of initialization of the image"

File diff suppressed because it is too large Load Diff

122
builder/image-build-ros.sh Executable file
View File

@@ -0,0 +1,122 @@
#! /usr/bin/env bash
#
# Script for building ROS packages from scratch
#
# Copyright (C) 2022 Copter Express Technologies
#
# Author: Oleg Kalachev <okalachev@gmail.com>
#
# Distributed under MIT License (available at https://opensource.org/licenses/MIT).
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
set -ex # exit on error, echo commands
# http://wiki.ros.org/Installation/Source
export ROS_DISTRO=noetic
. /etc/os-release # set $VERSION_CODENAME to Debian release code name
export ROS_OS_OVERRIDE=debian:$VERSION_CODENAME
export ROS_PYTHON_VERSION=3
export CLOVER_DEPS="tf tf2 tf2_ros tf2_geometry_msgs geometry_msgs sensor_msgs visualization_msgs libgeographiclib-dev mavros mavros_extras cv_camera cv_bridge rosbridge_server web_video_server tf2_web_republisher libxml2 libxslt python3-lxml dynamic_reconfigure image_transport image_proc image_geometry python-pymavlink ros_pytest"
export CLOVER_DEPS="$CLOVER_DEPS rostest python3-docopt image_publisher"
echo "=== Building ROS from scratch"
#echo "--- Adding sources"
# echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list
# curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
#cp /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d # https://askubuntu.com/a/1408456
apt-get update
apt-get install -y python3-distutils build-essential cmake git python3-pip python3-rosinstall-generator python3-vcstools python3-empy libpoco-dev
# install vcstool using pip
# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python3 get-pip.py && rm get-pip.py
pip3 install -U --break-system-packages vcstool rosdep rosinstall-generator catkin-pkg future
# sudo rosdep init
# rm /etc/ros/rosdep/sources.list.d/20-default.list
rosdep init
rosdep update --os=debian:bullseye
# rm /etc/ros/rosdep/sources.list.d/20-default.list && rosdep init
# rosdep --os=debian:$VERSION_CODENAME update
echo "--- Create Catkin workspace to build ROS package"
mkdir ~/ros_catkin_ws
cd ~/ros_catkin_ws
echo "--- Download ROS sources"
rosinstall_generator ros_base $CLOVER_DEPS --rosdistro $ROS_DISTRO --deps --tar > noetic.rosinstall
mkdir ./src
vcs import --input noetic.rosinstall ./src
# https://answers.ros.org/question/343367/catkin-package-dependencies-issue-when-installing-ros-melodic-on-raspberry-pi-4/
#sudo apt remove python-rospkg
#sudo apt remove python-catkin-pkg
##sudo apt --fix-broken install
#sudo apt-get autoremove
#echo "--- Install catkin_pkg"
#cd
#git clone https://github.com/ros-infrastructure/catkin_pkg.git
#cd catkin_pkg
#python3 setup.py install
#cd ~/ros_catkin_ws
echo "--- Resolve dependencies"
rosdep install --from-paths ./src --ignore-packages-from-source --rosdistro $ROS_DISTRO -y --os=debian:bullseye --skip-keys="python3-catkin-pkg-modules libboost-thread python3-rosdep-modules" || true
echo "--- Install missing dependencies"
apt-get install -y liborocos-kdl1.5 geographiclib-tools libgeographiclib-dev
echo "-- Install geographiclib datasets"
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
chmod +x install_geographiclib_datasets.sh
./install_geographiclib_datasets.sh
echo "--- Apply patches"
wget https://github.com/ros/rosconsole/pull/58.patch
patch -p1 -d src/rosconsole < 58.patch
wget https://github.com/ros/ros_comm/pull/2353.patch
patch -p2 -d src/ros_comm < 2353.patch
wget https://github.com/AJahueyM/web_video_server/commit/5b722eb0822bcc3fe45fefe7b393b87bfe004417.patch
patch -p1 -d src/web_video_server < 5b722eb0822bcc3fe45fefe7b393b87bfe004417.patch
echo "--- Build ROS"
# https://github.com/ros/catkin/issues/863#issuecomment-290392074
./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release
# -DSETUPTOOLS_DEB_LAYOUT=OFF \
# --install-space=/opt/ros/$ROS_DISTRO
# source ~/ros_catkin_ws/install_isolated/setup.bash
#source /opt/ros/$ROS_DISTRO/setup.bash
#
#echo "--- List built ROS packages"
#set +x
#rospack list-names | while read line; do echo $line `rosversion $line`; done
#set -x
#
#echo "--- Build Debian packages"
#apt-get install -y python3-bloom debhelper dpkg-dev libtinyxml-dev
#
## add rosdep file to help bloom-generate resolve missing bookworm dependencies
#echo "yaml file:///etc/ros/rosdep/noetic-rosdep-clover.yaml" >> /etc/ros/rosdep/sources.list.d/20-default.list
#rosdep update
#
#pip3 install setuptools==45.2.0 # https://github.com/ros/catkin/issues/863#issuecomment-1000446018
#
#for file in `find . -name "package.xml" -not -path "*/debian/*"`; do
# cd $(dirname ${file})
# rm -rf debian
# bloom-generate rosdebian --os-name debian --os-version $VERSION_CODENAME --ros-distro $ROS_DISTRO --debug
# debian/rules binary # fakeroot is not needed as we are root
# cd -
#done
ls

View File

@@ -13,42 +13,22 @@
# copies or substantial portions of the Software.
#
set -e # Exit immidiately on non-zero result
set -ex # exit on error, echo commands
# 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"
SOURCE_IMAGE="https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-03-15/2024-03-15-raspios-bookworm-armhf-lite.img.xz"
export DEBIAN_FRONTEND=${DEBIAN_FRONTEND:='noninteractive'}
export LANG=${LANG:='C.UTF-8'}
export LC_ALL=${LC_ALL:='C.UTF-8'}
echo_stamp() {
# TEMPLATE: echo_stamp <TEXT> <TYPE>
# TYPE: SUCCESS, ERROR, INFO
# More info there https://www.shellhacks.com/ru/bash-colors/
TEXT="$(date '+[%Y-%m-%d %H:%M:%S]') $1"
TEXT="\e[1m$TEXT\e[0m" # BOLD
case "$2" in
SUCCESS)
TEXT="\e[32m${TEXT}\e[0m";; # GREEN
ERROR)
TEXT="\e[31m${TEXT}\e[0m";; # RED
*)
TEXT="\e[34m${TEXT}\e[0m";; # BLUE
esac
echo -e ${TEXT}
}
BUILDER_DIR="/builder"
REPO_DIR="${BUILDER_DIR}/repo"
SCRIPTS_DIR="${REPO_DIR}/builder"
IMAGES_DIR="${REPO_DIR}/images"
[[ ! -d ${SCRIPTS_DIR} ]] && (echo_stamp "Directory ${SCRIPTS_DIR} doesn't exist" "ERROR"; exit 1)
[[ ! -d ${IMAGES_DIR} ]] && mkdir ${IMAGES_DIR} && echo_stamp "Directory ${IMAGES_DIR} was created successful" "SUCCESS"
[[ ! -d ${SCRIPTS_DIR} ]] && (echo "Error: directory ${SCRIPTS_DIR} doesn't exist"; exit 1)
[[ ! -d ${IMAGES_DIR} ]] && mkdir ${IMAGES_DIR} && echo "Directory ${IMAGES_DIR} was created successful"
if [[ -z ${TRAVIS_TAG} ]]; then IMAGE_VERSION="$(cd ${REPO_DIR}; git log --format=%h -1)"; else IMAGE_VERSION="${TRAVIS_TAG}"; fi
# IMAGE_VERSION="${TRAVIS_TAG:=$(cd ${REPO_DIR}; git log --format=%h -1)}"
@@ -64,15 +44,17 @@ get_image() {
local RPI_IMAGE_NAME=$(echo ${RPI_ZIP_NAME} | sed 's/zip/img/')
if [ ! -e "${BUILD_DIR}/${RPI_ZIP_NAME}" ]; then
echo_stamp "Downloading original Linux distribution"
echo "--- Downloading original Linux distribution"
wget --progress=dot:giga -O ${BUILD_DIR}/${RPI_ZIP_NAME} $2
echo_stamp "Downloading complete" "SUCCESS" \
else echo_stamp "Linux distribution already donwloaded"; fi
echo "--- Downloading complete" "SUCCESS"
else
echo "Linux distribution already downloaded"
fi
echo_stamp "Unzipping Linux distribution image" \
&& unzip -p ${BUILD_DIR}/${RPI_ZIP_NAME} ${RPI_IMAGE_NAME} > $1 \
&& echo_stamp "Unzipping complete" "SUCCESS" \
|| (echo_stamp "Unzipping was failed!" "ERROR"; exit 1)
echo "--- Unzipping Linux distribution image"
apt-get update --allow-releaseinfo-change
apt-get install -y xz-utils
unxz --stdout ${BUILD_DIR}/${RPI_ZIP_NAME} > $1
}
get_image ${IMAGE_PATH} ${SOURCE_IMAGE}
@@ -120,6 +102,7 @@ ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/launch.
# ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/kinetic-ros-clover.rosinstall' '/home/pi/ros_catkin_ws/'
# Add rename script
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-ros.sh' ${REPO_URL} ${IMAGE_VERSION} false false ${NUMBER_THREADS}
#${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-build-ros.sh'
${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-validate.sh'
${BUILDER_DIR}/image-resize.sh ${IMAGE_PATH}

View File

@@ -12,50 +12,33 @@
# copies or substantial portions of the Software.
#
set -e # Exit immidiately on non-zero result
set -ex # exit on error, echo commands
echo_stamp() {
# TEMPLATE: echo_stamp <TEXT> <TYPE>
# TYPE: SUCCESS, ERROR, INFO
echo "--- Move /etc/ld.so.preload out of the way"
mv /etc/ld.so.preload /etc/ld.so.preload.disabled-for-build
# More info there https://www.shellhacks.com/ru/bash-colors/
TEXT="$(date '+[%Y-%m-%d %H:%M:%S]') $1"
TEXT="\e[1m$TEXT\e[0m" # BOLD
case "$2" in
SUCCESS)
TEXT="\e[32m${TEXT}\e[0m";; # GREEN
ERROR)
TEXT="\e[31m${TEXT}\e[0m";; # RED
*)
TEXT="\e[34m${TEXT}\e[0m";; # BLUE
esac
echo -e ${TEXT}
}
echo_stamp "Write Clover information"
echo "--- Create pi user"
echo 'pi:$6$c70VpvPsVNCG0YR5$l5vWWLsLko9Kj65gcQ8qvMkuOoRkEagI90qi3F/Y7rm8eNYZHW8CY6BOIKwMH7a3YYzZYL90zf304cAHLFaZE0' > /boot/userconf.txt
echo "--- Write Clover information"
# Clover image version
echo "$1" >> /etc/clover_version
# Origin image file name
echo "${2%.*}" >> /etc/clover_origin
echo_stamp "Write magic script to /etc/rc.local"
echo "--- Write magic script to /etc/rc.local"
MAGIC_SCRIPT="sudo /root/init_rpi.sh; sudo sed -i '/sudo \\\/root\\\/init_rpi.sh/d' /etc/rc.local && sudo reboot"
sed -i "19a${MAGIC_SCRIPT}" /etc/rc.local
# TODO: remake to oneshot systemd service
# It needs for autosizer.sh & maybe that is correct
echo_stamp "Change boot partition"
echo "--- Change boot partition"
sed -i 's/root=[^ ]*/root=\/dev\/mmcblk0p2/' /boot/cmdline.txt
sed -i 's/.* \/boot vfat defaults 0 2$/\/dev\/mmcblk0p1 \/boot vfat defaults 0 2/' /etc/fstab
sed -i 's/.* \/boot\/firmware vfat defaults 0 2$/\/dev\/mmcblk0p1 \/boot\/firmware vfat defaults 0 2/' /etc/fstab
sed -i 's/.* \/ ext4 defaults,noatime 0 1$/\/dev\/mmcblk0p2 \/ ext4 defaults,noatime 0 1/' /etc/fstab
cat /boot/cmdline.txt
cat /etc/fstab
echo_stamp "Set max space for syslogs"
echo "--- 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

@@ -12,43 +12,20 @@
# copies or substantial portions of the Software.
#
set -e # Exit immidiately on non-zero result
echo_stamp() {
# TEMPLATE: echo_stamp <TEXT> <TYPE>
# TYPE: SUCCESS, ERROR, INFO
# More info there https://www.shellhacks.com/ru/bash-colors/
TEXT="$(date '+[%Y-%m-%d %H:%M:%S]') $1"
TEXT="\e[1m$TEXT\e[0m" # BOLD
case "$2" in
SUCCESS)
TEXT="\e[32m${TEXT}\e[0m";; # GREEN
ERROR)
TEXT="\e[31m${TEXT}\e[0m";; # RED
*)
TEXT="\e[34m${TEXT}\e[0m";; # BLUE
esac
echo -e ${TEXT}
}
echo_stamp "#1 Write STATIC to /etc/dhcpcd.conf"
set -ex # exit on error, echo commands
echo "--- Write static to /etc/dhcpcd.conf"
cat << EOF >> /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.11.1/24
EOF
echo_stamp "#2 Set wpa_supplicant country"
echo "--- Set wpa_supplicant country"
cat << EOF >> /etc/wpa_supplicant/wpa_supplicant.conf
country=GB
EOF
echo_stamp "#3 Write dhcp-config to /etc/dnsmasq.conf"
echo "--- Write dhcp-config to /etc/dnsmasq.conf"
cat << EOF >> /etc/dnsmasq.conf
interface=wlan0
address=/clover/coex/192.168.11.1
@@ -59,5 +36,3 @@ bogus-priv
domain-needed
quiet-dhcp6
EOF
echo_stamp "#4 End of network installation"

View File

@@ -15,34 +15,10 @@
set -ex # exit on error, echo commands
REPO=$1
REF=$2
INSTALL_ROS_PACK_SOURCES=$3
DISCOVER_ROS_PACK=$4
NUMBER_THREADS=$5
# Current ROS distribution
ROS_DISTRO=noetic
echo_stamp() {
# TEMPLATE: echo_stamp <TEXT> <TYPE>
# TYPE: SUCCESS, ERROR, INFO
# More info there https://www.shellhacks.com/ru/bash-colors/
TEXT="$(date '+[%Y-%m-%d %H:%M:%S]') $1"
TEXT="\e[1m$TEXT\e[0m" # BOLD
case "$2" in
SUCCESS)
TEXT="\e[32m${TEXT}\e[0m";; # GREEN
ERROR)
TEXT="\e[31m${TEXT}\e[0m";; # RED
*)
TEXT="\e[34m${TEXT}\e[0m";; # BLUE
esac
echo -e ${TEXT}
}
. /etc/os-release # set $VERSION_CODENAME to Debian release code name
export ROS_OS_OVERRIDE=debian:$VERSION_CODENAME
# https://gist.github.com/letmaik/caa0f6cc4375cbfcc1ff26bd4530c2a3
# https://github.com/travis-ci/travis-build/blob/master/lib/travis/build/templates/header.sh
@@ -52,7 +28,7 @@ my_travis_retry() {
local max_count=5
while [ $count -le $max_count ]; do
[ $result -ne 0 ] && {
echo -e "\nThe command \"$@\" failed. Retrying, $count of $max_count.\n" >&2
echo -e "\nThe command \"$*\" failed. Retrying, $count of $max_count.\n" >&2
}
# ! { } ignores set -e, see https://stackoverflow.com/a/4073372
! { "$@"; result=$?; }
@@ -62,65 +38,66 @@ my_travis_retry() {
done
[ $count -gt $max_count ] && {
echo -e "\nThe command \"$@\" failed $max_count times.\n" >&2
echo -e "\nThe command \"$*\" failed $max_count times.\n" >&2
}
return $result
}
echo "--- Install rosdep"
my_travis_retry pip3 install -U rosdep
# TODO: 'kinetic-rosdep-clover.yaml' should add only if we use our repo?
echo_stamp "Init rosdep"
echo "--- Init rosdep"
my_travis_retry rosdep init
# FIXME: Re-add this after missing packages are built
echo "--- Update rosdep"
echo "yaml file:///etc/ros/rosdep/${ROS_DISTRO}-rosdep-clover.yaml" >> /etc/ros/rosdep/sources.list.d/10-clover.list
my_travis_retry rosdep update
echo_stamp "Populate rosdep for ROS user"
my_travis_retry sudo -u pi rosdep update
echo "--- Populate rosdep for ROS user"
my_travis_retry sudo -u pi ROS_OS_OVERRIDE=debian:$VERSION_CODENAME rosdep update
export ROS_IP='127.0.0.1' # needed for running tests
# echo_stamp "Reconfiguring Clover repository for simplier unshallowing"
# echo "Reconfiguring Clover repository for simplier unshallowing"
cd /home/pi/catkin_ws/src/clover
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
# This is sort of a hack to force "custom" packages to be installed - the ones built by COEX, linked against OpenCV 4.2
# I **wish** OpenCV would not be such a mess, but, well, here we are.
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.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 \
ros-${ROS_DISTRO}-cv-bridge \
ros-${ROS_DISTRO}-cv-camera \
ros-${ROS_DISTRO}-image-publisher \
ros-${ROS_DISTRO}-web-video-server
# echo "--- 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.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 \
# ros-${ROS_DISTRO}-cv-bridge \
# 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 "--- 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"
echo "--- Build and install Clover"
cd /home/pi/catkin_ws
# Don't try to install gazebo_ros
my_travis_retry rosdep install -y --from-paths src --ignore-src --rosdistro ${ROS_DISTRO} --os=debian:buster \
--skip-keys=gazebo_ros --skip-keys=gazebo_plugins
my_travis_retry rosdep install -y --from-paths src --ignore-src --rosdistro ${ROS_DISTRO} --os=debian:$VERSION_CODENAME \
--skip-keys="gazebo_ros gazebo_plugins"
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=RelWithDebInfo
source devel/setup.bash
echo_stamp "Install clever package (for backwards compatibility)"
echo "--- Install clever package (for backwards compatibility)"
cd /home/pi/catkin_ws/src/clover/builder/assets/clever
./setup.py install
rm -rf build # remove build artifacts
echo_stamp "Build Clover documentation"
echo "--- Build Clover documentation"
cd /home/pi/catkin_ws/src/clover
builder/assets/install_gitbook.sh
gitbook install
@@ -128,64 +105,69 @@ gitbook build
# replace assets copy to assets symlink to save space
rm -rf _book/assets && ln -s ../docs/assets _book/assets
touch node_modules/CATKIN_IGNORE docs/CATKIN_IGNORE _book/CATKIN_IGNORE clover/www/CATKIN_IGNORE apps/CATKIN_IGNORE # ignore documentation files by catkin
npm cache clean --force
echo_stamp "Installing additional ROS packages"
echo "--- Installing additional ROS packages"
my_travis_retry apt-get install -y --no-install-recommends \
ros-${ROS_DISTRO}-rosbridge-suite \
ros-${ROS_DISTRO}-rosserial \
ros-${ROS_DISTRO}-usb-cam \
ros-${ROS_DISTRO}-vl53l1x \
ros-${ROS_DISTRO}-ws281x \
ros-${ROS_DISTRO}-libcamera-ros \
ros-${ROS_DISTRO}-rosshow \
ros-${ROS_DISTRO}-cmake-modules \
ros-${ROS_DISTRO}-image-view \
ros-${ROS_DISTRO}-nodelet-topic-tools \
ros-${ROS_DISTRO}-stereo-msgs
ros-${ROS_DISTRO}-stereo-msgs \
ros-${ROS_DISTRO}-vision-msgs
# TODO move GeographicLib datasets to Mavros debian package
echo_stamp "Install GeographicLib datasets (needed for mavros)" \
echo "--- Install GeographicLib datasets (needed for mavros)" \
&& wget -qO- https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh | bash
echo_stamp "Running tests"
echo "--- Running tests"
export ROS_IP='127.0.0.1' # needed for running tests
cd /home/pi/catkin_ws
# FIXME: Investigate failing tests
catkin_make run_tests #&& catkin_test_results
echo_stamp "Change permissions for catkin_ws"
echo "--- Change permissions for catkin_ws"
chown -Rf pi:pi /home/pi/catkin_ws
echo_stamp "Update www"
echo "--- Update www"
sudo -u pi sh -c ". devel/setup.sh && rosrun clover www"
echo_stamp "Make \$HOME/examples symlink"
echo "--- Make \$HOME/examples symlink"
ln -s "$(catkin_find clover examples --first-only)" /home/pi
chown -Rf pi:pi /home/pi/examples
echo_stamp "Make systemd services symlinks"
echo "--- Make systemd services symlinks"
ln -s /home/pi/catkin_ws/src/clover/builder/assets/clover.service /lib/systemd/system/
ln -s /home/pi/catkin_ws/src/clover/builder/assets/roscore.service /lib/systemd/system/
# validate
[ -f /lib/systemd/system/clover.service ]
[ -f /lib/systemd/system/roscore.service ]
echo_stamp "Make udev rules symlink"
echo "--- Make udev rules symlink"
ln -s "$(catkin_find clover udev --first-only)"/* /lib/udev/rules.d/
echo_stamp "Setup ROS environment"
echo "--- Setup ROS environment"
cat << EOF >> /home/pi/.bashrc
LANG='C.UTF-8'
LC_ALL='C.UTF-8'
export ROS_HOSTNAME=\`hostname\`.local
export ROS_OS_OVERRIDE=debian:bookworm
source /opt/ros/${ROS_DISTRO}/setup.bash
source /home/pi/catkin_ws/devel/setup.bash
EOF
#echo_stamp "Removing local apt mirror"
# Restore original sources.list
#mv /var/sources.list.bak /etc/apt/sources.list
# Clean apt cache
apt-get clean -qq > /dev/null
# Remove local mirror repository key
#apt-key del COEX-MIRROR
echo "--- Cleanup apt"
apt-get autoremove --purge -y
apt-get clean
echo_stamp "END of ROS INSTALLATION"
echo "--- Cleanup pip"
pip3 cache purge
echo "--- Cleanup /tmp"
rm -rf /tmp/*

View File

@@ -12,27 +12,9 @@
# copies or substantial portions of the Software.
#
set -e # Exit immidiately on non-zero result
set -ex # exit on error, echo commands
echo_stamp() {
# TEMPLATE: echo_stamp <TEXT> <TYPE>
# TYPE: SUCCESS, ERROR, INFO
# More info there https://www.shellhacks.com/ru/bash-colors/
TEXT="$(date '+[%Y-%m-%d %H:%M:%S]') $1"
TEXT="\e[1m${TEXT}\e[0m" # BOLD
case "$2" in
SUCCESS)
TEXT="\e[32m${TEXT}\e[0m";; # GREEN
ERROR)
TEXT="\e[31m${TEXT}\e[0m";; # RED
*)
TEXT="\e[34m${TEXT}\e[0m";; # BLUE
esac
echo -e ${TEXT}
}
. /etc/os-release # set $VERSION_CODENAME to Debian release code name
# https://gist.github.com/letmaik/caa0f6cc4375cbfcc1ff26bd4530c2a3
# https://github.com/travis-ci/travis-build/blob/master/lib/travis/build/templates/header.sh
@@ -41,7 +23,7 @@ my_travis_retry() {
local count=1
while [ $count -le 3 ]; do
[ $result -ne 0 ] && {
echo -e "\n${ANSI_RED}The command \"$@\" failed. Retrying, $count of 3.${ANSI_RESET}\n" >&2
echo -e "\n${ANSI_RED}The command \"$*\" failed. Retrying, $count of 3.${ANSI_RESET}\n" >&2
}
# ! { } ignores set -e, see https://stackoverflow.com/a/4073372
! { "$@"; result=$?; }
@@ -51,41 +33,39 @@ my_travis_retry() {
done
[ $count -gt 3 ] && {
echo -e "\n${ANSI_RED}The command \"$@\" failed 3 times.${ANSI_RESET}\n" >&2
echo -e "\n${ANSI_RED}The command \"$*\" failed 3 times.${ANSI_RESET}\n" >&2
}
return $result
}
echo_stamp "Increase apt retries"
echo "--- Increase apt retries"
echo "APT::Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries
echo_stamp "Install apt keys & repos"
echo "--- Install apt keys & repos"
# TODO: This STDOUT consist 'OK'
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://packages.ros.org/ros/ubuntu buster main" > /etc/apt/sources.list.d/ros-latest.list
wget -O - 'http://packages.coex.tech/key.asc' | apt-key add -
echo 'deb http://packages.coex.tech buster main' >> /etc/apt/sources.list
wget -O - 'http://packages.coex.tech/key.asc' | apt-key add -
echo "deb http://packages.coex.tech $VERSION_CODENAME main" >> /etc/apt/sources.list
echo_stamp "Update apt cache"
echo "--- Update apt cache"
# TODO: FIX ERROR: /usr/bin/apt-key: 596: /usr/bin/apt-key: cannot create /dev/null: Permission denied
apt-get update
# && apt upgrade -y
# 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
echo "--- Install software"
my_travis_retry apt-get install --no-install-recommends -y cmake-data cmake
my_travis_retry apt-get install --no-install-recommends -y \
unzip \
zip \
ipython \
ipython3 \
screen \
byobu \
@@ -96,64 +76,57 @@ dnsmasq \
tmux \
tree \
vim \
libjpeg8 \
tcpdump \
libpoco-dev \
libzbar0 \
python3-rosdep \
python3-rosinstall-generator \
python3-wstool \
python3-rosinstall \
build-essential \
libffi-dev \
monkey \
pigpio python-pigpio python3-pigpio \
pigpio python3-pigpio \
i2c-tools \
espeak espeak-data python-espeak python3-espeak \
espeak espeak-data python3-espeak \
ntpdate \
python-dev \
python3-dev \
python-systemd \
mjpg-streamer \
python3-opencv
xxd \
python3-dev \
python3-systemd \
python3-opencv \
python3-pip
#libjpeg8 \
# Deny byobu to check available updates
sed -i "s/updates_available//" /usr/share/byobu/status/status
# sed -i "s/updates_available//" /home/pi/.byobu/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-pip2.py
rm get-pip.py get-pip2.py
#my_travis_retry pip install --upgrade pip
#my_travis_retry pip3 install --upgrade pip
echo_stamp "Make sure both pip and pip3 are installed"
echo "--- Make sure pip is installed"
pip --version
pip3 --version
echo_stamp "Install and enable Butterfly (web terminal)"
echo_stamp "Workaround for tornado >= 6.0 breaking butterfly"
echo "--- Enable installing packages with pip"
mv /usr/lib/python3.11/EXTERNALLY-MANAGED /usr/lib/python3.11/EXTERNALLY-MANAGED.old
echo "--- Install and enable Butterfly (web terminal)"
export CRYPTOGRAPHY_DONT_BUILD_RUST=1
my_travis_retry pip3 install cryptography==3.4.6 # https://stackoverflow.com/a/68472128/6850197
my_travis_retry pip3 install pyOpenSSL==20.0.1
my_travis_retry pip3 install tornado==5.1.1
#my_travis_retry pip3 install pyOpenSSL==20.0.1
#my_travis_retry pip3 install tornado==5.1.1
my_travis_retry pip3 install butterfly
my_travis_retry pip3 install butterfly[systemd]
systemctl enable butterfly.socket
echo_stamp "Install ws281x library"
echo "--- Install ws281x library"
my_travis_retry pip3 install --prefer-binary rpi_ws281x
echo_stamp "Setup Monkey"
echo "--- 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"
echo "--- Install Node.js"
cd /home/pi
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
@@ -161,28 +134,24 @@ 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
my_travis_retry pip3 install ptvsd
echo "--- Installing debugpy"
my_travis_retry pip3 install debugpy
echo_stamp "Installing pyzbar"
my_travis_retry pip install pyzbar
echo "--- Installing pyzbar"
my_travis_retry pip3 install pyzbar
echo_stamp "Add .vimrc"
echo "--- Add .vimrc"
cat << EOF > /home/pi/.vimrc
set mouse-=a
syntax on
autocmd BufNewFile,BufRead *.launch set syntax=xml
EOF
echo_stamp "Change default keyboard layout to US"
echo "--- Change default keyboard layout to US"
sed -i 's/XKBLAYOUT="gb"/XKBLAYOUT="us"/g' /etc/default/keyboard
echo_stamp "Attempting to kill dirmngr"
echo "--- Attempting to kill dirmngr"
gpgconf --kill dirmngr
# dirmngr is only used by apt-key, so we can safely kill it.
# We ignore pkill's exit value as well.
pkill -9 -f dirmngr || true
echo_stamp "End of software installation"

View File

@@ -12,32 +12,33 @@
# copies or substantial portions of the Software.
#
set -ex
set -ex # exit on error, echo commands
echo "Run image tests"
echo "--- Run image tests"
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
# check documented packages available
apt-cache show gst-rtsp-launch
apt-cache show openvpn
echo "Move /etc/ld.so.preload back to its original position"
mv /etc/ld.so.preload.disabled-for-build /etc/ld.so.preload
echo "Largest packages installed"
sudo -E sh -c 'apt-get install -y debian-goodies'
dpigs -H -n 100
echo "Cleanup apt"
apt-get autoremove --purge -y
apt-get clean
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

@@ -23,6 +23,10 @@ from clover.srv import GetTelemetry, Navigate, NavigateGlobal, SetPosition, SetV
from led_msgs.srv import SetLEDs
from led_msgs.msg import LEDStateArray, LEDState
from aruco_pose.msg import Marker, MarkerArray, Point2D
from vision_msgs.msg import BoundingBox2D, BoundingBox2DArray, BoundingBox3D, BoundingBox3DArray, \
Classification2D, Classification3D, Detection2D, Detection2DArray, Detection3D, Detection3DArray, \
ObjectHypothesis, ObjectHypothesisWithPose, VisionInfo
from clover import long_callback
import dynamic_reconfigure.client

View File

@@ -1,12 +1,11 @@
#!/usr/bin/env bash
set -ex
set -ex # exit on error, echo commands
# TODO: validate versions
# validate required software is installed
python2 --version
python3 --version
ipython3 --version
@@ -22,30 +21,28 @@ pip --version
pip3 --version
tcpdump --version
monkey --version
# espeak --version
espeak --version
xxd --version
systemctl --version
if [ -z $VM ]; then
# rpi only software
python --version
ipython --version
pip2 --version
# `python` is python2 for now
[[ $(python -c 'import sys;print(sys.version_info.major)') == "2" ]]
[[ $(python -c 'import sys;print(sys.version_info.major)') == "3" ]]
# ptvsd does not have a stand-alone binary
python -m ptvsd --version
python3 -m ptvsd --version
python -m debugpy --version
python3 -m debugpy --version
pigpiod -v
i2cdetect -V
butterfly -h
/usr/local/bin/butterfly.server.py --help
mjpg_streamer --version
fi
# ros stuff
roscore -h
catkin_find
rosversion clover
rosversion aruco_pose
rosversion mavros
@@ -61,14 +58,14 @@ rosversion web_video_server
rosversion nodelet
rosversion image_view
[[ $(rosversion ws281x) == "0.0.13" ]]
[[ $(rosversion ws281x) == "0.0.15" ]]
if [ -z $VM ]; then
rosversion compressed_image_transport
# rosversion compressed_image_transport
rosversion rosshow
rosversion vl53l1x
rosversion rosserial
[[ $(rosversion cv_camera) == "0.5.1" ]] # patched version with init fix
[[ $(rosversion cv_camera) == "0.6.1" ]] # patched version with init fix
fi
# determine user home directory

View File

@@ -1,8 +0,0 @@
#!/usr/bin/env python3
# Make sure our Python 3 software is installed
import cv2
from pyzbar import pyzbar
print(cv2.getBuildInformation())

View File

@@ -0,0 +1,65 @@
# Generated from fisheye_cam.yaml by rescale_camera_info.py
camera_matrix:
cols: 3
data:
- 415.5985593268293
- 0.0
- 400.0
- 0.0
- 312.35267324512984
- 225.0
- 0.0
- 0.0
- 1.0
rows: 3
camera_name: main_camera_optical
distortion_coefficients:
cols: 8
data:
- 0.215356885
- -0.117472846
- -0.000306197672
- -0.000109444025
- -0.00453657258
- 0.573090623
- -0.127574577
- -0.0286125589
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
rows: 1
distortion_model: plumb_bob
image_height: 720
image_width: 1280
projection_matrix:
cols: 4
data:
- 415.5985593268293
- 0.0
- 405.4752811707317
- 0.0
- 0.0
- 312.35267324512984
- 205.91677004464282
- 0.0
- 0.0
- 0.0
- 1.0
- 0.0
rows: 3
rectification_matrix:
cols: 3
data:
- 1
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
rows: 3

View File

@@ -0,0 +1,65 @@
# Generated from fisheye_cam.yaml by rescale_camera_info.py
camera_matrix:
cols: 3
data:
- 1246.7956779804879
- 0.0
- 1200.0
- 0.0
- 702.7935148015422
- 506.25
- 0.0
- 0.0
- 1.0
rows: 3
camera_name: main_camera_optical
distortion_coefficients:
cols: 8
data:
- 0.215356885
- -0.117472846
- -0.000306197672
- -0.000109444025
- -0.00453657258
- 0.573090623
- -0.127574577
- -0.0286125589
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
rows: 1
distortion_model: plumb_bob
image_height: 1080
image_width: 1920
projection_matrix:
cols: 4
data:
- 1246.7956779804879
- 0.0
- 1216.4258435121951
- 0.0
- 0.0
- 702.7935148015422
- 463.31273260044634
- 0.0
- 0.0
- 0.0
- 1.0
- 0.0
rows: 3
rectification_matrix:
cols: 3
data:
- 1
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
rows: 3

View File

@@ -0,0 +1,65 @@
# Generated from fisheye_cam.yaml by rescale_camera_info.py
camera_matrix:
cols: 3
data:
- 5049.522495820976
- 0.0
- 4860.0
- 0.0
- 2846.313734946246
- 2050.3125
- 0.0
- 0.0
- 1.0
rows: 3
camera_name: main_camera_optical
distortion_coefficients:
cols: 8
data:
- 0.215356885
- -0.117472846
- -0.000306197672
- -0.000109444025
- -0.00453657258
- 0.573090623
- -0.127574577
- -0.0286125589
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
rows: 1
distortion_model: plumb_bob
image_height: 1944
image_width: 2592
projection_matrix:
cols: 4
data:
- 5049.522495820976
- 0.0
- 4926.52466622439
- 0.0
- 0.0
- 2846.313734946246
- 1876.4165670318075
- 0.0
- 0.0
- 0.0
- 1.0
- 0.0
rows: 3
rectification_matrix:
cols: 3
data:
- 1
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
rows: 3

View File

@@ -0,0 +1,65 @@
# Generated from fisheye_cam.yaml by rescale_camera_info.py
camera_matrix:
cols: 3
data:
- 166.23942373073172
- 0.0
- 160.0
- 0.0
- 166.5880923974026
- 120.0
- 0.0
- 0.0
- 1.0
rows: 3
camera_name: main_camera_optical
distortion_coefficients:
cols: 8
data:
- 0.215356885
- -0.117472846
- -0.000306197672
- -0.000109444025
- -0.00453657258
- 0.573090623
- -0.127574577
- -0.0286125589
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
rows: 1
distortion_model: plumb_bob
image_height: 240
image_width: 320
projection_matrix:
cols: 4
data:
- 166.23942373073172
- 0.0
- 162.19011246829268
- 0.0
- 0.0
- 166.5880923974026
- 109.82227735714285
- 0.0
- 0.0
- 0.0
- 1.0
- 0.0
rows: 3
rectification_matrix:
cols: 3
data:
- 1
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
rows: 3

View File

@@ -0,0 +1,65 @@
# Generated from fisheye_cam.yaml by rescale_camera_info.py
camera_matrix:
cols: 3
data:
- 30297.13497492585
- 0.0
- 29160.0
- 0.0
- 12808.411807258106
- 9226.40625
- 0.0
- 0.0
- 1.0
rows: 3
camera_name: main_camera_optical
distortion_coefficients:
cols: 8
data:
- 0.215356885
- -0.117472846
- -0.000306197672
- -0.000109444025
- -0.00453657258
- 0.573090623
- -0.127574577
- -0.0286125589
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
rows: 1
distortion_model: plumb_bob
image_height: 2160
image_width: 3840
projection_matrix:
cols: 4
data:
- 30297.13497492585
- 0.0
- 29559.14799734634
- 0.0
- 0.0
- 12808.411807258106
- 8443.874551643134
- 0.0
- 0.0
- 0.0
- 1.0
- 0.0
rows: 3
rectification_matrix:
cols: 3
data:
- 1
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
rows: 3

View File

@@ -0,0 +1,65 @@
# Generated from fisheye_cam.yaml by rescale_camera_info.py
camera_matrix:
cols: 3
data:
- 192008.0929035926
- 0.0
- 184801.5
- 0.0
- 81119.941445968
- 58433.90625
- 0.0
- 0.0
- 1.0
rows: 3
camera_name: main_camera_optical
distortion_coefficients:
cols: 8
data:
- 0.215356885
- -0.117472846
- -0.000306197672
- -0.000109444025
- -0.00453657258
- 0.573090623
- -0.127574577
- -0.0286125589
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
rows: 1
distortion_model: plumb_bob
image_height: 3040
image_width: 4056
projection_matrix:
cols: 4
data:
- 192008.0929035926
- 0.0
- 187331.10043318244
- 0.0
- 0.0
- 81119.941445968
- 53477.87216040651
- 0.0
- 0.0
- 0.0
- 1.0
- 0.0
rows: 3
rectification_matrix:
cols: 3
data:
- 1
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
rows: 3

View File

@@ -0,0 +1,65 @@
# Generated from fisheye_cam.yaml by rescale_camera_info.py
camera_matrix:
cols: 3
data:
- 166.23942373073172
- 0.0
- 160.0
- 0.0
- 166.5880923974026
- 120.0
- 0.0
- 0.0
- 1.0
rows: 3
camera_name: main_camera_optical
distortion_coefficients:
cols: 8
data:
- 0.215356885
- -0.117472846
- -0.000306197672
- -0.000109444025
- -0.00453657258
- 0.573090623
- -0.127574577
- -0.0286125589
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
rows: 1
distortion_model: plumb_bob
image_height: 480
image_width: 640
projection_matrix:
cols: 4
data:
- 166.23942373073172
- 0.0
- 162.19011246829268
- 0.0
- 0.0
- 166.5880923974026
- 109.82227735714285
- 0.0
- 0.0
- 0.0
- 1.0
- 0.0
rows: 3
rectification_matrix:
cols: 3
data:
- 1
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
rows: 3

View File

@@ -0,0 +1,65 @@
# Generated from fisheye_cam.yaml by rescale_camera_info.py
camera_matrix:
cols: 3
data:
- 207.79927966341464
- 0.0
- 200.0
- 0.0
- 208.23511549675322
- 150.0
- 0.0
- 0.0
- 1.0
rows: 3
camera_name: main_camera_optical
distortion_coefficients:
cols: 8
data:
- 0.215356885
- -0.117472846
- -0.000306197672
- -0.000109444025
- -0.00453657258
- 0.573090623
- -0.127574577
- -0.0286125589
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
rows: 1
distortion_model: plumb_bob
image_height: 600
image_width: 800
projection_matrix:
cols: 4
data:
- 207.79927966341464
- 0.0
- 202.73764058536585
- 0.0
- 0.0
- 208.23511549675322
- 137.27784669642855
- 0.0
- 0.0
- 0.0
- 1.0
- 0.0
rows: 3
rectification_matrix:
cols: 3
data:
- 1
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
rows: 3

View File

@@ -19,7 +19,7 @@
<param name="dictionary" value="2"/> <!-- DICT_4X4_250 -->
<param name="estimate_poses" value="true"/>
<param name="send_tf" value="true"/>
<param name="use_map_markers" value="true"/>
<param name="use_map_markers" value="$(arg aruco_map)"/>
<param name="known_vertical" value="map" if="$(eval placement == 'floor' or placement == 'ceiling')"/>
<param name="flip_vertical" value="true" if="$(eval placement == 'ceiling')"/>
<param name="length" value="$(arg length)"/>

View File

@@ -3,7 +3,12 @@
<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="type" default="libcamera"/> <!-- camera interface: libcamera, v4l2 -->
<arg name="camera_id" default="0"/> <!-- libcamera camera id -->
<arg name="device" default="/dev/video0"/> <!-- v4l2 device path -->
<arg name="width" default="320"/>
<arg name="height" default="240"/>
<arg name="fps" default="40"/>
<arg name="throttled_topic" default="true"/> <!-- enable throttled image topic -->
<arg name="throttled_topic_rate" default="5.0"/> <!-- throttled image topic rate -->
<arg name="rectify" default="false"/> <!-- enable rectification -->
@@ -26,20 +31,34 @@
<param name="num_worker_threads" value="2"/>
</node>
<!-- camera node -->
<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">
<!-- camera node using libcamera -->
<node pkg="nodelet" type="nodelet" name="main_camera" args="load libcamera_ros/LibcameraRos main_camera_nodelet_manager" output="screen" clear_params="true" if="$(eval not simulator and type == 'libcamera')" respawn="true">
<param name="camera_name" value=""/>
<param name="camera_id" value="$(arg camera_id)"/>
<param name="frame_id" value="main_camera_optical"/>
<param name="calib_url" type="string" value="file://$(find clover)/camera_info/fisheye_cam_$(arg width)x$(arg height).yaml"/>
<param name="stream_role" value="still"/>
<param name="pixel_format" value="RGB888"/>
<param name="use_ros_time" value="true"/>
<param name="resolution/width" value="$(arg width)"/>
<param name="resolution/height" value="$(arg height)"/>
<!-- see: https://github.com/ctu-mrs/libcamera_ros/blob/b3645/config/param.yaml#L19 -->
<param name="control/fps" value="$(arg fps)"/>
</node>
<!-- old camera node for v4l2 (cv_camera) -->
<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" if="$(eval not simulator and type == 'v4l2')" 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"/>
<param name="rate" value="100"/> <!-- poll rate -->
<param name="cv_cap_prop_fps" value="40"/> <!-- camera FPS -->
<param name="cv_cap_prop_fps" value="$(arg fps)"/> <!-- camera FPS -->
<param name="capture_delay" value="0.02"/> <!-- approximate delay on frame retrieving -->
<param name="rescale_camera_info" value="true"/> <!-- automatically rescale camera calibration info -->
<!-- camera resolution -->
<param name="image_width" value="320"/>
<param name="image_height" value="240"/>
<param name="image_width" value="$(arg width)"/>
<param name="image_height" value="$(arg height)"/>
</node>
<!-- camera visualization markers -->

View File

@@ -303,6 +303,14 @@ def check_fcu():
failure('cell voltage is not available, https://clover.coex.tech/power')
else:
cell = battery.cell_voltage[0]
# number of cells 1 means this is overall voltage
if len(battery.cell_voltage) == 1:
n_cells = get_param('BAT1_N_CELLS', strict=False)
if n_cells is None:
# older PX4
n_cells = get_param('BAT_N_CELLS', strict=True)
cell /= n_cells
if cell > 4.3 or cell < 3.0:
failure('incorrect cell voltage: %.2f V, https://clover.coex.tech/power', cell)
elif cell < 3.7:

View File

@@ -0,0 +1,68 @@
#!/usr/bin/env python3
# Copyright (C) 2024 Copter Express Technologies
#
# Author: Oleg Kalachev <okalachev@gmail.com>
#
# Distributed under MIT License (available at https://opensource.org/licenses/MIT).
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
"""Rescale camera info
Rescale camera info files for different resolutions.
Usage:
rescale_camera_info.py <camera_info_file>
rescale_camera_info.py (-h | --help)
Options:
<camera_info_file> Path to the source camera info file
Example:
rescale_camera_info.py camera_info.yaml
"""
from docopt import docopt
import yaml
arguments = docopt(__doc__)
camera_info = yaml.safe_load(open(arguments['<camera_info_file>']))
RESOLUTIONS = (
(320, 240), # QVGA
(640, 480), # VGA
(800, 600), # SVGA
(1280, 720), # HD
(1920, 1080), # FullHD
(2592, 1944), # 5MP
(3840, 2160), # 4K
(4056, 3040),
)
# TODO: retrieve resolutions list (v4l2-ctl --list-formats-ext)
for resolution in RESOLUTIONS:
width_k = resolution[0] / camera_info['image_width']
height_k = resolution[1] / camera_info['image_height']
camera_info_rescaled = camera_info.copy()
camera_info_rescaled['image_width'] = resolution[0]
camera_info_rescaled['image_height'] = resolution[1]
# See http://docs.ros.org/api/sensor_msgs/html/msg/CameraInfo.html for clarification
camera_info_rescaled['camera_matrix']['data'][0] *= width_k
camera_info_rescaled['camera_matrix']['data'][2] *= width_k
camera_info_rescaled['camera_matrix']['data'][4] *= height_k
camera_info_rescaled['camera_matrix']['data'][5] *= height_k
camera_info_rescaled['projection_matrix']['data'][0] *= width_k
camera_info_rescaled['projection_matrix']['data'][2] *= width_k
camera_info_rescaled['projection_matrix']['data'][5] *= height_k
camera_info_rescaled['projection_matrix']['data'][6] *= height_k
output_file = arguments['<camera_info_file>'].replace('.yaml', '_{}x{}.yaml'.format(resolution[0], resolution[1]))
with open(output_file, 'w') as f:
f.write('# Generated from {} by rescale_camera_info.py\n'.format(arguments['<camera_info_file>']))
yaml.dump(camera_info_rescaled, f)
print('Saved {}'.format(output_file))

View File

@@ -136,7 +136,7 @@ navigate(x=2, y=2, z=2, speed=1, frame_id='aruco_map')
### Using a specific marker frame
Starting with the [image](image.md) version 0.18, the drone also can fly relative to a marker in the map, even if it is not currently visible. Like with [single-marker navigation](aruco_marker.md#working-with-detected-markers), this works by setting the frame_id parameter to aruco_ID, where ID is the desired marker number.
Starting with the [image](image.md) version 0.18, the drone also can fly relative to a marker in the map, even if it is not currently visible. Like with [single-marker navigation](aruco_marker.md#working-with-detected-markers), this works by setting the frame_id parameter to `aruco_ID`, where ID is the desired marker number.
The following code will move the drone to the point 1 meter above the center of marker 5:

View File

@@ -210,7 +210,7 @@ Most of the parameters for autonomous flight are located in the following direct
<arg name="aruco_vpe" default="true"/>`
```
- Generate the ArUco markers field. See the article [Map-based navigation with ArUco markers] (aruco_map.md # marker map settings) for details. To generate markers, you need to enter a command with specific values.
- Generate the ArUco markers field. See the article [Map-based navigation with ArUco markers](aruco_map.md#marker-map-definition) for details. To generate markers, you need to enter a command with specific values.
Here is the example generating command where:

View File

@@ -136,7 +136,7 @@ navigate(x=2, y=2, z=2, speed=1, frame_id='aruco_map') # полет в коор
### Полет в координаты по ID маркера
Начиная с версии [образа](image.md) 0.18, доступны также полёты относительно отдельного маркера в карте, даже если дрон его не видит. По аналогии с [навигацией по отдельным маркерам](aruco_marker.md#навигация-по-маркерам) при настройке карты маркеров дрон сможет лететь в координаты относительно отдельного маркера, используя фрейм aruco_ID с соответствующим ID маркера.
Начиная с версии [образа](image.md) 0.18, доступны также полёты относительно отдельного маркера в карте, даже если дрон его не видит. По аналогии с [навигацией по отдельным маркерам](aruco_marker.md#навигация-по-маркерам) при настройке карты маркеров дрон сможет лететь в координаты относительно отдельного маркера, используя фрейм `aruco_ID` с соответствующим ID маркера.
Полет в точку над маркером 5 на высоту 1 метр: