node-red-contrib-iiwa
v1.0.0
Published
A custom Node-RED node that encapsulated a WASM-based, inverse-kinamtic solver for the KUKA LBR iiwa r800 7-axis robotic arm.
Downloads
2
Readme
iiwa Kinematics NodeRED Nodes
This custom Node-RED package is created by Orwa Diraneyya for inclusion in the demo app for the paper entitled 'TOWARDS A NOVEL, WEBASSEMBLY-BASED, ROBOTIC-SIMULATION WEB STACK' (to be published in the DETC2022 conference).
The package contains 3 nodes, which wrap the following IKFAST C++ functions:
GetNumJoints
ComputeFK
ComputeIK
These nodes are listed under a category named 'robotics':
Original documentation
This is the documentation from the original repository which I modified.
Passing String (or Array)
WebAssembly doesn't natively support a string type, it rather supports i32 / i64 / f32 / f64 value types as well as i8 / i16 for storage.
var ptr = new Uint8Array(mem.buffer, 0, msg.payload.length );
// String to UTF8
var utf8 = unescape(encodeURIComponent(msg.payload));
for (var i = 0; i < utf8.length; i++) {
ptr[i] = utf8.charCodeAt(i);
}
instance.exports._lowercase(ptr); // Calling lowercase(char *ptr)
// UTF8 to String
msg.payload = utf8ToString(ptr);
You can interact with a WebAssembly instance using:
- exports, where from JavaScript you call into WebAssembly, and WebAssembly returns a single value type.
- imports where WebAssembly calls into JavaScript, with as many value types as you want (note: the count must be known at Module compilation time, this isn't an array and isn't variadic).
- Memory.buffer, which is an ArrayBuffer that can be indexed using (among others) Uint8Array.
More about Array
Related Posts
- MDN WebAssembly documentation
- Code examples that accompany MDN WebAssembly documentation
- WebAssembly Example
- Standalone WebAssembly Example
- Cheerp Tutorial: Mixed mode C++ to WebAssembly and JavaScript
- Writing WebAssembly By Hand
- Emscripten
- Interacting with Code
- Emscripting a C library to Wasm
WASM Compilation
Option 1. Emscripten SDK
- Installation (Linux or OS X)
$ git clone https://github.com/juj/emsdk.git
$ cd emsdk
$ ./emsdk install latest
$ ./emsdk activate latest
$ source ./emsdk_env.sh
- Compilation with emcc
$ emcc main.c -s WASM=1 -o app.html
- Additional Toolkit WABT:WebAssembly Binary Toolkit
Option 2. WebAssembly for Node
wa-compile
-o main.wasm main.c
wa-link
utility links multiple wasm files to one.
WASM Examples ( as a reference )
- https://github.com/Hanks10100/wasm-examples
- JPEG codec in WASM demo
- HumbleNet
- Getting Started With WebAssembly