From f4eb500c721f5d92c3070a535fc214899927db9a Mon Sep 17 00:00:00 2001 From: Marco Bacis Date: Tue, 16 May 2023 16:05:49 +0200 Subject: [PATCH] docs: update documentation --- README.md | 206 +++++++++++++++++++-- docs/example.md | 193 +++++++++++++++++++ docs/img/architecture.svg | 3 + docs/img/example_app/ExampleApp_Screen.png | Bin 0 -> 36982 bytes docs/upgrade.md | 15 ++ docs/weart.png | Bin 0 -> 14875 bytes 6 files changed, 397 insertions(+), 20 deletions(-) create mode 100644 docs/example.md create mode 100644 docs/img/architecture.svg create mode 100644 docs/img/example_app/ExampleApp_Screen.png create mode 100644 docs/upgrade.md create mode 100644 docs/weart.png diff --git a/README.md b/README.md index 39af52c..dc6181a 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,195 @@ -# README # +# Low-Level C# SDK -This README would normally document whatever steps are necessary to get your application up and running. +Welcome to the Weart Low-Level C# SDK documentation. -### What is this repository for? ### +The SDK allows to connect to the Weart middleware and perform various actions with the TouchDIVER devices: +* Start and Stop the middleware operations +* Calibrate the device +* Receive tracking data from the devices +* Send haptic effects to the devices -* Quick summary -* Version -* [Learn Markdown](https://bitbucket.org/tutorials/markdowndemo) +# Architecture +C++ SDK Architecture -### How do I get set up? ### +# Setup +The minimum setup to use the weart SDK consists of: +* A PC with the Middleware installed +* A TouchDIVER device +* A C# project using the Low-Level SDK -* Summary of set up -* Configuration -* Dependencies -* Database configuration -* How to run tests -* Deployment instructions +The SDK can be downloaded as a zip file containing all the necessary files. +To use it in your C# project, unzip it and move the files in a folder inside your project. +Then, add the sdk files in your project. +In Visual Studio, this can be done by including the sdk directory into the project (Right Click on Solution -> Add -> Existing Directory). -### Contribution guidelines ### +To start using the SDK in your project, start the Middleware application and connect a TouchDIVER device to it. -* Writing tests -* Code review -* Other guidelines +Import the main namespaces: -### Who do I talk to? ### +~~~~~~~~~~~~~{.cs} +using WeArt.Core; +using WeArt.Components; +~~~~~~~~~~~~~ -* Repo owner or admin -* Other community or team contact \ No newline at end of file +Create the WeArtClient and start the communication with the middleware: +~~~~~~~~~~~~~{.cs} + // Create weart client + WeArtClient weArtClient = new WeArtClient { IpAddress = WeArtNetwork.LocalIPAddress, Port = 13031 }; + + // Start connection and send start message to middleware + weArtClient.Start(); +~~~~~~~~~~~~~ + +@note The call to WeArtClient.Start() will also start the middleware, so be sure to have connected the devices before + +# Features + +## Start/Stop Client +As seen in the previous section, to start the middleware operations, call the Start() method. + +~~~~~~~~~~~~~{.cs} + weArtClient->Start(); +~~~~~~~~~~~~~ + +To stop the middleware, call the Stop() method. + +~~~~~~~~~~~~~{.cs} + weArtClient->Stop(); +~~~~~~~~~~~~~ + +## Devices calibration +After starting the communication with the middleware, it's now possible to calibrate the TouchDIVER devices. +The calibration allows to set the initial offsets of each thimble relative to the control unit position, in order to improve the finger tracking output. + +The SDK client allows to add callbacks to monitor the calibration procedure status and result. +For example, to start the calibration and print "Success" or "Failed": + +~~~~~~~~~~~~~{.cs} + weArtClient.OnCalibrationResultSuccess += (HandSide hand) => Console.WriteLine("Success!"); + weArtClient.OnCalibrationResultFail += (HandSide hand) => Console.WriteLine("Failed"); + + weArtClient.StartCalibration(); +~~~~~~~~~~~~~ + +## Haptic feedback + +The TouchDIVER allows to perform haptic feedback on the user's finger through its *thimbles*. +Every thimble can apply a certain amount of pressure, temperature and vibration based on the processed object and texture. + +### Haptic Object + +A WeArtHapticObject is the basic object used to apply haptic feedback. +To create one, use the following code: + +~~~~~~~~~~~~~{.cs} + // create haptic object to manage actuation on Right hand and Index Thimble + WeArtHapticObject hapticObject = new WeArtHapticObject(_weartClient); + hapticObject.HandSides = HandSideFlags.Right; + hapticObject.ActuationPoints = ActuationPointFlags.Index; +~~~~~~~~~~~~~ + +The attirbutes handSideFlag and actuationPointFlag accept multiple values. +The next example presents a single haptic object that, when applied a WeArtEffect, will affect both hands and all fingers. + +~~~~~~~~~~~~~{.cs} + hapticObject.HandSides = HandSideFlags.Right | HandSideFlags.Left; + hapticObject.ActuationPoints = ActuationPointFlags.Index | ActuationPointFlags.Middle | ActuationPointFlags.Thumb; +~~~~~~~~~~~~~ + +### Create Effect + +In order to send haptic feedback to the device, an effect must be created by implementing the IWeArtEffect interface. +The class shown here contains the effects without any processing, but it might be extended for other use cases +(e.g. values not directly set, but computed from other parameters). + +~~~~~~~~~~~~~{.cs} +public class TouchEffect : IWeArtEffect { + public event Action OnUpdate; + public Temperature Temperature { get; private set; } = Temperature.Default; + public Force Force { get; private set; } = Force.Default; + public Texture Texture { get; private set; } = Texture.Default; + + public void Set(Temperature temperature, Force force, Texture texture) + { + force = (Force)force.Clone(); + texture = (Texture)texture.Clone(); + + bool changed = !Temperature.Equals(temperature) || !Force.Equals(force) || !Texture.Equals(texture); + + Temperature = temperature; + Force = force; + texture.VelocityZ = 0.5f; + Texture = texture; + + if (changed) + OnUpdate?.Invoke(); + } +} +~~~~~~~~~~~~~ + +After defining the effect class, create the object on which the temperature, force and texture values will be applied: + +~~~~~~~~~~~~~{.cs} +TouchEffect touchEffect = new TouchEffect(); +~~~~~~~~~~~~~ + +### Add or Update Effect + +It's possible to add a new effect to an haptic object, or to update an existing one. + +In the example below, the effect created in the previous section is updated with a new temperature, force and texture. +It is then added to the haptic object if not already present (if the effect is already applied to the thimble, it will update it automatically through the OnUpdate event). + +~~~~~~~~~~~~~{.cs} + // create temperature component + Temperature temperature = Temperature.Default; + temperature.Active = true; // must be active to work + temperature.Value = 0.2f; + + // create force component + Force force = Force.Default; + force.Active = true; + force.Value = 0.7f; + + // create texture component + Texture texture = Texture.Default; + texture.Active = true; + texture.TextureType = TextureType.ProfiledAluminiumMeshFast; + + // effect set proporties + touchEffect.Set(temperature, force, texture); + + // add effect if needed, to thimble + if (hapticObject.ActiveEffect == null) + hapticObject.AddEffect(touchEffect); +~~~~~~~~~~~~~ + +### Remove Effect + +If an effect is not needed anymore, it can be removed from the haptic object with the RemoveEffect method. + +~~~~~~~~~~~~~{.cs} + hapticObject.RemoveEffect(touchEffect); +~~~~~~~~~~~~~ + +## Tracking + +After starting the middleware and performing the device calibration, it's possible to receive tracking data +related to the TouchDIVER thimbles. + +To read these values, create and set a thimble tracker object for monitoring the closure/abduction value of a given finger: +~~~~~~~~~~~~~{.cs} + WeArtThimbleTrackingObject indexThimbleTracking = new WeArtThimbleTrackingObject(weArtClient, HandSide.Right, ActuationPoint.Index); +~~~~~~~~~~~~~ + +Once this object is created, it will start receiving the tracking values. +To access the closure and abduction values, simply use the getters provided by the thimble tracking object. + +The closure value ranges from 0 (opened) to 1 (closed). + +The abduction value ranges from 0 (finger near the hand's central axis) to 1 (finger far from the hand central axis). + +~~~~~~~~~~~~~{.cs} + float closure = indexThimbleTracking.Closure.Value; + float abduction = indexThimbleTracking.Abduction.Value; +~~~~~~~~~~~~~ \ No newline at end of file diff --git a/docs/example.md b/docs/example.md new file mode 100644 index 0000000..6bbbaca --- /dev/null +++ b/docs/example.md @@ -0,0 +1,193 @@ +# Example Project + +An example application is available for download together with the C# and C++ SDK [here](https://weart.it/repository/downloads/sdk-low-level/WEART_Low_Level_API_v1.0.zip). + +The application is implemented as a Universal Windows app in C#. The Visual Studio Solution is present inside an archive, at ```C#/WEART_API_Integration_v1.1.zip```. + +To execute the application, just open the solution with Visual Studio and Run it (by clicking the play button or pressing F5). + +![Example application](./example_app/ExampleApp_Screen.png) + +## SDK Integration + +The SDK is integrated in the example application by copying the sdk source and header files into the ```WEART_API_Integration/WEART_SDK``` directory, and adding them to the visual studio project. +Most of the application code can be found in the ```WEART_API_Integration/MainPage.xaml.cs``` file. + +### Connection to Middleware +The connection is managed using the WeArtClient class together with events to monitor the connection status. To manage the client class, the application uses a WeArtController. + +In particular, upon loading the main window, the application initialises the sdk client and adds a delegate for when the connection +status changes (connected or disconnected). + +~~~~~~~~~~~~~{.cs} +using WeArt.Core; +using WeArt.Components; + +private async void PageLoaded(object sender, RoutedEventArgs e) +{ + WeArtController weArtController = new WeArtController(); + _weartClient = weArtController.Client; + _weartClient.OnConnectionStatusChanged += OnConnectionChanged; + ... +} + +private void OnConnectionChanged(bool connected) +{ + if (connected) { + // Initialise empty effect + CreateEffect(); + } +} +~~~~~~~~~~~~~ + +### Start/Stop middleware +By clicking on the "Start" and "Stop" buttons, it's possible to start and stop the middleware operations. +When clicking on the buttons, the application simply calls the corresponding SDK methods. + +~~~~~~~~~~~~~{.cs} +private void StartClient_Click(object sender, RoutedEventArgs e) +{ + _weartClient.Start(); +} + +private void StopClient_Click(object sender, RoutedEventArgs e) +{ + _weartClient.Stop(); +} +~~~~~~~~~~~~~ + +### Calibration +When the "Calibrate" button is clicked, if the middleware is started, the application will start the calibration procedure. + +In addition, the application register to the calibration status and result events, to inform the user about the calibration progress. + +~~~~~~~~~~~~~{.cs} +private async void PageLoaded(object sender, RoutedEventArgs e) +{ + ... + // handle calibration + _weartClient.OnCalibrationStart += OnCalibrationStart; + _weartClient.OnCalibrationFinish += OnCalibrationFinish; + _weartClient.OnCalibrationResultSuccess += (HandSide hand) => OnCalibrationResult(hand, true); + _weartClient.OnCalibrationResultFail += (HandSide hand) => OnCalibrationResult(hand, false); + ... +} + +// Start calibration +private void StartCalibration_Click(object sender, RoutedEventArgs e) +{ + _weartClient.StartCalibration(); +} + +private void OnCalibrationStart(HandSide handSide) +{ + Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => + { + CalibrationStatusText.Text = $"Calibrating {handSide.ToString().ToLower()} hand..."; + StartCalibration.IsEnabled = false; + }); +} + +private void OnCalibrationFinish(HandSide handSide) +{ + Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => + { + StartCalibration.IsEnabled = true; + }); +} + +private void OnCalibrationResult(HandSide handSide, bool success) +{ + Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => + { + CalibrationStatusText.Text = $"Calibration for {handSide.ToString().ToLower()} hand {(success ? "completed" : "failed")}"; + }); +} +~~~~~~~~~~~~~ + +### Tracking data + +The tracking data is read periodically from multiple WeArtThimbleTrackingObject objects, +declared when the application is opened. + +~~~~~~~~~~~~~{.cs} +private async void PageLoaded(object sender, RoutedEventArgs e) +{ + ... + // Instantiate thimbles for tracking + _leftIndexThimble = new WeArtThimbleTrackingObject(_weartClient, HandSide.Left, ActuationPoint.Index); + _leftThumbThimble = new WeArtThimbleTrackingObject(_weartClient, HandSide.Left, ActuationPoint.Thumb); + + ... + + // schedule timer to check tracking closure value + Timer timer = new Timer(); + timer.Interval = 200; //Milliseconds + timer.AutoReset = true; + timer.Elapsed += OnTimerElapsed; + timer.Start(); + ... +} + +private void OnTimerElapsed(object sender, ElapsedEventArgs e) +{ + Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => + { + ValueIndexRightClosure.Text = _rightIndexThimble.Closure.Value.ToString(); + ValueThumbRightClosure.Text = _rightThumbThimble.Closure.Value.ToString(); + ValueThumbRightAbduction.Text = _rightThumbThimble.Abduction.Value.ToString(); + ValueMiddleRightClosure.Text = _rightMiddleThimble.Closure.Value.ToString(); + + ValueIndexLeftClosure.Text = _leftIndexThimble.Closure.Value.ToString(); + ValueThumbLeftClosure.Text = _leftThumbThimble.Closure.Value.ToString(); + ValueThumbLeftAbduction.Text = _leftThumbThimble.Abduction.Value.ToString(); + ValueMiddleLeftClosure.Text = _leftMiddleThimble.Closure.Value.ToString(); + }); +} +~~~~~~~~~~~~~ + +### Applying effects + +To apply effects to the user hands, the application contains an internal ```TouchEffect``` class, which implements IWeArtEffect. + +The application apply a different effect to the index finger when one of the "Add effect sample" buttons is clicked. + +For example, when clicking the "Add effect sample 1" button, a slight pressure and cold temperature (without texture vibration) +are applied to the right index finger, as shown below: + +~~~~~~~~~~~~~{.cs} +private async void PageLoaded(object sender, RoutedEventArgs e) +{ + ... + // instantiate Haptic Object Right hand for Index Thimble + _hapticObject = new WeArtHapticObject(_weartClient); + _hapticObject.HandSides = HandSideFlags.Right; + _hapticObject.ActuationPoints = ActuationPointFlags.Index; + ... +} + +private void AddEffectSample1_Click(object sender, RoutedEventArgs e) +{ + // create temperature component + Temperature temperature = Temperature.Default; + temperature.Active = true; // must be active to work + temperature.Value = 0.2f; + + // create force component + Force force = Force.Default; + force.Active = true; + force.Value = 0.7f; + + // create texture component + Texture texture = Texture.Default; + texture.Active = true; + texture.TextureType = TextureType.ProfiledAluminiumMeshFast; + + // effect set proporties + _effect.Set(temperature, force, texture); + + // add effect if needed, to thimble + if (_hapticObject.ActiveEffect == null) + _hapticObject.AddEffect(_effect); +} +~~~~~~~~~~~~~ \ No newline at end of file diff --git a/docs/img/architecture.svg b/docs/img/architecture.svg new file mode 100644 index 0000000..509d9a7 --- /dev/null +++ b/docs/img/architecture.svg @@ -0,0 +1,3 @@ + + +
WEART
Middleware
Desktop Tool
WEART...
C# Client
C++ Client
TouchDIVER Devices
TouchDIVER Devices
TCP Socket
TCP Socket
BTLE Communication
BTLE Communication
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/img/example_app/ExampleApp_Screen.png b/docs/img/example_app/ExampleApp_Screen.png new file mode 100644 index 0000000000000000000000000000000000000000..c6673775b716ee890696443c20666fc5399c80f6 GIT binary patch literal 36982 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 Existing Item and selecting all the SDK files. +On other systems (e.g. cmake) the procedure might be different. + +The SDK is retro-compatible with older versions, so there's no need to update the application code. To see the new feature and fixes added to each version, refer to the Changelog section. + +## Changelog +### Version 1.1 (latest) +* Add calibration procedure start/stop and listener +* Add new default tracking message and values for closure diff --git a/docs/weart.png b/docs/weart.png new file mode 100644 index 0000000000000000000000000000000000000000..52817bfd5010b2061b5d22ea7b78b8dfce0d70d3 GIT binary patch literal 14875 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 S@&IvM256}00vnWUBmWmBc;gfR literal 0 HcmV?d00001