Command ODrive over CAN with a simple interface
Project description
Asyncio driver for ODrive
Command ODrive over CAN with a simple interface.
v1.x= Odrive 3.6v2.x= Odrive Pro
Source code: https://gitlab.com/roxautomation/components/odrive-can
Documentation: https://roxautomation.gitlab.io/components/odrive-can
Features
- designed to work with
asyncio - implements full odrive can protocol.
- includes
OdriveMockclass for device simulation - cli tools for message inspection, backup and demo's.
Installation
pip install odrive-can
Basic usage
import asyncio
from odrive_can import ODriveCAN, CanMsg
from odrive_can.tools import UDP_Client
AXIS_ID = 0
INTERFACE = "vcan0"
SETPOINT = 50
udp = UDP_Client() # send data to UDP server for plotting
def feedback_callback_fcn(msg: CanMsg, caller: ODriveCAN):
"""called on position estimate"""
print(msg)
udp.send(msg.data)
async def main():
"""connect to odrive"""
drv = ODriveCAN(axis_id=AXIS_ID, interface=INTERFACE)
# set up callback (optional)
drv.feedback_callback = feedback_callback_fcn
# start
await drv.start()
# check errors (raises exception if any)
drv.check_errors()
# set controller mode
drv.set_controller_mode("POSITION_CONTROL", "POS_FILTER")
# reset encoder
drv.set_linear_count(0)
# set axis state
await drv.set_axis_state("CLOSED_LOOP_CONTROL")
# set position gain
drv.set_pos_gain(3.0)
for _ in range(2):
# setpoint
drv.set_input_pos(SETPOINT)
await asyncio.sleep(5.0)
drv.set_input_pos(-SETPOINT)
await asyncio.sleep(5.0)
drv.set_input_pos(0.0)
asyncio.run(main())
CLI interface
Usage: odrive_can [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
backup Backup config to config folder
demo demonstration of control modes
info Print package info
inspect Inspect and decode ODrive CAN messages
mock Mock ODrive CAN interface
Using virtual devices
- create a virtual can adapter (see docs)
- in first terminal run
odrive_can mock - in second terminal run
odrive_can inspect vcan0
Position control demo
odrive_can demo position --interface vcan0
Live plotting data
Demo scripts send data as json to udp://localhost:5005 .
This data can be visualized with plotjuggler
(sender code is found in tools.UDP_Client)
Development
Virtual environment
create virtual envrionment with make venv
Devcontainer
dockerfolder contains devcontainer environment..devcontaineris VSCode devcontainer environment
Support
commercial support is available through www.roxautomation.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file odrive_can-2.1.0.tar.gz.
File metadata
- Download URL: odrive_can-2.1.0.tar.gz
- Upload date:
- Size: 2.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5738a8e7e4730b319cbb9e93a0aabed5ccb5c4d0b238812dbfe87204b85d21e0
|
|
| MD5 |
2ab22e9cc99cd928dfa5626282879ff6
|
|
| BLAKE2b-256 |
9dc7c76e99e4ef378614d0ca4618d686f6ad4a5f9b1b7ff903a9fa8833d0b491
|
File details
Details for the file odrive_can-2.1.0-py3-none-any.whl.
File metadata
- Download URL: odrive_can-2.1.0-py3-none-any.whl
- Upload date:
- Size: 42.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f18b72d1b48bfeab9fdd14c21b6f8063067e076c460c6b9cd7a33f931c8a7df3
|
|
| MD5 |
dec4f4c3c6dd11c3ae1fee5dc5a8e25f
|
|
| BLAKE2b-256 |
2411312de1a06f95776c4ba4dafe376baa9ef810b56f5b3adb5e229409135358
|