Android · First-person robot control
RoboCam
An Android app that turns a phone into an on-board camera and control server, so you can drive a LEGO Mindstorms EV3 — or an Arduino, Raspberry Pi or PC robot — in first person from any browser. This page collects everything published about the original on proghouse.ru, and documents RoboCam54, an independent private build that adds LEGO SPIKE Prime, a 360° camera and VR.
En Android-app som gör en telefon till kamera och styrserver ombord, så att du kan köra en LEGO Mindstorms EV3 — eller en robot byggd på Arduino, Raspberry Pi eller PC — i förstaperson från valfri webbläsare. Den här sidan samlar allt som publicerats om originalet på proghouse.ru, och dokumenterar RoboCam54, ett fristående privat bygge som lägger till LEGO SPIKE Prime, en 360°-kamera och VR.
- Platform
- Android 2.3+
- Package
- ru.proghouse.robocam
- Price
- FreeGratis
- Developer
- Alexey (ПрогХаус)
- LatestSenaste
- 1.4.5
- Status
- Original: back on Google Play. RoboCam54: closed testing on Google PlayOriginalet: tillbaka på Google Play. RoboCam54: slutet test på Google Play
OverviewÖversikt
What RoboCam isVad RoboCam är
RoboCam runs on the phone you strap to the robot. It streams that phone's camera over Wi-Fi and, at the same time, relays a driver's joystick and keyboard input from a browser back down to the robot's motors over Bluetooth. The person driving never touches the robot — they look through its camera and steer from a phone, tablet or computer on the same network.
The app began as an EV3 tool (version 1.0, September 2016) and grew over four years into a general first-person-view controller. Every capability added since — settings transfer, keyboard support, a raw Bluetooth protocol for non-LEGO robots, and an on-device joystick screen — is documented in its own section below.
- First-person driving of a two-wheeled robot, a car, or a machine with a complex drive.
- Configurable controls — up to four joysticks and any number of keyboard groups, mapped to motor ports or to EV3 mailboxes.
- Browser client — no second app to install; the driver just opens a URL.
- Observers can watch the video feed without being able to steer.
- Works beyond LEGO — Arduino, Raspberry Pi and PC robots via a documented byte protocol over Bluetooth.
RoboCam körs på telefonen du spänner fast på roboten. Den strömmar telefonens kamera över Wi-Fi och skickar samtidigt förarens styrspaks- och tangentbordsinmatning från en webbläsare vidare ner till robotens motorer via Bluetooth. Föraren rör aldrig roboten — hen ser genom dess kamera och styr från en telefon, surfplatta eller dator på samma nätverk.
Appen började som ett EV3-verktyg (version 1.0, september 2016) och växte under fyra år till en allmän förstapersonsstyrning. Varje funktion som lagts till sedan dess — överföring av inställningar, tangentbordsstöd, ett rått Bluetooth-protokoll för icke-LEGO-robotar och en styrspaksskärm på själva enheten — beskrivs i egna avsnitt nedan.
- Förstapersonskörning av en tvåhjulig robot, en bil eller en maskin med komplex drivning.
- Konfigurerbara reglage — upp till fyra styrspakar och valfritt antal tangentbordsgrupper, kopplade till motorportar eller till EV3-brevlådor.
- Webbläsarklient — ingen andra app att installera; föraren öppnar bara en URL.
- Åskådare kan se videoströmmen utan att kunna styra.
- Fungerar bortom LEGO — robotar med Arduino, Raspberry Pi och PC via ett dokumenterat byteprotokoll över Bluetooth.
ArchitectureArkitektur
How it worksSå fungerar det
- Phone 1 carries the app, rides on the robot with its camera facing forward, and pairs with the robot over Bluetooth. Motor commands go out; sensor data comes back.
- Phone 2 (or a tablet or computer) connects to Phone 1 over Wi-Fi. Both must be on the same router. Joystick coordinates travel one way; the camera stream travels the other.
- When you touch joysticks A and B in the browser, Phone 2 sends the touch coordinates to Phone 1, which converts them into motor commands according to the robot's settings.
- No router nearby? Turn on Phone 1's Wi-Fi hotspot and connect Phone 2 to it directly — see Connecting without a router.
- Telefon 1 har appen, sitter på roboten med kameran riktad framåt och parkopplas med roboten via Bluetooth. Motorkommandon skickas ut; sensordata kommer tillbaka.
- Telefon 2 (eller en surfplatta eller dator) ansluter till telefon 1 via Wi-Fi. Båda måste vara på samma router. Styrspakskoordinater går åt ena hållet; kameraströmmen åt andra.
- När du rör vid styrspakarna A och B i webbläsaren skickar telefon 2 beröringskoordinaterna till telefon 1, som omvandlar dem till motorkommandon enligt robotens inställningar.
- Ingen router i närheten? Slå på telefon 1:s surfzon och anslut telefon 2 direkt till den — se Anslutning utan router.
Before you startInnan du börjar
RequirementsKrav
Android phone with RoboCamAndroid-telefon med RoboCam
Android 2.3 or newer. At least one built-in camera, plus Bluetooth and Wi-Fi. A robot you can mount the phone on with the camera pointing forward.
Android 2.3 eller senare. Minst en inbyggd kamera, samt Bluetooth och Wi-Fi. En robot där du kan montera telefonen med kameran riktad framåt.
A device with a modern browserEn enhet med modern webbläsare
HTML5 support — recent Chrome, Yandex Browser, Firefox or Opera, tested on Android. A touchscreen (ideally 2-point) and Wi-Fi. Any OS works in principle; full testing was Android only.
HTML5-stöd — senaste Chrome, Yandex Browser, Firefox eller Opera, testat på Android. Pekskärm (helst 2-punkts) och Wi-Fi. Vilket OS som helst fungerar i princip; full testning gjordes endast på Android.
For an EV3 robot you also need the LEGO Mindstorms EV3 set itself. The tutorials use the EV3 Explorer, a simple driving robot with a phone frame that tilts up and down; a build guide PDF is in Downloads.
För en EV3-robot behöver du även själva LEGO Mindstorms EV3-setet. Handledningarna använder EV3 Explorer (Исследователь EV3), en enkel körrobot med en telefonram som lutar upp och ner; en bygganvisning i PDF finns under Nedladdningar.
Getting the appSkaffa appen
Install & downloadInstallera & ladda ner
The app is published free on Google Play as ru.proghouse.robocam. It was briefly delisted during 2025 but is available on Google Play again. Ways to get it:
- Google Play — the official listing: play.google.com/store/apps/details?id=ru.proghouse.robocam.
- The author's own builds — the author also offered two APKs on the original site, hosted here as release 1.4.5: RoboCam — regular version (the normal build for current phones, 2.6 MB) and RoboCam with RenderScript (an alternative for some older phones where the regular version has trouble, 4.8 MB).
- APKPure — a third-party mirror of the Play Store release: apkpure.com/robocam/ru.proghouse.robocam. A single build; useful if the other links are down.
On first launch, Android 6 and up asks for camera permission — grant it, the camera is required. Settings export/import later asks for storage permission the same way.
Appen finns gratis på Google Play som ru.proghouse.robocam. Den togs tillfälligt bort under 2025 men är tillbaka på Google Play. Sätt att skaffa den:
- Google Play — den officiella sidan: play.google.com/store/apps/details?id=ru.proghouse.robocam.
- Upphovspersonens egna versioner — upphovspersonen erbjöd även två APK-filer på originalsidan, här som utgåva 1.4.5: RoboCam — vanlig version (den normala versionen för dagens telefoner, 2,6 MB) och RoboCam med RenderScript (ett alternativ för vissa äldre telefoner där den vanliga versionen krånglar, 4,8 MB).
- APKPure — en tredjepartsspegling av Play Store-utgåvan: apkpure.com/robocam/ru.proghouse.robocam. En enda version; användbar om övriga länkar ligger nere.
Vid första start ber Android 6 och senare om kameratillstånd — ge det, kameran krävs. Export/import av inställningar ber senare om lagringstillstånd på samma sätt.
First runFörsta körningen
The main screenHuvudskärmen
Behind a live camera preview sit three round buttons. Each one is also a status indicator — a white background means "off / not connected".
Bakom en live-kameraförhandsvisning sitter tre runda knappar. Var och en är också en statusindikator — vit bakgrund betyder "av / ej ansluten".
Server
Starts and stops the RoboCam server that browser clients connect to. Blinks while initialising, turns green when running.
Startar och stoppar RoboCam-servern som webbläsarklienter ansluter till. Blinkar under initiering, blir grön när den körs.
Connect to EV3
Connects to / disconnects from the robot over Bluetooth. The hint below shows the connection state and the name of the current robot settings.
Ansluter till / kopplar från roboten via Bluetooth. Tipsraden under visar anslutningsläget och namnet på de aktuella robotinställningarna.
Settings
Opens RoboCam's settings, split into Server and Robot.
Öppnar RoboCams inställningar, uppdelade i Server och Robot.
After a fresh install the robot settings default to EV3 Explorer, so if you build that model you can drive it with no configuration at all.
Efter en ny installation står robotinställningarna på EV3 Explorer, så bygger du den modellen kan du köra den helt utan konfiguration.
WalkthroughGenomgång
Start the server and connect a clientStarta servern och anslut en klient
Server and robot can be brought up in either order.
Server och robot kan startas i valfri ordning.
- Tap the Server button on Phone 1. It blinks (“Initialising RoboCam server…”), then turns green (“RoboCam server is running”).
- Connect Phone 1 to your Wi-Fi router. The hint now shows a connection address such as
http://192.168.1.153:8088(port 8088). - On Phone 2, on the same router, open a supported browser and go to that address.
- Log in. Defaults: username
admin, password123. - The camera view from Phone 1 loads. Rotate Phone 1 to landscape and the client follows automatically (unless Phone 1 is locked).
- Tap the fullscreen icon (top-right of the page) to hide browser chrome and enlarge the feed.
- Tap Connect to EV3. Allow Bluetooth if prompted, then pick your robot from the paired-devices list. Joysticks appear on the client and you can drive.
The hand icon (top-right of the client) swaps the two joysticks left-to-right, to switch quickly between a left- and right-handed layout.
Shutting down
When you finish, stop the server (green button) and disconnect the EV3 (purple button), in either order. Motors stop or return to their start position depending on settings.
- Tryck på Server-knappen på telefon 1. Den blinkar (”Initierar RoboCam-server…”) och blir sedan grön (”RoboCam-servern körs”).
- Anslut telefon 1 till din Wi-Fi-router. Tipsraden visar nu en anslutningsadress som
http://192.168.1.153:8088(port 8088). - På telefon 2, på samma router, öppna en stödd webbläsare och gå till den adressen.
- Logga in. Standard: användarnamn
admin, lösenord123. - Kameravyn från telefon 1 laddas. Vrid telefon 1 till liggande läge så följer klienten med automatiskt (om inte telefon 1 är låst).
- Tryck på helskärmsikonen (uppe till höger på sidan) för att dölja webbläsarens gränssnitt och förstora bilden.
- Tryck på Anslut till EV3. Tillåt Bluetooth om du blir tillfrågad och välj sedan din robot i listan över parkopplade enheter. Styrspakar dyker upp i klienten och du kan köra.
Handikonen (uppe till höger i klienten) byter plats på de två styrspakarna i sidled, för att snabbt växla mellan vänster- och högerhänt layout.
Avstängning
När du är klar, stoppa servern (gröna knappen) och koppla från EV3 (lila knappen), i valfri ordning. Motorerna stannar eller återgår till startläget beroende på inställningarna.
ConfigurationKonfiguration
Server settingsServerinställningar
Settings → Server. Two groups: camera and security. Saving server settings may drop connected clients, who then reconnect.
Inställningar → Server. Två grupper: kamera och säkerhet. Att spara serverinställningar kan koppla bort anslutna klienter, som sedan återansluter.
Camera (front or back), image size and JPEG quality. Smaller size and lower JPEG quality (40% or less) mean smoother, faster video but a coarser picture; higher quality (90%+) means a better picture but slower streaming. Tune for your link.
Kamera (fram eller bak), bildstorlek och JPEG-kvalitet. Mindre storlek och lägre JPEG-kvalitet (40 % eller lägre) ger jämnare, snabbare video men grövre bild; högre kvalitet (90 %+) ger bättre bild men långsammare strömning. Justera efter din anslutning.
Driver name and password (default admin / 123). Observers are on by default — they see the video but cannot steer (default guest / 123). Untick “Allow observers” to disable them.
Förare: namn och lösenord (standard admin / 123). Åskådare är på som standard — de ser videon men kan inte styra (standard guest / 123). Avmarkera ”Tillåt åskådare” för att stänga av dem.
ConfigurationKonfiguration
Robot settings — joysticksRobotinställningar — styrspakar
Settings → Robot holds one profile per robot. Add / Delete at the top; the current profile shows just below and its name also appears under the centre button on the main screen. Each profile starts with a name and description (both shown in the list), then joystick and key-group settings.
Inställningar → Robot innehåller en profil per robot. Lägg till / Ta bort högst upp; den aktuella profilen visas strax under och dess namn syns även under mittknappen på huvudskärmen. Varje profil börjar med namn och beskrivning (båda visas i listan), sedan inställningar för styrspakar och tangentgrupper.
Four joysticks, two pairsFyra styrspakar, två par
You can configure up to four joysticks, but the client only ever shows one pair at a time — 1–2 or 3–4. Enabling both pairs adds a switch button on the client. Each joystick has its own Visibility tickbox.
Du kan konfigurera upp till fyra styrspakar, men klienten visar alltid bara ett par åt gången — 1–2 eller 3–4. Aktiverar du båda paren läggs en växlingsknapp till i klienten. Varje styrspak har en egen Synlighet-ruta.
ShapeForm
| ShapeForm | BehaviourBeteende |
|---|---|
| VerticalVertikal | Reads only touch height: −100 at the bottom to 100 at the top, 0 in the middle. Horizontal position ignored.Läser bara beröringshöjd: −100 längst ner till 100 längst upp, 0 i mitten. Horisontellt läge ignoreras. |
| HorizontalHorisontell | Same, sideways: −100 at the far left to 100 at the far right, 0 centre.Samma, i sidled: −100 längst till vänster till 100 längst till höger, 0 i mitten. |
| Round · SquareRund · Fyrkantig | Both axes, each −100 to 100, 0 centre. On the round one, touches outside the circle are clamped to the circle's edge along the line to the centre.Båda axlarna, var och en −100 till 100, 0 i mitten. På den runda begränsas beröringar utanför cirkeln till cirkelns kant längs linjen mot mitten. |
| Arrows · Vertical arrows · Horizontal arrowsPilar · Vertikala pilar · Horisontella pilar | Not position-sensitive — only which arrow is touched. Up = vertical 100 / horizontal 0; Down = −100 / 0; Left = 0 / −100; Right = 0 / 100.Inte lägeskänsliga — bara vilken pil som berörs. Upp = vertikal 100 / horisontell 0; Ner = −100 / 0; Vänster = 0 / −100; Höger = 0 / 100. |
TypeTyp
Independent motorsOberoende motorer
Horizontal and vertical touch coordinates drive separate motors, independently. Good for a car where one motor steers and another drives.
Horisontella och vertikala beröringskoordinater driver separata motorer, oberoende av varandra. Bra för en bil där en motor styr och en annan driver.
Steering 1Styrning 1
Two independent drive wheels, driven like a car — no turning on the spot. Closer to vertical centre = lower speed.
Två oberoende drivhjul, körs som en bil — kan inte snurra på stället. Närmare vertikal mitt = lägre fart.
Steering 2Styrning 2
Same two-wheel drive, but the robot can spin on the spot.
Samma tvåhjulsdrift, men roboten kan snurra på stället.
MailboxBrevlåda
Just forwards the raw touch coordinates into EV3 mailboxes. Write your own EV3 program to turn them into motion — this is how you build custom control laws (e.g. a Gyro Boy).
Skickar bara vidare de råa beröringskoordinaterna till EV3-brevlådor. Skriv ett eget EV3-program som gör dem till rörelse — så bygger du egna styrlagar (t.ex. en Gyro Boy).
x, y · Joystick 2 → w, z · Joystick 3 → a, b · Joystick 4 → c, d
Styrspak 1 → x, y · Styrspak 2 → w, z · Styrspak 3 → a, b · Styrspak 4 → c, d
Touch-end behaviourBeteende när beröringen slutar
Set separately for the horizontal and vertical axes (all shapes except arrows): Return to zero — the robot stops when you let go (the usual choice); or Hold position — the last coordinate is kept, used e.g. for the EV3 Explorer's tilting phone frame.
Ställs in separat för horisontell och vertikal axel (alla former utom pilar): Återgå till noll — roboten stannar när du släpper (det vanliga valet); eller Behåll läget — den sista koordinaten behålls, används t.ex. för EV3 Explorers lutande telefonram.
Port settingsPortinställningar
For Independent motors, Steering 1 and Steering 2, each joystick has an unlimited list of ports. Add / Delete as needed.
För Oberoende motorer, Styrning 1 och Styrning 2 har varje styrspak en obegränsad lista av portar. Lägg till / ta bort efter behov.
| SettingInställning | MeaningBetydelse |
|---|---|
| Joystick axisStyrspaksaxel | Independent motors only. Horizontal or Vertical — which axis moves this motor.Endast oberoende motorer. Horisontell eller Vertikal — vilken axel som rör denna motor. |
| MotorMotor | Steering 1 / 2 only. Left or Right.Endast styrning 1 / 2. Vänster eller höger. |
| EV3 brickEV3-enhet | 1–4, for daisy-chained bricks. Use 1 for a single brick.1–4, för sammankopplade enheter. Använd 1 för en enda enhet. |
| Port numberPortnummer | A – D |
| Changed valueÄndrat värde | Independent motors only. Motor power — farther from centre = faster. Motor angle — farther from centre = larger turn angle; speed is then set by the Power field (higher = snappier, holds the angle better).Endast oberoende motorer. Motoreffekt — längre från mitten = snabbare. Motorvinkel — längre från mitten = större vridvinkel; farten sätts då av fältet Effekt (högre = snabbare respons, håller vinkeln bättre). |
| InvertInvertera | Flips the computed power or angle.Vänder den beräknade effekten eller vinkeln. |
| CoefficientKoefficient | Scales the computed value up or down.Skalar det beräknade värdet upp eller ner. |
| BrakeBromsa | On: motors stop hard. Off: they coast to a stop.På: motorerna stannar tvärt. Av: de rullar ut till stopp. |
Version 1.2Version 1.2
Keyboard controlTangentbordsstyrning
From 1.2 the client accepts a physical keyboard, so you can drive an EV3 in first person from a desktop or laptop. The client watches the keys named in the settings; when one is pressed or released, its code and new state go to the app, which either drives motors directly or forwards the codes into EV3 mailboxes.
Från 1.2 tar klienten emot ett fysiskt tangentbord, så du kan köra en EV3 i förstaperson från en stationär eller bärbar dator. Klienten bevakar tangenterna som anges i inställningarna; när en trycks ner eller släpps skickas dess kod och nya tillstånd till appen, som antingen driver motorer direkt eller skickar koderna vidare till EV3-brevlådor.
Two profile-wide optionsTvå profilövergripande val
- Show debug info — the client displays joystick coordinates as you use them and the codes of pressed keys.Visa felsökningsinfo — klienten visar styrspakskoordinater medan du använder dem och koderna för nedtryckta tangenter.
- Hide joysticks when the keyboard is used — joysticks vanish on the first keypress and return when you click the screen.Dölj styrspakar när tangentbordet används — styrspakarna försvinner vid första tangenttryckningen och återkommer när du klickar på skärmen.
Key groupsTangentgrupper
Keys are organised into an unlimited number of key groups, scrolled to near the bottom of the robot profile. Each group has an Active tickbox and a Type: Independent motors, Steering, or Mailbox — the same meanings as for joysticks. In the EV3 Explorer profile there are usually two groups: one to steer (W A S D + arrows), one for the phone frame (Y and H).
Tangenter organiseras i ett obegränsat antal tangentgrupper, en bit ner i robotprofilen. Varje grupp har en Aktiv-ruta och en Typ: Oberoende motorer, Styrning eller Brevlåda — samma betydelser som för styrspakar. I EV3 Explorer-profilen finns normalt två grupper: en för att styra (W A S D + pilar), en för telefonramen (Y och H).
Stepped speed & angleStegvis fart & vinkel
A key is only ever on or off, so an abrupt jump to full power can fling the phone off its frame or over-steer. Six fields smooth this out, separately for the horizontal-axis and vertical-axis keys: Increase / Decrease (horizontal), Increase / Decrease (vertical), and a pause between steps for each axis.
En tangent är bara på eller av, så ett tvärt hopp till full effekt kan slänga av telefonen från ramen eller översväng. Sex fält jämnar ut detta, separat för tangenterna på horisontell och vertikal axel: Öka / Minska (horisontell), Öka / Minska (vertikal), och en paus mellan steg för varje axel.
- Step values 0–200. 0 or 200 means an instant change, not a ramp.Stegvärden 0–200. 0 eller 200 innebär omedelbar ändring, ingen ramp.
- Pause is in milliseconds, minimum 100. Real pauses can be longer — EV3 command delays add up.Pausen anges i millisekunder, minst 100. Verkliga pauser kan bli längre — EV3-kommandofördröjningar tillkommer.
- Example: increase 15, decrease 50, pause 100 ms → hold
Wand speed rises 15 units every 100 ms to 100; release and it falls 50 units every 100 ms to 0. Gentle start, firmer stop.Exempel: öka 15, minska 50, paus 100 ms → hållWoch farten stiger 15 enheter var 100:e ms till 100; släpp och den faller 50 enheter var 100:e ms till 0. Mjuk start, bestämdare stopp.
Assign keys with the four buttons Keys up / left / down / right (each opens a picker; you can also press a physical key to select it). Group ports are configured just like joystick ports.
Tilldela tangenter med de fyra knapparna Tangenter upp / vänster / ner / höger (var och en öppnar en väljare; du kan också trycka på en fysisk tangent för att välja den). Grupportar konfigureras precis som styrspaksportar.
Mailbox key groupsBrevlådetangentgrupper
A Mailbox group has only a mailbox name and a Keys list. Only the listed keys are sent. The EV3 mailbox block cannot receive an array, so only the last pressed key code arrives, or 0 when it is released — for independent handling of several keys, make one mailbox per key.
En Brevlåde-grupp har bara ett brevlådenamn och en Tangenter-lista. Endast de listade tangenterna skickas. EV3:s brevlådeblock kan inte ta emot en array, så bara koden för den senast nedtryckta tangenten kommer fram, eller 0 när den släpps — för oberoende hantering av flera tangenter, gör en brevlåda per tangent.
Version 1.2Version 1.2
Auto-run a program on the EV3Autostarta ett program på EV3
If your robot needs a custom EV3 program running while RoboCam is connected (to read mailboxes and drive motors, say), tick Run program and enter the full path, e.g. ../prjs/MyProject/MyProgram.rbf. Programs sent from the LEGO MINDSTORMS EV3 software land in ../prjs/<ProjectName>/<ProgramName>.rbf.
Om din robot behöver ett eget EV3-program igång medan RoboCam är anslutet (för att läsa brevlådor och driva motorer, t.ex.), markera Kör program och ange den fullständiga sökvägen, t.ex. ../prjs/MyProject/MyProgram.rbf. Program som skickas från LEGO MINDSTORMS EV3-programvaran hamnar i ../prjs/<Projektnamn>/<Programnamn>.rbf.
- The program starts the moment RoboCam connects, and restarts whenever the driver client disconnects.Programmet startar i samma stund RoboCam ansluter och startar om varje gång förarklienten kopplar från.
- The path is case-sensitive; one wrong character and nothing runs.Sökvägen är skiftlägeskänslig; ett fel tecken och inget körs.
- If another user program is already running when RoboCam connects, the configured program does not start.Om ett annat användarprogram redan körs när RoboCam ansluter startar inte det konfigurerade programmet.
ReferenceReferens
Key code tableTabell över tangentkoder
Codes mostly follow ASCII / JavaScript key codes. Browser hot-keys (F1 help, F5 reload, etc.) are unavailable inside RoboCam and are omitted here. These are the codes RoboCam can use:
Koderna följer i huvudsak ASCII / JavaScript-tangentkoder. Webbläsarens snabbtangenter (F1 hjälp, F5 uppdatera, osv.) är inte tillgängliga i RoboCam och utelämnas här. Detta är koderna RoboCam kan använda:
Version 1.1Version 1.1
Import, export, copy and send settingsImportera, exportera, kopiera och skicka inställningar
Every robot profile can be moved between phones or shared. Open the profile, tap the three-dot menu (top-right), and pick an action. On Android 6+ you grant shared-storage permission once.
Varje robotprofil kan flyttas mellan telefoner eller delas. Öppna profilen, tryck på trepunktsmenyn (uppe till höger) och välj en åtgärd. På Android 6+ ger du lagringstillstånd en gång.
Export to fileExportera till fil
Writes the profile to the Downloads folder (e.g. /storage/emulated/0/Download) as RoboCam<name><date>.xml. Repeat exports get a 2, 3… suffix rather than overwriting.
Skriver profilen till Nedladdningar-mappen (t.ex. /storage/emulated/0/Download) som RoboCam<namn><datum>.xml. Upprepade exporter får suffixet 2, 3… i stället för att skriva över.
SendSkicka
Shares the XML over Bluetooth, email, etc. — only apps that can send an XML file appear. The file is staged in /storage/emulated/0/.robocam and overwritten each time, so wait for one send to finish before changing settings and sending again.
Delar XML-filen via Bluetooth, e-post, osv. — bara appar som kan skicka en XML-fil visas. Filen mellanlagras i /storage/emulated/0/.robocam och skrivs över varje gång, så vänta tills en sändning är klar innan du ändrar inställningar och skickar igen.
Make a copyGör en kopia
Duplicates the profile in place — a base for a new robot built on existing settings.
Duplicerar profilen på plats — en grund för en ny robot byggd på befintliga inställningar.
Import from fileImportera från fil
From the robot list, three-dot menu → Import from file, then browse to the XML. Imported profiles get a 2 (then 3…) appended to the name.
Från robotlistan, trepunktsmeny → Importera från fil, bläddra sedan till XML-filen. Importerade profiler får 2 (sedan 3…) tillagt i namnet.
Version 1.3.1Version 1.3.1
Non-standard robots — the Bluetooth protocolIcke-standardrobotar — Bluetooth-protokollet
From 1.3.1 RoboCam can also talk to any robot that can work directly with Bluetooth data — Arduino, Raspberry Pi, a PC — running any firmware or OS, in any language. Everything built for EV3 is unchanged; this adds a driver and settings for “non-standard” robots. RoboCam is the master: it sends command messages, your program replies.
Från 1.3.1 kan RoboCam också prata med vilken robot som helst som kan arbeta direkt med Bluetooth-data — Arduino, Raspberry Pi, en PC — med valfri firmware eller OS, i valfritt språk. Allt som byggts för EV3 är oförändrat; detta lägger till en drivrutin och inställningar för ”icke-standard”-robotar. RoboCam är master: den skickar kommandomeddelanden, ditt program svarar.
Message framingMeddelanderamning
- Each message is preceded by two bytes giving the payload size (little-endian, unsigned). Those two bytes are not counted in the size.
- Read the two size bytes, then read exactly that many more bytes.
- Reply to every command within one second. A later reply is treated as an error.
- First payload byte of a command = the command code. First payload byte of a reply = the result:
0success,1error / unsupported.
- Varje meddelande föregås av två byte som anger nyttolastens storlek (little-endian, teckenlös). Dessa två byte räknas inte in i storleken.
- Läs de två storleksbyten, läs sedan exakt så många byte till.
- Svara på varje kommando inom en sekund. Ett senare svar behandlas som ett fel.
- Kommandots första nyttolastbyte = kommandokoden. Svarets första nyttolastbyte = resultatet:
0lyckat,1fel / stöds ej.
CommandsKommandon
| # | NameNamn | PurposeSyfte |
|---|---|---|
| 0 | CMD_START | Handshake. Command bytes SS C T V: T is a check byte (0–254), V is RoboCam's max protocol version (currently 1). Reply SS R T V C: return T+1, protocol version 1, and encoding C — 0 US-ASCII or 1 UTF-8 (Arduino uses US-ASCII). Wrong reply or timeout → RoboCam aborts. Reply must be 4 bytes.Handskakning. Kommandobyte SS C T V: T är en kontrollbyte (0–254), V är RoboCams högsta protokollversion (för närvarande 1). Svar SS R T V C: returnera T+1, protokollversion 1, och kodning C — 0 US-ASCII eller 1 UTF-8 (Arduino använder US-ASCII). Fel svar eller timeout → RoboCam avbryter. Svaret måste vara 4 byte. |
| 1 | CMD_CALLSIGN | Only sent if a callsign and answer are set in the profile. Command carries the callsign as a null-terminated string; reply with the configured answer string (result byte first). A wrong answer → RoboCam disconnects.Skickas bara om anropssignal och svar är angivna i profilen. Kommandot bär anropssignalen som en null-avslutad sträng; svara med den konfigurerade svarssträngen (resultatbyte först). Fel svar → RoboCam kopplar från. |
| 2 | CMD_CTRL | Controller change. Payload is one or more J V pairs. J: 0=X, 1=Y (joystick 1), 2=W, 3=Z (js 2), 4=A, 5=B (js 3), 6=C, 7=D (js 4), 255=key pressed, 254=key released. V: for an axis, the coordinate −100…100; for a key, the key code. Reply is a single result byte (ignored, but expected — return 0).Reglageändring. Nyttolasten är ett eller flera J V-par. J: 0=X, 1=Y (styrspak 1), 2=W, 3=Z (sp 2), 4=A, 5=B (sp 3), 6=C, 7=D (sp 4), 255=tangent nedtryckt, 254=tangent släppt. V: för en axel, koordinaten −100…100; för en tangent, tangentkoden. Svaret är en enda resultatbyte (ignoreras, men förväntas — returnera 0). |
| 3 | CMD_TEST | Keepalive, roughly once a second. Reply within one second with result 0, or RoboCam considers the link lost.Anslutningskontroll, ungefär en gång per sekund. Svara inom en sekund med resultat 0, annars anser RoboCam att förbindelsen är förlorad. |
| 255 | CMD_STOP | Stop and recentre. Sent when the client link drops or the driver disconnects. Halt movement, return servos to their start position. Reply result 0 (ignored, expected).Stanna och återcentrera. Skickas när klientförbindelsen bryts eller föraren kopplar från. Stoppa rörelsen, återför servon till startläget. Svara med resultat 0 (ignoreras, förväntas). |
Worked example (octal / hex bytes)Genomarbetat exempel (oktala / hex-byte)
CMD_START command 0300 00 D1 01
reply 0400 00 D2 01 00 ; T+1 = D2, version 1, encoding 0 (US-ASCII)
CMD_CALLSIGN command 0900 01 526F626F43616D00 ; "RoboCam\0"
reply 0C00 00 5265736561726368657200 ; "Researcher\0"
CMD_CTRL command 0600 02 00 5A 01 9C FF 59
; X = 90, Y = -100, key 89 (Y) pressed
reply 0100 00
CMD_TEST command 0100 03 reply 0100 00
CMD_STOP command 0100 FF reply 0100 00
Arduino wiringArduino-koppling
Examples target an Arduino Uno + HC-06 at default settings (9600 baud). Cross-wire: module RX → Uno TX, module TX → Uno RX. Then Serial.begin(9600) and read/write with Serial.read(), Serial.write(), Serial.available(). Read the size as Serial.read() + (Serial.read() << 8); send it as two bytes replySize & 0xFF then (replySize >> 8) & 0xFF, followed by the payload. Reply fast — slow replies mean a laggy robot.
Exemplen riktar sig mot en Arduino Uno + HC-06 med standardinställningar (9600 baud). Korskoppla: modulens RX → Unos TX, modulens TX → Unos RX. Sedan Serial.begin(9600) och läs/skriv med Serial.read(), Serial.write(), Serial.available(). Läs storleken som Serial.read() + (Serial.read() << 8); skicka den som två byte replySize & 0xFF sedan (replySize >> 8) & 0xFF, följt av nyttolasten. Svara snabbt — långsamma svar ger en trög robot.
Non-standard robot settingsInställningar för icke-standardrobot
Settings → Robot → Add → Non-standard robot. Fewer options than an EV3 profile: name, description, Show debug info, Hide joysticks when keyboard is used, callsign + answer, then the four joysticks (visibility, shape, touch-end behaviour per axis) and a Keys list with an Active tickbox. No ports — motor logic lives in your program.
Inställningar → Robot → Lägg till → Icke-standardrobot. Färre val än en EV3-profil: namn, beskrivning, Visa felsökningsinfo, Dölj styrspakar när tangentbordet används, anropssignal + svar, sedan de fyra styrspakarna (synlighet, form, beteende när beröringen slutar per axel) och en Tangenter-lista med en Aktiv-ruta. Inga portar — motorlogiken bor i ditt program.
CMD_START arrived, or the reply was not 4 bytes.
”Det går inte att verifiera enheten. Är detta verkligen en robot?” betyder att inget svar på CMD_START kom fram, eller att svaret inte var 4 byte.
Version 1.4.2Version 1.4.2
Local controls — the phone as a plain remoteLokala reglage — telefonen som en vanlig fjärrkontroll
Sometimes you don't need first-person view at all — you just want the phone to be the remote. Version 1.4.2 adds local controls; they are off by default and everything else is unchanged.
Ibland behöver du ingen förstapersonsvy alls — du vill bara att telefonen ska vara fjärrkontrollen. Version 1.4.2 lägger till lokala reglage; de är av som standard och allt annat är oförändrat.
- In Server settings, tick Use local controls. All other server settings disappear. Save.I Server-inställningarna, markera Använd lokala reglage. Alla andra serverinställningar försvinner. Spara.
- Back on the main screen, the left button now shows a joystick and the camera is off.Tillbaka på huvudskärmen visar vänsterknappen nu en styrspak och kameran är av.
- Tap Connect to EV3, then the left button to open the on-device joystick screen — the same joysticks as in the browser.Tryck på Anslut till EV3, sedan vänsterknappen för att öppna styrspaksskärmen på enheten — samma styrspakar som i webbläsaren.
- On a small screen, also tick Maximise joysticks in Server settings to enlarge them.På en liten skärm, markera även Maximera styrspakar i serverinställningarna för att förstora dem.
A keyboard attached to the phone works here too — but only while the RoboCam app is in the foreground and the phone is unlocked.
Ett tangentbord anslutet till telefonen fungerar även här — men bara medan RoboCam-appen är i förgrunden och telefonen är olåst.
TricksKnep
Connecting without a routerAnslutning utan router
Phone 1's hotspotTelefon 1:s surfzon
Turn on the Wi-Fi hotspot on Phone 1 (in Android's network settings). Phone 1 becomes the router; connect Phone 2 to it. The server address is in the button hint — for a hotspot it is almost always http://192.168.43.1:8088.
Slå på Wi-Fi-surfzonen på telefon 1 (i Androids nätverksinställningar). Telefon 1 blir routern; anslut telefon 2 till den. Serveradressen står i knapptipset — för en surfzon är den nästan alltid http://192.168.43.1:8088.
Phone 1 as its own clientTelefon 1 som sin egen klient
Start the server and connect to the robot on Phone 1, then open a browser on the same phone at http://localhost:8088 and log in as the driver. You get joysticks and can drive — but no camera feed. Wi-Fi can be off.
Starta servern och anslut till roboten på telefon 1, öppna sedan en webbläsare på samma telefon på http://localhost:8088 och logga in som förare. Du får styrspakar och kan köra — men ingen kamerabild. Wi-Fi kan vara av.
DownloadsNedladdningar
Ready-made settings & filesFärdiga inställningar & filer
Originally published on proghouse.ru's download component and hosted here. Import the XML profiles as described above.
Publicerades ursprungligen på proghouse.rus nedladdningskomponent och finns här. Importera XML-profilerna enligt beskrivningen ovan.
TimelineTidslinje
Version historyVersionshistorik
-
1.02016-09-21
First release. First-person control of a LEGO Mindstorms EV3: server + browser client, up to four joysticks in two pairs, joystick shapes and types, port mapping, EV3 mailboxes, observers, router-less hotspot mode, phone-as-own-client.
Första utgåvan. Förstapersonsstyrning av en LEGO Mindstorms EV3: server + webbläsarklient, upp till fyra styrspakar i två par, styrspaksformer och -typer, portmappning, EV3-brevlådor, åskådare, routerfritt surfzonläge, telefon-som-egen-klient.
-
1.1
Import, export, copy and send robot profiles (XML). Ready-made profiles published for the F1 racer, claw robot and Selenokhod.
Importera, exportera, kopiera och skicka robotprofiler (XML). Färdiga profiler publicerade för F1-racern, klorobotten och Selenokhod.
-
1.2
Physical keyboard support on the client. Key groups with stepped speed/angle ramps. Auto-run a user program on the EV3 by path. “Show debug info” and “Hide joysticks when keyboard is used”.
Stöd för fysiskt tangentbord i klienten. Tangentgrupper med stegvisa fart-/vinkelramper. Autostarta ett användarprogram på EV3 via sökväg. ”Visa felsökningsinfo” och ”Dölj styrspakar när tangentbordet används”.
-
1.3.12017-09
Support for non-standard robots (Arduino, Raspberry Pi, PC) via a documented byte protocol over Bluetooth. New “Non-standard robot” profile type. Arduino Explorer example (sketch, settings, 3D-printed parts).
Stöd för icke-standardrobotar (Arduino, Raspberry Pi, PC) via ett dokumenterat byteprotokoll över Bluetooth. Ny profiltyp ”Icke-standardrobot”. Exemplet Arduino Explorer (skiss, inställningar, 3D-utskrivna delar).
-
1.4.2
Local controls — an on-device joystick screen that turns the phone into a plain remote, with an optional “Maximise joysticks” mode. Camera off in this mode.
Lokala reglage — en styrspaksskärm på enheten som gör telefonen till en vanlig fjärrkontroll, med ett valfritt ”Maximera styrspakar”-läge. Kameran av i detta läge.
-
1.4.5
Latest known version (referenced in the app's support comments). No public changelog article.
Senaste kända version (nämnd i appens supportkommentarer). Ingen offentlig ändringsloggsartikel.
Part II · The independent buildDet fristående bygget
RoboCam54 — an independent reimplementationRoboCam54 — en fristående omskrivning
RoboCam54 is a from-scratch, independent Android version of RoboCam by M.Sc. Magnus (Sweden), written in Kotlin with Claude Code. Alexey's app was never open-sourced and its code was never shared, so RoboCam54 was rebuilt by studying the original's behaviour, its decompiled browser client, and the public LEGO / EV3 protocol documentation. Alexey has confirmed he is fine with this page covering the developed app.
The source code is private and is not being released — this section documents what the app does, not how to obtain or build it. Package com.robocam.robocam54, version name 1.0 (versionCode 3).
What carries over unchanged
The server + browser-client model, up to four joysticks in two pairs, every joystick shape and type, key groups with stepped ramps, EV3 mailboxes, import / export / copy / send of XML profiles, local controls, spectators, the login (admin / 123, guest / 123) and port 8088.
What is different from Alexey's app
- Android 7.0 (API 24)+, targeting Android 16 (API 36) — versus Android 2.3 for the original. Runtime Bluetooth permissions, camera + data-sync foreground-service types.
- Three robot profile types: EV3 (Bluetooth Classic / RFCOMM, unchanged), SPIKE Prime (new, Bluetooth LE), and Custom.
- The Custom type is this fork's take on “non-standard robots”. Instead of the original's binary
CMD_START…CMD_STOPframing it sends one plain-text line per change —callsign,x0,y0,x1,y1\r\n(the two joystick axis pairs as integers) — over Bluetooth serial, so an Arduino sketch can parse it as CSV. A bundled “Custom Researcher” starter profile is provided. - New: the Huawei 360 camera + 360° viewer, the Cardboard VR viewer, and the Clear Cache button (all below).
- The proghouse.ru ad banner is gone from the home screen; all twelve function keys F1–F12 are selectable; the video stream and on-device preview rotate to follow the phone.
- Has a published privacy policy and Play release signing. Collects nothing — no account, analytics, ads or crash reporting.
RoboCam54 är en Android-version av RoboCam byggd från grunden av teknologie magister Magnus (Sverige), skriven i Kotlin med Claude Code. Alexejs app släpptes aldrig som öppen källkod och koden delades aldrig, så RoboCam54 byggdes om genom att studera originalets beteende, dess dekompilerade webbläsarklient och den offentliga LEGO-/EV3-protokolldokumentationen. Alexej har bekräftat att den här sidan får omfatta den vidareutvecklade appen.
Källkoden är privat och släpps inte — det här avsnittet beskriver vad appen gör, inte hur man skaffar eller bygger den. Paket com.robocam.robocam54, versionsnamn 1.0 (versionskod 3).
Vad som är oförändrat
Modellen server + webbläsarklient, upp till fyra styrspakar i två par, alla styrspaksformer och -typer, tangentgrupper med stegvisa ramper, EV3-brevlådor, import / export / kopiering / sändning av XML-profiler, lokala reglage, åskådare, inloggningen (admin / 123, guest / 123) och port 8088.
Vad som skiljer sig från Alexejs app
- Android 7.0 (API 24)+, med mål Android 16 (API 36) — jämfört med Android 2.3 för originalet. Bluetooth-tillstånd vid körning, förgrundstjänsttyper för kamera + datasynkronisering.
- Tre robotprofiltyper: EV3 (Bluetooth Classic / RFCOMM, oförändrat), SPIKE Prime (ny, Bluetooth LE) och Custom.
- Custom-typen är den här forkens variant av ”icke-standardrobotar”. I stället för originalets binära
CMD_START…CMD_STOP-ramning skickar den en rad ren text per ändring —callsign,x0,y0,x1,y1\r\n(de två styrspaksaxelparen som heltal) — över Bluetooth-seriellt, så att en Arduino-skiss kan tolka den som CSV. En medföljande startprofil ”Custom Researcher” ingår. - Nytt: Huawei 360-kameran + 360°-vyn, Cardboard-VR-vyn och knappen Rensa cache (allt nedan).
- proghouse.ru-annonsbannern är borta från startskärmen; alla tolv funktionstangenter F1–F12 går att välja; videoströmmen och förhandsvisningen på enheten roterar med telefonen.
- Har en publicerad integritetspolicy och signering för Play. Samlar inte in något — inget konto, ingen analys, inga annonser, ingen kraschrapportering.
Fork featureForkfunktion
LEGO SPIKE Prime supportStöd för LEGO SPIKE Prime
SPIKE Prime is a third robot type alongside EV3 and Custom. The hub connects over Bluetooth Low Energy, not Classic — so choosing a SPIKE profile and tapping Connect to robot opens a BLE scan-and-pick screen instead of the paired-devices list.
SPIKE Prime är en tredje robottyp vid sidan av EV3 och Custom. Enheten ansluter via Bluetooth Low Energy, inte Classic — så att välja en SPIKE-profil och trycka på Anslut till robot öppnar en BLE-sök-och-välj-skärm i stället för listan över parkopplade enheter.
pybricks_rc_receiver.py once via Pybricks Code and save it to a hub slot. RoboCam54 auto-starts that program on connect (Pybricks START_USER_PROGRAM) and streams live commands into its standard input.
LEGO:s ordinarie SPIKE-firmware har inget live-kommando för ”sätt motoreffekt” — den kan bara ladda upp och köra hela program. Därför måste enheten köra Pybricks-firmware (flasha den en gång på code.pybricks.com), och du laddar upp mottagarprogrammet pybricks_rc_receiver.py en gång via Pybricks Code och sparar det i en enhetslucka. RoboCam54 startar programmet automatiskt vid anslutning (Pybricks START_USER_PROGRAM) och strömmar live-kommandon till dess standardinmatning.
Wire protocolByteprotokoll
App → hub, 3 bytes per command, latest-value-wins, no heartbeat (a command means “run at this power until told otherwise”).
App → enhet, 3 byte per kommando, senaste värdet vinner, ingen puls (ett kommando betyder ”kör med denna effekt tills annat sägs”).
| ByteByte | MeaningBetydelse |
|---|---|
| 0 | opcode — M drive at power, S stop + brake, F stop + coast (float)op-kod — M kör med effekt, S stopp + broms, F stopp + frihjul (float) |
| 1 | port letter A–F (ASCII) — the hub has six portsportbokstav A–F (ASCII) — enheten har sex portar |
| 2 | signed power −100…100 for M; 0 for S/Feffekt med tecken −100…100 för M; 0 för S/F |
Profile & settingsProfil & inställningar
- Ports are A–F. The
<SpikePrime>profile reuses the EV3 editor's joystick / key-group model and the steering types (independent motors, steering 1, steering 2) — no mailbox, no angle/step motor mode.Portarna är A–F. Profilen<SpikePrime>återanvänder EV3-redigerarens styrspaks-/tangentgruppsmodell och styrningstyperna (oberoende motorer, styrning 1, styrning 2) — ingen brevlåda, inget vinkel-/stegläge för motor. - Bundled “Spike Researcher” default profile: 2-wheeled, motors A + B.Medföljande standardprofil ”Spike Researcher”: tvåhjulig, motorer A + B.
- Start hub program on disconnect — mirrors EV3's run-program-on-disconnect. Spike Settings has a Program slot (0–4) field; on disconnect RoboCam54 tells the hub (slot-aware Pybricks
START_USER_PROGRAM, firmware v1.5+) to run that slot.Starta enhetsprogram vid frånkoppling — motsvarar EV3:s kör-program-vid-frånkoppling. Spike-inställningarna har ett fält Programlucka (0–4); vid frånkoppling ber RoboCam54 enheten (luckmedveten PybricksSTART_USER_PROGRAM, firmware v1.5+) att köra den luckan. - Holonomic / omni-wheel robots — a second hub program,
omni.py, does kiwi-drive mixing for a 3-omni-wheel base (motors A/B/C) and takes virtual input channelsD= strafe,E= forward,F= rotate. A round joystick plus the 360 viewer's drag-rotate can then drive a robot that strafes in any direction.Holonoma robotar / omnihjul — ett andra enhetsprogram,omni.py, gör kiwi-drive-mixning för en bas med tre omnihjul (motorer A/B/C) och tar virtuella inkanalerD= sidled,E= framåt,F= rotation. En rund styrspak plus 360-vyns dra-rotera kan då köra en robot som kan förflytta sig i sidled åt valfritt håll. - BLE robustness fixes found in hardware testing: automatic connect-retry (Android's first GATT attempt often fails with status 133), a connect-timeout watchdog, and a write-queue watchdog that self-heals a dropped GATT ack instead of silently wedging every later drive command while still showing “Connected”.BLE-robusthetsfixar från hårdvarutester: automatiskt återförsök vid anslutning (Androids första GATT-försök misslyckas ofta med status 133), en vakthund för anslutningstimeout, och en vakthund för skrivkön som självläker en förlorad GATT-bekräftelse i stället för att tyst blockera alla senare körkommandon medan ”Ansluten” fortfarande visas.
Fork featureForkfunktion
Huawei 360° camera & the /360 viewerHuawei 360°-kamera & /360-vyn
Server Settings → Camera gains “Huawei 360 Camera (USB)”, always listed. Plug the camera into the phone's USB port — the app declares USB-host. UsbCameraManager has three capture modes: Huawei HaCam (vendor 0x12D1, USBC/USBS command frames, H.264 decoded with MediaCodec), standard UVC (MJPEG payloads), and a generic raw-bulk JPEG scanner.
Serverinställningar → Kamera får ”Huawei 360 Camera (USB)”, alltid listad. Anslut kameran till telefonens USB-port — appen deklarerar USB-värd. UsbCameraManager har tre infångningslägen: Huawei HaCam (tillverkare 0x12D1, USBC/USBS-kommandoramar, H.264 avkodad med MediaCodec), standard-UVC (MJPEG-nyttolaster) och en generisk rå-bulk-JPEG-avsökare.
When the 360 camera is selected the browser is served /360 (alias /cam360): an equirectangular viewer you pan, tilt and zoom around the whole sphere.
När 360-kameran är vald får webbläsaren /360 (alias /cam360): en ekvirektangulär vy som du panorerar, lutar och zoomar runt hela sfären.
Click to pointer-lock for FPS-style look. W A S D then drives the robot relative to where the camera faces (W = forward along the current heading, A/D = strafe). Arrow keys always pan/tilt. While locked, dragging left/right also sends a rotate command (joystick 1's X axis) for holonomic robots.
Klicka för att låsa pekaren för FPS-liknande blick. W A S D kör då roboten relativt kamerans riktning (W = framåt längs nuvarande kurs, A/D = i sidled). Piltangenter panorerar/lutar alltid. Medan pekaren är låst skickar dra åt vänster/höger även ett rotations-kommando (styrspak 1:s X-axel) för holonoma robotar.
Left half of the screen is one joystick, right half the other. Default: left drives (camera-relative), right is a rate-based look joystick — hold it deflected to keep turning. Each joystick anchors where your finger first lands.
Skärmens vänstra halva är en styrspak, den högra en annan. Standard: vänster kör (kamerarelativt), höger är en hastighetsbaserad blickstyrspak — håll den utböjd för att fortsätta vrida. Varje styrspak förankras där fingret först landar.
A 360° options panel appears in Server Settings (only for this camera): Swap 360° joystick sides (left = look, right = drive) and 360° joystick / mouse sensitivity — a slider 1–100 where 50 = 1.0× (default), 100 = 2×, 25 = 0.5×.
En panel med 360°-alternativ visas i serverinställningarna (bara för den här kameran): Byt sidor på 360°-styrspakarna (vänster = blick, höger = kör) och Känslighet för 360°-styrspak / mus — ett reglage 1–100 där 50 = 1,0× (standard), 100 = 2×, 25 = 0,5×.
Fork featureForkfunktion
Google Cardboard VR viewerGoogle Cardboard-VR-vy
/vr (alias /cardboard) renders the 360° stream stereo split-screen with phone-gyroscope head-look, for dropping the phone into a Google Cardboard or generic VR headset. It is view only — no joysticks, no login. Drive from the main page or /360 on another device while the headset phone just shows the view. Both eyes see the same crop (the 360 camera has no stereo depth). Head direction is derived from the full W3C DeviceOrientation rotation matrix, not a naive per-axis reading, so the vertical “phone in a headset” pose doesn't hit gimbal lock.
- Needs HTTPS. Chrome only exposes the gyroscope (
DeviceOrientationEvent) on a secure context. RoboCam54 runs a separate HTTPS listener (CardboardSecureServer) on main port + 1, serving only/cardboardand/frame, with a bundled self-signed certificate — the browser shows a one-time “connection not private” warning you tap through. Everything else stays on plain HTTP. /cardboard-status(plain HTTP, always reachable) reports whether the HTTPS listener started — for diagnosing over the LAN without adb.- The server-info banner on the home screen now shows all three URLs: the main address,
/360and/vr.
Confirmed working on hardware.
/vr (alias /cardboard) återger 360°-strömmen i stereo-delad skärm med huvudblick via telefonens gyroskop, för att lägga telefonen i en Google Cardboard eller generisk VR-headset. Den är endast visning — inga styrspakar, ingen inloggning. Kör från huvudsidan eller /360 på en annan enhet medan headset-telefonen bara visar vyn. Båda ögonen ser samma beskärning (360-kameran har inget stereodjup). Huvudriktningen härleds från hela W3C-DeviceOrientation-rotationsmatrisen, inte en naiv avläsning per axel, så den lodräta ”telefon i headset”-posen hamnar inte i gimbal-lås.
- Kräver HTTPS. Chrome exponerar bara gyroskopet (
DeviceOrientationEvent) i en säker kontext. RoboCam54 kör en separat HTTPS-lyssnare (CardboardSecureServer) på huvudport + 1, som bara serverar/cardboardoch/frame, med ett medföljande självsignerat certifikat — webbläsaren visar en engångsvarning ”anslutningen är inte privat” som du klickar dig förbi. Allt annat ligger kvar på vanlig HTTP. /cardboard-status(vanlig HTTP, alltid nåbar) rapporterar om HTTPS-lyssnaren startade — för felsökning över LAN utan adb.- Serverinfo-bannern på startskärmen visar nu alla tre adresserna: huvudadressen,
/360och/vr.
Bekräftat fungerande på hårdvara.
Fork featureForkfunktion
Clear Cache button & other changesKnappen Rensa cache & övriga ändringar
- Clear Cache button in Server Settings wipes the app's
cacheandexternalCachedirectories on demand. It is a manual button, deliberately not tied to saving settings — a settings save can be mid-way through writing a shared-settings temp file, and clearing then would delete it.Rensa cache-knappen i serverinställningarna tömmer appens katalogercacheochexternalCachepå begäran. Det är en manuell knapp, medvetet inte kopplad till att spara inställningar — ett sparande kan vara mitt i att skriva en tillfällig fil för delade inställningar, och att rensa då skulle radera den. - The video stream and on-device preview now rotate to follow the phone's physical orientation (matching the original); portrait frames are letterboxed rather than sent at a swapped size.Videoströmmen och förhandsvisningen på enheten roterar nu med telefonens fysiska orientering (som originalet); stående bildrutor visas med svarta kanter i stället för att skickas med utbytt storlek.
- The proghouse.ru ad banner / WebView was removed from the home screen.proghouse.ru-annonsbannern / WebView togs bort från startskärmen.
- All twelve function keys F1–F12 are selectable for key groups.Alla tolv funktionstangenter F1–F12 går att välja för tangentgrupper.
- A privacy policy was published and release signing was set up. The app collects nothing: no account, analytics, ads or crash reporting.En integritetspolicy publicerades och signering för release sattes upp. Appen samlar inte in något: inget konto, ingen analys, inga annonser, ingen kraschrapportering.
RoboCam54 development timelineRoboCam54:s utvecklingstidslinje
From the app's development history.
Från appens utvecklingshistorik.
- core2026-04-27 – 05
From-scratch clone: HTTP / WebSocket / MJPEG server, EV3 Bluetooth, browser client, all settings activities, local controls. Then full EV3 parity — corrected opcodes (
OUTPUT_POWER 0xA4,WRITEMAILBOX 0x9E), packet-length fixes, the original steering formula, F1–F12, the text-protocol Custom robot type. Reached a “final tested, complete” parity milestone.Klon från grunden: HTTP-/WebSocket-/MJPEG-server, EV3-Bluetooth, webbläsarklient, alla inställningsvyer, lokala reglage. Sedan full EV3-paritet — rättade op-koder (
OUTPUT_POWER 0xA4,WRITEMAILBOX 0x9E), paketlängdsfixar, originalets styrningsformel, F1–F12, textprotokoll-roboten Custom. Nådde en ”färdig, testad” paritetsmilstolpe. - 360 cam2026-05-11
Huawei 360 USB camera option + the
/cam360equirectangular viewer.Huawei 360-USB-kameraalternativ + den ekvirektangulära
/cam360-vyn. - 360 controls2026-08-05
/cam360gains FPS mouse control, camera-relative WASD drive, dual touch joysticks, and the sensitivity setting./cam360får FPS-musstyrning, kamerarelativ WASD-körning, dubbla pekstyrspakar och känslighetsinställningen. - SPIKE2026-08-18 – 08-23
LEGO SPIKE Prime added as a third robot type over BLE, then pivoted to Pybricks after confirming stock firmware has no live motor primitive; BLE robustness fixes.
LEGO SPIKE Prime tillagd som en tredje robottyp över BLE, sedan bytt till Pybricks efter att ha bekräftat att ordinarie firmware saknar live-motorprimitiv; BLE-robusthetsfixar.
- VR + cache2026-08-25
Clear Cache button; Cardboard VR viewer with its dedicated HTTPS listener; stream orientation follows rotation.
Knappen Rensa cache; Cardboard-VR-vy med egen HTTPS-lyssnare; strömorientering följer rotationen.
- omni2026-08-26
SPIKE “start hub program on disconnect” + slot targeting; omni-wheel holonomic receiver; mouse-drag rotate.
SPIKE ”starta enhetsprogram vid frånkoppling” + luckval; holonom omnihjulsmottagare; dra-med-musen-rotera.
- release prep2026-09-05
Draft privacy policy + Play release-signing config; launcher-icon fix.
Utkast till integritetspolicy + signeringskonfiguration för Play; fix av programikonen.
- Play test2026-09-19 – 09-20
Target API raised to 36 (Android 16); release build shrunk with R8 (versionCode 3) and sideload-tested on real Bluetooth robots; privacy policy published; closed test set up on Google Play.
Mål-API höjt till 36 (Android 16); releasebygget krympt med R8 (versionskod 3) och testat via sidoladdning med riktiga Bluetooth-robotar; integritetspolicy publicerad; slutet test uppsatt på Google Play.
ProvenanceUrsprung
Source articlesKällartiklar
This page is compiled and translated from the five RoboCam tutorials by Alexey on proghouse.ru, plus the tag hub and their comment threads.
Den här sidan är sammanställd och översatt från de fem RoboCam-handledningarna av Alexej på proghouse.ru, samt taggsidan och deras kommentarstrådar.
- Controlling a LEGO Mindstorms EV3 robot in first personStyra en LEGO Mindstorms EV3-robot i förstaperson — first-person EV3 control (v1.0)förstapersonsstyrning av EV3 (v1.0)
- Importing, exporting, copying and sending robot settingsImportera, exportera, kopiera och skicka robotinställningar — transferring settings (v1.1)överföra inställningar (v1.1)
- RoboCam – controlling a robot from a computer keyboardRoboCam – styr roboten med datorns tangentbord — keyboard control (v1.2)tangentbordsstyrning (v1.2)
- Building first-person control for an Arduino robotBygg förstapersonsstyrning för en Arduino-robot — Arduino / non-standard robots (v1.3.1)Arduino / icke-standardrobotar (v1.3.1)
- Turning a smartphone into a robot remote controlFörvandla en telefon till fjärrkontroll för roboten — local controls (v1.4.2)lokala reglage (v1.4.2)
Community: the RoboCam group linked from the articles. The hub page is also available as standalone translated pages: English · Svenska.
Gemenskap: RoboCam-gruppen som länkas från artiklarna. Samlingssidan finns också som fristående översatta sidor: English · Svenska.
Part IIDel II
The RoboCam54 section is compiled from the app's source and development history, shared by its developer. The code is private, so there is no repository to link. The one external dependency it names is code.pybricks.com — the Pybricks firmware and uploader, required on the hub for SPIKE Prime.
RoboCam54-avsnittet är sammanställt från appens källkod och utvecklingshistorik, delad av dess utvecklare. Koden är privat, så det finns inget kodförråd att länka till. Det enda externa beroende som nämns är code.pybricks.com — Pybricks-firmware och uppladdare, som krävs på enheten för SPIKE Prime.