diff options
author | Paul Oliver <contact@pauloliver.dev> | 2024-12-29 17:05:34 +0000 |
---|---|---|
committer | Paul Oliver <contact@pauloliver.dev> | 2025-01-16 18:30:09 -0800 |
commit | cc639b06c7126fac7b445d8f778455620d7f8f50 (patch) | |
tree | a4c5c7c0b0a9cdb5bea0891e198003035065e57d /README.md |
Initial
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..01c9427 --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# HsMouse +Experimental control code for robotics. Tested on Raspberry Pi 5. + +## Features +- [`zeromq4-haskell`](https://hackage.haskell.org/package/zeromq4-haskell) +library is used for IPC. +- [`effectful`](https://hackage.haskell.org/package/effectful) library is used +to control effects within monadic computations. +- [`streamly`](https://hackage.haskell.org/package/streamly) library is used +to build pipelines modularly and stream data within pipeline elements. E.g. +`zmq client & processor & zmq server`. + +## Build +Install [`stack`](https://docs.haskellstack.org/en/stable/). I recommend using +[`ghcup`](https://www.haskell.org/ghcup/) for this. Run `stack build` to +compile all libraries and executables. Note: you might need to install some +system dependencies on your host first (e.g. `libzmq`, etc.) + +## Test +On one terminal, run `stack exec dummy-receiver`. This will initialize a ZMQ +client that will wait for incoming pulses. On a separate terminal, run +`stack exec dummy-pulser`. You should be able to see pulses being transmitted +from server to client. E.g.: +``` +$> stack exec dummy-receiver +2025-01-12 21:27:02 INFO receiver/client: Initializing ZMQ client +2025-01-12 21:27:16 INFO receiver/receiver: Received pulse #1 +2025-01-12 21:27:17 INFO receiver/receiver: Received pulse #2 +2025-01-12 21:27:18 INFO receiver/receiver: Received pulse #3 +2025-01-12 21:27:19 INFO receiver/receiver: Received pulse #4 +2025-01-12 21:27:20 INFO receiver/receiver: Received pulse #5 +2025-01-12 21:27:21 INFO receiver/receiver: Received pulse #6 +2025-01-12 21:27:22 INFO receiver/receiver: Received pulse #7 +2025-01-12 21:27:23 INFO receiver/receiver: Received pulse #8 +2025-01-12 21:27:24 INFO receiver/receiver: Received pulse #9 +``` + +``` +$> stack exec dummy-pulser +2025-01-12 21:27:15 INFO pulser/server: Initializing ZMQ server +2025-01-12 21:27:16 INFO pulser/fsm/run: Sending pulse #1 +2025-01-12 21:27:17 INFO pulser/fsm/run: Sending pulse #2 +2025-01-12 21:27:18 INFO pulser/fsm/run: Sending pulse #3 +2025-01-12 21:27:19 INFO pulser/fsm/run: Sending pulse #4 +2025-01-12 21:27:20 INFO pulser/fsm/run: Sending pulse #5 +2025-01-12 21:27:21 INFO pulser/fsm/run: Sending pulse #6 +2025-01-12 21:27:22 INFO pulser/fsm/run: Sending pulse #7 +2025-01-12 21:27:23 INFO pulser/fsm/run: Sending pulse #8 +2025-01-12 21:27:24 INFO pulser/fsm/run: Sending pulse #9 +2025-01-12 21:27:25 ATTENTION pulser/fsm/run: Reached 10 pulses +2025-01-12 21:27:25 ATTENTION pulser/fsm: No state returned, exiting FSM +``` |