{ "info": { "author": "Mario Garcia", "author_email": "mario.garcia@tum.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Physics", "Topic :: Software Development :: Embedded Systems", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# AHRS: Attitude and Heading Reference Systems\n\nAHRS is a zoo of functions and objects written in Python helping you to estimate the orientation and position of robotic systems.\n\nOrginally, an [AHRS](https://en.wikipedia.org/wiki/Attitude_and_heading_reference_system) is defined as a set of orthogonal sensors providing attitude information about an aircraft. This field is now expanding to smaller devices, like wearables, automated transportation and all kinds of robots in motion.\n\nThe module __AHRS__ is developed with a focus on fast prototyping and easy modularity.\n\nAHRS is compatible with __Python 3.6__ and above.\n\n## Installation\n\nAHRS may be installed using [pip](https://pip.pypa.io):\n\n```sh\npip install ahrs\n```\n\nOr using the latest version from the repository:\n\n```sh\ngit clone https://github.com/Mayitzin/ahrs.git\ncd ahrs\npython setup.py install\n```\n\nAHRS depends on the most distributed packages of Python. If you don't have them, they will be automatically downloaded and installed.\n\n## Using AHRS\n\nTo play with orientations, for example, we can use the `orientation` module.\n\n```py\n>>> import ahrs\n>>> # Rotation matrix of 30.0 degrees around X-axis\n... ahrs.common.orientation.rotation('x', 30.0)\narray([[ 1. , 0. , 0. ],\n [ 0. , 0.8660254, -0.5 ],\n [ 0. , 0.5 , 0.8660254]])\n>>> # Rotation sequence of the form: R_y(10.0)@R_x(20.0)@R_z(30.0)\n... ahrs.common.orientation.rot_seq('yXy', [10.0, 20.0, 30.0])\narray([[ 0.77128058, 0.05939117, 0.63371836],\n [ 0.17101007, 0.93969262, -0.29619813],\n [-0.61309202, 0.33682409, 0.71461018]])\n```\n\nIt also works nicely with Quaternions.\n\n```py\n>>> import numpy as np\n>>> q = np.random.random(4)\n>>> # It automatically normalizes any given vector\n... ahrs.common.orientation.q2R(q)\narray([[ 0.76811067, 0.3546719 , 0.53311709],\n [ 0.55044928, 0.05960693, -0.83273802],\n [-0.32712625, 0.93308888, -0.14944417]])\n```\n\n`ahrs` also includes a module that simplifies data loading and visualizing\n\n```py\n>>> data = ahrs.utils.io.load(\"ExampleData.mat\")\n>>> ahrs.utils.plot_sensors(data.gyr, data.acc, data.mag)\n```\n\n![Sensor Plotting](plot_sensors_screenshot.png)\n\nIf you want to use the sensor data to estimate the attitude, use the `filters` module that includes various (more coming) algorithms for it.\n\n```py\n>>> madgwick = ahrs.filters.Madgwick()\n>>> Q = np.tile([1., 0., 0., 0.], (data.num_samples, 1)) # Allocate an array for all quaternions\n>>> d2g = ahrs.common.DEG2RAD # Constant to convert degrees to radians\n>>> for t in range(1, data.num_samples):\n... Q[t] = madgwick.updateMARG(d2g*data.gyr[t], data.acc[t], data.mag[t], Q[t-1])\n...\n>>> ahrs.utils.plot_quaternions(Q)\n```\n\n![Quaternion Plotting](plot_quaternions_screenshot.png)\n\n## Documentation\n\nA comprehensive documentation, with examples, will soon come to [Read the Docs](https://docs.readthedocs.io/).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/Mayitzin/ahrs/archive/master/ahrs-master.zip", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Mayitzin/ahrs/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "AHRS", "package_url": "https://pypi.org/project/AHRS/", "platform": "", "project_url": "https://pypi.org/project/AHRS/", "project_urls": { "Bug Tracker": "https://github.com/Mayitzin/ahrs/issues", "Download": "https://github.com/Mayitzin/ahrs/archive/master/ahrs-master.zip", "Homepage": "https://github.com/Mayitzin/ahrs/" }, "release_url": "https://pypi.org/project/AHRS/0.1.2.post3/", "requires_dist": [ "numpy", "scipy", "matplotlib" ], "requires_python": "", "summary": "Attitude and Heading Reference Systems.", "version": "0.1.2.post3" }, "last_serial": 5396880, "releases": { "0.1.2.post2": [ { "comment_text": "", "digests": { "md5": "e849d62dec58ddde06185d1b3ee4f5ad", "sha256": "bdb698c0f1ec0334a5fb96616aae55627b14805addc1741e6b7e33924d5556f8" }, "downloads": -1, "filename": "AHRS-0.1.2.post2-py3-none-any.whl", "has_sig": false, "md5_digest": "e849d62dec58ddde06185d1b3ee4f5ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21980, "upload_time": "2019-06-08T23:41:05", "url": "https://files.pythonhosted.org/packages/c4/1b/804a5a4ddd6bd4dc6aee613e87fac4fee3534487324eb3524a6d8bc43f9e/AHRS-0.1.2.post2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "522fc0f34cb4316708a631fd7f3ab35e", "sha256": "059ae8b323f6cbee6c6e758ac282d40d55fc0a61e64cd7af0f07f947c751e9dc" }, "downloads": -1, "filename": "AHRS-0.1.2.post2.tar.gz", "has_sig": false, "md5_digest": "522fc0f34cb4316708a631fd7f3ab35e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15976, "upload_time": "2019-06-08T23:41:08", "url": "https://files.pythonhosted.org/packages/9e/b0/194559fea5b5f60164bf9352bf2bfa20b22d224a91977a788995c4fa4923/AHRS-0.1.2.post2.tar.gz" } ], "0.1.2.post3": [ { "comment_text": "", "digests": { "md5": "08e4e80ccef2bf196fefb914b945a405", "sha256": "71ea83dafdceb72f6affe897e5e9a04d16c94a1106e16cb15365f8ba40f00afb" }, "downloads": -1, "filename": "AHRS-0.1.2.post3-py3-none-any.whl", "has_sig": false, "md5_digest": "08e4e80ccef2bf196fefb914b945a405", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23900, "upload_time": "2019-06-13T17:02:27", "url": "https://files.pythonhosted.org/packages/fe/00/6f1e6d5a54a73def322a3c5996e12869b4aa9948c788482a68ec7c18a67e/AHRS-0.1.2.post3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69c81a9fe42ca835d47150340207bb7c", "sha256": "8d7fe2f796474a431da865c49de0520ed6c961421be1bb84b73d46097d05bf45" }, "downloads": -1, "filename": "AHRS-0.1.2.post3.tar.gz", "has_sig": false, "md5_digest": "69c81a9fe42ca835d47150340207bb7c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18029, "upload_time": "2019-06-13T17:02:29", "url": "https://files.pythonhosted.org/packages/37/fd/41a29f8f491b0b87634a874715f56f6bdaa49202e1701e1c588bbf6129dd/AHRS-0.1.2.post3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "08e4e80ccef2bf196fefb914b945a405", "sha256": "71ea83dafdceb72f6affe897e5e9a04d16c94a1106e16cb15365f8ba40f00afb" }, "downloads": -1, "filename": "AHRS-0.1.2.post3-py3-none-any.whl", "has_sig": false, "md5_digest": "08e4e80ccef2bf196fefb914b945a405", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23900, "upload_time": "2019-06-13T17:02:27", "url": "https://files.pythonhosted.org/packages/fe/00/6f1e6d5a54a73def322a3c5996e12869b4aa9948c788482a68ec7c18a67e/AHRS-0.1.2.post3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69c81a9fe42ca835d47150340207bb7c", "sha256": "8d7fe2f796474a431da865c49de0520ed6c961421be1bb84b73d46097d05bf45" }, "downloads": -1, "filename": "AHRS-0.1.2.post3.tar.gz", "has_sig": false, "md5_digest": "69c81a9fe42ca835d47150340207bb7c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18029, "upload_time": "2019-06-13T17:02:29", "url": "https://files.pythonhosted.org/packages/37/fd/41a29f8f491b0b87634a874715f56f6bdaa49202e1701e1c588bbf6129dd/AHRS-0.1.2.post3.tar.gz" } ] }