diff options
Diffstat (limited to 'python-moteus.spec')
-rw-r--r-- | python-moteus.spec | 380 |
1 files changed, 380 insertions, 0 deletions
diff --git a/python-moteus.spec b/python-moteus.spec new file mode 100644 index 0000000..979e85a --- /dev/null +++ b/python-moteus.spec @@ -0,0 +1,380 @@ +%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 <Python_Bot@openeuler.org> - 0.3.54-1 +- Package Spec generated |