Measure Temperature
watch -n1 vcgencmd measure_clock arm
watch -n1 vcgencmd measure_temp
Camera hardware:
MMAL :
frame rates:
// Set the encode format on the video port
format = video_port->format;
format->encoding_variant = MMAL_ENCODING_I420;
if(state->camera_parameters.shutter_speed > 6000000)
{
MMAL_PARAMETER_FPS_RANGE_T fps_range = {{MMAL_PARAMETER_FPS_RANGE, sizeof(fps_range)},
{ 5, 1000 }, {166, 1000}
};
mmal_port_parameter_set(video_port, &fps_range.hdr);
}
else if(state->camera_parameters.shutter_speed > 1000000)
{
MMAL_PARAMETER_FPS_RANGE_T fps_range = {{MMAL_PARAMETER_FPS_RANGE, sizeof(fps_range)},
{ 167, 1000 }, {999, 1000}
};
mmal_port_parameter_set(video_port, &fps_range.hdr);
}
format->encoding = MMAL_ENCODING_OPAQUE;
format->es->video.width = VCOS_ALIGN_UP(state->common_settings.width, 32);
format->es->video.height = VCOS_ALIGN_UP(state->common_settings.height, 16);
format->es->video.crop.x = 0;
format->es->video.crop.y = 0;
format->es->video.crop.width = state->common_settings.width;
format->es->video.crop.height = state->common_settings.height;
format->es->video.frame_rate.num = state->framerate;
format->es->video.frame_rate.den = VIDEO_FRAME_RATE_DEN;
/// Video render needs at least 2 buffers.
#define VIDEO_OUTPUT_BUFFERS_NUM 3
MMAL_PARAMETER_FPS_RANGE_T
You will need to get the newest GPU firmware using sudo rpi-update which contains all these shiny new modes.
So, a quick example, to record a 10s VGA clip at 90fps
raspivid -w 640 -h 480 -fps 90 -t 10000 -o test90fps.h264
Picamera MMAL docs:
High FPS:
Find file :
sudo find / -name bcm_host.h
Tar
tar -zcvf filename.tar.gz /path/to/dir/
Unzip
tar –xvzf [archive name]
cmake -DCMAKE_CXX_FLAGS= "-DCMAKE_CXX_FLAGS_RELEASE=-Ofast -DNDEBUG" ..
cmake --build . -j4
GIT :
git checkout
// how to see current branch, and list of LOCAL branch:
git branch
// To see REMOTE list of branch:
git branch -r
// To see ALL branch
git branch -a
// Create a New Branch:
// Run this command (replacing my-branch-name with whatever name you want):
git checkout -b my-branch-name
// Switch to some Branch
git checkout --track origin/CodeRedesigne
git checkout --track origin/airplane_control
release_candidate_tag_001
git tag
git checkout tags/release_candidate_tag_001
// Update from Server
git pull
Switch to a Branch In Your Local Repo:
git checkout my-branch-name
Switch to a Branch That Came From a Remote Repo:
To get a list of all branches from the remote, run this command:
git pull
Run this command to switch to the branch:
git checkout --track origin/my-branch-name
Push to a Branch
If your local branch does not exist on the remote, run either of these commands:
git push -u origin MultiFrameVersion
git push -u origin HEAD
подивитись, які файли були змінені:
git status
Commit Files
git commit -m "Message that describes what this change does"
Щоб переглянути локальні теги в Git, використовуй команду:
git tag
Ця команда виведе список усіх локальних тегів у твоєму репозиторії.
Щоб перевірити, які теги є на віддаленому репозиторії:
git ls-remote --tags origin
Щоб додати локальний тег на сервер (віддалений репозиторій), скористайся командою:
git push origin <назва_тега>
Наприклад:
git push origin v1.0.0
Якщо хочеш додати всі локальні теги одразу:
git push origin --tags
Перевірити, що тег дійсно потрапив на сервер:
git ls-remote --tags origin
set small_angle = 180
CAN Hacker
Switch to PAL , Just uncoment in config.txt
#config_hdmi_boost=4
# uncomment for composite PAL
sdtv_mode=2
sdtv_aspect=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
///////////////////////////////////////////////////////////////////
Switch to NTSC :
Comment PAL:
# uncomment for composite PAL
#sdtv_mode=2
#sdtv_aspect=2
And add to cmdline.txt
this commands: vc4.tv_norm=NTSC video=Composite-1:720x480@60ie
Should looks like :
console=tty1 root=PARTUUID=ac3485a5-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait vc4.tv_norm=NTSC video=Composite-1:720x480@60ie
in one line without enter and the end.
Gray Scale camera:
Max angle inclination:
get max_angle_inclination_pit
max_angle_inclination_rll=800
max_angle_inclination_pit=800
sudo nano /etc/dphys-swapfile
edit CONF_SWAPFILE=100 to CONF_SWAPFILE=1024
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
sudo /etc/init.d/dphys-swapfile restart
CMAKE realise compilation:
Creating cmake:
cmake -DCMAKE_CXX_FLAGS= "-DCMAKE_CXX_FLAGS_RELEASE=-Ofast -DNDEBUG" ..
cmake --build . -j3
TAR:
tar -czvf projects.tar.gz $HOME/projects/
UNTAR:
tar -xvzf example1.tar.gz
Link:
ln -s <Target> <Linkname>
WFB-NG
https://openhd.gitbook.io/open-hd
https://www.youtube.com/watch?v=85dGqRpCZoY&ab_channel=MarioFPV
OpenIPC, OpenHD, Ruby, WFB-ng
бомбу можливо спускать на лебедке, на леске.
Set __COMPAT_LAYER=RunAsInvoker
Start kicad-8.0.7-x86_64.exe
Camera parameters:
Rocket control:
PWM:
WiringPI
optical flow
Ubuntu 18_04.6_RPI_ZERO:
Insert SD-card, check device name:
sudo fdisk -l
sudo umount /dev/sdb
Copy SD to file:
sudo dd if=/dev/sdb of=sd-card-copy.img bs=1M status=progress
sudo fdisk -l
sudo umount /dev/sdb
Copy file to SD:
sudo dd if=sd-image-name.img of=/dev/sdb bs=1M status=progress
///////
fdisk -l duck_image.img
Device Boot Start End Sectors Size Id Type
duck_image.img1 8192 532479 524288 256M c W95 FAT32 (LBA)
duck_image.img2 532480 7628799 7096320 3.4G 83 Linux
sudo mount -o loop,offset=$((532480*512)) duck_image.img ~/mnt
sudo umount ~/mnt
// It is not work:
Checking of image by mounting:
mkdir ~/mnt
sudo mount -o loop ~/sdcard_backup.img ~/mnt
ls ~/mnt
sudo /usr/local/bin/pishrink.sh targeter_27_11_2024_clean.img
Copy to RPI by SSH:
Download script:
Move it to:
sudo mv pishrink.sh /usr/local/bin/
Allow it to run:
sudo chmod 755 pishrink.sh
Shrink image:
sudo /usr/local/bin/pishrink.sh image.bin
Подшипник4мм:
folded wing mechanism
CMAKE:
https://stackoverflow.com/questions/7724569/debug-vs-release-in-cmake
cmake -DCMAKE_BUILD_TYPE=Release ..
Command:
cmake cmake -S .. -D CMAKE_BUILD_TYPE=Release
sudo mount -o loop,offset=272629760 /home/ubuntu/works/img/air_img.img /mnt
losetup provides partition probing through -P. Using this makes mounting partitions of a full disk image such as the Raspbian SD card image very easy:
losetup -P /dev/loop0 raspbian.img
mkdir /mnt/raspbian
mount /dev/loop0p2 /mnt/raspbian
mount /dev/loop0p1 /mnt/raspbian/boot
or ###############################################################################
First examine the partitions in the image file and determine the offset by using fdisk:
$ fdisk -u -l rpi_image280914
Disk rpi_image280914: 16.0 GB, 16012804096 bytes
255 heads, 63 sectors/track, 1946 cylinders, total 31275008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000cdac7
Device Boot Start End Blocks Id System
rpi_image280914p1 * 2048 514047 256000 c W95 FAT32 (LBA)
rpi_image280914p2 540672 31242239 15350784 83 Linux
Take the Start sector of the partition you want and multiply that value by the Units size. So if you want the second partition you'll get 540672 * 512 = 276824064.
Now create a folder and mount the partition:
mkdir rpi_partition2
sudo mount -o loop,offset=276824064 rpi_image280914 rpi_partition2/
Once you are done doing what you want with the partition data:
sudo umount rpi_partition2/
rm -r rpi_partition2/
#############################################################################
RC transmitter:
mod1 = throttle (газ) справа
mod2 = throttle (газ) слева
Bearing Подшипники
Optical Flow:
SD cars serial number:
cat /proc/meminfo
//////////////////////////////////////////////////////////////////////////////////
1. Использование tmpfs (RAM-диск):
Описание: tmpfs - это файловая система, которая хранит данные в оперативной памяти (RAM). Она идеально подходит для временных файлов, кэшей или данных, требующих быстрого доступа. При перезагрузке данные теряются.
Создание:
sudo mkdir /mnt/ramdisk # Создаем точку монтирования
sudo mount -t tmpfs -o size=100M tmpfs /mnt/ramdisk # Монтируем tmpfs
sudo chmod 777 /mnt/ramdisk # Даем права на запись (опционально)
bash
-t tmpfs: Указывает тип файловой системы tmpfs.
-o size=100M: Устанавливает размер RAM-диска в 100 мегабайт. Вы можете изменить размер в зависимости от ваших потребностей (например, 50M, 256M, 1G). Убедитесь, что у вас достаточно свободной RAM!
/mnt/ramdisk: Это каталог, куда будет “примонтирован” ваш RAM-диск. Вы можете выбрать любое другое место, но оно должно существовать.
sudo chmod 777 /mnt/ramdisk: Предоставляет всем пользователям права на чтение, запись и выполнение на RAM-диске. Это может быть небезопасно для важных данных. Вместо этого лучше назначить права конкретному пользователю или группе:
sudo chown <пользователь>:<группа> /mnt/ramdisk.
Проверка:
df -h /mnt/ramdisk
Эта команда покажет использование дискового пространства для вашей точки монтирования.
Автоматическое монтирование при загрузке (опционально): Чтобы RAM-диск автоматически монтировался при каждой загрузке, добавьте строку
в файл /etc/fstab:
sudo nano /etc/fstab
Добавьте следующую строку (измените размер и точку монтирования при необходимости):
tmpfs /mnt/ramdisk tmpfs defaults,size=100M 0 0
Сохраните и закройте файл. После этого перезагрузите Raspberry Pi, чтобы убедиться, что все работает правильно:
sudo reboot.
Удаление:
sudo umount /mnt/ramdisk
sudo rmdir /mnt/ramdisk
Openssl:
inav
sudo apt update
sudo apt install libssl-dev
sudo apt upgrade libssl-dev openssl
gcc -o encrypt encrypt.c -lssl -lcrypto -I/usr/include/openssl
sudo apt autoremove
Отримайте адресу точки входу:
objdump -f <your_program>
Convert bin to HEX:
xxd -p output.enc | sed 's/\(..\)/\1 /g' > output.hex
gcc -fPIC -o read_id read_id.c
gcc -o encrypt encrypt.c -lssl -lcrypto -I/usr/include/openssl
gcc -o self_decryption decryption.c -lssl -lcrypto -lpthread
ELF file:
GPS less mapping:
sudo kill -SIGTERM PID
volatile sig_atomic_t stop = 0;
void handle_sigterm(int sig) {
(void)sig; // Запобігання warning-у про невикористаний параметр
printf("Отримано SIGTERM, завершення роботи...\n");
stop = 1;
}
HANDLE REGISTRATION:
" signal(SIGTERM, handle_sigterm);
printf("Демон запущений, очікує SIGTERM...\n");
// Основний цикл демона
while (!stop) {
// Симуляція роботи (наприклад, обробка кадрів з камери)
sleep(1);
}
"
WIFI radar
GStreamer:
sudo apt update
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt update
sudo apt install macchanger
Save File:
GPS RTK module
https://www.youtube.com/watch?v=5-7F85yANnk&ab_channel=NikodemBartnik
AUTOMOUNT USB_FLASH:
Auto mounting during system start:
1. Створюємо mount_usb.sh
sudo nano /home/pi/mount_usb.sh
Додаємо:
#!/bin/bash
# Шукаємо USB-розділ
USB_PART=$(lsblk -o NAME,TRAN | grep usb | awk '{print "/dev/"$1"1"}' | head -n 1)
# Перевіряємо, чи є флешка
if [ -b "$USB_PART" ]; then
MOUNT_POINT="/mnt/usb"
mkdir -p $MOUNT_POINT
mount $USB_PART $MOUNT_POINT
echo "$(date): Флешка змонтована у $MOUNT_POINT" >> /home/pi/usb_log.txt
else
echo "$(date): Флешка не знайдена" >> /home/pi/usb_log.txt
fi
Робимо скрипт виконуваним:
sudo chmod +x /home/pi/mount_usb.sh
sudo nano /etc/systemd/system/mount-usb.service
[Unit]
Description=Автоматичне монтування флешки
After=multi-user.target
[Service]
ExecStart=/home/pi/mount_usb.sh
RemainAfterExit=yes
Type=oneshot
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable mount-usb.service
sudo systemctl start mount-usb.service
13
MaskPhoneNumber = 00000000 7b 9e a3 44 2ccf679f1d7f05000c61736466672200000012018c8b
// CLEAN SCRIPT ///////////////////////////////////////////////////////////
echo > ~/.bash_history
history -c
sudo rm -rf /var/log/*
sudo journalctl --vacuum-time=1s
## REMOVE ALL SSH KEYS. MUST BE REGENERATE, if not - loosing SSH:
## sudo rm -rf /etc/ssh/ssh_host_*
## rm -rf ~/.ssh/
##sudo ssh-keygen -A
##sudo systemctl restart ssh
##sudo systemctl status ssh
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
sudo apt clean
sudo apt autoremove -y
sudo rm -rf /var/lib/apt/lists/*
rm -rf ~/.cache/*
rm -rf ~/.config/*
rm -rf ~/.local/share/*
df
swapon --show
free -h
FINAL WIPING
sudo dd if=/dev/urandom of=/randomfill bs=1M status=progress && rm -f /randomfill
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CONFIG.conf
///////////////////////////////////////
0; 0
0.01; INIT_PITCH_K_P_GAIN
0.001; INIT_PITCH_K_P_D_GAIN
0.04; INIT_PITCH_K_I_GAIN
0.0; INIT_PITCH_K_D_GAIN
3.0; INIT_ROLL_K_P_GAIN
0.001; INIT_ROLL_K_P_D_GAIN
1.0; INIT_ROLL_K_I_GAIN
0.0; INIT_ROLL_K_D_GAIN
0.2; INIT_YAW_K_P_GAIN
0.002; INIT_YAW_K_P_D_GAIN
0.01; INIT_YAW_K_I_GAIN
0.0; INIT_YAW_K_D_GAIN
1.5; INIT_THROTTLE_K_P_GAIN
0.1; INIT_THROTTLE_K_P_D_GAIN
0.15; INIT_THROTTLE_K_I_GAIN
0.0; INIT_THROTTLE_K_D_GAIN
0.01; INIT_TAU
-80.0; INIT_PITCH_LIM_MIN
80.0; INIT_PITCH_LIM_MAX
-80.0; INIT_ROLL_LIM_MIN
80.0; INIT_ROLL_LIM_MAX
-90.0; INIT_YAW_LIM_MIN
90.0; INIT_YAW_LIM_MAX
0.0; INIT_THROTTLE_LIM_MIN
55.0; INIT_THROTTLE_LIM_MAX
-80.0; INIT_PITCH_LIM_MIN_INT
80.0; INIT_PITCH_LIM_MAX_INT
-80.0; INIT_ROLL_LIM_MIN_INT
80.0; INIT_ROLL_LIM_MAX_INT
-90.0; INIT_YAW_LIM_MIN_INT
90.0; INIT_YAW_LIM_MAX_INT
0.0; INIT_THROTTLE_LIM_MIN_INT
55.0; INIT_THROTTLE_LIM_MAX_INT
1.0; PITCH_PID_CONTROL_ON
1.0; ROLL_PID_CONTROL_ON
1.0; YAW_PID_CONTROL_ON
1.0; THROTTLE_PID_CONTROL_ON
-27.0; PITCH_ATTACK_ANGLE,look down-negativ degree. So.legal value is from 0.1 to 0.9 of negativ pitch limit.
6.0; TRACKING_MODE_CHANNEL_INDEX_NUMBER, CH 7.0 by default
4.0; EXP_MODE_CHANNEL_INDEX_NUMBER, CH 6.0 by default
1.0; EXP_MODE_CONTROL_ON, disabled by default - 0.0, enabled - 1.0
0.0; EXP_MODE_PERMANENT_USE, exp mode always ON, EXP CH and and EXP control have no influence.
7.0; ANGLE_MODE_CHANNEL_INDEX_NUMBER CH 9.0 by default, Angle mode ON is if ch 2/3 of MAX CH VALUE.
0.0; ANGLE_MODE_CONTROL_ON, disabled by default - 0.0, enabled - 1.0
175.0; PITCH_STICK_MIN_VALUE
992.0; PITCH_STICK_MIDLE_VALUE
1801.0; PITCH_STICK_MAX_VALUE
177.0; ROLL_STICK_MIN_VALUE
992.0; ROLL_STICK_MIDLE_VALUE
1801.0; ROLL_STICK_MAX_VALUE
174.0; THROTTLE_STICK_MIN_VALUE
1811.0; THROTTLE_STICK_MAX_VALUE
183.0; YAW_STICK_MIN_VALUE
992.0; YAW_STICK_MIDLE_VALUE
1800.0; YAW_STICK_MAX_VALUE
0.0; X_CENTER_SHIFT - shift the red dot from the center of screen, if 640/2 => 320 + X_shift(=20) = 340-> current targeter center
0.0; Y_CENTER_SHIFT
36500.0; UDP_DESTINARION_PORT, 36500 defaule
192.0; UDP_DESTINARION_ADDRESS_MSB 4bytes for address 192.168.0.103
168.0; UDP_DESTINARION_ADDRESS_1
0.0; UDP_DESTINARION_ADDRESS_2
103.0; UDP_DESTINARION_ADDRESS_LSB
0.0; ENABLE_FIX_PITCH_ATTACK_ANGLE 0-disable mode, 1 - enable mode. Default 0 .
0.0; ENABLE_LOCKING_OF_CURRENT_PITCH_ANGLE, default 0
0; 0
///////////////////////////////////////
AKK FX2-ultimate VTX Table(N/A for US customer)
vtxtable bands 5
vtxtable channels 8
vtxtable band 1 BOSCAM_A A FACTORY 5865 5845 5825 5805 5785 5765 5745 5725
vtxtable band 2 BOSCAM_B B FACTORY 5733 5752 5771 5790 5809 5828 5847 5866
vtxtable band 3 BOSCAM_E E FACTORY 5705 5685 5665 0 5885 5905 0 0
vtxtable band 4 FATSHARK F FACTORY 5740 5760 5780 5800 5820 5840 5860 5880
vtxtable band 5 RACEBAND R FACTORY 5658 5695 5732 5769 5806 5843 5880 5917
vtxtable powerlevels 4
vtxtable powervalues 0 1 2 3
vtxtable powerlabels 25 200 600 1200
///////////////////////////////////////
restart WIFI: (треба скріпт написати, який буде шукати підходящий IP ( написав. Працює.))
Setup WIFI script:
Create:
/usr/local/bin/set_wlan_ip.sh
Change right:
sudo chmod +x /usr/local/bin/set_wlan_ip.sh
Create
sudo nano /etc/dhcpcd.exit-hook
#!/bin/bash
/usr/local/bin/set_wlan_ip.sh
Change right:
sudo chmod +x /etc/dhcpcd.exit-hook
Restsrt:
sudo systemctl restart networking
All info in Chat GPT.
sudo ip link set wlan0 down
sudo ip link set wlan0 up
CPU temperature
vcgencmd measure_temp
vcgencmd measure_clock arm
Install KEY to Visual Studio:
keytool -genkey -v -keystore myapp.keystore -alias myapp -keyalg RSA -keysize 2048 -validity 10000
myapp.keystore – це файл підпису, який буде використовуватися для APK.alias myapp – унікальний псевдонім.validity 10000 – сертифікат діє 10 000 днів (~27 років).Вам запропонують ввести пароль – запам’ятайте його!
Файл myapp.keystore буде збережений у тій самій папці, де ви запустили команду.
3. Налаштуйте Підпис для APK
Відкрийте файл Platforms/Android/Android.csproj.
Додайте в <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> такі рядки:
<AndroidPackageFormat>aab</AndroidPackageFormat>
<AndroidKeyStore>true</AndroidKeyStore>
<AndroidSigningKeyStore>$(ProjectDir)myapp.keystore</AndroidSigningKeyStore>
<AndroidSigningKeyAlias>myapp</AndroidSigningKeyAlias>
<AndroidSigningKeyPass>your-password</AndroidSigningKeyPass>
<AndroidSigningStorePass>your-password</AndroidSigningStorePass>
AndroidPackageFormat=aab – якщо вам потрібен .aab для Google Play. Якщо вам потрібен .apk, змініть на apk.
AndroidSigningKeyStore – шлях до .keystore (переконайтесь, що файл myapp.keystore знаходиться у корені проєкту).
your-password – замініть на пароль, який ви ввели під час генерації keystore.
4. Створіть APK
Тепер можна створити .apk:
У Visual Studio відкрийте Build → Publish → Publish Android App.
Виберіть Ad-Hoc, потім натисніть Next.
Введіть дані для підпису (якщо не вказали в Android.csproj).
Натисніть Publish – Visual Studio згенерує .apk у bin\Release\android.
Dron 10 inchs:
Molicel P42A 21700 4200mAh 45A Battery
Motors:
3356
Frame:
GEP EF10 frame
X60
Props
FC:
2199
Visual Studio Code pompilation jobs :
Add to file setting.json:
.....................
"board_udp_packets.h": "c"
},
"C_Cpp.errorSquiggles": "disabled",
"cmake.parallelJobs": 3
}
“Drone Detection Using Deep Learning: A VGG16-based Approach for Object Localization”
Python Camera and Tensorflow via. Docker on macOS, Ubuntu and Raspbian
Installation of ROCm and TensorFlow on Ubuntu 20.4 LTS for Radeon RX580
https://snicholas.medium.com/running-tensorflow-2-4-on-amd-rx580-graphic-card-on-ubuntu-budgie-20-04-57dfdde64cc0
alias drun='sudo docker run \
-it \
--network=host \
--device=/dev/kfd \
--device=/dev/dri \
--ipc=host \
--shm-size 16G \
--group-add video \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
-v $HOME/dockerx:/dockerx'
drun rocm/tensorflow:rocm4.0-tf2.4-dev
pip install absl-py
pip3 install absl-py
Copy from Docker :
docker cp 71b05bdff07a3f170051a4f1164a8792fdb6e6d1988f67522d88fe7b78dbf408:/root/app/yolo_traning1/runs/detect/train/weights/best_saved_model /host/path/target
Copy to Docker:
cp ./yolo_traning1 71b05bdff07a3f170051a4f1164a8792fdb6e6d1988f67522d88fe7b78dbf408:/root/app
MobileNetV1:
Jupiter Notebook:
(tf_env) D:\works\tmp\tf_env>pip3 install --upgrade pip
(tf_env) D:\works\tmp\tf_env>pip3 install jupyter
(tf_env) D:\works\tmp\tf_env>jupyter notebook
Install openjdk 8, requirement for Bazel:
sudo apt remove --purge openjdk-* -y
sudo apt autoremove -y
sudo apt install openjdk-8-jdk -y
Bazel distr (needded for Tensorflow insatallation)
Remove:
unset _JAVA_OPTIONS
Build:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-armhf
export PATH=$JAVA_HOME/bin:$PATH
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-armhf' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
export BAZEL_JAVAC_OPTS="-J-Xmx1536m -J-Xms200m"
env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" bash ./compile.sh
Cross compilation LiteRT with CMake:
ARMCC_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -funsafe-math-optimizations -mfp16-format=ieee"
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
-DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
-DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
-DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=armv7 \
../tensorflow_src/tensorflow/lite/c/
cmake ../tensorflow_src/tensorflow/lite/c
You can compile label_image.
sudo apt install git openjdk-8-jdk curl
sudo apt install python3-dev python3-pip python3-numpy
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
git checkout v2.6.0
Setup CMake:
wget https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz
tar zxvf cmake-3.16.7-Linux-x86_64.tar.gz
tree -L 2 cmake-3.16.7-Linux-x86_64
sudo apt install tree
sudo mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7
sudo ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/
cmake --version
Setup Bazel:
$ sudo apt-get install openjdk-8-jdk
$ echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
$ curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install bazel
sudo apt update && sudo apt install bazel-3.7.2
Run TensorFlow Compilation:
sudo swapoff /swapfile
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
export PYTHON_INCLUDE_DIR=$(python3.7 -c 'import numpy; print(numpy.get_include())')
pip install keras_preprocessing
#clear bazel cashe#
bazel clean --expunge
./configure
bazel build --config=opt --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" //tensorflow/tools/pip_package:build_pip_package
bazel build --jobs=$(nproc) --config=opt --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" //tensorflow/tools/pip_package:build_pip_package
ВИЙТИ з ДІРЕКТОРІЇ КОМПІЛЯЦІЇ !!!
exchange buffer:
sudo apt update && sudo apt -y install open-vm-tools open-vm-tools-desktop
########################### CMake crosscompilation:
mkdir tf_build_1
cd tf_build_1/
ARMCC_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -funsafe-math-optimizations -mfp16-format=ieee"
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=armv7 ../tensorflow_src/tensorflow/lite/c/
cmake --build .
#####################################################################
mkdir -p ${HOME}/toolchains
sudo apt install curl
curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
tar xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C ${HOME}/toolchains
sudo apt-get install cmake
cmake --version cmake version 3.16.7
git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
cd tensorflow_src/
git checkout v2.6.0
mkdir cmake_inst
cd cmake_inst
wget https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz
tar zxvf cmake-3.16.7-Linux-x86_64.tar.gz
sudo apt install tree
tree -L 2 cmake-3.16.7-Linux-x86_64
sudo mv cmake-3.16.7-Linux-x86_64 /opt/cmake-3.16.7
sudo ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/
cd ..
cd tflite_build/
ARMCC_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -funsafe-math-optimizations -mfp16-format=ieee"
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=armv7 ../tensorflow_src/tensorflow/lite/
cmake --build . -j4
mkdir tf_build_1
cd tf_build_1/
ARMCC_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -funsafe-math-optimizations -mfp16-format=ieee"
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=armv7 ../tensorflow_src/tensorflow/lite/c/
cmake --build .
RPI Tensorflow:
Детекція дронів:
1) work
2) home
Відео з літачком:
Похудання:
Документація на CADDX камеру.
Цікаві проєкти:
Instalation ONNX :
https://grok.com/chat/67205262-841f-4db0-9958-655675f54e4e
Як включити Servo:
PWM сігнал є на PA08 і ще є на PB06 , тужи назвичай підключені Led Streep.
Треба в CLI командою dump подивиться куди точно підключен LED STREEP .
Далі його треба відключити від ресурса:
resource LED_STRIP 1 NONE
А серву треба до цього ресурса підключити:
resource SERVO 1 B06
або, як що LED STREEP був підключен на PA08:
resource SERVO 1 A08
далі
save
Тепет в самому конфігураторі бетафлай треба налаштувати серво як звичайно.
В мене лаялось , що на PB06 підключен мотор 5, але в конфігураторі він відключен. Так що нам це не заважає.
dump має в результаті показувати щось таке:
resource LED_STRIP 1 NONE
resource SERVO 1 B06
feature SERVO_TILT
servo 0 1000 2000 1500 100 7
save
CHAT GPT:
Приклад конфігурації в CLI для Betaflight SpeedyBee F405 V4
Щоб налаштувати ці пади для сервоприводів, виконайте наступні команди в CLI:
resource PWM 1 none
resource MOTOR 5 none
resource MOTOR 6 none
resource SERVO 1 B15
resource SERVO 2 C08
resource SERVO 3 C09
save
У цьому прикладі:
S9 відповідає піну B15
M5 відповідає піну C08
M6 відповідає піну C09
Приклад конфігурації в CLI для Betaflight SpeedyBee F405 V3
resource MOTOR 5 none
resource MOTOR 6 none
resource SERVO 1 B00
resource SERVO 2 B01
save
Для S9 :
resource SERVO 1 B15
set osd_show_spec_prearm = OFF
IMX462
тут можливо скачать старі версіі розширень.
Треба скачать останню версію Remote SSH cумісну з 1.76.2
ffmpeg -f v4l2 -video_size 1280x720 -i /dev/video0 -frames 1 out.jpg
Raspberry Pi OS Bookworm
crontab -e
Add :
@reboot /path/to/wifi_nmcli.sh
ADRC controller:
quadcopter guidance control algorithms
How Did I Use Python And Ai To Create A Fully Autonomous Drone? ArduCopter pixhawk and OpenCV.
Список змін:
.... Щось там з Roll.
... Можно спробувати писати логи в файл для того щоб зрозуміти, де є проблема з повотором ROLL, але треба перевірити який це буде мати вплив на fps.
(Логування виявило, що щось впливає на Roll.LimMax і воно стає рівним 0, що впливає на конвертацію в RC команду. там є ділення на нуль. Що приводить до збою. Можливо це тому що дрон намагається відновити поєднання з WiFi. Додав перевірку, якщо LimMax меньше 70 градусів, то LimMax = 80)
... Хочеться зробити адаптивні коєфіцієнти для PID, щоб не розгойдувало для великого перевищення по висоті.
(Скопірував у sandbox весь проєкт. Додав альфаБетта фільт для розрахування Gain залежно від дістанції до центра по Y. Gain міняється від 0.1 до 1 при зміні дістанції від 240 до 0. Тестування на сімуляторі показало, що розгойдуваня зникло.
А тепер УВАГА!!! коли ми монтуємо камеру під фіксованим кутом в + або - 15 градусів, то було досить велике розгойдування. Тепер це мало б зникнути.
)
... Або спробувати LADRC фільтри для керування замість PID.
(Спробував для Roll та Yaw. Throttle керувався попереднім PID. Pitch фіксований. Тестувалось на сімуляторі. Щось в цьому є. Але це для майбутньої версії.)
Main Angle preset(це був найкращій пресет для Альфи):
Kp Kpd Ki Pitch 0.1 0.0 0.0
Roll 1.2 0.001 0.1
Throttle 0.5 0.0 0.1
Yaw 0.15 0.005 0.05
Throttle from 20% - 60%
Flight Computer and Navigation Software for a Fin-Controlled Rocket
OpenRocket simulator
ImpulseRc відключити приймач. Він конфліктує з DFU mode of FC.
UDP from X-Plane:
Розрахунок літака:
LLM RPI:
Drone Tracking Radar
AirFoil
Neural Flight controller
WiFi activation on RPI5
raspi-config
add SSID and password.
Restart . In /etc/NetworkManager/system-connections you will found file with SSID connection paramerers. In our case it is system_test_5.nmconnection . But it now set ip from DHCP pull.
To set static IP 192.168.2.224 we need do next:
1) modify connection :
sudo nmcli connection modify system_test_5 \
ipv4.method manual \
ipv4.addresses 192.168.2.224/24 \
ipv4.gateway 192.168.2.1 \
ipv4.dns "192.168.2.1,8.8.8.8" \
ipv4.ignore-auto-dns yes
2) set autoconnect :
sudo nmcli connection modify system_test_5 connection.autoconnect yes
3) restart connection:
sudo nmcli connection up system_test_5
PID toolbox WEB version:
https://skypulse.ua/pidpulse/
Комментарии
Отправить комментарий