Use odrive motion controller with CAN inteface
Project description
Asyncio driver for ODrive V3.6
Command ODrive over CAN with a simple interface.
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
OdriveMock
class 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
docker
folder contains devcontainer environment..devcontainer
is 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
odrive_can-0.11.1.tar.gz
(28.8 kB
view details)
Built Distribution
File details
Details for the file odrive_can-0.11.1.tar.gz
.
File metadata
- Download URL: odrive_can-0.11.1.tar.gz
- Upload date:
- Size: 28.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 217a9952dd1b27485704a33b54f0cf66f43c4f686eb626577f234fa3c5fc5f5b |
|
MD5 | b25ed0b04d634624ddfda2e3c74a3d80 |
|
BLAKE2b-256 | c472b6505e7114ea150ebc2d302e9a71f79c1e86f891f51f132425179f968882 |
File details
Details for the file odrive_can-0.11.1-py3-none-any.whl
.
File metadata
- Download URL: odrive_can-0.11.1-py3-none-any.whl
- Upload date:
- Size: 32.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 03577ab83e7e23565fc196e2175528b8c2f7c81e1255661f3002117c7c6311a8 |
|
MD5 | 176aabf1f2609f4158da6b7214d96d01 |
|
BLAKE2b-256 | 36df4400273639f9cee49b2bb6a28191febf7be5cc3d4f48e764a88a68c0376d |