Remote procedure call server and client for remote control of Zumi robots.
- Python API mirroring the Zumi API from remote
- allows compute intensive robot algorithms
- uses the RPYC remote procedure call lib for efficient and secure remote calls
Install rpyc
:
pip install rpyc
use ssh or the Jupyter terminal to get on a console
Clone this Git repo:
git clone https://github.com/keuperj/Zumi-rpc.gi
in the Zumi-rpc
folder, generate server credentials
openssl genrsa -out zumi_rpc.key 4096
openssl req -new -x509 -days 3650 -key zumi_rpc.key -out zumi_rpc.crt
chmod 600 zumi_rpc.key
chmod 600 zumi_rpc.crt
Then generate client credentials
openssl genrsa -out client.key 4096
openssl req -new -key client.key -out client.csr -passin pass:""
openssl x509 -req -days 3652 -in client.csr -CA zumi_rpc.crt -CAkey zumi_rpc.key -set_serial 01 -out client.crt
rm client.csr
Now copy the client key and cert to your client machine and set proper rights:
chmod 700 client.*
Use ssh or the Jupyter terminal to
python3 RPC-Server.py &
For an automatic start at boot time, you can add this command to /etc/rc.local
The RPC Server does not interfer with the Jupyter frontend. You can run them both at the same time. Our typical workflow is to start the RPC-Server from a Jupyter terminal.
If you want to access the Zumi not only from it's own Wifi, but accross the internet, you need a relay server. Details are explained in our Zumi Repo - just replace the Jupyter Port 8888 with your RPC-Server port...
Zumi-RPC simply reproduces the original Zumi API, with some exceptions:
We bypass the Zumi camera methods and interface picamera
directly, allowing us to get high resolution images:
get_picture(resolution=(1024,768))
returns a NumPy array of size (resolution_x, resolution_y,3) -> RGB image.
if you call a function which returns an object, you need to make a copy of this object. Otherwise, you will only have a local reference to this object and the data remains on the Zumi! So, for the cam example:
frame = np.array(get_picture())
will produce a local copy of the output.
The Zumi API and the RPC Server are non-blocking. Hence, you can have multiple RPC-clients connected to one server as well as use RPC and Jupyter simultaneously.
see our Zumi Repo