Skip to main content

moteus brushless controller library and tools

Project description

Python bindings for moteus brushless controller

These bindings permit communication and control of moteus brushless controllers.

To use

pip3 install moteus  # or 'moteus-pi3hat' on a pi3hat

See a simple example of the API in use at: simple.py

Theory

Interactions with a controller are mediated through the moteus.Controller object. When constructed with the constructor argument transport=None (the default) it attempts to find some suitable link on your host system, typically the first fdcanusb or socketcan bus it locates.

Single controller imperative operation can be conducted by using await Controller.set_stop(), await Controller.set_position(), and await Controller.query().

Bus-optimized usage

To optimize bus usage, it is possible to command multiple controllers simultaneously. In this mode, a "transport" must be manually constructed.

import asyncio
import math
import moteus

async def main():
    transport = moteus.Fdcanusb()
    c1 = moteus.Controller(id = 1)
    c2 = moteus.Controller(id = 2)

    while True:
        print(await transport.cycle([
          c1.make_position(position=math.nan, query=True),
          c2.make_position(position=math.nan, query=True),
        ]))

asyncio.run(main())

All of the "set_" methods have a "make_" variant which is suitable to pass to a Transport's cycle method.

This mechanism only improves performance for non-fdcanusb links, such as a pi3hat.

An example use of this mechanism can be found at: pi3hat_multiservo.py

Position mode commands

Controller.set_position and Controller.make_position have arguments which exactly mirror the fields documented in docs/reference.md. Omitting them (or specifying None), results in them being omitted from the resulting register based command.

  • position
  • velocity
  • feedforward_torque
  • kp_scale
  • maximum_torque
  • stop_position
  • watchdog_timeout

Finally, the query argument controls whether information is queried from the controller or not.

Controlling resolution

The resolution of commands, and of returned query data, is controlled by optional constructor arguments to Controller. By default, the commands are all F32, and the query requests a subset of fields as INT16. Here is an example of setting those.

pr = moteus.PositionResolution()
pr.position = moteus.INT16
pr.velocity = moteus.INT16
pr.kp_scale = moteus.F32
pr.kd_scale = moteus.F32

qr = moteus.QueryResolution()
qr.mode = mp.INT8
qr.position = mp.F32
qr.velocity = mp.F32
qr.torque = mp.F32

c = moteus.Controller(position_resolution=pr, query_resolution=qr)

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

moteus-0.3.38.tar.gz (36.5 kB view details)

Uploaded Source

Built Distribution

moteus-0.3.38-py3-none-any.whl (44.7 kB view details)

Uploaded Python 3

File details

Details for the file moteus-0.3.38.tar.gz.

File metadata

  • Download URL: moteus-0.3.38.tar.gz
  • Upload date:
  • Size: 36.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.10

File hashes

Hashes for moteus-0.3.38.tar.gz
Algorithm Hash digest
SHA256 beb8469dabdae3db3ebb521e81b5866b1ec416e04676035c3725b43c6027c6ed
MD5 8f58f6960a98d3957b12e937483c5f2b
BLAKE2b-256 2c9e64c0bc66563f74964ca5413e8623c051978a7a02fa0b7e65cc063cc0280e

See more details on using hashes here.

File details

Details for the file moteus-0.3.38-py3-none-any.whl.

File metadata

  • Download URL: moteus-0.3.38-py3-none-any.whl
  • Upload date:
  • Size: 44.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.10

File hashes

Hashes for moteus-0.3.38-py3-none-any.whl
Algorithm Hash digest
SHA256 0999d28495f7f4322c65d4a43b477a25049b3385952c411d77895bcf306778bc
MD5 d9697db45627395a00d13d3f7af669cd
BLAKE2b-256 75f24fc3d5bc69ad9da8a7a2028463ed8ea672869de95701e72311f92f7882a1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page