tag:blogger.com,1999:blog-74336451725168164482024-03-16T08:55:30.350+01:00DHOB (IU5SGN)Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.comBlogger2109125tag:blogger.com,1999:blog-7433645172516816448.post-84983569563911727072024-03-15T21:39:00.002+01:002024-03-15T21:39:37.455+01:00FTP Bash script<p> Uno script rubato su stack overflow per fare l'upload automatico su FTP senza criptazione<br /></p><p> </p><p><b><i>#!/bin/sh<br />HOST='ftp.xxxxx.altervista.org'<br />USER='xxxxxxx'<br />PASSWD='xxxxxxxxxxxxxxxxxxx'<br />FILE='luca.jpg'<br /><br />ftp -n $HOST <<END_SCRIPT<br />quote USER $USER<br />quote PASS $PASSWD<br />binary<br />put $FILE<br />quit<br />END_SCRIPT<br />exit 0</i></b></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-14639523884439313412024-03-15T20:40:00.005+01:002024-03-15T21:33:52.457+01:00Canon 450D e Gphoto2<p> GPhoto 2 permette il controllo remoto di alcuni modelli di DSLR. Ho provato con la mia Canon EOS 500D<br /></p><p> </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSqRK6C_BGh0ClwQZYA0-a2CgaYlZCT0um_XJLmU3TCA8YIUiy1lOAGOUv2isRhN58Y7TEXRDnjxT2Zxm2A42ZVRiay-TwnLuVuLBe_ldboAfI4rwnPgWEpr5DvAwuHk4YVEiiFazYAESiti7Z714QJw1bnI7ZDHd67h2DSp_W08Bdxup4NG5gxyZITSFI/s4032/IMG_6407.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSqRK6C_BGh0ClwQZYA0-a2CgaYlZCT0um_XJLmU3TCA8YIUiy1lOAGOUv2isRhN58Y7TEXRDnjxT2Zxm2A42ZVRiay-TwnLuVuLBe_ldboAfI4rwnPgWEpr5DvAwuHk4YVEiiFazYAESiti7Z714QJw1bnI7ZDHd67h2DSp_W08Bdxup4NG5gxyZITSFI/s320/IMG_6407.HEIC" width="320" /></a></div><p> </p><p>Al primo tentativo il comando <b>gphoto2 --auto-detect</b><br />Model Port <br />----------------------------------------------------------<br />Canon EOS 500D usb:001,002 <br /></p><p></p><p>funzionava ma i comandi successivi risultano con l'errore <br /></p><p><span style="font-size: x-small;"><i>An error occurred in the io-library ('Could not claim the USB device'):
Could not claim interface 0 (Device or resource busy). Make sure no
other program (gvfs-gphoto2-volume-monitor) or kernel module (such as
sdc2xx, stv680, spca50x) is using the device and you have read/write
access to the device.<br />ERROR: Could not capture image.<br /></i></span></p><p>Spenta e riaccesa la camera ho potuto eseguire il list dei files sulla SD<br /></p><p>gphoto2 --list-files</p><p>Effettuare l'upload di una immagine <br /></p><p><b>gphoto2 --get-file /store_00020001/DCIM/100CANON/IMG_9200.JPG</b></p><p>effettuare scatti</p><p><b>gphoto2 --capture-image<br />gphoto2 --capture-image-and-download --filename %m%d%H%M%S.jpg</b><br /></p><p></p><p>Con questo comando si ottengono i<b> </b>raw CRE<b> <br /></b></p><p><b>gphoto2 --get-all-raw-data</b><br /></p><p></p><p> Per convertire in raw in PNG si puo' usare Darktable in modalita' terminale<br /></p><p><b>for pic in *.cr2; do darktable-cli "$pic" "$(basename ${pic%.CR2}.png)"; done</b></p><p></p><div class="mt24" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px none; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: var(--su24) !important; padding: 0px; vertical-align: baseline;"><div class="d-flex fw-wrap ai-start jc-end gs8 gsy" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; align-items: flex-start; border: 0px none; box-sizing: inherit; display: flex; flex-wrap: wrap; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; justify-content: flex-end; line-height: inherit; margin-left: 0px; margin-right: 0px; padding: 0px; vertical-align: baseline;"><time datetime="2017-09-27T22:35:17" itemprop="dateCreated" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; -webkit-text-stroke-width: 0px; background-color: white; border: 0px none; box-sizing: inherit; color: #0c0d0e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI Adjusted", "Segoe UI", "Liberation Sans", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: normal; font-variant-alternates: inherit; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; font-weight: 400; letter-spacing: normal; line-height: inherit; margin: 0px; orphans: 2; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;"></time><div class="flex--item mr16" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; -webkit-text-stroke-width: 0px; background-color: white; border: 0px none; box-sizing: inherit; color: #0c0d0e; flex: 1 1 100px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI Adjusted", "Segoe UI", "Liberation Sans", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: normal; font-variant-alternates: inherit; font-variant-caps: normal; font-variant-east-asian: inherit; font-variant-ligatures: normal; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; font-weight: 400; letter-spacing: normal; line-height: inherit; margin-left: 0px; margin-right: 0px; orphans: 2; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;"><div class="js-post-menu pt2" data-post-id="960056" data-post-type-id="2" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px none; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: var(--su2) !important; vertical-align: baseline;"></div><span style="font-size: small;">Oppure imagemagick<br /></span></div></div></div><p></p><div class="s-prose js-post-body" itemprop="text" style="--_pr-blockquote-before-bg: var(--black-250); --_pr-blockquote-ml: 1em; --_pr-blockquote-mt: 0; --_pr-code-fs: var(--fs-body1); --_pr-fs: calc(var(--su-static16) - var(--su-static1)); --_pr-h1-fs: var(--fs-headline1); --_pr-h2-fs: var(--fs-title); --_pr-h3-fs: var(--fs-subheading); --_pr-h4-fs: var(--fs-body3); --_pr-h5-fs: var(--fs-body2); --_pr-h6-fs: var(--fs-body1); --_pr-hr-bg: var(--black-225); --_pr-img-mb: 1.1em; --_pr-kbd-bc: var(--black-300); --_pr-kbd-bs: 0 var(--su-static1) var(--su-static1) hsla(210,8%,5%,0.15), inset 0 1px 0 0 var(--_white-static); --_pr-lh: 1.5; --_pr-soiler-after-o: unset; --_pr-soiler-child-o: 0; --_pr-soiler-child-visibility: hidden; --_pr-spoiler-after-t: 1em; --_pr-spoiler-cursor: pointer; --s-prose-spacing-condensed: calc(1.1em / 2); --s-prose-spacing: 1.1em; --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px none; box-sizing: inherit; font-family: var(--theme-post-body-font-family, var(--theme-body-font-family)); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--_pr-fs); font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: var(--_pr-lh); margin: 0px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; width: 653.219px;"><pre style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; background-color: var(--highlight-bg); border-radius: var(--br-md); border: 0px none; box-sizing: inherit; color: var(--highlight-color); font-family: var(--ff-mono); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--fs-body1); font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: var(--lh-md); margin: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: var(--su12); scrollbar-color: var(--scrollbar) transparent; vertical-align: baseline; width: auto;"><span style="font-size: small;"><b>mogrify -format png *.cr2</b></span><code style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; background-color: transparent; border-radius: 0px; border: 0px none; box-sizing: inherit; color: var(--black-600); font-family: var(--ff-mono); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--_pr-code-fs); font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;">
</code></pre></div><div><br /></div><p>Interessante e' anche la libreria Python</p><p><a href="https://github.com/jim-easterbrook/python-gphoto2"> https://github.com/jim-easterbrook/python-gphoto2 </a><br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-5944051608307607792024-03-14T10:51:00.003+01:002024-03-15T17:10:00.269+01:00Pyrealsense<p>ATTENZIONE: per funzionare alla massima risoluzione la Realsense deve usare una porta USB 3 ed un cavo idoneo ad USB 3 altrimenti si limita a 640x480</p><p> <br /></p><p>================================================== <br /></p><p><b>Solo Ottico 1920x1080 </b><br /></p><p><span style="font-size: x-small;"><i>import pyrealsense2 as rs<br />import numpy as np<br />import cv2<br />import time<br />import math<br /><br />pipeline = rs.pipeline()<br />config = rs.config()<br /><br />config.enable_stream(rs.stream.color, 1920, 1080, rs.format.bgr8, 30)<br /><br />profile = pipeline.start(config)<br /><br />align_to = rs.stream.color<br />align = rs.align(align_to)<br /><br />frames = pipeline.wait_for_frames()<br />aligned_frames = align.process(frames)<br />color_frame = aligned_frames.get_color_frame()<br />color_image = np.asanyarray(color_frame.get_data())<br />imageName1 = str(time.strftime("%Y_%m_%d_%H_%M_%S")) + '_Color.png'<br />cv2.imwrite(imageName1, color_image) <br />pipeline.stop()</i></span></p><p><span style="font-size: x-small;"><i></i></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-size: x-small;"><i><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPfUh1nJHglbe9H1QH5GEhKMGmZbgdg_EdDgP2ZlLtzIbuH2IFA1Pzu1Wg_xEtvEXIUvCN6LZXbTSFnFyN1F39sqy1evJmUvumifSZIhajdQtRVn20lIYmNFlGXtr7Vcc1YPjbsvB045l9_Mc5B0CppaWUeMbRLfucDkDP3yuzzYZ4coKG4jQT6WrgyXs4/s1920/2024_03_14_09_47_07_Color.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1920" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPfUh1nJHglbe9H1QH5GEhKMGmZbgdg_EdDgP2ZlLtzIbuH2IFA1Pzu1Wg_xEtvEXIUvCN6LZXbTSFnFyN1F39sqy1evJmUvumifSZIhajdQtRVn20lIYmNFlGXtr7Vcc1YPjbsvB045l9_Mc5B0CppaWUeMbRLfucDkDP3yuzzYZ4coKG4jQT6WrgyXs4/s320/2024_03_14_09_47_07_Color.png" width="320" /></a></i></span></div><span style="font-size: x-small;"><i><br /> </i></span><p></p><p>================================================== <span style="font-size: x-small;"><i></i></span></p><p><b>Ottico + Profondita' 1280x720 </b></p><p><b> </b></p><p>================================================== <span style="font-size: x-small;"><i></i></span></p><p></p><p></p><div style="text-align: left;"><span style="font-size: x-small;"><i>import pyrealsense2 as rs</i></span></div><div style="text-align: left;"><span style="font-size: x-small;"><i>import numpy as np</i></span></div><div style="text-align: left;"><span style="font-size: x-small;"><i>import cv2</i></span></div><div style="text-align: left;"><span style="font-size: x-small;"><i>import time</i></span></div><div style="text-align: left;"><span style="font-size: x-small;"><i>import math</i></span></div><p><span style="font-size: x-small;"><i>pipeline = rs.pipeline()<br />config = rs.config()<br /><br />config.enable_stream(rs.stream.depth, 1280, 720, rs.format.z16, 30)<br />config.enable_stream(rs.stream.color, 1280, 720, rs.format.bgr8, 30)<br /><br />profile = pipeline.start(config)<br />depth_sensor = profile.get_device().first_depth_sensor()<br />depth_scale = depth_sensor.get_depth_scale()<br /><br /># We will be removing the background of objects more than<br /># clipping_distance_in_meters meters away<br />clipping_distance_in_meters = 1.5 <br />clipping_distance = clipping_distance_in_meters / depth_scale<br /><br /><br />align_to = rs.stream.color<br />align = rs.align(align_to)<br /><br />frames = pipeline.wait_for_frames()<br /><br />aligned_frames = align.process(frames)<br />aligned_depth_frame = aligned_frames.get_depth_frame()<br />color_frame = aligned_frames.get_color_frame()<br /><br />depth_image = np.asanyarray(aligned_depth_frame.get_data())<br />color_image = np.asanyarray(color_frame.get_data())<br /><br /><br /># Remove background - Set pixels further than clipping_distance to grey<br />grey_color = 153<br />depth_image_3d = np.dstack((depth_image,depth_image,depth_image)) #depth image is 1 channel, color is 3 channels<br />bg_removed = np.where((depth_image_3d > clipping_distance) | (depth_image_3d <= 0), grey_color, color_image)<br /><br /># Render images<br />depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)<br />images = np.hstack((bg_removed, depth_colormap))<br />#cv2.namedWindow('Align Example', cv2.WINDOW_AUTOSIZE)<br /><br /># Filename <br />imageName1 = str(time.strftime("%Y_%m_%d_%H_%M_%S")) + '_Color.png'<br />imageName2 = str(time.strftime("%Y_%m_%d_%H_%M_%S")) + '_Depth.png'<br />imageName3 = str(time.strftime("%Y_%m_%d_%H_%M_%S")) + '_bg_removed.png'<br />imageName4 = str(time.strftime("%Y_%m_%d_%H_%M_%S")) + '_ColorDepth.png'<br />imageName5 = str(time.strftime("%Y_%m_%d_%H_%M_%S")) + '_DepthColormap.png'<br /><br /># Saving the image <br />cv2.imwrite(imageName1, color_image) <br />cv2.imwrite(imageName2, depth_image) <br />cv2.imwrite(imageName3, images) <br />cv2.imwrite(imageName4, bg_removed )<br />cv2.imwrite(imageName5, depth_colormap )<br /><br />pipeline.stop()</i></span></p><p><span style="font-size: x-small;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-size: x-small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgi8_csUCD5_NA9ziSt92bDJKPBrnRXtAVB3MwvMXBCvD7NxUHtCOwgKU8m6Ghkb7HZKsxkK4EoXLa_-r0IucFL1G3kxSFawrBu-O-iB1DWHkk_0Q1Hxb8wTdqJ8wsEUt9LbgzbkM-yvNBQH-C6y1vzYbw4BH2sr30DZZXVu-PeQrTyHOD-jm9xSIt02N0/s1280/2024_03_14_09_47_13_DepthColormap.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgi8_csUCD5_NA9ziSt92bDJKPBrnRXtAVB3MwvMXBCvD7NxUHtCOwgKU8m6Ghkb7HZKsxkK4EoXLa_-r0IucFL1G3kxSFawrBu-O-iB1DWHkk_0Q1Hxb8wTdqJ8wsEUt9LbgzbkM-yvNBQH-C6y1vzYbw4BH2sr30DZZXVu-PeQrTyHOD-jm9xSIt02N0/s320/2024_03_14_09_47_13_DepthColormap.png" width="320" /></a></span></div><span style="font-size: x-small;"><br /><i><br /></i></span><p></p><p>================================================== <span style="font-size: x-small;"><i></i></span></p><p><b>Infrarosso' 1280x720 </b></p><p>================================================== </p><p><span style="font-size: x-small;"><i>import pyrealsense2 as rs<br />import numpy as np<br />import cv2<br />import time<br />import math<br /> <br />pipeline = rs.pipeline()<br />config = rs.config()<br /><br />config.enable_stream(rs.stream.infrared, 1, 1280, 720, rs.format.y8, 30)<br />profile = pipeline.start(config)<br /> <br />frames = pipeline.wait_for_frames()<br />ir1_frame = frames.get_infrared_frame(1) <br />image = np.asanyarray(ir1_frame.get_data())<br />imageIR = str(time.strftime("%Y_%m_%d_%H_%M_%S")) + '_IR.png'<br />cv2.imwrite(imageIR, image)<br />pipeline.stop() </i></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt-ABy-9uvCv6U7-el4FpPaXccdL_v3y46mWbWm7WwODcWF8miMoFabu8lhcRYH4h7LWO7xatl26NtbiSBovCicYf89LkwtgqsXrLoAvZKsBHRDzlSae7yEiMh-PavW9BdoLCoEoB5PuU-k5Gn1y7LRGsCOLZAVWUPoKxarXZ6o3_95Y2Nax6mk4Pzfh82/s1280/2024_03_14_09_46_59_IR.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt-ABy-9uvCv6U7-el4FpPaXccdL_v3y46mWbWm7WwODcWF8miMoFabu8lhcRYH4h7LWO7xatl26NtbiSBovCicYf89LkwtgqsXrLoAvZKsBHRDzlSae7yEiMh-PavW9BdoLCoEoB5PuU-k5Gn1y7LRGsCOLZAVWUPoKxarXZ6o3_95Y2Nax6mk4Pzfh82/s320/2024_03_14_09_46_59_IR.png" width="320" /></a></div><br /><p><br /></p><p><span style="font-size: x-small;"><i><br /></i></span></p><p>================================================== <span style="font-size: x-small;"><i></i></span></p><p><b>Infrarosso' IR Emitter OFF 1280x720 </b></p><p>==================================================</p><p><span style="font-size: x-small;"><i>import pyrealsense2 as rs<br />import numpy as np<br />import cv2<br />import time<br />import math<br /> <br />pipeline = rs.pipeline()<br />config = rs.config()<br />config.enable_stream(rs.stream.infrared, 1, 1280, 720, rs.format.y8, 30)<br /><br />#disabilita disable IR emitter<br />pipeline_profile = pipeline.start(config)<br />device = pipeline_profile.get_device()<br />depth_sensor = device.query_sensors()[0]<br />if depth_sensor.supports(rs.option.emitter_enabled):<br /> depth_sensor.set_option(rs.option.emitter_enabled, 0)<br /><br />frames = pipeline.wait_for_frames()<br />ir1_frame = frames.get_infrared_frame(1) <br />image = np.asanyarray(ir1_frame.get_data())<br />imageIR = str(time.strftime("%Y_%m_%d_%H_%M_%S")) + '_IR_OFF.png'<br />cv2.imwrite(imageIR, image)<br />pipeline.stop() </i></span></p><p><span style="font-size: x-small;"><i> <br /></i></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-size: x-small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuGacJWYz6jMn79M_yEvYeHlGUOtfm0_0eKtUlfmnLag64MrFaBfqC4Bm85Jxzc5GzuQsoJefEEutYtps0K7FQLvw59_96S7HH6WYRjfEksJPfJLsGEwW2-geQA2rlAdy16jRPkenqyNPo3qsuhsiT_KBLvkG7L7OiKPDMlTEu-Dfq8SRvrhBfpU33yFoD/s1280/2024_03_14_09_49_13_IR_OFF.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuGacJWYz6jMn79M_yEvYeHlGUOtfm0_0eKtUlfmnLag64MrFaBfqC4Bm85Jxzc5GzuQsoJefEEutYtps0K7FQLvw59_96S7HH6WYRjfEksJPfJLsGEwW2-geQA2rlAdy16jRPkenqyNPo3qsuhsiT_KBLvkG7L7OiKPDMlTEu-Dfq8SRvrhBfpU33yFoD/s320/2024_03_14_09_49_13_IR_OFF.png" width="320" /></a></span></div><span style="font-size: x-small;"><br /></span><p></p><p>================================================== <span style="font-size: x-small;"><i></i></span></p><p><b>IMU</b></p><p>==================================================</p><p><span style="font-size: x-small;"><i>import pyrealsense2 as rs</i></span></p><p><span style="font-size: x-small;"><i>import numpy as np<br /><br /><br />def initialize_camera():<br /> # start the frames pipe<br /> p = rs.pipeline()<br /> conf = rs.config()<br /> conf.enable_stream(rs.stream.accel)<br /> conf.enable_stream(rs.stream.gyro)<br /> prof = p.start(conf)<br /> return p<br /><br /><br />def gyro_data(gyro):<br /> return np.asarray([gyro.x, gyro.y, gyro.z])<br /><br /><br />def accel_data(accel):<br /> return np.asarray([accel.x, accel.y, accel.z])<br /><br />p = initialize_camera()<br />try:<br /> while True:<br /> f = p.wait_for_frames()<br /> accel = accel_data(f[0].as_motion_frame().get_motion_data())<br /> gyro = gyro_data(f[1].as_motion_frame().get_motion_data())<br /> print("accelerometer: ", accel)<br /> print("gyro: ", gyro)<br /><br />finally:<br /> p.stop() <br /></i></span></p><p><span style="font-size: x-small;"><i> </i></span></p><p><span style="font-size: x-small;"><i><b>gyro: [0. 0. 0.00349066]<br />accelerometer: [-0.24516624 -8.78675842 -2.75566864]</b><br /> </i></span></p><p>================================================== <span style="font-size: x-small;"><i></i></span></p><p><b>REGOLA ESPOSIZIONE</b><br /></p><p>==================================================</p><p></p><p><i><span style="font-size: x-small;"></span></i></p><p><i><span style="font-size: x-small;">import pyrealsense2 as rs<br />pipeline = rs.pipeline()<br />config = rs.config()<br />profile = pipeline.start(config) # Start streaming<br />sensor_dep = profile.get_device().first_depth_sensor()<br />print("Trying to set Exposure")<br />exp = sensor_dep.get_option(rs.option.exposure)<br />print ("exposure = %d" % exp)<br />print ("Setting exposure to new value")<br />exp = sensor_dep.set_option(rs.option.exposure, 25000)<br />exp = sensor_dep.get_option(rs.option.exposure)<br />print ("New exposure = %d" % exp)<br />profile = pipeline.stop</span></i></p><p>l'esposizione si puo' regolare anche su ROI<br /></p><pre class="notranslate"><span class="pl-s1">p</span> <span class="pl-c1">=</span> <span class="pl-s1">rs</span>.<span class="pl-en">pipeline</span>()
<span class="pl-s1">prof</span> <span class="pl-c1">=</span> <span class="pl-s1">p</span>.<span class="pl-en">start</span>()
<span class="pl-s1">s</span> <span class="pl-c1">=</span> <span class="pl-s1">prof</span>.<span class="pl-en">get_device</span>().<span class="pl-en">first_roi_sensor</span>()
<span class="pl-s1">roi</span> <span class="pl-c1">=</span> <span class="pl-s1">s</span>.<span class="pl-en">get_region_of_interest</span>()
<span class="pl-s1">s</span>.<span class="pl-en">set_region_of_interest</span>(<span class="pl-s1">roi</span>)</pre><p><i><span style="font-size: x-small;"> </span></i></p><p>================================================== <span style="font-size: x-small;"><i></i></span></p><p><b>ADVANVCED MODE (regola parametri di dettaglio)</b><br /></p><p>==================================================</p><p><i><span style="font-size: x-small;"> </span></i></p><p><i><span style="font-size: x-small;">import pyrealsense2 as rs<br />import time<br />import json<br /><br />DS5_product_ids = ["0AD1", "0AD2", "0AD3", "0AD4", "0AD5", "0AF6", "0AFE", "0AFF", "0B00", "0B01", "0B03", "0B07", "0B3A", "0B5C"]<br /><br />def find_device_that_supports_advanced_mode() :<br /> ctx = rs.context()<br /> ds5_dev = rs.device()<br /> devices = ctx.query_devices();<br /> for dev in devices:<br /> if dev.supports(rs.camera_info.product_id) and str(dev.get_info(rs.camera_info.product_id)) in DS5_product_ids:<br /> if dev.supports(rs.camera_info.name):<br /> print("Found device that supports advanced mode:", dev.get_info(rs.camera_info.name))<br /> return dev<br /> raise Exception("No D400 product line device that supports advanced mode was found")<br /><br />try:<br /> dev = find_device_that_supports_advanced_mode()<br /> advnc_mode = rs.rs400_advanced_mode(dev)<br /> print("Advanced mode is", "enabled" if advnc_mode.is_enabled() else "disabled")<br /><br /> # Loop until we successfully enable advanced mode<br /> while not advnc_mode.is_enabled():<br /> print("Trying to enable advanced mode...")<br /> advnc_mode.toggle_advanced_mode(True)<br /> # At this point the device will disconnect and re-connect.<br /> print("Sleeping for 5 seconds...")<br /> time.sleep(5)<br /> # The 'dev' object will become invalid and we need to initialize it again<br /> dev = find_device_that_supports_advanced_mode()<br /> advnc_mode = rs.rs400_advanced_mode(dev)<br /> print("Advanced mode is", "enabled" if advnc_mode.is_enabled() else "disabled")<br /><br /> # Get each control's current value<br /> print("Depth Control: \n", advnc_mode.get_depth_control())<br /> print("RSM: \n", advnc_mode.get_rsm())<br /> print("RAU Support Vector Control: \n", advnc_mode.get_rau_support_vector_control())<br /> print("Color Control: \n", advnc_mode.get_color_control())<br /> print("RAU Thresholds Control: \n", advnc_mode.get_rau_thresholds_control())<br /> print("SLO Color Thresholds Control: \n", advnc_mode.get_slo_color_thresholds_control())<br /> print("SLO Penalty Control: \n", advnc_mode.get_slo_penalty_control())<br /> print("HDAD: \n", advnc_mode.get_hdad())<br /> print("Color Correction: \n", advnc_mode.get_color_correction())<br /> print("Depth Table: \n", advnc_mode.get_depth_table())<br /> print("Auto Exposure Control: \n", advnc_mode.get_ae_control())<br /> print("Census: \n", advnc_mode.get_census())<br /><br /> #To get the minimum and maximum value of each control use the mode value:<br /> query_min_values_mode = 1<br /> query_max_values_mode = 2<br /> current_std_depth_control_group = advnc_mode.get_depth_control()<br /> min_std_depth_control_group = advnc_mode.get_depth_control(query_min_values_mode)<br /> max_std_depth_control_group = advnc_mode.get_depth_control(query_max_values_mode)<br /> print("Depth Control Min Values: \n ", min_std_depth_control_group)<br /> print("Depth Control Max Values: \n ", max_std_depth_control_group)<br /><br /> # Set some control with a new (median) value<br /> current_std_depth_control_group.scoreThreshA = int((max_std_depth_control_group.scoreThreshA - min_std_depth_control_group.scoreThreshA) / 2)<br /> advnc_mode.set_depth_control(current_std_depth_control_group)<br /> print("After Setting new value, Depth Control: \n", advnc_mode.get_depth_control())<br /><br /> # Serialize all controls to a Json string<br /> serialized_string = advnc_mode.serialize_json()<br /> print("Controls as JSON: \n", serialized_string)<br /> as_json_object = json.loads(serialized_string)<br /><br /> # We can also load controls from a json string<br /> # For Python 2, the values in 'as_json_object' dict need to be converted from unicode object to utf-8<br /> if type(next(iter(as_json_object))) != str:<br /> as_json_object = {k.encode('utf-8'): v.encode("utf-8") for k, v in as_json_object.items()}<br /> # The C++ JSON parser requires double-quotes for the json object so we need<br /> # to replace the single quote of the pythonic json to double-quotes<br /> json_string = str(as_json_object).replace("'", '\"')<br /> advnc_mode.load_json(json_string)<br /><br />except Exception as e:<br /> print(e)<br /> pass<br /></span></i></p><p></p><p></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-89392001418786146662024-03-14T09:02:00.001+01:002024-03-14T09:02:08.479+01:00Da VirtualBox a PC <p>L'idea di questa prova era quella di configurare un thin client senza connetterlo a tastiera, monitor e mouse</p><p>Ho avuto in prova un Praim C33 ed ho deciso di usarlo come macchina test<br /></p><p> </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY8dLB_13z05f2Rrxn-MRE3Keb4Hxa1H2TA5X9nGE8qrTRVRpRehsLsdQxL0uZLsbrL0fKerbwQQcVDPI8YgZ5vTbHbAU0eGw9r5_VFAhv7iVrrCs2EF4umNy4k_-lGH3D1UG7MD8vwB41LlVr_8NShvjje_z6tVKQwIBadGaDimpKqavkVScCwu3eFXCw/s4032/IMG_6404.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY8dLB_13z05f2Rrxn-MRE3Keb4Hxa1H2TA5X9nGE8qrTRVRpRehsLsdQxL0uZLsbrL0fKerbwQQcVDPI8YgZ5vTbHbAU0eGw9r5_VFAhv7iVrrCs2EF4umNy4k_-lGH3D1UG7MD8vwB41LlVr_8NShvjje_z6tVKQwIBadGaDimpKqavkVScCwu3eFXCw/s320/IMG_6404.HEIC" width="320" /></a></div><br /> La macchina monta 2 Gb di Ram ed un disco mSATA da 8 G quindi la distro deve essere molto leggera...mi sono orientato su Alpine Linux<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja_FPx0XFoMvAfp0DtOjB5UTuJ361iMJWNLpBEUQfzMGn_TrUVD-OVgESCqfgtlhhwx8qVKaVXVgktaVu19ofrfwX98FriGICyaUUsrHJFomZBvE7Db1ga1NkgZY-CK6QzT4DXZV3CHE-32tV5XIRYggLSe3p3ZSSYnbhYJEnGCl1SArTa6fknyzeRWWMb/s4032/IMG_6402.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja_FPx0XFoMvAfp0DtOjB5UTuJ361iMJWNLpBEUQfzMGn_TrUVD-OVgESCqfgtlhhwx8qVKaVXVgktaVu19ofrfwX98FriGICyaUUsrHJFomZBvE7Db1ga1NkgZY-CK6QzT4DXZV3CHE-32tV5XIRYggLSe3p3ZSSYnbhYJEnGCl1SArTa6fknyzeRWWMb/s320/IMG_6402.HEIC" width="320" /></a></div><br /><p><br /></p><p>Mi sono creato su Virtualbox una macchina virtuale con Alpine e Docker (circa 500 Mb di spazio disco occupato) ed ho configurato utenti, rete ed accessori vari<br /></p><p>Poi con il comando il file vdi e' stato convertito in img<br /></p><p><br /><b>VBoxManage internalcommands converttoraw Alpine.vdi Alpine.img<br /><br /></b>L'immagine e' stata quindi flashata sull' mSata tramite un adattatore USB-mSata e flashata con BalenaEtcher oppure tramite dd</p><b>dd if=Alpine.img of=/dev/sdb bs=1k conv=sync,noerror status=progress <br /></b><p><br /></p><p>(attenzione il disco e' dichiarato da 8G ma poi e' risultato essere piu' piccolo quindi l'immagine di Virtualbox doveva essere inferiore a 8G)<br /></p><p> </p><p>A questo punto ho rimontato il thin client ed e' partito regolarmente con l'immagine creata su Virtualbox....attenzione il Bios deve essere impostato come Legacy oppure Legacy+UEFI non solo UEFI<br /> <br /></p><p> </p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-9370719084050630652024-03-11T13:43:00.001+01:002024-03-11T13:43:26.271+01:00Zima Blade<p>Mi sono preso una Zima Blade attirato piu' che altro dal basso consumo e di avere la possibilita' di avere uscita SATA per dischi esterni</p><p>Sul dispositivo e' preinstallato CasaOS ma di fatto e' una Debian 11 con il solo utente root e password casaos</p><p> <br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLMs_75H8ZTwE2fSj4jEoplUUP06hTiFk0wnriByobyxAOErBaJ83CVgK_sC3MC-gXMqPbBiXKlG2XV4OGY7wPYQF1pwK4I4pdkPA0N0FYsC2OsuRJ6L5658hM1ymJwkN1kdVCP0ZVT4Dnp_07ICRZ7-KTEkWuYz_FlNXThRLdffDPi8VVX8cRPoIjLmqA/s3840/964546C4-9787-4611-9871-0862550B4156.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2160" data-original-width="3840" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLMs_75H8ZTwE2fSj4jEoplUUP06hTiFk0wnriByobyxAOErBaJ83CVgK_sC3MC-gXMqPbBiXKlG2XV4OGY7wPYQF1pwK4I4pdkPA0N0FYsC2OsuRJ6L5658hM1ymJwkN1kdVCP0ZVT4Dnp_07ICRZ7-KTEkWuYz_FlNXThRLdffDPi8VVX8cRPoIjLmqA/s320/964546C4-9787-4611-9871-0862550B4156.jpg" width="320" /></a></div><br />Inserire la ram non e' banale perche' bisogna un po' forzare sulla cornice esterna in plastica.<div>Una grossa limitazione e' l'unica porta USB (almeno e' USB3) e l'uscita miniDP (che di fatto si usa solo per la prima configurazione ma oggi come oggi era piu' comoda una HDMI)<br /><p></p><p> Per rimuovere all'avvio CasaOs e' sufficiente disabilitare i seguenti servizi</p><p><span style="font-size: x-small;"><b>casaos-app-management.service<br />casaos-gateway.service<br />casaos-local-storage.service<br />casaos-message-bus.service<br />casaos.service<br />casaos-user-service.service</b></span><br /> </p><p>Il dispositivo non e' velocissimo (ho preso la versione base per non spendere troppo) ma fa il suo lavoro</p></div>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-21151186761346032902024-03-10T20:32:00.003+01:002024-03-10T20:32:47.089+01:00ODM ed FFMPEG<p>E' possibile utilizzare ffmpeg per estrarre fotogrammi (a cadenza a scelta dell'utente) da un filmato MP4 per fornirli in pasto ad ODM. Dalle prove che ho fatto e' un sostituto idoneo a scattare una serie di foto <br /></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbqwe5pih7yP9p7MyH80BJYGE6afpePhjwTXbyGqknivoDDA_xS0njlFHZxB8-vJFezf0S0PY9keeD4PPbz3wYA-25BjndaFakGvrdpEOn7KAX4j5LLCzLdGcoyr8g51tWlOet4c0iFV7xBrQxFr1vWDMXLPJBBUvBxFGcmD4was6LQzQ2IKV0PZ5e-xi-/s1920/f000000251.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1920" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbqwe5pih7yP9p7MyH80BJYGE6afpePhjwTXbyGqknivoDDA_xS0njlFHZxB8-vJFezf0S0PY9keeD4PPbz3wYA-25BjndaFakGvrdpEOn7KAX4j5LLCzLdGcoyr8g51tWlOet4c0iFV7xBrQxFr1vWDMXLPJBBUvBxFGcmD4was6LQzQ2IKV0PZ5e-xi-/s320/f000000251.jpg" width="320" /></a></div><br /><p>il seguente comando estrae un fotogramma al secondo (parametro dopo t-prev_selected_t) e li salva nel folder /frames<br /></p><p><b>ffmpeg -i 20240229_094358.mp4 -vf "select=bitor(gte(t-prev_selected_t\,1)\,isnan(prev_selected_t))" -vsync 0 ./frames/f%09d.jpg</b><br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-24881564042831170832024-03-10T19:57:00.002+01:002024-03-10T20:28:21.176+01:00Rete neurale ed Aruco<p>Per alcune prove con gli Aruco tags sto usando una camera che ha come formato di output JPG ma sarebbe piu' idoneo il formato PNG </p><p>Ho provato la rete neurale a <a href="https://github.com/alexjc/neural-enhance">questo link</a> che permette di ricostruire dettagli che si sono persi al momento della compressione JPG.</p><p>Ho usato un set di immagini processandole come segue <br /></p><p><span style="font-size: xx-small;">alias enhance='function ne() { docker run --rm -v "$(pwd)/`dirname ${@:$#}`":/ne/input -it alexjc/neural-enhance ${@:1:$#-1} "input/`basename ${@:$#}`"; }; ne'<br />for x in ./originali/*.jpg; do <br /> #echo $x<br /> enhance --zoom=1 --model=repair $x<br />done</span></p><p>e mettendo a confronto le coordinate degli stessi aruco tags nel set jpg ed in quello elaborato dalla rete neurale e salvato in png</p><p>Per dare un'idea la prima immagine e' un originale in JPG</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSRtUILwmfBEULt812ixZ8Lj3ZjdEEfeuPFY870SyKW6mpMEz0xs2TfgrDGWZw6R95ztrUEfecp0OH6ZF5Ou8U9R0LffGOcU0qK4HvZRLSpV0eUOwS6Npf_9FQ-DJXe-ne_uVHQ0CkO7AJyq85AD2caCqV-b-_e_ddqnDX2azwf-9927bPa7DByxts_7cu/s1318/nosr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="875" data-original-width="1318" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSRtUILwmfBEULt812ixZ8Lj3ZjdEEfeuPFY870SyKW6mpMEz0xs2TfgrDGWZw6R95ztrUEfecp0OH6ZF5Ou8U9R0LffGOcU0qK4HvZRLSpV0eUOwS6Npf_9FQ-DJXe-ne_uVHQ0CkO7AJyq85AD2caCqV-b-_e_ddqnDX2azwf-9927bPa7DByxts_7cu/s320/nosr.png" width="320" /></a></div><br /><p></p><p>la seconda e' la stessa immagine processata dalla rete neurale e salvata in PNG <br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPhqAeGj040e4YS9an-y1_CxoVHGK_sk9ipGKiZI-XSo5m-JC3cWHpe-fM-e04-P5A72JlN7fPMFcABt02F8kGdnPkQvKnZaOLM9inUeux4ouU9sf1Lj2mBblByKXMmaaxWbM-WRoIFa0EFkP5_GEO8jLHa6m9CE_O7J8HG4iMerz77bzRHWa0azBJnKDh/s1312/sr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="865" data-original-width="1312" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPhqAeGj040e4YS9an-y1_CxoVHGK_sk9ipGKiZI-XSo5m-JC3cWHpe-fM-e04-P5A72JlN7fPMFcABt02F8kGdnPkQvKnZaOLM9inUeux4ouU9sf1Lj2mBblByKXMmaaxWbM-WRoIFa0EFkP5_GEO8jLHa6m9CE_O7J8HG4iMerz77bzRHWa0azBJnKDh/s320/sr.png" width="320" /></a></div><br /> <p></p><p>Nei grafici sottostanti i risultati (nei grafici rosso=set PNG, blu=set JPG)<br /></p><p>In sintesi le coordinate dei tag sono molto simili ma</p><p>1) il dato PNG non ha mostrato outliers ed errori come invece quello JPG</p><p>2) nel set PNG il riconoscimento di tag lontani era circa il doppio rispetto al set JPG</p><p>3) a parte i punti 1 e 2 il processing tramite rete neurale ma non ha migliorato in modo sensibile la qualita' dell'algoritmo di posizionamento dei tags<br /></p><p><br /></p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8cLdKwoFKQ0klhZrzAQNZzArqcRcpJfeDz1hRJAIlJlbvZ9uYl1wRoWRM9loKnS_gD1o-j_fnT0S7nj4a09c0SqWe2FpindMocf0g0Gg33njD0jzfeAu49t2rsyJNLE3uYNMKqyQlc52w3KK4kSi_AVkbbnhxq6obqwFrC3fkAp0tz2BMlGMK7oE7EyH3/s605/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="340" data-original-width="605" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8cLdKwoFKQ0klhZrzAQNZzArqcRcpJfeDz1hRJAIlJlbvZ9uYl1wRoWRM9loKnS_gD1o-j_fnT0S7nj4a09c0SqWe2FpindMocf0g0Gg33njD0jzfeAu49t2rsyJNLE3uYNMKqyQlc52w3KK4kSi_AVkbbnhxq6obqwFrC3fkAp0tz2BMlGMK7oE7EyH3/s320/4.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd2mXnlLvZyohx_X53nzZduEsIug17-7NFes1W1-BcPLH2eDTfYMpXHkM-qR3lL9ltzb-qs1cEsqTFYomPs2dL6NaH2AvevoCM6ZnebrfxmV-tKrEBdLS_AgVyhm32KBLyZYVB_CPszjnLrGWr-XSX4syzgaKZP-7inCdHPstpo9GkvK6V7K1Elp4m5OxY/s605/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="340" data-original-width="605" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd2mXnlLvZyohx_X53nzZduEsIug17-7NFes1W1-BcPLH2eDTfYMpXHkM-qR3lL9ltzb-qs1cEsqTFYomPs2dL6NaH2AvevoCM6ZnebrfxmV-tKrEBdLS_AgVyhm32KBLyZYVB_CPszjnLrGWr-XSX4syzgaKZP-7inCdHPstpo9GkvK6V7K1Elp4m5OxY/s320/3.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHLd7LnPqITOiGpbGgxcaC-4W0vhM3M03CdKPk_aPgR0JB-kIbPBezlOSiPBJd3PJaVwhmlk9MEEzhHAfPQKxkElAJtN47MX3c207PZMkH-MXZg-V6g6ZF6bRTU6sXUfABpbHCdFyqiGv1A02J-R6sl05F2E29Ys_ZhNwtU9YpXJU1UJYJrPIhU0V3mB0z/s605/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="340" data-original-width="605" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHLd7LnPqITOiGpbGgxcaC-4W0vhM3M03CdKPk_aPgR0JB-kIbPBezlOSiPBJd3PJaVwhmlk9MEEzhHAfPQKxkElAJtN47MX3c207PZMkH-MXZg-V6g6ZF6bRTU6sXUfABpbHCdFyqiGv1A02J-R6sl05F2E29Ys_ZhNwtU9YpXJU1UJYJrPIhU0V3mB0z/s320/2.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzPRw6vljvpn0RYEIKrExUvB6AOR-oDP3p-M5yhigclUniYlto905xLzys3N90a38K9R7EMnKeP4mJ1U5Hwd5siLXjgU8yEO9x4qS0iatYqtwwoSvfpkvbppgIfo9BH8gjNYUuDEG30roh1p-8JafDQS2nJ0tXpZyjAiNcU0ITW_w8xvHqK0q7R8QMkn8N/s605/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="340" data-original-width="605" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzPRw6vljvpn0RYEIKrExUvB6AOR-oDP3p-M5yhigclUniYlto905xLzys3N90a38K9R7EMnKeP4mJ1U5Hwd5siLXjgU8yEO9x4qS0iatYqtwwoSvfpkvbppgIfo9BH8gjNYUuDEG30roh1p-8JafDQS2nJ0tXpZyjAiNcU0ITW_w8xvHqK0q7R8QMkn8N/s320/1.png" width="320" /></a></div><br /><p></p><p><br /> <br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-76275639922437559162024-03-08T08:54:00.008+01:002024-03-10T18:01:27.268+01:00Realsense Docker<p><b>Aggiornamento:</b></p><p>Il container e' disponibile gia' compilato su Docker.com al mio account <br /></p><p><a href="https://hub.docker.com/repository/docker/c1p81/realsense_2004/general">https://hub.docker.com/repository/docker/c1p81/realsense_2004/general </a><br /></p><p> ============================================</p><p>Ho deciso di tirare fuori dal cassetto la D415 Realsense e come al solito montare l'SDK diventa sempre piu' difficile a causa delle politiche di Intel di dismissione dei propri dispositivi</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1KubHI-JVPxlyDZRe6tuux-gYBQem4BA4zMV85uz85l55ImqbYZxZEA7ntJFwHBNXse7W33eqJ-0KzDfeCGjol17G-jMXQTk9rB1LzAFT1DfIssQjtql-iw5UH9hTzAkcMIsbTfSfBAFZyEayFH2FjqsIBq9LHomhaWD_tXcEuvIguqQg7HNoLGKWSsO9/s1920/Screenshot%20from%202024-03-08%2008-54-02.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1920" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1KubHI-JVPxlyDZRe6tuux-gYBQem4BA4zMV85uz85l55ImqbYZxZEA7ntJFwHBNXse7W33eqJ-0KzDfeCGjol17G-jMXQTk9rB1LzAFT1DfIssQjtql-iw5UH9hTzAkcMIsbTfSfBAFZyEayFH2FjqsIBq9LHomhaWD_tXcEuvIguqQg7HNoLGKWSsO9/s320/Screenshot%20from%202024-03-08%2008-54-02.png" width="320" /></a></div><br /> <p></p><p>Stavolta volevo provare la strada dell'ambiente docker ma ne' il container ufficiale ne' alcuni trovati su docker hub risultavano completamente funzionanti e me lo sono scritto da solo</p><p><i><b>(da modificare l'image_id) <br /></b></i></p><p><i><b>Bash<br /></b></i></p><p><b>docker run -it --rm --privileged -v /dev:/dev -v "$HOME:/home/luca/" --device-cgroup-rule "c 81:* rmw" --device-cgroup-rule "c 189:* rmw" b105279d1264 /bin/bash</b><br /></p><p><i><b>Realsense Viewer<br /></b></i></p><p><b>xhost + <br /></b></p><p><b>docker run -d --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v /dev:/dev --device-cgroup-rule "c 81:* rmw" --device-cgroup-rule "c 189:* rmw" 2bd94ff6bc38 realsense-viewer</b><br /></p><p> </p><p><i><b>Save to disk<br /></b></i></p><p><b>docker run -it --rm --privileged -v /dev:/dev -v "$HOME:/home/luca/" --device-cgroup-rule "c 81:* rmw" --device-cgroup-rule "c 189:* rmw" 34ea465a203e sh -c "cd /home/luca && rs-save-to-disk"</b><br /></p><p>per creare il docker si usa il comando<br /></p><p><b>docker build -t 20_04_real .</b></p><p>con il seguente Dockerfile<br /></p><br /><div style="background-color: #1f1f1f; color: #cccccc; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #c586c0;">FROM</span><span style="color: #cccccc;"> public.ecr.aws/</span><span style="color: #4ec9b0;">lts/ubuntu</span><span style="color: #cccccc;">:</span><span style="color: #9cdcfe;">20.04_stable</span><span style="color: #cccccc;"> </span></div><br /><div><span style="color: #c586c0;">ENV</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">DEBIAN_FRONTEND</span><span style="color: #d4d4d4;">=</span><span style="color: #9cdcfe;">noninteractive</span></div><br /><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">apt-get</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">update</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">&&</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">apt-get</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">install</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">-qq</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">-y</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">--no-install-recommends</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">build-essential</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">cmake</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">lsb-release</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">git</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">curl</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">libssl-dev</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">libusb-1.0-0-dev</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">pkg-config</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">libudev-dev</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">libgtk-3-dev</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">libglfw3-dev</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">libgl1-mesa-dev</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">libglu1-mesa-dev</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span><span style="color: #cccccc;"> </span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">curl</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">python3</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">python3-dev</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">python3-pip</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">libopencv-dev</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">python3-opencv</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">python3-numpy</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">ca-certificates</span><span style="color: #cccccc;"> </span><span style="color: #569cd6;">\</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">&&</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">rm</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">-rf</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">/var/lib/apt/lists/*</span></div><br /><br /><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">mkdir</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">-p</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">/etc/apt/keyrings</span></div><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">curl</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">-sSf</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">https://librealsense.intel.com/Debian/librealsense.pgp</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">|</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">tee</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">/etc/apt/keyrings/librealsense.pgp</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">></span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">/dev/null</span></div><br /><br /><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">echo</span><span style="color: #cccccc;"> </span><span style="color: #ce9178;">"deb</span><span style="color: #ce9178;"> </span><span style="color: #ce9178;">[signed-by=/etc/apt/keyrings/librealsense.pgp]</span><span style="color: #ce9178;"> </span><span style="color: #ce9178;">https://librealsense.intel.com/Debian/apt-repo</span><span style="color: #ce9178;"> </span><span style="color: #ce9178;">`lsb_release</span><span style="color: #ce9178;"> </span><span style="color: #ce9178;">-cs`</span><span style="color: #ce9178;"> </span><span style="color: #ce9178;">main"</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">|</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">tee</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">/etc/apt/sources.list.d/librealsense.list</span></div><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">apt-get</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">update</span></div><br /><br /><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">apt-get</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">-y</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">install</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">librealsense2-dkms</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">librealsense2-utils</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">librealsense2-dev</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">librealsense2-dbg</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">librealsense2-udev-rules</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">mc</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">nano</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">locales</span><span style="color: #cccccc;"> </span></div><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">apt-get</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">clean</span></div><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">pip</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">install</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">pyrealsense2</span></div><br /><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">git</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">clone</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">https://github.com/IntelRealSense/librealsense</span></div><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">cd</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">librealsense</span></div><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">mkdir</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">/librealsense/build</span></div><div><span style="color: #c586c0;">WORKDIR</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">/librealsense/build</span></div><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">cmake</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">../</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">-DBUILD_EXAMPLES=true</span></div><div><span style="color: #c586c0;">RUN</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">make</span></div></div><p></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-9014360884031223932024-02-24T17:39:00.003+01:002024-02-24T17:39:48.630+01:00ODM <p> Ho provato a vedere se ODM poteva essere idoneo per misurare l'altezza di un cumulo (o di una collinetta) usando fotogrammetria da terra con la camera del telefono cellulare</p><p>In un sito di prova e' stato verificato un errore inferiore a 30 cm su 5 m di altezza</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNBilRR2Q1Yd-3_O5deYUaXdH2DYYfZtfazdxLev4bJNpeINLebwZufMxy4sY12x7uPWNgFU7EMtksQvhauwJL-kkUy9UtggrI36k9I19zTjab5BialfNYLduqNd3Os1r4sSHDQsk-0glsjNAVK8BW76LKsWoZU9eFvO4OCwnwNh4Fk7ENg3zHbadlX07K/s884/Screenshot%20from%202024-02-13%2016-52-57.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="466" data-original-width="884" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNBilRR2Q1Yd-3_O5deYUaXdH2DYYfZtfazdxLev4bJNpeINLebwZufMxy4sY12x7uPWNgFU7EMtksQvhauwJL-kkUy9UtggrI36k9I19zTjab5BialfNYLduqNd3Os1r4sSHDQsk-0glsjNAVK8BW76LKsWoZU9eFvO4OCwnwNh4Fk7ENg3zHbadlX07K/s320/Screenshot%20from%202024-02-13%2016-52-57.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHfpEiZYoxu7vbGa3zRouGOONGH3PzWM_x_FoWtpxPB6mk_XiigDTpS5SSdnsvkC9p8ZUyWjidv3o0sHmJ_iQWRLCsKghwTQ_HpxTO5OZK7Q1Tc0wAGjWE6rg8R9lcptI_4OwOlwNxGHoMaxTHaLc1Atn1-LcWcyAZVC2Uub7Z95idmOxDeluE2Ih9KIdK/s884/Screenshot%20from%202024-02-13%2016-53-15.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="466" data-original-width="884" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHfpEiZYoxu7vbGa3zRouGOONGH3PzWM_x_FoWtpxPB6mk_XiigDTpS5SSdnsvkC9p8ZUyWjidv3o0sHmJ_iQWRLCsKghwTQ_HpxTO5OZK7Q1Tc0wAGjWE6rg8R9lcptI_4OwOlwNxGHoMaxTHaLc1Atn1-LcWcyAZVC2Uub7Z95idmOxDeluE2Ih9KIdK/s320/Screenshot%20from%202024-02-13%2016-53-15.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkhDxwN8txH92A5ADTxCotuyeFbeMxW_X-8T9UFTdJJ2Itz3S4gJB5ZP36NlTAksgZ_RQORhVetFE82uVYyfkcGSg2MLZp9MM8YHy4e-7dUph4vQhmrSSDrkQ_kbunOdMxSbDmVVuhrZPg9pKrvxPHqiJIeOT1YV9iKjrcRP_vx_OFoaxPtbkqizbUwnzA/s744/Screenshot%20from%202024-02-13%2016-53-52.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="547" data-original-width="744" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkhDxwN8txH92A5ADTxCotuyeFbeMxW_X-8T9UFTdJJ2Itz3S4gJB5ZP36NlTAksgZ_RQORhVetFE82uVYyfkcGSg2MLZp9MM8YHy4e-7dUph4vQhmrSSDrkQ_kbunOdMxSbDmVVuhrZPg9pKrvxPHqiJIeOT1YV9iKjrcRP_vx_OFoaxPtbkqizbUwnzA/s320/Screenshot%20from%202024-02-13%2016-53-52.png" width="320" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-3702544725157815802024-02-24T17:36:00.006+01:002024-02-26T17:24:28.285+01:00Metashape vs ODM<p><b>Aggiornamento</b></p><p>Modificando il parametro da Volume Analysis a Model 3D, ODM ha un risultato comparabile con Metashape</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSbu40hGn0bnMF03RphtEMP98gpq3bIGUHPOxscCkrHzQOg5AZ9aQ5xr5iVQ0os5Th3sWqUr4qhBX7Bo5fnCmj1GFI-j2lcMc8oZySY11Vv3PlSLHiFZ1B97UQcdozrNBiKHD3VCRjuRRQvy5RWKtF7XZuFgPhYw2kArZ1KKXAP9Jd4CKfbG74Hls5NkfR/s1349/Clipboard01.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="784" data-original-width="1349" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSbu40hGn0bnMF03RphtEMP98gpq3bIGUHPOxscCkrHzQOg5AZ9aQ5xr5iVQ0os5Th3sWqUr4qhBX7Bo5fnCmj1GFI-j2lcMc8oZySY11Vv3PlSLHiFZ1B97UQcdozrNBiKHD3VCRjuRRQvy5RWKtF7XZuFgPhYw2kArZ1KKXAP9Jd4CKfbG74Hls5NkfR/s320/Clipboard01.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-Pka_vUAgP7bV2Z_BA9SdeJ15FYzFO6hJlAEySO2b65wi5EmRIKgJ9jiEudkym89qFqin0avmOrrzP_ynBGFi0X1y909CRpLnmXlvsa2EYr2JXeuWG7pUZDGtcG81ee4cuCS0fVUSlweNNZkhq7TFlfVonZgPiZgOXnNWJfdOt4Xd0J1GDYkuS664g48W/s784/Screenshot%20from%202024-02-26%2016-20-40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="498" data-original-width="784" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-Pka_vUAgP7bV2Z_BA9SdeJ15FYzFO6hJlAEySO2b65wi5EmRIKgJ9jiEudkym89qFqin0avmOrrzP_ynBGFi0X1y909CRpLnmXlvsa2EYr2JXeuWG7pUZDGtcG81ee4cuCS0fVUSlweNNZkhq7TFlfVonZgPiZgOXnNWJfdOt4Xd0J1GDYkuS664g48W/s320/Screenshot%20from%202024-02-26%2016-20-40.png" width="320" /></a></div><br /><p><br /></p><p><br /></p><p>Sto provando a fare fotogrammetria da terra tramite ODM e <a href="https://www.opendronemap.org/webodm/">WEBODM</a> confrontando con Metashaoe</p><p>Per riferimento ho preso una piccola collina ad anfiteatro con 208 immagini riprese muovendosi attorno alla collina. ODM non riesce a capire che si tratta dello stesso oggetto e crea dei piani ognuno relativo al lato del perimetro su cui sono state fatte le foto, Metashape invece riesce a collegare i transetti ortogonali del lati dell'area e ricrea un unico oggetto geometricamente corretto</p><p>Un altro aspetto non trascurabile e' il tempo di calcolo: con parametri di default e con lo stesso numero di immagini Metashape su M1 ha impiegato meno di 15 minuti per terminare il calcolo, ODM su docker x86 ha impiegato oltre un'ora</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi26gJFTZJ-eJLYXObmBwjys3LJfplvVUETbCRxxLOACSsQ8FoZZYIaJTRB8l-44JrwycqWvCs0Ws7j8FYQXnCPAgEY8-rfrtV0Yifl5GlHvwC9Us5ZL7jJTqMT1vXPeif_V1uP-SVJX_JvNmP18cHPbxu2bXT5Ru-qj5tmcYhRRQv-woSkCF4wGVJjcvQb/s4128/E9E6AF95-297C-47B6-A776-0C2FEC384572.jpeg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3096" data-original-width="4128" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi26gJFTZJ-eJLYXObmBwjys3LJfplvVUETbCRxxLOACSsQ8FoZZYIaJTRB8l-44JrwycqWvCs0Ws7j8FYQXnCPAgEY8-rfrtV0Yifl5GlHvwC9Us5ZL7jJTqMT1vXPeif_V1uP-SVJX_JvNmP18cHPbxu2bXT5Ru-qj5tmcYhRRQv-woSkCF4wGVJjcvQb/s320/E9E6AF95-297C-47B6-A776-0C2FEC384572.jpeg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Oggetto di riferimento</td></tr></tbody></table><p>Se invece si fa un solo transetto come <a href="https://debiaonoldcomputers.blogspot.com/2024/02/odm.html">qui</a> ODM risulta corretto anche dal punto di vista delle dimensioni stimate</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1F1Qj54SQPHuzNjwtSERG4Gy56JMg6QH6jDCEEyih3EGUKUuAwDSi4OoEf-syAb-MlP5goL0I5gb-WVx8X27m_S6W50dGx8P7z9T9evJi9x_gmxSLqHP2x7dLCOEqLl8_cc-3jb_dqX5TpUALSZIMCTrGZv7rPvwQVWFvLEuCcipApXimIomOlrTCwFgv/s2382/Screenshot%202024-02-24%20at%2017.19.00.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1684" data-original-width="2382" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1F1Qj54SQPHuzNjwtSERG4Gy56JMg6QH6jDCEEyih3EGUKUuAwDSi4OoEf-syAb-MlP5goL0I5gb-WVx8X27m_S6W50dGx8P7z9T9evJi9x_gmxSLqHP2x7dLCOEqLl8_cc-3jb_dqX5TpUALSZIMCTrGZv7rPvwQVWFvLEuCcipApXimIomOlrTCwFgv/s320/Screenshot%202024-02-24%20at%2017.19.00.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Mesh creata con Metashape</td></tr></tbody></table><br /><p><br /></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR8F-m3NNktbT99RsfrbXFZZnBJDszAbHJqvQQqmiWvMrzH7i0DqdfCfUSbErgNIGukjvKLNdKH5_VyAlHzboEvsHQX71cUeUUKLPCpo20vZiNrzjd-ChFtYaAtO-VJ2Go06UDHvhje2Jm7Vnyf9X2UVmSe5J2wTUiGrSFXQTMq5Dnb5ANJ12cv9-WCqdn/s2382/Screenshot%202024-02-24%20at%2017.17.49.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1684" data-original-width="2382" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR8F-m3NNktbT99RsfrbXFZZnBJDszAbHJqvQQqmiWvMrzH7i0DqdfCfUSbErgNIGukjvKLNdKH5_VyAlHzboEvsHQX71cUeUUKLPCpo20vZiNrzjd-ChFtYaAtO-VJ2Go06UDHvhje2Jm7Vnyf9X2UVmSe5J2wTUiGrSFXQTMq5Dnb5ANJ12cv9-WCqdn/s320/Screenshot%202024-02-24%20at%2017.17.49.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Mesh creata con ODM</td></tr></tbody></table><p><br /></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg7zL-D5aHI2jNfPaqKMiisyDRrmQTpqk7jNTCEkk0_RxDmwt7M_L_ajfThtb-yMsH9V8GMk9lBq0V2szViaMkiyZ9KxB5qa4Kpp8Vu5V9mOytEI9deSHCUTaEhAU2R_f4BPpkpcl1goe2X1HRQMH36kn1iIooN_5IkBFioqrOaiBJEkUv0J1x99IjvFSl/s2566/Screenshot%202024-02-24%20at%2017.20.06.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1414" data-original-width="2566" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg7zL-D5aHI2jNfPaqKMiisyDRrmQTpqk7jNTCEkk0_RxDmwt7M_L_ajfThtb-yMsH9V8GMk9lBq0V2szViaMkiyZ9KxB5qa4Kpp8Vu5V9mOytEI9deSHCUTaEhAU2R_f4BPpkpcl1goe2X1HRQMH36kn1iIooN_5IkBFioqrOaiBJEkUv0J1x99IjvFSl/s320/Screenshot%202024-02-24%20at%2017.20.06.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">PointCloud da Metashape</td></tr></tbody></table><br /><div><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBqxQAH6_NTl6yweu2_B2p8Mn-tp8B_7IiAL_tBs1Icyu9JjsT9W5ii05DDqR3FWaoAxIO5SzkTQgABnCYAOu8o2RyUlKERNUr_1NnqXJ6KHa4MK6MOQ2rjCP_Q8IFLdeXBxw8WhBEzm-N1a3jf2f9zBNjLvFUNfcUw63O-bOpyJC4HD3neBAn1nPohTiM/s2566/Screenshot%202024-02-24%20at%2017.21.59.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1414" data-original-width="2566" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBqxQAH6_NTl6yweu2_B2p8Mn-tp8B_7IiAL_tBs1Icyu9JjsT9W5ii05DDqR3FWaoAxIO5SzkTQgABnCYAOu8o2RyUlKERNUr_1NnqXJ6KHa4MK6MOQ2rjCP_Q8IFLdeXBxw8WhBEzm-N1a3jf2f9zBNjLvFUNfcUw63O-bOpyJC4HD3neBAn1nPohTiM/s320/Screenshot%202024-02-24%20at%2017.21.59.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">PointCloud da ODM</td></tr></tbody></table><br /><div><br /></div><div><br /></div><div><br /></div>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-53250518861111176832024-02-15T17:51:00.002+01:002024-02-15T17:51:48.519+01:00Ferrari Fiorano 14 febbraio<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuBhw5KCmNn5fWZVzbgb-dMch-xG_99Dw6Qx0wvkIEeU5ZQbF6FOQA318PnAe1T_yOHyTYaonmsDTgAbJbljbA8RelD0HZxx5Pv603WIMa9wvqBIkYOFWFXfBj_Yyn1kYmutzPGQc3j3G4eIWkKaMjrf2sSAK7q0A5I3LCDappcf1i_-o5ou9hY2wN3oDc/s4752/sainz.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3168" data-original-width="4752" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuBhw5KCmNn5fWZVzbgb-dMch-xG_99Dw6Qx0wvkIEeU5ZQbF6FOQA318PnAe1T_yOHyTYaonmsDTgAbJbljbA8RelD0HZxx5Pv603WIMa9wvqBIkYOFWFXfBj_Yyn1kYmutzPGQc3j3G4eIWkKaMjrf2sSAK7q0A5I3LCDappcf1i_-o5ou9hY2wN3oDc/s320/sainz.JPG" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBMH1G-f1bwjlbtUXq0kH1UuMPqekwQmXnQmjAWQWR8BtijZQCTF_-T3rD0oVZ7xJRYlJTQrplKVTaUl4Y_MizVM3fulzk2HoAyrgwdbUjsLIjHNjGqQA7QmYl6mVw7l9W4Pni3hWetSyR32YSpa1PlbD2v1ZiTG_8reIf1TRKjEZ2hjTofm7Ev2PifbDs/s4752/leclerc.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3168" data-original-width="4752" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBMH1G-f1bwjlbtUXq0kH1UuMPqekwQmXnQmjAWQWR8BtijZQCTF_-T3rD0oVZ7xJRYlJTQrplKVTaUl4Y_MizVM3fulzk2HoAyrgwdbUjsLIjHNjGqQA7QmYl6mVw7l9W4Pni3hWetSyR32YSpa1PlbD2v1ZiTG_8reIf1TRKjEZ2hjTofm7Ev2PifbDs/s320/leclerc.JPG" width="320" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-71627783973877042862024-02-13T16:58:00.002+01:002024-02-13T16:58:55.813+01:00AprilTags C++ <p>Avevo gia' usato gli Apriltags per stimare le distanze </p><p>Stavolta ho modificato il programma di esempio opencv_demo di Apriltag in modo da estrarre le matrici di rotazione e traslazione </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCzcXYVQx-xZ5enq-HRWjeNradtOQ1h0UJPi_m2toGNPQ8RiSLEMPXENlpuv0pv4AKqZWa4JGSVYwVnceoni3ziXz2zguoE4bD5fMgb6bkaJChdD9QGjK5jz4Ykx2FKCOVZVnO1GV-CHOmh8SPMOyxhyLsHwiXUh7cA54GKgDKqmzYwZV-AN7Y-izs0Al0/s4032/IMG_6270.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCzcXYVQx-xZ5enq-HRWjeNradtOQ1h0UJPi_m2toGNPQ8RiSLEMPXENlpuv0pv4AKqZWa4JGSVYwVnceoni3ziXz2zguoE4bD5fMgb6bkaJChdD9QGjK5jz4Ykx2FKCOVZVnO1GV-CHOmh8SPMOyxhyLsHwiXUh7cA54GKgDKqmzYwZV-AN7Y-izs0Al0/s320/IMG_6270.HEIC" width="240" /></a></div><br /><p>Per cercare di minimizzare il rumore di misura si sono fatto un dodecaedro con le fatte ricoperte di apriltag (le distanze relative dei tag sulle facce devono rimanere costanti ed dodecaedro permette sempre di esporre al minimo 2 ma quasi sempre 3 facce)</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/Eli0mqrtojo" width="320" youtube-src-id="Eli0mqrtojo"></iframe></div><br /><p><br /></p><div style="background-color: #1f1f1f; color: #cccccc; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; line-height: 19px; white-space: pre;"><div><span style="color: #6a9955;">/* Copyright (C) 2013-2016, The Regents of The University of Michigan.</span></div><div><span style="color: #6a9955;">All rights reserved.</span></div><br /><div><span style="color: #6a9955;">This software was developed in the APRIL Robotics Lab under the</span></div><div><span style="color: #6a9955;">direction of Edwin Olson, ebolson@umich.edu. This software may be</span></div><div><span style="color: #6a9955;">available under alternative licensing terms; contact the address above.</span></div><br /><div><span style="color: #6a9955;">Redistribution and use in source and binary forms, with or without</span></div><div><span style="color: #6a9955;">modification, are permitted provided that the following conditions are met:</span></div><br /><div><span style="color: #6a9955;">1. Redistributions of source code must retain the above copyright notice, this</span></div><div><span style="color: #6a9955;"> list of conditions and the following disclaimer.</span></div><div><span style="color: #6a9955;">2. Redistributions in binary form must reproduce the above copyright notice,</span></div><div><span style="color: #6a9955;"> this list of conditions and the following disclaimer in the documentation</span></div><div><span style="color: #6a9955;"> and/or other materials provided with the distribution.</span></div><br /><div><span style="color: #6a9955;">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND</span></div><div><span style="color: #6a9955;">ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span></div><div><span style="color: #6a9955;">WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</span></div><div><span style="color: #6a9955;">DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR</span></div><div><span style="color: #6a9955;">ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES</span></div><div><span style="color: #6a9955;">(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</span></div><div><span style="color: #6a9955;">LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND</span></div><div><span style="color: #6a9955;">ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div><span style="color: #6a9955;">(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span></div><div><span style="color: #6a9955;">SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><br /><div><span style="color: #6a9955;">The views and conclusions contained in the software and documentation are those</span></div><div><span style="color: #6a9955;">of the authors and should not be interpreted as representing official policies,</span></div><div><span style="color: #6a9955;">either expressed or implied, of the Regents of The University of Michigan.</span></div><div><span style="color: #6a9955;">*/</span></div><br /><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;"><stdio.h></span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;"><stdint.h></span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;"><inttypes.h></span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;"><ctype.h></span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;"><math.h></span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;"><errno.h></span></div><br /><div><span style="color: #c586c0;">#ifdef</span><span style="color: #569cd6;"> </span><span style="color: #569cd6;">__linux__</span></div><div><span style="color: #569cd6;"> </span><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;"><unistd.h></span></div><div><span style="color: #c586c0;">#endif</span></div><br /><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"apriltag.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"tag36h11.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"tag25h9.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"tag16h5.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"tagCircle21h7.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"tagCircle49h12.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"tagCustom48h12.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"tagStandard41h12.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"tagStandard52h13.h"</span></div><br /><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"common/getopt.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"common/image_u8.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"common/pjpeg.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"common/zarray.h"</span></div><div><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;">"apriltag_pose.h"</span></div><br /><div><span style="color: #c586c0;">#define</span><span style="color: #569cd6;"> </span><span style="color: #569cd6;">HAMM_HIST_MAX</span><span style="color: #569cd6;"> </span><span style="color: #b5cea8;">10</span></div><br /><div><span style="color: #569cd6;">int</span> <span style="color: #dcdcaa;">main</span>(<span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">argc</span>, <span style="color: #569cd6;">char</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">argv</span><span style="color: #569cd6;">[]</span>)</div><div>{</div><div> <span style="color: #4ec9b0;">getopt_t</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">getopt</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">getopt_create</span>();</div><br /><div> <span style="color: #dcdcaa;">getopt_add_bool</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">'h'</span>, <span style="color: #ce9178;">"help"</span>, <span style="color: #b5cea8;">0</span>, <span style="color: #ce9178;">"Show this help"</span>);</div><div> <span style="color: #dcdcaa;">getopt_add_bool</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">'d'</span>, <span style="color: #ce9178;">"debug"</span>, <span style="color: #b5cea8;">0</span>, <span style="color: #ce9178;">"Enable debugging output (slow)"</span>);</div><div> <span style="color: #dcdcaa;">getopt_add_bool</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">'q'</span>, <span style="color: #ce9178;">"quiet"</span>, <span style="color: #b5cea8;">0</span>, <span style="color: #ce9178;">"Reduce output"</span>);</div><div> <span style="color: #dcdcaa;">getopt_add_string</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">'f'</span>, <span style="color: #ce9178;">"family"</span>, <span style="color: #ce9178;">"tag36h11"</span>, <span style="color: #ce9178;">"Tag family to use"</span>);</div><div> <span style="color: #dcdcaa;">getopt_add_int</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">'i'</span>, <span style="color: #ce9178;">"iters"</span>, <span style="color: #ce9178;">"1"</span>, <span style="color: #ce9178;">"Repeat processing on input set this many times"</span>);</div><div> <span style="color: #dcdcaa;">getopt_add_int</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">'t'</span>, <span style="color: #ce9178;">"threads"</span>, <span style="color: #ce9178;">"1"</span>, <span style="color: #ce9178;">"Use this many CPU threads"</span>);</div><div> <span style="color: #dcdcaa;">getopt_add_int</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">'a'</span>, <span style="color: #ce9178;">"hamming"</span>, <span style="color: #ce9178;">"1"</span>, <span style="color: #ce9178;">"Detect tags with up to this many bit errors."</span>);</div><div> <span style="color: #dcdcaa;">getopt_add_double</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">'x'</span>, <span style="color: #ce9178;">"decimate"</span>, <span style="color: #ce9178;">"2.0"</span>, <span style="color: #ce9178;">"Decimate input image by this factor"</span>);</div><div> <span style="color: #dcdcaa;">getopt_add_double</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">'b'</span>, <span style="color: #ce9178;">"blur"</span>, <span style="color: #ce9178;">"0.0"</span>, <span style="color: #ce9178;">"Apply low-pass blur to input; negative sharpens"</span>);</div><div> <span style="color: #dcdcaa;">getopt_add_bool</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">'0'</span>, <span style="color: #ce9178;">"refine-edges"</span>, <span style="color: #b5cea8;">1</span>, <span style="color: #ce9178;">"Spend more time trying to align edges of tags"</span>);</div><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">getopt_parse</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #9cdcfe;">argc</span>, <span style="color: #9cdcfe;">argv</span>, <span style="color: #b5cea8;">1</span>) <span style="color: #d4d4d4;">||</span> <span style="color: #dcdcaa;">getopt_get_bool</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"help"</span>)) {</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"Usage: </span><span style="color: #9cdcfe;">%s</span><span style="color: #ce9178;"> [options] <input files></span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>, <span style="color: #9cdcfe;">argv</span>[<span style="color: #b5cea8;">0</span>]);</div><div> <span style="color: #dcdcaa;">getopt_do_usage</span>(<span style="color: #9cdcfe;">getopt</span>);</div><div> <span style="color: #dcdcaa;">exit</span>(<span style="color: #b5cea8;">0</span>);</div><div> }</div><br /><div> <span style="color: #569cd6;">const</span> <span style="color: #4ec9b0;">zarray_t</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">inputs</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">getopt_get_extra_args</span>(<span style="color: #9cdcfe;">getopt</span>);</div><br /><div> <span style="color: #4ec9b0;">apriltag_family_t</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">tf</span> <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">NULL</span>;</div><div> <span style="color: #569cd6;">const</span> <span style="color: #569cd6;">char</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">famname</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">getopt_get_string</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"family"</span>);</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tag36h11"</span>)) {</div><div> <span style="color: #9cdcfe;">tf</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">tag36h11_create</span>();</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tag25h9"</span>)) {</div><div> <span style="color: #9cdcfe;">tf</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">tag25h9_create</span>();</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tag16h5"</span>)) {</div><div> <span style="color: #9cdcfe;">tf</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">tag16h5_create</span>();</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tagCircle21h7"</span>)) {</div><div> <span style="color: #9cdcfe;">tf</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">tagCircle21h7_create</span>();</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tagCircle49h12"</span>)) {</div><div> <span style="color: #9cdcfe;">tf</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">tagCircle49h12_create</span>();</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tagStandard41h12"</span>)) {</div><div> <span style="color: #9cdcfe;">tf</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">tagStandard41h12_create</span>();</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tagStandard52h13"</span>)) {</div><div> <span style="color: #9cdcfe;">tf</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">tagStandard52h13_create</span>();</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tagCustom48h12"</span>)) {</div><div> <span style="color: #9cdcfe;">tf</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">tagCustom48h12_create</span>();</div><div> } <span style="color: #c586c0;">else</span> {</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"Unrecognized tag family name. Use e.g. </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">tag36h11</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">.</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>);</div><div> <span style="color: #dcdcaa;">exit</span>(<span style="color: #d4d4d4;">-</span><span style="color: #b5cea8;">1</span>);</div><div> }</div><br /><div> <span style="color: #4ec9b0;">apriltag_detector_t</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">td</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">apriltag_detector_create</span>();</div><div> <span style="color: #dcdcaa;">apriltag_detector_add_family_bits</span>(<span style="color: #9cdcfe;">td</span>, <span style="color: #9cdcfe;">tf</span>, <span style="color: #dcdcaa;">getopt_get_int</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"hamming"</span>));</div><br /><div> <span style="color: #c586c0;">switch</span>(<span style="color: #569cd6;">errno</span>){</div><div> <span style="color: #c586c0;">case</span> <span style="color: #569cd6;">EINVAL</span>:</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">hamming</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;"> parameter is out-of-range.</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>);</div><div> <span style="color: #dcdcaa;">exit</span>(<span style="color: #d4d4d4;">-</span><span style="color: #b5cea8;">1</span>);</div><div> <span style="color: #c586c0;">case</span> <span style="color: #569cd6;">ENOMEM</span>:</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"Unable to add family to detector due to insufficient memory to allocate the tag-family decoder. Try reducing </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">hamming</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;"> from </span><span style="color: #9cdcfe;">%d</span><span style="color: #ce9178;"> or choose an alternative tag family.</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>, <span style="color: #dcdcaa;">getopt_get_int</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"hamming"</span>));</div><div> <span style="color: #dcdcaa;">exit</span>(<span style="color: #d4d4d4;">-</span><span style="color: #b5cea8;">1</span>);</div><div> }</div><br /><div> <span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">quad_decimate</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">getopt_get_double</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"decimate"</span>);</div><div> <span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">quad_sigma</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">getopt_get_double</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"blur"</span>);</div><div> <span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">nthreads</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">getopt_get_int</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"threads"</span>);</div><div> <span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">debug</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">getopt_get_bool</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"debug"</span>);</div><div> <span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">refine_edges</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">getopt_get_bool</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"refine-edges"</span>);</div><br /><div> <span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">quiet</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">getopt_get_bool</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"quiet"</span>);</div><br /><div> <span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">maxiters</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">getopt_get_int</span>(<span style="color: #9cdcfe;">getopt</span>, <span style="color: #ce9178;">"iters"</span>);</div><br /><div> <span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">iter</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">iter</span> <span style="color: #d4d4d4;"><</span> <span style="color: #9cdcfe;">maxiters</span>; <span style="color: #9cdcfe;">iter</span><span style="color: #d4d4d4;">++</span>) {</div><br /><div> <span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">total_quads</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>;</div><div> <span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">total_hamm_hist</span>[<span style="color: #569cd6;">HAMM_HIST_MAX</span>];</div><div> <span style="color: #dcdcaa;">memset</span>(<span style="color: #9cdcfe;">total_hamm_hist</span>, <span style="color: #b5cea8;">0</span>, <span style="color: #569cd6;">sizeof</span>(<span style="color: #569cd6;">int</span>)<span style="color: #d4d4d4;">*</span><span style="color: #569cd6;">HAMM_HIST_MAX</span>);</div><div> <span style="color: #569cd6;">double</span> <span style="color: #9cdcfe;">total_time</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>;</div><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">maxiters</span> <span style="color: #d4d4d4;">></span> <span style="color: #b5cea8;">1</span>)</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"iter </span><span style="color: #9cdcfe;">%d</span><span style="color: #ce9178;"> / </span><span style="color: #9cdcfe;">%d</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>, <span style="color: #9cdcfe;">iter</span> <span style="color: #d4d4d4;">+</span> <span style="color: #b5cea8;">1</span>, <span style="color: #9cdcfe;">maxiters</span>);</div><br /><div> <span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">input</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">input</span> <span style="color: #d4d4d4;"><</span> <span style="color: #dcdcaa;">zarray_size</span>(<span style="color: #9cdcfe;">inputs</span>); <span style="color: #9cdcfe;">input</span><span style="color: #d4d4d4;">++</span>) {</div><br /><div> <span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">hamm_hist</span>[<span style="color: #569cd6;">HAMM_HIST_MAX</span>];</div><div> <span style="color: #dcdcaa;">memset</span>(<span style="color: #9cdcfe;">hamm_hist</span>, <span style="color: #b5cea8;">0</span>, <span style="color: #569cd6;">sizeof</span>(<span style="color: #9cdcfe;">hamm_hist</span>));</div><br /><div> <span style="color: #569cd6;">char</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">path</span>;</div><div> <span style="color: #dcdcaa;">zarray_get</span>(<span style="color: #9cdcfe;">inputs</span>, <span style="color: #9cdcfe;">input</span>, <span style="color: #d4d4d4;">&</span><span style="color: #9cdcfe;">path</span>);</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #9cdcfe;">quiet</span>)</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"loading </span><span style="color: #9cdcfe;">%s</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>, <span style="color: #9cdcfe;">path</span>);</div><div> <span style="color: #c586c0;">else</span></div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"</span><span style="color: #9cdcfe;">%20s</span><span style="color: #ce9178;"> "</span>, <span style="color: #9cdcfe;">path</span>);</div><br /><div> <span style="color: #4ec9b0;">image_u8_t</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">im</span> <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">NULL</span>;</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #dcdcaa;">str_ends_with</span>(<span style="color: #9cdcfe;">path</span>, <span style="color: #ce9178;">"pnm"</span>) <span style="color: #d4d4d4;">||</span> <span style="color: #dcdcaa;">str_ends_with</span>(<span style="color: #9cdcfe;">path</span>, <span style="color: #ce9178;">"PNM"</span>) <span style="color: #d4d4d4;">||</span></div><div> <span style="color: #dcdcaa;">str_ends_with</span>(<span style="color: #9cdcfe;">path</span>, <span style="color: #ce9178;">"pgm"</span>) <span style="color: #d4d4d4;">||</span> <span style="color: #dcdcaa;">str_ends_with</span>(<span style="color: #9cdcfe;">path</span>, <span style="color: #ce9178;">"PGM"</span>))</div><div> <span style="color: #9cdcfe;">im</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">image_u8_create_from_pnm</span>(<span style="color: #9cdcfe;">path</span>);</div><div> <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #dcdcaa;">str_ends_with</span>(<span style="color: #9cdcfe;">path</span>, <span style="color: #ce9178;">"jpg"</span>) <span style="color: #d4d4d4;">||</span> <span style="color: #dcdcaa;">str_ends_with</span>(<span style="color: #9cdcfe;">path</span>, <span style="color: #ce9178;">"JPG"</span>)) {</div><div> <span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">err</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>;</div><div> <span style="color: #4ec9b0;">pjpeg_t</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">pjpeg</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">pjpeg_create_from_file</span>(<span style="color: #9cdcfe;">path</span>, <span style="color: #b5cea8;">0</span>, <span style="color: #d4d4d4;">&</span><span style="color: #9cdcfe;">err</span>);</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">pjpeg</span> <span style="color: #d4d4d4;">==</span> <span style="color: #569cd6;">NULL</span>) {</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"pjpeg failed to load: </span><span style="color: #9cdcfe;">%s</span><span style="color: #ce9178;">, error </span><span style="color: #9cdcfe;">%d</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>, <span style="color: #9cdcfe;">path</span>, <span style="color: #9cdcfe;">err</span>);</div><div> <span style="color: #c586c0;">continue</span>;</div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #b5cea8;">1</span>) {</div><div> <span style="color: #9cdcfe;">im</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">pjpeg_to_u8_baseline</span>(<span style="color: #9cdcfe;">pjpeg</span>);</div><div> } <span style="color: #c586c0;">else</span> {</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"illumination invariant</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>);</div><br /><div> <span style="color: #4ec9b0;">image_u8x3_t</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">imc</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">pjpeg_to_u8x3_baseline</span>(<span style="color: #9cdcfe;">pjpeg</span>);</div><br /><div> <span style="color: #9cdcfe;">im</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">image_u8_create</span>(<span style="color: #9cdcfe;">imc</span>-><span style="color: #9cdcfe;">width</span>, <span style="color: #9cdcfe;">imc</span>-><span style="color: #9cdcfe;">height</span>);</div><br /><div> <span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">y</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">y</span> <span style="color: #d4d4d4;"><</span> <span style="color: #9cdcfe;">imc</span>-><span style="color: #9cdcfe;">height</span>; <span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;">++</span>) {</div><div> <span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">x</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">x</span> <span style="color: #d4d4d4;"><</span> <span style="color: #9cdcfe;">imc</span>-><span style="color: #9cdcfe;">width</span>; <span style="color: #9cdcfe;">x</span><span style="color: #d4d4d4;">++</span>) {</div><div> <span style="color: #569cd6;">double</span> <span style="color: #9cdcfe;">r</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">imc</span>-><span style="color: #9cdcfe;">buf</span>[<span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">imc</span>-><span style="color: #9cdcfe;">stride</span> <span style="color: #d4d4d4;">+</span> <span style="color: #b5cea8;">3</span><span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">x</span> <span style="color: #d4d4d4;">+</span> <span style="color: #b5cea8;">0</span>] <span style="color: #d4d4d4;">/</span> <span style="color: #b5cea8;">255.0</span>;</div><div> <span style="color: #569cd6;">double</span> <span style="color: #9cdcfe;">g</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">imc</span>-><span style="color: #9cdcfe;">buf</span>[<span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">imc</span>-><span style="color: #9cdcfe;">stride</span> <span style="color: #d4d4d4;">+</span> <span style="color: #b5cea8;">3</span><span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">x</span> <span style="color: #d4d4d4;">+</span> <span style="color: #b5cea8;">1</span>] <span style="color: #d4d4d4;">/</span> <span style="color: #b5cea8;">255.0</span>;</div><div> <span style="color: #569cd6;">double</span> <span style="color: #9cdcfe;">b</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">imc</span>-><span style="color: #9cdcfe;">buf</span>[<span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">imc</span>-><span style="color: #9cdcfe;">stride</span> <span style="color: #d4d4d4;">+</span> <span style="color: #b5cea8;">3</span><span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">x</span> <span style="color: #d4d4d4;">+</span> <span style="color: #b5cea8;">2</span>] <span style="color: #d4d4d4;">/</span> <span style="color: #b5cea8;">255.0</span>;</div><br /><div> <span style="color: #569cd6;">double</span> <span style="color: #9cdcfe;">alpha</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0.42</span>;</div><div> <span style="color: #569cd6;">double</span> <span style="color: #9cdcfe;">v</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0.5</span> <span style="color: #d4d4d4;">+</span> <span style="color: #dcdcaa;">log</span>(<span style="color: #9cdcfe;">g</span>) <span style="color: #d4d4d4;">-</span> <span style="color: #9cdcfe;">alpha</span><span style="color: #d4d4d4;">*</span><span style="color: #dcdcaa;">log</span>(<span style="color: #9cdcfe;">b</span>) <span style="color: #d4d4d4;">-</span> (<span style="color: #b5cea8;">1</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">alpha</span>)<span style="color: #d4d4d4;">*</span><span style="color: #dcdcaa;">log</span>(<span style="color: #9cdcfe;">r</span>);</div><div> <span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">iv</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">v</span> <span style="color: #d4d4d4;">*</span> <span style="color: #b5cea8;">255</span>;</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">iv</span> <span style="color: #d4d4d4;"><</span> <span style="color: #b5cea8;">0</span>)</div><div> <span style="color: #9cdcfe;">iv</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>;</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">iv</span> <span style="color: #d4d4d4;">></span> <span style="color: #b5cea8;">255</span>)</div><div> <span style="color: #9cdcfe;">iv</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">255</span>;</div><br /><div> <span style="color: #9cdcfe;">im</span>-><span style="color: #9cdcfe;">buf</span>[<span style="color: #9cdcfe;">y</span><span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">im</span>-><span style="color: #9cdcfe;">stride</span> <span style="color: #d4d4d4;">+</span> <span style="color: #9cdcfe;">x</span>] <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">iv</span>;</div><div> }</div><div> }</div><div> <span style="color: #dcdcaa;">image_u8x3_destroy</span>(<span style="color: #9cdcfe;">imc</span>);</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">debug</span>)</div><div> <span style="color: #dcdcaa;">image_u8_write_pnm</span>(<span style="color: #9cdcfe;">im</span>, <span style="color: #ce9178;">"debug_invariant.pnm"</span>);</div><div> }</div><br /><div> <span style="color: #dcdcaa;">pjpeg_destroy</span>(<span style="color: #9cdcfe;">pjpeg</span>);</div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">im</span> <span style="color: #d4d4d4;">==</span> <span style="color: #569cd6;">NULL</span>) {</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"couldn't load </span><span style="color: #9cdcfe;">%s</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>, <span style="color: #9cdcfe;">path</span>);</div><div> <span style="color: #c586c0;">continue</span>;</div><div> }</div><br /><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"image: </span><span style="color: #9cdcfe;">%s</span><span style="color: #ce9178;"> </span><span style="color: #9cdcfe;">%d</span><span style="color: #ce9178;">x</span><span style="color: #9cdcfe;">%d</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>, <span style="color: #9cdcfe;">path</span>, <span style="color: #9cdcfe;">im</span>-><span style="color: #9cdcfe;">width</span>, <span style="color: #9cdcfe;">im</span>-><span style="color: #9cdcfe;">height</span>);</div><br /><div> <span style="color: #4ec9b0;">zarray_t</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">detections</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">apriltag_detector_detect</span>(<span style="color: #9cdcfe;">td</span>, <span style="color: #9cdcfe;">im</span>);</div><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #569cd6;">errno</span> <span style="color: #d4d4d4;">==</span> <span style="color: #569cd6;">EAGAIN</span>) {</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"Unable to create the </span><span style="color: #9cdcfe;">%d</span><span style="color: #ce9178;"> threads requested.</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>,<span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">nthreads</span>);</div><div> <span style="color: #dcdcaa;">exit</span>(<span style="color: #d4d4d4;">-</span><span style="color: #b5cea8;">1</span>);</div><div> }</div><br /><div> <span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">i</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">i</span> <span style="color: #d4d4d4;"><</span> <span style="color: #dcdcaa;">zarray_size</span>(<span style="color: #9cdcfe;">detections</span>); <span style="color: #9cdcfe;">i</span><span style="color: #d4d4d4;">++</span>) {</div><div> <span style="color: #4ec9b0;">apriltag_detection_t</span> <span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">det</span>;</div><div> <span style="color: #dcdcaa;">zarray_get</span>(<span style="color: #9cdcfe;">detections</span>, <span style="color: #9cdcfe;">i</span>, <span style="color: #d4d4d4;">&</span><span style="color: #9cdcfe;">det</span>);</div><div> </div><div> <span style="color: #6a9955;">// ********************************************************</span></div><div><span style="color: #6a9955;"> /*apriltag_detection_info_t info;</span></div><div><span style="color: #6a9955;"> info.det = det;</span></div><div><span style="color: #6a9955;"> info.tagsize = 5; //dimensione del tag</span></div><div><span style="color: #6a9955;"> info.fx = 10; // lunghezza focale camera in pixels asse x </span></div><div><span style="color: #6a9955;"> info.fy = 10; // lunghezza focale camera in pixels asse y </span></div><div><span style="color: #6a9955;"> info.cx = 10; // centro focale camera in pixels asse x</span></div><div><span style="color: #6a9955;"> info.cy = 10; // centro focale camera in pixels asse x</span></div><div><span style="color: #6a9955;"> */</span></div><div> <span style="color: #6a9955;">//apriltag_pose_t pose;</span></div><div> <span style="color: #6a9955;">//double err = estimate_tag_pose(&info, &pose);</span></div><div> <span style="color: #6a9955;">//double x = pose.R->data[0];</span></div><div> <span style="color: #6a9955;">//double y = pose.R->data[1];</span></div><div> <span style="color: #6a9955;">//double z = pose.R->data[2];</span></div><div> <span style="color: #6a9955;">//double translation_on_axes_1 = pose.t->data[0];</span></div><div> <span style="color: #6a9955;">//double translation_on_axes_2 = pose.t->data[1];</span></div><div> <span style="color: #6a9955;">//double translation_on_axes_3 = pose.t->data[3];</span></div><br /><div> <span style="color: #6a9955;">// ********************************************************</span></div><div> </div><div> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #9cdcfe;">quiet</span>)</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"detection </span><span style="color: #9cdcfe;">%3d</span><span style="color: #ce9178;">: id (</span><span style="color: #9cdcfe;">%2d</span><span style="color: #ce9178;">x</span><span style="color: #9cdcfe;">%2d</span><span style="color: #ce9178;">)-</span><span style="color: #9cdcfe;">%-4d</span><span style="color: #ce9178;">, hamming </span><span style="color: #9cdcfe;">%d</span><span style="color: #ce9178;">, margin </span><span style="color: #9cdcfe;">%8.3f</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>,</div><div> <span style="color: #9cdcfe;">i</span>, <span style="color: #9cdcfe;">det</span>-><span style="color: #9cdcfe;">family</span>-><span style="color: #9cdcfe;">nbits</span>, <span style="color: #9cdcfe;">det</span>-><span style="color: #9cdcfe;">family</span>-><span style="color: #9cdcfe;">h</span>, <span style="color: #9cdcfe;">det</span>-><span style="color: #9cdcfe;">id</span>, <span style="color: #9cdcfe;">det</span>-><span style="color: #9cdcfe;">hamming</span>, <span style="color: #9cdcfe;">det</span>-><span style="color: #9cdcfe;">decision_margin</span>);</div><br /><div> <span style="color: #9cdcfe;">hamm_hist</span>[<span style="color: #9cdcfe;">det</span>-><span style="color: #9cdcfe;">hamming</span>]<span style="color: #d4d4d4;">++</span>;</div><div> <span style="color: #9cdcfe;">total_hamm_hist</span>[<span style="color: #9cdcfe;">det</span>-><span style="color: #9cdcfe;">hamming</span>]<span style="color: #d4d4d4;">++</span>;</div><div> }</div><br /><div> <span style="color: #dcdcaa;">apriltag_detections_destroy</span>(<span style="color: #9cdcfe;">detections</span>);</div><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #9cdcfe;">quiet</span>) {</div><div> <span style="color: #dcdcaa;">timeprofile_display</span>(<span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">tp</span>);</div><div> }</div><br /><div> <span style="color: #9cdcfe;">total_quads</span> <span style="color: #d4d4d4;">+=</span> <span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">nquads</span>;</div><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #9cdcfe;">quiet</span>)</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"hamm "</span>);</div><br /><div> <span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">i</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">i</span> <span style="color: #d4d4d4;"><</span> <span style="color: #569cd6;">HAMM_HIST_MAX</span>; <span style="color: #9cdcfe;">i</span><span style="color: #d4d4d4;">++</span>)</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"</span><span style="color: #9cdcfe;">%5d</span><span style="color: #ce9178;"> "</span>, <span style="color: #9cdcfe;">hamm_hist</span>[<span style="color: #9cdcfe;">i</span>]);</div><br /><div> <span style="color: #569cd6;">double</span> <span style="color: #9cdcfe;">t</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">timeprofile_total_utime</span>(<span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">tp</span>) <span style="color: #d4d4d4;">/</span> <span style="color: #b5cea8;">1.0E3</span>;</div><div> <span style="color: #9cdcfe;">total_time</span> <span style="color: #d4d4d4;">+=</span> <span style="color: #9cdcfe;">t</span>;</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"</span><span style="color: #9cdcfe;">%12.3f</span><span style="color: #ce9178;"> "</span>, <span style="color: #9cdcfe;">t</span>);</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"</span><span style="color: #9cdcfe;">%5d</span><span style="color: #ce9178;">"</span>, <span style="color: #9cdcfe;">td</span>-><span style="color: #9cdcfe;">nquads</span>);</div><br /><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>);</div><br /><div> <span style="color: #dcdcaa;">image_u8_destroy</span>(<span style="color: #9cdcfe;">im</span>);</div><div> }</div><br /><br /><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"Summary</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>);</div><br /><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"hamm "</span>);</div><br /><div> <span style="color: #c586c0;">for</span> (<span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">i</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0</span>; <span style="color: #9cdcfe;">i</span> <span style="color: #d4d4d4;"><</span> <span style="color: #569cd6;">HAMM_HIST_MAX</span>; <span style="color: #9cdcfe;">i</span><span style="color: #d4d4d4;">++</span>)</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"</span><span style="color: #9cdcfe;">%5d</span><span style="color: #ce9178;"> "</span>, <span style="color: #9cdcfe;">total_hamm_hist</span>[<span style="color: #9cdcfe;">i</span>]);</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"</span><span style="color: #9cdcfe;">%12.3f</span><span style="color: #ce9178;"> "</span>, <span style="color: #9cdcfe;">total_time</span>);</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"</span><span style="color: #9cdcfe;">%5d</span><span style="color: #ce9178;">"</span>, <span style="color: #9cdcfe;">total_quads</span>);</div><div> <span style="color: #dcdcaa;">printf</span>(<span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>);</div><br /><div> }</div><br /><div> <span style="color: #6a9955;">// don't deallocate contents of inputs; those are the argv</span></div><div> <span style="color: #dcdcaa;">apriltag_detector_destroy</span>(<span style="color: #9cdcfe;">td</span>);</div><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tag36h11"</span>)) {</div><div> <span style="color: #dcdcaa;">tag36h11_destroy</span>(<span style="color: #9cdcfe;">tf</span>);</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tag25h9"</span>)) {</div><div> <span style="color: #dcdcaa;">tag25h9_destroy</span>(<span style="color: #9cdcfe;">tf</span>);</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tag16h5"</span>)) {</div><div> <span style="color: #dcdcaa;">tag16h5_destroy</span>(<span style="color: #9cdcfe;">tf</span>);</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tagCircle21h7"</span>)) {</div><div> <span style="color: #dcdcaa;">tagCircle21h7_destroy</span>(<span style="color: #9cdcfe;">tf</span>);</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tagCircle49h12"</span>)) {</div><div> <span style="color: #dcdcaa;">tagCircle49h12_destroy</span>(<span style="color: #9cdcfe;">tf</span>);</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tagStandard41h12"</span>)) {</div><div> <span style="color: #dcdcaa;">tagStandard41h12_destroy</span>(<span style="color: #9cdcfe;">tf</span>);</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tagStandard52h13"</span>)) {</div><div> <span style="color: #dcdcaa;">tagStandard52h13_destroy</span>(<span style="color: #9cdcfe;">tf</span>);</div><div> } <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span> (<span style="color: #d4d4d4;">!</span><span style="color: #dcdcaa;">strcmp</span>(<span style="color: #9cdcfe;">famname</span>, <span style="color: #ce9178;">"tagCustom48h12"</span>)) {</div><div> <span style="color: #dcdcaa;">tagCustom48h12_destroy</span>(<span style="color: #9cdcfe;">tf</span>);</div><div> }</div><br /><div> <span style="color: #dcdcaa;">getopt_destroy</span>(<span style="color: #9cdcfe;">getopt</span>);</div><br /><div> <span style="color: #c586c0;">return</span> <span style="color: #b5cea8;">0</span>;</div><div>}</div><br /></div><p><br /></p><p><br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-61617549826812858622024-02-12T06:41:00.001+01:002024-02-12T06:41:22.442+01:00Shift Doppler ISS<p>Lo shift doppler massimo della trasmissione da ISS e' stimabile in 4 KHz </p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwg3Q35nMWrXqDZsYHm8aLrGFc8sDzEIzL5U6Aq-mnNGKKdT2XyMzo54Cp3wGkifTIj5QayfqAllVOqL0B7yScM7Oh2FA1rlP8FLEgALDQb5cFuy0bGO8D-dyFJqvFP5-P8_aqwhIbuqyvUttcWujZxBAzs920Rj97bkhKe9unMA6YjNKm4DcjnOwk2Ci2/s4032/IMG_6250.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwg3Q35nMWrXqDZsYHm8aLrGFc8sDzEIzL5U6Aq-mnNGKKdT2XyMzo54Cp3wGkifTIj5QayfqAllVOqL0B7yScM7Oh2FA1rlP8FLEgALDQb5cFuy0bGO8D-dyFJqvFP5-P8_aqwhIbuqyvUttcWujZxBAzs920Rj97bkhKe9unMA6YjNKm4DcjnOwk2Ci2/s320/IMG_6250.HEIC" width="320" /></a></div><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLA1SlgfUIN8KBqd09CVyy4aILqd3EPYoNqqJPpYQmu5R6bRirUZDTpFB5A8hGyA4UkxphtgyJUsM3L77PC_8GJOqOQxKM2crMpQbpQojuxJtX1mj3dwTxFe0giVOtvrJXspgjcgy9XQrvObvn8-7s1Aqow_Z_-AFSMkbmMFPUtUVvgpUGX8rd47UCDvGA/s4032/IMG_6252.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLA1SlgfUIN8KBqd09CVyy4aILqd3EPYoNqqJPpYQmu5R6bRirUZDTpFB5A8hGyA4UkxphtgyJUsM3L77PC_8GJOqOQxKM2crMpQbpQojuxJtX1mj3dwTxFe0giVOtvrJXspgjcgy9XQrvObvn8-7s1Aqow_Z_-AFSMkbmMFPUtUVvgpUGX8rd47UCDvGA/s320/IMG_6252.HEIC" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaRFXn0eNmNBHo6V_jCIbDIJcrFq9PEB0qjd7UsqaMRInyWONFzcj2ToL80IiW6X7NvDBrwSaFlbtrWXXsG4V7x_RbLLFY_-PO7Xx72dJuRCVkq5dw8IW5x3n4QlEuGSz066g4vqU1FiKGOUWPAZfYd52qo6qV92s9txu0tDaqQCwWl9BmM2p6hCmzW3hF/s4032/IMG_6253.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaRFXn0eNmNBHo6V_jCIbDIJcrFq9PEB0qjd7UsqaMRInyWONFzcj2ToL80IiW6X7NvDBrwSaFlbtrWXXsG4V7x_RbLLFY_-PO7Xx72dJuRCVkq5dw8IW5x3n4QlEuGSz066g4vqU1FiKGOUWPAZfYd52qo6qV92s9txu0tDaqQCwWl9BmM2p6hCmzW3hF/s320/IMG_6253.HEIC" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjClYNtffKroaNUon-Y66-z1kR2g2Z43P3B2sCtpkE6qz_W-BYaXvXzOWXS_gHBMbmzz7xAc_EqM0lDGJ15HGWO3G7-8Sg5YUErDT7zgnKpkE1jbLjzaR6MaIMwu7B37PbCIboTyJfpQgMuRIGQ8PwU7U7vHXseHCfZau4HHBteyvJaeOtTb5UPA4Fr3U5W/s4032/IMG_6254.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjClYNtffKroaNUon-Y66-z1kR2g2Z43P3B2sCtpkE6qz_W-BYaXvXzOWXS_gHBMbmzz7xAc_EqM0lDGJ15HGWO3G7-8Sg5YUErDT7zgnKpkE1jbLjzaR6MaIMwu7B37PbCIboTyJfpQgMuRIGQ8PwU7U7vHXseHCfZau4HHBteyvJaeOtTb5UPA4Fr3U5W/s320/IMG_6254.HEIC" width="320" /></a></div><br /><p><br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-9951072593557528482024-02-06T16:44:00.006+01:002024-02-06T18:25:19.576+01:00RF1100-232 USB<p> Il piano originale era...usare CC1101 come su Flipper Zero con un dispositivo già pronto ma a basso costo..</p><p>La scelta e' caduta su qesto</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPcAY-GmFKzb-Wcq1pS677PDnveNn0QxPRvQwIiDUbdmf5fx4yzCpBz6P2XbFo6A-MkxNx3JCBpk0NFURBtARB8iYFoE-J-rUTfciYWkvtqlqdCgscrWulAmS41dcbUQdxFDi4XNu-R1lMgF1CXTcaM8O49YdLgaRKHFLGD3OlY8FslBMOe_HULOsV1ZNh/s464/Clipboard01.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="464" data-original-width="356" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPcAY-GmFKzb-Wcq1pS677PDnveNn0QxPRvQwIiDUbdmf5fx4yzCpBz6P2XbFo6A-MkxNx3JCBpk0NFURBtARB8iYFoE-J-rUTfciYWkvtqlqdCgscrWulAmS41dcbUQdxFDi4XNu-R1lMgF1CXTcaM8O49YdLgaRKHFLGD3OlY8FslBMOe_HULOsV1ZNh/s320/Clipboard01.png" width="246" /></a></div><br /><p><br /></p><p>In linea di principio doveva diventare il clone di <a href="https://greatscottgadgets.com/yardstickone/">Yard Stick One</a> (a meno di 1/10 del prezzo) magari appoggiandosi su <a href="https://rfquack.org/modules/overview/">RFQuack</a> o <a href="https://github.com/mcore1976/cc1101-tool">cc1101-tools</a></p><p>L'esecuzione e' stata pessima...ma andiamo con ordine</p><p>La scheda mi e' arrivata da Aliexpress senza uno straccio di istruzioni d'uso ed anche la pagina del venditore non mi era di aiuto. Collegando il dispositivo vedevo un convertitore seriale-TTL CP2012 ma inviando dati sulla /dev/ttyUSB0 nessuna risposta e tanto meno segni dal led integrato</p><p>Aprendo il case si vedono i chip CP2012, un ATMega48PA ed il CC1101 quindi dalla USB si invia comandi all'ATMega che li reinvia al CC1101 tramite SPI....tranne per il fatto che il microcontrollore non ha un booloader Arduino (c'e' da dire che ci sono le piazzole per saldare i connettori di MISO/MOSI e SCLK quindi non tutto e' perduto per la programmabilita')</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLxfN9mUFa6SstEZC1BTfqfkOjlaQ5-WuqOIG9y1BhuXOnNUBI_6LdZxl6oj7D4ExseERhFk-YH7ezats9XwVXjuXicH_w6EYOb84NA9Rcinks8H3TJaLSbOGlEsU-s7hJRQIOI8uaOwNNQO-LGeQH5-Uc6lICXAy2JygRwUr8gV3VWRaHVpottpVaxquM/s4032/IMG_6245.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLxfN9mUFa6SstEZC1BTfqfkOjlaQ5-WuqOIG9y1BhuXOnNUBI_6LdZxl6oj7D4ExseERhFk-YH7ezats9XwVXjuXicH_w6EYOb84NA9Rcinks8H3TJaLSbOGlEsU-s7hJRQIOI8uaOwNNQO-LGeQH5-Uc6lICXAy2JygRwUr8gV3VWRaHVpottpVaxquM/s320/IMG_6245.HEIC" width="320" /></a></div><br /><p><br /></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1ImXLxHdZ0J71E2GHl2GhOwA3TVJAUHI0xYLQN7cPYnE2Dj_9bu4dj0bBlZyp4AmYQkBLR_VubKAd7Y2lIVjX-D9MyQAfOvMlRaqn_OhJFMOw_P4YtrLDcrDnoDf4z2namwIAqTCoVKWpA4q4R_8OgxUoXr1eLR3LxRCIcBeEb-DA-p6TB9TZFf0rM21d/s352/2024-02-06-115139.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="288" data-original-width="352" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1ImXLxHdZ0J71E2GHl2GhOwA3TVJAUHI0xYLQN7cPYnE2Dj_9bu4dj0bBlZyp4AmYQkBLR_VubKAd7Y2lIVjX-D9MyQAfOvMlRaqn_OhJFMOw_P4YtrLDcrDnoDf4z2namwIAqTCoVKWpA4q4R_8OgxUoXr1eLR3LxRCIcBeEb-DA-p6TB9TZFf0rM21d/s320/2024-02-06-115139.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZweUJCrGUj62V9q77QcO4MQdTzG5cKKrWqg7iU2n54B0iCdqwBMIhJWriVdWNSsDnNx0O-IGeTWtVvsbLoKJfq70VFrj4gqUIsUnEpMd4TpPfwHxwp6c6pzrMgCak0fC1kPRoV0ZeDGqDjX8hunIkrYi_HbCaBkPkh6_yA0YQieH6Ne6dLXbPuTR0DV6Y/s352/2024-02-06-115150.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="288" data-original-width="352" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZweUJCrGUj62V9q77QcO4MQdTzG5cKKrWqg7iU2n54B0iCdqwBMIhJWriVdWNSsDnNx0O-IGeTWtVvsbLoKJfq70VFrj4gqUIsUnEpMd4TpPfwHxwp6c6pzrMgCak0fC1kPRoV0ZeDGqDjX8hunIkrYi_HbCaBkPkh6_yA0YQieH6Ne6dLXbPuTR0DV6Y/s320/2024-02-06-115150.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrF7sZAE7Jn8gC3dha2bWzYVHmPKsGBBlZ7JDyfxmzfzN-J8lYhlFLfSlqKsuidtd94c8_TwpegmEV2HdZSCVBa5TtrJvLKftaFMWvN5kh-2qOc52ipF5Tf-MGTSTAnnyGSv4d15CFynU2ctW3sUMJRJvyDY6hVDQD3SyXQlqUR5ALktth54yQGlAm8PzY/s352/2024-02-06-115125.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="288" data-original-width="352" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrF7sZAE7Jn8gC3dha2bWzYVHmPKsGBBlZ7JDyfxmzfzN-J8lYhlFLfSlqKsuidtd94c8_TwpegmEV2HdZSCVBa5TtrJvLKftaFMWvN5kh-2qOc52ipF5Tf-MGTSTAnnyGSv4d15CFynU2ctW3sUMJRJvyDY6hVDQD3SyXQlqUR5ALktth54yQGlAm8PzY/s320/2024-02-06-115125.jpg" width="320" /></a></div><div><br /></div>ho trovato questo vecchio link che spiega come inviare le impostazioni di trasmissione <br /><p><a href="http://www.yesyes.info/index.php/electronics/rf1100-232-rf-433mhz-transceiver-module/">http://www.yesyes.info/index.php/electronics/rf1100-232-rf-433mhz-transceiver-module/</a></p><p>in pratica sembra che questi dispositivi non siano nati per sniffare traffico ma solo per comunicare in modo seriale..in pratica si puo' impostare il canale, la potenza e poco piu' ... niente modulazione per esempio</p><p>Frugando su GitHub ho trovato questo link</p><p><a href="https://github.com/acontini/CC1101_USB">https://github.com/acontini/CC1101_USB</a></p><p><b>Avvertenza...nel rar c'e' un eseguibile windows che virustotale segnala come virus</b>...io sono su Linux ..ci sono alcuni documenti tra cui un eseguibile in C che sembra il firmware del ATMega48PA</p><p>Nel pacchetto c'e' anche un PDF di documentazione con la mail dell'assistenza tecnica...ho provato a contattarla ma la mail e' tornata indietro...adesso il dominio sembra appartenere ad una ditta che produce occhiali (maledizione)</p><p>La scheda viene inizializzata in 9600, canale 0, massima potenza ed ID 1. Dopo di cio' c'e' un loop infinito in cui i bytes del buffer di trasmissione vengono mandati al CC1101 con un carattere di SYNC alla fine</p><div style="font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; line-height: 19px; white-space: pre;"><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;"><reg52.h></span></div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #c586c0;">#include</span><span style="color: #569cd6;"> </span><span style="color: #ce9178;"><intrins.h></span></div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #c586c0;">#define</span><span style="color: #569cd6;"> INT8U unsigned char</span></div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #c586c0;">#define</span><span style="color: #569cd6;"> INT16U unsigned int</span></div><div style="background-color: #1f1f1f; color: #cccccc;">sfr WDT_CONTR <span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0Xe1</span>; //watchdog</div><div style="background-color: #1f1f1f; color: #cccccc;">sbit KEY1 <span style="color: #d4d4d4;">=</span>P3<span style="color: #d4d4d4;">^</span><span style="color: #b5cea8;">6</span>; //Key1 uguale al bit 6 porta 3</div><div style="background-color: #1f1f1f; color: #cccccc;">sbit KEY2 <span style="color: #d4d4d4;">=</span>P3<span style="color: #d4d4d4;">^</span><span style="color: #b5cea8;">7</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;">sbit led <span style="color: #d4d4d4;">=</span>P2<span style="color: #d4d4d4;">^</span><span style="color: #b5cea8;">5</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;">sbit led3<span style="color: #d4d4d4;">=</span>P2<span style="color: #d4d4d4;">^</span><span style="color: #b5cea8;">0</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;">sbit led2<span style="color: #d4d4d4;">=</span>P2<span style="color: #d4d4d4;">^</span><span style="color: #b5cea8;">1</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;">sbit led1<span style="color: #d4d4d4;">=</span>P2<span style="color: #d4d4d4;">^</span><span style="color: #b5cea8;">2</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;">sbit led0<span style="color: #d4d4d4;">=</span>P2<span style="color: #d4d4d4;">^</span><span style="color: #b5cea8;">3</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;">INT8U <span style="color: #9cdcfe;">TxBuf</span>[<span style="color: #b5cea8;">4</span>];</div><div style="background-color: #1f1f1f; color: #cccccc;">INT8U send_f;</div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #6a9955;">//when i=100. delay=1.5ms</span></div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #569cd6;">static</span> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">delay</span>(<span style="color: #569cd6;">unsigned</span> <span style="color: #569cd6;">int</span> <span style="color: #9cdcfe;">s</span>)</div><div style="background-color: #1f1f1f; color: #cccccc;">{</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #569cd6;">unsigned</span> <span style="color: #569cd6;">int</span> i;</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #c586c0;">for</span>(i<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>; i<span style="color: #d4d4d4;"><</span>s; i<span style="color: #d4d4d4;">++</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;">}</div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">UART_init</span>()</div><div style="background-color: #1f1f1f; color: #cccccc;">{</div><div style="background-color: #1f1f1f; color: #cccccc;"> SCON <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0x50</span>;<span style="color: #6a9955;"> /* uart in mode 1 (8 bit), REN=1 */</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> TMOD <span style="color: #d4d4d4;">=</span> TMOD <span style="color: #d4d4d4;">|</span> <span style="color: #b5cea8;">0x20</span> ;<span style="color: #6a9955;"> /* Timer 1 in mode 2 */</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> TH1 <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0xFD</span>;<span style="color: #6a9955;"> /* 9600 Bds at 11.059MHz */</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> TL1 <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0xFD</span>;<span style="color: #6a9955;"> /* 9600 Bds at 11.059MHz */</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #6a9955;">//IE =0x90;</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> TR1 <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">1</span>;<span style="color: #6a9955;"> /* Timer 1 run */</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> ET1 <span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>; </div><div style="background-color: #1f1f1f; color: #cccccc;"> ES<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">1</span>; </div><div style="background-color: #1f1f1f; color: #cccccc;"> PS<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">1</span>; </div><div style="background-color: #1f1f1f; color: #cccccc;"> EA <span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">1</span>; </div><div style="background-color: #1f1f1f; color: #cccccc;">}</div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #569cd6;">unsigned</span> <span style="color: #569cd6;">char</span> <span style="color: #9cdcfe;">c</span>) </div><div style="background-color: #1f1f1f; color: #cccccc;">{</div><div style="background-color: #1f1f1f; color: #cccccc;"> SBUF<span style="color: #d4d4d4;">=</span>c; </div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #c586c0;">while</span>(TI<span style="color: #d4d4d4;">==</span><span style="color: #b5cea8;">0</span>); </div><div style="background-color: #1f1f1f; color: #cccccc;"> TI<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;">}</div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">print_string</span>(<span style="color: #569cd6;">unsigned</span> <span style="color: #569cd6;">char</span><span style="color: #d4d4d4;">*</span> <span style="color: #9cdcfe;">p</span>)</div><div style="background-color: #1f1f1f; color: #cccccc;">{</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #c586c0;">while</span>(<span style="color: #d4d4d4;">*</span>p <span style="color: #d4d4d4;">!=</span><span style="color: #ce9178;">'</span><span style="color: #d7ba7d;">\0</span><span style="color: #ce9178;">'</span>)</div><div style="background-color: #1f1f1f; color: #cccccc;"> {</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #d4d4d4;">*</span>p<span style="color: #d4d4d4;">++</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> }</div><div style="background-color: #1f1f1f; color: #cccccc;">}</div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #6a9955;">//--------------------------------------------------------------------------------------------------</span></div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #6a9955;">// com_interrup()</span></div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #6a9955;">//--------------------------------------------------------------------------------------------------</span></div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #dcdcaa;">com_interrupt</span>(<span style="color: #569cd6;">void</span>) interrupt <span style="color: #b5cea8;">4</span> using <span style="color: #b5cea8;">3</span></div><div style="background-color: #1f1f1f; color: #cccccc;">{</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #c586c0;">if</span>(RI) {</div><div style="background-color: #1f1f1f; color: #cccccc;"> RI<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>; </div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #9cdcfe;">TxBuf</span>[<span style="color: #b5cea8;">2</span>]<span style="color: #d4d4d4;">=</span>SBUF;</div><div style="background-color: #1f1f1f; color: #cccccc;"> send_f<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">1</span>; </div><div style="background-color: #1f1f1f; color: #cccccc;"> send_f<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">1</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> led<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">1</span>; </div><div style="background-color: #1f1f1f; color: #cccccc;"> }</div><div style="background-color: #1f1f1f; color: #cccccc;">}</div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">main</span>(<span style="color: #569cd6;">void</span>)</div><div style="background-color: #1f1f1f; color: #cccccc;">{</div><div style="background-color: #1f1f1f; color: #cccccc;"> INT8U leng <span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> INT8U i,k<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> INT8U <span style="color: #9cdcfe;">RxBuf</span>[<span style="color: #b5cea8;">4</span>]<span style="color: #d4d4d4;">=</span>{<span style="color: #b5cea8;">0</span>}; </div><div style="background-color: #1f1f1f; color: #cccccc;"> INT8U rxcount;</div><div style="background-color: #1f1f1f; color: #cccccc;"> INT8U <span style="color: #9cdcfe;">TxBuf</span>[<span style="color: #b5cea8;">30</span>];</div><div style="background-color: #1f1f1f; color: #cccccc;"> led<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">1</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> rxcount<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0xff</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #9cdcfe;">TxBuf</span>[<span style="color: #b5cea8;">2</span>]<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">2</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #9cdcfe;">TxBuf</span>[<span style="color: #b5cea8;">3</span>]<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">UART_init</span>();</div><div style="background-color: #1f1f1f; color: #cccccc;"> P0<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0x00</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> led1<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #c586c0;">for</span>(i<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>; i<span style="color: #d4d4d4;"><</span><span style="color: #b5cea8;">30</span>; i<span style="color: #d4d4d4;">++</span>)</div><div style="background-color: #1f1f1f; color: #cccccc;"> {</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #9cdcfe;">TxBuf</span>[i]<span style="color: #d4d4d4;">=</span>i;</div><div style="background-color: #1f1f1f; color: #cccccc;"> }</div><div style="background-color: #1f1f1f; color: #cccccc;"> </div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0xA3</span>);<span style="color: #6a9955;"> //Comandi set serial port baud rate</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0x3A</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0x02</span>);<span style="color: #6a9955;"> //Imposta la baudrate a 9600 (1:4800,2:9600, 3:19200)</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">6000</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0xA7</span>);<span style="color: #6a9955;"> //Set Channel</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0x7A</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0x00</span>);<span style="color: #6a9955;"> //Setta canale 0 (da 00 a 255) </span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">6000</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0xAB</span>);<span style="color: #6a9955;"> //Set TX Power</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0xBA</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0x0A</span>);<span style="color: #6a9955;"> //0A :10DBM (valori permessi 00,05,07,0A)</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">6000</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0xA9</span>);<span style="color: #6a9955;"> //Set Module ID</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0x9A</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0x00</span>);<span style="color: #6a9955;"> //</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0x01</span>);<span style="color: #6a9955;"> //Due bytes : da 0 a 65535</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">6000</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">6000</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"><span style="color: #6a9955;">// WDT_CONTR=0x3c;</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #c586c0;">while</span>(<span style="color: #b5cea8;">1</span>)<span style="color: #6a9955;"> //loop</span></div><div style="background-color: #1f1f1f; color: #cccccc;"> {</div><div style="background-color: #1f1f1f; color: #cccccc;"> WDT_CONTR<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0x3c</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #c586c0;">if</span>(KEY1<span style="color: #d4d4d4;">==</span><span style="color: #b5cea8;">0</span>)</div><div style="background-color: #1f1f1f; color: #cccccc;"> {</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">10</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #c586c0;">while</span>(<span style="color: #d4d4d4;">!</span>KEY1)</div><div style="background-color: #1f1f1f; color: #cccccc;"> {</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">10</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> }</div><div style="background-color: #1f1f1f; color: #cccccc;"> led1<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">print_string</span>(<span style="color: #ce9178;">"abcdefghijklmnopqrstuvwxyzABCD"</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> </div><div style="background-color: #1f1f1f; color: #cccccc;"> led1<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">1</span>; </div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">750</span>); </div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #c586c0;">for</span>(i<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0</span>;i<span style="color: #d4d4d4;"><</span><span style="color: #b5cea8;">23</span>;i<span style="color: #d4d4d4;">++</span>) </div><div style="background-color: #1f1f1f; color: #cccccc;"> {</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #9cdcfe;">TxBuf</span>[i]);</div><div style="background-color: #1f1f1f; color: #cccccc;"> }</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">750</span>); . </div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">Sendchar</span>(<span style="color: #b5cea8;">0x66</span>);<span style="color: #6a9955;"> //carattere di SYNC </span></div><div style="background-color: #1f1f1f; color: #cccccc;"> }</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">450</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> led1<span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">1</span>;</div><div style="background-color: #1f1f1f; color: #cccccc;"> <span style="color: #dcdcaa;">delay</span>(<span style="color: #b5cea8;">100</span>);</div><div style="background-color: #1f1f1f; color: #cccccc;"> }</div><div style="background-color: #1f1f1f; color: #cccccc;">}</div><span style="background-color: #1f1f1f; color: #cccccc;"><br /></span><span style="background-color: white;">Per la configurazione vera e propria della radio ci sono indicazioni in </span></div><div style="line-height: 19px;"><span style="background-color: white; font-family: Droid Sans Mono, monospace, monospace; font-size: 14px; white-space: pre;"><a href="https://github.com/LSatan/SmartRC-CC1101-Driver-Lib/">https://github.com/LSatan/SmartRC-CC1101-Driver-Lib/</a></span></div><div style="line-height: 19px;"><span style="background-color: white; font-family: Droid Sans Mono, monospace, monospace; font-size: 14px; white-space: pre;">ma non sono riuscito a trovare il modo di far passare i comandi dalla USB verso il CC1101</span></div><div style="line-height: 19px;"><span style="background-color: white; font-family: Droid Sans Mono, monospace, monospace; font-size: 14px; white-space: pre;"><br /></span></div><div style="line-height: 19px;"><span style="background-color: white; font-family: Droid Sans Mono, monospace, monospace; font-size: 14px; white-space: pre;">per esempio nella libreria si trova per cambiare il numero di canale si usa la funzione </span></div><div style="line-height: 19px;"><span style="background-color: white; font-family: Droid Sans Mono, monospace, monospace; font-size: 14px; white-space: pre;">setChannel che scrive nel registro 0x0A il valore del canale scelto</span></div><div style="line-height: 19px;"><span style="font-family: Droid Sans Mono, monospace, monospace;"><span style="background-color: white; font-size: 14px; white-space: pre;">i parametri per la configurazione visti qui sono invece 0xA7</span></span></div><div style="line-height: 19px;"><span style="background-color: white; font-family: Droid Sans Mono, monospace, monospace; font-size: 14px; white-space: pre;"><div style="background-color: #1f1f1f; color: #cccccc; font-family: Consolas, "Courier New", monospace; line-height: 19px;"><div><span style="color: #c586c0;">#define</span><span style="color: #569cd6;"> CC1101_CHANNR </span><span style="color: #b5cea8;">0x0A</span><span style="color: #6a9955;"> // Channel number</span></div><br /><div><span style="color: #569cd6;">void</span> <span style="color: #4ec9b0;">ELECHOUSE_CC1101</span>::<span style="color: #dcdcaa;">setChannel</span>(<span style="color: #4ec9b0;">byte</span> <span style="color: #9cdcfe;">ch</span>){</div><div>chan <span style="color: #d4d4d4;">=</span> ch;</div><div><span style="color: #dcdcaa;">SpiWriteReg</span>(CC1101_CHANNR, chan);</div><div>}</div><div><br /></div><div><div style="line-height: 19px;"><div> <span style="color: #569cd6;">void</span> <span style="color: #4ec9b0;">ELECHOUSE_CC1101</span>::<span style="color: #dcdcaa;">SpiWriteReg</span>(<span style="color: #4ec9b0;">byte</span> <span style="color: #9cdcfe;">addr</span>, <span style="color: #4ec9b0;">byte</span> <span style="color: #9cdcfe;">value</span>)</div><div>{</div><div> <span style="color: #dcdcaa;">SpiStart</span>();</div><div> <span style="color: #dcdcaa;">digitalWrite</span>(SS_PIN, LOW);</div><div> <span style="color: #c586c0;">while</span>(<span style="color: #dcdcaa;">digitalRead</span>(MISO_PIN));</div><div> <span style="color: #9cdcfe;">SPI</span>.<span style="color: #dcdcaa;">transfer</span>(addr);</div><div> <span style="color: #9cdcfe;">SPI</span>.<span style="color: #dcdcaa;">transfer</span>(value); </div><div> <span style="color: #dcdcaa;">digitalWrite</span>(SS_PIN, HIGH);</div><div> <span style="color: #dcdcaa;">SpiEnd</span>();</div><div>}</div></div></div></div></span></div>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-10344561520317328942024-02-04T15:45:00.003+01:002024-02-04T21:41:35.957+01:00Sostituzione ganasce freno a tamburo Fiat Panda<p>Ad un certo punto la Fiat Panda ha iniziato a bloccardi in marcia come se rimanesse frenata...portata dal macchina la ha riconsegnata dopo 10 minuti senza chiedere soldi...solo che il problema si e' ripresentato il giorno dopo</p><p>Ho dovuto fare da me....togliendo le ruote posteriori ed il tamburo era chiaro che il ferodo si era staccato dalla ganascia si stava disintegrando andando ad incastrarsi nell'intercapedine con il tamburo frenando di fatto la macchina (le frecce in rosso indicano il distacco a sinistra e l'assenza e a destra del ferodo) </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOzpRwMaXEZ5EyaGxIEfYMXMG9_j_8PvQtGL1-kwVVLYYgoBVTgfvIb5u2iah9q4en9D5TU0bgF5kLbKw47UbSwzND6jxEV6AfcCs7k1eA4AulodUEKZ7PsX4TxHbMx4INWedURMZ3KiNJw39AdMZ9kYAman07hhf4FHEOfJGHLnH7ns1IQROKwztuiw9X/s615/freno1.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="615" data-original-width="461" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOzpRwMaXEZ5EyaGxIEfYMXMG9_j_8PvQtGL1-kwVVLYYgoBVTgfvIb5u2iah9q4en9D5TU0bgF5kLbKw47UbSwzND6jxEV6AfcCs7k1eA4AulodUEKZ7PsX4TxHbMx4INWedURMZ3KiNJw39AdMZ9kYAman07hhf4FHEOfJGHLnH7ns1IQROKwztuiw9X/s320/freno1.jpg" width="240" /></a></div>Intendiamoci...colpa mia....il freno posteriore ha una vita dichiarata dalla fabbrica di 100.000 km ed il ero a 107.000 km.<div>In ogni caso ci sono diversi tutorial su Youtube ...solo che omettono un particolare fondamentale al momento di rimontare il tutto<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5ARM-cplNEOAn1rhPdbck6irrXS1RT-ewPq149UZAjg2xC6tn1MH2K-9ddRtpbic0QkJMEeYFEpp8FCvmCbO8CoT36cJ_bg2cZP_bV4rVs0aFxtnFLjShD26YZ5_XwKqvLiaPlVMPNAAlyFicsLGFzfpBsagdwoYdVtBDLkTR__JCAJ1ynY-lXtta4QcL/s615/freno2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="615" data-original-width="461" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5ARM-cplNEOAn1rhPdbck6irrXS1RT-ewPq149UZAjg2xC6tn1MH2K-9ddRtpbic0QkJMEeYFEpp8FCvmCbO8CoT36cJ_bg2cZP_bV4rVs0aFxtnFLjShD26YZ5_XwKqvLiaPlVMPNAAlyFicsLGFzfpBsagdwoYdVtBDLkTR__JCAJ1ynY-lXtta4QcL/s320/freno2.jpg" width="240" /></a></div><br /><p>Indicato con la freccia in rosso c'e' un registro che automaticamente allarga la ganascia a seconda del consumo....quando si mettono i ricambi nuovi tale registro deve essere totalmente azzerato ..altrimenti. anche se si avra' la forza di rimettere in tensione le molle (e non sara' semplice) il tamburo non rientrera' mai in sede</p><p>PS : il cavo del freno a mano e' nascosto all'interno ....conviene detensionare dal registro che si trova nell'abitacolo vicino alla leva del freno a mano.</p><p><br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p></div>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-51537805248370608322024-02-02T19:29:00.003+01:002024-02-02T19:29:14.967+01:00Meteo Radio Fax<p>3853 KHz </p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/1Ev2VH3bb-U" width="320" youtube-src-id="1Ev2VH3bb-U"></iframe></div><br /><p><br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-84565438087138458712024-02-02T19:27:00.006+01:002024-02-02T19:27:50.827+01:00 Esempio di trasmissione bollettino meteo su frequenza 7.647 MHz servizio DDH7<p> Esempio di trasmissione bollettino meteo su frequenza 7.647 MHz servizio DDH7</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/RrfgYpVfCVA" width="320" youtube-src-id="RrfgYpVfCVA"></iframe></div><br /><p><br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-35945008234640339482024-02-01T22:31:00.003+01:002024-02-02T19:26:14.068+01:00IPTV<p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://iptv-org.github.io/iptv/index.m3u">https://iptv-org.github.io/iptv/index.m3u</a></div><br /><br /><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9SUGL2KxP_JVZak5EhYUk_VGKzDl_GOv5VI899m9q14GYb5XJEPjbe5t_peoeBvG7mejmDZBhEBlSJskDRr9RC03nBEDnWDJTTjdRYUSZHm-DGPJnueFVcNWjuwmpOUDMxncbvTgo2ELGX1wv5TcIBErmbgKkEEG5-Rybif-L6spI6bvLEdXYhqQDLY5y/s1357/Screenshot%20from%202024-02-01%2022-29-15.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="660" data-original-width="1357" height="156" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9SUGL2KxP_JVZak5EhYUk_VGKzDl_GOv5VI899m9q14GYb5XJEPjbe5t_peoeBvG7mejmDZBhEBlSJskDRr9RC03nBEDnWDJTTjdRYUSZHm-DGPJnueFVcNWjuwmpOUDMxncbvTgo2ELGX1wv5TcIBErmbgKkEEG5-Rybif-L6spI6bvLEdXYhqQDLY5y/s320/Screenshot%20from%202024-02-01%2022-29-15.png" width="320" /></a></div><br />Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-62415631190966338002024-02-01T22:26:00.000+01:002024-02-01T22:26:44.084+01:00APRS Lora con IGate<p> Ho provato ad usare il tracker APRS basato su Lora ed il gateway verso internet </p><p><a href="https://github.com/lora-aprs/LoRa_APRS_Tracker">https://github.com/lora-aprs/LoRa_APRS_Tracker</a></p><p><a href="https://github.com/lora-aprs/LoRa_APRS_iGate">https://github.com/lora-aprs/LoRa_APRS_iGate</a></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYfXbtkz9ZdpG7Zpm49WN3HoRA4BsdSnrS8jxsd_cg3U5I1qwB4axGaRSkgMfSyuEINXsPckpTHTrrJBSY4N_dZIOLUBvoiMZ9ssUZ97ejKfT7pZDuq2qSAhD7gYAG7p4FEH1A3ZZeWQqh1C8X1ccjEtwSDLd2HstpN7qVwGdl8vpSv69CZa2sGox050AJ/s820/IMG_6010.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="615" data-original-width="820" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYfXbtkz9ZdpG7Zpm49WN3HoRA4BsdSnrS8jxsd_cg3U5I1qwB4axGaRSkgMfSyuEINXsPckpTHTrrJBSY4N_dZIOLUBvoiMZ9ssUZ97ejKfT7pZDuq2qSAhD7gYAG7p4FEH1A3ZZeWQqh1C8X1ccjEtwSDLd2HstpN7qVwGdl8vpSv69CZa2sGox050AJ/s320/IMG_6010.jpg" width="320" /></a></div><br /><p>il progetto e' sviluppato in Platformio </p><p>Come Lora board ho modificato il file.ini del progetto in <span style="background-color: #1f1f1f; color: #569cd6; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; white-space: pre;">board</span><span style="background-color: #1f1f1f; color: #cccccc; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; white-space: pre;"> = ttgo-t-beam</span></p>Le altre configurazioni si trovano nel file Json dove si trovano le impostazioni del trasmettitore/ricevitore Lora, il callsign<div>Il progetto si compila semplicemente ...l'unica accortezza e' quella alla fine di lanciare <span style="background-color: white; color: #3a3a3a; font-family: Ubuntu, sans-serif; font-size: 16px; text-align: justify;">Upload Filesystem Image </span>per caricare anche il file di configurazione oltre al programma</div><div><br /></div><div>Sul IGate nel file di configurazione is-cfg.json si impostano i dati della rete WiFi ed il proprio account presso il servizio aprs2.net per poter inviare su Internet i dati ricevuti e visualizzarli su <a href="https://aprs.fi/#!lat=43.75867&lng=11.29033">https://aprs.fi/#!lat=43.75867&lng=11.29033</a></div><div><div style="text-align: justify;"><span style="color: #3a3a3a; font-family: Ubuntu, sans-serif;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_wjsiJ76JSdbcqPWZc6w_522lbPmBCKdNlCm_F2dBk8v9hGZSkT1Y-hsOijD9l-9lCaG7Zw7ZrhilbuDBgd2Vjiu_eeG4RCekMbyF7ICe3WYyqb5P4IOem5UNIuLetLn2U4DKXOEBRYfYMwIQ17Mbqj-VZU9PX8G7F1qd4HyaaETQjyOH4LQDYH-zKi86/s993/aprsd.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="583" data-original-width="993" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_wjsiJ76JSdbcqPWZc6w_522lbPmBCKdNlCm_F2dBk8v9hGZSkT1Y-hsOijD9l-9lCaG7Zw7ZrhilbuDBgd2Vjiu_eeG4RCekMbyF7ICe3WYyqb5P4IOem5UNIuLetLn2U4DKXOEBRYfYMwIQ17Mbqj-VZU9PX8G7F1qd4HyaaETQjyOH4LQDYH-zKi86/s320/aprsd.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhECV-cqwerlWJJBuD13GOuv07kHPwwc50Wzcp5BQPkFx7DCwgZ1Y601XwQe-E3PcBH6YOvXHoyPsw914ZLhzBBA4vTMfA2YztHUyjSbaaAOujr9hbuNzD4Rn9jz1hZlOTi33VEUO0NS8mp4i_ptWYUMG_QNh3niEnIL_3Swt_qnbyt0zphTkiWoGutggD1/s993/aprs3.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="583" data-original-width="993" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhECV-cqwerlWJJBuD13GOuv07kHPwwc50Wzcp5BQPkFx7DCwgZ1Y601XwQe-E3PcBH6YOvXHoyPsw914ZLhzBBA4vTMfA2YztHUyjSbaaAOujr9hbuNzD4Rn9jz1hZlOTi33VEUO0NS8mp4i_ptWYUMG_QNh3niEnIL_3Swt_qnbyt0zphTkiWoGutggD1/s320/aprs3.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiISU_60wa95PLi4REi5fCLKjW3SRrZs-P5XC6MRLFir6VUBpPyxFzmLFtTw6tkOdUcs07mcYc0SUDp-O1_J_KwgkiKpMWXq3eSJenCFQQL9W1Lh7HdbsB6Pi1vFo4LiCxIElOXE7kh-0nuXB5kVGDlTvNATCJ3-Za5L4nJzaPTff71qDp6776K1BvZRyxt/s1044/aprs4.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="593" data-original-width="1044" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiISU_60wa95PLi4REi5fCLKjW3SRrZs-P5XC6MRLFir6VUBpPyxFzmLFtTw6tkOdUcs07mcYc0SUDp-O1_J_KwgkiKpMWXq3eSJenCFQQL9W1Lh7HdbsB6Pi1vFo4LiCxIElOXE7kh-0nuXB5kVGDlTvNATCJ3-Za5L4nJzaPTff71qDp6776K1BvZRyxt/s320/aprs4.png" width="320" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p></div>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-55305145401034878152024-02-01T19:21:00.002+01:002024-02-01T19:25:10.266+01:00Programmazione CRT Micron<p> Per programmare il CRT Micron ci vuole un cavo seriale che si connette all'RJ45 frontale secondo lo schema. In pratica si usa un USB-2-TTL</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7srXf8q3uCEh77J7beE4FT8MaamPl4mh7HQPONGCZDbQtau_v-NXX0zY4neREm9uF3BlrA1JRgZNdiDn3GvvqFXeJz0ASYF9KxOe0VDi28eBWfr3WR19qZo_K7BFKnMpT3p1pJVYzD55T0t4EXEtB_XwoGTCzhInMGWRjIKQack35EUx9qE1jM6pzWpeF/s800/AT-778uv_Programming-Cable.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="338" data-original-width="800" height="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7srXf8q3uCEh77J7beE4FT8MaamPl4mh7HQPONGCZDbQtau_v-NXX0zY4neREm9uF3BlrA1JRgZNdiDn3GvvqFXeJz0ASYF9KxOe0VDi28eBWfr3WR19qZo_K7BFKnMpT3p1pJVYzD55T0t4EXEtB_XwoGTCzhInMGWRjIKQack35EUx9qE1jM6pzWpeF/s320/AT-778uv_Programming-Cable.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">Si puo' fare anche da soli ma io ne ho trovato io gia' fatto su Aliexpress ad un prezzo decisamente inferiore a quello originale (circa 8 euro)</div><div><br /></div>Il software puo' essere scaricato qui. Un programma e' per la sola configurazione, il secondo e' quello per impostare i canali ed altri dettagli (tipo il messaggio di benvenuto)<br /><p><a href="https://www.kcb.co.uk/contents/en-uk/d170_Software.html">https://www.kcb.co.uk/contents/en-uk/d170_Software.html</a></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDmXOlSDsD5RtyUv7ycAIppCZb_q6SN_qi3C2UCyfFOwAWnHh9lX1McEhMXfPp7ejCGlZWIFM9aNOgh6PpSUQ3pdN5BFOAhx-afvvgoCmRhjrsffoEtRHg5YqxuzAREbJqhgFXEPdTyIUftWawBG7Ng9TgY_IHV2Vah5-rjCfM_eutRHZJC3IT6sVvG2lI/s1349/crt.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="671" data-original-width="1349" height="159" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDmXOlSDsD5RtyUv7ycAIppCZb_q6SN_qi3C2UCyfFOwAWnHh9lX1McEhMXfPp7ejCGlZWIFM9aNOgh6PpSUQ3pdN5BFOAhx-afvvgoCmRhjrsffoEtRHg5YqxuzAREbJqhgFXEPdTyIUftWawBG7Ng9TgY_IHV2Vah5-rjCfM_eutRHZJC3IT6sVvG2lI/s320/crt.png" width="320" /></a></div><br /><p>Dal software si puo' fare l'espansione delle bande...a me e' gia' arrivato in Modo 2 ovvero la massima ampiezza (UHF 400-490 e VHF 144-148) . Si puo' fare anche dalla radio premendo all'avvio ON+FUN+P4, si seleziona il menu 43, si preme PTT fino a quando il numero del modo non cambia colore, sempre premendo PTT si gira la manopola, si rilascia e si riavvia la radio</p><p>Oltre al software della casa madre si puo' usare anche il progetto open source</p><p><a href="https://github.com/CircuitChaos/OpenMicron/">https://github.com/CircuitChaos/OpenMicron/</a></p><p>in caso di problemi per fare il reset Menu/Func Menu/ opzione 21 RST</p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-87423867795689305162024-02-01T14:31:00.002+01:002024-02-01T14:31:10.032+01:00Minimodem CRT Micron<p>Usando il cavo visto qui si puo' usare il CRT Micron anche per inviare trasmissioni audio modem FSK tramite il programma minimodem</p><p>Si puo' scrivere il contenuto del messaggio in un file e poi effettuare la trasmissione con</p><p><b>cat prova.txt |minimodem --tx 100</b></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-26771843631885500162024-02-01T12:22:00.005+01:002024-02-01T12:22:36.460+01:00Frequenza ISM<p> Con RTL-SDR e' possibile "ascoltare" il <a href="https://it.wikipedia.org/wiki/Banda_ISM">traffico ISM</a> su 433.9 MHz </p><p>I pacchetti si possono leggere tramite il plugin di OpenWebRX oppure da linea di comando </p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkpwJOtLinuy9un5ZczsQFQN1dNuMB0bd3uaZzQXfTbWrxg4HuCEDavkoH2a7h4w6OcZLu5LSm_fY2LNR4ASC3vXkBU0hn3-Y3sqdCg2TlkC_AIQ3SVvSd8Lm6fGjHd4xKVbK3ni4HAN8LR7AuURAipqQ9D7MOBjAjzGEDwrFtXnXo2Bh_6FeBPCDFI1YI/s1365/aaa.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="603" data-original-width="1365" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkpwJOtLinuy9un5ZczsQFQN1dNuMB0bd3uaZzQXfTbWrxg4HuCEDavkoH2a7h4w6OcZLu5LSm_fY2LNR4ASC3vXkBU0hn3-Y3sqdCg2TlkC_AIQ3SVvSd8Lm6fGjHd4xKVbK3ni4HAN8LR7AuURAipqQ9D7MOBjAjzGEDwrFtXnXo2Bh_6FeBPCDFI1YI/s320/aaa.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">oppure da linea di comando si puo' usare rtl-433</div><div class="separator" style="clear: both; text-align: left;"><b>sudo apt install rtl-433 </b></div><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghWTO7XBflPPwMw7a4p0ax0IT6Mh4aGB9uFCGScDe9qht8791UAG_GZ-fm6lsR3n7fWQ6kze7H2FRpCbrGe9A7CgtBvYiDQrfxYdBKRSVWoXn7TCM2d1NheQBbFrUvraG1Equ2WCrZffFqUhxkeO-GAXgTQXqKW3BGo-YolITn25L7fHdoGsOdfLhqyrkj/s1365/bbbb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="603" data-original-width="1365" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghWTO7XBflPPwMw7a4p0ax0IT6Mh4aGB9uFCGScDe9qht8791UAG_GZ-fm6lsR3n7fWQ6kze7H2FRpCbrGe9A7CgtBvYiDQrfxYdBKRSVWoXn7TCM2d1NheQBbFrUvraG1Equ2WCrZffFqUhxkeO-GAXgTQXqKW3BGo-YolITn25L7fHdoGsOdfLhqyrkj/s320/bbbb.png" width="320" /></a></div><br /><p><br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-32056967294515565872024-02-01T11:58:00.005+01:002024-02-01T18:54:34.100+01:00APRS con CRT Micron<p>Per prima cosa si programma la radio per l'ascolto su 144.800 MHz</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAfTnPLaypSoTS7KyAeRugHXBShpM8mka_o_aZXhlXzE9RSvuc4d7skxB1P7lLleh-KD2beTi2LaPUhZWPavB8wFBCCniX7ew40Xvs_GYwCwvxsSOopQNIK4exCpkNBiKD2mll7awTf99fLBGrsJl440x4s_ywEAx-A07JykCQLU09CIGB-CUNapGZk88d/s4032/IMG_6232.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAfTnPLaypSoTS7KyAeRugHXBShpM8mka_o_aZXhlXzE9RSvuc4d7skxB1P7lLleh-KD2beTi2LaPUhZWPavB8wFBCCniX7ew40Xvs_GYwCwvxsSOopQNIK4exCpkNBiKD2mll7awTf99fLBGrsJl440x4s_ywEAx-A07JykCQLU09CIGB-CUNapGZk88d/s320/IMG_6232.HEIC" width="240" /></a></div><p><br /></p><p>Il secondo passo e' crearsi un cavetto per connettere l'uscita audio </p><p>La via piu' semplice se si vuole solo ricevere e' connettere l'uscita audio della radio sul dietro del dispositivo con la scheda audio tramite un semplice cavo jack audio (il cavo deve andare sul MIC della scheda audio)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJgUGYfT20hCAymSAlZBEyWKKocu3B1Bur6-qVwDttDb3Pa_10-cM7EwSQiqmERPZk7VYTwn0T89lJF0EFHiZuhPE5dLM8n71u4ZTjmU3KkzKJbJA83T78ES0L6c4dNSQGD5WrhNJY_AMZYoOCyYJHoqm1S2faR5DKeElguBMOTPPCyqgxh3gIjG-sdyn-/s4032/IMG_6235.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJgUGYfT20hCAymSAlZBEyWKKocu3B1Bur6-qVwDttDb3Pa_10-cM7EwSQiqmERPZk7VYTwn0T89lJF0EFHiZuhPE5dLM8n71u4ZTjmU3KkzKJbJA83T78ES0L6c4dNSQGD5WrhNJY_AMZYoOCyYJHoqm1S2faR5DKeElguBMOTPPCyqgxh3gIjG-sdyn-/s320/IMG_6235.HEIC" width="240" /></a></div><br /><p>Altrimenti se si vuole anche trasmettere si deve scollegare il microfono della radio e crearsi un cavo apposito</p><p>Si prende un cavo RJ45 e si taglia</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0mGfGIbhHUbqN7UXckNCCe1Ey8mPvNn3ZpTrfZyyVST3eVtGUQa3kp8-UG5OtrEqnxH4OZeYu_b71F3v9p_6557lHk4uj_pRWM2opfbyCjC7sFQiC3ff_DoGE9-taLSwSkIeVCRsHwGJJj75jn-H2_s_H0LbhwjkJnz54Te3rBUwlQogr421S-lt4HfVv/s630/Screenshot%20from%202024-02-01%2009-26-37.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="173" data-original-width="630" height="88" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0mGfGIbhHUbqN7UXckNCCe1Ey8mPvNn3ZpTrfZyyVST3eVtGUQa3kp8-UG5OtrEqnxH4OZeYu_b71F3v9p_6557lHk4uj_pRWM2opfbyCjC7sFQiC3ff_DoGE9-taLSwSkIeVCRsHwGJJj75jn-H2_s_H0LbhwjkJnz54Te3rBUwlQogr421S-lt4HfVv/s320/Screenshot%20from%202024-02-01%2009-26-37.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">Si prende un jack maschio TRSS (io per semplicita' ho preso un adattatore che permette collegamenti rapidi)</div><div class="separator" style="clear: both; text-align: left;">Si deve collegare </div><div class="separator" style="clear: both; text-align: left;">blu -> tip</div><div class="separator" style="clear: both; text-align: left;">biancoblu e marrone -> ring 2</div><div class="separator" style="clear: both; text-align: left;">verde -> sleeve</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8pZpPrmdcfDrFHVIH6i_E95TYli7s-nvmzYe5W3fjXc6bRi2lWq54iR3reIAwZD6DoFZDPppi5IMB4yYXlwqE9mbyyzN5iF7Buhg8gHNbdwEFfEguGJ-eFQ7J9BuSdthc3brJT0ZQlqYnom6mdAFu6cfYB5iXEuUZkT1rNqGYp4YwRvOSs3PTlcXDecpC/s500/trrs_pinout.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="375" data-original-width="500" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8pZpPrmdcfDrFHVIH6i_E95TYli7s-nvmzYe5W3fjXc6bRi2lWq54iR3reIAwZD6DoFZDPppi5IMB4yYXlwqE9mbyyzN5iF7Buhg8gHNbdwEFfEguGJ-eFQ7J9BuSdthc3brJT0ZQlqYnom6mdAFu6cfYB5iXEuUZkT1rNqGYp4YwRvOSs3PTlcXDecpC/s320/trrs_pinout.png" width="320" /></a></div><br /><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi84bgBtDNSmZ_TGyTOLtLIEIOtW32AJIJTXLXPDmCK6PHb2zn7Wzva5vWvAM0kYuzGyPcLtJ3cEVLeE_TxI-svbglCW9IADycqUXLOY9hX1mQ-OKRdSgz3ZmY6KrtEDgsGatiVI_Puowl_BSHzgv87PNd9ke4Zw9S3x2HGAyY6Om4Dej14cYZDM8Or-2Ds/s4032/IMG_6234.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi84bgBtDNSmZ_TGyTOLtLIEIOtW32AJIJTXLXPDmCK6PHb2zn7Wzva5vWvAM0kYuzGyPcLtJ3cEVLeE_TxI-svbglCW9IADycqUXLOY9hX1mQ-OKRdSgz3ZmY6KrtEDgsGatiVI_Puowl_BSHzgv87PNd9ke4Zw9S3x2HGAyY6Om4Dej14cYZDM8Or-2Ds/s320/IMG_6234.HEIC" width="240" /></a></div><br /><p>a questo punto i collegamenti con la scheda audio sono i seguenti</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilUGmw_MPIkOuN76lf7aWaXxC2ynRhzimFQXLJB9Cruv8_7RnPNxv6OSP6aw6x6C76uoyeV-e0a3_NqoLFe8YOZ4GoO6JIEeIC5Ij6zLhRV_iaXyaMOmLP7MrySslLqUTxTh4NzWfM4RHVaUs56sIaDT812M6WsAq-k34Yu6eL75vBkGJFCneqCW409z4p/s4032/IMG_6233.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilUGmw_MPIkOuN76lf7aWaXxC2ynRhzimFQXLJB9Cruv8_7RnPNxv6OSP6aw6x6C76uoyeV-e0a3_NqoLFe8YOZ4GoO6JIEeIC5Ij6zLhRV_iaXyaMOmLP7MrySslLqUTxTh4NzWfM4RHVaUs56sIaDT812M6WsAq-k34Yu6eL75vBkGJFCneqCW409z4p/s320/IMG_6233.HEIC" width="240" /></a></div><p><br /></p><p>Da ricordarsi di attivare il VOX sulla radio perche' in questa configurazione non e' gestito il PTT</p><p>Si installa il software direwolf</p><p><b>sudo apt install direwolf </b></p><p>una volta installato Direwolf con Apt si deve copiare il file di configurazione di esempio <b>direwolf.conf.gz</b> da <b>/usr/share/doc/direwolf/conf/ </b>e lo si copia nella propria home e lo di scompatta</p><p>si lancia il comando </p><p><b>arecord -l</b></p><p>e si osserva l'identificativo della scheda di rete e si modifica il file (nel mio caso)</p><p><b>ADEVICE plughw:1,0</b></p><p><b>ARATE 48000</b></p><div>a questo punto si lancia direwolf (per me vuole sudo per abilitare il microfono)</div><div>Se tutto e' andato a buon fine si ricevono i messaggi APRS come nell'immagine sottostante</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLoo3R300j_ORTnWwU811-jhXQA15y0xScZtx84bJ_GQr0bjYqanOLxLVPvFsFxFsTSdn_gOueFH5je7YayEahIPdXbPm5ObI2tVSW1vu7zyqe2yvGVQ9EGKuoaY0_gBX7dRwqqyULqcE8b6DD9-H0GCu7l491zxvfHWSerjGfr2iCNH9MM0LKPJfeJYfI/s955/Screenshot%20from%202024-02-01%2011-27-42.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="655" data-original-width="955" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLoo3R300j_ORTnWwU811-jhXQA15y0xScZtx84bJ_GQr0bjYqanOLxLVPvFsFxFsTSdn_gOueFH5je7YayEahIPdXbPm5ObI2tVSW1vu7zyqe2yvGVQ9EGKuoaY0_gBX7dRwqqyULqcE8b6DD9-H0GCu7l491zxvfHWSerjGfr2iCNH9MM0LKPJfeJYfI/s320/Screenshot%20from%202024-02-01%2011-27-42.png" width="320" /></a></div><br /><div>Oltre a ricevere e decodificare APRS direwolf permette anche l'invio di pacchetti aprs </div><div>Si modifica direwolf.conf con una stringa simile alla seguente</div><div><br /></div><div><div><b><span style="font-size: x-small;">PBEACON delay=1 every=30 overlay=S symbol="digi" lat=43^46.45N long=011^14.46E power=50 height=20 gain=4 comment="Luca Innocenti Florence (Italy)"</span></b></div></div><div><br /></div><p>ed in automatico vengono inviati messaggi </p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFQXSVlJgXPa53xscEICbAik_ij25BT-fjD2KWTSHYLCXFfq9agSATfavEAiiYniTDt1bq-Fm3_3jGqwV2JMwcFT4ewpbcHQGAKkfEm3Jal4TgCQL6PctqiHIwfPDYMjBqEiDpHw9CXaIkz9vUqS5Ms5SG-Ioms62JIJ0ErjZ0E5StVaijLK-M6a1gHdEs/s801/Screenshot%20from%202024-02-01%2018-51-37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="234" data-original-width="801" height="93" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFQXSVlJgXPa53xscEICbAik_ij25BT-fjD2KWTSHYLCXFfq9agSATfavEAiiYniTDt1bq-Fm3_3jGqwV2JMwcFT4ewpbcHQGAKkfEm3Jal4TgCQL6PctqiHIwfPDYMjBqEiDpHw9CXaIkz9vUqS5Ms5SG-Ioms62JIJ0ErjZ0E5StVaijLK-M6a1gHdEs/s320/Screenshot%20from%202024-02-01%2018-51-37.png" width="320" /></a></div><br /><p><br /></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-68217884456395794802024-02-01T09:06:00.001+01:002024-02-01T09:06:25.205+01:00Stereo RTSP stream Oculus Go <p></p><div class="separator" style="clear: both; text-align: left;">Un tentativo di effettuare uno stream video stereo dalla camera verso Oculus GO </div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxrv0LKq_89o45N-xiSwraaxyU4b5GZb8nav80oAUt8Z_sAH0mf0u_DPT4ePydIlANpD_7zu4aEPSvm8ARfFN1sKkHP98R-5Ic7Gf1kJ22q1zAhu1dqb88QH55PQfRHTxeltPg9ODUxjNNpbWOp3Htv6qaGkgeMR1D1ZnHmCBa9wzKKOc6k546sqBurH2/s4032/IMG_6220.HEIC" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxrv0LKq_89o45N-xiSwraaxyU4b5GZb8nav80oAUt8Z_sAH0mf0u_DPT4ePydIlANpD_7zu4aEPSvm8ARfFN1sKkHP98R-5Ic7Gf1kJ22q1zAhu1dqb88QH55PQfRHTxeltPg9ODUxjNNpbWOp3Htv6qaGkgeMR1D1ZnHmCBa9wzKKOc6k546sqBurH2/s320/IMG_6220.HEIC" width="320" /></a></div><br /> <p></p><p>Oculus GO ha un supporto estremamente limitato dal punto di vista software per come client di stream video...l'unica soluzione che ho trovato e' stata quella di usare RSTP</p><p>prima si crea il server</p><p><b>wget https://github.com/aler9/rtsp-simple-server/releases/download/v0.16.0/rtsp-simple-server_v0.16.0_linux_amd64.tar.gz</b></p><p><b><br /></b></p><div><b>tar -xzvf rtsp-simple-server_v0.16.0_linux_amd64.tar.gz</b></div><div><b><br /></b></div><p><b>rtspServer=192.168.1.67:rtsp://192.168.1.67:8554/webCamStream ./rtsp-simple-server</b></p><p>dopo con FFMPEG si collega la camera al server</p><p><b>sudo ffmpeg -f v4l2 -framerate 24 -video_size 2560x960 -i /dev/video2 -f rtsp -rtsp_transport tcp rtsp://192.168.1.67:8554/webCamStream</b></p><p>per verificare si puo' usare</p><p><b>ffplay "rtsp://192.168.1.67:8554/webCamStream"</b></p><div>A questo punto ho caricato con Sideload VLC su Oculus GO.</div><div>I problemi sono il tempo di lag (abbondantemente sopra il secondo) ed il fatto che non riesco a portare VLC in modalita' fullscreen (solo teatro) e cio' fa perdere ogni speranza di avere una visualizzazione tridimensionale</div>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0tag:blogger.com,1999:blog-7433645172516816448.post-33469474860457789332024-02-01T09:00:00.002+01:002024-02-01T09:00:12.793+01:00Contatto ARISS con Quansheng UV/K5<p> </p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/7K2labQsSP0" width="320" youtube-src-id="7K2labQsSP0"></iframe></div><br /><p></p>Luca Innocentihttp://www.blogger.com/profile/17230344673656190754noreply@blogger.com0