{ "info": { "author": "Lukasz Zmudzinski", "author_email": "lukasz@zmudzinski.me", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "![Under construction](https://img.shields.io/badge/stage-under%20construction-blue.svg)\n![PyPI](https://img.shields.io/pypi/v/robosim.svg)\n![license](https://img.shields.io/github/license/lukzmu/robosim.svg)\n[![Beerpay](https://beerpay.io/lukzmu/robosim/badge.svg?style=flat)](https://beerpay.io/lukzmu/robosim)\n\n# RoboSim\n\n`RoboSim` is a Python 3.6 based simulator for Robotics. I wrote it to test out my PhD AI algorithms and produce paper-ready result images in random mapping environments. The simulator uses `pygame`to present realtime results for robot navigation.\n\n**This project is still under construction, so you might have missing features or bugs.
Please submit issues when that happens.**\n\n##### Features:\n\n- [x] Create randomly generated map,\n- [x] Create paths,\n- [x] Create robots,\n- [x] Run simulation,\n- [ ] Realistic PID controller movement,\n- [ ] Collisions,\n- [ ] Nice looking UI,\n- [ ] Statistics panel,\n- [ ] Sensor simulation,\n- And more... when I think of something else.\n\n## Installation\n\nRoboSim is now available on `pip`, so you just need to run the following command in your command line:\n\n```\npip install robosim\n```\n\n##### Requirements\n\n- `pygame 1.9.3` (didn't test on other).\n\n\n## Using RoboSim\n\n### Map\n\nMap generation is done using the [Random Walk algorithm](https://en.wikipedia.org/wiki/Random_walk).To generate a new map, you need to create a new `Map` object by writing the following code:\n\n```python\nfrom robosim import Map\nmap = Map()\n```\n\nYou can pass the following parameters in the constructor:\n\n- `dimensions` (tuple, default `(32,24)`),\n- `tunnels` (int, default `300`),\n- `tunnel_length` (int, default `10`).\n\nOnce you create the object, the `__generate_map()` function is called, and you can access the 2D-array by using the `generated_map` parameter:\n\n```python\nmap = Map()\nmy_awesome_map_array = map.generated_map\n```\n\nEach map object, has its own map, so you can test out your algorithm on various maps at a time. Below you can see a sample output of the generated map, where `0` mean that the space is used for navigation and `1` that an obstacle is placed there.\n\n```\n[\n [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], \n [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], \n [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], \n [0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], \n [0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], \n [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1], \n [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1], \n [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1], \n [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1], \n [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1], \n [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1], \n [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1], \n [1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1]\n]\n```\n\n### RoboSim\n\nTo run the application, you need to create a `RoboSim` object first:\n\n```python\nfrom robosim import Map, RoboSim\n\n# Create the map\nmap = Map()\n\n# Initialize the simulation\nsim = RoboSim(map)\nsim.run()\n```\n\nThe `RoboSim` **requires** the map object as a parameter, but there are also other optional parameters you can add:\n\n- `debug` (boolean) - let's the simulator know, if you want to \"click out\" the paths,\n- `multipath` (boolean) - allows creating multiple paths in debug mode.\n\nTo start the simulation you need to use the `run()` method. The optional parameters are:\n\n- `title` - sets the window title,\n- `size_mult` - drawing size for obstacles (default `20` pixels).\n\nThe `run()` method, runs the pygame code on a thread, so you can easily start multiple simulations at once.\n\n### Controls\n\nFor now the simulator doesn't have an UI that will allow you to manipulate what is happening. Here is the key list that are used with a description:\n\n| Key | Mode | Description |\n| :-- | :-- | :-- |\n| `Left click` | Normal | Adds start and goal |\n| `Left click` | Debug | Adds path point |\n| `Right click` | Debug | Creates robot |\n| `1` | All | Starts robot movement |\n| `2` | All | Pauses robot movement |\n| `3` | All | Takes screenthos `NYI` |\n| `4` | All | Start/Stop recording `NYI` |\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lukzmu/robosim", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "robosim", "package_url": "https://pypi.org/project/robosim/", "platform": "", "project_url": "https://pypi.org/project/robosim/", "project_urls": { "Homepage": "https://github.com/lukzmu/robosim" }, "release_url": "https://pypi.org/project/robosim/1.0/", "requires_dist": null, "requires_python": "", "summary": "A pygame robotics simulator.", "version": "1.0" }, "last_serial": 3949694, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "7c20fdc8c3cb5d45e60410a3e150c679", "sha256": "bb23ab165ca625ee7ff16998756fa7a3126d91f2df275259fa656f22e9f6964a" }, "downloads": -1, "filename": "robosim-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7c20fdc8c3cb5d45e60410a3e150c679", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3016, "upload_time": "2018-06-11T05:54:03", "url": "https://files.pythonhosted.org/packages/b6/5e/6e3db8dc4d0490e1e342ff389afd57311e6d26fb11111e1bae7466d985a5/robosim-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a17bf82e5a68cd57976bda47a847f51", "sha256": "8dd1b75ab027c8ecbd78d4a6d85fffc4dc89000f1f6d056cfa419eb01c308f0e" }, "downloads": -1, "filename": "robosim-0.1.tar.gz", "has_sig": false, "md5_digest": "6a17bf82e5a68cd57976bda47a847f51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2637, "upload_time": "2018-06-11T05:54:04", "url": "https://files.pythonhosted.org/packages/45/00/62f995ce2123d5f51b00c95c75049be0c29da085c95e45d61d56a79a1242/robosim-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "2dbe2246ae508eee0a769ac13e8c9134", "sha256": "b3d06a11be6f325ffd2b759f0ae5375fdc5c4fd4f9f097e2ec681d4369572169" }, "downloads": -1, "filename": "robosim-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2dbe2246ae508eee0a769ac13e8c9134", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3208, "upload_time": "2018-06-11T07:07:51", "url": "https://files.pythonhosted.org/packages/b1/ce/69daab79df922eba49efa6fd1575909194b8bad1c98192f53928eb97381e/robosim-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "39ac229cb65bae6ab2bb8e8033b37cf5", "sha256": "0284684731bd2f10fb88e4a87a48101d58bd6e90f2ec2a65f55ff65fb7f872b4" }, "downloads": -1, "filename": "robosim-0.1.1.tar.gz", "has_sig": false, "md5_digest": "39ac229cb65bae6ab2bb8e8033b37cf5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2834, "upload_time": "2018-06-11T07:07:52", "url": "https://files.pythonhosted.org/packages/36/ba/d0e1eae89d93df3c61caa737caec07bea54b43fe1829caa59699020d1acf/robosim-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "3597b799d9cd23ad4f10f88762550655", "sha256": "f6ec957d96a8dfcd63ca6debf393a28c59b072b0193e6d60952d72210276d251" }, "downloads": -1, "filename": "robosim-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3597b799d9cd23ad4f10f88762550655", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1830, "upload_time": "2018-06-11T07:30:31", "url": "https://files.pythonhosted.org/packages/79/40/3c5d7da879383f4f6f42eb0c2c9fd0b4bb2e505c5bdecc6baa46cfcde8c3/robosim-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d39e99b5b8894f0c53710e98bd6ec2c", "sha256": "45e9f95790fe9e3af546720afc06fb23d4e860f685e8b94e6ac5bdab600728c1" }, "downloads": -1, "filename": "robosim-0.1.2.tar.gz", "has_sig": false, "md5_digest": "0d39e99b5b8894f0c53710e98bd6ec2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1759, "upload_time": "2018-06-11T07:30:32", "url": "https://files.pythonhosted.org/packages/99/62/7c5994c8808dfb5e4b09073b1f798a939506d527db7e75e714a8dae78b53/robosim-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "49ca97051940ba9a6d4b720f7f24173a", "sha256": "a9afbf7739f2c5f77ea8ce532df038d00e7614d8c647a41053494d4811b72845" }, "downloads": -1, "filename": "robosim-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "49ca97051940ba9a6d4b720f7f24173a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1830, "upload_time": "2018-06-11T08:20:03", "url": "https://files.pythonhosted.org/packages/2e/8f/57b646868febef42bf7ed947f0aacd3c487cd96a90a1a799ab117e7158ea/robosim-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e9c8cdae26151f2058efc47d0b8caee7", "sha256": "1d7eff7aaca0e67dcd9d08575f194b1336870f3cdcbebd2b4f61ebd47cd00647" }, "downloads": -1, "filename": "robosim-0.1.3.tar.gz", "has_sig": false, "md5_digest": "e9c8cdae26151f2058efc47d0b8caee7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1777, "upload_time": "2018-06-11T08:20:04", "url": "https://files.pythonhosted.org/packages/b4/b6/36737248e3141d984153faab0b4e35defbe6913f42273f0a8f3de18c8cb8/robosim-0.1.3.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "4ace7d62451253bf61e70dd3dc6fbe32", "sha256": "4e95f9239975f4cac9257f2590aeafae9563e1be836af70623b647afb8f316f0" }, "downloads": -1, "filename": "robosim-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4ace7d62451253bf61e70dd3dc6fbe32", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2771, "upload_time": "2018-06-11T10:22:16", "url": "https://files.pythonhosted.org/packages/83/f3/27548e7409942fb5a30536f503c29999f93bc95903b8f0ce4294434bbabd/robosim-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dbd861e15f2cf61022ba5e4eb6399d7a", "sha256": "aaed8837e474a767f240fdd6eac0a17e0d0853cdd56067e823a8d6f9a2b23dd3" }, "downloads": -1, "filename": "robosim-1.0.tar.gz", "has_sig": false, "md5_digest": "dbd861e15f2cf61022ba5e4eb6399d7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3032, "upload_time": "2018-06-11T10:22:17", "url": "https://files.pythonhosted.org/packages/eb/7f/ad25f4cac7182c126dbffbe63a0258bc9e079d368a46dd77a8fb35b8a079/robosim-1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4ace7d62451253bf61e70dd3dc6fbe32", "sha256": "4e95f9239975f4cac9257f2590aeafae9563e1be836af70623b647afb8f316f0" }, "downloads": -1, "filename": "robosim-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4ace7d62451253bf61e70dd3dc6fbe32", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2771, "upload_time": "2018-06-11T10:22:16", "url": "https://files.pythonhosted.org/packages/83/f3/27548e7409942fb5a30536f503c29999f93bc95903b8f0ce4294434bbabd/robosim-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dbd861e15f2cf61022ba5e4eb6399d7a", "sha256": "aaed8837e474a767f240fdd6eac0a17e0d0853cdd56067e823a8d6f9a2b23dd3" }, "downloads": -1, "filename": "robosim-1.0.tar.gz", "has_sig": false, "md5_digest": "dbd861e15f2cf61022ba5e4eb6399d7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3032, "upload_time": "2018-06-11T10:22:17", "url": "https://files.pythonhosted.org/packages/eb/7f/ad25f4cac7182c126dbffbe63a0258bc9e079d368a46dd77a8fb35b8a079/robosim-1.0.tar.gz" } ] }