Linuxbaserade processorsystem VS FreeRTOS

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DanielM
Inlägg: 2192
Blev medlem: 5 september 2019, 14:19:58

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av DanielM »

Kan du visa hur man gör? LCD också? :)
maDa skrev: 28 juli 2020, 22:20:34 Skulle säga att kamera & bild-hanteringen blir nog en RPi lätt billigast och enklast.
Billigast vet jag inte. Men enklast är det. Fast det beror på vilka metoder man vill använda. Open CV så är raspberry bättre än stm32.
DanielM
Inlägg: 2192
Blev medlem: 5 september 2019, 14:19:58

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av DanielM »

Om man får förtydliga frågeställningen:

Jag är intresserad utav AI på inbyggda system. Detta har med robotik att göra, inget annat. Kan man få en radiostyrd bil eller robotar se med en kamera och identifiera vad den ser så kan man koppla ihop med Reinforcement Learning, vilket är i praktiken en hög med olika if-sataer uttryckt i linjär algebra.

Men för att tillämpa AI på enbyggda system så måste man ha en kamera + LCD. Men inte vilken kamera och LCD som helst. Det måste vara en kamera och LCD som har en DMA fästning(interfaces). Då går det otroligt snabbt.

För STM32 så kan man använda CubeMX AI där man kan generera TensorFlow Python modeller till C kod.

Men att programmera LCD + kamera för STM32 på den mest optimala metoden är svårt. Otroligt svårt. Finns dock manual till STMF7 processorerna, men STM32F7 är onödigt dyra för kamera + LCD i ett. (Rätta mig om jag har fel).

Dessutom så kan jag tillägga att djupa neurala CNN nätverk kräver tusentals bilder. Jag har programvara för LDA + PCA där man kan få till bildigenkänning med ca 100 bilder totalt AC 4 personer(25 bilder per person). En teknik som kallas för Fisher Faces. Används inom OpenCV.

För Linuxbaserade operativsystem så kan man köra allt i Java och få det otroligt simpelt. Här kan man tillämpa allt.

Jag skulle lätt bli övertygad över att använda STM32 för kamera/LCD istället för Raspberry om någon kunde vägleda mig. Att hänvisa till ST's manualer är dock ingen idé. Dom är dåliga.
Senast redigerad av DanielM 29 juli 2020, 06:11:04, redigerad totalt 1 gång.
DanielM
Inlägg: 2192
Blev medlem: 5 september 2019, 14:19:58

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av DanielM »

Rick81 skrev: 28 juli 2020, 22:55:04 Kan tillägga att jag själv implementerat kamera och display i en STM32F1 på 72 MHz. Visserligen var det bara 320x240 pixlar. Men visst det var en del jobb få till det....

Tror nog ESP32 är mer pålitligt än Raspberry pi om man ska använda i kommersiella produkter med livslängd mer än 1 år...

320x240 pixlar är enormt ska du veta. Normalt brukar CNN nätverk vara på 28x28.

Jag tror också rent C kodande är mer pålitligt än i Raspberry. Men nu handlat det om att överträffa det som finns.

Alternativ 1:
* STM32 kamera - Vilken?
* STM32 LCD - Vilken?
* CNN nätverk

Alternativ 2:
* Raspberry Pi 4
* Valfri modell
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av Rick81 »

Jag körde mostvarande denna kameran:
https://www.electrodragon.com/product/o ... ra-module/

Kameran intieras via I2C och sedan "bitbangar" jag ut parallellbussen.

LCD koppplas via FMSC bussen (externa minnesbussen) på STM32F1. Huvudloopen blir inte värre än så här:

Kod: Markera allt

	FIFO_GPIO_Configuration();
	FIFO_CS_L();

	FIFO_WE_H();
	while( 1 != OV7725_Init() );

	OV7725_EXTI_Configuration();
	OV7725_NVIC_Configuration();

	Vsync = 0;

	LCD_Initializtion(true);
	LCD_ADC_Init();

	bool releasedJoy = false;

	while (1)
	{

		CommonLoop();
		if( Vsync == 2 )
		{
		   LCD_SetCursor(0, 0);	
		   LCD_WriteRAM_Prepare(); 
		   FIFO_RRST_L();
		   FIFO_RCLK_L();

		   FIFO_RCLK_H();
		   FIFO_RRST_H();
		   FIFO_RCLK_L();

		   FIFO_RCLK_H();

		   for( count = 0; count < 76800; count++ )
		   {

				FIFO_RCLK_L();

				CMOS_Data = (GPIOC->IDR<<8) & 0xff00;
				FIFO_RCLK_H();

				FIFO_RCLK_L();
				CMOS_Data |= (GPIOC->IDR) & 0x00ff;	
				FIFO_RCLK_H();

				LCD_WriteRAM(CMOS_Data);
		   }
		   Vsync = 0;
		   
		}
	}
}
Sen hanterar jag vsync via EXTI interupt:

Kod: Markera allt

void EXTI0_IRQHandler(void)
{
  if ( EXTI_GetITStatus(EXTI_LINE_VSYNC_CMOS) != RESET ) 
  {
     if( Vsync == 0 )
     {
        FIFO_WRST_L(); 
        FIFO_WE_H();

        Vsync = 1;
        FIFO_WE_H();
        FIFO_WRST_H();
     }
     else if( Vsync == 1 )
     {
          FIFO_WE_L();
          Vsync = 2;
     }

	 EXTI_ClearITPendingBit(EXTI_LINE_VSYNC_CMOS);
	}	
}
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av Micke_s »

AI var förvisso inte med i orginalfrågan.

Då kanske någon av Nvidias chip är lämpligare än en RPI.
davidi
Inlägg: 577
Blev medlem: 13 oktober 2011, 16:45:38
Ort: Ekerö

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av davidi »

Du ställer en till synes ganska generell fråga om något som beror på en massa faktorer. Vilka är kraven? Bygger du något som ska användas i ett enda exemplar, eller tänker du serietillverka tusentals enheter? Varför är det viktigt med en sekundsnabb boot-tid? Vad ska hända med output från kameran? Etc etc
guckrum
Inlägg: 1688
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av guckrum »

Jag är intresserad utav AI på inbyggda system. Detta har med robotik att göra, inget annat. Kan man få en radiostyrd bil eller robotar se med en kamera och identifiera vad den ser så kan man koppla ihop med Reinforcement Learning, vilket är i praktiken en hög med olika if-sataer uttryckt i linjär algebra.
Ok, så din applikation är "seende robotar". Det låter spännande. (Din definition av reinforcement learning är lite udda, faktiskt.) Vad skall roboten se? Hur fort skall det gå? Färg/svartvitt? Upplösning?
Men för att tillämpa AI på enbyggda system så måste man ha en kamera + LCD. Men inte vilken kamera och LCD som helst. Det måste vara en kamera och LCD som har en DMA fästning(interfaces). Då går det otroligt snabbt.
Hastigheten du behöver beror på vilken upplösning och framerate du har. Vad LCD har med detta att göra får du nog utveckla lite.
Dessutom så kan jag tillägga att djupa neurala CNN nätverk kräver tusentals bilder. Jag har programvara för LDA + PCA där man kan få till bildigenkänning med ca 100 bilder totalt AC 4 personer(25 bilder per person). En teknik som kallas för Fisher Faces. Används inom OpenCV.
Djupa neurala nätverk är en sak. PCA, Fisher faces osv är helt andra saker. Hänger detta ihop med det du tänker göra? Kanske skall börja med att fokusera på en sak i taget.
320x240 pixlar är enormt ska du veta. Normalt brukar CNN nätverk vara på 28x28.
Storleksordningen 320x240 är väl tänligen normalt för klassiska neuralnät för bildapplikationer. Har du funderat på beräkningstiden för ett lämpligt CNN på din målplatform? Det vore ju trist om du inte kunde processa mer än någon frame per sekund om det är "realtid" du vill ha. (Vill du det?) För hög prestanda är det nog enklare (och troligen dyrare) att använda exempelvis Nvidia Jetson, om du kan få tag på ett sådant. Men du kommer att behöva stort batteri.
DanielM
Inlägg: 2192
Blev medlem: 5 september 2019, 14:19:58

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av DanielM »

Rick81 skrev: 29 juli 2020, 08:45:43 Jag körde mostvarande denna kameran:
https://www.electrodragon.com/product/o ... ra-module/

Kameran intieras via I2C och sedan "bitbangar" jag ut parallellbussen.

LCD koppplas via FMSC bussen (externa minnesbussen) på STM32F1. Huvudloopen blir inte värre än så här:

Kod: Markera allt

	FIFO_GPIO_Configuration();
	FIFO_CS_L();

	FIFO_WE_H();
	while( 1 != OV7725_Init() );

	OV7725_EXTI_Configuration();
	OV7725_NVIC_Configuration();

	Vsync = 0;

	LCD_Initializtion(true);
	LCD_ADC_Init();

	bool releasedJoy = false;

	while (1)
	{

		CommonLoop();
		if( Vsync == 2 )
		{
		   LCD_SetCursor(0, 0);	
		   LCD_WriteRAM_Prepare(); 
		   FIFO_RRST_L();
		   FIFO_RCLK_L();

		   FIFO_RCLK_H();
		   FIFO_RRST_H();
		   FIFO_RCLK_L();

		   FIFO_RCLK_H();

		   for( count = 0; count < 76800; count++ )
		   {

				FIFO_RCLK_L();

				CMOS_Data = (GPIOC->IDR<<8) & 0xff00;
				FIFO_RCLK_H();

				FIFO_RCLK_L();
				CMOS_Data |= (GPIOC->IDR) & 0x00ff;	
				FIFO_RCLK_H();

				LCD_WriteRAM(CMOS_Data);
		   }
		   Vsync = 0;
		   
		}
	}
}
Sen hanterar jag vsync via EXTI interupt:

Kod: Markera allt

void EXTI0_IRQHandler(void)
{
  if ( EXTI_GetITStatus(EXTI_LINE_VSYNC_CMOS) != RESET ) 
  {
     if( Vsync == 0 )
     {
        FIFO_WRST_L(); 
        FIFO_WE_H();

        Vsync = 1;
        FIFO_WE_H();
        FIFO_WRST_H();
     }
     else if( Vsync == 1 )
     {
          FIFO_WE_L();
          Vsync = 2;
     }

	 EXTI_ClearITPendingBit(EXTI_LINE_VSYNC_CMOS);
	}	
}
Så denna OV kamera kopplas in på I2C endast och "bittlangar" med något protokoll?

Vad är bäst FMSC eller SPI när det kommer till LCD? Jag har en LCD med SPI. ILI9341.
DanielM
Inlägg: 2192
Blev medlem: 5 september 2019, 14:19:58

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av DanielM »

davidi skrev: 29 juli 2020, 10:53:12 Du ställer en till synes ganska generell fråga om något som beror på en massa faktorer. Vilka är kraven? Bygger du något som ska användas i ett enda exemplar, eller tänker du serietillverka tusentals enheter? Varför är det viktigt med en sekundsnabb boot-tid? Vad ska hända med output från kameran? Etc etc
Jag tänker inte masstillverka. Utan jag vill ha en proper lösning på ett problem.
DanielM
Inlägg: 2192
Blev medlem: 5 september 2019, 14:19:58

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av DanielM »

guckrum skrev: 29 juli 2020, 11:20:18 Ok, så din applikation är "seende robotar". Det låter spännande. (Din definition av reinforcement learning är lite udda, faktiskt.) Vad skall roboten se? Hur fort skall det gå? Färg/svartvitt? Upplösning
Jag har ingen specifikation än. Jag sitter bara och rabblar upp massa idéer för mig själv :)

Reinforcement learning är i praktiken "massa if-satser", fast istället för skriva if-satserna, så låter man en algoritm forma logiken (ej riktiga if-satser).
Hastigheten du behöver beror på vilken upplösning och framerate du har. Vad LCD har med detta att göra får du nog utveckla lite.
Kan man få 20 FPS per sekund? Det kanske låter lite mycket?
Djupa neurala nätverk är en sak. PCA, Fisher faces osv är helt andra saker. Hänger detta ihop med det du tänker göra? Kanske skall börja med att fokusera på en sak i taget.
Jag försöker avgöra vad är egentligen bäst. STM32-vägen eller Raspberry-vägen?
Storleksordningen 320x240 är väl tänligen normalt för klassiska neuralnät för bildapplikationer. Har du funderat på beräkningstiden för ett lämpligt CNN på din målplatform? Det vore ju trist om du inte kunde processa mer än någon frame per sekund om det är "realtid" du vill ha. (Vill du det?) För hög prestanda är det nog enklare (och troligen dyrare) att använda exempelvis Nvidia Jetson, om du kan få tag på ett sådant. Men du kommer att behöva stort batteri.
Jag har inte kommit så långt. Just nu funderar jag på vilken plattform jag ska använda mig utav.
davidi
Inlägg: 577
Blev medlem: 13 oktober 2011, 16:45:38
Ort: Ekerö

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av davidi »

DanielM skrev: 29 juli 2020, 14:13:18 Jag tänker inte masstillverka. Utan jag vill ha en proper lösning på ett problem.
Vilket problem har du identifierat?
guckrum
Inlägg: 1688
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av guckrum »

Jag har inte kommit så långt. Just nu funderar jag på vilken plattform jag ska använda mig utav.
Ett förslag är att börja modellera på en vanlig PC (med GPU för NN-accellerering, vid behov). Utveckla din algoritm där och mät prestanda och kostnad "kontinuerligt". Då får du ett bra hum om vad som kostar vad, och i slutändan vilken målplatform som kommer att fungera för din lösning.
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av Rick81 »

Så denna OV kamera kopplas in på I2C endast och "bittlangar" med något protokoll?
Jag bitbangar en parallell 8 bit databus från kameran. Protokollet är sköts via FIFO_XXX signalerna i koden.
Vad är bäst FMSC eller SPI när det kommer till LCD? Jag har en LCD med SPI. ILI9341.
FMSC/parallellt är alltid snabbare än SPI. Förenklat kan man säga att en 16 bit FMSC buss är 16 ggr snabbare än SPI på samma klockfrekvens. Lite sanning med modifikation, men inte långt ifrån.
DanielM
Inlägg: 2192
Blev medlem: 5 september 2019, 14:19:58

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av DanielM »

Okej. Hittade en manual hur man gör med just LCD. Men denna har inte touch.


Men vi kan göra en jämförelse mellan olika platformar:

STM32:
* OV2640
* 3.2" ILI3941 touch LCD
* C-programmering
* STM32 CPU = 30 kr

https://www.banggood.com/XD-95-OV2640-C ... rehouse=CN
https://www.banggood.com/3_2-Inch-ILI93 ... rehouse=CN

Raspberry:
* Pi kamera
* 3.5" touch LCD (innehåller även skal till Paj4)
* Java-programmering
* Paj pris (zero) = 60 kr

https://www.banggood.com/Camera-Module- ... mds=search
https://www.banggood.com/3_5-Inch-LCD-D ... rehouse=CN

Låt oss säga att du ska göra häftiga saker med detta. T.ex. AI-kamera eller övervakningskamera. Det ska vara bra kvalité och det skall vara en proper lösning.
Självklart är pajen dyrare, men den kanske ger bättre kvalité också?

Det finns ju inget värre än en dålig kamera som luktar Nokia 7650 :D

Då är frågan: Vilket av dessa är bäst?
När jag menar bäst så menar jag:
1. Starttid
2. Kamera kvalité
3. FPS
4. Snabbhet
5. Möjlighet till att integrera andra finesser så som eposttjänst, webserver med mera.
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Linuxbaserade processorsystem VS FreeRTOS

Inlägg av Rick81 »

Funkar verkligen den kameran till Pi Zero? Har för mig den har begränsade anslutningsmöjligheter.

Annars tror jag 2,3,4 är bättre med pi.

Sen skulle jag säga att 5 beror på vad ska ha den till
* Epost, webserver - pi
* Annan hårdvara, ex servo, mäta rotationshastigheter (din andra tråd) - stm32
Skriv svar