Instalation of RPI system

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:
gigolo


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




    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
    save


    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/











    Комментарии

    Популярные сообщения из этого блога

    iNAV work around

    Намоточный станок. Программа для намоточного станка. G code.

    Вычисление азимута и расстояния между двумя точками