IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart -...
-
Upload
edwin-booth -
Category
Documents
-
view
219 -
download
0
Transcript of IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart -...
![Page 1: IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart - Synthetos O’Reilly Solid Conference May 21, 2014.](https://reader035.fdocuments.in/reader035/viewer/2022062518/56649e2c5503460f94b1bb82/html5/thumbnails/1.jpg)
/
IoT and RESTful HardwareWhat We’ve Learned from Three Years Treating Motion as REST
Alden Hart - Synthetos
O’Reilly Solid Conference
May 21, 2014
![Page 2: IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart - Synthetos O’Reilly Solid Conference May 21, 2014.](https://reader035.fdocuments.in/reader035/viewer/2022062518/56649e2c5503460f94b1bb82/html5/thumbnails/2.jpg)
TinyG Motion Controller
what’s TinyG?• multi-axis motion control system designed for desktop CNC, 3D printing, pick & place…• accepts Gcode from USB port and executes it locally on the board• behaves like a RESTful server
![Page 3: IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart - Synthetos O’Reilly Solid Conference May 21, 2014.](https://reader035.fdocuments.in/reader035/viewer/2022062518/56649e2c5503460f94b1bb82/html5/thumbnails/3.jpg)
The Controller Problem & Design Goals
the problem• the motion control functions are all good – but people got stuck at controller implementation• specialized parsers and stateful clients got in the way
design goals• control interface that’s easy and intuitive
• simple• compact / lightweight• human readable / typeable / hackable• relatively ubiquitous / low learning curve• easily persisted and instantiated• object oriented
• don’t have to be an industrial automation engineer to use (1 : 1000)• does not require gateways or other additional hardware
not design goals• highly optimized transfer / storage• support bandwidth starved and flakey communications channels• support for hard, a-priori contracts• XML-isms like Xpath/Xquery, annotation, schemas
![Page 4: IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart - Synthetos O’Reilly Solid Conference May 21, 2014.](https://reader035.fdocuments.in/reader035/viewer/2022062518/56649e2c5503460f94b1bb82/html5/thumbnails/4.jpg)
RESTful Hardware
what is RESTful?• state exists on the server and is transferred to the client• representation is flexible, independent • well-defined resource model
RESTful hardware• server is an embedded chip / may not have an OS• RESTful conventions make talking to the device very easy
JSON• JSON is the natural representation• meets most of our design goals
• simple• compact / lightweight• human readable / typeable / hackable• relatively ubiquitous / low learning curve• easily persisted and instantiated• object oriented
![Page 5: IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart - Synthetos O’Reilly Solid Conference May 21, 2014.](https://reader035.fdocuments.in/reader035/viewer/2022062518/56649e2c5503460f94b1bb82/html5/thumbnails/5.jpg)
Putting JSON / REST on the Hardware
put it On.The.Hardware• code runs on the chip - not a gateway / translator / some-other-intermediary
• “Run JSON right over the traces”• simple JSON parser, serializer, dispatcher and serial IO in < 8K C/C++ code• bind names to dispatch tables to perform actions for the verbs• marshalling in and out of floating point
• strtof() < 70 uSec on a 16 MHz AVR atmega328P (Arduino Uno)• strtof() < 7uSec on a 84 MHz ARM Cortex M3 core
• all memory statically allocated – no mallocs• transport doesn’t matter
• USB, SPI, Serial, MQTT, CoAP, HTTP…
subset of JSON spec• 7 bit ASCII only (UTF-8 sub-set)• objects on a single line (no embedded line feeds)• objects limited to 512 characters (less on smaller CPUs)• decimal only, no hexadecimal• limited support for arrays
![Page 6: IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart - Synthetos O’Reilly Solid Conference May 21, 2014.](https://reader035.fdocuments.in/reader035/viewer/2022062518/56649e2c5503460f94b1bb82/html5/thumbnails/6.jpg)
Implementation Considerations
well defined resource model• static model – e.g. X axis, motor 1, machine setup parameters…• dynamic model – e.g. position, velocity, coordinate system in use, tool in use…• favor flat namespaces – right level of object granularity
keeping it compact• short, mnemonic tokens for names – e.g. xvm instead of XaxisVelocityMaximum
• don’t need to be globally unique – objects define scope• many values are enumerated – e.g. 3 instead of GcodeProgramStop• simple verbs (get, post)
cheats & shortcuts • no request headers. Use null to mean get• no request ID – request / response is synchronous• can consume Gcode natively without a JSON wrapper
• so people don’t have to pre-process their Gcode files
![Page 7: IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart - Synthetos O’Reilly Solid Conference May 21, 2014.](https://reader035.fdocuments.in/reader035/viewer/2022062518/56649e2c5503460f94b1bb82/html5/thumbnails/7.jpg)
Implementation Examples from TinyG (1 of 2)
get • {“xvm”:null}
• {“ct”:null}
• {xvm:n}
• {ct:n}
post (set) • {xvm:16000}
• {ct:0.01}
objects• {x:{vm:16000}}
• {r:{x:{am:1,vm:16000,fr:10000,tn:0,tm:100,jm:200,jh:10000,jd:0.0100,sn:0,sx:0,sv:3000,lv:100,lb:20.000,zb:3.000}},f:[1,0,6,5473]}
• {r:{sys:{fb:428.01,fv:0.970,hp:1,hv:8,id:"2X2660-EVD”…
• {gc:”N75 G3 X0.6785 Y2.2371 Z0.0014 I0.0003 J0.0594”}
footer revision status code flow control checksum
footers
• f:[1,0,6,5473]
![Page 8: IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart - Synthetos O’Reilly Solid Conference May 21, 2014.](https://reader035.fdocuments.in/reader035/viewer/2022062518/56649e2c5503460f94b1bb82/html5/thumbnails/8.jpg)
Implementation Examples from TinyG (2 of 2)
status reports• event reporting for the dynamic model• timed and filtered
• timed reports during movement – e.g. every 250 milliseconds and at end-of-move• filtered so only changed values are reported
• setup status report• {sr:{posx:true, posy:true, posz:true, vel:true, momo:true, stat:true}}
• status reports for an X move from 0 to 100• {sr:{posx:0.000,vel:1.54,momo:0,stat:5}}• {sr:{posx:2.494,vel:1740.87}}• {sr:{posx:18.137,vel:5540.05}}• {sr:{posx:43.528,vel:6500.00}}• {sr:{posx:69.885,vel:6393.34}}• {sr:{posx:91.760,vel:3918.13}}• {sr:{posx:99.670,vel:479.38}}• {sr:{posx:100.000,vel:0.00,stat:3}}
exception reports• {er:{fb:428.01,st:29,msg:"Generic exception report"}}
![Page 9: IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart - Synthetos O’Reilly Solid Conference May 21, 2014.](https://reader035.fdocuments.in/reader035/viewer/2022062518/56649e2c5503460f94b1bb82/html5/thumbnails/9.jpg)
Useful Conventions
We need some conventions for non-application specific functions
don’t innovate. copy.• $ root to discover objects (cribbed from JSONpath)
• {$:null} return top-level objects
• {r:{x:n,y:n,z:n,a:n,b:n,c:n,1:n,2:n,3:n,4:n,5:n,6:n,sys:n,gm:n,rm:n}},f:[1,0,6,6271]}
• @ prefix for addressing, binding and routing
• {@3F2504E0-4F89-41D3-9A0C-0305E82C3301:ex1} assign a short name (handle)
• {ex1:null} address device “ex1” and route object to that device
• # topic prefix
• {#time:”2013-03-28T15:52:49.680Z”} devices that want time will process this message
• ! priority. Jump the queue
• {!fh:true} stop movement now! (feedhold)
![Page 10: IoT and RESTful Hardware What We’ve Learned from Three Years Treating Motion as REST Alden Hart - Synthetos O’Reilly Solid Conference May 21, 2014.](https://reader035.fdocuments.in/reader035/viewer/2022062518/56649e2c5503460f94b1bb82/html5/thumbnails/10.jpg)
Questions