%global _empty_manifest_terminate_build 0 Name: python-moteus Version: 0.3.54 Release: 1 Summary: moteus brushless controller library and tools License: Apache Software License URL: https://github.com/mjbots/moteus Source0: https://mirrors.nju.edu.cn/pypi/web/packages/15/ef/67e1d26f0d9871dafc1bfbce2578d138b151863cbd7e1db8ac4502aa6bbc/moteus-0.3.54.tar.gz BuildArch: noarch Requires: python3-importlib-metadata Requires: python3-pyelftools Requires: python3-pyserial Requires: python3-can Requires: python3-pywin32 %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](examples/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](examples/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) ``` %package -n python3-moteus Summary: moteus brushless controller library and tools Provides: python-moteus BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-moteus # 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](examples/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](examples/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) ``` %package help Summary: Development documents and examples for moteus Provides: python3-moteus-doc %description help # 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](examples/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](examples/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) ``` %prep %autosetup -n moteus-0.3.54 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-moteus -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Wed May 31 2023 Python_Bot - 0.3.54-1 - Package Spec generated