PyRoboteq
Python library to ease with roboteq motor driver programming
Installation
You can install them using pip install PyRoboteq
Or, just clone the repository and import from path 'PyRoboteq' directory
Requirements
Important: this library was tested currently only on SDC2130 motor controller, and will probably support only the SDC21** series
To make sure your motor controller will work, you'll need the following:
- Installed PySerial module (imported as 'serial')
- Connection to the motor controller via serial communication
Usage
Setup
Import the PyRoboteq package
from PyRoboteq import RoboteqHandler
The PyRoboteq library includes a set of commands which you can use, additionally with comment on each one of them of their use. To use the commands add the following line
from PyRoboteq import roboteq_commands as cmds
Connection
To connect to the controller you'll have to make a controller object, and additionally connect to it.
The RoboteqHandler()
constructor additionally supports two parameters which can ease with the development.
- The debug_mode parameter, which prints out any information sent or received to and from the controller, and any exceptions received.
- The
exit_on_interrupt
. By default, the pyroboteq will ignore any exceptions to make sure minor interruptions wont crash the robot. this can be averted by adding theexit_on_interrupt
parameter to exit when any interruption is received.
controller = RoboteqHandler(debug_mode = True, exit_on_interrupt = False) # Create controller object
The connect()
method allows the library to connect to the controller, you must specifiy the port. The library
works both on linux and windows.
is_connected = controller.connect("COM9") # connect to the controller (COM9 is an example for windows)
Sending Commands
Then what you will have to do is to simply write a command to the motors, if you have the SDC2130 dual series, you'll be able to communication with 2 motors
if __name__ == "__main__":
while True:
controller.dual_motor_control(100, 100) # Send command to the controller
To send a message to the controller, use the send_command()
controller.send_command(EM_STOP) # this will send 0 argument command for emergency stop
controller.send_command(REL_EM_STOP) # send this command to release it
controller.send_command(SET_SPEED, 1, 1000) # send set speed command to channel 1 (first argument) with the value of up to 1000 RPM (second argument)
As you can notice, you do not have to use all the arguments, check the manual to see how many arguments you need to use.
Even though send_command
supports this, you can more preferablly send a raw string to the controller using the send_raw_command()
method.
controller.send_raw_command("!M 200 200") # additionaly, you can send a raw string.
Reading Commands
Sending commands to the controller is cool, but it would be much cooler, if the controller could also return you its very beneficial data.
For this, you can use the read_value()
method. The method has 2 parameters, the read command, and optionally a parameter.
some commands will give you multiple data, like controller voltage, which will give you voltage from 3 different points of the controller.
It is recommended that you read the manual to see what each value means.
controller_volts = controller.read_value(cmds.READ_VOLTS) # receive voltages from the controller
>>> "V= 12:16:5" # Without a parameter, the controller returns 3 channels, (internal, battery, 5v output) respectively
controller_volts = controller.read_value(cmds.READ_VOLTS, 2)
>>> "V= 16" # This way, the controller will return only the value of channel 2 (battery voltage)
Same command can be sent using a raw string:
controller_volts = controller.read_value("?V", 2)
>>> "V=16"
Examples
The PyRoboteq library comes with little examples which you can run right away.
To access the examples head to the "examples" directory inside the "PyRoboteq" directory.
More information
For more information please refer to the manual listed here