# omnibot.py

## Description
This is a python package which allows connection (currently only TCP-based) with the omnibots at the Department of Automatic Control.

Note that this package covers the *client side*. For information about setting up the omnibot, see [omnibotserver.py](https://gitlab.control.lth.se/processes/omnibot/omnibotserver.py).

## Installation
On linux:
```
pip install git+https://gitlab.control.lth.se/processes/omnibot/omnibot.py
```

## Usage

### Code
Import the connection-object with `from omnibot.tcp import Connection`. Use the `with Connection(HOST, PORT) as bot:` command, as this will automatically open and close the connection cleanly. To e.g. set the reference speed for servo 1 to 100, use `bot.set_speed(1,100)`. To set all servo speeds at once, use `bot.set_speeds([100,100,100])`.

To read positions from the crazyflie, use
`x = bot.get_x()`,
`y = bot.get_y()`,
`z = bot.get_z()`,
`theta = bot.get_theta()`.

**Example:**
Connect to a robot at localhost, make it spin in a circle and read the x and y positions.
```
from omnibot.tcp import Connection
from time import time, sleep

# Insert suitable IP-adress
HOST = "xxx.xxx.xxx.xxx"
PORT = yyyy

with Connection(HOST, PORT) as bot:
        
        # Target speed for servos
        vset = 100
        
        # Record start time
        t0 = time()

        # Go one way for 3 seconds
        while time() < t0 + 3:

            # set speeds
            bot.set_speeds([vset,vset,vset])
            
            # print position
            print('x:'+str(bot.get_x()))
            print('y:'+str(bot.get_y()))

            sleep(0.1)
```

**Example:**
A pre-defined script which rotates first one way, then the other, and prints logged angle:
```
from omnibot.dummybot import run_dummybot

# Insert suitable IP-adress
HOST = "xxx.xxx.xxx.xxx"
PORT = yyyy
run_dummybot(HOST, PORT)
```

### Maximum servo speed
You can get the maximum absolute value of servo-speed-setpoints with `max_speed = bot.get_max_speed()`. Any value above (below) `max_speed` (`-max_speed`) is rounded down (up) on the server side.

### Network
The omnibots automatically connect to the router named "robotlab". You can connect to the omnibots via this router, IP `130.235.83.171`. Use port `90XX` to rout to bot number `XX`, e.g. `9006` routs to bot number 6. In the example above you would use
```
HOST = "130.235.83.171"
PORT = 9006
```
to connect to bot number 6.

## Support
felix.agner@control.lth.se

## Contributing
Please feel free to improve this as future projects happen at the department.

## License
MIT-license.

## Project status
The project is mostly updated when courses using the robots are ongoing.