{"id":25846694,"url":"https://github.com/modular-ml/wrapyfi-interfaces","last_synced_at":"2026-05-13T17:40:03.496Z","repository":{"id":62704127,"uuid":"556841986","full_name":"modular-ml/wrapyfi-interfaces","owner":"modular-ml","description":"Interfaces for communicating with devices and robots using Wrapyfi","archived":false,"fork":false,"pushed_at":"2024-05-17T13:08:34.000Z","size":1187,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-18T13:39:29.727Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/modular-ml.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-24T16:05:38.000Z","updated_at":"2024-05-17T13:08:38.000Z","dependencies_parsed_at":"2024-01-05T12:32:10.627Z","dependency_job_id":"226f87c5-0af4-4e5f-a1e1-b458bbec0c34","html_url":"https://github.com/modular-ml/wrapyfi-interfaces","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modular-ml%2Fwrapyfi-interfaces","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modular-ml%2Fwrapyfi-interfaces/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modular-ml%2Fwrapyfi-interfaces/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modular-ml%2Fwrapyfi-interfaces/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/modular-ml","download_url":"https://codeload.github.com/modular-ml/wrapyfi-interfaces/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241348206,"owners_count":19948156,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-01T09:33:37.157Z","updated_at":"2025-11-23T19:06:05.242Z","avatar_url":"https://github.com/modular-ml.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# wrapyfi-interfaces\n\nWe provide a collection of simple robot and device interfaces for actuation and sensing in a \n[Wrapyfi](https://github.com/modular-ml/wrapyfi) compatible format. For installing device \ndrivers and libraries, refer to the README document provided in each interface package \ne.g., [/wrapyfi_interfaces/robots/icub_head/](/wrapyfi_interfaces/robots/icub_head/)\n\nFor each interface, run the standalone `interface.py` with the necessary arguments. \nThe interface runs in the background acting as a broker for bridging Wrapyfi decorated \nfunction calls with the devices available. \n\nWe demonstrate the communication with multiple devices including robots such as the iCub head, \nand microcontrollers (e.g., arduino or raspberry pi pico) with sensors attached to them.\n\n## Installation\n\nTo install Wrapyfi-interfaces:\n\n```\npython3 setup.py install\n```\n\nwhich automatically installs the available interfaces assuming Wrapyfi is already installed.\n\nThe interface can be imported directly e.g.:\n\n```\nimport wrapyfi_interfaces.robots.icub_head.interface as icub_head_interface\n```\n\nOr as a broker e.g.:\n\n```\npython3 wrapyfi_interfaces/robots/icub_head/interface.py --get_cam_feed --control_head --control_expressions\n```\n\n## Naming Conventions\n\nTo unify interfaces, we follow the naming conventions specified for getters:\n\n* **acquire_** method prefix: method receiving data over middleware. These include methods which receive values over middleware or execute actions based on peripheral device controls \n(e.g., keyboard capture) to issue an action. Switching between device reading or middleware reading is triggered by switching activation from \"publish\" to \"listen\"\n* **read_** method prefix: instantaneous reading from sensor devices. Similar to **acquire_** methods but readings do not persist for iterations to follow\n* **receive_** method prefix: exclusive reading from middleware. Similar to **acquire_** methods but do not accept changes triggered by sensors or peripheral devices\n\norder of last-mention takes precedence, e.g., a method which exclusively receives data from middleware over Wrapyfi, but also changes instantaneously (**read_**) would have a prefix of **receive_**\n\nWe follow the naming convention specified for setters:\n\n* **update_** or **control_** method prefix: methods directly modifying properties (update) and actuate devices (control) and should not be activated in \"listen\" mode. If such devices must be controlled over middleware, \na corresponding **acquire_**, **read_**, or **receive_** method should be created and set to \"listen\" mode. It is not recommended to call **update_** or **control_** methods from within **acquire_**, **read_**, or **receive_** methods and vice-versa\n* **write_** method prefix: instantaneous changes written to devices. Similar to **update_** or **control_** but changes do not persist on the device for iterations to follow\n* **transmit_** method prefix: exclusive writing to middleware. Similar to **update_** or **control_** but do not communicate with devices through other interfaces or packages. \n\norder of last-mention takes precedence, e.g., a method which exclusively transmits data to middleware over Wrapyfi, but also changes instantaneously (**write_**) would have a prefix of **transmit_**\n\nFollowing the `yarp.RFModule` convention, we name methods accordingly:\n\n* **getPeriod()** method name: returns a float specifying the interval between polling iterations (in milliseconds)\n* **runModule()** method name: calls **updateModule()** in a loop with an interval \n* **updateModule()** method name: triggers **acquire_**, **receive_**, **read_**, **update_**, **control_**, or **write_** methods along with other methods to scan or control all devices per timestep\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmodular-ml%2Fwrapyfi-interfaces","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmodular-ml%2Fwrapyfi-interfaces","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmodular-ml%2Fwrapyfi-interfaces/lists"}